/*!jQuery v2.1.3 | (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={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,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=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.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},n.extend=n.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||n.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&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!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=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.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?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.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),n.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||n.guid++,f):void 0},now:Date.now,support:k}),n.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=n.type(a);return"function"===c||n.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,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=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)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(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 pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(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 p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.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},B=b?function(a,b){if(a===b)return l=!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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.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=gb.selectors={cacheLength:50,createPseudo:ib,match:X,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(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===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]||gb.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]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(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(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.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.replace(Q," ")+" ").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(),s=!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&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&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]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)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&&(s&&((l[u]||(l[u]={}))[a]=[w,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()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(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),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?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===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.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 Z.test(a.nodeName)},input:function(a){return Y.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:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(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]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[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?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;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=[w,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[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(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 ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(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 wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.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)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.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 n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.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&&n(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}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.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?n(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&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(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(n.unique(n.merge(this.get(),n(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}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.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){n.each(b,function(b,c){var d=n.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&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.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},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.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?n.extend(a,d):d}},e={};return d.pipe=d.then,n.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&&n.isFunction(a.promise)?e:0,g=1===f?a:n.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]&&n.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;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(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};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.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,n.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(n.isEmptyObject(f))n.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,n.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{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.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!n.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)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.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)}}),n.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--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.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=n.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)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.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"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,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),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,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])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],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||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.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]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.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=((n.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?n(e,this).index(i)>=0:n.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||l,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[n.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 n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),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&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.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(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.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))}}}),n.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 n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.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,n(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(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.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 n.nodeName(a,"table")&&n.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++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.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&&n.nodeName(a,b)?n.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)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.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,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.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;n.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===n.inArray(e,d))&&(i=n.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=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.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?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.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&&(n.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 n.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&&(n.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,n.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,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.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(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<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(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,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||n.contains(a.ownerDocument,a)||(g=n.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=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.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+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.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"===n.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&&(k.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)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.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}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!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=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.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(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.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||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.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"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.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)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.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)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.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||(n.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?n.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=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.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)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.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]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.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,n.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=n.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,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(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=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.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=n.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:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.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 n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.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)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.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)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.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=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.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=n.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)&&n.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=n.timers,g=d?d.length:0;for(c.finish=!0,n.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})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.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=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.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?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.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 n.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=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.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?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.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;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.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||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.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}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(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=n.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(n.isFunction(a))return this.each(function(b){n(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?n.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(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(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;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.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)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},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||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.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){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.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=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.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)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.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 rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.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 sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(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 uc(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}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,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":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.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=gc.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(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.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=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.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]?", "+nc+"; 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=rc(mc,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=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.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?o.resolveWith(l,[r,x,v]):o.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]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(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(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;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 Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[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=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<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)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.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,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.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),n.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)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.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,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(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"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(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)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.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 n.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?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});;/*! modernizr 3.5.0 (Custom Build) | MIT *
* https://modernizr.com/download/?-flexbox-flexboxlegacy-flexboxtweener-flexwrap-fontface-svg-setclasses !*/!function(e,t,n){function r(e,t){return typeof e===t}function s(){var e,t,n,s,o,i,a;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n<t.options.aliases.length;n++)e.push(t.options.aliases[n].toLowerCase());for(s=r(t.fn,"function")?t.fn():t.fn,o=0;o<e.length;o++)i=e[o],a=i.split("."),1===a.length?Modernizr[a[0]]=s:(!Modernizr[a[0]]||Modernizr[a[0]]instanceof Boolean||(Modernizr[a[0]]=new Boolean(Modernizr[a[0]])),Modernizr[a[0]][a[1]]=s),w.push((s?"":"no-")+a.join("-"))}}function o(e){var t=S.className,n=Modernizr._config.classPrefix||"";if(b&&(t=t.baseVal),Modernizr._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}Modernizr._config.enableClasses&&(t+=" "+n+e.join(" "+n),b?S.className.baseVal=t:S.className=t)}function i(){return"function"!=typeof t.createElement?t.createElement(arguments[0]):b?t.createElementNS.call(t,"http://www.w3.org/2000/svg",arguments[0]):t.createElement.apply(t,arguments)}function a(){var e=t.body;return e||(e=i(b?"svg":"body"),e.fake=!0),e}function l(e,n,r,s){var o,l,f,u,c="modernizr",d=i("div"),p=a();if(parseInt(r,10))for(;r--;)f=i("div"),f.id=s?s[r]:c+(r+1),d.appendChild(f);return o=i("style"),o.type="text/css",o.id="s"+c,(p.fake?p:d).appendChild(o),p.appendChild(d),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(t.createTextNode(e)),d.id=c,p.fake&&(p.style.background="",p.style.overflow="hidden",u=S.style.overflow,S.style.overflow="hidden",S.appendChild(p)),l=n(d,e),p.fake?(p.parentNode.removeChild(p),S.style.overflow=u,S.offsetHeight):d.parentNode.removeChild(d),!!l}function f(e,t){return!!~(""+e).indexOf(t)}function u(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function c(e,t){return function(){return e.apply(t,arguments)}}function d(e,t,n){var s;for(var o in e)if(e[o]in t)return n===!1?e[o]:(s=t[e[o]],r(s,"function")?c(s,n||t):s);return!1}function p(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function m(t,n,r){var s;if("getComputedStyle"in e){s=getComputedStyle.call(e,t,n);var o=e.console;if(null!==s)r&&(s=s.getPropertyValue(r));else if(o){var i=o.error?"error":"log";o[i].call(o,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}}else s=!n&&t.currentStyle&&t.currentStyle[r];return s}function g(t,r){var s=t.length;if("CSS"in e&&"supports"in e.CSS){for(;s--;)if(e.CSS.supports(p(t[s]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var o=[];s--;)o.push("("+p(t[s])+":"+r+")");return o=o.join(" or "),l("@supports ("+o+") { #modernizr { position: absolute; } }",function(e){return"absolute"==m(e,null,"position")})}return n}function v(e,t,s,o){function a(){c&&(delete A.style,delete A.modElem)}if(o=r(o,"undefined")?!1:o,!r(s,"undefined")){var l=g(e,s);if(!r(l,"undefined"))return l}for(var c,d,p,m,v,h=["modernizr","tspan","samp"];!A.style&&h.length;)c=!0,A.modElem=i(h.shift()),A.style=A.modElem.style;for(p=e.length,d=0;p>d;d++)if(m=e[d],v=A.style[m],f(m,"-")&&(m=u(m)),A.style[m]!==n){if(o||r(s,"undefined"))return a(),"pfx"==t?m:!0;try{A.style[m]=s}catch(y){}if(A.style[m]!=v)return a(),"pfx"==t?m:!0}return a(),!1}function h(e,t,n,s,o){var i=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+z.join(i+" ")+i).split(" ");return r(t,"string")||r(t,"undefined")?v(a,t,s,o):(a=(e+" "+N.join(i+" ")+i).split(" "),d(a,t,n))}function y(e,t,r){return h(e,n,n,t,r)}var w=[],x=[],C={_version:"3.5.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=C,Modernizr=new Modernizr,Modernizr.addTest("svg",!!t.createElementNS&&!!t.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect);var S=t.documentElement,b="svg"===S.nodeName.toLowerCase(),_=C.testStyles=l,T=function(){var e=navigator.userAgent,t=e.match(/w(eb)?osbrowser/gi),n=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9;return t||n}();T?Modernizr.addTest("fontface",!1):_('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),s=r.sheet||r.styleSheet,o=s?s.cssRules&&s.cssRules[0]?s.cssRules[0].cssText:s.cssText||"":"",i=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);Modernizr.addTest("fontface",i)});var E="Moz O ms Webkit",z=C._config.usePrefixes?E.split(" "):[];C._cssomPrefixes=z;var N=C._config.usePrefixes?E.toLowerCase().split(" "):[];C._domPrefixes=N;var P={elem:i("modernizr")};Modernizr._q.push(function(){delete P.elem});var A={style:P.elem.style};Modernizr._q.unshift(function(){delete A.style}),C.testAllProps=h,C.testAllProps=y,Modernizr.addTest("flexbox",y("flexBasis","1px",!0)),Modernizr.addTest("flexboxlegacy",y("boxDirection","reverse",!0)),Modernizr.addTest("flexboxtweener",y("flexAlign","end",!0)),Modernizr.addTest("flexwrap",y("flexWrap","wrap",!0)),s(),o(w),delete C.addTest,delete C.addAsyncTest;for(var R=0;R<Modernizr._q.length;R++)Modernizr._q[R]();e.Modernizr=Modernizr}(window,document);;(function(){'use strict';/*!http://mths.be/codepointat v0.2.0 by @mathias*/if(!String.prototype.codePointAt){(function(){'use strict';var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var codePointAt=function(position){if(this==null){throw TypeError();}
var string=String(this);var size=string.length;var index=position?Number(position):0;if(index!=index){index=0;}
if(index<0||index>=size){return undefined;}
var first=string.charCodeAt(index);var second;if(first>=0xD800&&first<=0xDBFF&&size>index+1){second=string.charCodeAt(index+1);if(second>=0xDC00&&second<=0xDFFF){return(first-0xD800)*0x400+second-0xDC00+0x10000;}}
return first;};if(defineProperty){defineProperty(String.prototype,'codePointAt',{'value':codePointAt,'configurable':true,'writable':true});}else{String.prototype.codePointAt=codePointAt;}}());}/*!http://mths.be/repeat v0.2.0 by @mathias*/
if(!String.prototype.repeat){(function(){'use strict';var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var repeat=function(count){if(this==null){throw TypeError();}
var string=String(this);var n=count?Number(count):0;if(n!=n){n=0;}
if(n<0||n==Infinity){throw RangeError();}
var result='';while(n){if(n%2==1){result+=string;}
if(n>1){string+=string;}
n>>=1;}
return result;};if(defineProperty){defineProperty(String.prototype,'repeat',{'value':repeat,'configurable':true,'writable':true});}else{String.prototype.repeat=repeat;}}());}/*!https://mths.be/includes v0.2.0 by @mathias*/
if(!String.prototype.includes){(function(){'use strict';var toString={}.toString;var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var indexOf=''.indexOf;var includes=function(search){if(this==null){throw TypeError();}
var string=String(this);if(search&&toString.call(search)=='[object RegExp]'){throw TypeError();}
var stringLength=string.length;var searchString=String(search);var searchLength=searchString.length;var position=arguments.length>1?arguments[1]:undefined;var pos=position?Number(position):0;if(pos!=pos){pos=0;}
var start=Math.min(Math.max(pos,0),stringLength);if(searchLength+start>stringLength){return false;}
return indexOf.call(string,searchString,pos)!=-1;};if(defineProperty){defineProperty(String.prototype,'includes',{'value':includes,'configurable':true,'writable':true});}else{String.prototype.includes=includes;}}());}/*!http://mths.be/startswith v0.2.0 by @mathias*/
if(!String.prototype.startsWith){(function(){'use strict';var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var toString={}.toString;var startsWith=function(search){if(this==null){throw TypeError();}
var string=String(this);if(search&&toString.call(search)=='[object RegExp]'){throw TypeError();}
var stringLength=string.length;var searchString=String(search);var searchLength=searchString.length;var position=arguments.length>1?arguments[1]:undefined;var pos=position?Number(position):0;if(pos!=pos){pos=0;}
var start=Math.min(Math.max(pos,0),stringLength);if(searchLength+start>stringLength){return false;}
var index=-1;while(++index<searchLength){if(string.charCodeAt(start+index)!=searchString.charCodeAt(index)){return false;}}
return true;};if(defineProperty){defineProperty(String.prototype,'startsWith',{'value':startsWith,'configurable':true,'writable':true});}else{String.prototype.startsWith=startsWith;}}());}/*!http://mths.be/endswith v0.2.0 by @mathias*/
if(!String.prototype.endsWith){(function(){'use strict';var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var toString={}.toString;var endsWith=function(search){if(this==null){throw TypeError();}
var string=String(this);if(search&&toString.call(search)=='[object RegExp]'){throw TypeError();}
var stringLength=string.length;var searchString=String(search);var searchLength=searchString.length;var pos=stringLength;if(arguments.length>1){var position=arguments[1];if(position!==undefined){pos=position?Number(position):0;if(pos!=pos){pos=0;}}}
var end=Math.min(Math.max(pos,0),stringLength);var start=end-searchLength;if(start<0){return false;}
var index=-1;while(++index<searchLength){if(string.charCodeAt(start+index)!=searchString.charCodeAt(index)){return false;}}
return true;};if(defineProperty){defineProperty(String.prototype,'endsWith',{'value':endsWith,'configurable':true,'writable':true});}else{String.prototype.endsWith=endsWith;}}());}/*!http://mths.be/fromcodepoint v0.2.1 by @mathias*/
if(!String.fromCodePoint){(function(){var defineProperty=(function(){try{var object={};var $defineProperty=Object.defineProperty;var result=$defineProperty(object,object,object)&&$defineProperty;}catch(error){}
return result;}());var stringFromCharCode=String.fromCharCode;var floor=Math.floor;var fromCodePoint=function(_){var MAX_SIZE=0x4000;var codeUnits=[];var highSurrogate;var lowSurrogate;var index=-1;var length=arguments.length;if(!length){return '';}
var result='';while(++index<length){var codePoint=Number(arguments[index]);if(!isFinite(codePoint)||codePoint<0||codePoint>0x10FFFF||floor(codePoint)!=codePoint){throw RangeError('Invalid code point: '+codePoint);}
if(codePoint<=0xFFFF){codeUnits.push(codePoint);}else{codePoint-=0x10000;highSurrogate=(codePoint>>10)+0xD800;lowSurrogate=(codePoint%0x400)+0xDC00;codeUnits.push(highSurrogate,lowSurrogate);}
if(index+1==length||codeUnits.length>MAX_SIZE){result+=stringFromCharCode.apply(null,codeUnits);codeUnits.length=0;}}
return result;};if(defineProperty){defineProperty(String,'fromCodePoint',{'value':fromCodePoint,'configurable':true,'writable':true});}else{String.fromCodePoint=fromCodePoint;}}());}
function arrayFrom(arrayLike){var arr=[];for(var i=0;i<arrayLike.length;i++)arr.push(arrayLike[i]);return arr;}
Object.defineProperty(String,"raw",{configurable:true,enumerable:false,writable:true,value:function raw(callSite,substitutions){var template;callSite=callSite!=null?callSite:{};substitutions=arguments.length>1?arrayFrom(arguments).slice(1):[];try{template=arrayFrom(callSite.raw);}catch(e){throw new TypeError('Cannot convert undefined or null to object');}
return template.map(function(chunk,i){if(callSite.raw.length<=i){return chunk;}
return substitutions[i-1]!=null?substitutions[i-1]+chunk:chunk;}).join("");}});}());(function(){if(!Array.prototype.find){Object.defineProperty(Array.prototype,'find',{value:function(predicate){if(this==null){throw new TypeError('"this" is null or not defined');}
var o=Object(this);var len=o.length>>>0;if(typeof predicate!=='function'){throw new TypeError('predicate must be a function');}
var thisArg=arguments[1];var k=0;while(k<len){var kValue=o[k];if(predicate.call(thisArg,kValue,k,o)){return kValue;}
k++;}
return undefined;},configurable:true,writable:true});}
if(!Array.prototype.includes){Object.defineProperty(Array.prototype,'includes',{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined');}
var o=Object(this);var len=o.length>>>0;if(len===0){return false;}
var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);function sameValueZero(x,y){return x===y||(typeof x==='number'&&typeof y==='number'&&isNaN(x)&&isNaN(y));}
while(k<len){if(sameValueZero(o[k],searchElement)){return true;}
k++;}
return false;}});}})();(function(){if(typeof Object.assign!='function'){Object.defineProperty(Object,"assign",{value:function assign(target,varArgs){'use strict';if(target==null){throw new TypeError('Cannot convert undefined or null to object');}
var to=Object(target);for(var index=1;index<arguments.length;index++){var nextSource=arguments[index];if(nextSource!=null){for(var nextKey in nextSource){if(Object.prototype.hasOwnProperty.call(nextSource,nextKey)){to[nextKey]=nextSource[nextKey];}}}}
return to;},writable:true,configurable:true});}})();(function(){(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory():typeof define==='function'&&define.amd?define(factory):(factory());}(this,(function(){'use strict';function finallyConstructor(callback){var constructor=this.constructor;return this.then(function(value){return constructor.resolve(callback()).then(function(){return value;});},function(reason){return constructor.resolve(callback()).then(function(){return constructor.reject(reason);});});}
var setTimeoutFunc=setTimeout;function noop(){}
function bind(fn,thisArg){return function(){fn.apply(thisArg,arguments);};}
function Promise(fn){if(!(this instanceof Promise))
throw new TypeError('Promises must be constructed via new');if(typeof fn!=='function')throw new TypeError('not a function');this._state=0;this._handled=false;this._value=undefined;this._deferreds=[];doResolve(fn,this);}
function handle(self,deferred){while(self._state===3){self=self._value;}
if(self._state===0){self._deferreds.push(deferred);return;}
self._handled=true;Promise._immediateFn(function(){var cb=self._state===1?deferred.onFulfilled:deferred.onRejected;if(cb===null){(self._state===1?resolve:reject)(deferred.promise,self._value);return;}
var ret;try{ret=cb(self._value);}catch(e){reject(deferred.promise,e);return;}
resolve(deferred.promise,ret);});}
function resolve(self,newValue){try{if(newValue===self)
throw new TypeError('A promise cannot be resolved with itself.');if(newValue&&(typeof newValue==='object'||typeof newValue==='function')){var then=newValue.then;if(newValue instanceof Promise){self._state=3;self._value=newValue;finale(self);return;}else if(typeof then==='function'){doResolve(bind(then,newValue),self);return;}}
self._state=1;self._value=newValue;finale(self);}catch(e){reject(self,e);}}
function reject(self,newValue){self._state=2;self._value=newValue;finale(self);}
function finale(self){if(self._state===2&&self._deferreds.length===0){Promise._immediateFn(function(){if(!self._handled){Promise._unhandledRejectionFn(self._value);}});}
for(var i=0,len=self._deferreds.length;i<len;i++){handle(self,self._deferreds[i]);}
self._deferreds=null;}
function Handler(onFulfilled,onRejected,promise){this.onFulfilled=typeof onFulfilled==='function'?onFulfilled:null;this.onRejected=typeof onRejected==='function'?onRejected:null;this.promise=promise;}
function doResolve(fn,self){var done=false;try{fn(function(value){if(done)return;done=true;resolve(self,value);},function(reason){if(done)return;done=true;reject(self,reason);});}catch(ex){if(done)return;done=true;reject(self,ex);}}
Promise.prototype['catch']=function(onRejected){return this.then(null,onRejected);};Promise.prototype.then=function(onFulfilled,onRejected){var prom=new this.constructor(noop);handle(this,new Handler(onFulfilled,onRejected,prom));return prom;};Promise.prototype['finally']=finallyConstructor;Promise.all=function(arr){return new Promise(function(resolve,reject){if(!arr||typeof arr.length==='undefined')
throw new TypeError('Promise.all accepts an array');var args=Array.prototype.slice.call(arr);if(args.length===0)return resolve([]);var remaining=args.length;function res(i,val){try{if(val&&(typeof val==='object'||typeof val==='function')){var then=val.then;if(typeof then==='function'){then.call(val,function(val){res(i,val);},reject);return;}}
args[i]=val;if(--remaining===0){resolve(args);}}catch(ex){reject(ex);}}
for(var i=0;i<args.length;i++){res(i,args[i]);}});};Promise.resolve=function(value){if(value&&typeof value==='object'&&value.constructor===Promise){return value;}
return new Promise(function(resolve){resolve(value);});};Promise.reject=function(value){return new Promise(function(resolve,reject){reject(value);});};Promise.race=function(values){return new Promise(function(resolve,reject){for(var i=0,len=values.length;i<len;i++){values[i].then(resolve,reject);}});};Promise._immediateFn=(typeof setImmediate==='function'&&function(fn){setImmediate(fn);})||function(fn){setTimeoutFunc(fn,0);};Promise._unhandledRejectionFn=function _unhandledRejectionFn(err){if(typeof console!=='undefined'&&console){console.warn('Possible Unhandled Promise Rejection:',err);}};var globalNS=(function(){if(typeof self!=='undefined'){return self;}
if(typeof window!=='undefined'){return window;}
if(typeof global!=='undefined'){return global;}
throw new Error('unable to locate global object');})();if(!('Promise'in globalNS)){globalNS['Promise']=Promise;}else if(!globalNS.Promise.prototype['finally']){globalNS.Promise.prototype['finally']=finallyConstructor;}})));})();(function(){'use strict';if(typeof window!=='object'){return;}
if('IntersectionObserver'in window&&'IntersectionObserverEntry'in window&&'intersectionRatio'in window.IntersectionObserverEntry.prototype){if(!('isIntersecting'in window.IntersectionObserverEntry.prototype)){Object.defineProperty(window.IntersectionObserverEntry.prototype,'isIntersecting',{get:function(){return this.intersectionRatio>0;}});}
return;}
var document=window.document;var registry=[];function IntersectionObserverEntry(entry){this.time=entry.time;this.target=entry.target;this.rootBounds=entry.rootBounds;this.boundingClientRect=entry.boundingClientRect;this.intersectionRect=entry.intersectionRect||getEmptyRect();this.isIntersecting=!!entry.intersectionRect;var targetRect=this.boundingClientRect;var targetArea=targetRect.width*targetRect.height;var intersectionRect=this.intersectionRect;var intersectionArea=intersectionRect.width*intersectionRect.height;if(targetArea){this.intersectionRatio=Number((intersectionArea/targetArea).toFixed(4));}else{this.intersectionRatio=this.isIntersecting?1:0;}}
function IntersectionObserver(callback,opt_options){var options=opt_options||{};if(typeof callback!='function'){throw new Error('callback must be a function');}
if(options.root&&options.root.nodeType!=1){throw new Error('root must be an Element');}
this._checkForIntersections=throttle(this._checkForIntersections.bind(this),this.THROTTLE_TIMEOUT);this._callback=callback;this._observationTargets=[];this._queuedEntries=[];this._rootMarginValues=this._parseRootMargin(options.rootMargin);this.thresholds=this._initThresholds(options.threshold);this.root=options.root||null;this.rootMargin=this._rootMarginValues.map(function(margin){return margin.value+margin.unit;}).join(' ');}
IntersectionObserver.prototype.THROTTLE_TIMEOUT=100;IntersectionObserver.prototype.POLL_INTERVAL=null;IntersectionObserver.prototype.USE_MUTATION_OBSERVER=true;IntersectionObserver.prototype.observe=function(target){var isTargetAlreadyObserved=this._observationTargets.some(function(item){return item.element==target;});if(isTargetAlreadyObserved){return;}
if(!(target&&target.nodeType==1)){throw new Error('target must be an Element');}
this._registerInstance();this._observationTargets.push({element:target,entry:null});this._monitorIntersections();this._checkForIntersections();};IntersectionObserver.prototype.unobserve=function(target){this._observationTargets=this._observationTargets.filter(function(item){return item.element!=target;});if(!this._observationTargets.length){this._unmonitorIntersections();this._unregisterInstance();}};IntersectionObserver.prototype.disconnect=function(){this._observationTargets=[];this._unmonitorIntersections();this._unregisterInstance();};IntersectionObserver.prototype.takeRecords=function(){var records=this._queuedEntries.slice();this._queuedEntries=[];return records;};IntersectionObserver.prototype._initThresholds=function(opt_threshold){var threshold=opt_threshold||[0];if(!Array.isArray(threshold))threshold=[threshold];return threshold.sort().filter(function(t,i,a){if(typeof t!='number'||isNaN(t)||t<0||t>1){throw new Error('threshold must be a number between 0 and 1 inclusively');}
return t!==a[i-1];});};IntersectionObserver.prototype._parseRootMargin=function(opt_rootMargin){var marginString=opt_rootMargin||'0px';var margins=marginString.split(/\s+/).map(function(margin){var parts=/^(-?\d*\.?\d+)(px|%)$/.exec(margin);if(!parts){throw new Error('rootMargin must be specified in pixels or percent');}
return{value:parseFloat(parts[1]),unit:parts[2]};});margins[1]=margins[1]||margins[0];margins[2]=margins[2]||margins[0];margins[3]=margins[3]||margins[1];return margins;};IntersectionObserver.prototype._monitorIntersections=function(){if(!this._monitoringIntersections){this._monitoringIntersections=true;if(this.POLL_INTERVAL){this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL);}
else{addEvent(window,'resize',this._checkForIntersections,true);addEvent(document,'scroll',this._checkForIntersections,true);if(this.USE_MUTATION_OBSERVER&&'MutationObserver'in window){this._domObserver=new MutationObserver(this._checkForIntersections);this._domObserver.observe(document,{attributes:true,childList:true,characterData:true,subtree:true});}}}};IntersectionObserver.prototype._unmonitorIntersections=function(){if(this._monitoringIntersections){this._monitoringIntersections=false;clearInterval(this._monitoringInterval);this._monitoringInterval=null;removeEvent(window,'resize',this._checkForIntersections,true);removeEvent(document,'scroll',this._checkForIntersections,true);if(this._domObserver){this._domObserver.disconnect();this._domObserver=null;}}};IntersectionObserver.prototype._checkForIntersections=function(){var rootIsInDom=this._rootIsInDom();var rootRect=rootIsInDom?this._getRootRect():getEmptyRect();this._observationTargets.forEach(function(item){var target=item.element;var targetRect=getBoundingClientRect(target);var rootContainsTarget=this._rootContainsTarget(target);var oldEntry=item.entry;var intersectionRect=rootIsInDom&&rootContainsTarget&&this._computeTargetAndRootIntersection(target,rootRect);var newEntry=item.entry=new IntersectionObserverEntry({time:now(),target:target,boundingClientRect:targetRect,rootBounds:rootRect,intersectionRect:intersectionRect});if(!oldEntry){this._queuedEntries.push(newEntry);}else if(rootIsInDom&&rootContainsTarget){if(this._hasCrossedThreshold(oldEntry,newEntry)){this._queuedEntries.push(newEntry);}}else{if(oldEntry&&oldEntry.isIntersecting){this._queuedEntries.push(newEntry);}}},this);if(this._queuedEntries.length){this._callback(this.takeRecords(),this);}};IntersectionObserver.prototype._computeTargetAndRootIntersection=function(target,rootRect){if(window.getComputedStyle(target).display=='none')return;var targetRect=getBoundingClientRect(target);var intersectionRect=targetRect;var parent=getParentNode(target);var atRoot=false;while(!atRoot){var parentRect=null;var parentComputedStyle=parent.nodeType==1?window.getComputedStyle(parent):{};if(parentComputedStyle.display=='none')return;if(parent==this.root||parent==document){atRoot=true;parentRect=rootRect;}else{if(parent!=document.body&&parent!=document.documentElement&&parentComputedStyle.overflow!='visible'){parentRect=getBoundingClientRect(parent);}}
if(parentRect){intersectionRect=computeRectIntersection(parentRect,intersectionRect);if(!intersectionRect)break;}
parent=getParentNode(parent);}
return intersectionRect;};IntersectionObserver.prototype._getRootRect=function(){var rootRect;if(this.root){rootRect=getBoundingClientRect(this.root);}else{var html=document.documentElement;var body=document.body;rootRect={top:0,left:0,right:html.clientWidth||body.clientWidth,width:html.clientWidth||body.clientWidth,bottom:html.clientHeight||body.clientHeight,height:html.clientHeight||body.clientHeight};}
return this._expandRectByRootMargin(rootRect);};IntersectionObserver.prototype._expandRectByRootMargin=function(rect){var margins=this._rootMarginValues.map(function(margin,i){return margin.unit=='px'?margin.value:margin.value*(i%2?rect.width:rect.height)/100;});var newRect={top:rect.top-margins[0],right:rect.right+margins[1],bottom:rect.bottom+margins[2],left:rect.left-margins[3]};newRect.width=newRect.right-newRect.left;newRect.height=newRect.bottom-newRect.top;return newRect;};IntersectionObserver.prototype._hasCrossedThreshold=function(oldEntry,newEntry){var oldRatio=oldEntry&&oldEntry.isIntersecting?oldEntry.intersectionRatio||0:-1;var newRatio=newEntry.isIntersecting?newEntry.intersectionRatio||0:-1;if(oldRatio===newRatio)return;for(var i=0;i<this.thresholds.length;i++){var threshold=this.thresholds[i];if(threshold==oldRatio||threshold==newRatio||threshold<oldRatio!==threshold<newRatio){return true;}}};IntersectionObserver.prototype._rootIsInDom=function(){return!this.root||containsDeep(document,this.root);};IntersectionObserver.prototype._rootContainsTarget=function(target){return containsDeep(this.root||document,target);};IntersectionObserver.prototype._registerInstance=function(){if(registry.indexOf(this)<0){registry.push(this);}};IntersectionObserver.prototype._unregisterInstance=function(){var index=registry.indexOf(this);if(index!=-1)registry.splice(index,1);};function now(){return window.performance&&performance.now&&performance.now();}
function throttle(fn,timeout){var timer=null;return function(){if(!timer){timer=setTimeout(function(){fn();timer=null;},timeout);}};}
function addEvent(node,event,fn,opt_useCapture){if(typeof node.addEventListener=='function'){node.addEventListener(event,fn,opt_useCapture||false);}
else if(typeof node.attachEvent=='function'){node.attachEvent('on'+event,fn);}}
function removeEvent(node,event,fn,opt_useCapture){if(typeof node.removeEventListener=='function'){node.removeEventListener(event,fn,opt_useCapture||false);}
else if(typeof node.detatchEvent=='function'){node.detatchEvent('on'+event,fn);}}
function computeRectIntersection(rect1,rect2){var top=Math.max(rect1.top,rect2.top);var bottom=Math.min(rect1.bottom,rect2.bottom);var left=Math.max(rect1.left,rect2.left);var right=Math.min(rect1.right,rect2.right);var width=right-left;var height=bottom-top;return(width>=0&&height>=0)&&{top:top,bottom:bottom,left:left,right:right,width:width,height:height};}
function getBoundingClientRect(el){var rect;try{rect=el.getBoundingClientRect();}catch(err){}
if(!rect)return getEmptyRect();if(!(rect.width&&rect.height)){rect={top:rect.top,right:rect.right,bottom:rect.bottom,left:rect.left,width:rect.right-rect.left,height:rect.bottom-rect.top};}
return rect;}
function getEmptyRect(){return{top:0,bottom:0,left:0,right:0,width:0,height:0};}
function containsDeep(parent,child){var node=child;while(node){if(node==parent)return true;node=getParentNode(node);}
return false;}
function getParentNode(node){var parent=node.parentNode;if(parent&&parent.nodeType==11&&parent.host){return parent.host;}
if(parent&&parent.assignedSlot){return parent.assignedSlot.parentNode;}
return parent;}
window.IntersectionObserver=IntersectionObserver;window.IntersectionObserverEntry=IntersectionObserverEntry;}());;;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"===typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e=h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&&"%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()},set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});;/*!
* perfect-scrollbar v1.4.0
* (c) 2018 Hyunje Jun
* @license MIT
*/!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PerfectScrollbar=e()}(this,function(){"use strict";function t(t){return getComputedStyle(t)}function e(t,e){for(var i in e){var r=e[i];"number"==typeof r&&(r+="px"),t.style[i]=r}return t}function i(t){var e=document.createElement("div");return e.className=t,e}function r(t,e){if(!v)throw new Error("No element matching method supported");return v.call(t,e)}function l(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function n(t,e){return Array.prototype.filter.call(t.children,function(t){return r(t,e)})}function o(t,e){var i=t.element.classList,r=m.state.scrolling(e);i.contains(r)?clearTimeout(Y[e]):i.add(r)}function s(t,e){Y[e]=setTimeout(function(){return t.isAlive&&t.element.classList.remove(m.state.scrolling(e))},t.settings.scrollingThreshold)}function a(t,e){o(t,e),s(t,e)}function c(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var e=document.createEvent("CustomEvent");return e.initCustomEvent(t,!1,!1,void 0),e}function h(t,e,i,r,l){var n=i[0],o=i[1],s=i[2],h=i[3],u=i[4],d=i[5];void 0===r&&(r=!0),void 0===l&&(l=!1);var f=t.element;t.reach[h]=null,f[s]<1&&(t.reach[h]="start"),f[s]>t[n]-t[o]-1&&(t.reach[h]="end"),e&&(f.dispatchEvent(c("ps-scroll-"+h)),e<0?f.dispatchEvent(c("ps-scroll-"+u)):e>0&&f.dispatchEvent(c("ps-scroll-"+d)),r&&a(t,h)),t.reach[h]&&(e||l)&&f.dispatchEvent(c("ps-"+h+"-reach-"+t.reach[h]))}function u(t){return parseInt(t,10)||0}function d(t){return r(t,"input,[contenteditable]")||r(t,"select,[contenteditable]")||r(t,"textarea,[contenteditable]")||r(t,"button,[contenteditable]")}function f(e){var i=t(e);return u(i.width)+u(i.paddingLeft)+u(i.paddingRight)+u(i.borderLeftWidth)+u(i.borderRightWidth)}function p(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function b(t,i){var r={width:i.railXWidth},l=Math.floor(t.scrollTop);i.isRtl?r.left=i.negativeScrollAdjustment+t.scrollLeft+i.containerWidth-i.contentWidth:r.left=t.scrollLeft,i.isScrollbarXUsingBottom?r.bottom=i.scrollbarXBottom-l:r.top=i.scrollbarXTop+l,e(i.scrollbarXRail,r);var n={top:l,height:i.railYHeight};i.isScrollbarYUsingRight?i.isRtl?n.right=i.contentWidth-(i.negativeScrollAdjustment+t.scrollLeft)-i.scrollbarYRight-i.scrollbarYOuterWidth:n.right=i.scrollbarYRight-t.scrollLeft:i.isRtl?n.left=i.negativeScrollAdjustment+t.scrollLeft+2*i.containerWidth-i.contentWidth-i.scrollbarYLeft-i.scrollbarYOuterWidth:n.left=i.scrollbarYLeft+t.scrollLeft,e(i.scrollbarYRail,n),e(i.scrollbarX,{left:i.scrollbarXLeft,width:i.scrollbarXWidth-i.railBorderXWidth}),e(i.scrollbarY,{top:i.scrollbarYTop,height:i.scrollbarYHeight-i.railBorderYWidth})}function g(t,e){function i(e){b[d]=g+Y*(e[a]-v),o(t,f),R(t),e.stopPropagation(),e.preventDefault()}function r(){s(t,f),t[p].classList.remove(m.state.clicking),t.event.unbind(t.ownerDocument,"mousemove",i)}var l=e[0],n=e[1],a=e[2],c=e[3],h=e[4],u=e[5],d=e[6],f=e[7],p=e[8],b=t.element,g=null,v=null,Y=null;t.event.bind(t[h],"mousedown",function(e){g=b[d],v=e[a],Y=(t[n]-t[l])/(t[c]-t[u]),t.event.bind(t.ownerDocument,"mousemove",i),t.event.once(t.ownerDocument,"mouseup",r),t[p].classList.add(m.state.clicking),e.stopPropagation(),e.preventDefault()})}var v="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),m={main:"ps",element:{thumb:function(t){return"ps__thumb-"+t},rail:function(t){return"ps__rail-"+t},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(t){return"ps--active-"+t},scrolling:function(t){return"ps--scrolling-"+t}}},Y={x:null,y:null},X=function(t){this.element=t,this.handlers={}},w={isEmpty:{configurable:!0}};X.prototype.bind=function(t,e){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)},X.prototype.unbind=function(t,e){var i=this;this.handlers[t]=this.handlers[t].filter(function(r){return!(!e||r===e)||(i.element.removeEventListener(t,r,!1),!1)})},X.prototype.unbindAll=function(){var t=this;for(var e in t.handlers)t.unbind(e)},w.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every(function(e){return 0===t.handlers[e].length})},Object.defineProperties(X.prototype,w);var y=function(){this.eventElements=[]};y.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return e||(e=new X(t),this.eventElements.push(e)),e},y.prototype.bind=function(t,e,i){this.eventElement(t).bind(e,i)},y.prototype.unbind=function(t,e,i){var r=this.eventElement(t);r.unbind(e,i),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},y.prototype.unbindAll=function(){this.eventElements.forEach(function(t){return t.unbindAll()}),this.eventElements=[]},y.prototype.once=function(t,e,i){var r=this.eventElement(t),l=function(t){r.unbind(e,l),i(t)};r.bind(e,l)};var W=function(t,e,i,r,l){void 0===r&&(r=!0),void 0===l&&(l=!1);var n;if("top"===e)n=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==e)throw new Error("A proper axis should be provided");n=["contentWidth","containerWidth","scrollLeft","x","left","right"]}h(t,i,n,r,l)},L={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)},R=function(t){var e=t.element,i=Math.floor(e.scrollTop);t.containerWidth=e.clientWidth,t.containerHeight=e.clientHeight,t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight,e.contains(t.scrollbarXRail)||(n(e,m.element.rail("x")).forEach(function(t){return l(t)}),e.appendChild(t.scrollbarXRail)),e.contains(t.scrollbarYRail)||(n(e,m.element.rail("y")).forEach(function(t){return l(t)}),e.appendChild(t.scrollbarYRail)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset<t.contentWidth?(t.scrollbarXActive=!0,t.railXWidth=t.containerWidth-t.railXMarginWidth,t.railXRatio=t.containerWidth/t.railXWidth,t.scrollbarXWidth=p(t,u(t.railXWidth*t.containerWidth/t.contentWidth)),t.scrollbarXLeft=u((t.negativeScrollAdjustment+e.scrollLeft)*(t.railXWidth-t.scrollbarXWidth)/(t.contentWidth-t.containerWidth))):t.scrollbarXActive=!1,!t.settings.suppressScrollY&&t.containerHeight+t.settings.scrollYMarginOffset<t.contentHeight?(t.scrollbarYActive=!0,t.railYHeight=t.containerHeight-t.railYMarginHeight,t.railYRatio=t.containerHeight/t.railYHeight,t.scrollbarYHeight=p(t,u(t.railYHeight*t.containerHeight/t.contentHeight)),t.scrollbarYTop=u(i*(t.railYHeight-t.scrollbarYHeight)/(t.contentHeight-t.containerHeight))):t.scrollbarYActive=!1,t.scrollbarXLeft>=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),b(e,t),t.scrollbarXActive?e.classList.add(m.state.active("x")):(e.classList.remove(m.state.active("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,e.scrollLeft=0),t.scrollbarYActive?e.classList.add(m.state.active("y")):(e.classList.remove(m.state.active("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,e.scrollTop=0)},T={"click-rail":function(t){t.event.bind(t.scrollbarY,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarYRail,"mousedown",function(e){var i=e.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=i*t.containerHeight,R(t),e.stopPropagation()}),t.event.bind(t.scrollbarX,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarXRail,"mousedown",function(e){var i=e.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=i*t.containerWidth,R(t),e.stopPropagation()})},"drag-thumb":function(t){g(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),g(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){function e(e,r){var l=Math.floor(i.scrollTop);if(0===e){if(!t.scrollbarYActive)return!1;if(0===l&&r>0||l>=t.contentHeight-t.containerHeight&&r<0)return!t.settings.wheelPropagation}var n=i.scrollLeft;if(0===r){if(!t.scrollbarXActive)return!1;if(0===n&&e<0||n>=t.contentWidth-t.containerWidth&&e>0)return!t.settings.wheelPropagation}return!0}var i=t.element,l=function(){return r(i,":hover")},n=function(){return r(t.scrollbarX,":focus")||r(t.scrollbarY,":focus")};t.event.bind(t.ownerDocument,"keydown",function(r){if(!(r.isDefaultPrevented&&r.isDefaultPrevented()||r.defaultPrevented)&&(l()||n())){var o=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(o){if("IFRAME"===o.tagName)o=o.contentDocument.activeElement;else for(;o.shadowRoot;)o=o.shadowRoot.activeElement;if(d(o))return}var s=0,a=0;switch(r.which){case 37:s=r.metaKey?-t.contentWidth:r.altKey?-t.containerWidth:-30;break;case 38:a=r.metaKey?t.contentHeight:r.altKey?t.containerHeight:30;break;case 39:s=r.metaKey?t.contentWidth:r.altKey?t.containerWidth:30;break;case 40:a=r.metaKey?-t.contentHeight:r.altKey?-t.containerHeight:-30;break;case 32:a=r.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:a=t.containerHeight;break;case 34:a=-t.containerHeight;break;case 36:a=t.contentHeight;break;case 35:a=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==s||t.settings.suppressScrollY&&0!==a||(i.scrollTop-=a,i.scrollLeft+=s,R(t),e(s,a)&&r.preventDefault())}})},wheel:function(e){function i(t,i){var r=Math.floor(o.scrollTop),l=0===o.scrollTop,n=r+o.offsetHeight===o.scrollHeight,s=0===o.scrollLeft,a=o.scrollLeft+o.offsetWidth===o.scrollWidth;return!(Math.abs(i)>Math.abs(t)?l||n:s||a)||!e.settings.wheelPropagation}function r(t){var e=t.deltaX,i=-1*t.deltaY;return void 0!==e&&void 0!==i||(e=-1*t.wheelDeltaX/6,i=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,i*=10),e!==e&&i!==i&&(e=0,i=t.wheelDelta),t.shiftKey?[-i,-e]:[e,i]}function l(e,i,r){if(!L.isWebKit&&o.querySelector("select:focus"))return!0;if(!o.contains(e))return!1;for(var l=e;l&&l!==o;){if(l.classList.contains(m.element.consuming))return!0;var n=t(l);if([n.overflow,n.overflowX,n.overflowY].join("").match(/(scroll|auto)/)){var s=l.scrollHeight-l.clientHeight;if(s>0&&!(0===l.scrollTop&&r>0||l.scrollTop===s&&r<0))return!0;var a=l.scrollWidth-l.clientWidth;if(a>0&&!(0===l.scrollLeft&&i<0||l.scrollLeft===a&&i>0))return!0}l=l.parentNode}return!1}function n(t){var n=r(t),s=n[0],a=n[1];if(!l(t.target,s,a)){var c=!1;e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(a?o.scrollTop-=a*e.settings.wheelSpeed:o.scrollTop+=s*e.settings.wheelSpeed,c=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(s?o.scrollLeft+=s*e.settings.wheelSpeed:o.scrollLeft-=a*e.settings.wheelSpeed,c=!0):(o.scrollTop-=a*e.settings.wheelSpeed,o.scrollLeft+=s*e.settings.wheelSpeed),R(e),(c=c||i(s,a))&&!t.ctrlKey&&(t.stopPropagation(),t.preventDefault())}}var o=e.element;void 0!==window.onwheel?e.event.bind(o,"wheel",n):void 0!==window.onmousewheel&&e.event.bind(o,"mousewheel",n)},touch:function(e){function i(t,i){var r=Math.floor(h.scrollTop),l=h.scrollLeft,n=Math.abs(t),o=Math.abs(i);if(o>n){if(i<0&&r===e.contentHeight-e.containerHeight||i>0&&0===r)return 0===window.scrollY&&i>0&&L.isChrome}else if(n>o&&(t<0&&l===e.contentWidth-e.containerWidth||t>0&&0===l))return!0;return!0}function r(t,i){h.scrollTop-=i,h.scrollLeft-=t,R(e)}function l(t){return t.targetTouches?t.targetTouches[0]:t}function n(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function o(t){if(n(t)){var e=l(t);u.pageX=e.pageX,u.pageY=e.pageY,d=(new Date).getTime(),null!==p&&clearInterval(p)}}function s(e,i,r){if(!h.contains(e))return!1;for(var l=e;l&&l!==h;){if(l.classList.contains(m.element.consuming))return!0;var n=t(l);if([n.overflow,n.overflowX,n.overflowY].join("").match(/(scroll|auto)/)){var o=l.scrollHeight-l.clientHeight;if(o>0&&!(0===l.scrollTop&&r>0||l.scrollTop===o&&r<0))return!0;var s=l.scrollLeft-l.clientWidth;if(s>0&&!(0===l.scrollLeft&&i<0||l.scrollLeft===s&&i>0))return!0}l=l.parentNode}return!1}function a(t){if(n(t)){var e=l(t),o={pageX:e.pageX,pageY:e.pageY},a=o.pageX-u.pageX,c=o.pageY-u.pageY;if(s(t.target,a,c))return;r(a,c),u=o;var h=(new Date).getTime(),p=h-d;p>0&&(f.x=a/p,f.y=c/p,d=h),i(a,c)&&t.preventDefault()}}function c(){e.settings.swipeEasing&&(clearInterval(p),p=setInterval(function(){e.isInitialized?clearInterval(p):f.x||f.y?Math.abs(f.x)<.01&&Math.abs(f.y)<.01?clearInterval(p):(r(30*f.x,30*f.y),f.x*=.8,f.y*=.8):clearInterval(p)},10))}if(L.supportsTouch||L.supportsIePointer){var h=e.element,u={},d=0,f={},p=null;L.supportsTouch?(e.event.bind(h,"touchstart",o),e.event.bind(h,"touchmove",a),e.event.bind(h,"touchend",c)):L.supportsIePointer&&(window.PointerEvent?(e.event.bind(h,"pointerdown",o),e.event.bind(h,"pointermove",a),e.event.bind(h,"pointerup",c)):window.MSPointerEvent&&(e.event.bind(h,"MSPointerDown",o),e.event.bind(h,"MSPointerMove",a),e.event.bind(h,"MSPointerUp",c)))}}},H=function(r,l){var n=this;if(void 0===l&&(l={}),"string"==typeof r&&(r=document.querySelector(r)),!r||!r.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");this.element=r,r.classList.add(m.main),this.settings={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1};for(var o in l)n.settings[o]=l[o];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var s=function(){return r.classList.add(m.state.focus)},a=function(){return r.classList.remove(m.state.focus)};this.isRtl="rtl"===t(r).direction,this.isNegativeScroll=function(){var t=r.scrollLeft,e=null;return r.scrollLeft=-1,e=r.scrollLeft<0,r.scrollLeft=t,e}(),this.negativeScrollAdjustment=this.isNegativeScroll?r.scrollWidth-r.clientWidth:0,this.event=new y,this.ownerDocument=r.ownerDocument||document,this.scrollbarXRail=i(m.element.rail("x")),r.appendChild(this.scrollbarXRail),this.scrollbarX=i(m.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",s),this.event.bind(this.scrollbarX,"blur",a),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var c=t(this.scrollbarXRail);this.scrollbarXBottom=parseInt(c.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=u(c.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=u(c.borderLeftWidth)+u(c.borderRightWidth),e(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=u(c.marginLeft)+u(c.marginRight),e(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=i(m.element.rail("y")),r.appendChild(this.scrollbarYRail),this.scrollbarY=i(m.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",s),this.event.bind(this.scrollbarY,"blur",a),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var h=t(this.scrollbarYRail);this.scrollbarYRight=parseInt(h.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=u(h.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?f(this.scrollbarY):null,this.railBorderYWidth=u(h.borderTopWidth)+u(h.borderBottomWidth),e(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=u(h.marginTop)+u(h.marginBottom),e(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:r.scrollLeft<=0?"start":r.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:r.scrollTop<=0?"start":r.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(t){return T[t](n)}),this.lastScrollTop=Math.floor(r.scrollTop),this.lastScrollLeft=r.scrollLeft,this.event.bind(this.element,"scroll",function(t){return n.onScroll(t)}),R(this)};return H.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,e(this.scrollbarXRail,{display:"block"}),e(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=u(t(this.scrollbarXRail).marginLeft)+u(t(this.scrollbarXRail).marginRight),this.railYMarginHeight=u(t(this.scrollbarYRail).marginTop)+u(t(this.scrollbarYRail).marginBottom),e(this.scrollbarXRail,{display:"none"}),e(this.scrollbarYRail,{display:"none"}),R(this),W(this,"top",0,!1,!0),W(this,"left",0,!1,!0),e(this.scrollbarXRail,{display:""}),e(this.scrollbarYRail,{display:""}))},H.prototype.onScroll=function(t){this.isAlive&&(R(this),W(this,"top",this.element.scrollTop-this.lastScrollTop),W(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},H.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),l(this.scrollbarX),l(this.scrollbarY),l(this.scrollbarXRail),l(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},H.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter(function(t){return!t.match(/^ps([-_].+|)$/)}).join(" ")},H});;/*! perfect-scrollbar - v0.5.9
* http://noraesae.github.com/perfect-scrollbar/
* Copyright (c) 2015 Hyunje Alex Jun; Licensed MIT */(function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)})(function(e){"use strict";function t(e){return "string"==typeof e?parseInt(e,10):~~e}var o={wheelSpeed:1,wheelPropagation:!1,swipePropagation:!0,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,includePadding:!1},n=0,r=function(){var e=n++;return function(t){var o=".perfect-scrollbar-"+e;return t===void 0?o:t+o}},l="WebkitAppearance"in document.documentElement.style;e.fn.perfectScrollbar=function(n,i){return this.each(function(){function a(e,o){var n=e+o,r=D-R;j=0>n?0:n>r?r:n;var l=t(j*(Y-D)/(D-R));M.scrollTop(l)}function s(e,o){var n=e+o,r=E-k;W=0>n?0:n>r?r:n;var l=t(W*(C-E)/(E-k));M.scrollLeft(l)}function c(e){return P.minScrollbarLength&&(e=Math.max(e,P.minScrollbarLength)),P.maxScrollbarLength&&(e=Math.min(e,P.maxScrollbarLength)),e}function u(){var e={width:I};e.left=B?M.scrollLeft()+E-C:M.scrollLeft(),N?e.bottom=_-M.scrollTop():e.top=Q+M.scrollTop(),H.css(e);var t={top:M.scrollTop(),height:A};Z?t.right=B?C-M.scrollLeft()-V-J.outerWidth():V-M.scrollLeft():t.left=B?M.scrollLeft()+2*E-C-$-J.outerWidth():$+M.scrollLeft(),G.css(t),U.css({left:W,width:k-z}),J.css({top:j,height:R-et})}function p(){M.removeClass("ps-active-x"),M.removeClass("ps-active-y"),E=P.includePadding?M.innerWidth():M.width(),D=P.includePadding?M.innerHeight():M.height(),C=M.prop("scrollWidth"),Y=M.prop("scrollHeight"),!P.suppressScrollX&&C>E+P.scrollXMarginOffset?(X=!0,I=E-F,k=c(t(I*E/C)),W=t(M.scrollLeft()*(I-k)/(C-E))):(X=!1,k=0,W=0,M.scrollLeft(0)),!P.suppressScrollY&&Y>D+P.scrollYMarginOffset?(O=!0,A=D-tt,R=c(t(A*D/Y)),j=t(M.scrollTop()*(A-R)/(Y-D))):(O=!1,R=0,j=0,M.scrollTop(0)),W>=I-k&&(W=I-k),j>=A-R&&(j=A-R),u(),X&&M.addClass("ps-active-x"),O&&M.addClass("ps-active-y")}function d(){var t,o,n=function(e){s(t,e.pageX-o),p(),e.stopPropagation(),e.preventDefault()},r=function(){M.removeClass("ps-in-scrolling"),e(q).unbind(K("mousemove"),n)};U.bind(K("mousedown"),function(l){o=l.pageX,t=U.position().left,M.addClass("ps-in-scrolling"),e(q).bind(K("mousemove"),n),e(q).one(K("mouseup"),r),l.stopPropagation(),l.preventDefault()}),t=o=null}function f(){var t,o,n=function(e){a(t,e.pageY-o),p(),e.stopPropagation(),e.preventDefault()},r=function(){M.removeClass("ps-in-scrolling"),e(q).unbind(K("mousemove"),n)};J.bind(K("mousedown"),function(l){o=l.pageY,t=J.position().top,M.addClass("ps-in-scrolling"),e(q).bind(K("mousemove"),n),e(q).one(K("mouseup"),r),l.stopPropagation(),l.preventDefault()}),t=o=null}function v(e,t){var o=M.scrollTop();if(0===e){if(!O)return!1;if(0===o&&t>0||o>=Y-D&&0>t)return!P.wheelPropagation}var n=M.scrollLeft();if(0===t){if(!X)return!1;if(0===n&&0>e||n>=C-E&&e>0)return!P.wheelPropagation}return!0}function g(e,t){var o=M.scrollTop(),n=M.scrollLeft(),r=Math.abs(e),l=Math.abs(t);if(l>r){if(0>t&&o===Y-D||t>0&&0===o)return!P.swipePropagation}else if(r>l&&(0>e&&n===C-E||e>0&&0===n))return!P.swipePropagation;return!0}function b(){function e(e){var t=e.originalEvent.deltaX,o=-1*e.originalEvent.deltaY;return(t===void 0||o===void 0)&&(t=-1*e.originalEvent.wheelDeltaX/6,o=e.originalEvent.wheelDeltaY/6),e.originalEvent.deltaMode&&1===e.originalEvent.deltaMode&&(t*=10,o*=10),t!==t&&o!==o&&(t=0,o=e.originalEvent.wheelDelta),[t,o]}function t(t){if(l||!(M.find("select:focus").length>0)){var n=e(t),r=n[0],i=n[1];o=!1,P.useBothWheelAxes?O&&!X?(i?M.scrollTop(M.scrollTop()-i*P.wheelSpeed):M.scrollTop(M.scrollTop()+r*P.wheelSpeed),o=!0):X&&!O&&(r?M.scrollLeft(M.scrollLeft()+r*P.wheelSpeed):M.scrollLeft(M.scrollLeft()-i*P.wheelSpeed),o=!0):(M.scrollTop(M.scrollTop()-i*P.wheelSpeed),M.scrollLeft(M.scrollLeft()+r*P.wheelSpeed)),p(),o=o||v(r,i),o&&(t.stopPropagation(),t.preventDefault())}}var o=!1;window.onwheel!==void 0?M.bind(K("wheel"),t):window.onmousewheel!==void 0&&M.bind(K("mousewheel"),t)}function h(){var t=!1;M.bind(K("mouseenter"),function(){t=!0}),M.bind(K("mouseleave"),function(){t=!1});var o=!1;e(q).bind(K("keydown"),function(n){if((!n.isDefaultPrevented||!n.isDefaultPrevented())&&t){var r=document.activeElement?document.activeElement:q.activeElement;if(r){for(;r.shadowRoot;)r=r.shadowRoot.activeElement;if(e(r).is(":input,[contenteditable]"))return}var l=0,i=0;switch(n.which){case 37:l=-30;break;case 38:i=30;break;case 39:l=30;break;case 40:i=-30;break;case 33:i=90;break;case 32:case 34:i=-90;break;case 35:i=n.ctrlKey?-Y:-D;break;case 36:i=n.ctrlKey?M.scrollTop():D;break;default:return}M.scrollTop(M.scrollTop()-i),M.scrollLeft(M.scrollLeft()+l),o=v(l,i),o&&n.preventDefault()}})}function w(){function e(e){e.stopPropagation()}J.bind(K("click"),e),G.bind(K("click"),function(e){var o=t(R/2),n=e.pageY-G.offset().top-o,r=D-R,l=n/r;0>l?l=0:l>1&&(l=1),M.scrollTop((Y-D)*l)}),U.bind(K("click"),e),H.bind(K("click"),function(e){var o=t(k/2),n=e.pageX-H.offset().left-o,r=E-k,l=n/r;0>l?l=0:l>1&&(l=1),M.scrollLeft((C-E)*l)})}function m(){function t(){var e=window.getSelection?window.getSelection():document.getSlection?document.getSlection():{rangeCount:0};return 0===e.rangeCount?null:e.getRangeAt(0).commonAncestorContainer}function o(){r||(r=setInterval(function(){return x()?(M.scrollTop(M.scrollTop()+l.top),M.scrollLeft(M.scrollLeft()+l.left),p(),void 0):(clearInterval(r),void 0)},50))}function n(){r&&(clearInterval(r),r=null),M.removeClass("ps-in-scrolling"),M.removeClass("ps-in-scrolling")}var r=null,l={top:0,left:0},i=!1;e(q).bind(K("selectionchange"),function(){e.contains(M[0],t())?i=!0:(i=!1,n())}),e(window).bind(K("mouseup"),function(){i&&(i=!1,n())}),e(window).bind(K("mousemove"),function(e){if(i){var t={x:e.pageX,y:e.pageY},r=M.offset(),a={left:r.left,right:r.left+M.outerWidth(),top:r.top,bottom:r.top+M.outerHeight()};t.x<a.left+3?(l.left=-5,M.addClass("ps-in-scrolling")):t.x>a.right-3?(l.left=5,M.addClass("ps-in-scrolling")):l.left=0,t.y<a.top+3?(l.top=5>a.top+3-t.y?-5:-20,M.addClass("ps-in-scrolling")):t.y>a.bottom-3?(l.top=5>t.y-a.bottom+3?5:20,M.addClass("ps-in-scrolling")):l.top=0,0===l.top&&0===l.left?n():o()}})}function T(t,o){function n(e,t){M.scrollTop(M.scrollTop()-t),M.scrollLeft(M.scrollLeft()-e),p()}function r(){h=!0}function l(){h=!1}function i(e){return e.originalEvent.targetTouches?e.originalEvent.targetTouches[0]:e.originalEvent}function a(e){var t=e.originalEvent;return t.targetTouches&&1===t.targetTouches.length?!0:t.pointerType&&"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE?!0:!1}function s(e){if(a(e)){w=!0;var t=i(e);d.pageX=t.pageX,d.pageY=t.pageY,f=(new Date).getTime(),null!==b&&clearInterval(b),e.stopPropagation()}}function c(e){if(!h&&w&&a(e)){var t=i(e),o={pageX:t.pageX,pageY:t.pageY},r=o.pageX-d.pageX,l=o.pageY-d.pageY;n(r,l),d=o;var s=(new Date).getTime(),c=s-f;c>0&&(v.x=r/c,v.y=l/c,f=s),g(r,l)&&(e.stopPropagation(),e.preventDefault())}}function u(){!h&&w&&(w=!1,clearInterval(b),b=setInterval(function(){return x()?.01>Math.abs(v.x)&&.01>Math.abs(v.y)?(clearInterval(b),void 0):(n(30*v.x,30*v.y),v.x*=.8,v.y*=.8,void 0):(clearInterval(b),void 0)},10))}var d={},f=0,v={},b=null,h=!1,w=!1;t&&(e(window).bind(K("touchstart"),r),e(window).bind(K("touchend"),l),M.bind(K("touchstart"),s),M.bind(K("touchmove"),c),M.bind(K("touchend"),u)),o&&(window.PointerEvent?(e(window).bind(K("pointerdown"),r),e(window).bind(K("pointerup"),l),M.bind(K("pointerdown"),s),M.bind(K("pointermove"),c),M.bind(K("pointerup"),u)):window.MSPointerEvent&&(e(window).bind(K("MSPointerDown"),r),e(window).bind(K("MSPointerUp"),l),M.bind(K("MSPointerDown"),s),M.bind(K("MSPointerMove"),c),M.bind(K("MSPointerUp"),u)))}function y(){M.bind(K("scroll"),function(){p()})}function L(){M.unbind(K()),e(window).unbind(K()),e(q).unbind(K()),M.data("perfect-scrollbar",null),M.data("perfect-scrollbar-update",null),M.data("perfect-scrollbar-destroy",null),U.remove(),J.remove(),H.remove(),G.remove(),M=H=G=U=J=X=O=E=D=C=Y=k=W=_=N=Q=R=j=V=Z=$=B=K=null}function S(){p(),y(),d(),f(),w(),m(),b(),(ot||nt)&&T(ot,nt),P.useKeyboard&&h(),M.data("perfect-scrollbar",M),M.data("perfect-scrollbar-update",p),M.data("perfect-scrollbar-destroy",L)}var P=e.extend(!0,{},o),M=e(this),x=function(){return!!M};if("object"==typeof n?e.extend(!0,P,n):i=n,"update"===i)return M.data("perfect-scrollbar-update")&&M.data("perfect-scrollbar-update")(),M;if("destroy"===i)return M.data("perfect-scrollbar-destroy")&&M.data("perfect-scrollbar-destroy")(),M;if(M.data("perfect-scrollbar"))return M.data("perfect-scrollbar");M.addClass("ps-container");var E,D,C,Y,X,k,W,I,O,R,j,A,B="rtl"===M.css("direction"),K=r(),q=this.ownerDocument||document,H=e("<div class='ps-scrollbar-x-rail'>").appendTo(M),U=e("<div class='ps-scrollbar-x'>").appendTo(H),_=t(H.css("bottom")),N=_===_,Q=N?null:t(H.css("top")),z=t(H.css("borderLeftWidth"))+t(H.css("borderRightWidth")),F=t(H.css("marginLeft"))+t(H.css("marginRight")),G=e("<div class='ps-scrollbar-y-rail'>").appendTo(M),J=e("<div class='ps-scrollbar-y'>").appendTo(G),V=t(G.css("right")),Z=V===V,$=Z?null:t(G.css("left")),et=t(G.css("borderTopWidth"))+t(G.css("borderBottomWidth")),tt=t(G.css("marginTop"))+t(G.css("marginBottom")),ot="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,nt=null!==window.navigator.msMaxTouchPoints;return S(),M})}});;!function(t){"use strict";if("function"==typeof bootstrap)bootstrap("promise",t);else if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define(t);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeQ=t}else{if("undefined"==typeof window&&"undefined"==typeof self)throw new Error("This environment was not anticipated by Q. Please file a bug.");var n="undefined"!=typeof window?window:self,e=n.Q;n.Q=t(),n.Q.noConflict=function(){return n.Q=e,this}}}(function(){"use strict";function t(t){return function(){return K.apply(t,arguments)}}function n(t){return t===Object(t)}function e(t){return"[object StopIteration]"===en(t)||t instanceof _}function r(t,n){if(V&&n.stack&&"object"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(rn)){for(var e=[],r=n;r;r=r.source)r.stack&&e.unshift(r.stack);e.unshift(t.stack);var i=e.join("\n"+rn+"\n");t.stack=o(i)}}function o(t){for(var n=t.split("\n"),e=[],r=0;r<n.length;++r){var o=n[r];c(o)||i(o)||!o||e.push(o)}return e.join("\n")}function i(t){return-1!==t.indexOf("(module.js:")||-1!==t.indexOf("(node.js:")}function u(t){var n=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);if(n)return[n[1],Number(n[2])];var e=/at ([^ ]+):(\d+):(?:\d+)$/.exec(t);if(e)return[e[1],Number(e[2])];var r=/.*@(.+):(\d+)$/.exec(t);return r?[r[1],Number(r[2])]:void 0}function c(t){var n=u(t);if(!n)return!1;var e=n[0],r=n[1];return e===H&&r>=q&&fn>=r}function s(){if(V)try{throw new Error}catch(t){var n=t.stack.split("\n"),e=n[0].indexOf("@")>0?n[1]:n[2],r=u(e);if(!r)return;return H=r[0],r[1]}}function f(t,n,e){return function(){return"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(n+" is deprecated, use "+e+" instead.",new Error("").stack),t.apply(t,arguments)}}function p(t){return t instanceof h?t:g(t)?O(t):E(t)}function a(){function t(t){n=t,i.source=t,W(e,function(n,e){p.nextTick(function(){t.promiseDispatch.apply(t,e)})},void 0),e=void 0,r=void 0}var n,e=[],r=[],o=Z(a.prototype),i=Z(h.prototype);if(i.promiseDispatch=function(t,o,i){var u=L(arguments);e?(e.push(u),"when"===o&&i[1]&&r.push(i[1])):p.nextTick(function(){n.promiseDispatch.apply(n,u)})},i.valueOf=function(){if(e)return i;var t=v(n);return m(t)&&(n=t),t},i.inspect=function(){return n?n.inspect():{state:"pending"}},p.longStackSupport&&V)try{throw new Error}catch(u){i.stack=u.stack.substring(u.stack.indexOf("\n")+1)}return o.promise=i,o.resolve=function(e){n||t(p(e))},o.fulfill=function(e){n||t(E(e))},o.reject=function(e){n||t(R(e))},o.notify=function(t){n||W(r,function(n,e){p.nextTick(function(){e(t)})},void 0)},o}function l(t){if("function"!=typeof t)throw new TypeError("resolver must be a function.");var n=a();try{t(n.resolve,n.reject,n.notify)}catch(e){n.reject(e)}return n.promise}function d(t){return l(function(n,e){for(var r=0,o=t.length;o>r;r++)p(t[r]).then(n,e)})}function h(t,n,e){void 0===n&&(n=function(t){return R(new Error("Promise does not support operation: "+t))}),void 0===e&&(e=function(){return{state:"unknown"}});var r=Z(h.prototype);if(r.promiseDispatch=function(e,o,i){var u;try{u=t[o]?t[o].apply(r,i):n.call(r,o,i)}catch(c){u=R(c)}e&&e(u)},r.inspect=e,e){var o=e();"rejected"===o.state&&(r.exception=o.reason),r.valueOf=function(){var t=e();return"pending"===t.state||"rejected"===t.state?r:t.value}}return r}function y(t,n,e,r){return p(t).then(n,e,r)}function v(t){if(m(t)){var n=t.inspect();if("fulfilled"===n.state)return n.value}return t}function m(t){return t instanceof h}function g(t){return n(t)&&"function"==typeof t.then}function k(t){return m(t)&&"pending"===t.inspect().state}function j(t){return!m(t)||"fulfilled"===t.inspect().state}function w(t){return m(t)&&"rejected"===t.inspect().state}function b(){on.length=0,un.length=0,sn||(sn=!0)}function x(t,n){sn&&("object"==typeof process&&"function"==typeof process.emit&&p.nextTick.runAfter(function(){-1!==X(un,t)&&(process.emit("unhandledRejection",n,t),cn.push(t))}),un.push(t),on.push(n&&"undefined"!=typeof n.stack?n.stack:"(no stack) "+n))}function T(t){if(sn){var n=X(un,t);-1!==n&&("object"==typeof process&&"function"==typeof process.emit&&p.nextTick.runAfter(function(){var e=X(cn,t);-1!==e&&(process.emit("rejectionHandled",on[n],t),cn.splice(e,1))}),un.splice(n,1),on.splice(n,1))}}function R(t){var n=h({when:function(n){return n&&T(this),n?n(t):this}},function(){return this},function(){return{state:"rejected",reason:t}});return x(n,t),n}function E(t){return h({when:function(){return t},get:function(n){return t[n]},set:function(n,e){t[n]=e},"delete":function(n){delete t[n]},post:function(n,e){return null===n||void 0===n?t.apply(void 0,e):t[n].apply(t,e)},apply:function(n,e){return t.apply(n,e)},keys:function(){return nn(t)}},void 0,function(){return{state:"fulfilled",value:t}})}function O(t){var n=a();return p.nextTick(function(){try{t.then(n.resolve,n.reject,n.notify)}catch(e){n.reject(e)}}),n.promise}function S(t){return h({isDef:function(){}},function(n,e){return A(t,n,e)},function(){return p(t).inspect()})}function N(t,n,e){return p(t).spread(n,e)}function D(t){return function(){function n(t,n){var u;if("undefined"==typeof StopIteration){try{u=r[t](n)}catch(c){return R(c)}return u.done?p(u.value):y(u.value,o,i)}try{u=r[t](n)}catch(c){return e(c)?p(c.value):R(c)}return y(u,o,i)}var r=t.apply(this,arguments),o=n.bind(n,"next"),i=n.bind(n,"throw");return o()}}function P(t){p.done(p.async(t)())}function C(t){throw new _(t)}function Q(t){return function(){return N([this,I(arguments)],function(n,e){return t.apply(n,e)})}}function A(t,n,e){return p(t).dispatch(n,e)}function I(t){return y(t,function(t){var n=0,e=a();return W(t,function(r,o,i){var u;m(o)&&"fulfilled"===(u=o.inspect()).state?t[i]=u.value:(++n,y(o,function(r){t[i]=r,0===--n&&e.resolve(t)},e.reject,function(t){e.notify({index:i,value:t})}))},void 0),0===n&&e.resolve(t),e.promise})}function U(t){if(0===t.length)return p.resolve();var n=p.defer(),e=0;return W(t,function(r,o,i){function u(t){n.resolve(t)}function c(){e--,0===e&&n.reject(new Error("Can't get fulfillment value from any promise, all promises were rejected."))}function s(t){n.notify({index:i,value:t})}var f=t[i];e++,y(f,u,c,s)},void 0),n.promise}function F(t){return y(t,function(t){return t=Y(t,p),y(I(Y(t,function(t){return y(t,z,z)})),function(){return t})})}function M(t){return p(t).allSettled()}function B(t,n){return p(t).then(void 0,void 0,n)}function $(t,n){return p(t).nodeify(n)}var V=!1;try{throw new Error}catch(G){V=!!G.stack}var H,_,q=s(),z=function(){},J=function(){function t(){for(var t,r;e.next;)e=e.next,t=e.task,e.task=void 0,r=e.domain,r&&(e.domain=void 0,r.enter()),n(t,r);for(;c.length;)t=c.pop(),n(t);o=!1}function n(n,e){try{n()}catch(r){if(u)throw e&&e.exit(),setTimeout(t,0),e&&e.enter(),r;setTimeout(function(){throw r},0)}e&&e.exit()}var e={task:void 0,next:null},r=e,o=!1,i=void 0,u=!1,c=[];if(J=function(t){r=r.next={task:t,domain:u&&process.domain,next:null},o||(o=!0,i())},"object"==typeof process&&"[object process]"===process.toString()&&process.nextTick)u=!0,i=function(){process.nextTick(t)};else if("function"==typeof setImmediate)i="undefined"!=typeof window?setImmediate.bind(window,t):function(){setImmediate(t)};else if("undefined"!=typeof MessageChannel){var s=new MessageChannel;s.port1.onmessage=function(){i=f,s.port1.onmessage=t,t()};var f=function(){s.port2.postMessage(0)};i=function(){setTimeout(t,0),f()}}else i=function(){setTimeout(t,0)};return J.runAfter=function(t){c.push(t),o||(o=!0,i())},J}(),K=Function.call,L=t(Array.prototype.slice),W=t(Array.prototype.reduce||function(t,n){var e=0,r=this.length;if(1===arguments.length)for(;;){if(e in this){n=this[e++];break}if(++e>=r)throw new TypeError}for(;r>e;e++)e in this&&(n=t(n,this[e],e));return n}),X=t(Array.prototype.indexOf||function(t){for(var n=0;n<this.length;n++)if(this[n]===t)return n;return-1}),Y=t(Array.prototype.map||function(t,n){var e=this,r=[];return W(e,function(o,i,u){r.push(t.call(n,i,u,e))},void 0),r}),Z=Object.create||function(t){function n(){}return n.prototype=t,new n},tn=t(Object.prototype.hasOwnProperty),nn=Object.keys||function(t){var n=[];for(var e in t)tn(t,e)&&n.push(e);return n},en=t(Object.prototype.toString);_="undefined"!=typeof ReturnValue?ReturnValue:function(t){this.value=t};var rn="From previous event:";p.resolve=p,p.nextTick=J,p.longStackSupport=!1,"object"==typeof process&&process&&process.env&&process.env.Q_DEBUG&&(p.longStackSupport=!0),p.defer=a,a.prototype.makeNodeResolver=function(){var t=this;return function(n,e){n?t.reject(n):t.resolve(arguments.length>2?L(arguments,1):e)}},p.Promise=l,p.promise=l,l.race=d,l.all=I,l.reject=R,l.resolve=p,p.passByCopy=function(t){return t},h.prototype.passByCopy=function(){return this},p.join=function(t,n){return p(t).join(n)},h.prototype.join=function(t){return p([this,t]).spread(function(t,n){if(t===n)return t;throw new Error("Can't join: not the same: "+t+" "+n)})},p.race=d,h.prototype.race=function(){return this.then(p.race)},p.makePromise=h,h.prototype.toString=function(){return"[object Promise]"},h.prototype.then=function(t,n,e){function o(n){try{return"function"==typeof t?t(n):n}catch(e){return R(e)}}function i(t){if("function"==typeof n){r(t,c);try{return n(t)}catch(e){return R(e)}}return R(t)}function u(t){return"function"==typeof e?e(t):t}var c=this,s=a(),f=!1;return p.nextTick(function(){c.promiseDispatch(function(t){f||(f=!0,s.resolve(o(t)))},"when",[function(t){f||(f=!0,s.resolve(i(t)))}])}),c.promiseDispatch(void 0,"when",[void 0,function(t){var n,e=!1;try{n=u(t)}catch(r){if(e=!0,!p.onerror)throw r;p.onerror(r)}e||s.notify(n)}]),s.promise},p.tap=function(t,n){return p(t).tap(n)},h.prototype.tap=function(t){return t=p(t),this.then(function(n){return t.fcall(n).thenResolve(n)})},p.when=y,h.prototype.thenResolve=function(t){return this.then(function(){return t})},p.thenResolve=function(t,n){return p(t).thenResolve(n)},h.prototype.thenReject=function(t){return this.then(function(){throw t})},p.thenReject=function(t,n){return p(t).thenReject(n)},p.nearer=v,p.isPromise=m,p.isPromiseAlike=g,p.isPending=k,h.prototype.isPending=function(){return"pending"===this.inspect().state},p.isFulfilled=j,h.prototype.isFulfilled=function(){return"fulfilled"===this.inspect().state},p.isRejected=w,h.prototype.isRejected=function(){return"rejected"===this.inspect().state};var on=[],un=[],cn=[],sn=!0;p.resetUnhandledRejections=b,p.getUnhandledReasons=function(){return on.slice()},p.stopUnhandledRejectionTracking=function(){b(),sn=!1},b(),p.reject=R,p.fulfill=E,p.master=S,p.spread=N,h.prototype.spread=function(t,n){return this.all().then(function(n){return t.apply(void 0,n)},n)},p.async=D,p.spawn=P,p["return"]=C,p.promised=Q,p.dispatch=A,h.prototype.dispatch=function(t,n){var e=this,r=a();return p.nextTick(function(){e.promiseDispatch(r.resolve,t,n)}),r.promise},p.get=function(t,n){return p(t).dispatch("get",[n])},h.prototype.get=function(t){return this.dispatch("get",[t])},p.set=function(t,n,e){return p(t).dispatch("set",[n,e])},h.prototype.set=function(t,n){return this.dispatch("set",[t,n])},p.del=p["delete"]=function(t,n){return p(t).dispatch("delete",[n])},h.prototype.del=h.prototype["delete"]=function(t){return this.dispatch("delete",[t])},p.mapply=p.post=function(t,n,e){return p(t).dispatch("post",[n,e])},h.prototype.mapply=h.prototype.post=function(t,n){return this.dispatch("post",[t,n])},p.send=p.mcall=p.invoke=function(t,n){return p(t).dispatch("post",[n,L(arguments,2)])},h.prototype.send=h.prototype.mcall=h.prototype.invoke=function(t){return this.dispatch("post",[t,L(arguments,1)])},p.fapply=function(t,n){return p(t).dispatch("apply",[void 0,n])},h.prototype.fapply=function(t){return this.dispatch("apply",[void 0,t])},p["try"]=p.fcall=function(t){return p(t).dispatch("apply",[void 0,L(arguments,1)])},h.prototype.fcall=function(){return this.dispatch("apply",[void 0,L(arguments)])},p.fbind=function(t){var n=p(t),e=L(arguments,1);return function(){return n.dispatch("apply",[this,e.concat(L(arguments))])}},h.prototype.fbind=function(){var t=this,n=L(arguments);return function(){return t.dispatch("apply",[this,n.concat(L(arguments))])}},p.keys=function(t){return p(t).dispatch("keys",[])},h.prototype.keys=function(){return this.dispatch("keys",[])},p.all=I,h.prototype.all=function(){return I(this)},p.any=U,h.prototype.any=function(){return U(this)},p.allResolved=f(F,"allResolved","allSettled"),h.prototype.allResolved=function(){return F(this)},p.allSettled=M,h.prototype.allSettled=function(){return this.then(function(t){return I(Y(t,function(t){function n(){return t.inspect()}return t=p(t),t.then(n,n)}))})},p.fail=p["catch"]=function(t,n){return p(t).then(void 0,n)},h.prototype.fail=h.prototype["catch"]=function(t){return this.then(void 0,t)},p.progress=B,h.prototype.progress=function(t){return this.then(void 0,void 0,t)},p.fin=p["finally"]=function(t,n){return p(t)["finally"](n)},h.prototype.fin=h.prototype["finally"]=function(t){return t=p(t),this.then(function(n){return t.fcall().then(function(){return n})},function(n){return t.fcall().then(function(){throw n})})},p.done=function(t,n,e,r){return p(t).done(n,e,r)},h.prototype.done=function(t,n,e){var o=function(t){p.nextTick(function(){if(r(t,i),!p.onerror)throw t;p.onerror(t)})},i=t||n||e?this.then(t,n,e):this;"object"==typeof process&&process&&process.domain&&(o=process.domain.bind(o)),i.then(void 0,o)},p.timeout=function(t,n,e){return p(t).timeout(n,e)},h.prototype.timeout=function(t,n){var e=a(),r=setTimeout(function(){n&&"string"!=typeof n||(n=new Error(n||"Timed out after "+t+" ms"),n.code="ETIMEDOUT"),e.reject(n)},t);return this.then(function(t){clearTimeout(r),e.resolve(t)},function(t){clearTimeout(r),e.reject(t)},e.notify),e.promise},p.delay=function(t,n){return void 0===n&&(n=t,t=void 0),p(t).delay(n)},h.prototype.delay=function(t){return this.then(function(n){var e=a();return setTimeout(function(){e.resolve(n)},t),e.promise})},p.nfapply=function(t,n){return p(t).nfapply(n)},h.prototype.nfapply=function(t){var n=a(),e=L(t);return e.push(n.makeNodeResolver()),this.fapply(e).fail(n.reject),n.promise},p.nfcall=function(t){var n=L(arguments,1);return p(t).nfapply(n)},h.prototype.nfcall=function(){var t=L(arguments),n=a();return t.push(n.makeNodeResolver()),this.fapply(t).fail(n.reject),n.promise},p.nfbind=p.denodeify=function(t){var n=L(arguments,1);return function(){var e=n.concat(L(arguments)),r=a();return e.push(r.makeNodeResolver()),p(t).fapply(e).fail(r.reject),r.promise}},h.prototype.nfbind=h.prototype.denodeify=function(){var t=L(arguments);return t.unshift(this),p.denodeify.apply(void 0,t)},p.nbind=function(t,n){var e=L(arguments,2);return function(){function r(){return t.apply(n,arguments)}var o=e.concat(L(arguments)),i=a();return o.push(i.makeNodeResolver()),p(r).fapply(o).fail(i.reject),i.promise}},h.prototype.nbind=function(){var t=L(arguments,0);return t.unshift(this),p.nbind.apply(void 0,t)},p.nmapply=p.npost=function(t,n,e){return p(t).npost(n,e)},h.prototype.nmapply=h.prototype.npost=function(t,n){var e=L(n||[]),r=a();return e.push(r.makeNodeResolver()),this.dispatch("post",[t,e]).fail(r.reject),r.promise},p.nsend=p.nmcall=p.ninvoke=function(t,n){var e=L(arguments,2),r=a();return e.push(r.makeNodeResolver()),p(t).dispatch("post",[n,e]).fail(r.reject),r.promise},h.prototype.nsend=h.prototype.nmcall=h.prototype.ninvoke=function(t){var n=L(arguments,1),e=a();return n.push(e.makeNodeResolver()),this.dispatch("post",[t,n]).fail(e.reject),e.promise},p.nodeify=$,h.prototype.nodeify=function(t){return t?void this.then(function(n){p.nextTick(function(){t(null,n)})},function(n){p.nextTick(function(){t(n)})}):this},p.noConflict=function(){throw new Error("Q.noConflict only works when Q is used as a global")};var fn=s();return p});;(function(){var a,b,c,d,e,f,g,h,i=[].slice,j={}.hasOwnProperty,k=function(a,b){function c(){this.constructor=a}for(var d in b)j.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};g=function(){},b=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?i.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;f>e;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;g>f;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),a=function(a){function c(a,b){var e,f,g;if(this.element=a,this.version=c.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(c.instances.push(this),this.element.dropzone=this,e=null!=(g=c.optionsForElement(this.element))?g:{},this.options=d({},this.defaultOptions,e,null!=b?b:{}),this.options.forceFallback||!c.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.previewsContainer=this.options.previewsContainer?c.getElement(this.options.previewsContainer,"previewsContainer"):this.element),this.options.clickable&&(this.clickableElements=this.options.clickable===!0?[this.element]:c.getElements(this.options.clickable,"clickable")),this.init()}var d,e;return k(c,a),c.prototype.Emitter=b,c.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],c.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,filesizeBase:1e3,maxFiles:null,params:{},clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",accept:function(a,b){return b()},init:function(){return g},forceFallback:!1,fallback:function(){var a,b,d,e,f,g;for(this.element.className=""+this.element.className+" dz-browser-not-supported",g=this.element.getElementsByTagName("div"),e=0,f=g.length;f>e;e++)a=g[e],/(^| )dz-message($| )/.test(a.className)&&(b=a,a.className="dz-message");return b||(b=c.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(b)),d=b.getElementsByTagName("span")[0],d&&(null!=d.textContent?d.textContent=this.options.dictFallbackMessage:null!=d.innerText&&(d.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a){var b,c,d;return b={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},c=a.width/a.height,b.optWidth=this.options.thumbnailWidth,b.optHeight=this.options.thumbnailHeight,null==b.optWidth&&null==b.optHeight?(b.optWidth=b.srcWidth,b.optHeight=b.srcHeight):null==b.optWidth?b.optWidth=c*b.optHeight:null==b.optHeight&&(b.optHeight=1/c*b.optWidth),d=b.optWidth/b.optHeight,a.height<b.optHeight||a.width<b.optWidth?(b.trgHeight=b.srcHeight,b.trgWidth=b.srcWidth):c>d?(b.srcHeight=a.height,b.srcWidth=b.srcHeight*d):(b.srcWidth=a.width,b.srcHeight=b.srcWidth/d),b.srcX=(a.width-b.srcWidth)/2,b.srcY=(a.height-b.srcHeight)/2,b},drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:g,dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:g,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,d,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=c.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),l=a.previewElement.querySelectorAll("[data-dz-name]"),f=0,i=l.length;i>f;f++)b=l[f],b.textContent=this._renameFilename(a.name);for(m=a.previewElement.querySelectorAll("[data-dz-size]"),g=0,j=m.length;j>g;g++)b=m[g],b.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=c.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),d=function(b){return function(d){return d.preventDefault(),d.stopPropagation(),a.status===c.UPLOADING?c.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?c.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this),n=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],h=0,k=n.length;k>h;h++)e=n[h],o.push(e.addEventListener("click",d));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),f=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),d=0,e=f.length;e>d;d++)c=f[d],c.alt=a.name,c.src=b;return setTimeout(function(){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.textContent=b);return g}},errormultiple:g,processing:function(a){return a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink)?a._removeLink.textContent=this.options.dictCancelUpload:void 0},processingmultiple:g,uploadprogress:function(a,b){var c,d,e,f,g;if(a.previewElement){for(f=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push("PROGRESS"===c.nodeName?c.value=b:c.style.width=""+b+"%");return g}},totaluploadprogress:g,sending:g,sendingmultiple:g,success:function(a){return a.previewElement?a.previewElement.classList.add("dz-success"):void 0},successmultiple:g,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:g,complete:function(a){return a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement?a.previewElement.classList.add("dz-complete"):void 0},completemultiple:g,maxfilesexceeded:g,maxfilesreached:g,queuecomplete:g,addedfiles:g,previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>'},d=function(){var a,b,c,d,e,f,g;for(d=arguments[0],c=2<=arguments.length?i.call(arguments,1):[],f=0,g=c.length;g>f;f++){b=c[f];for(a in b)e=b[a],d[a]=e}return d},c.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.accepted&&e.push(a);return e},c.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.accepted||e.push(a);return e},c.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;d>c;c++)b=e[c],b.status===a&&f.push(b);return f},c.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(c.QUEUED)},c.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(c.UPLOADING)},c.prototype.getAddedFiles=function(){return this.getFilesWithStatus(c.ADDED)},c.prototype.getActiveFiles=function(){var a,b,d,e,f;for(e=this.files,f=[],b=0,d=e.length;d>b;b++)a=e[b],(a.status===c.UPLOADING||a.status===c.QUEUED)&&f.push(a);return f},c.prototype.init=function(){var a,b,d,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(c.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(d=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,e,f;if(c=a.hiddenFileInput.files,c.length)for(e=0,f=c.length;f>e;e++)b=c[e],a.addFile(b);return a.emit("addedfiles",c),d()})}}(this))(),this.URL=null!=(g=window.URL)?g:window.webkitURL,h=this.events,e=0,f=h.length;f>e;e++)a=h[e],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(){return 0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length?setTimeout(function(){return a.emit("queuecomplete")},0):void 0}}(this)),b=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(c){return b(c),a.emit("dragenter",c)}}(this),dragover:function(a){return function(c){var d;try{d=c.dataTransfer.effectAllowed}catch(e){}return c.dataTransfer.dropEffect="move"===d||"linkMove"===d?"move":"copy",b(c),a.emit("dragover",c)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(c){return b(c),a.drop(c)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(b){return a.listeners.push({element:b,events:{click:function(d){return(b!==a.element||d.target===a.element||c.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}}(this)),this.enable(),this.options.init.call(this)},c.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,c.instances.splice(c.instances.indexOf(this),1)},c.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(d=0,c=0,a=this.getActiveFiles(),a.length){for(h=this.getActiveFiles(),f=0,g=h.length;g>f;f++)b=h[f],d+=b.upload.bytesSent,c+=b.upload.total;e=100*d/c}else e=100;return this.emit("totaluploadprogress",e,c,d)},c.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},c.prototype._renameFilename=function(a){return"function"!=typeof this.options.renameFilename?a:this.options.renameFilename(a)},c.prototype.getFallbackForm=function(){var a,b,d,e;return(a=this.getExistingFallback())?a:(d='<div class="dz-fallback">',this.options.dictFallbackText&&(d+="<p>"+this.options.dictFallbackText+"</p>"),d+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',b=c.createElement(d),"FORM"!==this.element.tagName?(e=c.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(b)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:b)},c.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;d>c;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},f=["div","form"],d=0,e=f.length;e>d;d++)if(c=f[d],a=b(this.element.getElementsByTagName(c)))return a},c.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],d=0,e=f.length;e>d;d++)a=f[d],g.push(function(){var d,e;d=a.events,e=[];for(b in d)c=d[b],e.push(a.element.addEventListener(b,c,!1));return e}());return g},c.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],d=0,e=f.length;e>d;d++)a=f[d],g.push(function(){var d,e;d=a.events,e=[];for(b in d)c=d[b],e.push(a.element.removeEventListener(b,c,!1));return e}());return g},c.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.cancelUpload(a));return e},c.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},c.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;if(d=0,e="b",a>0){for(g=["TB","GB","MB","KB","b"],c=h=0,i=g.length;i>h;c=++h)if(f=g[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){d=a/Math.pow(this.options.filesizeBase,4-c),e=f;break}d=Math.round(10*d)/10}return"<strong>"+d+"</strong> "+e},c.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},c.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},c.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},c.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.addFile(b));return e},c.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?this.addFile(c.getAsFile()):b.isDirectory?this._addFilesFromDirectory(b,b.name):void 0:null!=c.getAsFile?null==c.kind||"file"===c.kind?this.addFile(c.getAsFile()):void 0:void 0);return f},c.prototype._addFilesFromDirectory=function(a,b){var c,d,e;return c=a.createReader(),d=function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0},(e=function(a){return function(){return c.readEntries(function(c){var d,f,g;if(c.length>0){for(f=0,g=c.length;g>f;f++)d=c[f],d.isFile?d.file(function(c){return a.options.ignoreHiddenFiles&&"."===c.name.substring(0,1)?void 0:(c.fullPath=""+b+"/"+c.name,a.addFile(c))}):d.isDirectory&&a._addFilesFromDirectory(d,""+b+"/"+d.name);e()}return null},d)}}(this))()},c.prototype.accept=function(a,b){return a.size>1024*this.options.maxFilesize*1024?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):c.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)},c.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0},this.files.push(a),a.status=c.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},c.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;d>c;c++)b=a[c],this.enqueueFile(b);return null},c.prototype.enqueueFile=function(a){if(a.status!==c.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");return a.status=c.QUEUED,this.options.autoProcessQueue?setTimeout(function(a){return function(){return a.processQueue()}}(this),0):void 0},c.prototype._thumbnailQueue=[],c.prototype._processingThumbnail=!1,c.prototype._enqueueThumbnail=function(a){return this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024?(this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)):void 0},c.prototype._processThumbnailQueue=function(){return this._processingThumbnail||0===this._thumbnailQueue.length?void 0:(this._processingThumbnail=!0,this.createThumbnail(this._thumbnailQueue.shift(),function(a){return function(){return a._processingThumbnail=!1,a._processThumbnailQueue()}}(this)))},c.prototype.removeFile=function(a){return a.status===c.UPLOADING&&this.cancelUpload(a),this.files=h(this.files,a),this.emit("removedfile",a),0===this.files.length?this.emit("reset"):void 0},c.prototype.removeAllFiles=function(a){var b,d,e,f;for(null==a&&(a=!1),f=this.files.slice(),d=0,e=f.length;e>d;d++)b=f[d],(b.status!==c.UPLOADING||a)&&this.removeFile(b);return null},c.prototype.createThumbnail=function(a,b){var c;return c=new FileReader,c.onload=function(d){return function(){return"image/svg+xml"===a.type?(d.emit("thumbnail",a,c.result),void(null!=b&&b())):d.createThumbnailFromUrl(a,c.result,b)}}(this),c.readAsDataURL(a)},c.prototype.createThumbnailFromUrl=function(a,b,c,d){var e;return e=document.createElement("img"),d&&(e.crossOrigin=d),e.onload=function(b){return function(){var d,g,h,i,j,k,l,m;return a.width=e.width,a.height=e.height,h=b.options.resize.call(b,a),null==h.trgWidth&&(h.trgWidth=h.optWidth),null==h.trgHeight&&(h.trgHeight=h.optHeight),d=document.createElement("canvas"),g=d.getContext("2d"),d.width=h.trgWidth,d.height=h.trgHeight,f(g,e,null!=(j=h.srcX)?j:0,null!=(k=h.srcY)?k:0,h.srcWidth,h.srcHeight,null!=(l=h.trgX)?l:0,null!=(m=h.trgY)?m:0,h.trgWidth,h.trgHeight),i=d.toDataURL("image/png"),b.emit("thumbnail",a,i),null!=c?c():void 0}}(this),null!=c&&(e.onerror=c),e.src=b},c.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;b>a;){if(!d.length)return;this.processFile(d.shift()),a++}}},c.prototype.processFile=function(a){return this.processFiles([a])},c.prototype.processFiles=function(a){var b,d,e;for(d=0,e=a.length;e>d;d++)b=a[d],b.processing=!0,b.status=c.UPLOADING,this.emit("processing",b);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},c.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;d>c;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},c.prototype.cancelUpload=function(a){var b,d,e,f,g,h,i;if(a.status===c.UPLOADING){for(d=this._getFilesWithXhr(a.xhr),e=0,g=d.length;g>e;e++)b=d[e],b.status=c.CANCELED;for(a.xhr.abort(),f=0,h=d.length;h>f;f++)b=d[f],this.emit("canceled",b);this.options.uploadMultiple&&this.emit("canceledmultiple",d)}else((i=a.status)===c.ADDED||i===c.QUEUED)&&(a.status=c.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));return this.options.autoProcessQueue?this.processQueue():void 0},e=function(){var a,b;return b=arguments[0],a=2<=arguments.length?i.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},c.prototype.uploadFile=function(a){return this.uploadFiles([a])},c.prototype.uploadFiles=function(a){var b,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L;for(w=new XMLHttpRequest,x=0,B=a.length;B>x;x++)b=a[x],b.xhr=w;p=e(this.options.method,a),u=e(this.options.url,a),w.open(p,u,!0),w.withCredentials=!!this.options.withCredentials,s=null,g=function(c){return function(){var d,e,f;for(f=[],d=0,e=a.length;e>d;d++)b=a[d],f.push(c._errorProcessing(a,s||c.options.dictResponseError.replace("{{statusCode}}",w.status),w));return f}}(this),t=function(c){return function(d){var e,f,g,h,i,j,k,l,m;if(null!=d)for(f=100*d.loaded/d.total,g=0,j=a.length;j>g;g++)b=a[g],b.upload={progress:f,total:d.total,bytesSent:d.loaded};else{for(e=!0,f=100,h=0,k=a.length;k>h;h++)b=a[h],(100!==b.upload.progress||b.upload.bytesSent!==b.upload.total)&&(e=!1),b.upload.progress=f,b.upload.bytesSent=b.upload.total;if(e)return}for(m=[],i=0,l=a.length;l>i;i++)b=a[i],m.push(c.emit("uploadprogress",b,f,b.upload.bytesSent));return m}}(this),w.onload=function(b){return function(d){var e;if(a[0].status!==c.CANCELED&&4===w.readyState){if(s=w.responseText,w.getResponseHeader("content-type")&&~w.getResponseHeader("content-type").indexOf("application/json"))try{s=JSON.parse(s)}catch(f){d=f,s="Invalid JSON response from server."}return t(),200<=(e=w.status)&&300>e?b._finished(a,s,d):g()}}}(this),w.onerror=function(){return function(){return a[0].status!==c.CANCELED?g():void 0}}(this),r=null!=(G=w.upload)?G:w,r.onprogress=t,j={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&d(j,this.options.headers);for(h in j)i=j[h],i&&w.setRequestHeader(h,i);if(f=new FormData,this.options.params){H=this.options.params;for(o in H)v=H[o],f.append(o,v)}for(y=0,C=a.length;C>y;y++)b=a[y],this.emit("sending",b,w,f);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,w,f),"FORM"===this.element.tagName)for(I=this.element.querySelectorAll("input, textarea, select, button"),z=0,D=I.length;D>z;z++)if(l=I[z],m=l.getAttribute("name"),n=l.getAttribute("type"),"SELECT"===l.tagName&&l.hasAttribute("multiple"))for(J=l.options,A=0,E=J.length;E>A;A++)q=J[A],q.selected&&f.append(m,q.value);else(!n||"checkbox"!==(K=n.toLowerCase())&&"radio"!==K||l.checked)&&f.append(m,l.value);for(k=F=0,L=a.length-1;L>=0?L>=F:F>=L;k=L>=0?++F:--F)f.append(this._getParamName(k),a[k],this._renameFilename(a[k].name));return this.submitRequest(w,f,a)},c.prototype.submitRequest=function(a,b){return a.send(b)},c.prototype._finished=function(a,b,d){var e,f,g;for(f=0,g=a.length;g>f;f++)e=a[f],e.status=c.SUCCESS,this.emit("success",e,b,d),this.emit("complete",e);return this.options.uploadMultiple&&(this.emit("successmultiple",a,b,d),this.emit("completemultiple",a)),this.options.autoProcessQueue?this.processQueue():void 0},c.prototype._errorProcessing=function(a,b,d){var e,f,g;for(f=0,g=a.length;g>f;f++)e=a[f],e.status=c.ERROR,this.emit("error",e,b,d),this.emit("complete",e);return this.options.uploadMultiple&&(this.emit("errormultiple",a,b,d),this.emit("completemultiple",a)),this.options.autoProcessQueue?this.processQueue():void 0},c}(b),a.version="4.3.0",a.options={},a.optionsForElement=function(b){return b.getAttribute("id")?a.options[c(b.getAttribute("id"))]:void 0},a.instances=[],a.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},a.autoDiscover=!0,a.discover=function(){var b,c,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],b=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;e>c;c++)b=a[c],f.push(/(^| )dropzone($| )/.test(b.className)?d.push(b):void 0);return f},b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))),g=[],e=0,f=d.length;f>e;e++)c=d[e],g.push(a.optionsForElement(c)!==!1?new a(c):void 0);return g},a.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],a.isBrowserSupported=function(){var b,c,d,e,f;if(b=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(f=a.blacklistedBrowsers,d=0,e=f.length;e>d;d++)c=f[d],c.test(navigator.userAgent)&&(b=!1);else b=!1;else b=!1;return b},h=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;e>d;d++)c=a[d],c!==b&&f.push(c);return f},c=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},a.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},a.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},a.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},a.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;h>f;f++)d=a[f],e.push(this.getElement(d,b))}catch(k){c=k,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;i>g;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},a.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},a.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),d=a.type,c=d.replace(/\/.*$/,""),f=0,g=b.length;g>f;f++)if(e=b[f],e=e.trim(),"."===e.charAt(0)){if(-1!==a.name.toLowerCase().indexOf(e.toLowerCase(),a.name.length-e.length))return!0}else if(/\/\*$/.test(e)){if(c===e.replace(/\/.*$/,""))return!0}else if(d===e)return!0;return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(b){return this.each(function(){return new a(this,b)})}),"undefined"!=typeof module&&null!==module?module.exports=a:window.Dropzone=a,a.ADDED="added",a.QUEUED="queued",a.ACCEPTED=a.QUEUED,a.UPLOADING="uploading",a.PROCESSING=a.UPLOADING,a.CANCELED="canceled",a.ERROR="error",a.SUCCESS="success",e=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(0,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},f=function(a,b,c,d,f,g,h,i,j,k){var l;return l=e(b),a.drawImage(b,c,d,f,g,h,i,j,k/l)},d=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){return"readystatechange"!==c.type||"complete"===d.readyState?(("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0):void 0},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(l){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},a._autoDiscoverFunction=function(){return a.autoDiscover?a.discover():void 0},d(window,a._autoDiscoverFunction)}).call(this);;!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return sd.apply(null,arguments)}function b(a){sd=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)return!1;return!0}function f(a){return void 0===a}function g(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function h(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function i(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function j(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function k(a,b){for(var c in b)j(b,c)&&(a[c]=b[c]);return j(b,"toString")&&(a.toString=b.toString),j(b,"valueOf")&&(a.valueOf=b.valueOf),a}function l(a,b,c,d){return sb(a,b,c,d,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function n(a){return null==a._pf&&(a._pf=m()),a._pf}function o(a){if(null==a._isValid){var b=n(a),c=ud.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function p(a){var b=l(NaN);return null!=a?k(n(b),a):n(b).userInvalidated=!0,b}function q(a,b){var c,d,e;if(f(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),f(b._i)||(a._i=b._i),f(b._f)||(a._f=b._f),f(b._l)||(a._l=b._l),f(b._strict)||(a._strict=b._strict),f(b._tzm)||(a._tzm=b._tzm),f(b._isUTC)||(a._isUTC=b._isUTC),f(b._offset)||(a._offset=b._offset),f(b._pf)||(a._pf=n(b)),f(b._locale)||(a._locale=b._locale),vd.length>0)for(c=0;c<vd.length;c++)d=vd[c],e=b[d],f(e)||(a[d]=e);return a}function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),wd===!1&&(wd=!0,a.updateOffset(this),wd=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return k(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),xd[b]||(w(c),xd[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=k({},a);for(c in b)j(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},k(e[c],a[c]),k(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)j(a,c)&&!j(b,c)&&d(a[c])&&(e[c]=k({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Hd[c]=Hd[c+"s"]=Hd[b]=a}function K(a){return"string"==typeof a?Hd[a]||Hd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)j(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Id[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Id[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Md[a]=e),b&&(Md[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Md[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Jd);for(b=0,c=d.length;b<c;b++)Md[d[b]]?d[b]=Md[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=z(d[e])?d[e].call(b,a):d[e];return f}}function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Ld[b]=Ld[b]||W(b),Ld[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Kd.lastIndex=0;d>=0&&Kd.test(a);)a=a.replace(Kd,c),Kd.lastIndex=0,d-=1;return a}function Z(a,b,c){ce[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return j(ce,a)?ce[a](b._strict,b._locale):new RegExp(_(a))}function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),g(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)de[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&j(de,a)&&de[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||oe).test(b)?"format":"standalone"][a.month()]:c(this._months)?this._months:this._months.standalone}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[oe.test(b)?"format":"standalone"][a.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=l([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=ne.call(this._shortMonthsParse,g),e!==-1?e:null):(e=ne.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=ne.call(this._shortMonthsParse,g),e!==-1?e:(e=ne.call(this._longMonthsParse,g),e!==-1?e:null)):(e=ne.call(this._longMonthsParse,g),e!==-1?e:(e=ne.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(e=l([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ja(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else if(b=a.localeData().monthsParse(b),!g(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=re),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=se),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)c=l([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return a<100&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ua(a,b,c){var d=7+b-c,e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:c(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=l([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=ne.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(e=l([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=ye),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ze),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ae),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)c=l([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Ua(a,b){return b._meridiemParse}function Va(a){return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}function Ya(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function Za(a){var b=null;if(!Fe[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Be._abbr,require("./locale/"+a),$a(b)}catch(a){}return Fe[a]}function $a(a,b){var c;return a&&(c=f(b)?bb(a):_a(a,b),c&&(Be=c)),Be._abbr}function _a(a,b){if(null!==b){var c=Ee;if(b.abbr=a,null!=Fe[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Fe[a]._config;else if(null!=b.parentLocale){if(null==Fe[b.parentLocale])return Ge[b.parentLocale]||(Ge[b.parentLocale]=[]),Ge[b.parentLocale].push({name:a,config:b}),null;c=Fe[b.parentLocale]._config}return Fe[a]=new C(B(c,b)),Ge[a]&&Ge[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Fe[a]}return delete Fe[a],null}function ab(a,b){if(null!=b){var c,d=Ee;null!=Fe[a]&&(d=Fe[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Fe[a],Fe[a]=c,$a(a)}else null!=Fe[a]&&(null!=Fe[a].parentLocale?Fe[a]=Fe[a].parentLocale:null!=Fe[a]&&delete Fe[a]);return Fe[a]}function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Be;if(!c(a)){if(b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return Ad(Fe)}function db(a){var b,c=a._a;return c&&n(a).overflow===-2&&(b=c[fe]<0||c[fe]>11?fe:c[ge]<1||c[ge]>ea(c[ee],c[fe])?ge:c[he]<0||c[he]>24||24===c[he]&&(0!==c[ie]||0!==c[je]||0!==c[ke])?he:c[ie]<0||c[ie]>59?ie:c[je]<0||c[je]>59?je:c[ke]<0||c[ke]>999?ke:-1,n(a)._overflowDayOfYear&&(b<ee||b>ge)&&(b=ge),n(a)._overflowWeeks&&b===-1&&(b=le),n(a)._overflowWeekday&&b===-1&&(b=me),n(a).overflow=b),a}function eb(a){var b,c,d,e,f,g,h=a._i,i=He.exec(h)||Ie.exec(h);if(i){for(n(a).iso=!0,b=0,c=Ke.length;b<c;b++)if(Ke[b][1].exec(i[1])){e=Ke[b][0],d=Ke[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Le.length;b<c;b++)if(Le[b][1].exec(i[3])){f=(i[2]||" ")+Le[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Je.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),lb(a)}else a._isValid=!1}function fb(a){var b,c,d,e,f,g,h,i,j={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},k="YXWVUTSRQPONZABCDEFGHIKLM";if(b=a._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),c=Ne.exec(b)){if(d=c[1]?"ddd"+(5===c[1].length?", ":" "):"",e="D MMM "+(c[2].length>10?"YYYY ":"YY "),f="HH:mm"+(c[4]?":ss":""),c[1]){var l=new Date(c[2]),m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][l.getDay()];if(c[1].substr(0,3)!==m)return n(a).weekdayMismatch=!0,void(a._isValid=!1)}switch(c[5].length){case 2:0===i?h=" +0000":(i=k.indexOf(c[5][1].toUpperCase())-12,h=(i<0?" -":" +")+(""+i).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:h=j[c[5]];break;default:h=j[" GMT"]}c[5]=h,a._i=c.splice(1).join(""),g=" ZZ",a._f=d+e+f+g,lb(a),n(a).rfc2822=!0}else a._isValid=!1}function gb(b){var c=Me.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,fb(b),b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b)))))}function hb(a,b,c){return null!=a?a:null!=b?b:c}function ib(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function jb(a){var b,c,d,e,f=[];if(!a._d){for(d=ib(a),a._w&&null==a._a[ge]&&null==a._a[fe]&&kb(a),null!=a._dayOfYear&&(e=hb(a._a[ee],d[ee]),(a._dayOfYear>pa(e)||0===a._dayOfYear)&&(n(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[fe]=c.getUTCMonth(),a._a[ge]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[he]&&0===a._a[ie]&&0===a._a[je]&&0===a._a[ke]&&(a._nextDay=!0,a._a[he]=0),a._d=(a._useUTC?ta:sa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[he]=24)}}function kb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,c=hb(b.GG,a._a[ee],wa(tb(),1,4).year),d=hb(b.W,1),e=hb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(tb(),f,g);c=hb(b.gg,a._a[ee],j.year),d=hb(b.w,j.week),null!=b.d?(e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f}d<1||d>xa(c,f,g)?n(a)._overflowWeeks=!0:null!=i?n(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[ee]=h.year,a._dayOfYear=h.dayOfYear)}function lb(b){if(b._f===a.ISO_8601)return void eb(b);if(b._f===a.RFC_2822)return void fb(b);b._a=[],n(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Jd)||[],c=0;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&n(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Md[f]?(d?n(b).empty=!1:n(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&n(b).unusedTokens.push(f);n(b).charsLeftOver=i-j,h.length>0&&n(b).unusedInput.push(h),b._a[he]<=12&&n(b).bigHour===!0&&b._a[he]>0&&(n(b).bigHour=void 0),n(b).parsedDateParts=b._a.slice(0),n(b).meridiem=b._meridiem,b._a[he]=mb(b._locale,b._a[he],b._meridiem),jb(b),db(b)}function mb(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}function nb(a){var b,c,d,e,f;if(0===a._f.length)return n(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],lb(b),o(b)&&(f+=n(b).charsLeftOver,f+=10*n(b).unusedTokens.length,n(b).score=f,(null==d||f<d)&&(d=f,c=b));k(a,c||b)}function ob(a){if(!a._d){var b=L(a._i);a._a=i([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),jb(a)}}function pb(a){var b=new r(db(qb(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function qb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?p({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(h(b)?a._d=b:c(d)?nb(a):d?lb(a):rb(a),o(a)||(a._d=null),a))}function rb(b){var e=b._i;f(e)?b._d=new Date(a.now()):h(e)?b._d=new Date(e.valueOf()):"string"==typeof e?gb(b):c(e)?(b._a=i(e.slice(0),function(a){return parseInt(a,10)}),jb(b)):d(e)?ob(b):g(e)?b._d=new Date(e):a.createFromInputFallback(b)}function sb(a,b,f,g,h){var i={};return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,pb(i)}function tb(a,b,c,d){return sb(a,b,c,d,!1)}function ub(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return tb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}function vb(){var a=[].slice.call(arguments,0);return ub("isBefore",a)}function wb(){var a=[].slice.call(arguments,0);return ub("isAfter",a)}function xb(a){for(var b in a)if(Re.indexOf(b)===-1||null!=a[b]&&isNaN(a[b]))return!1;for(var c=!1,d=0;d<Re.length;++d)if(a[Re[d]]){if(c)return!1;parseFloat(a[Re[d]])!==u(a[Re[d]])&&(c=!0)}return!0}function yb(){return this._isValid}function zb(){return Sb(NaN)}function Ab(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._isValid=xb(b),this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function Bb(a){return a instanceof Ab}function Cb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}function Db(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Eb(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Se)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}function Fb(b,c){var d,e;return c._isUTC?(d=c.clone(),e=(s(b)||h(b)?b.valueOf():tb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):tb(b).local()}function Gb(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Hb(b,c,d){var e,f=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Eb(_d,b),null===b)return this}else Math.abs(b)<16&&!d&&(b=60*b);return!this._isUTC&&c&&(e=Gb(this)),this._offset=b,this._isUTC=!0,null!=e&&this.add(e,"m"),f!==b&&(!c||this._changeInProgress?Xb(this,Sb(b-f,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?f:Gb(this)}function Ib(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Jb(a){return this.utcOffset(0,a)}function Kb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Gb(this),"m")),this}function Lb(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var a=Eb($d,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Mb(a){return!!this.isValid()&&(a=a?tb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Nb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ob(){if(!f(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=qb(a),a._a){var b=a._isUTC?l(a._a):tb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Pb(){return!!this.isValid()&&!this._isUTC}function Qb(){return!!this.isValid()&&this._isUTC}function Rb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Sb(a,b){var c,d,e,f=a,h=null;return Bb(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:g(a)?(f={},b?f[b]=a:f.milliseconds=a):(h=Te.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:u(h[ge])*c,h:u(h[he])*c,m:u(h[ie])*c,s:u(h[je])*c,ms:u(Cb(1e3*h[ke]))*c}):(h=Ue.exec(a))?(c="-"===h[1]?-1:1,f={y:Tb(h[2],c),M:Tb(h[3],c),w:Tb(h[4],c),d:Tb(h[5],c),h:Tb(h[6],c),m:Tb(h[7],c),s:Tb(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Vb(tb(f.from),tb(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Ab(f),Bb(a)&&j(a,"_locale")&&(d._locale=a._locale),d}function Tb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Ub(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Vb(a,b){var c;return a.isValid()&&b.isValid()?(b=Fb(b,a),a.isBefore(b)?c=Ub(a,b):(c=Ub(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function Wb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Sb(c,d),Xb(this,e,a),this}}function Xb(b,c,d,e){var f=c._milliseconds,g=Cb(c._days),h=Cb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Yb(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Zb(b,c){var d=b||tb(),e=Fb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,tb(d)))}function $b(){return new r(this)}function _b(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf())}function ac(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf())}function bc(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function cc(a,b){var c,d=s(a)?a:tb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function dc(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ec(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function fc(a,b,c){var d,e,f,g;return this.isValid()?(d=Fb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=gc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function gc(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function hc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ic(){if(!this.isValid())return null;var a=this.clone().utc();return a.year()<0||a.year()>9999?X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function jc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function kc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function lc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function mc(a){return this.from(tb(),a)}function nc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function oc(a){return this.to(tb(),a)}function pc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function qc(){return this._locale}function rc(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function sc(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function tc(){return this._d.valueOf()-6e4*(this._offset||0)}function uc(){return Math.floor(this.valueOf()/1e3)}function vc(){return new Date(this.valueOf())}function wc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function xc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function yc(){return this.isValid()?this.toISOString():null}function zc(){return o(this)}function Ac(){return k({},n(this))}function Bc(){return n(this).overflow}function Cc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Dc(a,b){U(0,[a,a.length],0,b)}function Ec(a){return Ic.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fc(a){return Ic.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Gc(){return xa(this.year(),1,4)}function Hc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ic(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Jc.call(this,a,b,c,d,e))}function Jc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Kc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Lc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Mc(a,b){b[ke]=u(1e3*("0."+a))}function Nc(){return this._isUTC?"UTC":""}function Oc(){return this._isUTC?"Coordinated Universal Time":""}function Pc(a){return tb(1e3*a)}function Qc(){return tb.apply(null,arguments).parseZone()}function Rc(a){return a}function Sc(a,b,c,d){var e=bb(),f=l().set(d,b);return e[c](f,a)}function Tc(a,b,c){if(g(a)&&(b=a,a=void 0),a=a||"",null!=b)return Sc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Sc(a,d,c,"month");return e}function Uc(a,b,c,d){"boolean"==typeof a?(g(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,g(b)&&(c=b,b=void 0),b=b||"");var e=bb(),f=a?e._week.dow:0;if(null!=c)return Sc(b,(c+f)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Sc(b,(h+f)%7,d,"day");return i}function Vc(a,b){return Tc(a,b,"months")}function Wc(a,b){return Tc(a,b,"monthsShort")}function Xc(a,b,c){return Uc(a,b,c,"weekdays")}function Yc(a,b,c){return Uc(a,b,c,"weekdaysShort")}function Zc(a,b,c){return Uc(a,b,c,"weekdaysMin")}function $c(){var a=this._data;return this._milliseconds=df(this._milliseconds),this._days=df(this._days),this._months=df(this._months),a.milliseconds=df(a.milliseconds),a.seconds=df(a.seconds),a.minutes=df(a.minutes),a.hours=df(a.hours),a.months=df(a.months),a.years=df(a.years),this}function _c(a,b,c,d){var e=Sb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function ad(a,b){return _c(this,a,b,1)}function bd(a,b){return _c(this,a,b,-1)}function cd(a){return a<0?Math.floor(a):Math.ceil(a)}function dd(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*cd(fd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ed(g)),h+=e,g-=cd(fd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ed(a){return 4800*a/146097}function fd(a){return 146097*a/4800}function gd(a){if(!this.isValid())return NaN;var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ed(b),"month"===a?c:c/12;switch(b=this._days+Math.round(fd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function hd(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12):NaN}function id(a){return function(){return this.as(a)}}function jd(a){return a=K(a),this.isValid()?this[a+"s"]():NaN}function kd(a){return function(){return this.isValid()?this._data[a]:NaN}}function ld(){return t(this.days()/7)}function md(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function nd(a,b,c){var d=Sb(a).abs(),e=uf(d.as("s")),f=uf(d.as("m")),g=uf(d.as("h")),h=uf(d.as("d")),i=uf(d.as("M")),j=uf(d.as("y")),k=e<=vf.ss&&["s",e]||e<vf.s&&["ss",e]||f<=1&&["m"]||f<vf.m&&["mm",f]||g<=1&&["h"]||g<vf.h&&["hh",g]||h<=1&&["d"]||h<vf.d&&["dd",h]||i<=1&&["M"]||i<vf.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,md.apply(null,k)}function od(a){return void 0===a?uf:"function"==typeof a&&(uf=a,!0)}function pd(a,b){return void 0!==vf[a]&&(void 0===b?vf[a]:(vf[a]=b,"s"===a&&(vf.ss=b-1),!0))}function qd(a){if(!this.isValid())return this.localeData().invalidDate();var b=this.localeData(),c=nd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function rd(){if(!this.isValid())return this.localeData().invalidDate();var a,b,c,d=wf(this._milliseconds)/1e3,e=wf(this._days),f=wf(this._months);a=t(d/60),b=t(a/60),d%=60,a%=60,c=t(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var sd,td;td=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var ud=td,vd=a.momentProperties=[],wd=!1,xd={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var yd;yd=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)j(a,b)&&c.push(b);return c};var zd,Ad=yd,Bd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Cd={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Dd="Invalid date",Ed="%d",Fd=/\d{1,2}/,Gd={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Hd={},Id={},Jd=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Kd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ld={},Md={},Nd=/\d/,Od=/\d\d/,Pd=/\d{3}/,Qd=/\d{4}/,Rd=/[+-]?\d{6}/,Sd=/\d\d?/,Td=/\d\d\d\d?/,Ud=/\d\d\d\d\d\d?/,Vd=/\d{1,3}/,Wd=/\d{1,4}/,Xd=/[+-]?\d{1,6}/,Yd=/\d+/,Zd=/[+-]?\d+/,$d=/Z|[+-]\d\d:?\d\d/gi,_d=/Z|[+-]\d\d(?::?\d\d)?/gi,ae=/[+-]?\d+(\.\d{1,3})?/,be=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ce={},de={},ee=0,fe=1,ge=2,he=3,ie=4,je=5,ke=6,le=7,me=8;zd=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var ne=zd;U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),M("month",8),Z("M",Sd),Z("MM",Sd,Od),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[fe]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[fe]=e:n(c).invalidMonth=a});var oe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),qe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),re=be,se=be;U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),J("year","y"),M("year",1),Z("Y",Zd),Z("YY",Sd,Od),Z("YYYY",Wd,Qd),Z("YYYYY",Xd,Rd),Z("YYYYYY",Xd,Rd),ba(["YYYYY","YYYYYY"],ee),ba("YYYY",function(b,c){c[ee]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[ee]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[ee]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?1900:2e3)};var te=O("FullYear",!0);U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),M("week",5),M("isoWeek",5),Z("w",Sd),Z("ww",Sd,Od),Z("W",Sd),Z("WW",Sd,Od),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var ue={dow:0,doy:6};U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),M("day",11),M("weekday",11),M("isoWeekday",11),Z("d",Sd),Z("e",Sd),Z("E",Sd),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:n(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});var ve="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),we="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ye=be,ze=be,Ae=be;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),J("hour","h"),M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Sd),Z("h",Sd),Z("k",Sd),Z("HH",Sd,Od),Z("hh",Sd,Od),Z("kk",Sd,Od),Z("hmm",Td),Z("hmmss",Ud),Z("Hmm",Td),Z("Hmmss",Ud),ba(["H","HH"],he),ba(["k","kk"],function(a,b,c){var d=u(a);b[he]=24===d?0:d}),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[he]=u(a),n(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d)),n(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d,2)),b[je]=u(a.substr(e)),n(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d,2)),b[je]=u(a.substr(e))});var Be,Ce=/[ap]\.?m?\.?/i,De=O("Hours",!0),Ee={calendar:Bd,longDateFormat:Cd,invalidDate:Dd,ordinal:Ed,dayOfMonthOrdinalParse:Fd,relativeTime:Gd,months:pe,monthsShort:qe,week:ue,weekdays:ve,weekdaysMin:xe,weekdaysShort:we,meridiemParse:Ce},Fe={},Ge={},He=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ie=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Je=/Z|[+-]\d\d(?::?\d\d)?/,Ke=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Le=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Me=/^\/?Date\((\-?\d+)/i,Ne=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;a.createFromInputFallback=x("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Oe=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?a<this?this:a:p()}),Pe=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:p()}),Qe=function(){return Date.now?Date.now():+new Date},Re=["year","quarter","month","week","day","hour","minute","second","millisecond"];Db("Z",":"),Db("ZZ",""),Z("Z",_d),Z("ZZ",_d),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Eb(_d,a)});var Se=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var Te=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ue=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Sb.fn=Ab.prototype,Sb.invalid=zb;var Ve=Wb(1,"add"),We=Wb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xe=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Dc("gggg","weekYear"),Dc("ggggg","weekYear"),Dc("GGGG","isoWeekYear"),Dc("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),M("weekYear",1),M("isoWeekYear",1),Z("G",Zd),Z("g",Zd),Z("GG",Sd,Od),Z("gg",Sd,Od),Z("GGGG",Wd,Qd),Z("gggg",Wd,Qd),Z("GGGGG",Xd,Rd),Z("ggggg",Xd,Rd),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),U("Q",0,"Qo","quarter"),J("quarter","Q"),M("quarter",7),Z("Q",Nd),ba("Q",function(a,b){b[fe]=3*(u(a)-1)}),U("D",["DD",2],"Do","date"),J("date","D"),M("date",9),Z("D",Sd),Z("DD",Sd,Od),Z("Do",function(a,b){return a?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),ba(["D","DD"],ge),ba("Do",function(a,b){b[ge]=u(a.match(Sd)[0],10)});var Ye=O("Date",!0);U("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),M("dayOfYear",4),Z("DDD",Vd),Z("DDDD",Pd),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),U("m",["mm",2],0,"minute"),J("minute","m"),M("minute",14),Z("m",Sd),Z("mm",Sd,Od),ba(["m","mm"],ie);var Ze=O("Minutes",!1);U("s",["ss",2],0,"second"),J("second","s"),M("second",15),Z("s",Sd),Z("ss",Sd,Od),ba(["s","ss"],je);var $e=O("Seconds",!1);U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),M("millisecond",16),Z("S",Vd,Nd),Z("SS",Vd,Od),Z("SSS",Vd,Pd);var _e;for(_e="SSSS";_e.length<=9;_e+="S")Z(_e,Yd);for(_e="S";_e.length<=9;_e+="S")ba(_e,Mc);var af=O("Milliseconds",!1);U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var bf=r.prototype;bf.add=Ve,bf.calendar=Zb,bf.clone=$b,bf.diff=fc,bf.endOf=sc,bf.format=kc,bf.from=lc,bf.fromNow=mc,bf.to=nc,bf.toNow=oc,bf.get=R,bf.invalidAt=Bc,bf.isAfter=_b,bf.isBefore=ac,bf.isBetween=bc,bf.isSame=cc,bf.isSameOrAfter=dc,bf.isSameOrBefore=ec,bf.isValid=zc,bf.lang=Xe,bf.locale=pc,bf.localeData=qc,bf.max=Pe,bf.min=Oe,bf.parsingFlags=Ac,bf.set=S,bf.startOf=rc,bf.subtract=We,bf.toArray=wc,bf.toObject=xc,bf.toDate=vc,bf.toISOString=ic,bf.inspect=jc,bf.toJSON=yc,bf.toString=hc,bf.unix=uc,bf.valueOf=tc,bf.creationData=Cc,bf.year=te,bf.isLeapYear=ra,bf.weekYear=Ec,bf.isoWeekYear=Fc,bf.quarter=bf.quarters=Kc,bf.month=ka,bf.daysInMonth=la,bf.week=bf.weeks=Ba,bf.isoWeek=bf.isoWeeks=Ca,bf.weeksInYear=Hc,bf.isoWeeksInYear=Gc,bf.date=Ye,bf.day=bf.days=Ka,bf.weekday=La,bf.isoWeekday=Ma,bf.dayOfYear=Lc,bf.hour=bf.hours=De,bf.minute=bf.minutes=Ze,bf.second=bf.seconds=$e,bf.millisecond=bf.milliseconds=af,bf.utcOffset=Hb,bf.utc=Jb,bf.local=Kb,bf.parseZone=Lb,bf.hasAlignedHourOffset=Mb,bf.isDST=Nb,bf.isLocal=Pb,bf.isUtcOffset=Qb,bf.isUtc=Rb,bf.isUTC=Rb,bf.zoneAbbr=Nc,bf.zoneName=Oc,bf.dates=x("dates accessor is deprecated. Use date instead.",Ye),bf.months=x("months accessor is deprecated. Use month instead",ka),bf.years=x("years accessor is deprecated. Use year instead",te),bf.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ib),bf.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ob);var cf=C.prototype;cf.calendar=D,cf.longDateFormat=E,cf.invalidDate=F,cf.ordinal=G,cf.preparse=Rc,cf.postformat=Rc,cf.relativeTime=H,cf.pastFuture=I,cf.set=A,cf.months=fa,cf.monthsShort=ga,cf.monthsParse=ia,cf.monthsRegex=na,cf.monthsShortRegex=ma,cf.week=ya,cf.firstDayOfYear=Aa,cf.firstDayOfWeek=za,cf.weekdays=Fa,cf.weekdaysMin=Ha,cf.weekdaysShort=Ga,cf.weekdaysParse=Ja,cf.weekdaysRegex=Na,cf.weekdaysShortRegex=Oa,cf.weekdaysMinRegex=Pa,cf.isPM=Va,cf.meridiem=Wa,$a("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var df=Math.abs,ef=id("ms"),ff=id("s"),gf=id("m"),hf=id("h"),jf=id("d"),kf=id("w"),lf=id("M"),mf=id("y"),nf=kd("milliseconds"),of=kd("seconds"),pf=kd("minutes"),qf=kd("hours"),rf=kd("days"),sf=kd("months"),tf=kd("years"),uf=Math.round,vf={ss:44,s:45,m:45,h:22,d:26,M:11},wf=Math.abs,xf=Ab.prototype;return xf.isValid=yb,xf.abs=$c,xf.add=ad,xf.subtract=bd,xf.as=gd,xf.asMilliseconds=ef,xf.asSeconds=ff,xf.asMinutes=gf,xf.asHours=hf,xf.asDays=jf,xf.asWeeks=kf,xf.asMonths=lf,xf.asYears=mf,xf.valueOf=hd,xf._bubble=dd,xf.get=jd,xf.milliseconds=nf,xf.seconds=of,xf.minutes=pf,xf.hours=qf,xf.days=rf,xf.weeks=ld,xf.months=sf,xf.years=tf,xf.humanize=qd,xf.toISOString=rd,xf.toString=rd,xf.toJSON=rd,xf.locale=pc,xf.localeData=qc,xf.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",rd),xf.lang=Xe,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Zd),Z("X",ae),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),a.version="2.18.1",b(tb),a.fn=bf,a.min=vb,a.max=wb,a.now=Qe,a.utc=l,a.unix=Pc,a.months=Vc,a.isDate=h,a.locale=$a,a.invalid=p,a.duration=Sb,a.isMoment=s,a.weekdays=Xc,a.parseZone=Qc,a.localeData=bb,a.isDuration=Bb,a.monthsShort=Wc,a.weekdaysMin=Zc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Yc,a.normalizeUnits=K,a.relativeTimeRounding=od,a.relativeTimeThreshold=pd,a.calendarFormat=Yb,a.prototype=bf,a});;;(function(root,factory){if(typeof exports==="object"){module.exports=factory();}else if(typeof define==="function"&&define.amd){define([],factory);}else{root.ol=factory();}}(this,function(){var OPENLAYERS={};var k,aa=this;function t(a,b){var c=OPENLAYERS;a=a.split(".");c=c||aa;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};var ea,fa;function ia(a,b){return a>b?1:a<b?-1:0}function ja(a,b){return 0<=a.indexOf(b)}function ka(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function la(a,b){var c=Array.isArray(b)?b:[b],d=c.length;for(b=0;b<d;b++)a[a.length]=c[b]}function ma(a,b){b=a.indexOf(b);-1<b&&a.splice(b,1)}
function na(a,b){for(var c=a.length>>>0,d,e=0;e<c;e++)if(d=a[e],b(d,e,a))return d;return null}function pa(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function qa(a){var b=ra,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function sa(a,b){var c;return a.every(function(d,e){c=e;return!b(d,e,a)})?-1:c}
function ta(a,b){var c=b||ia;return a.every(function(b,e){if(!e)return!0;b=c(a[e-1],b);return!(0<b||0===b)})};function v(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function ua(){}function w(a){return a.Vo||(a.Vo=++va)}var va=0;function wa(a){this.message="Assertion failed. See https://openlayers.org/en/v4.2.0/doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}v(wa,Error);function xa(a,b){if(!a)throw new wa(b);};function ya(a,b,c,d){this.ca=a;this.$=b;this.da=c;this.ia=d}function za(a,b,c){return a.ca<=b&&b<=a.$&&a.da<=c&&c<=a.ia}function Aa(a,b){return a.ca==b.ca&&a.da==b.da&&a.$==b.$&&a.ia==b.ia}function Ba(a,b){return a.ca<=b.$&&a.$>=b.ca&&a.da<=b.ia&&a.ia>=b.da};function Ca(a,b,c){return Math.min(Math.max(a,b),c)}var Da=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function Ea(a){xa(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function Fa(a,b,c,d,e,f){var g=e-c,h=f-d;if(g||h){var l=((a-c)*g+(b-d)*h)/(g*g+h*h);1<l?(c=e,d=f):0<l&&(c+=g*l,d+=h*l)}return Ga(a,b,c,d)}function Ga(a,b,c,d){a=c-a;b=d-b;return a*a+b*b}function Ha(a){return a*Math.PI/180}function Ia(a,b){a%=b;return 0>a*b?a+b:a}
function Ja(a,b,c){return a+c*(b-a)};function Ka(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]+2*b;c[1]=a[1]+2*b;return c}function La(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Ma(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Na(a){for(var b=Oa(),c=0,d=a.length;c<d;++c)Pa(b,a[c]);return b}function Qa(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function Ra(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function Sa(a,b,c){b=b<a[0]?a[0]-b:a[2]<b?b-a[2]:0;a=c<a[1]?a[1]-c:a[3]<c?c-a[3]:0;return b*b+a*a}function Ta(a,b){return Ua(a,b[0],b[1])}function Va(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}
function Ua(a,b,c){return a[0]<=b&&b<=a[2]&&a[1]<=c&&c<=a[3]}function Wa(a,b){var c=a[1],d=a[2],e=a[3],f=b[0];b=b[1];var g=0;f<a[0]?g|=16:f>d&&(g|=4);b<c?g|=8:b>e&&(g|=2);g||(g=1);return g}function Oa(){return[Infinity,Infinity,-Infinity,-Infinity]}function Xa(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}function Ya(a){return Xa(Infinity,Infinity,-Infinity,-Infinity,a)}function Za(a,b){var c=a[0];a=a[1];return Xa(c,a,c,a,b)}function $a(a,b,c,d,e){e=Ya(e);return ab(e,a,b,c,d)}
function bb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function cb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3]);return a}function Pa(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}function ab(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}
function db(a,b,c){var d;return(d=b.call(c,eb(a)))||(d=b.call(c,gb(a)))||(d=b.call(c,hb(a)))?d:(d=b.call(c,ib(a)))?d:!1}function jb(a){var b=0;kb(a)||(b=lb(a)*mb(a));return b}function eb(a){return[a[0],a[1]]}function gb(a){return[a[2],a[1]]}function nb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
function ob(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,l=a[0],m=a[1];a=l-c+h;d=l-c-h;g=l+c-h;c=l+c+h;var h=m-f-b,l=m-f+b,n=m+f+b,f=m+f-b;return Xa(Math.min(a,d,g,c),Math.min(h,l,n,f),Math.max(a,d,g,c),Math.max(h,l,n,f),e)}function mb(a){return a[3]-a[1]}function pb(a,b,c){c=c?c:Oa();qb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function ib(a){return[a[0],a[3]]}
function hb(a){return[a[2],a[3]]}function lb(a){return a[2]-a[0]}function qb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function kb(a){return a[2]<a[0]||a[3]<a[1]}function rb(a,b){var c=(a[2]-a[0])/2*(b-1);b=(a[3]-a[1])/2*(b-1);a[0]-=c;a[2]+=c;a[1]-=b;a[3]+=b}
function sb(a,b,c){a=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];b(a,a,2);var d=[a[0],a[2],a[4],a[6]],e=[a[1],a[3],a[5],a[7]];b=Math.min.apply(null,d);a=Math.min.apply(null,e);d=Math.max.apply(null,d);e=Math.max.apply(null,e);return Xa(b,a,d,e,c)};var tb="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function ub(a){for(var b in a)delete a[b]}function vb(a){var b=[],c;for(c in a)b.push(a[c]);return b}function wb(a){for(var b in a)return!1;return!b};function xb(a){this.radius=a}xb.prototype.a=function(a){for(var b=0,c=a.length,d=a[c-1][0],e=a[c-1][1],f=0;f<c;f++)var g=a[f][0],h=a[f][1],b=b+Ha(g-d)*(2+Math.sin(Ha(e))+Math.sin(Ha(h))),d=g,e=h;return b*this.radius*this.radius/2};xb.prototype.b=function(a,b){var c=Ha(a[1]),d=Ha(b[1]),e=(d-c)/2;a=Ha(b[0]-a[0])/2;c=Math.sin(e)*Math.sin(e)+Math.sin(a)*Math.sin(a)*Math.cos(c)*Math.cos(d);return 2*this.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))};xb.prototype.offset=function(a,b,c){var d=Ha(a[1]);b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(Ha(a[0])+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var yb=new xb(6370997);var zb={};zb.degrees=2*Math.PI*yb.radius/360;zb.ft=.3048;zb.m=1;zb["us-ft"]=1200/3937;var Ab=null;function Bb(a){this.mb=a.code;this.a=a.units;this.f=void 0!==a.extent?a.extent:null;this.g=void 0!==a.worldExtent?a.worldExtent:null;this.b=void 0!==a.axisOrientation?a.axisOrientation:"enu";this.c=void 0!==a.global?a.global:!1;this.i=!(!this.c||!this.f);this.o=a.getPointResolution;this.j=null;this.l=a.metersPerUnit;var b=a.code,c=Ab||window.proj4;"function"==typeof c&&(b=c.defs(b),void 0!==b&&(void 0!==b.axis&&void 0===a.axisOrientation&&(this.b=b.axis),void 0===a.metersPerUnit&&(this.l=b.to_meter),void 0===a.units&&(this.a=b.units)))}k=Bb.prototype;k.Jk=function(){return this.mb};k.G=function(){return this.f};k.Un=function(){return this.a};k.sc=function(){return this.l||zb[this.a]};k.tl=function(){return this.g};k.dm=function(){return this.c};k.$p=function(a){this.c=a;this.i=!(!a||!this.f)};k.Vn=function(a){this.f=a;this.i=!(!this.c||!a)};k.kq=function(a){this.g=a};k.Zp=function(a){this.o=a};function Cb(a){Bb.call(this,{code:a,units:"m",extent:Db,global:!0,worldExtent:Eb,getPointResolution:function(a,c){return a/Da(c[1]/6378137)}})}v(Cb,Bb);var Fb=6378137*Math.PI,Db=[-Fb,-Fb,Fb,Fb],Eb=[-180,-85,180,85],Gb="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new Cb(a)});function Hb(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c){b[e]=Fb*a[e]/180;var f=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));f>Fb?f=Fb:f<-Fb&&(f=-Fb);b[e+1]=f}return b}function Ib(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/Fb,b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var Jb=new xb(6378137);function Kb(a,b){Bb.call(this,{code:a,units:"degrees",extent:Lb,axisOrientation:b,global:!0,metersPerUnit:Mb,worldExtent:Lb})}v(Kb,Bb);var Lb=[-180,-90,180,90],Mb=Math.PI*Jb.radius/180,Nb=[new Kb("CRS:84"),new Kb("EPSG:4326","neu"),new Kb("urn:ogc:def:crs:EPSG::4326","neu"),new Kb("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new Kb("urn:ogc:def:crs:OGC:1.3:CRS84"),new Kb("urn:ogc:def:crs:OGC:2:84"),new Kb("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new Kb("urn:x-ogc:def:crs:EPSG:4326","neu")];var Ob={};var Pb={};function Qb(a,b,c){a=a.mb;b=b.mb;a in Pb||(Pb[a]={});Pb[a][b]=c}function Rb(a,b){var c;a in Pb&&b in Pb[a]&&(c=Pb[a][b]);return c};function Sb(a,b,c){a=Tb(a);var d=a.o;d?b=d(b,c):"degrees"!=a.a&&(d=Vb(a,Tb("EPSG:4326")),b=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],b=d(b,b,2),b=(yb.b(b.slice(0,2),b.slice(2,4))+yb.b(b.slice(4,6),b.slice(6,8)))/2,a=a.sc(),void 0!==a&&(b/=a));return b}function Wb(a){a.forEach(Xb);a.forEach(function(b){a.forEach(function(a){b!==a&&Qb(b,a,Yb)})})}function Zb(){Nb.forEach(function(a){Gb.forEach(function(b){Qb(a,b,Hb);Qb(b,a,Ib)})})}function Xb(a){Ob[a.mb]=a;Qb(a,a,Yb)}
function $b(a){return a?"string"===typeof a?Tb(a):a:Tb("EPSG:3857")}function ac(a,b,c,d){a=Tb(a);b=Tb(b);Qb(a,b,cc(c));Qb(b,a,cc(d))}function cc(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f;for(f=0;f<e;f+=d){var g=a([b[f],b[f+1]]);c[f]=g[0];c[f+1]=g[1];for(g=d-1;2<=g;--g)c[f+g]=b[f+g]}return c}}
function Tb(a){var b=null;if(a instanceof Bb)b=a;else if("string"===typeof a){var b=Ob[a]||null,c=Ab||window.proj4;b||"function"!=typeof c||void 0===c.defs(a)||(b=new Bb({code:a}),Xb(b))}return b}function dc(a,b){if(a===b)return!0;var c=a.a===b.a;return a.mb===b.mb?c:Vb(a,b)===Yb&&c}function ec(a,b){a=Tb(a);b=Tb(b);return Vb(a,b)}
function Vb(a,b){var c=a.mb,d=b.mb,e=Rb(c,d);if(!e){var f=Ab||window.proj4;if("function"==typeof f){var g=f.defs(c),h=f.defs(d);void 0!==g&&void 0!==h&&(g===h?Wb([b,a]):(e=f(d,c),ac(b,a,e.forward,e.inverse)),e=Rb(c,d))}}e||(e=fc);return e}function fc(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Yb(a,b){if(void 0!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}else a=a.slice();return a}function gc(a,b,c){return ec(b,c)(a,void 0,a.length)}
function hc(a,b,c){b=ec(b,c);return sb(a,b)}function ic(){Wb(Gb);Wb(Nb);Zb()}ic();function jc(a,b,c,d){return void 0!==d?(d[0]=a,d[1]=b,d[2]=c,d):[a,b,c]}function kc(a){var b=a[0],c=Array(b),d=1<<b-1,e;for(e=0;e<b;++e){var f=48;a[1]&d&&(f+=1);a[2]&d&&(f+=2);c[e]=String.fromCharCode(f);d>>=1}return c.join("")};function lc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;xa(ta(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.i=void 0!==a.origin?a.origin:null;this.c=null;void 0!==a.origins&&(this.c=a.origins,xa(this.c.length==this.b.length,20));var b=a.extent;void 0===b||this.i||this.c||(this.i=ib(b));xa(!this.i&&this.c||this.i&&!this.c,18);this.f=null;void 0!==a.tileSizes&&(this.f=a.tileSizes,xa(this.f.length==this.b.length,19));this.g=void 0!==a.tileSize?a.tileSize:this.f?null:256;xa(!this.g&&this.f||this.g&&!this.f,22);this.v=void 0!==b?b:null;this.a=null;this.j=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new ya(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&mc(this,b)}var nc=[0,0,0];k=lc.prototype;k.Rf=function(a,b,c){a=oc(this,a,b);for(var d=a.ca,e=a.$;d<=e;++d)for(var f=a.da,g=a.ia;f<=g;++f)c([b,d,f])};function pc(a,b,c,d,e){e=a.Aa(b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,oc(a,e,b,d)))return!0;--b}return!1}k.G=function(){return this.v};k.Ti=function(){return this.maxZoom};k.Ui=function(){return this.minZoom};k.Pc=function(a){return this.i?this.i:this.c[a]};k.Da=function(a){return this.b[a]};k.Vi=function(){return this.b};function qc(a,b,c,d){return b[0]<a.maxZoom?(d=a.Aa(b,d),oc(a,d,b[0]+1,c)):null}
function rc(a,b,c,d){sc(a,b[0],b[1],c,!1,nc);var e=nc[1],f=nc[2];sc(a,b[2],b[3],c,!0,nc);a=nc[1];b=nc[2];void 0!==d?(d.ca=e,d.$=a,d.da=f,d.ia=b):d=new ya(e,a,f,b);return d}function oc(a,b,c,d){return rc(a,b,a.Da(c),d)}function tc(a,b){var c=a.Pc(b[0]),d=a.Da(b[0]);a=Ma(a.gb(b[0]),a.j);return[c[0]+(b[1]+.5)*a[0]*d,c[1]+(b[2]+.5)*a[1]*d]}k.Aa=function(a,b){var c=this.Pc(a[0]),d=this.Da(a[0]),e=Ma(this.gb(a[0]),this.j),f=c[0]+a[1]*e[0]*d;a=c[1]+a[2]*e[1]*d;return Xa(f,a,f+e[0]*d,a+e[1]*d,b)};k.Be=function(a,b,c){return sc(this,a[0],a[1],b,!1,c)};function sc(a,b,c,d,e,f){var g=a.tc(d),h=d/a.Da(g),l=a.Pc(g);a=Ma(a.gb(g),a.j);b=h*Math.floor((b-l[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-l[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));return jc(g,b,c,f)}k.bg=function(a,b,c){return sc(this,a[0],a[1],this.Da(b),!1,c)};k.gb=function(a){return this.g?this.g:this.f[a]};k.tc=function(a,b){return Ca(ka(this.b,a,b||0),this.minZoom,this.maxZoom)};function mc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=oc(a,b,e);a.a=d};function vc(a){var b=a.j;b||(b=wc(a),a.j=b);return b}function xc(a){var b={};tb(b,a?a:{});void 0===b.extent&&(b.extent=Tb("EPSG:3857").G());b.resolutions=yc(b.extent,b.maxZoom,b.tileSize);delete b.maxZoom;return new lc(b)}function yc(a,b,c){b=void 0!==b?b:42;var d=mb(a);a=lb(a);c=Ma(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function wc(a,b,c){a=zc(a);b=yc(a,b,c);return new lc({extent:a,origin:ib(a),resolutions:b,tileSize:c})}
function zc(a){a=Tb(a);var b=a.G();b||(a=180*zb.degrees/a.sc(),b=Xa(-a,-a,a,a));return b};function Ac(a){this.b=a.html;this.a=a.tileRanges?a.tileRanges:null}Ac.prototype.i=function(){return this.b};function Bc(a){return function(b){if(b)return[Ca(b[0],a[0],a[2]),Ca(b[1],a[1],a[3])]}}function Cc(a){return a};function Dc(a){function b(b){var c=a.listener,e=a.lh||a.target;a.nh&&Ec(a);return c.call(e,b)}return a.mh=b}function Fc(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.lh===c)return d&&(e.deleteIndex=f),e}function Gc(a,b){return(a=a.fb)?a[b]:void 0}function Hc(a){var b=a.fb;b||(b=a.fb={});return b}function Ic(a,b){var c=Gc(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].mh),ub(c[d]);c.length=0;if(c=a.fb)delete c[b],Object.keys(c).length||delete a.fb}}
function y(a,b,c,d,e){var f=Hc(a),g=f[b];g||(g=f[b]=[]);(f=Fc(g,c,d,!1))?e||(f.nh=!1):(f={lh:d,nh:!!e,listener:c,target:a,type:b},a.addEventListener(b,Dc(f)),g.push(f));return f}function Jc(a,b,c,d){return y(a,b,c,d,!0)}function Kc(a,b,c,d){(a=Gc(a,b))&&(c=Fc(a,c,d,!0))&&Ec(c)}function Ec(a){if(a&&a.target){a.target.removeEventListener(a.type,a.mh);var b=Gc(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);b.length||Ic(a.target,a.type)}ub(a)}}
function Lc(a){var b=Hc(a),c;for(c in b)Ic(a,c)};function Mc(){}Mc.prototype.Jb=!1;function Nc(a){a.Jb||(a.Jb=!0,a.ka())}Mc.prototype.ka=ua;function Oc(a){this.type=a;this.target=null}Oc.prototype.preventDefault=Oc.prototype.stopPropagation=function(){this.qp=!0};function Pc(a){a.stopPropagation()};function Qc(){this.Ua={};this.ra={};this.oa={}}v(Qc,Mc);Qc.prototype.addEventListener=function(a,b){var c=this.oa[a];c||(c=this.oa[a]=[]);-1===c.indexOf(b)&&c.push(b)};Qc.prototype.b=function(a){var b="string"===typeof a?new Oc(a):a;a=b.type;b.target=this;var c=this.oa[a];if(c){a in this.ra||(this.ra[a]=0,this.Ua[a]=0);++this.ra[a];for(var d=0,e=c.length;d<e;++d)if(!1===c[d].call(this,b)||b.qp){var f=!1;break}--this.ra[a];if(!this.ra[a]){b=this.Ua[a];for(delete this.Ua[a];b--;)this.removeEventListener(a,ua);delete this.ra[a]}return f}};Qc.prototype.ka=function(){Lc(this)};function Rc(a,b){return b?b in a.oa:0<Object.keys(a.oa).length}
Qc.prototype.removeEventListener=function(a,b){var c=this.oa[a];c&&(b=c.indexOf(b),a in this.Ua?(c[b]=ua,++this.Ua[a]):(c.splice(b,1),c.length||delete this.oa[a]))};function Sc(){Qc.call(this);this.i=0}v(Sc,Qc);k=Sc.prototype;k.s=function(){++this.i;this.b("change")};k.L=function(){return this.i};k.J=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=y(this,a[f],b,c);return e}return y(this,a,b,c)};k.once=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=Jc(this,a[f],b,c);return e}return Jc(this,a,b,c)};k.K=function(a,b,c){if(Array.isArray(a))for(var d=0,e=a.length;d<e;++d)Kc(this,a[d],b,c);else Kc(this,a,b,c)};function Tc(a){Sc.call(this);w(this);this.S={};void 0!==a&&this.H(a)}v(Tc,Sc);var Uc={};function Vc(a){return Uc.hasOwnProperty(a)?Uc[a]:Uc[a]="change:"+a}k=Tc.prototype;k.get=function(a){var b;this.S.hasOwnProperty(a)&&(b=this.S[a]);return b};k.O=function(){return Object.keys(this.S)};k.N=function(){return tb({},this.S)};function Wc(a,b,c){var d=Vc(b);a.b(new Xc(d,b,c));a.b(new Xc("propertychange",b,c))}k.set=function(a,b,c){c?this.S[a]=b:(c=this.S[a],this.S[a]=b,c!==b&&Wc(this,a,c))};k.H=function(a,b){for(var c in a)this.set(c,a[c],b)};k.P=function(a,b){if(a in this.S){var c=this.S[a];delete this.S[a];b||Wc(this,a,c)}};function Xc(a,b,c){Oc.call(this,a);this.key=b;this.oldValue=c}v(Xc,Oc);function Yc(a,b){Tc.call(this);this.c=!!(b||{}).unique;this.a=a?a:[];if(this.c)for(a=0,b=this.a.length;a<b;++a)Zc(this,this.a[a],a);$c(this)}v(Yc,Tc);k=Yc.prototype;k.clear=function(){for(;0<this.dc();)this.pop()};k.fg=function(a){var b;var c=0;for(b=a.length;c<b;++c)this.push(a[c]);return this};k.forEach=function(a,b){this.a.forEach(a,b)};k.tm=function(){return this.a};k.item=function(a){return this.a[a]};k.dc=function(){return this.get(ad)};k.He=function(a,b){this.c&&Zc(this,b);this.a.splice(a,0,b);$c(this);this.b(new bd("add",b))};k.pop=function(){return this.Hg(this.dc()-1)};k.push=function(a){this.c&&Zc(this,a);var b=this.dc();this.He(b,a);return this.dc()};k.remove=function(a){var b=this.a,c;var d=0;for(c=b.length;d<c;++d)if(b[d]===a)return this.Hg(d)};k.Hg=function(a){var b=this.a[a];this.a.splice(a,1);$c(this);this.b(new bd("remove",b));return b};k.Wp=function(a,b){var c=this.dc();if(a<c)this.c&&Zc(this,b,a),c=this.a[a],this.a[a]=b,this.b(new bd("remove",c)),this.b(new bd("add",b));else{for(;c<a;++c)this.He(c,void 0);this.He(a,b)}};function $c(a){a.set(ad,a.a.length)}function Zc(a,b,c){for(var d=0,e=a.a.length;d<e;++d)if(a.a[d]===b&&d!==c)throw new wa(58);}var ad="length";function bd(a,b){Oc.call(this,a);this.element=b}v(bd,Oc);var cd=/^#(?:[0-9a-f]{3}){1,2}$/i,dd=/^([a-z]*)$/i;function ed(a){return Array.isArray(a)?a:fd(a)}function gd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
var fd=function(){var a={},b=0;return function(c){if(a.hasOwnProperty(c))var d=a[c];else{if(1024<=b){d=0;for(var e in a)d++&3||(delete a[e],--b)}d=c;dd.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=getComputedStyle(e).color,document.body.removeChild(e));if(cd.exec(d)){var f=d.length-1;xa(3==f||6==f,54);var g=3==f?1:2;f=parseInt(d.substr(1+0*g,g),16);e=parseInt(d.substr(1+1*g,g),16);d=parseInt(d.substr(1+2*g,g),16);1==g&&(f=(f<<4)+f,e=(e<<4)+e,d=(d<<4)+d);f=[f,e,d,1]}else d.indexOf("rgba(")?d.indexOf("rgb(")?xa(!1,14):(d=d.slice(4,-1).split(",").map(Number),d.push(1),f=hd(d)):(d=d.slice(5,-1).split(",").map(Number),f=hd(d));d=f;a[c]=d;++b}return d}}();function hd(a){var b=[];b[0]=Ca(a[0]+.5|0,0,255);b[1]=Ca(a[1]+.5|0,0,255);b[2]=Ca(a[2]+.5|0,0,255);b[3]=Ca(a[3],0,1);return b};function id(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:gd(a)};function jd(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}function kd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}function ld(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function md(a){Tc.call(this);this.element=a.element?a.element:null;this.a=this.R=null;this.v=[];this.render=a.render?a.render:ua;a.target&&this.f(a.target)}v(md,Tc);md.prototype.ka=function(){ld(this.element);Tc.prototype.ka.call(this)};md.prototype.g=function(){return this.a};md.prototype.setMap=function(a){this.a&&ld(this.element);for(var b=0,c=this.v.length;b<c;++b)Ec(this.v[b]);this.v.length=0;if(this.a=a)(this.R?this.R:a.D).appendChild(this.element),this.render!==ua&&this.v.push(y(a,"postrender",this.render,this)),a.render()};md.prototype.f=function(a){this.R="string"===typeof a?document.getElementById(a):a};function nd(a){a=a?a:{};this.I=document.createElement("UL");this.u=document.createElement("LI");this.I.appendChild(this.u);this.u.style.display="none";this.c=void 0!==a.collapsed?a.collapsed:!0;this.o=void 0!==a.collapsible?a.collapsible:!0;this.o||(this.c=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.D=document.createElement("span"),this.D.textContent=d):this.D=d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.C=document.createElement("span"),this.C.textContent=d):this.C=d;var e=this.o&&!this.c?this.D:this.C,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);y(d,"click",this.Vm,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.c&&this.o?" ol-collapsed":"")+(this.o?"":" ol-uncollapsible");c.appendChild(this.I);c.appendChild(d);md.call(this,{element:c,render:a.render?a.render:od,target:a.target});this.B=!0;this.l={};this.j={};this.T={}}v(nd,md);function od(a){if(a=a.frameState){var b,c,d,e,f,g=a.layerStatesArray,h=tb({},a.attributions),l={},m={},n=a.viewState.projection;var p=0;for(b=g.length;p<b;p++)if(e=g[p].layer.ha()){var q=w(e).toString();if(f=e.j){var r=0;for(c=f.length;r<c;r++){var u=f[r];var x=w(u).toString();if(!(x in h)){if(d=a.usedTiles[q]){var B=e.Ta(n);a:{var E=void 0;var A,L=u,oa=B,ha=n;if(L.a){for(E in d)if(E in L.a){var B=d[E];var ga=0;for(A=L.a[E].length;ga<A;++ga){var z=L.a[E][ga];if(Ba(z,B)){E=!0;break a}var M=oc(oa,zc(ha),parseInt(E,10)),ba=M.$-M.ca+1;if(B.ca<M.ca||B.$>M.$)if(Ba(z,new ya(Ia(B.ca,ba),Ia(B.$,ba),B.da,B.ia))||B.$-B.ca+1>ba&&Ba(z,M)){E=!0;break a}}}E=!1}else E=!0}}else E=!1;E?(x in l&&delete l[x],E=u.b,E in m||(m[E]=!0,h[x]=u)):l[x]=u}}}}b=[h,l];p=b[0];b=b[1];for(var da in this.l)da in p?(this.j[da]||(this.l[da].style.display="",this.j[da]=!0),delete p[da]):da in b?(this.j[da]&&(this.l[da].style.display="none",delete this.j[da]),delete b[da]):(ld(this.l[da]),delete this.l[da],delete this.j[da]);for(da in p)r=document.createElement("LI"),r.innerHTML=p[da].b,this.I.appendChild(r),this.l[da]=r,this.j[da]=!0;for(da in b)r=document.createElement("LI"),r.innerHTML=b[da].b,r.style.display="none",this.I.appendChild(r),this.l[da]=r;da=!wb(this.j)||!wb(a.logos);this.B!=da&&(this.element.style.display=da?"":"none",this.B=da);da&&wb(this.j)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");a=a.logos;da=this.T;for(ca in da)ca in a||(ld(da[ca]),delete da[ca]);for(var fb in a)if(b=a[fb],b instanceof HTMLElement&&(this.u.appendChild(b),da[fb]=b),!(fb in da)){var ca=new Image;ca.src=fb;""===b?p=ca:(p=document.createElement("a"),p.href=b,p.appendChild(ca));this.u.appendChild(p);da[fb]=p}this.u.style.display=wb(a)?"none":""}else this.B&&(this.element.style.display="none",this.B=!1)}k=nd.prototype;k.Vm=function(a){a.preventDefault();pd(this)};function pd(a){a.element.classList.toggle("ol-collapsed");a.c?kd(a.D,a.C):kd(a.C,a.D);a.c=!a.c}k.Um=function(){return this.o};k.Xm=function(a){this.o!==a&&(this.o=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.c&&pd(this))};k.Wm=function(a){this.o&&this.c!==a&&pd(this)};k.Tm=function(){return this.c};function qd(a){return Math.pow(a,3)}function rd(a){return 1-qd(1-a)}function sd(a){return 3*a*a-2*a*a*a}function td(a){return a};function ud(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.c=null;"string"===typeof c?(this.c=document.createElement("span"),this.c.className="ol-compass",this.c.textContent=c):(this.c=c,this.c.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.c);y(c,"click",ud.prototype.D,this);d=document.createElement("div");d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:vd;this.o=a.resetNorth?a.resetNorth:void 0;md.call(this,{element:d,render:b,target:a.target});this.l=void 0!==a.duration?a.duration:250;this.j=void 0!==a.autoHide?a.autoHide:!0;this.u=void 0;this.j&&this.element.classList.add("ol-hidden")}v(ud,md);ud.prototype.D=function(a){a.preventDefault();this.o?this.o():(a=this.a.Z())&&void 0!==a.Qa()&&(0<this.l?a.animate({rotation:0,duration:this.l,easing:rd}):a.Oe(0))};function vd(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.u){var b="rotate("+a+"rad)";if(this.j){var c=this.element.classList.contains("ol-hidden");c||a?c&&a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.c.style.msTransform=b;this.c.style.webkitTransform=b;this.c.style.transform=b}this.u=a}};function wd(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);y(h,"click",wd.prototype.j.bind(this,c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);y(d,"click",wd.prototype.j.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);md.call(this,{element:c,target:a.target});this.c=void 0!==a.duration?a.duration:250}v(wd,md);wd.prototype.j=function(a,b){b.preventDefault();if(b=this.a.Z()){var c=b.Pa();c&&(a=b.constrainResolution(c,a),0<this.c?(b.Ic()&&b.ed(),b.animate({resolution:a,duration:this.c,easing:rd})):b.Vc(a))}};function xd(a){a=a?a:{};var b=new Yc;(void 0!==a.zoom?a.zoom:1)&&b.push(new wd(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new ud(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new nd(a.attributionOptions));return b};function yd(a){a=a?a:{};this.c=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.o="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.l="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.c+"-"+zd();b.setAttribute("type","button");b.title=c;b.appendChild(this.o);y(b,"click",this.C,this);c=document.createElement("div");c.className=this.c+" ol-unselectable ol-control "+(Ad()?"":"ol-unsupported");c.appendChild(b);md.call(this,{element:c,target:a.target});this.D=void 0!==a.keys?a.keys:!1;this.j=a.source}v(yd,md);yd.prototype.C=function(a){a.preventDefault();Ad()&&(a=this.a)&&(zd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.j?"string"===typeof this.j?document.getElementById(this.j):this.j:a.jd(),this.D?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):Bd(a):Bd(a)))};yd.prototype.u=function(){var a=this.element.firstElementChild,b=this.a;zd()?(a.className=this.c+"-true",kd(this.l,this.o)):(a.className=this.c+"-false",kd(this.o,this.l));b&&b.Ad()};yd.prototype.setMap=function(a){md.prototype.setMap.call(this,a);a&&this.v.push(y(document,Cd(),this.u,this))};function Ad(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function zd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
function Bd(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var Cd=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function Dd(a){a=a?a:{};var b=document.createElement("DIV");b.className=void 0!==a.className?a.className:"ol-mouse-position";md.call(this,{element:b,render:a.render?a.render:Ed,target:a.target});y(this,Vc(Fd),this.Ym,this);a.coordinateFormat&&this.kj(a.coordinateFormat);a.projection&&this.$h(a.projection);this.u=void 0!==a.undefinedHTML?a.undefinedHTML:"";this.l=b.innerHTML;this.o=this.j=this.c=null}v(Dd,md);function Ed(a){a=a.frameState;a?this.c!=a.viewState.projection&&(this.c=a.viewState.projection,this.j=null):this.c=null;Gd(this,this.o)}k=Dd.prototype;k.Ym=function(){this.j=null};k.xh=function(){return this.get(Hd)};k.Zh=function(){return this.get(Fd)};k.Ll=function(a){this.o=this.a.xe(a);Gd(this,this.o)};k.Ml=function(){Gd(this,null);this.o=null};k.setMap=function(a){md.prototype.setMap.call(this,a);a&&(a=a.a,this.v.push(y(a,"mousemove",this.Ll,this),y(a,"mouseout",this.Ml,this)))};k.kj=function(a){this.set(Hd,a)};k.$h=function(a){this.set(Fd,Tb(a))};function Gd(a,b){var c=a.u;if(b&&a.c){if(!a.j){var d=a.Zh();a.j=d?Vb(a.c,d):fc}if(b=a.a.Wa(b))a.j(b,b),c=(c=a.xh())?c(b):b.toString()}a.l&&c==a.l||(a.element.innerHTML=c,a.l=c)}var Fd="projection",Hd="coordinateFormat";function Id(a,b,c){Oc.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}v(Id,Oc);function Jd(a,b,c,d,e){Id.call(this,a,b,e);this.originalEvent=c;this.pixel=b.xe(c);this.coordinate=b.Wa(this.pixel);this.dragging=void 0!==d?d:!1}v(Jd,Id);Jd.prototype.preventDefault=function(){Id.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};Jd.prototype.stopPropagation=function(){Id.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};var Kd=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function Ld(a,b){var c,d,e=Kd.length;for(d=0;d<e;++d)try{if(c=a.getContext(Kd[d],b))return c}catch(f){}return null};var Md,Nd="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Od=-1!==Nd.indexOf("firefox"),Pd=-1!==Nd.indexOf("safari")&&-1==Nd.indexOf("chrom"),Qd=-1!==Nd.indexOf("webkit")&&-1==Nd.indexOf("edge"),Rd=-1!==Nd.indexOf("macintosh"),Sd=window.devicePixelRatio||1,Td=!1,Ud=function(){if(!("HTMLCanvasElement"in window))return!1;try{var a=document.createElement("CANVAS").getContext("2d");return a?(void 0!==a.setLineDash&&(Td=!0),!0):!1}catch(b){return!1}}(),Vd="DeviceOrientationEvent"in
window,Wd="geolocation"in navigator,Xd="ontouchstart"in window,Yd="PointerEvent"in window,Zd=!!navigator.msPointerEnabled,$d=!1,ae,be=[];if("WebGLRenderingContext"in window)try{var ce=Ld(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});ce&&($d=!0,ae=ce.getParameter(ce.MAX_TEXTURE_SIZE),be=ce.getSupportedExtensions())}catch(a){}Md=$d;fa=be;ea=ae;var de={Iq:"singleclick",xq:"click",yq:"dblclick",Bq:"pointerdrag",Eq:"pointermove",Aq:"pointerdown",Hq:"pointerup",Gq:"pointerover",Fq:"pointerout",Cq:"pointerenter",Dq:"pointerleave",zq:"pointercancel"};function ee(a,b,c,d,e){Jd.call(this,a,b,c.b,d,e);this.b=c}v(ee,Jd);function fe(a,b){this.b=a;this.f=b};function ge(a){fe.call(this,a,{mousedown:this.fm,mousemove:this.gm,mouseup:this.jm,mouseover:this.im,mouseout:this.hm});this.a=a.i;this.i=[]}v(ge,fe);function he(a,b){a=a.i;var c=b.clientX;b=b.clientY;for(var d=0,e=a.length,f;d<e&&(f=a[d]);d++){var g=Math.abs(b-f[1]);if(25>=Math.abs(c-f[0])&&25>=g)return!0}return!1}function ie(a){var b=je(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}k=ge.prototype;k.fm=function(a){if(!he(this,a)){(1).toString()in this.a&&this.cancel(a);var b=ie(a);this.a[(1).toString()]=a;ke(this.b,"pointerdown",b,a)}};k.gm=function(a){if(!he(this,a)){var b=ie(a);ke(this.b,"pointermove",b,a)}};k.jm=function(a){if(!he(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=ie(a),ke(this.b,"pointerup",b,a),delete this.a[(1).toString()])}};k.im=function(a){if(!he(this,a)){var b=ie(a);le(this.b,b,a)}};k.hm=function(a){if(!he(this,a)){var b=ie(a);me(this.b,b,a)}};k.cancel=function(a){var b=ie(a);this.b.cancel(b,a);delete this.a[(1).toString()]};function ne(a){fe.call(this,a,{MSPointerDown:this.om,MSPointerMove:this.pm,MSPointerUp:this.sm,MSPointerOut:this.qm,MSPointerOver:this.rm,MSPointerCancel:this.nm,MSGotPointerCapture:this.lm,MSLostPointerCapture:this.mm});this.a=a.i;this.i=["","unavailable","touch","pen","mouse"]}v(ne,fe);function oe(a,b){var c=b;"number"===typeof b.pointerType&&(c=je(b,b),c.pointerType=a.i[b.pointerType]);return c}k=ne.prototype;k.om=function(a){this.a[a.pointerId.toString()]=a;var b=oe(this,a);ke(this.b,"pointerdown",b,a)};k.pm=function(a){var b=oe(this,a);ke(this.b,"pointermove",b,a)};k.sm=function(a){var b=oe(this,a);ke(this.b,"pointerup",b,a);delete this.a[a.pointerId.toString()]};k.qm=function(a){var b=oe(this,a);me(this.b,b,a)};k.rm=function(a){var b=oe(this,a);le(this.b,b,a)};k.nm=function(a){var b=oe(this,a);this.b.cancel(b,a);delete this.a[a.pointerId.toString()]};k.mm=function(a){this.b.b(new pe("lostpointercapture",a,a))};k.lm=function(a){this.b.b(new pe("gotpointercapture",a,a))};function qe(a){fe.call(this,a,{pointerdown:this.ip,pointermove:this.jp,pointerup:this.mp,pointerout:this.kp,pointerover:this.lp,pointercancel:this.hp,gotpointercapture:this.ul,lostpointercapture:this.em})}v(qe,fe);k=qe.prototype;k.ip=function(a){re(this.b,a)};k.jp=function(a){re(this.b,a)};k.mp=function(a){re(this.b,a)};k.kp=function(a){re(this.b,a)};k.lp=function(a){re(this.b,a)};k.hp=function(a){re(this.b,a)};k.em=function(a){re(this.b,a)};k.ul=function(a){re(this.b,a)};function pe(a,b,c){Oc.call(this,a);this.b=b;a=c?c:{};this.buttons=se(a);this.pressure=te(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.ctrlKey="ctrlKey"in a?a.ctrlKey:!1;this.altKey="altKey"in a?a.altKey:!1;this.shiftKey="shiftKey"in a?a.shiftKey:!1;this.metaKey="metaKey"in a?a.metaKey:!1;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.tiltX="tiltX"in a?a.tiltX:0;this.tiltY="tiltY"in a?a.tiltY:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}
v(pe,Oc);function se(a){if(a.buttons||ue)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function te(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}var ue=!1;try{ue=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function ve(a,b){fe.call(this,a,{touchstart:this.rq,touchmove:this.qq,touchend:this.pq,touchcancel:this.oq});this.a=a.i;this.j=b;this.i=void 0;this.g=0;this.c=void 0}v(ve,fe);k=ve.prototype;k.ij=function(){this.g=0;this.c=void 0};function we(a,b,c){b=je(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.g;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.i===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
function xe(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g;for(g=0;g<f;++g){var h=we(a,b,e[g]);h.preventDefault=d;c.call(a,b,h)}}
k.rq=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f;for(f=0;f<d;++f){var g=c[f];var h=this.a[g];var l;if(!(l=1==g))a:{for(var m=b.length,n=0;n<m;n++)if(l=b[n],l.identifier===g-2){l=!0;break a}l=!1}l||e.push(h.out)}for(f=0;f<e.length;++f)this.Kf(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(!c||1===c&&(1).toString()in this.a)this.i=b.identifier,void 0!==this.c&&clearTimeout(this.c);ye(this,a);this.g++;xe(this,a,this.cp)};k.cp=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Wi:b.target};var c=this.b;b.bubbles=!0;ke(c,"pointerover",b,a);c=this.b;b.bubbles=!1;ke(c,"pointerenter",b,a);ke(this.b,"pointerdown",b,a)};k.qq=function(a){a.preventDefault();xe(this,a,this.km)};k.km=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Wi;ke(this.b,"pointermove",b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(me(this.b,d,a),le(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Kf(a,b)));c.out=b;c.Wi=b.target}};k.pq=function(a){ye(this,a);xe(this,a,this.sq)};k.sq=function(a,b){ke(this.b,"pointerup",b,a);this.b.out(b,a);ze(this.b,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.i=void 0,this.c=setTimeout(this.ij.bind(this),200))};k.oq=function(a){xe(this,a,this.Kf)};k.Kf=function(a,b){this.b.cancel(b,a);this.b.out(b,a);ze(this.b,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.i=void 0,this.c=setTimeout(this.ij.bind(this),200))};function ye(a,b){var c=a.j.i;b=b.changedTouches[0];if(a.i===b.identifier){var d=[b.clientX,b.clientY];c.push(d);setTimeout(function(){ma(c,d)},2500)}};function Ae(a){Qc.call(this);this.g=a;this.i={};this.f={};this.a=[];Yd?Be(this,new qe(this)):Zd?Be(this,new ne(this)):(a=new ge(this),Be(this,a),Xd&&Be(this,new ve(this,a)));a=this.a.length;for(var b,c=0;c<a;c++)b=this.a[c],Ce(this,Object.keys(b.f))}v(Ae,Qc);function Be(a,b){var c=Object.keys(b.f);c&&(c.forEach(function(a){var c=b.f[a];c&&(this.f[a]=c.bind(b))},a),a.a.push(b))}Ae.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};function Ce(a,b){b.forEach(function(a){y(this.g,a,this.c,this)},a)}function De(a,b){b.forEach(function(a){Kc(this.g,a,this.c,this)},a)}function je(a,b){for(var c={},d,e=0,f=Ee.length;e<f;e++)d=Ee[e][0],c[d]=a[d]||b[d]||Ee[e][1];return c}function ze(a,b,c){b.bubbles=!1;ke(a,"pointerleave",b,c)}Ae.prototype.out=function(a,b){a.bubbles=!0;ke(this,"pointerout",a,b)};Ae.prototype.cancel=function(a,b){ke(this,"pointercancel",a,b)};function me(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||ze(a,b,c)}function le(a,b,c){b.bubbles=!0;ke(a,"pointerover",b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,ke(a,"pointerenter",b,c))}function ke(a,b,c,d){a.b(new pe(b,d,c))}function re(a,b){a.b(new pe(b.type,b,b))}Ae.prototype.ka=function(){for(var a=this.a.length,b,c=0;c<a;c++)b=this.a[c],De(this,Object.keys(b.f));Qc.prototype.ka.call(this)};var Ee=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];function Fe(a,b){Qc.call(this);this.i=a;this.j=0;this.o=!1;this.f=[];this.D=b?b*Sd:Sd;this.c=null;a=this.i.a;this.S=0;this.u={};this.g=new Ae(a);this.a=null;this.l=y(this.g,"pointerdown",this.Ol,this);this.v=y(this.g,"pointermove",this.Lp,this)}v(Fe,Qc);function Ge(a,b){var c=new ee("click",a.i,b);a.b(c);a.j?(clearTimeout(a.j),a.j=0,c=new ee("dblclick",a.i,b),a.b(c)):a.j=setTimeout(function(){this.j=0;var a=new ee("singleclick",this.i,b);this.b(a)}.bind(a),250)}
function He(a,b){"pointerup"==b.type||"pointercancel"==b.type?delete a.u[b.pointerId]:"pointerdown"==b.type&&(a.u[b.pointerId]=!0);a.S=Object.keys(a.u).length}k=Fe.prototype;k.Jh=function(a){He(this,a);var b=new ee("pointerup",this.i,a);this.b(b);this.o||a.button||Ge(this,this.c);this.S||(this.f.forEach(Ec),this.f.length=0,this.o=!1,this.c=null,Nc(this.a),this.a=null)};k.Ol=function(a){He(this,a);var b=new ee("pointerdown",this.i,a);this.b(b);this.c=a;this.f.length||(this.a=new Ae(document),this.f.push(y(this.a,"pointermove",this.Hm,this),y(this.a,"pointerup",this.Jh,this),y(this.g,"pointercancel",this.Jh,this)))};k.Hm=function(a){if(Ie(this,a)){this.o=!0;var b=new ee("pointerdrag",this.i,a,this.o);this.b(b)}a.preventDefault()};k.Lp=function(a){this.b(new ee(a.type,this.i,a,!(!this.c||!Ie(this,a))))};function Ie(a,b){return Math.abs(b.clientX-a.c.clientX)>a.D||Math.abs(b.clientY-a.c.clientY)>a.D}k.ka=function(){this.v&&(Ec(this.v),this.v=null);this.l&&(Ec(this.l),this.l=null);this.f.forEach(Ec);this.f.length=0;this.a&&(Nc(this.a),this.a=null);this.g&&(Nc(this.g),this.g=null);Qc.prototype.ka.call(this)};function Ke(a,b){this.l=a;this.c=b;this.b=[];this.i=[];this.a={}}Ke.prototype.clear=function(){this.b.length=0;this.i.length=0;ub(this.a)};function Le(a){var b=a.b,c=a.i,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Me(a,0));b=a.c(d);delete a.a[b];return d}Ke.prototype.f=function(a){xa(!(this.c(a)in this.a),31);var b=this.l(a);return Infinity!=b?(this.b.push(a),this.i.push(b),this.a[this.c(a)]=!0,Ne(this,0,this.b.length-1),!0):!1};function Me(a,b){for(var c=a.b,d=a.i,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var l=2*b+1,m=2*b+2,l=m<e&&d[m]<d[l]?m:l;c[b]=c[l];d[b]=d[l];b=l}c[b]=f;d[b]=g;Ne(a,h,b)}function Ne(a,b,c){var d=a.b;a=a.i;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}
function Oe(a){var b=a.l,c=a.b,d=a.i,e=0,f=c.length,g;for(g=0;g<f;++g){var h=c[g];var l=b(h);Infinity==l?delete a.a[a.c(h)]:(d[e]=l,c[e++]=h)}c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Me(a,b)};function Pe(a,b){Ke.call(this,function(b){return a.apply(null,b)},function(a){return a[0].bb()});this.v=b;this.j=0;this.g={}}v(Pe,Ke);Pe.prototype.f=function(a){var b=Ke.prototype.f.call(this,a);b&&y(a[0],"change",this.o,this);return b};Pe.prototype.o=function(a){a=a.target;var b=a.getState();if(2===b||3===b||4===b||5===b)Kc(a,"change",this.o,this),a=a.bb(),a in this.g&&(delete this.g[a],--this.j),this.v()};function Qe(a,b,c){for(var d=0,e,f;a.j<b&&d<c&&0<a.b.length;)e=Le(a)[0],f=e.bb(),0!==e.getState()||f in a.g||(a.g[f]=!0,++a.j,++d,e.load())};function Re(a){return function(b,c,d){if(void 0!==b)return b=ka(a,b,d),b=Ca(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Se(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Te(a){if(void 0!==a)return 0}function Ue(a,b){if(void 0!==a)return a+b}function Ve(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function We(){var a=Ha(5);return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function Xe(a,b){a=void 0!==b?a.toFixed(b):""+a;b=a.indexOf(".");b=-1===b?a.length:b;return 2<b?a:Array(3-b).join("0")+a}function Ye(a){a=(""+a).split(".");for(var b=["1","3"],c=0;c<Math.max(a.length,b.length);c++){var d=parseInt(a[c]||"0",10),e=parseInt(b[c]||"0",10);if(d>e)return 1;if(e>d)return-1}return 0};function Ze(a,b){a[0]+=b[0];a[1]+=b[1];return a}function $e(a,b){var c=b.pd(),d=b.wa();b=d[0];var d=d[1],e=a[0]-b;a=a[1]-d;e||a||(e=1);var f=Math.sqrt(e*e+a*a);return[b+c*e/f,d+c*a/f]}function af(a,b){var c=a[0];a=a[1];var d=b[0],e=b[1];b=d[0];var d=d[1],f=e[0],e=e[1],g=f-b,h=e-d,c=g||h?(g*(c-b)+h*(a-d))/(g*g+h*h||0):0;0>=c?(a=b,c=d):1<=c?(a=f,c=e):(a=b+c*g,c=d+c*h);return[a,c]}
function bf(a,b,c){b=Ia(b+180,360)-180;var d=Math.abs(3600*b);c=c||0;var e=Math.pow(10,c),f=Math.floor(d/3600),g=Math.floor((d-3600*f)/60),d=Math.ceil((d-3600*f-60*g)*e)/e;60<=d&&(d=0,g+=1);60<=g&&(g=0,f+=1);return f+"\u00b0 "+Xe(g)+"\u2032 "+Xe(d,c)+"\u2033"+(b?" "+a.charAt(0>b?1:0):"")}function cf(a,b,c){return a?b.replace("{x}",a[0].toFixed(c)).replace("{y}",a[1].toFixed(c)):""}function df(a,b){for(var c=!0,d=a.length-1;0<=d;--d)if(a[d]!=b[d]){c=!1;break}return c}
function ef(a,b){var c=Math.cos(b);b=Math.sin(b);var d=a[1]*c+a[0]*b;a[0]=a[0]*c-a[1]*b;a[1]=d;return a}function gf(a,b){a[0]*=b;a[1]*=b}function hf(a,b){var c=a[0]-b[0];a=a[1]-b[1];return c*c+a*a}function jf(a,b){return Math.sqrt(hf(a,b))}function kf(a,b){return hf(a,af(a,b))}function lf(a,b){return cf(a,"{x}, {y}",b)};function mf(){return!0}function nf(){return!1};function of(){Tc.call(this);this.l=Oa();this.v=-1;this.f={};this.o=this.g=0}v(of,Tc);k=of.prototype;k.Ab=function(a,b){b=b?b:[NaN,NaN];this.Kb(a[0],a[1],b,Infinity);return b};k.sb=function(a){return this.Mc(a[0],a[1])};k.Mc=nf;k.G=function(a){this.v!=this.i&&(this.l=this.se(this.l),this.v=this.i);var b=this.l;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};k.Rb=function(a){return this.Vd(a*a)};k.tb=function(a,b){this.Dc(ec(a,b));return this};function pf(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var l=a[b],m=a[b+1];g[h++]=e[0]*l+e[2]*m+e[4];g[h++]=e[1]*l+e[3]*m+e[5]}f&&g.length!=h&&(g.length=h);return g}function qf(a,b,c,d,e,f,g){for(var h=g?g:[],l=0,m;b<c;b+=d)for(h[l++]=a[b]+e,h[l++]=a[b+1]+f,m=b+2;m<b+d;++m)h[l++]=a[m];g&&h.length!=l&&(h.length=l);return h};function rf(){of.call(this);this.ja="XY";this.a=2;this.A=null}v(rf,of);function sf(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}k=rf.prototype;k.Mc=nf;k.se=function(a){return $a(this.A,0,this.A.length,this.a,a)};k.ac=function(){return this.A.slice(0,this.a)};k.ga=function(){return this.A};k.bc=function(){return this.A.slice(this.A.length-this.a)};k.cc=function(){return this.ja};k.Vd=function(a){this.o!=this.i&&(ub(this.f),this.g=0,this.o=this.i);if(0>a||this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.hd(a);if(c.ga().length<this.A.length)return this.f[b]=c;this.g=a;return this};k.hd=function(){return this};k.qa=function(){return this.a};function tf(a,b,c){a.a=sf(b);a.ja=b;a.A=c}
function uf(a,b,c,d){if(b)c=sf(b);else{for(b=0;b<d;++b)if(c.length)c=c[0];else{a.ja="XY";a.a=2;return}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.ja=b;a.a=c}k.Dc=function(a){this.A&&(a(this.A,this.A,this.a),this.s())};k.rotate=function(a,b){var c=this.ga();if(c){var d=c.length,e=this.qa(),f=c?c:[],g=Math.cos(a);a=Math.sin(a);var h=b[0];b=b[1];for(var l=0,m=0;m<d;m+=e){var n=c[m]-h,p=c[m+1]-b;f[l++]=h+n*g-p*a;f[l++]=b+n*a+p*g;for(n=m+2;n<m+e;++n)f[l++]=c[n]}c&&f.length!=l&&(f.length=l);this.s()}};k.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=nb(this.G()));if(c=this.ga()){b=c.length;for(var f=this.qa(),g=c?c:[],h=e[0],e=e[1],l=0,m=0;m<b;m+=f){var n=c[m]-h,p=c[m+1]-e;g[l++]=h+a*n;g[l++]=e+d*p;for(n=m+2;n<m+f;++n)g[l++]=c[n]}c&&g.length!=l&&(g.length=l);this.s()}};k.translate=function(a,b){var c=this.ga();c&&(qf(c,0,c.length,this.qa(),a,b,c),this.s())};function vf(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(g*h-f*l),f=h,g=l;return e/2}function wf(a,b,c,d){var e=0,f;var g=0;for(f=c.length;g<f;++g){var h=c[g],e=e+vf(a,b,h,d);b=h}return e};function xf(a,b,c,d,e,f,g){var h=a[b],l=a[b+1],m=a[c]-h,n=a[c+1]-l;if(m||n)if(f=((e-h)*m+(f-l)*n)/(m*m+n*n),1<f)b=c;else if(0<f){for(e=0;e<d;++e)g[e]=Ja(a[b+e],a[c+e],f);g.length=d;return}for(e=0;e<d;++e)g[e]=a[b+e];g.length=d}function yf(a,b,c,d,e){var f=a[b],g=a[b+1];for(b+=d;b<c;b+=d){var h=a[b],l=a[b+1],f=Ga(f,g,h,l);f>e&&(e=f);f=h;g=l}return e}function zf(a,b,c,d,e){var f;var g=0;for(f=c.length;g<f;++g){var h=c[g];e=yf(a,b,h,d,e);b=h}return e}
function Af(a,b,c,d,e,f,g,h,l,m,n){if(b==c)return m;if(!e){var p=Ga(g,h,a[b],a[b+1]);if(p<m){for(n=0;n<d;++n)l[n]=a[b+n];l.length=d;return p}return m}for(var q=n?n:[NaN,NaN],r=b+d;r<c;)if(xf(a,r-d,r,d,g,h,q),p=Ga(g,h,q[0],q[1]),p<m){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d;r+=d}else r+=d*Math.max((Math.sqrt(p)-Math.sqrt(m))/e|0,1);if(f&&(xf(a,c-d,b,d,g,h,q),p=Ga(g,h,q[0],q[1]),p<m)){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d}return m}
function Bf(a,b,c,d,e,f,g,h,l,m,n){n=n?n:[NaN,NaN];var p;var q=0;for(p=c.length;q<p;++q){var r=c[q];m=Af(a,b,r,d,e,f,g,h,l,m,n);b=r}return m};function Cf(a,b){var c=0,d;var e=0;for(d=b.length;e<d;++e)a[c++]=b[e];return c}function Df(a,b,c,d){var e;var f=0;for(e=c.length;f<e;++f){var g=c[f],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function Ef(a,b,c,d,e){e=e?e:[];var f=0,g;var h=0;for(g=c.length;h<g;++h)b=Df(a,b,c[h],d),e[f++]=b;e.length=f;return e};function Ff(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function Gf(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g;var h=0;for(g=c.length;h<g;++h){var l=c[h];e[f++]=Ff(a,b,l,d,e[f]);b=l}e.length=f;return e};function Hf(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var l=Array(h);l[0]=1;l[h-1]=1;c=[b,c-d];for(var m=0,n;0<c.length;){var p=c.pop(),q=c.pop(),r=0,u=a[q],x=a[q+1],B=a[p],E=a[p+1];for(n=q+d;n<p;n+=d){var A=Fa(a[n],a[n+1],u,x,B,E);A>r&&(m=n,r=A)}r>e&&(l[(m-b)/d]=1,q+d<m&&c.push(q,m),m+d<p&&c.push(m,p))}for(n=0;n<h;++n)l[n]&&(f[g++]=a[b+n*d],f[g++]=a[b+n*d+1]);return g}
function If(a,b,c,d,e,f,g,h){var l;var m=0;for(l=c.length;m<l;++m){var n=c[m];a:{var p=a,q=n,r=d,u=e,x=f,B=g;if(b!=q){var E=u*Math.round(p[b]/u),A=u*Math.round(p[b+1]/u);b+=r;x[B++]=E;x[B++]=A;do{var L=u*Math.round(p[b]/u);g=u*Math.round(p[b+1]/u);b+=r;if(b==q){x[B++]=L;x[B++]=g;g=B;break a}}while(L==E&&g==A);for(;b<q;){var oa=u*Math.round(p[b]/u);var ha=u*Math.round(p[b+1]/u);b+=r;if(oa!=L||ha!=g){var ga=L-E,z=g-A,M=oa-E,ba=ha-A;ga*ba==z*M&&(0>ga&&M<ga||ga==M||0<ga&&M>ga)&&(0>z&&ba<z||z==ba||0<z&&ba>z)||(x[B++]=L,x[B++]=g,E=L,A=g);L=oa;g=ha}}x[B++]=L;x[B++]=g}g=B}h.push(g);b=n}return g};function Jf(a,b){rf.call(this);this.c=this.j=-1;this.ma(a,b)}v(Jf,rf);k=Jf.prototype;k.clone=function(){var a=new Jf(null);Kf(a,this.ja,this.A.slice());return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;this.c!=this.i&&(this.j=Math.sqrt(yf(this.A,0,this.A.length,this.a,0)),this.c=this.i);return Af(this.A,0,this.A.length,this.a,this.j,!0,a,b,c,d)};k.qn=function(){return vf(this.A,0,this.A.length,this.a)};k.X=function(){return Ff(this.A,0,this.A.length,this.a)};k.hd=function(a){var b=[];b.length=Hf(this.A,0,this.A.length,this.a,a,b,0);a=new Jf(null);Kf(a,"XY",b);return a};k.U=function(){return"LinearRing"};k.Xa=function(){};k.ma=function(a,b){a?(uf(this,b,a,1),this.A||(this.A=[]),this.A.length=Df(this.A,0,a,this.a),this.s()):Kf(this,"XY",null)};function Kf(a,b,c){tf(a,b,c);a.s()};function C(a,b){rf.call(this);this.ma(a,b)}v(C,rf);k=C.prototype;k.clone=function(){var a=new C(null);a.ba(this.ja,this.A.slice());return a};k.Kb=function(a,b,c,d){var e=this.A;a=Ga(a,b,e[0],e[1]);if(a<d){d=this.a;for(b=0;b<d;++b)c[b]=e[b];c.length=d;return a}return d};k.X=function(){return this.A?this.A.slice():[]};k.se=function(a){return Za(this.A,a)};k.U=function(){return"Point"};k.Xa=function(a){return Ua(a,this.A[0],this.A[1])};k.ma=function(a,b){a?(uf(this,b,a,0),this.A||(this.A=[]),this.A.length=Cf(this.A,a),this.s()):this.ba("XY",null)};k.ba=function(a,b){tf(this,a,b);this.s()};function Lf(a,b,c,d,e){return!db(e,function(e){return!Mf(a,b,c,d,e[0],e[1])})}function Mf(a,b,c,d,e,f){for(var g=0,h=a[c-d],l=a[c-d+1];b<c;b+=d){var m=a[b],n=a[b+1];l<=f?n>f&&0<(m-h)*(f-l)-(e-h)*(n-l)&&g++:n<=f&&0>(m-h)*(f-l)-(e-h)*(n-l)&&g--;h=m;l=n}return!!g}function Nf(a,b,c,d,e,f){if(!c.length||!Mf(a,b,c[0],d,e,f))return!1;var g;b=1;for(g=c.length;b<g;++b)if(Mf(a,c[b-1],c[b],d,e,f))return!1;return!0};function Of(a,b,c,d,e,f,g){var h,l=e[f+1],m=[],n=c[0];var p=a[n-d];var q=a[n-d+1];for(h=b;h<n;h+=d){var r=a[h];var u=a[h+1];if(l<=q&&u<=l||q<=l&&l<=u)p=(l-q)/(u-q)*(r-p)+p,m.push(p);p=r;q=u}n=NaN;q=-Infinity;m.sort(ia);p=m[0];h=1;for(u=m.length;h<u;++h){r=m[h];var x=Math.abs(r-p);x>q&&(p=(p+r)/2,Nf(a,b,c,d,p,l)&&(n=p,q=x));p=r}isNaN(n)&&(n=e[f]);return g?(g.push(n,l),g):[n,l]};function Pf(a,b,c,d,e,f){for(var g=[a[b],a[b+1]],h=[],l;b+d<c;b+=d){h[0]=a[b+d];h[1]=a[b+d+1];if(l=e.call(f,g,h))return l;g[0]=h[0];g[1]=h[1]}return!1};function Qf(a,b,c,d,e){var f=ab(Oa(),a,b,c,d);return qb(e,f)?Va(e,f)||f[0]>=e[0]&&f[2]<=e[2]||f[1]>=e[1]&&f[3]<=e[3]?!0:Pf(a,b,c,d,function(a,b){var c=!1,d=Wa(e,a),f=Wa(e,b);if(1===d||1===f)c=!0;else{var g=e[0],h=e[1],r=e[2],u=e[3],x=b[0];b=b[1];a=(b-a[1])/(x-a[0]);f&2&&!(d&2)&&(c=x-(b-u)/a,c=c>=g&&c<=r);c||!(f&4)||d&4||(c=b-(x-r)*a,c=c>=h&&c<=u);c||!(f&8)||d&8||(c=x-(b-h)/a,c=c>=g&&c<=r);c||!(f&16)||d&16||(c=b-(x-g)*a,c=c>=h&&c<=u)}return c}):!1}
function Rf(a,b,c,d,e){var f=c[0];if(!(Qf(a,b,f,d,e)||Mf(a,b,f,d,e[0],e[1])||Mf(a,b,f,d,e[0],e[3])||Mf(a,b,f,d,e[2],e[1])||Mf(a,b,f,d,e[2],e[3])))return!1;if(1===c.length)return!0;b=1;for(f=c.length;b<f;++b)if(Lf(a,c[b-1],c[b],d,e))return!1;return!0};function Sf(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(h-f)*(l+g),f=h,g=l;return 0<e}function Tf(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f;var g=0;for(f=b.length;g<f;++g){var h=b[g],e=Sf(a,e,h,c);if(!g){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
function Uf(a,b,c,d,e){e=void 0!==e?e:!1;var f;var g=0;for(f=c.length;g<f;++g){var h=c[g],l=Sf(a,b,h,d);if(g?e&&!l||!e&&l:e&&l||!e&&!l)for(var l=a,m=h,n=d;b<m-n;){var p;for(p=0;p<n;++p){var q=l[b+p];l[b+p]=l[m-n+p];l[m-n+p]=q}b+=n;m-=n}b=h}return b}function Vf(a,b,c,d){var e=0,f;var g=0;for(f=b.length;g<f;++g)e=Uf(a,e,b[g],c,d);return e};function D(a,b){rf.call(this);this.c=[];this.u=-1;this.D=null;this.I=this.C=this.B=-1;this.j=null;this.ma(a,b)}v(D,rf);k=D.prototype;k.pk=function(a){this.A?la(this.A,a.ga()):this.A=a.ga().slice();this.c.push(this.A.length);this.s()};k.clone=function(){var a=new D(null);a.ba(this.ja,this.A.slice(),this.c.slice());return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;this.C!=this.i&&(this.B=Math.sqrt(zf(this.A,0,this.c,this.a,0)),this.C=this.i);return Bf(this.A,0,this.c,this.a,this.B,!0,a,b,c,d)};k.Mc=function(a,b){return Nf(this.ec(),0,this.c,this.a,a,b)};k.tn=function(){return wf(this.ec(),0,this.c,this.a)};k.X=function(a){if(void 0!==a){var b=this.ec().slice();Uf(b,0,this.c,this.a,a)}else b=this.A;return Gf(b,0,this.c,this.a)};k.Bb=function(){return this.c};function Wf(a){if(a.u!=a.i){var b=nb(a.G());a.D=Of(a.ec(),0,a.c,a.a,b,0);a.u=a.i}return a.D}k.Tk=function(){return new C(Wf(this))};k.Zk=function(){return this.c.length};k.Ch=function(a){if(0>a||this.c.length<=a)return null;var b=new Jf(null);Kf(b,this.ja,this.A.slice(a?this.c[a-1]:0,this.c[a]));return b};k.Sd=function(){var a=this.ja,b=this.A,c=this.c,d=[],e=0,f;var g=0;for(f=c.length;g<f;++g){var h=c[g],l=new Jf(null);Kf(l,a,b.slice(e,h));d.push(l);e=h}return d};k.ec=function(){if(this.I!=this.i){var a=this.A;Tf(a,this.c,this.a)?this.j=a:(this.j=a.slice(),this.j.length=Uf(this.j,0,this.c,this.a));this.I=this.i}return this.j};k.hd=function(a){var b=[],c=[];b.length=If(this.A,0,this.c,this.a,Math.sqrt(a),b,0,c);a=new D(null);a.ba("XY",b,c);return a};k.U=function(){return"Polygon"};k.Xa=function(a){return Rf(this.ec(),0,this.c,this.a,a)};k.ma=function(a,b){a?(uf(this,b,a,2),this.A||(this.A=[]),a=Ef(this.A,0,a,this.a,this.c),this.A.length=a.length?a[a.length-1]:0,this.s()):this.ba("XY",null,this.c)};k.ba=function(a,b,c){tf(this,a,b);this.c=c;this.s()};function Xf(a,b,c,d){var e=d?d:32;d=[];var f;for(f=0;f<e;++f)la(d,a.offset(b,c,2*Math.PI*f/e));d.push(d[0],d[1]);a=new D(null);a.ba("XY",d,[d.length]);return a}function Yf(a){var b=a[0],c=a[1],d=a[2];a=a[3];b=[b,c,b,a,d,a,d,c,b,c];c=new D(null);c.ba("XY",b,[b.length]);return c}
function Zf(a,b,c){var d=b?b:32,e=a.qa();b=a.ja;for(var f=new D(null,b),d=e*(d+1),e=Array(d),g=0;g<d;g++)e[g]=0;f.ba(b,e,[e.length]);$f(f,a.wa(),a.pd(),c);return f}function $f(a,b,c,d){var e=a.ga(),f=a.ja,g=a.qa(),h=a.Bb(),l=e.length/g-1;d=d?d:0;for(var m,n,p=0;p<=l;++p)n=p*g,m=d+2*Ia(p,l)*Math.PI/l,e[n]=b[0]+c*Math.cos(m),e[n+1]=b[1]+c*Math.sin(m);a.ba(f,e,h)};function F(a){Tc.call(this);a=tb({},a);this.o=[0,0];this.c=[];this.wf=this.wf.bind(this);this.v=$b(a.projection);ag(this,a)}v(F,Tc);function ag(a,b){var c={};c.center=void 0!==b.center?b.center:null;var d=void 0!==b.minZoom?b.minZoom:0;var e=void 0!==b.maxZoom?b.maxZoom:28;var f=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions){e=b.resolutions;var g=e[0];var h=e[e.length-1];e=Re(e)}else{g=$b(b.projection);h=g.G();var l=(h?Math.max(lb(h),mb(h)):360*zb.degrees/g.sc())/256/Math.pow(2,0),m=l/Math.pow(2,28);g=b.maxResolution;void 0!==g?d=0:g=l/Math.pow(f,d);h=b.minResolution;void 0===h&&(h=void 0!==b.maxZoom?void 0!==b.maxResolution?g/Math.pow(f,e):l/Math.pow(f,e):m);e=d+Math.floor(Math.log(g/h)/Math.log(f));h=g/Math.pow(f,e-d);e=Se(f,g,e-d)}a.a=g;a.f=h;a.C=f;a.j=b.resolutions;a.l=d;(void 0!==b.enableRotation?b.enableRotation:1)?(d=b.constrainRotation,d=void 0===d||!0===d?We():!1===d?Ue:"number"===typeof d?Ve(d):Ue):d=Te;a.g={center:void 0!==b.extent?Bc(b.extent):Cc,resolution:e,rotation:d};void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=a.constrainResolution(a.a,b.zoom-a.l));c.rotation=void 0!==b.rotation?b.rotation:0;a.H(c);a.D=b}function bg(a,b){var c=tb({},a.D);void 0!==c.resolution?c.resolution=a.Pa():c.zoom=a.Hh();c.center=a.wa();c.rotation=a.Qa();return tb({},c,b)}k=F.prototype;k.animate=function(a){var b=Date.now(),c=this.wa().slice(),d=this.Pa(),e=this.Qa(),f=arguments.length;if(1<f&&"function"===typeof arguments[f-1]){var g=arguments[f-1];--f}for(var h=[],l=0;l<f;++l){var m=arguments[l],n={start:b,complete:!1,anchor:m.anchor,duration:void 0!==m.duration?m.duration:1E3,easing:m.easing||sd};m.center&&(n.Rg=c,n.Tg=m.center,c=n.Tg);void 0!==m.zoom?(n.tf=d,n.zd=this.constrainResolution(this.a,m.zoom-this.l,0),d=n.zd):m.resolution&&(n.tf=d,n.zd=m.resolution,d=n.zd);void 0!==m.rotation&&(n.Sg=e,n.uf=m.rotation,e=n.uf);n.callback=g;b+=n.duration;h.push(n)}this.c.push(h);cg(this,0,1);this.wf()};k.Ic=function(){return 0<dg(this)[0]};k.Rk=function(){return 0<dg(this)[1]};k.ed=function(){cg(this,0,-dg(this)[0]);for(var a=0,b=this.c.length;a<b;++a){var c=this.c[a];c[0].callback&&c[0].callback(!1)}this.c.length=0};k.wf=function(){void 0!==this.u&&(cancelAnimationFrame(this.u),this.u=void 0);if(this.Ic()){for(var a=Date.now(),b=!1,c=this.c.length-1;0<=c;--c){for(var d=this.c[c],e=!0,f=0,g=d.length;f<g;++f){var h=d[f];if(!h.complete){b=a-h.start;b=0<h.duration?b/h.duration:1;1<=b?(h.complete=!0,b=1):e=!1;b=h.easing(b);if(h.Rg){var l=h.Rg[0],m=h.Rg[1];this.set("center",[l+b*(h.Tg[0]-l),m+b*(h.Tg[1]-m)])}h.tf&&h.zd&&(l=1===b?h.zd:h.tf+b*(h.zd-h.tf),h.anchor&&this.set("center",eg(this,l,h.anchor)),this.set("resolution",l));void 0!==h.Sg&&void 0!==h.uf&&(b=1===b?h.uf:h.Sg+b*(h.uf-h.Sg),h.anchor&&this.set("center",fg(this,b,h.anchor)),this.set("rotation",b));b=!0;if(!h.complete)break}}e&&(this.c[c]=null,cg(this,0,-1),(d=d[0].callback)&&d(!0))}this.c=this.c.filter(Boolean);b&&void 0===this.u&&(this.u=requestAnimationFrame(this.wf))}};function fg(a,b,c){var d=a.wa();if(void 0!==d){var e=[d[0]-c[0],d[1]-c[1]];ef(e,b-a.Qa());Ze(e,c)}return e}
function eg(a,b,c){var d,e=a.wa();a=a.Pa();void 0!==e&&void 0!==a&&(d=[c[0]-b*(c[0]-e[0])/a,c[1]-b*(c[1]-e[1])/a]);return d}function gg(a){var b=[100,100];a='.ol-viewport[data-view="'+w(a)+'"]';if(a=document.querySelector(a))a=getComputedStyle(a),b[0]=parseInt(a.width,10),b[1]=parseInt(a.height,10);return b}k.Ec=function(a){return this.g.center(a)};k.constrainResolution=function(a,b,c){return this.g.resolution(a,b||0,c||0)};k.constrainRotation=function(a,b){return this.g.rotation(a,b||0)};k.wa=function(){return this.get("center")};function dg(a,b){return void 0!==b?(b[0]=a.o[0],b[1]=a.o[1],b):a.o.slice()}k.dd=function(a){a=a||gg(this);var b=this.wa();xa(b,1);var c=this.Pa();xa(void 0!==c,2);var d=this.Qa();xa(void 0!==d,3);return ob(b,c,d,a)};k.Nm=function(){return this.a};k.Pm=function(){return this.f};k.Om=function(){return this.Ce(this.f)};k.eq=function(a){ag(this,bg(this,{maxZoom:a}))};k.Qm=function(){return this.Ce(this.a)};k.fq=function(a){ag(this,bg(this,{minZoom:a}))};k.Rm=function(){return this.v};k.Pa=function(){return this.get("resolution")};k.Sm=function(){return this.j};k.ze=function(a,b){b=b||gg(this);return Math.max(lb(a)/b[0],mb(a)/b[1])};function hg(a){var b=a.a,c=Math.log(b/a.f)/Math.log(2);return function(a){return b/Math.pow(2,a*c)}}k.Qa=function(){return this.get("rotation")};function ig(a){var b=a.a,c=Math.log(b/a.f)/Math.log(2);return function(a){return Math.log(b/a)/Math.log(2)/c}}k.getState=function(){var a=this.wa(),b=this.v,c=this.Pa(),d=this.Qa();return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};k.Hh=function(){var a,b=this.Pa();void 0!==b&&(a=this.Ce(b));return a};k.Ce=function(a){if(a>=this.f&&a<=this.a){var b=this.l||0;if(this.j){var c=ka(this.j,a,1);b+=c;if(c==this.j.length-1)return b;var d=this.j[c];c=d/this.j[c+1]}else d=this.a,c=this.C;b+=Math.log(d/a)/Math.log(c)}return b};k.Qf=function(a,b){b=b||{};var c=b.size;c||(c=gg(this));if(a instanceof rf)if("Circle"===a.U()){a=a.G();var d=Yf(a);d.rotate(this.Qa(),nb(a))}else d=a;else xa(Array.isArray(a),24),xa(!kb(a),25),d=Yf(a);var e=b.padding?b.padding:[0,0,0,0],f=void 0!==b.constrainResolution?b.constrainResolution:!0,g=void 0!==b.nearest?b.nearest:!1,h;void 0!==b.minResolution?h=b.minResolution:void 0!==b.maxZoom?h=this.constrainResolution(this.a,b.maxZoom-this.l,0):h=0;var l=d.ga(),m=this.Qa();a=Math.cos(-m);var m=Math.sin(-m),n=Infinity,p=Infinity,q=-Infinity,r=-Infinity;d=d.qa();for(var u=0,x=l.length;u<x;u+=d)var B=l[u]*a-l[u+1]*m,E=l[u]*m+l[u+1]*a,n=Math.min(n,B),p=Math.min(p,E),q=Math.max(q,B),r=Math.max(r,E);c=this.ze([n,p,q,r],[c[0]-e[1]-e[3],c[1]-e[0]-e[2]]);c=isNaN(c)?h:Math.max(c,h);f&&(h=this.constrainResolution(c,0,0),!g&&h<c&&(h=this.constrainResolution(h,-1,0)),c=h);m=-m;h=(n+q)/2+(e[1]-e[3])/2*c;e=(p+r)/2+(e[0]-e[2])/2*c;a=[h*a-e*m,e*a+h*m];e=b.callback?b.callback:ua;void 0!==b.duration?this.animate({resolution:c,center:a,duration:b.duration,easing:b.easing},e):(this.Vc(c),this.ob(a),setTimeout(e.bind(void 0,!0),0))};k.uk=function(a,b,c){var d=this.Qa(),e=Math.cos(-d),d=Math.sin(-d),f=a[0]*e-a[1]*d;a=a[1]*e+a[0]*d;var g=this.Pa(),f=f+(b[0]/2-c[0])*g;a+=(c[1]-b[1]/2)*g;d=-d;this.ob([f*e-a*d,a*e+f*d])};function jg(a){return!!a.wa()&&void 0!==a.Pa()}k.rotate=function(a,b){void 0!==b&&(b=fg(this,a,b),this.ob(b));this.Oe(a)};k.ob=function(a){this.set("center",a);this.Ic()&&this.ed()};function cg(a,b,c){a.o[b]+=c;a.s()}k.Vc=function(a){this.set("resolution",a);this.Ic()&&this.ed()};k.Oe=function(a){this.set("rotation",a);this.Ic()&&this.ed()};k.lq=function(a){a=this.constrainResolution(this.a,a-this.l,0);this.Vc(a)};function kg(a,b,c){this.f=a;this.c=b;this.g=c;this.b=[];this.a=this.i=0}function lg(a){a.b.length=0;a.i=0;a.a=0}function mg(a){if(6>a.b.length)return!1;var b=Date.now()-a.g,c=a.b.length-3;if(a.b[c+2]<b)return!1;for(var d=c-3;0<d&&a.b[d+2]>b;)d-=3;b=a.b[c+2]-a.b[d+2];if(b<1E3/60)return!1;var e=a.b[c]-a.b[d],c=a.b[c+1]-a.b[d+1];a.i=Math.atan2(c,e);a.a=Math.sqrt(e*e+c*c)/b;return a.a>a.c};function ng(a){Tc.call(this);this.v=null;this.Ha(!0);this.handleEvent=a.handleEvent}v(ng,Tc);ng.prototype.c=function(){return this.get("active")};ng.prototype.f=function(){return this.v};ng.prototype.Ha=function(a){this.set("active",a)};ng.prototype.setMap=function(a){this.v=a};function og(a,b,c,d){if(void 0!==b){var e=a.Qa(),f=a.wa();void 0!==e&&f&&0<d?a.animate({rotation:b,anchor:c,duration:d,easing:rd}):a.rotate(b,c)}}
function pg(a,b,c,d){var e=a.Pa();b=a.constrainResolution(e,b,0);if(c&&void 0!==b&&b!==e){var f=a.wa();c=eg(a,b,c);c=a.Ec(c);c=[(b*f[0]-e*c[0])/(b-e),(b*f[1]-e*c[1])/(b-e)]}qg(a,b,c,d)}function qg(a,b,c,d){if(b){var e=a.Pa(),f=a.wa();void 0!==e&&f&&b!==e&&d?a.animate({resolution:b,anchor:c,duration:d,easing:rd}):(c&&(c=eg(a,b,c),a.ob(c)),a.Vc(b))}};function rg(a){a=a?a:{};this.a=a.delta?a.delta:1;ng.call(this,{handleEvent:sg});this.g=void 0!==a.duration?a.duration:250}v(rg,ng);function sg(a){var b=!1,c=a.originalEvent;if("dblclick"==a.type){var b=a.coordinate,c=c.shiftKey?-this.a:this.a,d=a.map.Z();pg(d,c,b,this.g);a.preventDefault();b=!0}return!b};function tg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ug(a){a=a.originalEvent;return!a.button&&!(Qd&&Rd&&a.ctrlKey)}function vg(a){return"pointermove"==a.type}function wg(a){return"singleclick"==a.type}function xg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function yg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}
function Ag(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function Bg(a){xa(a.b,56);return"mouse"==a.b.pointerType}function Cg(a){a=a.b;return a.isPrimary&&0===a.button};function Dg(a){a=a?a:{};ng.call(this,{handleEvent:a.handleEvent?a.handleEvent:Eg});this.yf=a.handleDownEvent?a.handleDownEvent:nf;this.If=a.handleDragEvent?a.handleDragEvent:ua;this.Jf=a.handleMoveEvent?a.handleMoveEvent:ua;this.sk=a.handleUpEvent?a.handleUpEvent:nf;this.D=!1;this.na={};this.o=[]}v(Dg,ng);function Fg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
function Eg(a){if(!(a instanceof ee))return!0;var b=!1,c=a.type;if("pointerdown"===c||"pointerdrag"===c||"pointerup"===c)c=a.b,"pointerup"==a.type?delete this.na[c.pointerId]:"pointerdown"==a.type?this.na[c.pointerId]=c:c.pointerId in this.na&&(this.na[c.pointerId]=c),this.o=vb(this.na);this.D?"pointerdrag"==a.type?this.If(a):"pointerup"==a.type&&(this.D=this.sk(a)&&0<this.o.length):"pointerdown"==a.type?(this.D=a=this.yf(a),b=this.Xc(a)):"pointermove"==a.type&&this.Jf(a);return!b}
Dg.prototype.Xc=function(a){return a};function Gg(a){Dg.call(this,{handleDownEvent:Hg,handleDragEvent:Ig,handleUpEvent:Jg});a=a?a:{};this.a=a.kinetic;this.g=null;this.u=a.condition?a.condition:xg;this.j=!1}v(Gg,Dg);function Ig(a){var b=this.o,c=Fg(b);if(b.length==this.l){if(this.a&&this.a.b.push(c[0],c[1],Date.now()),this.g){var d=this.g[0]-c[0],e=c[1]-this.g[1];a=a.map.Z();var f=a.getState(),d=[d,e];gf(d,f.resolution);ef(d,f.rotation);Ze(d,f.center);d=a.Ec(d);a.ob(d)}}else this.a&&lg(this.a);this.g=c;this.l=b.length}
function Jg(a){var b=a.map;a=b.Z();if(this.o.length)return this.a&&lg(this.a),this.g=null,!0;if(!this.j&&this.a&&mg(this.a)){var c=this.a;c=(c.c-c.a)/c.f;var d=this.a.i,e=a.wa(),e=b.Ja(e),b=b.Wa([e[0]-c*Math.cos(d),e[1]-c*Math.sin(d)]);a.animate({center:a.Ec(b),duration:500,easing:rd})}cg(a,1,-1);return!1}
function Hg(a){if(0<this.o.length&&this.u(a)){var b=a.map.Z();this.g=null;this.D||cg(b,1,1);dg(b)[0]&&b.ob(a.frameState.viewState.center);this.a&&lg(this.a);this.j=1<this.o.length;return!0}return!1}Gg.prototype.Xc=nf;function Kg(a){a=a?a:{};Dg.call(this,{handleDownEvent:Lg,handleDragEvent:Mg,handleUpEvent:Ng});this.g=a.condition?a.condition:tg;this.a=void 0;this.j=void 0!==a.duration?a.duration:250}v(Kg,Dg);function Mg(a){if(Bg(a)){var b=a.map,c=b.Z();if(c.g.rotation!==Te){b=b.Ob();a=a.pixel;a=Math.atan2(b[1]/2-a[1],a[0]-b[0]/2);if(void 0!==this.a){var b=a-this.a,d=c.Qa();og(c,d-b)}this.a=a}}}
function Ng(a){if(!Bg(a))return!0;a=a.map.Z();cg(a,1,-1);var b=a.Qa(),c=this.j,b=a.constrainRotation(b,0);og(a,b,void 0,c);return!1}function Lg(a){return Bg(a)&&ug(a)&&this.g(a)?(cg(a.map.Z(),1,1),this.a=void 0,!0):!1}Kg.prototype.Xc=nf;function Og(a){this.Gc=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.i=this.c=this.b=null}v(Og,Mc);Og.prototype.ka=function(){this.setMap(null)};function Pg(a){var b=a.c,c=a.i;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
Og.prototype.setMap=function(a){if(this.b){this.b.C.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.C.appendChild(this.a)};function Qg(a){var b=a.c,c=a.i,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Wa,a.b);b[4]=b[0].slice();a.Gc?a.Gc.ma([b]):a.Gc=new D([b])}Og.prototype.V=function(){return this.Gc};function Rg(a){Dg.call(this,{handleDownEvent:Sg,handleDragEvent:Tg,handleUpEvent:Ug});a=a?a:{};this.a=new Og(a.className||"ol-dragbox");this.u=void 0!==a.minArea?a.minArea:64;this.g=null;this.C=a.condition?a.condition:mf;this.l=a.boxEndCondition?a.boxEndCondition:Vg}v(Rg,Dg);function Vg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return a*a+b*b>=this.u}function Tg(a){if(Bg(a)){var b=this.a,c=a.pixel;b.c=this.g;b.i=c;Qg(b);Pg(b);this.b(new Wg(Xg,a.coordinate,a))}}Rg.prototype.V=function(){return this.a.V()};Rg.prototype.j=ua;function Ug(a){if(!Bg(a))return!0;this.a.setMap(null);this.l(a,this.g,a.pixel)&&(this.j(a),this.b(new Wg(Yg,a.coordinate,a)));return!1}function Sg(a){if(Bg(a)&&ug(a)&&this.C(a)){this.g=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.g;b.c=this.g;b.i=c;Qg(b);Pg(b);this.b(new Wg(Zg,a.coordinate,a));return!0}return!1}var Zg="boxstart",Xg="boxdrag",Yg="boxend";function Wg(a,b,c){Oc.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}v(Wg,Oc);function $g(a){a=a?a:{};var b=a.condition?a.condition:yg;this.B=void 0!==a.duration?a.duration:200;this.I=void 0!==a.out?a.out:!1;Rg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}v($g,Rg);$g.prototype.j=function(){var a=this.v,b=a.Z(),c=a.Ob(),d=this.V().G();if(this.I){var e=b.dd(c),d=[a.Ja(eb(d)),a.Ja(hb(d))],a=Ya(void 0),f;var g=0;for(f=d.length;g<f;++g)Pa(a,d[g]);d=b.ze(a,c);rb(e,1/d);d=e}c=b.constrainResolution(b.ze(d,c));e=nb(d);e=b.Ec(e);b.animate({resolution:c,center:e,duration:this.B,easing:rd})};function ah(a){ng.call(this,{handleEvent:bh});a=a||{};this.a=function(a){return xg(a)&&Ag(a)};this.g=a.condition?a.condition:this.a;this.j=void 0!==a.duration?a.duration:100;this.o=void 0!==a.pixelDelta?a.pixelDelta:128}v(ah,ng);function bh(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.g(a)&&(40==c||37==c||39==c||38==c)){var b=a.map.Z(),d=b.Pa()*this.o,e=0,f=0;40==c?f=-d:37==c?e=-d:39==c?e=d:f=d;d=[e,f];ef(d,b.Qa());c=this.j;if(e=b.wa())d=b.Ec([e[0]+d[0],e[1]+d[1]]),c?b.animate({duration:c,easing:td,center:d}):b.ob(d);a.preventDefault();b=!0}}return!b};function ch(a){ng.call(this,{handleEvent:dh});a=a?a:{};this.g=a.condition?a.condition:Ag;this.a=a.delta?a.delta:1;this.j=void 0!==a.duration?a.duration:100}v(ch,ng);function dh(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;!this.g(a)||43!=c&&45!=c||(b=43==c?this.a:-this.a,c=a.map.Z(),pg(c,b,void 0,this.j),a.preventDefault(),b=!0)}return!b};function eh(a){ng.call(this,{handleEvent:fh});a=a||{};this.j=0;this.D=void 0!==a.duration?a.duration:250;this.na=void 0!==a.timeout?a.timeout:80;this.C=void 0!==a.useAnchor?a.useAnchor:!0;this.R=a.constrainResolution||!1;this.a=null;this.l=this.o=this.u=this.g=void 0}v(eh,ng);function fh(a){var b=a.type;if("wheel"!==b&&"mousewheel"!==b)return!0;a.preventDefault();var b=a.map,c=a.originalEvent;this.C&&(this.a=a.coordinate);if("wheel"==a.type){var d=c.deltaY;Od&&c.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(d/=Sd);c.deltaMode===WheelEvent.DOM_DELTA_LINE&&(d*=40)}else"mousewheel"==a.type&&(d=-c.wheelDeltaY,Pd&&(d/=3));if(0===d)return!1;a=Date.now();void 0===this.g&&(this.g=a);if(!this.o||400<a-this.g)this.o=4>Math.abs(d)?gh:hh;if(this.o===gh){b=b.Z();this.l?clearTimeout(this.l):cg(b,1,1);this.l=setTimeout(this.B.bind(this),400);var c=b.Pa()*Math.pow(2,d/300),e=b.f,f=b.a,g=0;c<e?(c=Math.max(c,e/1.5),g=1):c>f&&(c=Math.min(c,1.5*f),g=-1);if(this.a){var h=eg(b,c,this.a);b.ob(b.Ec(h))}b.Vc(c);!g&&this.R&&b.animate({resolution:b.constrainResolution(c,0<d?-1:1),easing:rd,anchor:this.a,duration:this.D});0<g?b.animate({resolution:e,easing:rd,anchor:this.a,duration:500}):0>g&&b.animate({resolution:f,easing:rd,anchor:this.a,duration:500});this.g=a;return!1}this.j+=d;d=Math.max(this.na-
(a-this.g),0);clearTimeout(this.u);this.u=setTimeout(this.I.bind(this,b),d);return!1}eh.prototype.B=function(){this.l=void 0;cg(this.v.Z(),1,-1)};eh.prototype.I=function(a){a=a.Z();a.Ic()&&a.ed();pg(a,-Ca(this.j,-1,1),this.a,this.D);this.o=void 0;this.j=0;this.a=null;this.u=this.g=void 0};eh.prototype.T=function(a){this.C=a;a||(this.a=null)};var gh="trackpad",hh="wheel";function ih(a){Dg.call(this,{handleDownEvent:jh,handleDragEvent:kh,handleUpEvent:lh});a=a||{};this.g=null;this.j=void 0;this.a=!1;this.l=0;this.C=void 0!==a.threshold?a.threshold:.3;this.u=void 0!==a.duration?a.duration:250}v(ih,Dg);function kh(a){var b=0,c=this.o[0],d=this.o[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.j&&(b=c-this.j,this.l+=b,!this.a&&Math.abs(this.l)>this.C&&(this.a=!0));this.j=c;a=a.map;c=a.Z();if(c.g.rotation!==Te){var d=a.a.getBoundingClientRect(),e=Fg(this.o);e[0]-=d.left;e[1]-=d.top;this.g=a.Wa(e);this.a&&(d=c.Qa(),a.render(),og(c,d+b,this.g))}}
function lh(a){if(2>this.o.length){a=a.map.Z();cg(a,1,-1);if(this.a){var b=a.Qa(),c=this.g,d=this.u,b=a.constrainRotation(b,0);og(a,b,c,d)}return!1}return!0}function jh(a){return 2<=this.o.length?(a=a.map,this.g=null,this.j=void 0,this.a=!1,this.l=0,this.D||cg(a.Z(),1,1),!0):!1}ih.prototype.Xc=nf;function mh(a){Dg.call(this,{handleDownEvent:nh,handleDragEvent:oh,handleUpEvent:ph});a=a?a:{};this.l=a.constrainResolution||!1;this.g=null;this.u=void 0!==a.duration?a.duration:400;this.a=void 0;this.j=1}v(mh,Dg);function oh(a){var b=1,c=this.o[0],d=this.o[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;a=a.map;var e=a.Z(),d=e.Pa(),f=e.a,g=e.f,c=d*b;c>f?(b=f/d,c=f):c<g&&(b=g/d,c=g);1!=b&&(this.j=b);b=a.a.getBoundingClientRect();d=Fg(this.o);d[0]-=b.left;d[1]-=b.top;this.g=a.Wa(d);a.render();qg(e,c,this.g)}
function ph(a){if(2>this.o.length){a=a.map.Z();cg(a,1,-1);var b=a.Pa();if(this.l||b<a.f||b>a.a){var c=this.g,d=this.u,b=a.constrainResolution(b,0,this.j-1);qg(a,b,c,d)}return!1}return!0}function nh(a){return 2<=this.o.length?(a=a.map,this.g=null,this.a=void 0,this.j=1,this.D||cg(a.Z(),1,1),!0):!1}mh.prototype.Xc=nf;function qh(a){a=a?a:{};var b=new Yc,c=new kg(-.005,.05,100);(void 0!==a.altShiftDragRotate?a.altShiftDragRotate:1)&&b.push(new Kg);(void 0!==a.doubleClickZoom?a.doubleClickZoom:1)&&b.push(new rg({delta:a.zoomDelta,duration:a.zoomDuration}));(void 0!==a.dragPan?a.dragPan:1)&&b.push(new Gg({kinetic:c}));(void 0!==a.pinchRotate?a.pinchRotate:1)&&b.push(new ih);(void 0!==a.pinchZoom?a.pinchZoom:1)&&b.push(new mh({constrainResolution:a.constrainResolution,duration:a.zoomDuration}));if(void 0!==a.keyboard?a.keyboard:1)b.push(new ah),b.push(new ch({delta:a.zoomDelta,duration:a.zoomDuration}));(void 0!==a.mouseWheelZoom?a.mouseWheelZoom:1)&&b.push(new eh({constrainResolution:a.constrainResolution,duration:a.zoomDuration}));(void 0!==a.shiftDragZoom?a.shiftDragZoom:1)&&b.push(new $g({duration:a.zoomDuration}));return b};function sh(a){Tc.call(this);var b=tb({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.H(b);this.a={layer:this,Je:!0}}v(sh,Tc);function th(a){a.a.opacity=Ca(a.hc(),0,1);a.a.yj=a.$f();a.a.visible=a.Mb();a.a.extent=a.G();a.a.zIndex=a.Ba();a.a.maxResolution=a.fc();a.a.minResolution=Math.max(a.gc(),0);return a.a}k=sh.prototype;k.G=function(){return this.get("extent")};k.fc=function(){return this.get("maxResolution")};k.gc=function(){return this.get("minResolution")};k.hc=function(){return this.get("opacity")};k.Mb=function(){return this.get("visible")};k.Ba=function(){return this.get("zIndex")};k.vc=function(a){this.set("extent",a)};k.Ac=function(a){this.set("maxResolution",a)};k.Bc=function(a){this.set("minResolution",a)};k.wc=function(a){this.set("opacity",a)};k.xc=function(a){this.set("visible",a)};k.Vb=function(a){this.set("zIndex",a)};function uh(a){var b=a||{};a=tb({},b);delete a.layers;b=b.layers;sh.call(this,a);this.f=[];this.c={};y(this,Vc(vh),this.Hl,this);b?Array.isArray(b)?b=new Yc(b.slice(),{unique:!0}):xa(b instanceof Yc,43):b=new Yc(void 0,{unique:!0});this.xi(b)}v(uh,sh);k=uh.prototype;k.Fd=function(){};k.Fe=function(){this.Mb()&&this.s()};k.Hl=function(){this.f.forEach(Ec);this.f.length=0;var a=this.qd();this.f.push(y(a,"add",this.Gl,this),y(a,"remove",this.Il,this));for(var b in this.c)this.c[b].forEach(Ec);ub(this.c);var a=a.a,c;b=0;for(c=a.length;b<c;b++){var d=a[b];this.c[w(d).toString()]=[y(d,"propertychange",this.Fe,this),y(d,"change",this.Fe,this)]}this.s()};k.Gl=function(a){a=a.element;var b=w(a).toString();this.c[b]=[y(a,"propertychange",this.Fe,this),y(a,"change",this.Fe,this)];this.s()};k.Il=function(a){a=w(a.element).toString();this.c[a].forEach(Ec);delete this.c[a];this.s()};k.qd=function(){return this.get(vh)};k.xi=function(a){this.set(vh,a)};k.Yf=function(a){var b=void 0!==a?a:[],c=b.length;this.qd().forEach(function(a){a.Yf(b)});a=th(this);var d;for(d=b.length;c<d;c++){var e=b[c];e.opacity*=a.opacity;e.visible=e.visible&&a.visible;e.maxResolution=Math.min(e.maxResolution,a.maxResolution);e.minResolution=Math.max(e.minResolution,a.minResolution);void 0!==a.extent&&(e.extent=void 0!==e.extent?pb(e.extent,a.extent):a.extent)}return b};k.$f=function(){return"ready"};var vh="layers";function wh(a){var b=tb({},a);delete b.source;sh.call(this,b);this.v=this.l=this.o=null;a.map&&this.setMap(a.map);y(this,Vc("source"),this.Ul,this);this.Wc(a.source?a.source:null)}v(wh,sh);function xh(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}k=wh.prototype;k.Yf=function(a){a=a?a:[];a.push(th(this));return a};k.ha=function(){return this.get("source")||null};k.$f=function(){var a=this.ha();return a?a.getState():"undefined"};k.Tn=function(){this.s()};k.Ul=function(){this.v&&(Ec(this.v),this.v=null);var a=this.ha();a&&(this.v=y(a,"change",this.Tn,this));this.s()};k.setMap=function(a){this.o&&(Ec(this.o),this.o=null);a||this.s();this.l&&(Ec(this.l),this.l=null);a&&(this.o=y(a,"precompose",function(a){var b=th(this);b.Je=!1;b.zIndex=Infinity;a.frameState.layerStatesArray.push(b);a.frameState.layerStates[w(this)]=b},this),this.l=y(this,"change",a.render,a),this.s())};k.Wc=function(a){this.set("source",a)};function yh(){this.b={};this.a=0}yh.prototype.clear=function(){this.b={};this.a=0};yh.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?gd(c):"null");return a in this.b?this.b[a]:null};yh.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?gd(c):"null")]=d;++this.a};var zh=new yh;var Ah=Array(6);function Bh(){return[1,0,0,1,0,0]}function Ch(a){return Dh(a,1,0,0,1,0,0)}function Eh(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],l=b[0],m=b[1],n=b[2],p=b[3],q=b[4];b=b[5];a[0]=c*l+e*m;a[1]=d*l+f*m;a[2]=c*n+e*p;a[3]=d*n+f*p;a[4]=c*q+e*b+g;a[5]=d*q+f*b+h;return a}function Dh(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Fh(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
function Gh(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function Hh(a,b){var c=Math.cos(b);b=Math.sin(b);Eh(a,Dh(Ah,c,b,-b,c,0,0))}function Ih(a,b,c){return Eh(a,Dh(Ah,b,0,0,c,0,0))}function Jh(a,b,c){Eh(a,Dh(Ah,1,0,0,1,b,c))}function Kh(a,b,c,d,e,f,g,h){var l=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*l;a[2]=-d*l;a[3]=e*f;a[4]=g*d*f-h*d*l+b;a[5]=g*e*l+h*e*f+c;return a}
function Lh(a){var b=a[0]*a[3]-a[1]*a[2];xa(!!b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b;return a};function Mh(a,b){this.o=b;this.c={};this.v={}}v(Mh,Mc);function Nh(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Kh(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Lh(Fh(d,c))}k=Mh.prototype;k.ka=function(){for(var a in this.c)Nc(this.c[a])};function Oh(){if(32<zh.a){var a=0,b;for(b in zh.b){var c=zh.b[b];a++&3||Rc(c)||(delete zh.b[b],--zh.a)}}}
k.Ea=function(a,b,c,d,e,f,g){function h(a,c){var f=w(a).toString(),g=b.layerStates[w(c)].Je;if(!(f in b.skippedFeatureUids)||g)return d.call(e,a,g?c:null)}var l,m=b.viewState,n=m.resolution,p=m.projection,m=a;if(p.i){var p=p.G(),q=lb(p),r=a[0];if(r<p[0]||r>p[2])m=[r+q*Math.ceil((p[0]-r)/q),a[1]]}p=b.layerStatesArray;for(q=p.length-1;0<=q;--q){var u=p[q],r=u.layer;if(xh(u,n)&&f.call(g,r)&&(u=Ph(this,r),r.ha()&&(l=u.Ea(r.ha().u?m:a,b,c,h,e)),l))return l}};k.Ei=function(a,b,c,d,e){return void 0!==this.Ea(a,b,c,mf,this,d,e)};function Ph(a,b){var c=w(b).toString();if(c in a.c)return a.c[c];b=b.Fd(a);a.c[c]=b;a.v[c]=y(b,"change",a.Fl,a);return b}k.Fl=function(){this.o.render()};k.Jg=ua;k.Rp=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){a=c;var d=this.c[a];delete this.c[a];Ec(this.v[a]);delete this.v[a];Nc(d)}};function Qh(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.Rp.bind(a));break}}
function ra(a,b){return a.zIndex-b.zIndex};function Rh(a,b,c,d,e){Oc.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}v(Rh,Oc);var Sh=[0,0,0,1],Th=[],Uh=[0,0,0,1];function Vh(a,b,c,d){b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function Wh(){}k=Wh.prototype;k.zb=function(){};k.rd=function(){};k.Zb=function(){};k.te=function(){};k.ue=function(){};k.mc=function(){};k.nc=function(){};k.oc=function(){};k.pc=function(){};k.qc=function(){};k.rc=function(){};k.yc=function(){};k.Ma=function(){};k.Ub=function(){};k.Cb=function(){};function Xh(a,b,c,d,e){this.i=a;this.u=b;this.c=c;this.S=d;this.Yb=e;this.M=this.b=this.a=this.Ua=this.R=this.I=null;this.na=this.T=this.l=this.B=this.C=this.D=0;this.fa=!1;this.f=this.fb=0;this.pa=!1;this.oa=0;this.Ia="";this.va=this.Jb=0;this.Sa=!1;this.j=this.$a=0;this.ra=this.o=this.g=null;this.v=[];this.xb=Bh()}v(Xh,Wh);function Yh(a,b,c){if(a.M){b=pf(b,0,c,2,a.S,a.v);c=a.i;var d=a.xb,e=c.globalAlpha;1!=a.l&&(c.globalAlpha=e*a.l);var f=a.fb;a.fa&&(f+=a.Yb);var g;var h=0;for(g=b.length;h<g;h+=2){var l=b[h]-a.D,m=b[h+1]-a.C;a.pa&&(l=Math.round(l),m=Math.round(m));if(f||1!=a.f){var n=l+a.D,p=m+a.C;Kh(d,n,p,a.f,a.f,f,-n,-p);c.setTransform.apply(c,d)}c.drawImage(a.M,a.T,a.na,a.oa,a.B,l,m,a.oa,a.B)}(f||1!=a.f)&&c.setTransform(1,0,0,1,0,0);1!=a.l&&(c.globalAlpha=e)}}
function Zh(a,b,c,d){var e=0;if(a.ra&&""!==a.Ia){a.g&&$h(a,a.g);a.o&&ai(a,a.o);var f=a.ra,g=a.i,h=a.Ua;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.Ua={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=pf(b,e,c,d,a.S,a.v);f=a.i;g=a.$a;for(a.Sa&&(g+=a.Yb);e<c;e+=d){var h=b[e]+
a.Jb,l=b[e+1]+a.va;if(g||1!=a.j){var m=Kh(a.xb,h,l,a.j,a.j,g,-h,-l);f.setTransform.apply(f,m)}a.o&&f.strokeText(a.Ia,h,l);a.g&&f.fillText(a.Ia,h,l)}(g||1!=a.j)&&f.setTransform(1,0,0,1,0,0)}}function bi(a,b,c,d,e,f){var g=a.i;a=pf(b,c,d,e,a.S,a.v);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function ci(a,b,c,d,e){var f;var g=0;for(f=d.length;g<f;++g)c=bi(a,b,c,d[g],e,!0);return c}k=Xh.prototype;k.Zb=function(a){if(qb(this.c,a.G())){if(this.a||this.b){this.a&&$h(this,this.a);this.b&&ai(this,this.b);var b=this.S;var c=this.v,d=a.ga();b=d?pf(d,0,d.length,a.qa(),b,c):null;c=b[2]-b[0];d=b[3]-b[1];c=Math.sqrt(c*c+d*d);d=this.i;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.Ia&&Zh(this,a.wa(),2,2)}};k.rd=function(a){this.Ma(a.Fa(),a.Ga());this.Ub(a.Y());this.Cb(a.Na())};k.zb=function(a){switch(a.U()){case "Point":this.qc(a);break;case "LineString":this.mc(a);break;case "Polygon":this.rc(a);break;case "MultiPoint":this.oc(a);break;case "MultiLineString":this.nc(a);break;case "MultiPolygon":this.pc(a);break;case "GeometryCollection":this.ue(a);break;case "Circle":this.Zb(a)}};k.te=function(a,b){(a=(0,b.Za)(a))&&qb(this.c,a.G())&&(this.rd(b),this.zb(a))};k.ue=function(a){a=a.a;var b;var c=0;for(b=a.length;c<b;++c)this.zb(a[c])};k.qc=function(a){var b=a.ga();a=a.qa();this.M&&Yh(this,b,b.length);""!==this.Ia&&Zh(this,b,b.length,a)};k.oc=function(a){var b=a.ga();a=a.qa();this.M&&Yh(this,b,b.length);""!==this.Ia&&Zh(this,b,b.length,a)};k.mc=function(a){if(qb(this.c,a.G())){if(this.b){ai(this,this.b);var b=this.i,c=a.ga();b.beginPath();bi(this,c,0,c.length,a.qa(),!1);b.stroke()}""!==this.Ia&&(a=di(a),Zh(this,a,2,2))}};k.nc=function(a){var b=a.G();if(qb(this.c,b)){if(this.b){ai(this,this.b);var b=this.i,c=a.ga(),d=0,e=a.Bb(),f=a.qa();b.beginPath();var g;var h=0;for(g=e.length;h<g;++h)d=bi(this,c,d,e[h],f,!1);b.stroke()}""!==this.Ia&&(a=ei(a),Zh(this,a,a.length,2))}};k.rc=function(a){if(qb(this.c,a.G())){if(this.b||this.a){this.a&&$h(this,this.a);this.b&&ai(this,this.b);var b=this.i;b.beginPath();ci(this,a.ec(),0,a.Bb(),a.qa());this.a&&b.fill();this.b&&b.stroke()}""!==this.Ia&&(a=Wf(a),Zh(this,a,2,2))}};k.pc=function(a){if(qb(this.c,a.G())){if(this.b||this.a){this.a&&$h(this,this.a);this.b&&ai(this,this.b);var b=this.i,c=fi(a),d=0,e=a.c,f=a.qa(),g;b.beginPath();var h=0;for(g=e.length;h<g;++h)d=ci(this,c,d,e[h],f);this.a&&b.fill();this.b&&b.stroke()}""!==this.Ia&&(a=gi(a),Zh(this,a,a.length,2))}};function $h(a,b){var c=a.i,d=a.I;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.I={fillStyle:b.fillStyle})}
function ai(a,b){var c=a.i,d=a.R;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),Td&&!pa(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,Td&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.R={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
k.Ma=function(a,b){a?(a=a.b,this.a={fillStyle:id(a?a:Sh)}):this.a=null;if(b){a=b.a;var c=b.f,d=b.i,e=b.g,f=b.j,g=b.c;b=b.o;this.b={lineCap:void 0!==c?c:"round",lineDash:d?d:Th,lineDashOffset:e?e:0,lineJoin:void 0!==f?f:"round",lineWidth:this.u*(void 0!==g?g:1),miterLimit:void 0!==b?b:10,strokeStyle:id(a?a:Uh)}}else this.b=null};k.Ub=function(a){if(a){var b=a.Hc(),c=a.Y(1),d=a.Oc(),e=a.ic();this.D=b[0];this.C=b[1];this.B=e[1];this.M=c;this.l=a.f;this.T=d[0];this.na=d[1];this.fa=a.l;this.fb=a.g;this.f=a.a;this.pa=a.v;this.oa=e[0]}else this.M=null};k.Cb=function(a){if(a){var b=a.Fa();b?(b=b.b,this.g={fillStyle:id(b?b:Sh)}):this.g=null;var c=a.Ga();if(c){var b=c.a,d=c.f,e=c.i,f=c.g,g=c.j,h=c.c,c=c.o;this.o={lineCap:void 0!==d?d:"round",lineDash:e?e:Th,lineDashOffset:f?f:0,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==c?c:10,strokeStyle:id(b?b:Uh)}}else this.o=null;var b=a.a,d=a.i,e=a.c,f=a.o,g=a.f,h=a.b,c=a.Na(),l=a.g;a=a.j;this.ra={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==l?l:"center",textBaseline:void 0!==a?a:"middle"};this.Ia=void 0!==c?c:"";this.Jb=void 0!==d?this.u*d:0;this.va=void 0!==e?this.u*e:0;this.Sa=void 0!==f?f:!1;this.$a=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.Ia=""};function hi(a,b){Mh.call(this,0,b);this.i=jd();this.b=this.i.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.style.display="block";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.f=Bh()}v(hi,Mh);function ii(a,b,c){var d=a.o,e=a.i;if(Rc(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,l=c.viewState,m=c.pixelRatio/l.resolution;a=Kh(a.f,a.b.width/2,a.b.height/2,m,-m,-l.rotation,-l.center[0],-l.center[1]);d.b(new Rh(b,new Xh(e,g,f,a,h),c,e,null))}}hi.prototype.U=function(){return"canvas"};hi.prototype.Jg=function(a){if(a){var b=this.i,c=a.pixelRatio,d=Math.round(a.size[0]*c),e=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=e?(this.b.width=d,this.b.height=e):b.clearRect(0,0,d,e);c=a.viewState.rotation;Nh(a);ii(this,"precompose",a);var f=a.layerStatesArray;qa(f);c&&(b.save(),Vh(b,c,d/2,e/2));var d=a.viewState.resolution,g,e=0;for(g=f.length;e<g;++e){var h=f[e];var l=h.layer;l=Ph(this,l);xh(h,d)&&"ready"==h.yj&&l.sd(a,h)&&l.S(a,h,b)}c&&b.restore();ii(this,"postcompose",a);this.a||(this.b.style.display="",this.a=!0);Qh(this,a);a.postRenderFunctions.push(Oh)}else this.a&&(this.b.style.display="none",this.a=!1)};hi.prototype.Di=function(a,b,c,d,e,f){var g=b.viewState.resolution,h=b.layerStatesArray,l=h.length;a=Gh(b.pixelToCoordinateTransform,a.slice());for(--l;0<=l;--l){var m=h[l];var n=m.layer;if(xh(m,g)&&e.call(f,n)&&(m=Ph(this,n).u(a,b,c,d)))return m}};var ji=["Polygon","Circle","LineString","Image","Text"];function ki(){};function li(a){this.b=a};function mi(a){this.b=a}v(mi,li);mi.prototype.U=function(){return 35632};function ni(a){this.b=a}v(ni,li);ni.prototype.U=function(){return 35633};function oi(){this.b="precision mediump float;varying vec2 a;varying vec2 b;varying float c;varying float d;uniform float m;uniform vec4 n;uniform vec4 o;uniform vec2 p;void main(void){vec2 windowCenter=vec2((a.x+1.0)/2.0*p.x*d,(a.y+1.0)/2.0*p.y*d);vec2 windowOffset=vec2((b.x+1.0)/2.0*p.x*d,(b.y+1.0)/2.0*p.y*d);float radius=length(windowCenter-windowOffset);float dist=length(windowCenter-gl_FragCoord.xy);if(dist>radius+c){if(o.a==0.0){gl_FragColor=n;}else{gl_FragColor=o;}gl_FragColor.a=gl_FragColor.a-(dist-(radius+c));}else if(n.a==0.0){gl_FragColor=o;if(dist<radius-c){gl_FragColor.a=gl_FragColor.a-(radius-c-dist);}} else{gl_FragColor=n;float strokeDist=radius-c;float antialias=2.0*d;if(dist>strokeDist){gl_FragColor=o;}else if(dist>=strokeDist-antialias){float step=smoothstep(strokeDist-antialias,strokeDist,dist);gl_FragColor=mix(n,o,step);}} gl_FragColor.a=gl_FragColor.a*m;if(gl_FragColor.a<=0.0){discard;}}"}
v(oi,mi);var pi=new oi;function qi(){this.b="varying vec2 a;varying vec2 b;varying float c;varying float d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;uniform float k;uniform float l;void main(void){mat4 offsetMatrix=i*j;a=vec4(h*vec4(e,0.0,1.0)).xy;d=l;float lineWidth=k*l;c=lineWidth/2.0;if(lineWidth==0.0){lineWidth=2.0*l;}vec2 offset;float radius=g+3.0*l;if(f==0.0){offset=vec2(-1.0,1.0);}else if(f==1.0){offset=vec2(-1.0,-1.0);}else if(f==2.0){offset=vec2(1.0,-1.0);}else{offset=vec2(1.0,1.0);}gl_Position=h*vec4(e+offset*radius,0.0,1.0)+offsetMatrix*vec4(offset*lineWidth,0.0,0.0);b=vec4(h*vec4(e.x+g,e.y,0.0,1.0)).xy;if(distance(a,b)>20000.0){gl_Position=vec4(a,0.0,1.0);}}"}
v(qi,ni);var ri=new qi;function si(a,b){this.B=a.getUniformLocation(b,"n");this.oa=a.getUniformLocation(b,"k");this.c=a.getUniformLocation(b,"j");this.f=a.getUniformLocation(b,"i");this.a=a.getUniformLocation(b,"m");this.ra=a.getUniformLocation(b,"l");this.i=a.getUniformLocation(b,"h");this.I=a.getUniformLocation(b,"p");this.R=a.getUniformLocation(b,"o");this.j=a.getAttribLocation(b,"f");this.b=a.getAttribLocation(b,"e");this.S=a.getAttribLocation(b,"g")};function ti(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function ui(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};function vi(a,b){this.origin=nb(b);this.xb=Bh();this.Sa=Bh();this.$a=Bh();this.Jb=ti();this.b=[];this.o=null;this.i=[];this.f=[];this.a=[];this.l=null;this.g=void 0}v(vi,Wh);vi.prototype.La=function(a,b,c,d,e,f,g,h,l,m,n){var p=a.b;if(this.g){var q=p.isEnabled(p.STENCIL_TEST);var r=p.getParameter(p.STENCIL_FUNC);var u=p.getParameter(p.STENCIL_VALUE_MASK);var x=p.getParameter(p.STENCIL_REF);var B=p.getParameter(p.STENCIL_WRITEMASK);var E=p.getParameter(p.STENCIL_FAIL);var A=p.getParameter(p.STENCIL_PASS_DEPTH_PASS);var L=p.getParameter(p.STENCIL_PASS_DEPTH_FAIL);p.enable(p.STENCIL_TEST);p.clear(p.STENCIL_BUFFER_BIT);p.stencilMask(255);p.stencilFunc(p.ALWAYS,1,255);p.stencilOp(p.KEEP,p.KEEP,p.REPLACE);this.g.La(a,b,c,d,e,f,g,h,l,m,n);p.stencilMask(0);p.stencilFunc(p.NOTEQUAL,1,255)}wi(a,34962,this.l);wi(a,34963,this.o);f=this.rf(p,a,e,f);var oa=Ch(this.xb);Ih(oa,2/(c*e[0]),2/(c*e[1]));Hh(oa,-d);Jh(oa,-(b[0]-this.origin[0]),-(b[1]-this.origin[1]));b=Ch(this.$a);Ih(b,2/e[0],2/e[1]);e=Ch(this.Sa);d&&Hh(e,-d);p.uniformMatrix4fv(f.i,!1,ui(this.Jb,oa));p.uniformMatrix4fv(f.f,!1,ui(this.Jb,b));p.uniformMatrix4fv(f.c,!1,ui(this.Jb,e));p.uniform1f(f.a,g);if(l){m?a=this.ve(p,a,h,l,n):(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),this.Od(p,a,h,!0),a=(a=l(null))?a:void 0);var ha=a}else this.Od(p,a,h,!1);this.sf(p,f);this.g&&(q||p.disable(p.STENCIL_TEST),p.clear(p.STENCIL_BUFFER_BIT),p.stencilFunc(r,x,u),p.stencilMask(B),p.stencilOp(E,L,A));return ha};function xi(a,b,c,d){a.drawElements(4,d-c,b.g?5125:5123,c*(b.g?4:2))};var yi=[0,0,0,1],zi=[],Ai=[0,0,0,1];function Bi(a,b,c,d,e,f){a=(c-a)*(f-b)-(e-a)*(d-b);return a<=Ci&&a>=-Ci?void 0:0<a}var Ci=Number.EPSILON||2.220446049250313E-16;function Di(a){this.b=void 0!==a?a:[];this.a=Ei}var Ei=35044;function Fi(a,b){vi.call(this,0,b);this.v=null;this.j=[];this.u=[];this.S=0;this.c={fillColor:null,strokeColor:null,lineDash:null,lineDashOffset:void 0,lineWidth:void 0,s:!1}}v(Fi,vi);k=Fi.prototype;k.Zb=function(a,b){var c=a.pd(),d=a.qa();if(c){this.i.push(this.b.length);this.f.push(b);this.c.s&&(this.u.push(this.b.length),this.c.s=!1);this.S=c;a=a.ga();a=qf(a,0,2,d,-this.origin[0],-this.origin[1]);b=this.a.length;var c=this.b.length,e=b/4,f;for(f=0;2>f;f+=d)this.a[b++]=a[f],this.a[b++]=a[f+1],this.a[b++]=0,this.a[b++]=this.S,this.a[b++]=a[f],this.a[b++]=a[f+1],this.a[b++]=1,this.a[b++]=this.S,this.a[b++]=a[f],this.a[b++]=a[f+1],this.a[b++]=2,this.a[b++]=this.S,this.a[b++]=a[f],this.a[b++]=a[f+1],this.a[b++]=3,this.a[b++]=this.S,this.b[c++]=e,this.b[c++]=e+1,this.b[c++]=e+2,this.b[c++]=e+2,this.b[c++]=e+3,this.b[c++]=e,e+=4}else this.c.s&&(this.j.pop(),this.j.length&&(d=this.j[this.j.length-1],this.c.fillColor=d[0],this.c.strokeColor=d[1],this.c.lineWidth=d[2],this.c.s=!1))};k.Db=function(){this.l=new Di(this.a);this.o=new Di(this.b);this.i.push(this.b.length);!this.u.length&&0<this.j.length&&(this.j=[]);this.b=this.a=null};k.Eb=function(a){var b=this.l,c=this.o;return function(){Gi(a,b);Gi(a,c)}};k.rf=function(a,b,c,d){var e=Hi(b,pi,ri);if(this.v)var f=this.v;else this.v=f=new si(a,e);b.Qc(e);a.enableVertexAttribArray(f.b);a.vertexAttribPointer(f.b,2,5126,!1,16,0);a.enableVertexAttribArray(f.j);a.vertexAttribPointer(f.j,1,5126,!1,16,8);a.enableVertexAttribArray(f.S);a.vertexAttribPointer(f.S,1,5126,!1,16,12);a.uniform2fv(f.I,c);a.uniform1f(f.ra,d);return f};k.sf=function(a,b){a.disableVertexAttribArray(b.b);a.disableVertexAttribArray(b.j);a.disableVertexAttribArray(b.S)};k.Od=function(a,b,c){if(wb(c)){var d=this.i[this.i.length-1];for(c=this.u.length-1;0<=c;--c){var e=this.u[c];var f=this.j[c];a.uniform4fv(this.v.B,f[0]);Ii(this,a,f[1],f[2]);xi(a,b,e,d);d=e}}else{var g=this.i.length-2;f=d=this.i[g+1];for(e=this.u.length-1;0<=e;--e){var h=this.j[e];a.uniform4fv(this.v.B,h[0]);Ii(this,a,h[1],h[2]);for(h=this.u[e];0<=g&&this.i[g]>=h;){var l=this.i[g];var m=this.f[g];m=w(m).toString();c[m]&&(d!==f&&xi(a,b,d,f),f=l);g--;d=l}d!==f&&xi(a,b,d,f);d=f=h}}};k.ve=function(a,b,c,d,e){var f,g;var h=this.i.length-2;var l=this.i[h+1];for(f=this.u.length-1;0<=f;--f){var m=this.j[f];a.uniform4fv(this.v.B,m[0]);Ii(this,a,m[1],m[2]);for(g=this.u[f];0<=h&&this.i[h]>=g;){m=this.i[h];var n=this.f[h];var p=w(n).toString();if(void 0===c[p]&&n.V()&&(void 0===e||qb(e,n.V().G()))&&(a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),xi(a,b,m,l),l=d(n)))return l;h--;l=m}}};function Ii(a,b,c,d){b.uniform4fv(a.v.R,c);b.uniform1f(a.v.oa,d)}
k.Ma=function(a,b){if(b){var c=b.i;this.c.lineDash=c?c:zi;c=b.g;this.c.lineDashOffset=c?c:0;c=b.a;c instanceof CanvasGradient||c instanceof CanvasPattern?c=Ai:c=ed(c).map(function(a,b){return 3!=b?a/255:a})||Ai;b=b.c;b=void 0!==b?b:1}else c=[0,0,0,0],b=0;a=a?a.b:[0,0,0,0];a instanceof CanvasGradient||a instanceof CanvasPattern?a=yi:a=ed(a).map(function(a,b){return 3!=b?a/255:a})||yi;this.c.strokeColor&&pa(this.c.strokeColor,c)&&this.c.fillColor&&pa(this.c.fillColor,a)&&this.c.lineWidth===b||(this.c.s=!0,this.c.fillColor=a,this.c.strokeColor=c,this.c.lineWidth=b,this.j.push([a,c,b]))};function Ji(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}v(Ji,mi);var Ki=new Ji;function Li(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.0,0.0);gl_Position=h*vec4(c,0.0,1.0)+offsets;a=d;b=f;}"}v(Li,ni);var Mi=new Li;function Ni(a,b){this.c=a.getUniformLocation(b,"j");this.f=a.getUniformLocation(b,"i");this.a=a.getUniformLocation(b,"k");this.i=a.getUniformLocation(b,"h");this.v=a.getAttribLocation(b,"e");this.u=a.getAttribLocation(b,"f");this.b=a.getAttribLocation(b,"c");this.D=a.getAttribLocation(b,"g");this.C=a.getAttribLocation(b,"d")};function Oi(a,b){this.j=a;this.b=b;this.a={};this.c={};this.i={};this.l=this.v=this.f=this.o=null;(this.g=ja(fa,"OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");y(this.j,"webglcontextlost",this.Xo,this);y(this.j,"webglcontextrestored",this.Yo,this)}v(Oi,Mc);function wi(a,b,c){var d=a.b,e=c.b,f=String(w(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.g?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={lc:c,buffer:g}}}function Gi(a,b){var c=a.b;b=String(w(b));var d=a.a[b];c.isContextLost()||c.deleteBuffer(d.buffer);delete a.a[b]}k=Oi.prototype;k.ka=function(){Lc(this.j);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.i)a.deleteProgram(this.i[b]);for(b in this.c)a.deleteShader(this.c[b]);a.deleteFramebuffer(this.f);a.deleteRenderbuffer(this.l);a.deleteTexture(this.v)}};k.Wo=function(){return this.b};function Pi(a){if(!a.f){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=Qi(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.f=c;a.v=d;a.l=e}return a.f}function Ri(a,b){var c=String(w(b));if(c in a.c)return a.c[c];var d=a.b,e=d.createShader(b.U());d.shaderSource(e,b.b);d.compileShader(e);return a.c[c]=e}function Hi(a,b,c){var d=w(b)+"/"+w(c);if(d in a.i)return a.i[d];var e=a.b,f=e.createProgram();e.attachShader(f,Ri(a,b));e.attachShader(f,Ri(a,c));e.linkProgram(f);return a.i[d]=f}k.Xo=function(){ub(this.a);ub(this.c);ub(this.i);this.l=this.v=this.f=this.o=null};k.Yo=function(){};k.Qc=function(a){if(a==this.o)return!1;this.b.useProgram(a);this.o=a;return!0};function Si(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function Qi(a,b,c){var d=Si(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d}
function Ti(a,b){var c=Si(a,33071,33071);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,b);return c};function Ui(a,b){vi.call(this,0,b);this.C=this.D=void 0;this.S=[];this.v=[];this.oa=void 0;this.j=[];this.c=[];this.I=this.ra=void 0;this.B=null;this.fb=this.fa=this.na=this.T=this.Ua=this.R=void 0;this.va=[];this.u=[];this.pa=void 0}v(Ui,vi);k=Ui.prototype;k.Eb=function(a){var b=this.l,c=this.o,d=this.va,e=this.u,f=a.b;return function(){if(!f.isContextLost()){var g;var h=0;for(g=d.length;h<g;++h)f.deleteTexture(d[h]);h=0;for(g=e.length;h<g;++h)f.deleteTexture(e[h])}Gi(a,b);Gi(a,c)}};function Vi(a,b,c,d){var e=a.D,f=a.C,g=a.oa,h=a.ra,l=a.I,m=a.R,n=a.Ua,p=a.T,q=a.na?1:0,r=-a.fa,u=a.fb,x=a.pa,B=Math.cos(r),r=Math.sin(r),E=a.b.length,A=a.a.length,L;for(L=0;L<c;L+=d){var oa=b[L]-a.origin[0];var ha=b[L+1]-a.origin[1];var ga=A/8;var z=-u*e;var M=-u*(g-f);a.a[A++]=oa;a.a[A++]=ha;a.a[A++]=z*B-M*r;a.a[A++]=z*r+M*B;a.a[A++]=n/l;a.a[A++]=(p+g)/h;a.a[A++]=m;a.a[A++]=q;z=u*(x-e);M=-u*(g-f);a.a[A++]=oa;a.a[A++]=ha;a.a[A++]=z*B-M*r;a.a[A++]=z*r+M*B;a.a[A++]=(n+x)/l;a.a[A++]=(p+g)/h;a.a[A++]=m;a.a[A++]=q;z=u*(x-e);M=u*f;a.a[A++]=oa;a.a[A++]=ha;a.a[A++]=z*B-M*r;a.a[A++]=z*r+M*B;a.a[A++]=(n+x)/l;a.a[A++]=p/h;a.a[A++]=m;a.a[A++]=q;z=-u*e;M=u*f;a.a[A++]=oa;a.a[A++]=ha;a.a[A++]=z*B-M*r;a.a[A++]=z*r+M*B;a.a[A++]=n/l;a.a[A++]=p/h;a.a[A++]=m;a.a[A++]=q;a.b[E++]=ga;a.b[E++]=ga+1;a.b[E++]=ga+2;a.b[E++]=ga;a.b[E++]=ga+2;a.b[E++]=ga+3}}k.oc=function(a,b){this.i.push(this.b.length);this.f.push(b);b=a.ga();Vi(this,b,b.length,a.qa())};k.qc=function(a,b){this.i.push(this.b.length);this.f.push(b);b=a.ga();Vi(this,b,b.length,a.qa())};k.Db=function(a){a=a.b;this.S.push(this.b.length);this.v.push(this.b.length);this.l=new Di(this.a);this.o=new Di(this.b);var b={};Wi(this.va,this.j,b,a);Wi(this.u,this.c,b,a);this.oa=this.C=this.D=void 0;this.c=this.j=null;this.I=this.ra=void 0;this.b=null;this.fb=this.fa=this.na=this.T=this.Ua=this.R=void 0;this.a=null;this.pa=void 0};function Wi(a,b,c,d){var e,f=b.length;for(e=0;e<f;++e){var g=b[e];var h=w(g).toString();h in c?g=c[h]:(g=Ti(d,g),c[h]=g);a[e]=g}}
k.rf=function(a,b){var c=Hi(b,Ki,Mi);if(this.B)var d=this.B;else this.B=d=new Ni(a,c);b.Qc(c);a.enableVertexAttribArray(d.b);a.vertexAttribPointer(d.b,2,5126,!1,32,0);a.enableVertexAttribArray(d.v);a.vertexAttribPointer(d.v,2,5126,!1,32,8);a.enableVertexAttribArray(d.C);a.vertexAttribPointer(d.C,2,5126,!1,32,16);a.enableVertexAttribArray(d.u);a.vertexAttribPointer(d.u,1,5126,!1,32,24);a.enableVertexAttribArray(d.D);a.vertexAttribPointer(d.D,1,5126,!1,32,28);return d};k.sf=function(a,b){a.disableVertexAttribArray(b.b);a.disableVertexAttribArray(b.v);a.disableVertexAttribArray(b.C);a.disableVertexAttribArray(b.u);a.disableVertexAttribArray(b.D)};k.Od=function(a,b,c,d){var e=d?this.u:this.va;d=d?this.v:this.S;if(wb(c)){var f;c=0;var g=e.length;for(f=0;c<g;++c){a.bindTexture(3553,e[c]);var h=d[c];xi(a,b,f,h);f=h}}else for(f=g=0,h=e.length;f<h;++f){a.bindTexture(3553,e[f]);for(var l=0<f?d[f-1]:0,m=d[f],n=l;g<this.i.length&&this.i[g]<=m;){var p=w(this.f[g]).toString();void 0!==c[p]?(n!==l&&xi(a,b,n,l),l=n=g===this.i.length-1?m:this.i[g+1]):l=g===this.i.length-1?m:this.i[g+1];g++}n!==l&&xi(a,b,n,l)}};k.ve=function(a,b,c,d,e){var f,g,h=this.i.length-1;for(f=this.u.length-1;0<=f;--f){a.bindTexture(3553,this.u[f]);var l=0<f?this.v[f-1]:0;for(g=this.v[f];0<=h&&this.i[h]>=l;){var m=this.i[h];var n=this.f[h];var p=w(n).toString();if(void 0===c[p]&&n.V()&&(void 0===e||qb(e,n.V().G()))&&(a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),xi(a,b,m,g),g=d(n)))return g;g=m;h--}}};k.Ub=function(a){var b=a.Hc(),c=a.Y(1),d=a.ye(),e=a.qg(1),f=a.f,g=a.Oc(),h=a.l,l=a.g,m=a.ic();a=a.a;if(this.j.length){var n=this.j[this.j.length-1];w(n)!=w(c)&&(this.S.push(this.b.length),this.j.push(c))}else this.j.push(c);this.c.length?(n=this.c[this.c.length-1],w(n)!=w(e)&&(this.v.push(this.b.length),this.c.push(e))):this.c.push(e);this.D=b[0];this.C=b[1];this.oa=m[1];this.ra=d[1];this.I=d[0];this.R=f;this.Ua=g[0];this.T=g[1];this.fa=l;this.na=h;this.fb=a;this.pa=m[0]};function Xi(a,b,c){var d=b-c;return a[0]===a[d]&&a[1]===a[d+1]&&3<(b-0)/c?!!vf(a,0,b,c):!1};function Yi(){this.b="precision mediump float;varying float a;varying vec2 b;varying float c;uniform float m;uniform vec4 n;uniform vec2 o;uniform float p;void main(void){if(a>0.0){vec2 windowCoords=vec2((b.x+1.0)/2.0*o.x*p,(b.y+1.0)/2.0*o.y*p);if(length(windowCoords-gl_FragCoord.xy)>c*p){discard;}} gl_FragColor=n;float alpha=n.a*m;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}v(Yi,mi);var Zi=new Yi;function $i(){this.b="varying float a;varying vec2 b;varying float c;attribute vec2 d;attribute vec2 e;attribute vec2 f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;uniform float k;uniform float l;bool nearlyEquals(in float value,in float ref){float epsilon=0.000000000001;return value>=ref-epsilon&&value<=ref+epsilon;}void alongNormal(out vec2 offset,in vec2 nextP,in float turnDir,in float direction){vec2 dirVect=nextP-e;vec2 normal=normalize(vec2(-turnDir*dirVect.y,turnDir*dirVect.x));offset=k/2.0*normal*direction;}void miterUp(out vec2 offset,out float round,in bool isRound,in float direction){float halfWidth=k/2.0;vec2 tangent=normalize(normalize(f-e)+normalize(e-d));vec2 normal=vec2(-tangent.y,tangent.x);vec2 dirVect=f-e;vec2 tmpNormal=normalize(vec2(-dirVect.y,dirVect.x));float miterLength=abs(halfWidth/dot(normal,tmpNormal));offset=normal*direction*miterLength;round=0.0;if(isRound){round=1.0;}else if(miterLength>l+k){offset=halfWidth*tmpNormal*direction;}} bool miterDown(out vec2 offset,in vec4 projPos,in mat4 offsetMatrix,in float direction){bool degenerate=false;vec2 tangent=normalize(normalize(f-e)+normalize(e-d));vec2 normal=vec2(-tangent.y,tangent.x);vec2 dirVect=d-e;vec2 tmpNormal=normalize(vec2(-dirVect.y,dirVect.x));vec2 longOffset,shortOffset,longVertex;vec4 shortProjVertex;float halfWidth=k/2.0;if(length(f-e)>length(d-e)){longOffset=tmpNormal*direction*halfWidth;shortOffset=normalize(vec2(dirVect.y,-dirVect.x))*direction*halfWidth;longVertex=f;shortProjVertex=h*vec4(d,0.0,1.0);}else{shortOffset=tmpNormal*direction*halfWidth;longOffset=normalize(vec2(dirVect.y,-dirVect.x))*direction*halfWidth;longVertex=d;shortProjVertex=h*vec4(f,0.0,1.0);}vec4 p1=h*vec4(longVertex,0.0,1.0)+offsetMatrix*vec4(longOffset,0.0,0.0);vec4 p2=projPos+offsetMatrix*vec4(longOffset,0.0,0.0);vec4 p3=shortProjVertex+offsetMatrix*vec4(-shortOffset,0.0,0.0);vec4 p4=shortProjVertex+offsetMatrix*vec4(shortOffset,0.0,0.0);float denom=(p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y);float firstU=((p4.x-p3.x)*(p1.y-p3.y)-(p4.y-p3.y)*(p1.x-p3.x))/denom;float secondU=((p2.x-p1.x)*(p1.y-p3.y)-(p2.y-p1.y)*(p1.x-p3.x))/denom;float epsilon=0.000000000001;if(firstU>epsilon&&firstU<1.0-epsilon&&secondU>epsilon&&secondU<1.0-epsilon){shortProjVertex.x=p1.x+firstU*(p2.x-p1.x);shortProjVertex.y=p1.y+firstU*(p2.y-p1.y);offset=shortProjVertex.xy;degenerate=true;}else{float miterLength=abs(halfWidth/dot(normal,tmpNormal));offset=normal*direction*miterLength;}return degenerate;}void squareCap(out vec2 offset,out float round,in bool isRound,in vec2 nextP,in float turnDir,in float direction){round=0.0;vec2 dirVect=e-nextP;vec2 firstNormal=normalize(dirVect);vec2 secondNormal=vec2(turnDir*firstNormal.y*direction,-turnDir*firstNormal.x*direction);vec2 hypotenuse=normalize(firstNormal-secondNormal);vec2 normal=vec2(turnDir*hypotenuse.y*direction,-turnDir*hypotenuse.x*direction);float length=sqrt(c*c*2.0);offset=normal*length;if(isRound){round=1.0;}} void main(void){bool degenerate=false;float direction=float(sign(g));mat4 offsetMatrix=i*j;vec2 offset;vec4 projPos=h*vec4(e,0.0,1.0);bool round=nearlyEquals(mod(g,2.0),0.0);a=0.0;c=k/2.0;b=projPos.xy;if(nearlyEquals(mod(g,3.0),0.0)||nearlyEquals(mod(g,17.0),0.0)){alongNormal(offset,f,1.0,direction);}else if(nearlyEquals(mod(g,5.0),0.0)||nearlyEquals(mod(g,13.0),0.0)){alongNormal(offset,d,-1.0,direction);}else if(nearlyEquals(mod(g,23.0),0.0)){miterUp(offset,a,round,direction);}else if(nearlyEquals(mod(g,19.0),0.0)){degenerate=miterDown(offset,projPos,offsetMatrix,direction);}else if(nearlyEquals(mod(g,7.0),0.0)){squareCap(offset,a,round,f,1.0,direction);}else if(nearlyEquals(mod(g,11.0),0.0)){squareCap(offset,a,round,d,-1.0,direction);}if(!degenerate){vec4 offsets=offsetMatrix*vec4(offset,0.0,0.0);gl_Position=projPos+offsets;}else{gl_Position=vec4(offset,0.0,1.0);}}"}
v($i,ni);var aj=new $i;function bj(a,b){this.B=a.getUniformLocation(b,"n");this.oa=a.getUniformLocation(b,"k");this.R=a.getUniformLocation(b,"l");this.c=a.getUniformLocation(b,"j");this.f=a.getUniformLocation(b,"i");this.a=a.getUniformLocation(b,"m");this.ra=a.getUniformLocation(b,"p");this.i=a.getUniformLocation(b,"h");this.I=a.getUniformLocation(b,"o");this.g=a.getAttribLocation(b,"g");this.o=a.getAttribLocation(b,"d");this.l=a.getAttribLocation(b,"f");this.b=a.getAttribLocation(b,"e")};function cj(a,b){vi.call(this,0,b);this.v=null;this.u=[];this.j=[];this.c={strokeColor:null,lineCap:void 0,lineDash:null,lineDashOffset:void 0,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0,s:!1}}v(cj,vi);function dj(a,b,c,d){var e,f=a.a.length,g=a.b.length,h="bevel"===a.c.lineJoin?0:"miter"===a.c.lineJoin?1:2,l="butt"===a.c.lineCap?0:"square"===a.c.lineCap?1:2,m=Xi(b,c,d),n=g,p=1;for(e=0;e<c;e+=d){var q=f/7;var r=u;var u=x||[b[e],b[e+1]];if(e)if(e===c-d){if(m)var x=B;else r=r||[0,0],f=ej(a,r,u,[0,0],p*fj*(l||1),f),f=ej(a,r,u,[0,0],-p*fj*(l||1),f),a.b[g++]=q,a.b[g++]=n-1,a.b[g++]=n,a.b[g++]=n,a.b[g++]=q+1,a.b[g++]=q,l&&(f=ej(a,r,u,[0,0],p*gj*l,f),f=ej(a,r,u,[0,0],-p*gj*l,f),a.b[g++]=q+2,a.b[g++]=q,a.b[g++]=q+1,a.b[g++]=q+1,a.b[g++]=q+3,a.b[g++]=q+2);break}else x=[b[e+d],b[e+d+1]];else{x=[b[e+d],b[e+d+1]];if(c-0===2*d&&pa(u,x))break;if(m){r=[b[c-2*d],b[c-2*d+1]];var B=x}else{l&&(f=ej(a,[0,0],u,x,p*hj*l,f),f=ej(a,[0,0],u,x,-p*hj*l,f),a.b[g++]=q+2,a.b[g++]=q,a.b[g++]=q+1,a.b[g++]=q+1,a.b[g++]=q+3,a.b[g++]=q+2);f=ej(a,[0,0],u,x,p*ij*(l||1),f);f=ej(a,[0,0],u,x,-p*ij*(l||1),f);n=f/7-1;continue}}var E=Bi(r[0],r[1],u[0],u[1],x[0],x[1])?-1:1;f=ej(a,r,u,x,E*jj*(h||1),f);f=ej(a,r,u,x,E*kj*(h||1),f);f=ej(a,r,u,x,-E*lj*(h||1),f);0<e&&(a.b[g++]=q,a.b[g++]=n-1,a.b[g++]=n,a.b[g++]=q+2,a.b[g++]=q,a.b[g++]=0<p*E?n:n-1);a.b[g++]=q;a.b[g++]=q+2;a.b[g++]=q+1;n=q+2;p=E;h&&(f=ej(a,r,u,x,E*mj*h,f),a.b[g++]=q+1,a.b[g++]=q+3,a.b[g++]=q)}m&&(q=q||f/7,E=Sf([r[0],r[1],u[0],u[1],x[0],x[1]],0,6,2)?1:-1,f=ej(a,r,u,x,E*jj*(h||1),f),ej(a,r,u,x,-E*lj*(h||1),f),a.b[g++]=q,a.b[g++]=n-1,a.b[g++]=n,a.b[g++]=q+1,a.b[g++]=q,a.b[g++]=0<p*E?n:n-1)}
function ej(a,b,c,d,e,f){a.a[f++]=b[0];a.a[f++]=b[1];a.a[f++]=c[0];a.a[f++]=c[1];a.a[f++]=d[0];a.a[f++]=d[1];a.a[f++]=e;return f}function nj(a,b,c,d){c-=b;return c<2*d?!1:c===2*d?!pa([a[b],a[b+1]],[a[b+d],a[b+d+1]]):!0}k=cj.prototype;k.mc=function(a,b){var c=a.ga();a=a.qa();nj(c,0,c.length,a)&&(c=qf(c,0,c.length,a,-this.origin[0],-this.origin[1]),this.c.s&&(this.j.push(this.b.length),this.c.s=!1),this.i.push(this.b.length),this.f.push(b),dj(this,c,c.length,a))};k.nc=function(a,b){var c=this.b.length,d=a.Bb();d.unshift(0);var e=a.ga();a=a.qa();var f;if(1<d.length){var g=1;for(f=d.length;g<f;++g)if(nj(e,d[g-1],d[g],a)){var h=qf(e,d[g-1],d[g],a,-this.origin[0],-this.origin[1]);dj(this,h,h.length,a)}}this.b.length>c&&(this.i.push(c),this.f.push(b),this.c.s&&(this.j.push(c),this.c.s=!1))};function oj(a,b,c,d){Xi(b,b.length,d)||(b.push(b[0]),b.push(b[1]));dj(a,b,b.length,d);if(c.length){var e;b=0;for(e=c.length;b<e;++b)Xi(c[b],c[b].length,d)||(c[b].push(c[b][0]),c[b].push(c[b][1])),dj(a,c[b],c[b].length,d)}}function pj(a,b,c){c=void 0===c?a.b.length:c;a.i.push(c);a.f.push(b);a.c.s&&(a.j.push(c),a.c.s=!1)}k.Db=function(){this.l=new Di(this.a);this.o=new Di(this.b);this.i.push(this.b.length);!this.j.length&&0<this.u.length&&(this.u=[]);this.b=this.a=null};k.Eb=function(a){var b=this.l,c=this.o;return function(){Gi(a,b);Gi(a,c)}};k.rf=function(a,b,c,d){var e=Hi(b,Zi,aj);if(this.v)var f=this.v;else this.v=f=new bj(a,e);b.Qc(e);a.enableVertexAttribArray(f.o);a.vertexAttribPointer(f.o,2,5126,!1,28,0);a.enableVertexAttribArray(f.b);a.vertexAttribPointer(f.b,2,5126,!1,28,8);a.enableVertexAttribArray(f.l);a.vertexAttribPointer(f.l,2,5126,!1,28,16);a.enableVertexAttribArray(f.g);a.vertexAttribPointer(f.g,1,5126,!1,28,24);a.uniform2fv(f.I,c);a.uniform1f(f.ra,d);return f};k.sf=function(a,b){a.disableVertexAttribArray(b.o);a.disableVertexAttribArray(b.b);a.disableVertexAttribArray(b.l);a.disableVertexAttribArray(b.g)};k.Od=function(a,b,c,d){var e=a.getParameter(a.DEPTH_FUNC),f=a.getParameter(a.DEPTH_WRITEMASK);d||(a.enable(a.DEPTH_TEST),a.depthMask(!0),a.depthFunc(a.NOTEQUAL));if(wb(c)){var g=this.i[this.i.length-1];for(c=this.j.length-1;0<=c;--c){var h=this.j[c];var l=this.u[c];qj(this,a,l[0],l[1],l[2]);xi(a,b,h,g);a.clear(a.DEPTH_BUFFER_BIT);g=h}}else{var m=this.i.length-2;l=g=this.i[m+1];for(h=this.j.length-1;0<=h;--h){var n=this.u[h];qj(this,a,n[0],n[1],n[2]);for(n=this.j[h];0<=m&&this.i[m]>=n;){var p=this.i[m];var q=this.f[m];q=w(q).toString();c[q]&&(g!==l&&(xi(a,b,g,l),a.clear(a.DEPTH_BUFFER_BIT)),l=p);m--;g=p}g!==l&&(xi(a,b,g,l),a.clear(a.DEPTH_BUFFER_BIT));g=l=n}}d||(a.disable(a.DEPTH_TEST),a.clear(a.DEPTH_BUFFER_BIT),a.depthMask(f),a.depthFunc(e))};k.ve=function(a,b,c,d,e){var f,g;var h=this.i.length-2;var l=this.i[h+1];for(f=this.j.length-1;0<=f;--f){var m=this.u[f];qj(this,a,m[0],m[1],m[2]);for(g=this.j[f];0<=h&&this.i[h]>=g;){m=this.i[h];var n=this.f[h];var p=w(n).toString();if(void 0===c[p]&&n.V()&&(void 0===e||qb(e,n.V().G()))&&(a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),xi(a,b,m,l),l=d(n)))return l;h--;l=m}}};function qj(a,b,c,d,e){b.uniform4fv(a.v.B,c);b.uniform1f(a.v.oa,d);b.uniform1f(a.v.R,e)}
k.Ma=function(a,b){a=b.f;this.c.lineCap=void 0!==a?a:"round";a=b.i;this.c.lineDash=a?a:zi;a=b.g;this.c.lineDashOffset=a?a:0;a=b.j;this.c.lineJoin=void 0!==a?a:"round";a=b.a;a instanceof CanvasGradient||a instanceof CanvasPattern?a=Ai:a=ed(a).map(function(a,b){return 3!=b?a/255:a})||Ai;var c=b.c,c=void 0!==c?c:1;b=b.o;b=void 0!==b?b:10;this.c.strokeColor&&pa(this.c.strokeColor,a)&&this.c.lineWidth===c&&this.c.miterLimit===b||(this.c.s=!0,this.c.strokeColor=a,this.c.lineWidth=c,this.c.miterLimit=b,this.u.push([a,c,b]))};var ij=3,fj=5,hj=7,gj=11,jj=13,kj=17,lj=19,mj=23;function rj(){this.b="precision mediump float;uniform vec4 e;uniform float f;void main(void){gl_FragColor=e;float alpha=e.a*f;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}v(rj,mi);var sj=new rj;function tj(){this.b="attribute vec2 a;uniform mat4 b;uniform mat4 c;uniform mat4 d;void main(void){gl_Position=b*vec4(a,0.0,1.0);}"}v(tj,ni);var uj=new tj;function vj(a,b){this.B=a.getUniformLocation(b,"e");this.c=a.getUniformLocation(b,"d");this.f=a.getUniformLocation(b,"c");this.a=a.getUniformLocation(b,"f");this.i=a.getUniformLocation(b,"b");this.b=a.getAttribLocation(b,"a")};function wj(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.i=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineDashOffset;this.j=a.lineJoin;this.o=a.miterLimit;this.c=a.width;this.b=void 0}k=wj.prototype;k.clone=function(){var a=this.a;return new wj({color:a&&a.slice?a.slice():a||void 0,lineCap:this.f,lineDash:this.i?this.i.slice():void 0,lineDashOffset:this.g,lineJoin:this.j,miterLimit:this.o,width:this.c})};k.No=function(){return this.a};k.Vk=function(){return this.f};k.Oo=function(){return this.i};k.Wk=function(){return this.g};k.Xk=function(){return this.j};k.bl=function(){return this.o};k.Po=function(){return this.c};k.Qo=function(a){this.a=a;this.b=void 0};k.aq=function(a){this.f=a;this.b=void 0};k.setLineDash=function(a){this.i=a;this.b=void 0};k.bq=function(a){this.g=a;this.b=void 0};k.cq=function(a){this.j=a;this.b=void 0};k.gq=function(a){this.o=a;this.b=void 0};k.jq=function(a){this.c=a;this.b=void 0};function xj(a){this.b=this.a=this.i=void 0;this.f=void 0===a?!0:a;this.c=0}function yj(a){var b=a.b;if(b){var c=b.next,d=b.ub;c&&(c.ub=d);d&&(d.next=c);a.b=c||d;a.i===a.a?(a.b=void 0,a.i=void 0,a.a=void 0):a.i===b?a.i=a.b:a.a===b&&(a.a=d?a.b.ub:a.b);a.c--}}function zj(a){a.b=a.i;if(a.b)return a.b.data}function Aj(a){if(a.b&&a.b.next)return a.b=a.b.next,a.b.data}function Bj(a){if(a.b&&a.b.next)return a.b.next.data}function Cj(a){if(a.b&&a.b.ub)return a.b=a.b.ub,a.b.data}
function Dj(a){if(a.b&&a.b.ub)return a.b.ub.data}function Ej(a){if(a.b)return a.b.data}xj.prototype.concat=function(a){if(a.b){if(this.b){var b=this.b.next;this.b.next=a.i;a.i.ub=this.b;b.ub=a.a;a.a.next=b;this.c+=a.c}else this.b=a.b,this.i=a.i,this.a=a.a,this.c=a.c;a.b=void 0;a.i=void 0;a.a=void 0;a.c=0}};var Fj={$d:function(){}};(function(a){function b(a,e,f,g,h){f=f||0;g=g||a.length-1;for(h=h||d;g>f;){if(600<g-f){var l=g-f+1,m=e-f+1,n=Math.log(l),p=.5*Math.exp(2*n/3),n=.5*Math.sqrt(n*p*(l-p)/l)*(0>m-l/2?-1:1);b(a,e,Math.max(f,Math.floor(e-m*p/l+n)),Math.min(g,Math.floor(e+(l-m)*p/l+n)),h)}l=a[e];m=f;p=g;c(a,f,e);for(0<h(a[g],l)&&c(a,f,g);m<p;){c(a,m,p);m++;for(p--;0>h(a[m],l);)m++;for(;0<h(a[p],l);)p--}0===h(a[f],l)?c(a,f,p):(p++,c(a,p,g));p<=e&&(f=p+1);e<=p&&(g=p-1)}}function c(a,b,c){var d=a[b];a[b]=a[c];a[c]=d}function d(a,b){return a<b?-1:a>b?1:0}function e(a,b){if(!(this instanceof e))return new e(a,b);this.Hf=Math.max(4,a||9);this.fh=Math.max(2,Math.ceil(.4*this.Hf));b&&this.ek(b);this.clear()}function f(a,b){g(a,0,a.children.length,b,a)}function g(a,b,c,d,e){e||(e=u(null));e.ca=Infinity;e.da=Infinity;e.$=-Infinity;e.ia=-Infinity;for(var f;b<c;b++)f=a.children[b],h(e,a.ib?d(f):f);return e}function h(a,b){a.ca=Math.min(a.ca,b.ca);a.da=Math.min(a.da,b.da);a.$=Math.max(a.$,b.$);a.ia=Math.max(a.ia,b.ia)}function l(a,b){return a.ca-b.ca}function m(a,b){return a.da-b.da}function n(a){return(a.$-a.ca)*(a.ia-a.da)}function p(a){return a.$-a.ca+(a.ia-a.da)}function q(a,b){return a.ca<=b.ca&&a.da<=b.da&&b.$<=a.$&&b.ia<=a.ia}function r(a,b){return b.ca<=a.$&&b.da<=a.ia&&b.$>=a.ca&&b.ia>=a.da}function u(a){return{children:a,height:1,ib:!0,ca:Infinity,da:Infinity,$:-Infinity,ia:-Infinity}}function x(a,b,c,d,e){for(var f=[b,c],g;f.length;)c=f.pop(),b=f.pop(),c-b<=d||(g=b+Math.ceil((c-b)/d/2)*d,B(a,g,b,c,e),f.push(b,g,g,c))}var B=b;e.prototype={all:function(){return this.$g(this.data,[])},search:function(a){var b=this.data,c=[],d=this.wb;if(!r(a,b))return c;for(var e=[],f,g,h,l;b;){f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=b.ib?d(h):h,r(a,l)&&(b.ib?c.push(h):q(a,l)?this.$g(h,c):e.push(h));b=e.pop()}return c},load:function(a){if(!a||!a.length)return this;if(a.length<this.fh){for(var b=0,c=a.length;b<c;b++)this.Ca(a[b]);return this}a=this.bh(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hh(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.eh(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ca:function(a){a&&this.eh(a,this.data.height-1);return this},clear:function(){this.data=u([]);return this},remove:function(a,b){if(!a)return this;for(var c=this.data,d=this.wb(a),e=[],f=[],g,h,l,m;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),m=!0);if(c.ib){a:{l=a;var n=c.children,p=b;if(p){for(var r=0;r<n.length;r++)if(p(l,n[r])){l=r;break a}l=-1}else l=n.indexOf(l)}if(-1!==l){c.children.splice(l,1);e.push(c);this.ck(e);break}}m||c.ib||!q(c,d)?h?(g++,c=h.children[g],m=!1):c=null:(e.push(c),f.push(g),g=0,h=c,c=c.children[0])}return this},wb:function(a){return a},Lf:l,Mf:m,toJSON:function(){return this.data},$g:function(a,b){for(var c=[];a;)a.ib?b.push.apply(b,a.children):c.push.apply(c,a.children),a=c.pop();return b},bh:function(a,b,c,d){var e=c-b+1,g=this.Hf;if(e<=g){var h=u(a.slice(b,c+1));f(h,this.wb);return h}d||(d=Math.ceil(Math.log(e)/Math.log(g)),g=Math.ceil(e/Math.pow(g,d-1)));h=u([]);h.ib=!1;h.height=d;var e=Math.ceil(e/g),g=e*Math.ceil(Math.sqrt(g)),l;for(x(a,b,c,g,this.Lf);b<=c;b+=g){var m=Math.min(b+g-1,c);x(a,b,m,e,this.Mf);for(l=b;l<=m;l+=e){var n=Math.min(l+e-1,m);h.children.push(this.bh(a,l,n,d-1))}}f(h,this.wb);return h},bk:function(a,b,c,d){for(var e,f,g,h,l,m,p,q;;){d.push(b);if(b.ib||d.length-1===c)break;p=q=Infinity;e=0;for(f=b.children.length;e<f;e++)g=b.children[e],l=n(g),m=(Math.max(g.$,a.$)-Math.min(g.ca,a.ca))*(Math.max(g.ia,a.ia)-Math.min(g.da,a.da))-l,m<q?(q=m,p=l<p?l:p,h=g):m===q&&l<p&&(p=l,h=g);b=h||b.children[0]}return b},eh:function(a,b,c){var d=this.wb;c=c?a:d(a);var d=[],e=this.bk(c,this.data,b,d);e.children.push(a);for(h(e,c);0<=b;)if(d[b].children.length>this.Hf)this.jk(d,b),b--;else break;this.Zj(c,d,b)},jk:function(a,b){var c=a[b],d=c.children.length,e=this.fh;this.$j(c,e,d);d=this.ak(c,e,d);d=u(c.children.splice(d,c.children.length-d));d.height=c.height;d.ib=c.ib;f(c,this.wb);f(d,this.wb);b?a[b-1].children.push(d):this.hh(c,d)},hh:function(a,b){this.data=u([a,b]);this.data.height=a.height+1;this.data.ib=!1;f(this.data,this.wb)},ak:function(a,b,c){var d,e;var f=e=Infinity;for(d=b;d<=c-b;d++){var h=g(a,0,d,this.wb);var l=g(a,d,c,this.wb);var m=Math.max(0,Math.min(h.$,l.$)-Math.max(h.ca,l.ca))*Math.max(0,Math.min(h.ia,l.ia)-Math.max(h.da,l.da));h=n(h)+n(l);if(m<f){f=m;var p=d;e=h<e?h:e}else m===f&&h<e&&(e=h,p=d)}return p},$j:function(a,b,c){var d=a.ib?this.Lf:l,e=a.ib?this.Mf:m,f=this.ah(a,b,c,d);b=this.ah(a,b,c,e);f<b&&a.children.sort(d)},ah:function(a,b,c,d){a.children.sort(d);d=this.wb;var e=g(a,0,b,d),f=g(a,c-b,c,d),l=p(e)+p(f),m;for(m=b;m<c-b;m++){var n=a.children[m];h(e,a.ib?d(n):n);l+=p(e)}for(m=c-b-1;m>=b;m--)n=a.children[m],h(f,a.ib?d(n):n),l+=p(f);return l},Zj:function(a,b,c){for(;0<=c;c--)h(b[c],a)},ck:function(a){for(var b=a.length-1,c;0<=b;b--)0===a[b].children.length?0<b?(c=a[b-1].children,c.splice(c.indexOf(a[b]),1)):this.clear():f(a[b],this.wb)},ek:function(a){var b=["return a"," - b",";"];this.Lf=new Function("a","b",b.join(a[0]));this.Mf=new Function("a","b",b.join(a[1]));this.wb=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}};a["default"]=e})(Fj.$d=Fj.$d||{});Fj.$d=Fj.$d.default;function Gj(a){this.a=Fj.$d(a);this.b={}}k=Gj.prototype;k.Ca=function(a,b){a={ca:a[0],da:a[1],$:a[2],ia:a[3],value:b};this.a.Ca(a);this.b[w(b)]=a};k.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={ca:f[0],da:f[1],$:f[2],ia:f[3],value:g};c[d]=f;this.b[w(g)]=f}this.a.load(c)};k.remove=function(a){a=w(a);var b=this.b[a];delete this.b[a];return null!==this.a.remove(b)};function Hj(a,b,c){var d=a.b[w(c)];bb([d.ca,d.da,d.$,d.ia],b)||(a.remove(c),a.Ca(b,c))}
function Ij(a){return a.a.all().map(function(a){return a.value})}function Jj(a,b){return a.a.search({ca:b[0],da:b[1],$:b[2],ia:b[3]}).map(function(a){return a.value})}k.forEach=function(a,b){return Kj(Ij(this),a,b)};function Lj(a,b,c,d){return Kj(Jj(a,b),c,d)}function Kj(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}k.clear=function(){this.a.clear();this.b={}};k.G=function(a){var b=this.a.data;return Xa(b.ca,b.da,b.$,b.ia,a)};k.concat=function(a){this.a.load(a.a.all());for(var b in a.b)this.b[b|0]=a.b[b|0]};function Mj(a,b){vi.call(this,0,b);this.g=new cj(0,b);this.v=null;this.u=[];this.c=[];this.j={fillColor:null,s:!1}}v(Mj,vi);function Nj(a,b,c,d){var e=new xj,f=new Gj;b=Oj(a,b,d,e,f,!0);if(c.length){var g,h=[];var l=0;for(g=c.length;l<g;++l){var m={list:new xj,$:void 0,Mg:new Gj};h.push(m);m.$=Oj(a,c[l],d,m.list,m.Mg,!1)}h.sort(function(a,b){return b.$[0]===a.$[0]?a.$[1]-b.$[1]:b.$[0]-a.$[0]});for(l=0;l<h.length;++l){c=h[l].list;g=d=zj(c);do{if(Pj(g,f).length){var n=!0;break}g=Aj(c)}while(d!==g);n||(Qj(c,h[l].Mg,!0),Rj(c,h[l].$[0],e,b[0],f)&&(f.concat(h[l].Mg),Qj(e,f,!1)))}}else Qj(e,f,!1);Sj(a,e,f)}
function Oj(a,b,c,d,e,f){var g,h=a.a.length/2,l,m=[],n=[];if(f===Sf(b,0,b.length,c)){var p=l=Tj(a,b[0],b[1],h++);f=b[0];var q=b[1];var r=c;for(g=b.length;r<g;r+=c){var u=Tj(a,b[r],b[r+1],h++);n.push(Uj(p,u,d));m.push([Math.min(p.x,u.x),Math.min(p.y,u.y),Math.max(p.x,u.x),Math.max(p.y,u.y)]);b[r]>f&&(f=b[r],q=b[r+1]);p=u}}else for(r=b.length-c,p=l=Tj(a,b[r],b[r+1],h++),f=b[r],q=b[r+1],r-=c,g=0;r>=g;r-=c)u=Tj(a,b[r],b[r+1],h++),n.push(Uj(p,u,d)),m.push([Math.min(p.x,u.x),Math.min(p.y,u.y),Math.max(p.x,u.x),Math.max(p.y,u.y)]),b[r]>f&&(f=b[r],q=b[r+1]),p=u;n.push(Uj(u,l,d));m.push([Math.min(p.x,u.x),Math.min(p.y,u.y),Math.max(p.x,u.x),Math.max(p.y,u.y)]);e.load(m,n);return[f,q]}function Qj(a,b,c){var d=zj(a),e=d,f=Aj(a),g=!1;do{var h=c?Bi(f.W.x,f.W.y,e.W.x,e.W.y,e.aa.x,e.aa.y):Bi(e.aa.x,e.aa.y,e.W.x,e.W.y,f.W.x,f.W.y);void 0===h?(Vj(e,f,a,b),g=!0,f===d&&(d=Bj(a)),f=e,Cj(a)):e.W.Fb!==h&&(e.W.Fb=h,g=!0);e=f;f=Aj(a)}while(e!==d);return g}
function Rj(a,b,c,d,e){for(var f=zj(a);f.W.x!==b;)f=Aj(a);b=f.W;d={x:d,y:b.y,hb:-1};var g=Infinity,h;var l=Pj({aa:b,W:d},e,!0);var m=0;for(h=l.length;m<h;++m){var n=l[m],p=Wj(b,d,n.aa,n.W,!0),q=Math.abs(b.x-p[0]);if(q<g&&void 0!==Bi(b.x,b.y,n.aa.x,n.aa.y,n.W.x,n.W.y)){g=q;var r={x:p[0],y:p[1],hb:-1};f=n}}if(Infinity===g)return!1;l=f.W;if(0<g&&(f=Xj(b,r,f.W,e),f.length))for(r=Infinity,m=0,h=f.length;m<h;++m)if(g=f[m],n=Math.atan2(b.y-g.y,d.x-g.x),n<r||n===r&&g.x<l.x)r=n,l=g;for(f=zj(c);f.W.x!==l.x||f.W.y!==l.y;)f=Aj(c);d={x:b.x,y:b.y,hb:b.hb,Fb:void 0};m={x:f.W.x,y:f.W.y,hb:f.W.hb,Fb:void 0};Bj(a).aa=d;Uj(b,f.W,a,e);Uj(m,d,a,e);f.W=m;a.f&&a.b&&(a.i=a.b,a.a=a.b.ub);c.concat(a);return!0}
function Sj(a,b,c){for(var d=!1,e=Yj(b,c);3<b.c;)if(e){if(!Zj(a,b,c,e,d)&&!Qj(b,c,d)&&!ak(a,b,c,!0))break}else if(!Zj(a,b,c,e,d)&&!Qj(b,c,d)&&!ak(a,b,c))if(e=Yj(b,c)){var d=b,f=2*d.c,g=Array(f),h=zj(d),l=h,m=0;do g[m++]=l.aa.x,g[m++]=l.aa.y,l=Aj(d);while(l!==h);d=!Sf(g,0,f,2);Qj(b,c,d)}else{e=a;d=b;f=g=zj(d);do{h=Pj(f,c);if(h.length){g=h[0];h=Wj(f.aa,f.W,g.aa,g.W);h=Tj(e,h[0],h[1],e.a.length/2);l=new xj;m=new Gj;Uj(h,f.W,l,m);f.W=h;Hj(c,[Math.min(f.aa.x,h.x),Math.min(f.aa.y,h.y),Math.max(f.aa.x,h.x),Math.max(f.aa.y,h.y)],f);for(f=Aj(d);f!==g;)Uj(f.aa,f.W,l,m),c.remove(f),yj(d),f=Ej(d);Uj(g.aa,h,l,m);g.aa=h;Hj(c,[Math.min(g.W.x,h.x),Math.min(g.W.y,h.y),Math.max(g.W.x,h.x),Math.max(g.W.y,h.y)],g);Qj(d,c,!1);Sj(e,d,c);Qj(l,m,!1);Sj(e,l,m);break}f=Aj(d)}while(f!==g);break}3===b.c&&(e=a.b.length,a.b[e++]=Dj(b).aa.hb,a.b[e++]=Ej(b).aa.hb,a.b[e++]=Bj(b).aa.hb)}
function Zj(a,b,c,d,e){var f=a.b.length,g=zj(b),h=Dj(b),l=g,m=Aj(b),n=Bj(b),p=!1;do{var q=l.aa;var r=l.W;var u=m.W;if(!1===r.Fb){var x=e?bk(n.W,u,r,q,h.aa):bk(h.aa,q,r,u,n.W);!d&&Pj({aa:q,W:u},c).length||!x||Xj(q,r,u,c,!0).length||!d&&!1!==q.Fb&&!1!==u.Fb&&Sf([h.aa.x,h.aa.y,q.x,q.y,r.x,r.y,u.x,u.y,n.W.x,n.W.y],0,10,2)!==!e||(a.b[f++]=q.hb,a.b[f++]=r.hb,a.b[f++]=u.hb,Vj(l,m,b,c),m===g&&(g=n),p=!0)}h=Dj(b);l=Ej(b);m=Aj(b);n=Bj(b)}while(l!==g&&3<b.c);return p}
function ak(a,b,c,d){var e=zj(b);Aj(b);var f=e,g=Aj(b),h=!1;do{var l=Wj(f.aa,f.W,g.aa,g.W,d);if(l){var h=a.b.length,m=a.a.length/2,n=Cj(b);yj(b);c.remove(n);var p=n===e;d?(l[0]===f.aa.x&&l[1]===f.aa.y?(Cj(b),l=f.aa,g.aa=l,c.remove(f),p=p||f===e):(l=g.W,f.W=l,c.remove(g),p=p||g===e),yj(b)):(l=Tj(a,l[0],l[1],m),f.W=l,g.aa=l,Hj(c,[Math.min(f.aa.x,f.W.x),Math.min(f.aa.y,f.W.y),Math.max(f.aa.x,f.W.x),Math.max(f.aa.y,f.W.y)],f),Hj(c,[Math.min(g.aa.x,g.W.x),Math.min(g.aa.y,g.W.y),Math.max(g.aa.x,g.W.x),Math.max(g.aa.y,g.W.y)],g));a.b[h++]=n.aa.hb;a.b[h++]=n.W.hb;a.b[h++]=l.hb;h=!0;if(p)break}f=Dj(b);g=Aj(b)}while(f!==e);return h}function Yj(a,b){var c=zj(a),d=c;do{if(Pj(d,b).length)return!1;d=Aj(a)}while(d!==c);return!0}function Tj(a,b,c,d){var e=a.a.length;a.a[e++]=b;a.a[e++]=c;return{x:b,y:c,hb:d,Fb:void 0}}
function Uj(a,b,c,d){var e={aa:a,W:b},f={ub:void 0,next:void 0,data:e},g=c.b;if(g){var h=g.next;f.ub=g;f.next=h;g.next=f;h&&(h.ub=f);g===c.a&&(c.a=f)}else c.i=f,c.a=f,c.f&&(f.next=f,f.ub=f);c.b=f;c.c++;d&&d.Ca([Math.min(a.x,b.x),Math.min(a.y,b.y),Math.max(a.x,b.x),Math.max(a.y,b.y)],e);return e}function Vj(a,b,c,d){Ej(c)===b&&(yj(c),a.W=b.W,d.remove(b),Hj(d,[Math.min(a.aa.x,a.W.x),Math.min(a.aa.y,a.W.y),Math.max(a.aa.x,a.W.x),Math.max(a.aa.y,a.W.y)],a))}
function Xj(a,b,c,d,e){var f,g,h=[],l=Jj(d,[Math.min(a.x,b.x,c.x),Math.min(a.y,b.y,c.y),Math.max(a.x,b.x,c.x),Math.max(a.y,b.y,c.y)]);d=0;for(f=l.length;d<f;++d)for(g in l[d]){var m=l[d][g];"object"!==typeof m||e&&!m.Fb||m.x===a.x&&m.y===a.y||m.x===b.x&&m.y===b.y||m.x===c.x&&m.y===c.y||-1!==h.indexOf(m)||!Mf([a.x,a.y,b.x,b.y,c.x,c.y],0,6,2,m.x,m.y)||h.push(m)}return h}
function Pj(a,b,c){var d=a.aa,e=a.W;b=Jj(b,[Math.min(d.x,e.x),Math.min(d.y,e.y),Math.max(d.x,e.x),Math.max(d.y,e.y)]);var f=[],g;var h=0;for(g=b.length;h<g;++h){var l=b[h];a!==l&&(c||l.aa!==e||l.W!==d)&&Wj(d,e,l.aa,l.W,c)&&f.push(l)}return f}
function Wj(a,b,c,d,e){var f=(d.y-c.y)*(b.x-a.x)-(d.x-c.x)*(b.y-a.y);if(f&&(d=((d.x-c.x)*(a.y-c.y)-(d.y-c.y)*(a.x-c.x))/f,c=((b.x-a.x)*(a.y-c.y)-(b.y-a.y)*(a.x-c.x))/f,!e&&d>Ci&&d<1-Ci&&c>Ci&&c<1-Ci||e&&0<=d&&1>=d&&0<=c&&1>=c))return[a.x+d*(b.x-a.x),a.y+d*(b.y-a.y)]}
function bk(a,b,c,d,e){if(void 0===b.Fb||void 0===d.Fb)return!1;var f=(c.x-d.x)*(b.y-d.y)>(c.y-d.y)*(b.x-d.x);e=(e.x-d.x)*(b.y-d.y)<(e.y-d.y)*(b.x-d.x);a=(a.x-b.x)*(d.y-b.y)>(a.y-b.y)*(d.x-b.x);c=(c.x-b.x)*(d.y-b.y)<(c.y-b.y)*(d.x-b.x);b=b.Fb?c||a:c&&a;return(d.Fb?e||f:e&&f)&&b}k=Mj.prototype;k.pc=function(a,b){var c=a.c,d=a.qa(),e=this.b.length,f=this.g.b.length;a=a.ga();var g,h,l;var m=h=0;for(g=c.length;m<g;++m){var n=c[m];if(0<n.length){var p=qf(a,h,n[0],d,-this.origin[0],-this.origin[1]);if(p.length){var q=[];h=1;for(l=n.length;h<l;++h)if(n[h]!==n[h-1]){var r=qf(a,n[h-1],n[h],d,-this.origin[0],-this.origin[1]);q.push(r)}oj(this.g,p,q,d);Nj(this,p,q,d)}}h=n[n.length-1]}this.b.length>e&&(this.i.push(e),this.f.push(b),this.j.s&&(this.c.push(e),this.j.s=!1));this.g.b.length>f&&pj(this.g,b,f)};k.rc=function(a,b){var c=a.Bb(),d=a.qa();if(0<c.length){a=a.ga().map(Number);var e=qf(a,0,c[0],d,-this.origin[0],-this.origin[1]);if(e.length){var f=[],g;var h=1;for(g=c.length;h<g;++h)if(c[h]!==c[h-1]){var l=qf(a,c[h-1],c[h],d,-this.origin[0],-this.origin[1]);f.push(l)}this.i.push(this.b.length);this.f.push(b);this.j.s&&(this.c.push(this.b.length),this.j.s=!1);pj(this.g,b);oj(this.g,e,f,d);Nj(this,e,f,d)}}};k.Db=function(a){this.l=new Di(this.a);this.o=new Di(this.b);this.i.push(this.b.length);this.g.Db(a);!this.c.length&&0<this.u.length&&(this.u=[]);this.b=this.a=null};k.Eb=function(a){var b=this.l,c=this.o,d=this.g.Eb(a);return function(){Gi(a,b);Gi(a,c);d()}};k.rf=function(a,b){var c=Hi(b,sj,uj);if(this.v)var d=this.v;else this.v=d=new vj(a,c);b.Qc(c);a.enableVertexAttribArray(d.b);a.vertexAttribPointer(d.b,2,5126,!1,8,0);return d};k.sf=function(a,b){a.disableVertexAttribArray(b.b)};k.Od=function(a,b,c,d){var e=a.getParameter(a.DEPTH_FUNC),f=a.getParameter(a.DEPTH_WRITEMASK);d||(a.enable(a.DEPTH_TEST),a.depthMask(!0),a.depthFunc(a.NOTEQUAL));if(wb(c)){var g=this.i[this.i.length-1];for(c=this.c.length-1;0<=c;--c){var h=this.c[c];var l=this.u[c];a.uniform4fv(this.v.B,l);xi(a,b,h,g);g=h}}else{var m=this.i.length-2;l=g=this.i[m+1];for(h=this.c.length-1;0<=h;--h){var n=this.u[h];a.uniform4fv(this.v.B,n);for(n=this.c[h];0<=m&&this.i[m]>=n;){var p=this.i[m];var q=this.f[m];q=w(q).toString();c[q]&&(g!==l&&(xi(a,b,g,l),a.clear(a.DEPTH_BUFFER_BIT)),l=p);m--;g=p}g!==l&&(xi(a,b,g,l),a.clear(a.DEPTH_BUFFER_BIT));g=l=n}}d||(a.disable(a.DEPTH_TEST),a.clear(a.DEPTH_BUFFER_BIT),a.depthMask(f),a.depthFunc(e))};k.ve=function(a,b,c,d,e){var f,g;var h=this.i.length-2;var l=this.i[h+1];for(f=this.c.length-1;0<=f;--f){var m=this.u[f];a.uniform4fv(this.v.B,m);for(g=this.c[f];0<=h&&this.i[h]>=g;){m=this.i[h];var n=this.f[h];var p=w(n).toString();if(void 0===c[p]&&n.V()&&(void 0===e||qb(e,n.V().G()))&&(a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),xi(a,b,m,l),l=d(n)))return l;h--;l=m}}};k.Ma=function(a,b){a=a?a.b:[0,0,0,0];a instanceof CanvasGradient||a instanceof CanvasPattern?a=yi:a=ed(a).map(function(a,b){return 3!=b?a/255:a})||yi;this.j.fillColor&&pa(a,this.j.fillColor)||(this.j.fillColor=a,this.j.s=!0,this.u.push(a));b?this.g.Ma(null,b):this.g.Ma(null,new wj({color:[0,0,0,0],lineWidth:0}))};function ck(){}ck.prototype.La=function(){};function dk(a,b,c){this.f=b;this.g=a;this.c=c;this.a={}}v(dk,ki);function ek(a,b){var c=[],d;for(d in a.a){var e=a.a[d],f;for(f in e)c.push(e[f].Eb(b))}return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function fk(a,b){for(var c in a.a){var d=a.a[c],e;for(e in d)d[e].Db(b)}}dk.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0";a=this.a[c];void 0===a&&(a={},this.a[c]=a);c=a[b];void 0===c&&(c=new gk[b](this.g,this.f),a[b]=c);return c};dk.prototype.i=function(){return wb(this.a)};dk.prototype.La=function(a,b,c,d,e,f,g,h){var l=Object.keys(this.a).map(Number);l.sort(ia);var m,n;var p=0;for(m=l.length;p<m;++p){var q=this.a[l[p].toString()];var r=0;for(n=ji.length;r<n;++r){var u=q[ji[r]];void 0!==u&&u.La(a,b,c,d,e,f,g,h,void 0,!1)}}};function hk(a,b,c,d,e,f,g,h,l,m,n){var p=ik,q=Object.keys(a.a).map(Number);q.sort(function(a,b){return b-a});var r,u;var x=0;for(r=q.length;x<r;++x){var B=a.a[q[x].toString()];for(u=ji.length-1;0<=u;--u){var E=B[ji[u]];if(void 0!==E&&(E=E.La(b,c,d,e,p,f,g,h,l,m,n)))return E}}}
dk.prototype.Ea=function(a,b,c,d,e,f,g,h,l,m){var n=b.b;n.bindFramebuffer(n.FRAMEBUFFER,Pi(b));var p;void 0!==this.c&&(p=Qa(Za(a),d*this.c));return hk(this,b,a,d,e,g,h,l,function(a){var b=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,b);if(0<b[3]&&(a=m(a)))return a},!0,p)};function jk(a,b,c,d,e,f,g,h){var l=c.b;l.bindFramebuffer(l.FRAMEBUFFER,Pi(c));return void 0!==hk(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);l.readPixels(0,0,1,1,l.RGBA,l.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var ik=[1,1],gk={Circle:Fi,Image:Ui,LineString:cj,Polygon:Mj,Text:ck};function kk(a,b,c,d,e,f,g){this.b=a;this.i=b;this.a=f;this.c=g;this.j=e;this.g=d;this.f=c;this.o=this.l=this.v=null}v(kk,Wh);k=kk.prototype;k.rd=function(a){this.Ma(a.Fa(),a.Ga());this.Ub(a.Y())};k.zb=function(a){switch(a.U()){case "Point":this.qc(a,null);break;case "LineString":this.mc(a,null);break;case "Polygon":this.rc(a,null);break;case "MultiPoint":this.oc(a,null);break;case "MultiLineString":this.nc(a,null);break;case "MultiPolygon":this.pc(a,null);break;case "GeometryCollection":this.ue(a,null);break;case "Circle":this.Zb(a,null)}};k.te=function(a,b){(a=(0,b.Za)(a))&&qb(this.a,a.G())&&(this.rd(b),this.zb(a))};k.ue=function(a){a=a.a;var b;var c=0;for(b=a.length;c<b;++c)this.zb(a[c])};k.qc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"Image");d.Ub(this.v);d.qc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.oc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"Image");d.Ub(this.v);d.oc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.mc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"LineString");d.Ma(null,this.o);d.mc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.nc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"LineString");d.Ma(null,this.o);d.nc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.rc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"Polygon");d.Ma(this.l,this.o);d.rc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.pc=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"Polygon");d.Ma(this.l,this.o);d.pc(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.Zb=function(a,b){var c=this.b,d=(new dk(1,this.a)).b(0,"Circle");d.Ma(this.l,this.o);d.Zb(a,b);d.Db(c);d.La(this.b,this.i,this.f,this.g,this.j,this.c,1,{},void 0,!1);d.Eb(c)()};k.Ub=function(a){this.v=a};k.Ma=function(a,b){this.l=a;this.o=b};function lk(){this.c=0;this.b={};this.i=this.a=null}k=lk.prototype;k.clear=function(){this.c=0;this.b={};this.i=this.a=null};k.forEach=function(a,b){for(var c=this.a;c;)a.call(b,c.Yc,c.uc,this),c=c.Nb};k.get=function(a){a=this.b[a];xa(!!a,15);if(a===this.i)return a.Yc;a===this.a?(this.a=this.a.Nb,this.a.vd=null):(a.Nb.vd=a.vd,a.vd.Nb=a.Nb);a.Nb=null;a.vd=this.i;this.i=this.i.Nb=a;return a.Yc};k.pop=function(){var a=this.a;delete this.b[a.uc];a.Nb&&(a.Nb.vd=null);this.a=a.Nb;this.a||(this.i=null);--this.c;return a.Yc};k.replace=function(a,b){this.get(a);this.b[a].Yc=b};k.set=function(a,b){xa(!(a in this.b),16);b={uc:a,Nb:null,vd:this.i,Yc:b};this.i?this.i.Nb=b:this.a=b;this.i=b;this.b[a]=b;++this.c};function mk(a,b){Mh.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.style.display="block";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.S=this.D=0;this.C=jd();this.l=!0;this.i=Ld(this.b,{antialias:!0,depth:!0,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.f=new Oi(this.b,this.i);y(this.b,"webglcontextlost",this.Yn,this);y(this.b,"webglcontextrestored",this.Zn,this);this.a=new lk;this.u=null;this.j=new Ke(function(a){var b=a[1];a=a[2];var c=b[0]-this.u[0],b=b[1]-this.u[1];return 65536*Math.log(a)+Math.sqrt(c*c+b*b)/a}.bind(this),function(a){return a[0].bb()});this.B=function(){if(this.j.b.length){Oe(this.j);var a=Le(this.j);nk(this,a[0],a[3],a[4])}return!1}.bind(this);this.g=0;ok(this)}v(mk,Mh);function nk(a,b,c,d){var e=a.i,f=b.bb();if(a.a.b.hasOwnProperty(f))a=a.a.get(f),e.bindTexture(3553,a.Ib),9729!=a.Ph&&(e.texParameteri(3553,10240,9729),a.Ph=9729),9729!=a.Rh&&(e.texParameteri(3553,10241,9729),a.Rh=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.C.canvas,l=a.C;a.D!==c[0]||a.S!==c[1]?(h.width=c[0],h.height=c[1],a.D=c[0],a.S=c[1]):l.clearRect(0,0,c[0],c[1]);l.drawImage(b.Y(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,6408,5121,b.Y());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Ib:g,Ph:9729,Rh:9729})}}function pk(a,b,c){var d=a.o;if(Rc(d,b)){a=a.f;var e=c.viewState;d.b(new Rh(b,new kk(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}k=mk.prototype;k.ka=function(){var a=this.i;a.isContextLost()||this.a.forEach(function(b){b&&a.deleteTexture(b.Ib)});Nc(this.f);Mh.prototype.ka.call(this)};k.xk=function(a,b){a=this.i;for(var c;1024<this.a.c-this.g;){if(c=this.a.a.Yc)a.deleteTexture(c.Ib);else if(+this.a.a.uc==b.index)break;else--this.g;this.a.pop()}};k.U=function(){return"webgl"};k.Yn=function(a){a.preventDefault();this.a.clear();this.g=0;a=this.c;for(var b in a)a[b].mg()};k.Zn=function(){ok(this);this.o.render()};function ok(a){a=a.i;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
k.Jg=function(a){var b=this.f,c=this.i;if(c.isContextLost())return!1;if(!a)return this.l&&(this.b.style.display="none",this.l=!1),!1;this.u=a.focus;this.a.set((-a.index).toString(),null);++this.g;pk(this,"precompose",a);var d=[],e=a.layerStatesArray;qa(e);var f=a.viewState.resolution,g;var h=0;for(g=e.length;h<g;++h){var l=e[h];if(xh(l,f)&&"ready"==l.yj){var m=Ph(this,l.layer);m.ng(a,l,b)&&d.push(l)}}e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);h=0;for(g=d.length;h<g;++h)l=d[h],m=Ph(this,l.layer),m.Gi(a,l,b);this.l||(this.b.style.display="",this.l=!0);Nh(a);1024<this.a.c-this.g&&a.postRenderFunctions.push(this.xk.bind(this));this.j.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);pk(this,"postcompose",a);Qh(this,a);a.postRenderFunctions.push(Oh)};k.Ea=function(a,b,c,d,e,f,g){if(this.i.isContextLost())return!1;var h=b.viewState,l=b.layerStatesArray,m;for(m=l.length-1;0<=m;--m){var n=l[m];var p=n.layer;if(xh(n,h.resolution)&&f.call(g,p)&&(n=Ph(this,p).Ea(a,b,c,d,e)))return n}};k.Ei=function(a,b,c,d,e){c=!1;if(this.i.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var l=g[h],m=l.layer;if(xh(l,f.resolution)&&d.call(e,m)&&(c=Ph(this,m).Ue(a,b)))return!0}return c};k.Di=function(a,b,c,d,e){if(this.i.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var l=g[h];var m=l.layer;if(xh(l,f.resolution)&&e.call(d,m)&&(l=Ph(this,m).lg(a,b,c,d)))return l}};var qk=["canvas","webgl"];function G(a){Tc.call(this);var b=rk(a);this.Cf=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Df=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.If=void 0!==a.pixelRatio?a.pixelRatio:Sd;this.yf=b.logos;this.pa=function(){this.j=void 0;this.Sp.call(this,Date.now())}.bind(this);this.Yb=Bh();this.Jf=Bh();this.ad=0;this.I=this.R=this.T=this.g=this.c=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Xd?" ol-touch":"");this.a.style.position="relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.C=document.createElement("DIV");this.C.className="ol-overlaycontainer";this.a.appendChild(this.C);this.D=document.createElement("DIV");this.D.className="ol-overlaycontainer-stopevent";for(var c="click dblclick mousedown touchstart MSPointerDown pointerdown mousewheel wheel".split(" "),d=0,e=c.length;d<e;++d)y(this.D,c[d],Pc);this.a.appendChild(this.D);this.Sa=new Fe(this,a.moveTolerance);for(var f in de)y(this.Sa,de[f],this.Ih,this);this.va=b.keyboardEventTarget;this.u=null;y(this.a,"wheel",this.ld,this);y(this.a,"mousewheel",this.ld,this);this.l=b.controls;this.o=b.interactions;this.v=b.overlays;this.rg={};this.B=new b.Up(this.a,this);this.na=null;this.xb=[];this.$a=new Pe(this.ql.bind(this),this.Wl.bind(this));this.fa={};y(this,Vc("layergroup"),this.El,this);y(this,Vc("view"),this.Xl,this);y(this,Vc("size"),this.Tl,this);y(this,Vc("target"),this.Vl,this);this.H(b.values);this.l.forEach(function(a){a.setMap(this)},this);y(this.l,"add",function(a){a.element.setMap(this)},this);y(this.l,"remove",function(a){a.element.setMap(null)},this);this.o.forEach(function(a){a.setMap(this)},this);y(this.o,"add",function(a){a.element.setMap(this)},this);y(this.o,"remove",function(a){a.element.setMap(null)},this);this.v.forEach(this.kh,this);y(this.v,"add",function(a){this.kh(a.element)},this);y(this.v,"remove",function(a){var b=a.element.g;void 0!==b&&delete this.rg[b.toString()];a.element.setMap(null)},this)}v(G,Tc);k=G.prototype;k.kk=function(a){this.l.push(a)};k.lk=function(a){this.o.push(a)};k.ih=function(a){this.Kc().qd().push(a)};k.jh=function(a){this.v.push(a)};k.kh=function(a){var b=a.g;void 0!==b&&(this.rg[b.toString()]=a);a.setMap(this)};k.ka=function(){Nc(this.Sa);Nc(this.B);Kc(this.a,"wheel",this.ld,this);Kc(this.a,"mousewheel",this.ld,this);this.f&&(window.removeEventListener("resize",this.f,!1),this.f=void 0);this.j&&(cancelAnimationFrame(this.j),this.j=void 0);this.Le(null);Tc.prototype.ka.call(this)};k.we=function(a,b,c){if(this.c)return a=this.Wa(a),c=c?c:{},this.B.Ea(a,this.c,void 0!==c.hitTolerance?c.hitTolerance*this.c.pixelRatio:0,b,null,c.layerFilter?c.layerFilter:mf,null)};k.Im=function(a,b,c,d,e){if(this.c)return this.B.Di(a,this.c,b,void 0!==c?c:null,d?d:mf,void 0!==e?e:null)};k.Yl=function(a,b){if(!this.c)return!1;a=this.Wa(a);b=b?b:{};return this.B.Ei(a,this.c,void 0!==b.hitTolerance?b.hitTolerance*this.c.pixelRatio:0,b.layerFilter?b.layerFilter:mf,null)};k.Tf=function(a){return this.Wa(this.xe(a))};k.xe=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};k.ag=function(){return this.get("target")};k.jd=function(){var a=this.ag();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};k.Wa=function(a){var b=this.c;return b?Gh(b.pixelToCoordinateTransform,a.slice()):null};k.Lk=function(){return this.l};k.fl=function(){return this.v};k.el=function(a){a=this.rg[a.toString()];return void 0!==a?a:null};k.Sk=function(){return this.o};k.Kc=function(){return this.get("layergroup")};k.Xh=function(){return this.Kc().qd()};k.Ja=function(a){var b=this.c;return b?Gh(b.coordinateToPixelTransform,a.slice(0,2)):null};k.Ob=function(){return this.get("size")};k.Z=function(){return this.get("view")};k.sl=function(){return this.a};k.ql=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.bb()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};k.ld=function(a,b){a=new Jd(b||a.type,this,a);this.Ih(a)};k.Ih=function(a){if(this.c){this.na=a.coordinate;a.frameState=this.c;var b=this.o.a,c;if(!1!==this.b(a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.c()&&!d.handleEvent(a))break}}};k.Rl=function(){var a=this.c,b=this.$a;if(b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.Cf?8:0,d=2);e[1]&&(c=this.Df?8:0,d=2)}b.j<c&&(Oe(b),Qe(b,c,d))}b=this.xb;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};k.Tl=function(){this.render()};k.Vl=function(){var a;this.ag()&&(a=this.jd());if(this.u){for(var b=0,c=this.u.length;b<c;++b)Ec(this.u[b]);this.u=null}a?(a.appendChild(this.a),a=this.va?this.va:a,this.u=[y(a,"keydown",this.ld,this),y(a,"keypress",this.ld,this)],this.f||(this.f=this.Ad.bind(this),window.addEventListener("resize",this.f,!1))):(ld(this.a),this.f&&(window.removeEventListener("resize",this.f,!1),this.f=void 0));this.Ad()};k.Wl=function(){this.render()};k.Lh=function(){this.render()};k.Xl=function(){this.T&&(Ec(this.T),this.T=null);this.R&&(Ec(this.R),this.R=null);var a=this.Z();a&&(this.a.setAttribute("data-view",w(a)),this.T=y(a,"propertychange",this.Lh,this),this.R=y(a,"change",this.Lh,this));this.render()};k.El=function(){this.I&&(this.I.forEach(Ec),this.I=null);var a=this.Kc();a&&(this.I=[y(a,"propertychange",this.render,this),y(a,"change",this.render,this)]);this.render()};k.Tp=function(){this.j&&cancelAnimationFrame(this.j);this.pa()};k.render=function(){void 0===this.j&&(this.j=requestAnimationFrame(this.pa))};k.Mp=function(a){return this.l.remove(a)};k.Np=function(a){return this.o.remove(a)};k.Pp=function(a){return this.Kc().qd().remove(a)};k.Qp=function(a){return this.v.remove(a)};k.Sp=function(a){var b,c=this.Ob(),d=this.Z(),e=Oa(),f=this.c,g=null;if(void 0!==c&&0<c[0]&&0<c[1]&&d&&jg(d)){var g=dg(d,this.c?this.c.viewHints:void 0),h=this.Kc().Yf(),l={};var m=0;for(b=h.length;m<b;++m)l[w(h[m].layer)]=h[m];m=d.getState();g={animate:!1,attributions:{},coordinateToPixelTransform:this.Yb,extent:e,focus:this.na?this.na:m.center,index:this.ad++,layerStates:l,layerStatesArray:h,logos:tb({},this.yf),pixelRatio:this.If,pixelToCoordinateTransform:this.Jf,postRenderFunctions:[],size:c,skippedFeatureUids:this.fa,tileQueue:this.$a,time:a,usedTiles:{},viewState:m,viewHints:g,wantedTiles:{}}}g&&(g.extent=ob(m.center,m.resolution,m.rotation,g.size,e));this.c=g;this.B.Jg(g);g&&(g.animate&&this.render(),Array.prototype.push.apply(this.xb,g.postRenderFunctions),!f||this.g&&(kb(this.g)||bb(g.extent,this.g))||(this.b(new Id("movestart",this,f)),this.g=Ya(this.g)),!this.g||g.viewHints[0]||g.viewHints[1]||bb(g.extent,this.g)||(this.b(new Id("moveend",this,g)),Ra(g.extent,this.g)));this.b(new Id("postrender",this,g));setTimeout(this.Rl.bind(this),0)};k.qj=function(a){this.set("layergroup",a)};k.Qg=function(a){this.set("size",a)};k.Le=function(a){this.set("target",a)};k.iq=function(a){this.set("view",a)};k.xj=function(a){a=w(a).toString();this.fa[a]=!0;this.render()};k.Ad=function(){var a=this.jd();if(a){var b=getComputedStyle(a);this.Qg([a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.Qg(void 0)};k.Cj=function(a){a=w(a).toString();delete this.fa[a];this.render()};function rk(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="https://openlayers.org/";else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[w(e).toString()]=e:e&&(xa("string"==typeof e.href,44),xa("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof uh?a.layers:new uh({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new F;var e=Mh,f;void 0!==a.renderer?(Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:xa(!1,46),0<=f.indexOf("dom")&&(f=f.concat(qk))):f=qk;var g;var h=0;for(g=f.length;h<g;++h){var l=f[h];if("canvas"==l){if(Ud){e=hi;break}}else if("webgl"==l&&Md){e=mk;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new Yc(a.controls.slice()):(xa(a.controls instanceof Yc,47),f=a.controls):f=xd();void 0!==a.interactions?Array.isArray(a.interactions)?h=new Yc(a.interactions.slice()):(xa(a.interactions instanceof Yc,48),h=a.interactions):h=qh();void 0!==a.overlays?Array.isArray(a.overlays)?a=new Yc(a.overlays.slice()):(xa(a.overlays instanceof Yc,49),a=a.overlays):a=new Yc;return{controls:f,interactions:h,keyboardEventTarget:b,logos:d,overlays:a,Up:e,values:c}};function sk(a){Tc.call(this);this.g=a.id;this.l=void 0!==a.insertFirst?a.insertFirst:!0;this.v=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container ol-selectable";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.j=a.autoPanAnimation||{};this.o=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={re:"",Ie:"",nf:"",vf:"",visible:!0};this.f=null;y(this,Vc(tk),this.zl,this);y(this,Vc(uk),this.Jl,this);y(this,Vc(vk),this.Nl,this);y(this,Vc(wk),this.Pl,this);y(this,Vc(xk),this.Ql,this);void 0!==a.element&&this.lj(a.element);this.rj(void 0!==a.offset?a.offset:[0,0]);this.uj(void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ne(a.position)}v(sk,Tc);k=sk.prototype;k.Rd=function(){return this.get(tk)};k.Jm=function(){return this.g};k.Me=function(){return this.get(uk)};k.Dh=function(){return this.get(vk)};k.Yh=function(){return this.get(wk)};k.Eh=function(){return this.get(xk)};k.zl=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.Rd())&&this.c.appendChild(a)};k.Jl=function(){this.f&&(ld(this.c),Ec(this.f),this.f=null);var a=this.Me();a&&(this.f=y(a,"postrender",this.render,this),yk(this),a=this.v?a.D:a.C,this.l?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};k.render=function(){yk(this)};k.Nl=function(){yk(this)};k.Pl=function(){yk(this);if(this.get(wk)&&this.autoPan){var a=this.Me();if(a&&a.jd()){var b=zk(a.jd(),a.Ob()),c=this.Rd(),d=c.offsetWidth,e=getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=zk(c,[d,e]),c=this.o;Va(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.Z().wa(),c=a.Ja(c),b=[c[0]+b[0],c[1]+b[1]],a.Z().animate({center:a.Wa(b),duration:this.j.duration,easing:this.j.easing}))}}};k.Ql=function(){yk(this)};k.lj=function(a){this.set(tk,a)};k.setMap=function(a){this.set(uk,a)};k.rj=function(a){this.set(vk,a)};k.Ne=function(a){this.set(wk,a)};function zk(a,b){var c=a.getBoundingClientRect();a=c.left+window.pageXOffset;c=c.top+window.pageYOffset;return[a,c,a+b[0],c+b[1]]}k.uj=function(a){this.set(xk,a)};function Ak(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)}
function yk(a){var b=a.Me(),c=a.Yh();if(b&&b.c&&c){var c=b.Ja(c),d=b.Ob(),b=a.c.style,e=a.Dh(),f=a.Eh();Ak(a,!0);var g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.Ie&&(a.a.Ie=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.nf!=g&&(a.a.nf=b.right=g);else{""!==a.a.nf&&(a.a.nf=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.Ie!=g&&(a.a.Ie=b.left=g)}if("bottom-left"==f||"bottom-center"==f||"bottom-right"==f)""!==a.a.vf&&(a.a.vf=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.re!=c&&(a.a.re=b.bottom=c);else{""!==a.a.re&&(a.a.re=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.vf!=c&&(a.a.vf=b.top=c)}}else Ak(a,!1)}var tk="element",uk="map",vk="offset",wk="position",xk="positioning";function Bk(a){function b(a){a=h.Tf(a);l.a.Z().ob(a);window.removeEventListener("mousemove",c);window.removeEventListener("mouseup",b)}function c(a){a=h.Tf({clientX:a.clientX-n.offsetWidth/2,clientY:a.clientY+n.offsetHeight/2});m.Ne(a)}a=a?a:{};this.j=void 0!==a.collapsed?a.collapsed:!0;this.o=void 0!==a.collapsible?a.collapsible:!0;this.o||(this.j=!1);var d=void 0!==a.className?a.className:"ol-overviewmap",e=void 0!==a.tipLabel?a.tipLabel:"Overview map",f=void 0!==a.collapseLabel?a.collapseLabel:"\u00ab";"string"===typeof f?(this.u=document.createElement("span"),this.u.textContent=f):this.u=f;f=void 0!==a.label?a.label:"\u00bb";"string"===typeof f?(this.D=document.createElement("span"),this.D.textContent=f):this.D=f;var g=this.o&&!this.j?this.u:this.D,f=document.createElement("button");f.setAttribute("type","button");f.title=e;f.appendChild(g);y(f,"click",this.an,this);this.C=document.createElement("DIV");this.C.className="ol-overviewmap-map";var h=this.c=new G({controls:new Yc,interactions:new Yc,view:a.view});a.layers&&a.layers.forEach(function(a){h.ih(a)},this);e=document.createElement("DIV");e.className="ol-overviewmap-box";e.style.boxSizing="border-box";this.l=new sk({position:[0,0],positioning:"bottom-left",element:e});this.c.jh(this.l);e=document.createElement("div");e.className=d+" ol-unselectable ol-control"+(this.j&&this.o?" ol-collapsed":"")+(this.o?"":" ol-uncollapsible");e.appendChild(this.C);e.appendChild(f);md.call(this,{element:e,render:a.render?a.render:Ck,target:a.target});var l=this,m=this.l,n=this.l.Rd();n.addEventListener("mousedown",function(){window.addEventListener("mousemove",c);window.addEventListener("mouseup",b)})}v(Bk,md);k=Bk.prototype;k.setMap=function(a){var b=this.a;a!==b&&(b&&((b=b.Z())&&Kc(b,Vc("rotation"),this.Ge,this),this.c.Le(null)),md.prototype.setMap.call(this,a),a&&(this.c.Le(this.C),this.v.push(y(a,"propertychange",this.Kl,this)),this.c.Xh().dc()||this.c.qj(a.Kc()),a=a.Z()))&&(y(a,Vc("rotation"),this.Ge,this),jg(a)&&(this.c.Ad(),Dk(this)))};k.Kl=function(a){"view"===a.key&&((a=a.oldValue)&&Kc(a,Vc("rotation"),this.Ge,this),a=this.a.Z(),y(a,Vc("rotation"),this.Ge,this))};k.Ge=function(){this.c.Z().Oe(this.a.Z().Qa())};function Ck(){var a=this.a,b=this.c;if(a.c&&b.c){var c=a.Ob(),a=a.Z().dd(c),d=b.Ob(),c=b.Z().dd(d),e=b.Ja(ib(a)),f=b.Ja(gb(a)),b=Math.abs(e[0]-f[0]),e=Math.abs(e[1]-f[1]),f=d[0],d=d[1];b<.1*f||e<.1*d||b>.75*f||e>.75*d?Dk(this):Va(c,a)||(a=this.c,c=this.a.Z(),a.Z().ob(c.wa()))}Ek(this)}
function Dk(a){var b=a.a;a=a.c;var c=b.Ob(),b=b.Z().dd(c);a=a.Z();rb(b,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2)));a.Qf(b)}function Ek(a){var b=a.a,c=a.c;if(b.c&&c.c){var d=b.Ob(),e=b.Z(),f=c.Z(),c=e.Qa(),b=a.l,g=a.l.Rd(),h=e.dd(d),d=f.Pa(),e=eb(h),f=hb(h);if(a=a.a.Z().wa()){var l=[e[0]-a[0],e[1]-a[1]];ef(l,c);Ze(l,a)}b.Ne(l);g&&(g.style.width=Math.abs((e[0]-f[0])/d)+"px",g.style.height=Math.abs((f[1]-e[1])/d)+"px")}}k.an=function(a){a.preventDefault();Fk(this)};function Fk(a){a.element.classList.toggle("ol-collapsed");a.j?kd(a.u,a.D):kd(a.D,a.u);a.j=!a.j;var b=a.c;a.j||b.c||(b.Ad(),Dk(a),Jc(b,"postrender",function(){Ek(this)},a))}k.$m=function(){return this.o};k.cn=function(a){this.o!==a&&(this.o=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.j&&Fk(this))};k.bn=function(a){this.o&&this.j!==a&&Fk(this)};k.Zm=function(){return this.j};k.gl=function(){return this.c};function Gk(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-scale-line";this.o=document.createElement("DIV");this.o.className=b+"-inner";this.c=document.createElement("DIV");this.c.className=b+" ol-unselectable";this.c.appendChild(this.o);this.u=null;this.l=void 0!==a.minWidth?a.minWidth:64;this.j=!1;this.B=void 0;this.D="";md.call(this,{element:this.c,render:a.render?a.render:Hk,target:a.target});y(this,Vc(Ik),this.T,this);this.I(a.units||"metric")}v(Gk,md);var Jk=[1,2,5];Gk.prototype.C=function(){return this.get(Ik)};function Hk(a){(a=a.frameState)?this.u=a.viewState:this.u=null;Kk(this)}Gk.prototype.T=function(){Kk(this)};Gk.prototype.I=function(a){this.set(Ik,a)};function Kk(a){var b=a.u;if(b){var c=b.projection,d=c.sc(),b=Sb(c,b.resolution,b.center)*d,d=a.l*b,c="",e=a.C();"degrees"==e?(c=zb.degrees,b/=c,d<c/60?(c="\u2033",b*=3600):d<c?(c="\u2032",b*=60):c="\u00b0"):"imperial"==e?.9144>d?(c="in",b/=.0254):1609.344>d?(c="ft",b/=.3048):(c="mi",b/=1609.344):"nautical"==e?(b/=1852,c="nm"):"metric"==e?.001>d?(c="\u03bcm",b*=1E6):1>d?(c="mm",b*=1E3):1E3>d?c="m":(c="km",b/=1E3):"us"==e?.9144>d?(c="in",b*=39.37):1609.344>d?(c="ft",b/=.30480061):(c="mi",b/=1609.3472):xa(!1,33);for(var e=3*Math.floor(Math.log(a.l*b)/Math.log(10)),f;;){f=Jk[(e%3+3)%3]*Math.pow(10,Math.floor(e/3));d=Math.round(f/b);if(isNaN(d)){a.c.style.display="none";a.j=!1;return}if(d>=a.l)break;++e}b=f+" "+c;a.D!=b&&(a.o.innerHTML=b,a.D=b);a.B!=d&&(a.o.style.width=d+"px",a.B=d);a.j||(a.c.style.display="",a.j=!0)}else a.j&&(a.c.style.display="none",a.j=!1)}var Ik="units";function Lk(a){a=a?a:{};this.c=void 0;this.j=Mk;this.D=this.l=0;this.I=null;this.na=!1;this.T=void 0!==a.duration?a.duration:200;var b=void 0!==a.className?a.className:"ol-zoomslider",c=document.createElement("button");c.setAttribute("type","button");c.className=b+"-thumb ol-unselectable";var d=document.createElement("div");d.className=b+" ol-unselectable ol-control";d.appendChild(c);this.o=new Ae(d);y(this.o,"pointerdown",this.yl,this);y(this.o,"pointermove",this.wl,this);y(this.o,"pointerup",this.xl,this);y(d,"click",this.vl,this);y(c,"click",Pc);md.call(this,{element:d,render:a.render?a.render:Nk})}v(Lk,md);Lk.prototype.ka=function(){Nc(this.o);md.prototype.ka.call(this)};var Mk=0;k=Lk.prototype;k.setMap=function(a){md.prototype.setMap.call(this,a);a&&a.render()};function Nk(a){if(a.frameState){if(!this.na){var b=this.element,c=b.offsetWidth,d=b.offsetHeight,e=b.firstElementChild,f=getComputedStyle(e),b=e.offsetWidth+parseFloat(f.marginRight)+parseFloat(f.marginLeft),e=e.offsetHeight+parseFloat(f.marginTop)+parseFloat(f.marginBottom);this.I=[b,e];c>d?(this.j=1,this.D=c-b):(this.j=Mk,this.l=d-e);this.na=!0}a=a.frameState.viewState.resolution;a!==this.c&&(this.c=a,Ok(this,a))}}
k.vl=function(a){var b=this.a.Z();a=Pk(this,Ca(1===this.j?(a.offsetX-this.I[0]/2)/this.D:(a.offsetY-this.I[1]/2)/this.l,0,1));b.animate({resolution:b.constrainResolution(a),duration:this.T,easing:rd})};k.yl=function(a){this.u||a.b.target!==this.element.firstElementChild||(cg(this.a.Z(),1,1),this.C=a.clientX,this.B=a.clientY,this.u=!0)};k.wl=function(a){if(this.u){var b=this.element.firstElementChild;this.c=Pk(this,Ca(1===this.j?(a.clientX-this.C+parseInt(b.style.left,10))/this.D:(a.clientY-this.B+parseInt(b.style.top,10))/this.l,0,1));this.a.Z().Vc(this.c);Ok(this,this.c);this.C=a.clientX;this.B=a.clientY}};k.xl=function(){if(this.u){var a=this.a.Z();cg(a,1,-1);a.animate({resolution:a.constrainResolution(this.c),duration:this.T,easing:rd});this.u=!1;this.B=this.C=void 0}};function Ok(a,b){b=1-ig(a.a.Z())(b);var c=a.element.firstElementChild;1==a.j?c.style.left=a.D*b+"px":c.style.top=a.l*b+"px"}function Pk(a,b){return hg(a.a.Z())(1-b)};function Qk(a){a=a?a:{};this.c=a.extent?a.extent:null;var b=void 0!==a.className?a.className:"ol-zoom-extent",c=void 0!==a.label?a.label:"E",d=void 0!==a.tipLabel?a.tipLabel:"Fit to extent",e=document.createElement("button");e.setAttribute("type","button");e.title=d;e.appendChild("string"===typeof c?document.createTextNode(c):c);y(e,"click",this.j,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(e);md.call(this,{element:c,target:a.target})}v(Qk,md);Qk.prototype.j=function(a){a.preventDefault();a=this.a.Z();var b=this.c?this.c:a.v.G();a.Qf(b)};function Rk(a){Tc.call(this);a=a?a:{};this.a=null;y(this,Vc(Sk),this.vm,this);this.gg(void 0!==a.tracking?a.tracking:!1)}v(Rk,Tc);k=Rk.prototype;k.ka=function(){this.gg(!1);Tc.prototype.ka.call(this)};k.ap=function(a){if(null!==a.alpha){var b=Ha(a.alpha);this.set(Tk,b);"boolean"===typeof a.absolute&&a.absolute?this.set(Uk,b):"number"===typeof a.webkitCompassHeading&&-1!=a.webkitCompassAccuracy&&this.set(Uk,Ha(a.webkitCompassHeading))}null!==a.beta&&this.set(Vk,Ha(a.beta));null!==a.gamma&&this.set(Wk,Ha(a.gamma));this.s()};k.Fk=function(){return this.get(Tk)};k.Ik=function(){return this.get(Vk)};k.Ok=function(){return this.get(Wk)};k.um=function(){return this.get(Uk)};k.Th=function(){return this.get(Sk)};k.vm=function(){if(Vd){var a=this.Th();a&&!this.a?this.a=y(window,"deviceorientation",this.ap,this):a||null===this.a||(Ec(this.a),this.a=null)}};k.gg=function(a){this.set(Sk,a)};var Tk="alpha",Vk="beta",Wk="gamma",Uk="heading",Sk="tracking";function Xk(a){this.f=a.opacity;this.l=a.rotateWithView;this.g=a.rotation;this.a=a.scale;this.v=a.snapToPixel}k=Xk.prototype;k.Ze=function(){return this.f};k.$e=function(){return this.l};k.af=function(){return this.g};k.bf=function(){return this.a};k.Ae=function(){return this.v};k.td=function(a){this.f=a};k.cf=function(a){this.g=a};k.ud=function(a){this.a=a};function Yk(a){this.D=this.u=this.c=null;this.Va=void 0!==a.fill?a.fill:null;this.oa=[0,0];this.o=a.points;this.b=void 0!==a.radius?a.radius:a.radius1;this.i=a.radius2;this.j=void 0!==a.angle?a.angle:0;this.Ya=void 0!==a.stroke?a.stroke:null;this.B=this.ra=this.C=null;this.S=a.atlasManager;Zk(this,this.S);Xk.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0})}
v(Yk,Xk);k=Yk.prototype;k.clone=function(){var a=new Yk({fill:this.Fa()?this.Fa().clone():void 0,points:this.o,radius:this.b,radius2:this.i,angle:this.j,snapToPixel:this.v,stroke:this.Ga()?this.Ga().clone():void 0,rotation:this.g,rotateWithView:this.l,atlasManager:this.S});a.td(this.f);a.ud(this.a);return a};k.Hc=function(){return this.C};k.Pi=function(){return this.j};k.Fa=function(){return this.Va};k.qg=function(){return this.D};k.Y=function(){return this.u};k.ye=function(){return this.B};k.Ye=function(){return 2};k.Oc=function(){return this.oa};k.Qi=function(){return this.o};k.Ri=function(){return this.b};k.Fh=function(){return this.i};k.ic=function(){return this.ra};k.Ga=function(){return this.Ya};k.Nh=function(){};k.load=function(){};k.Bj=function(){};function Zk(a,b){var c="",d="",e=0,f=null,g=0;if(a.Ya){var h=a.Ya.a;null===h&&(h=Uh);h=id(h);g=a.Ya.c;void 0===g&&(g=1);f=a.Ya.i;Td||(f=null);d=a.Ya.j;void 0===d&&(d="round");c=a.Ya.f;void 0===c&&(c="round");e=a.Ya.o;void 0===e&&(e=10)}var l=2*(a.b+g)+1,c={strokeStyle:h,zj:g,size:l,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var m=jd(l,l);a.u=m.canvas;b=l=a.u.width;a.rh(c,m,0,0);a.Va?a.D=a.u:(m=jd(c.size,c.size),a.D=m.canvas,a.qh(c,m,0,0))}else l=Math.round(l),(d=!a.Va)&&(m=a.qh.bind(a,c)),a.Ya?(e=a.Ya,void 0===e.b&&(e.b="s",e.b=e.a?"string"===typeof e.a?e.b+e.a:e.b+w(e.a).toString():e.b+"-",e.b+=","+(void 0!==e.f?e.f.toString():"-")+","+(e.i?e.i.toString():"-")+","+(void 0!==e.g?e.g:"-")+","+(void 0!==e.j?e.j:"-")+","+(void 0!==e.o?e.o.toString():"-")+","+(void 0!==e.c?e.c.toString():"-")),e=e.b):e="-",a.Va?(f=a.Va,void 0===f.a&&(f.a=f.b instanceof CanvasPattern||f.b instanceof CanvasGradient?w(f.b).toString():"f"+(f.b?gd(f.b):"-")),f=f.a):f="-",a.c&&e==a.c[1]&&f==a.c[2]&&a.b==a.c[3]&&a.i==a.c[4]&&a.j==a.c[5]&&a.o==a.c[6]||(a.c=["r"+e+f+(void 0!==a.b?a.b.toString():"-")+(void 0!==a.i?a.i.toString():"-")+(void 0!==a.j?a.j.toString():"-")+(void 0!==a.o?a.o.toString():"-"),e,f,a.b,a.i,a.j,a.o]),m=b.add(a.c[0],l,l,a.rh.bind(a,c),m),a.u=m.image,a.oa=[m.offsetX,m.offsetY],b=m.image.width,a.D=d?m.Zl:a.u;a.C=[l/2,l/2];a.ra=[l,l];a.B=[b,b]}
k.rh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();var e=this.o;if(Infinity===e)b.arc(a.size/2,a.size/2,this.b,0,2*Math.PI,!0);else{var f=void 0!==this.i?this.i:this.b;f!==this.b&&(e*=2);for(c=0;c<=e;c++){d=2*c*Math.PI/e-Math.PI/2+this.j;var g=c%2?f:this.b;b.lineTo(a.size/2+g*Math.cos(d),a.size/2+g*Math.sin(d))}}this.Va&&(c=this.Va.b,null===c&&(c=Sh),b.fillStyle=id(c),b.fill());this.Ya&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.zj,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};k.qh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();c=this.o;if(Infinity===c)b.arc(a.size/2,a.size/2,this.b,0,2*Math.PI,!0);else{d=void 0!==this.i?this.i:this.b;d!==this.b&&(c*=2);var e;for(e=0;e<=c;e++){var f=2*e*Math.PI/c-Math.PI/2+this.j;var g=e%2?d:this.b;b.lineTo(a.size/2+g*Math.cos(f),a.size/2+g*Math.sin(f))}}b.fillStyle=Sh;b.fill();this.Ya&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.zj,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function $k(a){a=a||{};Yk.call(this,{points:Infinity,fill:a.fill,radius:a.radius,snapToPixel:a.snapToPixel,stroke:a.stroke,atlasManager:a.atlasManager})}v($k,Yk);$k.prototype.clone=function(){var a=new $k({fill:this.Fa()?this.Fa().clone():void 0,stroke:this.Ga()?this.Ga().clone():void 0,radius:this.b,snapToPixel:this.v,atlasManager:this.S});a.td(this.f);a.ud(this.a);return a};$k.prototype.Uc=function(a){this.b=a;Zk(this,this.S)};function al(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}al.prototype.clone=function(){var a=this.b;return new al({color:a&&a.slice?a.slice():a||void 0})};al.prototype.i=function(){return this.b};al.prototype.c=function(a){this.b=a;this.a=void 0};function bl(a){a=a||{};this.Gc=null;this.Za=cl;void 0!==a.geometry&&this.Ra(a.geometry);this.Va=void 0!==a.fill?a.fill:null;this.M=void 0!==a.image?a.image:null;this.Ya=void 0!==a.stroke?a.stroke:null;this.Ia=void 0!==a.text?a.text:null;this.Fj=a.zIndex}k=bl.prototype;k.clone=function(){var a=this.V();a&&a.clone&&(a=a.clone());return new bl({geometry:a,fill:this.Fa()?this.Fa().clone():void 0,image:this.Y()?this.Y().clone():void 0,stroke:this.Ga()?this.Ga().clone():void 0,text:this.Na()?this.Na().clone():void 0,zIndex:this.Ba()})};k.V=function(){return this.Gc};k.Pk=function(){return this.Za};k.Fa=function(){return this.Va};k.pf=function(a){this.Va=a};k.Y=function(){return this.M};k.Og=function(a){this.M=a};k.Ga=function(){return this.Ya};k.qf=function(a){this.Ya=a};k.Na=function(){return this.Ia};k.xd=function(a){this.Ia=a};k.Ba=function(){return this.Fj};k.Ra=function(a){"function"===typeof a?this.Za=a:"string"===typeof a?this.Za=function(b){return b.get(a)}:a?a&&(this.Za=function(){return a}):this.Za=cl;this.Gc=a};k.Vb=function(a){this.Fj=a};function dl(a){if("function"!==typeof a){if(Array.isArray(a))var b=a;else xa(a instanceof bl,41),b=[a];a=function(){return b}}return a}var el=null;function fl(){if(!el){var a=new al({color:"rgba(255,255,255,0.4)"}),b=new wj({color:"#3399CC",width:1.25});el=[new bl({image:new $k({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return el}
function gl(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new bl({fill:new al({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new bl({stroke:new wj({color:b,width:5})}),new bl({stroke:new wj({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new bl({image:new $k({radius:6,fill:new al({color:c}),stroke:new wj({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,a.Point);return a}function cl(a){return a.V()};function H(a){Tc.call(this);this.a=void 0;this.c="geometry";this.g=null;this.j=void 0;this.f=null;y(this,Vc(this.c),this.Ee,this);void 0!==a&&(a instanceof of||!a?this.Ra(a):this.H(a))}v(H,Tc);k=H.prototype;k.clone=function(){var a=new H(this.N());a.Tc(this.c);var b=this.V();b&&a.Ra(b.clone());(b=this.g)&&a.hg(b);return a};k.V=function(){return this.get(this.c)};k.wm=function(){return this.a};k.Qk=function(){return this.c};k.xm=function(){return this.g};k.Lc=function(){return this.j};k.Al=function(){this.s()};k.Ee=function(){this.f&&(Ec(this.f),this.f=null);var a=this.V();a&&(this.f=y(a,"change",this.Al,this));this.s()};k.Ra=function(a){this.set(this.c,a)};k.hg=function(a){this.j=(this.g=a)?hl(a):void 0;this.s()};k.jc=function(a){this.a=a;this.s()};k.Tc=function(a){Kc(this,Vc(this.c),this.Ee,this);this.c=a;y(this,Vc(this.c),this.Ee,this);this.Ee()};function hl(a){var b;if("function"===typeof a)2==a.length?b=function(b){return a(this,b)}:b=a;else{if(Array.isArray(a))var c=a;else xa(a instanceof bl,41),c=[a];b=function(){return c}}return b};var il=document.implementation.createDocument("","",null);function jl(a,b){return il.createElementNS(a,b)}function kl(a,b){return ll(a,b,[]).join("")}function ll(a,b,c){if(a.nodeType==Node.CDATA_SECTION_NODE||a.nodeType==Node.TEXT_NODE)b?c.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):c.push(a.nodeValue);else for(a=a.firstChild;a;a=a.nextSibling)ll(a,b,c);return c}function ml(a){return a instanceof Document}function nl(a){return a instanceof Node}
function pl(a){return(new DOMParser).parseFromString(a,"application/xml")}function ql(a,b){return function(c,d){c=a.call(b,c,d);void 0!==c&&la(d[d.length-1],c)}}function rl(a,b){return function(c,d){c=a.call(void 0!==b?b:this,c,d);void 0!==c&&d[d.length-1].push(c)}}function sl(a,b){return function(c,d){c=a.call(void 0!==b?b:this,c,d);void 0!==c&&(d[d.length-1]=c)}}
function tl(a){return function(b,c){var d=a.call(this,b,c);if(void 0!==d){c=c[c.length-1];b=b.localName;var e;b in c?e=c[b]:e=c[b]=[];e.push(d)}}}function I(a,b){return function(c,d){var e=a.call(this,c,d);void 0!==e&&(d[d.length-1][void 0!==b?b:c.localName]=e)}}function J(a,b){return function(c,d,e){a.call(void 0!==b?b:this,c,d,e);e[e.length-1].node.appendChild(c)}}
function vl(a){var b,c;return function(d,e,f){if(!b){b={};var g={};g[d.localName]=a;b[d.namespaceURI]=g;c=wl(d.localName)}xl(b,c,e,f)}}function wl(a,b){return function(c,d,e){c=d[d.length-1].node;d=a;void 0===d&&(d=e);e=b;void 0===b&&(e=c.namespaceURI);return jl(e,d)}}var yl=wl();function zl(a,b){for(var c=b.length,d=Array(c),e=0;e<c;++e)d[e]=a[b[e]];return d}function K(a,b,c){c=void 0!==c?c:{};var d;var e=0;for(d=a.length;e<d;++e)c[a[e]]=b;return c}
function Al(a,b,c,d){for(b=b.firstElementChild;b;b=b.nextElementSibling){var e=a[b.namespaceURI];void 0!==e&&(e=e[b.localName])&&e.call(d,b,c)}}function N(a,b,c,d,e){d.push(a);Al(b,c,d,e);return d.pop()}function xl(a,b,c,d,e,f){for(var g=(void 0!==e?e:c).length,h,l,m=0;m<g;++m)h=c[m],void 0!==h&&(l=b.call(f,h,d,void 0!==e?e[m]:void 0),void 0!==l&&a[l.namespaceURI][l.localName].call(f,l,h,d))}function Bl(a,b,c,d,e,f,g){e.push(a);xl(b,c,d,e,f,g);e.pop()};function Cl(a,b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET","function"===typeof a?a(e,f,g):a,!0);"arraybuffer"==b.U()&&(h.responseType="arraybuffer");h.onload=function(){if(!h.status||200<=h.status&&300>h.status){var a=b.U();if("json"==a||"text"==a)var e=h.responseText;else"xml"==a?(e=h.responseXML)||(e=pl(h.responseText)):"arraybuffer"==a&&(e=h.response);e?c.call(this,b.Oa(e,{featureProjection:g}),b.kb(e)):d.call(this)}else d.call(this)}.bind(this);h.onerror=function(){d.call(this)}.bind(this);h.send()}}function Dl(a,b){return Cl(a,b,function(a){this.cd(a)},ua)};function El(){this.f=this.defaultDataProjection=null}function Fl(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.kb(b),featureProjection:c.featureProjection});return Gl(a,d)}function Gl(a,b){return tb({dataProjection:a.defaultDataProjection,featureProjection:a.f},b)}
function Hl(a,b,c){var d=c?Tb(c.featureProjection):null,e=c?Tb(c.dataProjection):null,f;d&&e&&!dc(d,e)?a instanceof of?f=(b?a.clone():a).tb(b?d:e,b?e:d):f=hc(a,e,d):f=a;if(b&&c&&void 0!==c.decimals){var g=Math.pow(10,c.decimals);f===a&&(f=f.clone());f.Dc(function(a){for(var b=0,c=a.length;b<c;++b)a[b]=Math.round(a[b]*g)/g;return a})}return f};function Il(){El.call(this)}v(Il,El);function Jl(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}k=Il.prototype;k.U=function(){return"json"};k.Tb=function(a,b){return this.Rc(Jl(a),Fl(this,a,b))};k.Oa=function(a,b){return this.yg(Jl(a),Fl(this,a,b))};k.Sc=function(a,b){return this.Cg(Jl(a),Fl(this,a,b))};k.kb=function(a){return this.Fg(Jl(a))};k.Bd=function(a,b){return JSON.stringify(this.Zc(a,b))};k.Wb=function(a,b){return JSON.stringify(this.he(a,b))};k.$c=function(a,b){return JSON.stringify(this.je(a,b))};function Kl(a,b,c,d,e,f){var g=NaN,h=NaN,l=(c-b)/d;if(1===l)g=a[b],h=a[b+1];else if(2==l)g=(1-e)*a[b]+e*a[b+d],h=(1-e)*a[b+1]+e*a[b+d+1];else if(l){var h=a[b],l=a[b+1],m=0,g=[0],n;for(n=b+d;n<c;n+=d){var p=a[n],q=a[n+1],m=m+Math.sqrt((p-h)*(p-h)+(q-l)*(q-l));g.push(m);h=p;l=q}c=e*m;l=0;m=g.length;for(n=!1;l<m;)e=l+(m-l>>1),h=+ia(g[e],c),0>h?l=e+1:(m=e,n=!h);e=n?l:~l;0>e?(c=(c-g[-e-2])/(g[-e-1]-g[-e-2]),b+=(-e-2)*d,g=Ja(a[b],a[b+d],c),h=Ja(a[b+1],a[b+d+1],c)):(g=a[b+e*d],h=a[b+e*d+1])}return f?(f[0]=g,f[1]=h,f):[g,h]}function Ll(a,b,c,d,e,f){if(c==b)return null;if(e<a[b+d-1])return f?(c=a.slice(b,b+d),c[d-1]=e,c):null;if(a[c-1]<e)return f?(c=a.slice(c-d,c),c[d-1]=e,c):null;if(e==a[b+d-1])return a.slice(b,b+d);b/=d;for(c/=d;b<c;)f=b+c>>1,e<a[(f+1)*d-1]?c=f:b=f+1;c=a[b*d-1];if(e==c)return a.slice((b-1)*d,(b-1)*d+d);f=(e-c)/(a[(b+1)*d-1]-c);c=[];var g;for(g=0;g<d-1;++g)c.push(Ja(a[(b-1)*d+g],a[b*d+g],f));c.push(e);return c}
function Ml(a,b,c,d,e,f){var g=0;if(f)return Ll(a,g,b[b.length-1],c,d,e);if(d<a[c-1])return e?(a=a.slice(0,c),a[c-1]=d,a):null;if(a[a.length-1]<d)return e?(a=a.slice(a.length-c),a[c-1]=d,a):null;e=0;for(f=b.length;e<f;++e){var h=b[e];if(g!=h){if(d<a[g+c-1])break;else if(d<=a[h-1])return Ll(a,g,h,c,d,!1);g=h}}return null};function O(a,b){rf.call(this);this.c=null;this.u=this.D=this.j=-1;this.ma(a,b)}v(O,rf);k=O.prototype;k.mk=function(a){this.A?la(this.A,a):this.A=a.slice();this.s()};k.clone=function(){var a=new O(null);a.ba(this.ja,this.A.slice());return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;this.u!=this.i&&(this.D=Math.sqrt(yf(this.A,0,this.A.length,this.a,0)),this.u=this.i);return Af(this.A,0,this.A.length,this.a,this.D,!1,a,b,c,d)};k.Ck=function(a,b){return Pf(this.A,0,this.A.length,this.a,a,b)};k.nn=function(a,b){return"XYM"!=this.ja&&"XYZM"!=this.ja?null:Ll(this.A,0,this.A.length,this.a,a,void 0!==b?b:!1)};k.X=function(){return Ff(this.A,0,this.A.length,this.a)};k.wh=function(a,b){return Kl(this.A,0,this.A.length,this.a,a,b)};k.pn=function(){var a=this.A,b=this.a,c=a[0],d=a[1],e=0,f;for(f=0+b;f<this.A.length;f+=b)var g=a[f],h=a[f+1],e=e+Math.sqrt((g-c)*(g-c)+(h-d)*(h-d)),c=g,d=h;return e};function di(a){a.j!=a.i&&(a.c=a.wh(.5,a.c),a.j=a.i);return a.c}k.hd=function(a){var b=[];b.length=Hf(this.A,0,this.A.length,this.a,a,b,0);a=new O(null);a.ba("XY",b);return a};k.U=function(){return"LineString"};k.Xa=function(a){return Qf(this.A,0,this.A.length,this.a,a)};k.ma=function(a,b){a?(uf(this,b,a,1),this.A||(this.A=[]),this.A.length=Df(this.A,0,a,this.a),this.s()):this.ba("XY",null)};k.ba=function(a,b){tf(this,a,b);this.s()};function P(a,b){rf.call(this);this.c=[];this.j=this.u=-1;this.ma(a,b)}v(P,rf);k=P.prototype;k.nk=function(a){this.A?la(this.A,a.ga().slice()):this.A=a.ga().slice();this.c.push(this.A.length);this.s()};k.clone=function(){var a=new P(null);a.ba(this.ja,this.A.slice(),this.c.slice());return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;this.j!=this.i&&(this.u=Math.sqrt(zf(this.A,0,this.c,this.a,0)),this.j=this.i);return Bf(this.A,0,this.c,this.a,this.u,!1,a,b,c,d)};k.rn=function(a,b,c){return"XYM"!=this.ja&&"XYZM"!=this.ja||!this.A.length?null:Ml(this.A,this.c,this.a,a,void 0!==b?b:!1,void 0!==c?c:!1)};k.X=function(){return Gf(this.A,0,this.c,this.a)};k.Bb=function(){return this.c};k.Yk=function(a){if(0>a||this.c.length<=a)return null;var b=new O(null);b.ba(this.ja,this.A.slice(a?this.c[a-1]:0,this.c[a]));return b};k.gd=function(){var a=this.A,b=this.c,c=this.ja,d=[],e=0,f;var g=0;for(f=b.length;g<f;++g){var h=b[g],l=new O(null);l.ba(c,a.slice(e,h));d.push(l);e=h}return d};function ei(a){var b=[],c=a.A,d=0,e=a.c;a=a.a;var f;var g=0;for(f=e.length;g<f;++g){var h=e[g],d=Kl(c,d,h,a,.5);la(b,d);d=h}return b}k.hd=function(a){var b=[],c=[],d=this.A,e=this.c,f=this.a,g=0,h=0,l;var m=0;for(l=e.length;m<l;++m){var n=e[m],h=Hf(d,g,n,f,a,b,h);c.push(h);g=n}b.length=h;a=new P(null);a.ba("XY",b,c);return a};k.U=function(){return"MultiLineString"};k.Xa=function(a){a:{var b=this.A,c=this.c,d=this.a,e=0,f;var g=0;for(f=c.length;g<f;++g){if(Qf(b,e,c[g],d,a)){a=!0;break a}e=c[g]}a=!1}return a};k.ma=function(a,b){a?(uf(this,b,a,2),this.A||(this.A=[]),a=Ef(this.A,0,a,this.a,this.c),this.A.length=a.length?a[a.length-1]:0,this.s()):this.ba("XY",null,this.c)};k.ba=function(a,b,c){tf(this,a,b);this.c=c;this.s()};function Nl(a,b){var c=a.ja,d=[],e=[],f;var g=0;for(f=b.length;g<f;++g){var h=b[g];g||(c=h.ja);la(d,h.ga());e.push(d.length)}a.ba(c,d,e)};function Q(a,b){rf.call(this);this.ma(a,b)}v(Q,rf);k=Q.prototype;k.qk=function(a){this.A?la(this.A,a.ga()):this.A=a.ga().slice();this.s()};k.clone=function(){var a=new Q(null);a.ba(this.ja,this.A.slice());return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;var e=this.A,f=this.a,g;var h=0;for(g=e.length;h<g;h+=f){var l=Ga(a,b,e[h],e[h+1]);if(l<d){d=l;for(l=0;l<f;++l)c[l]=e[h+l];c.length=f}}return d};k.X=function(){return Ff(this.A,0,this.A.length,this.a)};k.il=function(a){var b=this.A?this.A.length/this.a:0;if(0>a||b<=a)return null;b=new C(null);b.ba(this.ja,this.A.slice(a*this.a,(a+1)*this.a));return b};k.Zd=function(){var a=this.A,b=this.ja,c=this.a,d=[],e;var f=0;for(e=a.length;f<e;f+=c){var g=new C(null);g.ba(b,a.slice(f,f+c));d.push(g)}return d};k.U=function(){return"MultiPoint"};k.Xa=function(a){var b=this.A,c=this.a,d;var e=0;for(d=b.length;e<d;e+=c){var f=b[e];var g=b[e+1];if(Ua(a,f,g))return!0}return!1};k.ma=function(a,b){a?(uf(this,b,a,1),this.A||(this.A=[]),this.A.length=Df(this.A,0,a,this.a),this.s()):this.ba("XY",null)};k.ba=function(a,b){tf(this,a,b);this.s()};function R(a,b){rf.call(this);this.c=[];this.u=-1;this.D=null;this.I=this.C=this.B=-1;this.j=null;this.ma(a,b)}v(R,rf);k=R.prototype;k.rk=function(a){if(this.A){var b=this.A.length;la(this.A,a.ga());a=a.Bb().slice();var c;var d=0;for(c=a.length;d<c;++d)a[d]+=b}else this.A=a.ga().slice(),a=a.Bb().slice(),this.c.push();this.c.push(a);this.s()};k.clone=function(){for(var a=new R(null),b=this.c.length,c=Array(b),d=0;d<b;++d)c[d]=this.c[d].slice();Ol(a,this.ja,this.A.slice(),c);return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;if(this.C!=this.i){var e=this.c,f=0,g=0,h;var l=0;for(h=e.length;l<h;++l)var m=e[l],g=zf(this.A,f,m,this.a,g),f=m[m.length-1];this.B=Math.sqrt(g);this.C=this.i}e=fi(this);f=this.c;g=this.a;l=this.B;h=0;var m=[NaN,NaN],n;var p=0;for(n=f.length;p<n;++p){var q=f[p];d=Bf(e,h,q,g,l,!0,a,b,c,d,m);h=q[q.length-1]}return d};k.Mc=function(a,b){a:{var c=fi(this),d=this.c,e=0;if(d.length){var f;var g=0;for(f=d.length;g<f;++g){var h=d[g];if(Nf(c,e,h,this.a,a,b)){a=!0;break a}e=h[h.length-1]}}a=!1}return a};k.sn=function(){var a=fi(this),b=this.c,c=0,d=0,e;var f=0;for(e=b.length;f<e;++f)var g=b[f],d=d+wf(a,c,g,this.a),c=g[g.length-1];return d};k.X=function(a){if(void 0!==a){var b=fi(this).slice();Vf(b,this.c,this.a,a)}else b=this.A;a=b;b=this.c;var c=this.a,d=0,e=[],f=0,g;var h=0;for(g=b.length;h<g;++h){var l=b[h];e[f++]=Gf(a,d,l,c,e[f]);d=l[l.length-1]}e.length=f;return e};function gi(a){if(a.u!=a.i){var b=a.A,c=a.c,d=a.a,e=0,f=[],g;var h=0;for(g=c.length;h<g;++h){var l=c[h],e=$a(b,e,l[0],d);f.push((e[0]+e[2])/2,(e[1]+e[3])/2);e=l[l.length-1]}b=fi(a);c=a.c;d=a.a;h=0;g=[];l=0;for(e=c.length;l<e;++l){var m=c[l];g=Of(b,h,m,d,f,2*l,g);h=m[m.length-1]}a.D=g;a.u=a.i}return a.D}k.Uk=function(){var a=new Q(null);a.ba("XY",gi(this).slice());return a};function fi(a){if(a.I!=a.i){var b=a.A;a:{var c=a.c;var d;var e=0;for(d=c.length;e<d;++e)if(!Tf(b,c[e],a.a,void 0)){c=!1;break a}c=!0}c?a.j=b:(a.j=b.slice(),a.j.length=Vf(a.j,a.c,a.a));a.I=a.i}return a.j}k.hd=function(a){var b=[],c=[],d=this.A,e=this.c,f=this.a;a=Math.sqrt(a);var g=0,h=0,l;var m=0;for(l=e.length;m<l;++m){var n=e[m],p=[],h=If(d,g,n,f,a,b,h,p);c.push(p);g=n[n.length-1]}b.length=h;d=new R(null);Ol(d,"XY",b,c);return d};k.jl=function(a){if(0>a||this.c.length<=a)return null;if(a){var b=this.c[a-1];b=b[b.length-1]}else b=0;a=this.c[a].slice();var c=a[a.length-1];if(b){var d;var e=0;for(d=a.length;e<d;++e)a[e]-=b}e=new D(null);e.ba(this.ja,this.A.slice(b,c),a);return e};k.Td=function(){var a=this.ja,b=this.A,c=this.c,d=[],e=0,f,g;var h=0;for(f=c.length;h<f;++h){var l=c[h].slice(),m=l[l.length-1];if(e){var n=0;for(g=l.length;n<g;++n)l[n]-=e}n=new D(null);n.ba(a,b.slice(e,m),l);d.push(n);e=m}return d};k.U=function(){return"MultiPolygon"};k.Xa=function(a){a:{var b=fi(this),c=this.c,d=this.a,e=0,f;var g=0;for(f=c.length;g<f;++g){var h=c[g];if(Rf(b,e,h,d,a)){a=!0;break a}e=h[h.length-1]}a=!1}return a};k.ma=function(a,b){if(a){uf(this,b,a,3);this.A||(this.A=[]);b=this.A;var c=this.a,d=this.c,e=0,d=d?d:[],f=0,g;var h=0;for(g=a.length;h<g;++h)e=Ef(b,e,a[h],c,d[f]),d[f++]=e,e=e[e.length-1];d.length=f;d.length?(a=d[d.length-1],this.A.length=a.length?a[a.length-1]:0):this.A.length=0;this.s()}else Ol(this,"XY",null,this.c)};function Ol(a,b,c,d){tf(a,b,c);a.c=d;a.s()}function Pl(a,b){var c=a.ja,d=[],e=[],f;var g=0;for(f=b.length;g<f;++g){var h=b[g];g||(c=h.ja);var l=d.length;var m=h.Bb();var n;var p=0;for(n=m.length;p<n;++p)m[p]+=l;la(d,h.ga());e.push(m)}Ol(a,c,d,e)};function Ql(a){a=a?a:{};El.call(this);this.b=a.geometryName}v(Ql,Il);function Rl(a,b){if(!a)return null;if("number"===typeof a.x&&"number"===typeof a.y)var c="Point";else if(a.points)c="MultiPoint";else if(a.paths)c=1===a.paths.length?"LineString":"MultiLineString";else if(a.rings){var d=a.rings,e=Sl(a),f=[],g=[];c=[];var h;var l=0;for(h=d.length;l<h;++l)f.length=0,Df(f,0,d[l],e.length),Sf(f,0,f.length,e.length)?g.push([d[l]]):c.push(d[l]);for(;c.length;){d=c.shift();e=!1;for(l=g.length-1;0<=l;l--)if(Va((new Jf(g[l][0])).G(),(new Jf(d)).G())){g[l].push(d);e=!0;break}e||g.push([d.reverse()])}a=tb({},a);1===g.length?(c="Polygon",a.rings=g[0]):(c="MultiPolygon",a.rings=g)}return Hl((0,Tl[c])(a),!1,b)}function Sl(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}function Ul(a){a=a.ja;return{hasZ:"XYZ"===a||"XYZM"===a,hasM:"XYM"===a||"XYZM"===a}}
var Tl={Point:function(a){return void 0!==a.m&&void 0!==a.z?new C([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new C([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new C([a.x,a.y,a.m],"XYM"):new C([a.x,a.y])},LineString:function(a){return new O(a.paths[0],Sl(a))},Polygon:function(a){return new D(a.rings,Sl(a))},MultiPoint:function(a){return new Q(a.points,Sl(a))},MultiLineString:function(a){return new P(a.paths,Sl(a))},MultiPolygon:function(a){return new R(a.rings,Sl(a))}},Vl={Point:function(a){var b=a.X(),c;a=a.ja;"XYZ"===a?c={x:b[0],y:b[1],z:b[2]}:"XYM"===a?c={x:b[0],y:b[1],m:b[2]}:"XYZM"===a?c={x:b[0],y:b[1],z:b[2],m:b[3]}:"XY"===a?c={x:b[0],y:b[1]}:xa(!1,34);return c},LineString:function(a){var b=Ul(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:[a.X()]}},Polygon:function(a){var b=Ul(a);return{hasZ:b.hasZ,hasM:b.hasM,rings:a.X(!1)}},MultiPoint:function(a){var b=Ul(a);return{hasZ:b.hasZ,hasM:b.hasM,points:a.X()}},MultiLineString:function(a){var b=Ul(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:a.X()}},MultiPolygon:function(a){var b=Ul(a);a=a.X(!1);for(var c=[],d=0;d<a.length;d++)for(var e=a[d].length-1;0<=e;e--)c.push(a[d][e]);return{hasZ:b.hasZ,hasM:b.hasM,rings:c}}};k=Ql.prototype;k.Rc=function(a,b){var c=Rl(a.geometry,b),d=new H;this.b&&d.Tc(this.b);d.Ra(c);b&&b.dg&&a.attributes[b.dg]&&d.jc(a.attributes[b.dg]);a.attributes&&d.H(a.attributes);return d};k.yg=function(a,b){b=b?b:{};if(a.features){var c=[],d=a.features,e;b.dg=a.objectIdFieldName;a=0;for(e=d.length;a<e;++a)c.push(this.Rc(d[a],b));return c}return[this.Rc(a,b)]};k.Cg=function(a,b){return Rl(a,b)};k.Fg=function(a){return a.spatialReference&&a.spatialReference.wkid?Tb("EPSG:"+a.spatialReference.wkid):null};function Wl(a,b){return(0,Vl[a.U()])(Hl(a,!0,b),b)}k.je=function(a,b){return Wl(a,Gl(this,b))};k.Zc=function(a,b){b=Gl(this,b);var c={},d=a.V();d&&(c.geometry=Wl(d,b));d=a.N();delete d[a.c];c.attributes=wb(d)?{}:d;b&&b.featureProjection&&(c.spatialReference={wkid:Tb(b.featureProjection).mb.split(":").pop()});return c};k.he=function(a,b){b=Gl(this,b);var c=[],d;var e=0;for(d=a.length;e<d;++e)c.push(this.Zc(a[e],b));return{features:c}};function Xl(a){this.kc=a};function Yl(a,b){this.kc=a;this.b=Array.prototype.slice.call(arguments,1);xa(2<=this.b.length,57)}v(Yl,Xl);function Zl(a){var b=["And"].concat(Array.prototype.slice.call(arguments));Yl.apply(this,b)}v(Zl,Yl);function $l(a,b,c){this.kc="BBOX";this.geometryName=a;this.extent=b;this.srsName=c}v($l,Xl);function am(a,b){this.kc=a;this.b=b}v(am,Xl);function bm(a,b,c){am.call(this,"During",a);this.a=b;this.i=c}v(bm,am);function cm(a,b,c,d){am.call(this,a,b);this.i=c;this.a=d}v(cm,am);function dm(a,b,c){cm.call(this,"PropertyIsEqualTo",a,b,c)}v(dm,cm);function em(a,b){cm.call(this,"PropertyIsGreaterThan",a,b)}v(em,cm);function fm(a,b){cm.call(this,"PropertyIsGreaterThanOrEqualTo",a,b)}v(fm,cm);function gm(a,b,c,d){this.kc=a;this.geometryName=b||"the_geom";this.geometry=c;this.srsName=d}v(gm,Xl);function hm(a,b,c){gm.call(this,"Intersects",a,b,c)}v(hm,gm);function im(a,b,c){am.call(this,"PropertyIsBetween",a);this.a=b;this.i=c}v(im,am);function jm(a,b,c,d,e,f){am.call(this,"PropertyIsLike",a);this.c=b;this.g=void 0!==c?c:"*";this.f=void 0!==d?d:".";this.i=void 0!==e?e:"!";this.a=f}v(jm,am);function km(a){am.call(this,"PropertyIsNull",a)}v(km,am);function lm(a,b){cm.call(this,"PropertyIsLessThan",a,b)}v(lm,cm);function mm(a,b){cm.call(this,"PropertyIsLessThanOrEqualTo",a,b)}v(mm,cm);function nm(a){this.kc="Not";this.condition=a}v(nm,Xl);function om(a,b,c){cm.call(this,"PropertyIsNotEqualTo",a,b,c)}v(om,cm);function pm(a){var b=["Or"].concat(Array.prototype.slice.call(arguments));Yl.apply(this,b)}v(pm,Yl);function qm(a,b,c){gm.call(this,"Within",a,b,c)}v(qm,gm);function rm(a){var b=[null].concat(Array.prototype.slice.call(arguments));return new(Function.prototype.bind.apply(Zl,b))}function sm(a,b,c){return new $l(a,b,c)};function tm(a){of.call(this);this.a=a?a:null;um(this)}v(tm,of);function vm(a){var b=[],c;var d=0;for(c=a.length;d<c;++d)b.push(a[d].clone());return b}function wm(a){var b;if(a.a){var c=0;for(b=a.a.length;c<b;++c)Kc(a.a[c],"change",a.s,a)}}function um(a){var b;if(a.a){var c=0;for(b=a.a.length;c<b;++c)y(a.a[c],"change",a.s,a)}}k=tm.prototype;k.clone=function(){var a=new tm(null);a.oj(this.a);return a};k.Kb=function(a,b,c,d){if(d<Sa(this.G(),a,b))return d;var e=this.a,f;var g=0;for(f=e.length;g<f;++g)d=e[g].Kb(a,b,c,d);return d};k.Mc=function(a,b){var c=this.a,d;var e=0;for(d=c.length;e<d;++e)if(c[e].Mc(a,b))return!0;return!1};k.se=function(a){Ya(a);for(var b=this.a,c=0,d=b.length;c<d;++c)cb(a,b[c].G());return a};k.Vf=function(){return vm(this.a)};k.Vd=function(a){this.o!=this.i&&(ub(this.f),this.g=0,this.o=this.i);if(0>a||this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f;var g=0;for(f=d.length;g<f;++g){var h=d[g],l=h.Vd(a);c.push(l);l!==h&&(e=!0)}if(e)return a=new tm(null),wm(a),a.a=c,um(a),a.s(),this.f[b]=a;this.g=a;return this};k.U=function(){return"GeometryCollection"};k.Xa=function(a){var b=this.a,c;var d=0;for(c=b.length;d<c;++d)if(b[d].Xa(a))return!0;return!1};k.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.s()};k.scale=function(a,b,c){c||(c=nb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.s()};k.oj=function(a){a=vm(a);wm(this);this.a=a;um(this);this.s()};k.Dc=function(a){var b=this.a,c;var d=0;for(c=b.length;d<c;++d)b[d].Dc(a);this.s()};k.translate=function(a,b){var c=this.a,d;var e=0;for(d=c.length;e<d;++e)c[e].translate(a,b);this.s()};k.ka=function(){wm(this);of.prototype.ka.call(this)};function xm(a){a=a?a:{};El.call(this);this.defaultDataProjection=Tb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");a.featureProjection&&(this.f=Tb(a.featureProjection));this.b=a.geometryName}v(xm,Il);function ym(a,b){return a?Hl((0,zm[a.type])(a),!1,b):null}function Am(a,b){return(0,Bm[a.U()])(Hl(a,!0,b),b)}
var zm={Point:function(a){return new C(a.coordinates)},LineString:function(a){return new O(a.coordinates)},Polygon:function(a){return new D(a.coordinates)},MultiPoint:function(a){return new Q(a.coordinates)},MultiLineString:function(a){return new P(a.coordinates)},MultiPolygon:function(a){return new R(a.coordinates)},GeometryCollection:function(a,b){a=a.geometries.map(function(a){return ym(a,b)});return new tm(a)}},Bm={Point:function(a){return{type:"Point",coordinates:a.X()}},LineString:function(a){return{type:"LineString",coordinates:a.X()}},Polygon:function(a,b){if(b)var c=b.rightHanded;return{type:"Polygon",coordinates:a.X(c)}},MultiPoint:function(a){return{type:"MultiPoint",coordinates:a.X()}},MultiLineString:function(a){return{type:"MultiLineString",coordinates:a.X()}},MultiPolygon:function(a,b){if(b)var c=b.rightHanded;return{type:"MultiPolygon",coordinates:a.X(c)}},GeometryCollection:function(a,b){return{type:"GeometryCollection",geometries:a.a.map(function(a){var c=tb({},b);delete c.featureProjection;return Am(a,c)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};k=xm.prototype;k.Rc=function(a,b){a="Feature"===a.type?a:{type:"Feature",geometry:a};b=ym(a.geometry,b);var c=new H;this.b&&c.Tc(this.b);c.Ra(b);void 0!==a.id&&c.jc(a.id);a.properties&&c.H(a.properties);return c};k.yg=function(a,b){if("FeatureCollection"===a.type){var c=[];a=a.features;var d;var e=0;for(d=a.length;e<d;++e)c.push(this.Rc(a[e],b))}else c=[this.Rc(a,b)];return c};k.Cg=function(a,b){return ym(a,b)};k.Fg=function(a){a=a.crs;var b;a?"name"==a.type?b=Tb(a.properties.name):"EPSG"==a.type?b=Tb("EPSG:"+a.properties.code):xa(!1,36):b=this.defaultDataProjection;return b};k.Zc=function(a,b){b=Gl(this,b);var c={type:"Feature"},d=a.a;void 0!==d&&(c.id=d);(d=a.V())?c.geometry=Am(d,b):c.geometry=null;b=a.N();delete b[a.c];wb(b)?c.properties=null:c.properties=b;return c};k.he=function(a,b){b=Gl(this,b);var c=[],d;var e=0;for(d=a.length;e<d;++e)c.push(this.Zc(a[e],b));return{type:"FeatureCollection",features:c}};k.je=function(a,b){return Am(a,Gl(this,b))};function Cm(){this.i=new XMLSerializer;El.call(this)}v(Cm,El);k=Cm.prototype;k.U=function(){return"xml"};k.Tb=function(a,b){return ml(a)?Dm(this,a,b):nl(a)?this.xg(a,b):"string"===typeof a?(a=pl(a),Dm(this,a,b)):null};function Dm(a,b,c){a=Em(a,b,c);return 0<a.length?a[0]:null}k.xg=function(){return null};k.Oa=function(a,b){return ml(a)?Em(this,a,b):nl(a)?this.zc(a,b):"string"===typeof a?(a=pl(a),Em(this,a,b)):[]};function Em(a,b,c){var d=[];for(b=b.firstChild;b;b=b.nextSibling)b.nodeType==Node.ELEMENT_NODE&&la(d,a.zc(b,c));return d}k.Sc=function(a,b){if(ml(a))return null;if(nl(a))return this.aj(a,b);"string"===typeof a&&pl(a);return null};k.aj=function(){return null};k.kb=function(a){return ml(a)?this.Eg(a):nl(a)?this.kf(a):"string"===typeof a?(a=pl(a),this.Eg(a)):null};k.Eg=function(){return this.defaultDataProjection};k.kf=function(){return this.defaultDataProjection};k.Bd=function(a,b){return this.i.serializeToString(this.Vg(a,b))};k.Vg=function(){return null};k.Wb=function(a,b){a=this.Xb(a,b);return this.i.serializeToString(a)};k.Xb=function(){return null};k.$c=function(a,b){a=this.ie(a,b);return this.i.serializeToString(a)};k.ie=function(){return null};function Fm(a){a=a?a:{};this.featureType=a.featureType;this.featureNS=a.featureNS;this.srsName=a.srsName;this.schemaLocation="";this.b={};this.b["http://www.opengis.net/gml"]={featureMember:sl(Fm.prototype.be),featureMembers:sl(Fm.prototype.be)};Cm.call(this)}v(Fm,Cm);var Gm=/^[\s\xa0]*$/;k=Fm.prototype;k.be=function(a,b){var c=a.localName,d=null;if("FeatureCollection"==c)"http://www.opengis.net/wfs"===a.namespaceURI?d=N([],this.b,a,b,this):d=N(null,this.b,a,b,this);else if("featureMembers"==c||"featureMember"==c){var e=b[0],f=e.featureType,g=e.featureNS,h;if(!f&&a.childNodes){f=[];g={};var l=0;for(h=a.childNodes.length;l<h;++l){var m=a.childNodes[l];if(1===m.nodeType){var n=m.nodeName.split(":").pop();if(-1===f.indexOf(n)){var p="",q=0,m=m.namespaceURI,r;for(r in g){if(g[r]===m){p=r;break}++q}p||(p="p"+q,g[p]=m);f.push(p+":"+n)}}}"featureMember"!=c&&(e.featureType=f,e.featureNS=g)}"string"===typeof g&&(l=g,g={},g.p0=l);var e={},f=Array.isArray(f)?f:[f],u;for(u in g){n={};l=0;for(h=f.length;l<h;++l)(-1===f[l].indexOf(":")?"p0":f[l].split(":")[0])===u&&(n[f[l].split(":").pop()]="featureMembers"==c?rl(this.wg,this):sl(this.wg,this));e[g[u]]=n}"featureMember"==c?d=N(void 0,e,a,b):d=N([],e,a,b)}null===d&&(d=[]);return d};k.gf=function(a,b){var c=b[0];c.srsName=a.firstElementChild.getAttribute("srsName");if(a=N(null,this.Zg,a,b,this))return Hl(a,!1,c)};k.wg=function(a,b){var c;(c=a.getAttribute("fid"))||(c=a.getAttributeNS("http://www.opengis.net/gml","id")||"");var d={},e;for(a=a.firstElementChild;a;a=a.nextElementSibling){var f=a.localName;if(0===a.childNodes.length||1===a.childNodes.length&&(3===a.firstChild.nodeType||4===a.firstChild.nodeType)){var g=kl(a,!1);Gm.test(g)&&(g=void 0);d[f]=g}else"boundedBy"!==f&&(e=f),d[f]=this.gf(a,b)}b=new H(d);e&&b.Tc(e);c&&b.jc(c);return b};k.fj=function(a,b){if(a=this.ff(a,b))return b=new C(null),b.ba("XYZ",a),b};k.dj=function(a,b){if(a=N([],this.Nj,a,b,this))return new Q(a)};k.cj=function(a,b){if(a=N([],this.Mj,a,b,this))return b=new P(null),Nl(b,a),b};k.ej=function(a,b){if(a=N([],this.Oj,a,b,this))return b=new R(null),Pl(b,a),b};k.Xi=function(a,b){Al(this.Rj,a,b,this)};k.Mh=function(a,b){Al(this.Kj,a,b,this)};k.Yi=function(a,b){Al(this.Sj,a,b,this)};k.hf=function(a,b){if(a=this.ff(a,b))return b=new O(null),b.ba("XYZ",a),b};k.wp=function(a,b){if(a=N(null,this.ke,a,b,this))return a};k.bj=function(a,b){if(a=this.ff(a,b))return b=new Jf(null),Kf(b,"XYZ",a),b};k.jf=function(a,b){if((a=N([null],this.zf,a,b,this))&&a[0]){b=new D(null);var c=a[0],d=[c.length],e;var f=1;for(e=a.length;f<e;++f)la(c,a[f]),d.push(c.length);b.ba("XYZ",c,d);return b}};k.ff=function(a,b){return N(null,this.ke,a,b,this)};k.Nj={"http://www.opengis.net/gml":{pointMember:rl(Fm.prototype.Xi),pointMembers:rl(Fm.prototype.Xi)}};k.Mj={"http://www.opengis.net/gml":{lineStringMember:rl(Fm.prototype.Mh),lineStringMembers:rl(Fm.prototype.Mh)}};k.Oj={"http://www.opengis.net/gml":{polygonMember:rl(Fm.prototype.Yi),polygonMembers:rl(Fm.prototype.Yi)}};k.Rj={"http://www.opengis.net/gml":{Point:rl(Fm.prototype.ff)}};k.Kj={"http://www.opengis.net/gml":{LineString:rl(Fm.prototype.hf)}};k.Sj={"http://www.opengis.net/gml":{Polygon:rl(Fm.prototype.jf)}};k.le={"http://www.opengis.net/gml":{LinearRing:sl(Fm.prototype.wp)}};k.aj=function(a,b){return(a=this.gf(a,[Fl(this,a,b?b:{})]))?a:null};k.zc=function(a,b){var c={featureType:this.featureType,featureNS:this.featureNS};b&&tb(c,Fl(this,a,b));return this.be(a,[c])||[]};k.kf=function(a){return Tb(this.srsName?this.srsName:a.firstElementChild.getAttribute("srsName"))};function Hm(a){a=kl(a,!1);return Im(a)}function Im(a){if(a=/^\s*(true|1)|(false|0)\s*$/.exec(a))return void 0!==a[1]||!1}function Jm(a){a=kl(a,!1);a=Date.parse(a);return isNaN(a)?void 0:a/1E3}function Km(a){a=kl(a,!1);return Lm(a)}function Lm(a){if(a=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(a))return parseFloat(a[1])}function Mm(a){a=kl(a,!1);return Nm(a)}function Nm(a){if(a=/^\s*(\d+)\s*$/.exec(a))return parseInt(a[1],10)}function S(a){return kl(a,!1).trim()}
function Om(a,b){Pm(a,b?"1":"0")}function Qm(a,b){a.appendChild(il.createTextNode(b.toPrecision()))}function Rm(a,b){a.appendChild(il.createTextNode(b.toString()))}function Pm(a,b){a.appendChild(il.createTextNode(b))};function Sm(a){a=a?a:{};Fm.call(this,a);this.l=void 0!==a.surface?a.surface:!1;this.c=void 0!==a.curve?a.curve:!1;this.g=void 0!==a.multiCurve?a.multiCurve:!0;this.j=void 0!==a.multiSurface?a.multiSurface:!0;this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}v(Sm,Fm);k=Sm.prototype;k.Ap=function(a,b){if(a=N([],this.Lj,a,b,this))return b=new P(null),Nl(b,a),b};k.Bp=function(a,b){if(a=N([],this.Pj,a,b,this))return b=new R(null),Pl(b,a),b};k.ph=function(a,b){Al(this.Hj,a,b,this)};k.Aj=function(a,b){Al(this.Uj,a,b,this)};k.Ep=function(a,b){return N([null],this.Qj,a,b,this)};k.Hp=function(a,b){return N([null],this.Tj,a,b,this)};k.Fp=function(a,b){return N([null],this.zf,a,b,this)};k.zp=function(a,b){return N([null],this.ke,a,b,this)};k.cm=function(a,b){(a=N(void 0,this.le,a,b,this))&&b[b.length-1].push(a)};k.yk=function(a,b){(a=N(void 0,this.le,a,b,this))&&(b[b.length-1][0]=a)};k.gj=function(a,b){if((a=N([null],this.Vj,a,b,this))&&a[0]){b=new D(null);var c=a[0],d=[c.length],e;var f=1;for(e=a.length;f<e;++f)la(c,a[f]),d.push(c.length);b.ba("XYZ",c,d);return b}};k.Zi=function(a,b){if(a=N([null],this.Ij,a,b,this))return b=new O(null),b.ba("XYZ",a),b};k.vp=function(a,b){a=N([null],this.Jj,a,b,this);return Xa(a[1][0],a[1][1],a[2][0],a[2][1])};k.xp=function(a,b){var c=kl(a,!1),d=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/;a=[];for(var e;e=d.exec(c);)a.push(parseFloat(e[1])),c=c.substr(e[0].length);if(""===c){b=b[0].srsName;c="enu";b&&(c=Tb(b).b);if("neu"===c)for(b=0,c=a.length;b<c;b+=3)d=a[b],a[b]=a[b+1],a[b+1]=d;b=a.length;2==b&&a.push(0);if(b)return a}};k.Bg=function(a,b){var c=kl(a,!1).replace(/^\s*|\s*$/g,""),d=b[0].srsName,e=a.parentNode.getAttribute("srsDimension");b="enu";d&&(b=Tb(d).b);c=c.split(/\s+/);d=2;a.getAttribute("srsDimension")?d=Nm(a.getAttribute("srsDimension")):a.getAttribute("dimension")?d=Nm(a.getAttribute("dimension")):e&&(d=Nm(e));for(var f,g=[],h=0,l=c.length;h<l;h+=d)a=parseFloat(c[h]),e=parseFloat(c[h+1]),f=3===d?parseFloat(c[h+2]):0,"en"===b.substr(0,2)?g.push(a,e,f):g.push(e,a,f);return g};k.ke={"http://www.opengis.net/gml":{pos:sl(Sm.prototype.xp),posList:sl(Sm.prototype.Bg)}};k.zf={"http://www.opengis.net/gml":{interior:Sm.prototype.cm,exterior:Sm.prototype.yk}};k.Zg={"http://www.opengis.net/gml":{Point:sl(Fm.prototype.fj),MultiPoint:sl(Fm.prototype.dj),LineString:sl(Fm.prototype.hf),MultiLineString:sl(Fm.prototype.cj),LinearRing:sl(Fm.prototype.bj),Polygon:sl(Fm.prototype.jf),MultiPolygon:sl(Fm.prototype.ej),Surface:sl(Sm.prototype.gj),MultiSurface:sl(Sm.prototype.Bp),Curve:sl(Sm.prototype.Zi),MultiCurve:sl(Sm.prototype.Ap),Envelope:sl(Sm.prototype.vp)}};k.Lj={"http://www.opengis.net/gml":{curveMember:rl(Sm.prototype.ph),curveMembers:rl(Sm.prototype.ph)}};k.Pj={"http://www.opengis.net/gml":{surfaceMember:rl(Sm.prototype.Aj),surfaceMembers:rl(Sm.prototype.Aj)}};k.Hj={"http://www.opengis.net/gml":{LineString:rl(Fm.prototype.hf),Curve:rl(Sm.prototype.Zi)}};k.Uj={"http://www.opengis.net/gml":{Polygon:rl(Fm.prototype.jf),Surface:rl(Sm.prototype.gj)}};k.Vj={"http://www.opengis.net/gml":{patches:sl(Sm.prototype.Ep)}};k.Ij={"http://www.opengis.net/gml":{segments:sl(Sm.prototype.Hp)}};k.Jj={"http://www.opengis.net/gml":{lowerCorner:rl(Sm.prototype.Bg),upperCorner:rl(Sm.prototype.Bg)}};k.Qj={"http://www.opengis.net/gml":{PolygonPatch:sl(Sm.prototype.Fp)}};k.Tj={"http://www.opengis.net/gml":{LineStringSegment:sl(Sm.prototype.zp)}};function Tm(a,b,c){var d=c[c.length-1];c=d.hasZ;d=d.srsName;b=b.X();for(var e=b.length,f=Array(e),g,h=0;h<e;++h){g=b[h];var l=h,m=c,n="enu";d&&(n=Tb(d).b);n="en"===n.substr(0,2)?g[0]+" "+g[1]:g[1]+" "+g[0];m&&(n+=" "+(g[2]||0));f[l]=n}Pm(a,f.join(" "))}
k.ni=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=jl(a.namespaceURI,"pos");a.appendChild(d);c=c[c.length-1];a=c.hasZ;var e=c.srsName;c="enu";e&&(c=Tb(e).b);b=b.X();c="en"===c.substr(0,2)?b[0]+" "+b[1]:b[1]+" "+b[0];a&&(c+=" "+(b[2]||0));Pm(d,c)};var Um={"http://www.opengis.net/gml":{lowerCorner:J(Pm),upperCorner:J(Pm)}};k=Sm.prototype;k.jn=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);Bl({node:a},Um,yl,[b[0]+" "+b[1],b[2]+" "+b[3]],c,["lowerCorner","upperCorner"],this)};k.ki=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=jl(a.namespaceURI,"posList");a.appendChild(d);Tm(d,b,c)};k.hn=function(a,b){a=b[b.length-1];b=a.node;var c=a.exteriorWritten;void 0===c&&(a.exteriorWritten=!0);return jl(b.namespaceURI,void 0!==c?"interior":"exterior")};k.Se=function(a,b,c){var d=c[c.length-1],e=d.hasZ,d=d.srsName;"PolygonPatch"!==a.nodeName&&d&&a.setAttribute("srsName",d);"Polygon"===a.nodeName||"PolygonPatch"===a.nodeName?(b=b.Sd(),Bl({node:a,hasZ:e,srsName:d},Vm,this.hn,b,c,void 0,this)):"Surface"===a.nodeName&&(e=jl(a.namespaceURI,"patches"),a.appendChild(e),a=jl(e.namespaceURI,"PolygonPatch"),e.appendChild(a),this.Se(a,b,c))};k.Re=function(a,b,c){var d=c[c.length-1].srsName;"LineStringSegment"!==a.nodeName&&d&&a.setAttribute("srsName",d);"LineString"===a.nodeName||"LineStringSegment"===a.nodeName?(d=jl(a.namespaceURI,"posList"),a.appendChild(d),Tm(d,b,c)):"Curve"===a.nodeName&&(d=jl(a.namespaceURI,"segments"),a.appendChild(d),a=jl(d.namespaceURI,"LineStringSegment"),d.appendChild(a),this.Re(a,b,c))};k.mi=function(a,b,c){var d=c[c.length-1],e=d.hasZ,f=d.srsName,d=d.surface;f&&a.setAttribute("srsName",f);b=b.Td();Bl({node:a,hasZ:e,srsName:f,surface:d},Wm,this.o,b,c,void 0,this)};k.kn=function(a,b,c){var d=c[c.length-1],e=d.srsName,d=d.hasZ;e&&a.setAttribute("srsName",e);b=b.Zd();Bl({node:a,hasZ:d,srsName:e},Xm,wl("pointMember"),b,c,void 0,this)};k.li=function(a,b,c){var d=c[c.length-1],e=d.hasZ,f=d.srsName,d=d.curve;f&&a.setAttribute("srsName",f);b=b.gd();Bl({node:a,hasZ:e,srsName:f,curve:d},Ym,this.o,b,c,void 0,this)};k.oi=function(a,b,c){var d=jl(a.namespaceURI,"LinearRing");a.appendChild(d);this.ki(d,b,c)};k.pi=function(a,b,c){var d=this.a(b,c);d&&(a.appendChild(d),this.Se(d,b,c))};k.ln=function(a,b,c){var d=jl(a.namespaceURI,"Point");a.appendChild(d);this.ni(d,b,c)};k.ji=function(a,b,c){var d=this.a(b,c);d&&(a.appendChild(d),this.Re(d,b,c))};k.od=function(a,b,c){var d=c[c.length-1],e=tb({},d);e.node=a;var f;Array.isArray(b)?d.dataProjection?f=hc(b,d.featureProjection,d.dataProjection):f=b:f=Hl(b,!0,d);Bl(e,Zm,this.a,[f],c,void 0,this)};k.ii=function(a,b,c){var d=b.a;d&&a.setAttribute("fid",d);var d=c[c.length-1],e=d.featureNS,f=b.c;d.lb||(d.lb={},d.lb[e]={});var g=b.N();b=[];var h=[];for(m in g){var l=g[m];null!==l&&(b.push(m),h.push(l),m==f||l instanceof of?m in d.lb[e]||(d.lb[e][m]=J(this.od,this)):m in d.lb[e]||(d.lb[e][m]=J(Pm)))}var m=tb({},d);m.node=a;Bl(m,d.lb,wl(void 0,e),h,c,b)};var Wm={"http://www.opengis.net/gml":{surfaceMember:J(Sm.prototype.pi),polygonMember:J(Sm.prototype.pi)}},Xm={"http://www.opengis.net/gml":{pointMember:J(Sm.prototype.ln)}},Ym={"http://www.opengis.net/gml":{lineStringMember:J(Sm.prototype.ji),curveMember:J(Sm.prototype.ji)}},Vm={"http://www.opengis.net/gml":{exterior:J(Sm.prototype.oi),interior:J(Sm.prototype.oi)}},Zm={"http://www.opengis.net/gml":{Curve:J(Sm.prototype.Re),MultiCurve:J(Sm.prototype.li),Point:J(Sm.prototype.ni),MultiPoint:J(Sm.prototype.kn),LineString:J(Sm.prototype.Re),MultiLineString:J(Sm.prototype.li),LinearRing:J(Sm.prototype.ki),Polygon:J(Sm.prototype.Se),MultiPolygon:J(Sm.prototype.mi),Surface:J(Sm.prototype.Se),MultiSurface:J(Sm.prototype.mi),Envelope:J(Sm.prototype.jn)}},$m={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};Sm.prototype.o=function(a,b){return jl("http://www.opengis.net/gml",$m[b[b.length-1].node.nodeName])};Sm.prototype.a=function(a,b){var c=b[b.length-1];b=c.multiSurface;var d=c.surface,e=c.curve,c=c.multiCurve;Array.isArray(a)?a="Envelope":(a=a.U(),"MultiPolygon"===a&&!0===b?a="MultiSurface":"Polygon"===a&&!0===d?a="Surface":"LineString"===a&&!0===e?a="Curve":"MultiLineString"===a&&!0===c&&(a="MultiCurve"));return jl("http://www.opengis.net/gml",a)};Sm.prototype.ie=function(a,b){b=Gl(this,b);var c=jl("http://www.opengis.net/gml","geom"),d={node:c,hasZ:this.hasZ,srsName:this.srsName,curve:this.c,surface:this.l,multiSurface:this.j,multiCurve:this.g};b&&tb(d,b);this.od(c,a,[d]);return c};Sm.prototype.Xb=function(a,b){b=Gl(this,b);var c=jl("http://www.opengis.net/gml","featureMembers");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var d={srsName:this.srsName,hasZ:this.hasZ,curve:this.c,surface:this.l,multiSurface:this.j,multiCurve:this.g,featureNS:this.featureNS,featureType:this.featureType};b&&tb(d,b);b=[d];var e=b[b.length-1],d=e.featureType,f=e.featureNS,g={};g[f]={};g[f][d]=J(this.ii,this);e=tb({},e);e.node=c;Bl(e,g,wl(d,f),a,b);return c};function an(a){a=a?a:{};Fm.call(this,a);this.b["http://www.opengis.net/gml"].featureMember=rl(Fm.prototype.be);this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}v(an,Fm);k=an.prototype;k.$i=function(a,b){a=kl(a,!1).replace(/^\s*|\s*$/g,"");var c=b[0].srsName;b="enu";c&&(c=Tb(c))&&(b=c.b);a=a.trim().split(/\s+/);for(var d,e,f=[],g=0,h=a.length;g<h;g++)e=a[g].split(/,+/),c=parseFloat(e[0]),d=parseFloat(e[1]),e=3===e.length?parseFloat(e[2]):0,"en"===b.substr(0,2)?f.push(c,d,e):f.push(d,c,e);return f};k.tp=function(a,b){a=N([null],this.Gj,a,b,this);return Xa(a[1][0],a[1][1],a[1][3],a[1][4])};k.am=function(a,b){(a=N(void 0,this.le,a,b,this))&&b[b.length-1].push(a)};k.bp=function(a,b){(a=N(void 0,this.le,a,b,this))&&(b[b.length-1][0]=a)};k.ke={"http://www.opengis.net/gml":{coordinates:sl(an.prototype.$i)}};k.zf={"http://www.opengis.net/gml":{innerBoundaryIs:an.prototype.am,outerBoundaryIs:an.prototype.bp}};k.Gj={"http://www.opengis.net/gml":{coordinates:rl(an.prototype.$i)}};k.Zg={"http://www.opengis.net/gml":{Point:sl(Fm.prototype.fj),MultiPoint:sl(Fm.prototype.dj),LineString:sl(Fm.prototype.hf),MultiLineString:sl(Fm.prototype.cj),LinearRing:sl(Fm.prototype.bj),Polygon:sl(Fm.prototype.jf),MultiPolygon:sl(Fm.prototype.ej),Box:sl(an.prototype.tp)}};k.jg=function(a,b){var c=b[b.length-1];b=c.multiSurface;var d=c.surface,c=c.multiCurve;Array.isArray(a)?a="Envelope":(a=a.U(),"MultiPolygon"===a&&!0===b?a="MultiSurface":"Polygon"===a&&!0===d?a="Surface":"MultiLineString"===a&&!0===c&&(a="MultiCurve"));return jl("http://www.opengis.net/gml",a)};k.ai=function(a,b,c){var d=c[c.length-1],e=tb({},d);e.node=a;var f;Array.isArray(b)?d.dataProjection?f=hc(b,d.featureProjection,d.dataProjection):f=b:f=Hl(b,!0,d);Bl(e,bn,this.jg,[f],c,void 0,this)};k.Pe=function(a,b,c){var d=c[c.length-1].srsName;"LineStringSegment"!==a.nodeName&&d&&a.setAttribute("srsName",d);"LineString"===a.nodeName||"LineStringSegment"===a.nodeName?(d=cn(a.namespaceURI),a.appendChild(d),dn(d,b,c)):"Curve"===a.nodeName&&(d=jl(a.namespaceURI,"segments"),a.appendChild(d),a=jl(d.namespaceURI,"LineStringSegment"),d.appendChild(a),this.Pe(a,b,c))};function cn(a){a=jl(a,"coordinates");a.setAttribute("decimal",".");a.setAttribute("cs",",");a.setAttribute("ts"," ");return a}
function dn(a,b,c){var d=c[c.length-1];c=d.hasZ;d=d.srsName;b=b.X();for(var e=b.length,f=Array(e),g,h=0;h<e;++h)g=b[h],f[h]=en(g,d,c);Pm(a,f.join(" "))}
k.Qe=function(a,b,c){var d=c[c.length-1],e=d.hasZ,d=d.srsName;"PolygonPatch"!==a.nodeName&&d&&a.setAttribute("srsName",d);"Polygon"===a.nodeName||"PolygonPatch"===a.nodeName?(b=b.Sd(),Bl({node:a,hasZ:e,srsName:d},fn,this.dn,b,c,void 0,this)):"Surface"===a.nodeName&&(e=jl(a.namespaceURI,"patches"),a.appendChild(e),a=jl(e.namespaceURI,"PolygonPatch"),e.appendChild(a),this.Qe(a,b,c))};k.dn=function(a,b){a=b[b.length-1];b=a.node;var c=a.exteriorWritten;void 0===c&&(a.exteriorWritten=!0);return jl(b.namespaceURI,void 0!==c?"innerBoundaryIs":"outerBoundaryIs")};k.gi=function(a,b,c){var d=jl(a.namespaceURI,"LinearRing");a.appendChild(d);this.ci(d,b,c)};function en(a,b,c){var d="enu";b&&(d=Tb(b).b);b="en"===d.substr(0,2)?a[0]+","+a[1]:a[1]+","+a[0];c&&(b+=","+(a[2]||0));return b}
k.di=function(a,b,c){var d=c[c.length-1],e=d.hasZ,f=d.srsName,d=d.curve;f&&a.setAttribute("srsName",f);b=b.gd();Bl({node:a,hasZ:e,srsName:f,curve:d},gn,this.a,b,c,void 0,this)};k.fi=function(a,b,c){var d=c[c.length-1];c=d.hasZ;var e=d.srsName;e&&a.setAttribute("srsName",e);d=cn(a.namespaceURI);a.appendChild(d);a=b.X();a=en(a,e,c);Pm(d,a)};k.fn=function(a,b,c){var d=c[c.length-1],e=d.hasZ;(d=d.srsName)&&a.setAttribute("srsName",d);b=b.Zd();Bl({node:a,hasZ:e,srsName:d},hn,wl("pointMember"),b,c,void 0,this)};k.gn=function(a,b,c){var d=jl(a.namespaceURI,"Point");a.appendChild(d);this.fi(d,b,c)};k.bi=function(a,b,c){var d=this.jg(b,c);d&&(a.appendChild(d),this.Pe(d,b,c))};k.ci=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=cn(a.namespaceURI);a.appendChild(d);dn(d,b,c)};k.ei=function(a,b,c){var d=c[c.length-1],e=d.hasZ,f=d.srsName,d=d.surface;f&&a.setAttribute("srsName",f);b=b.Td();Bl({node:a,hasZ:e,srsName:f,surface:d},jn,this.a,b,c,void 0,this)};k.hi=function(a,b,c){var d=this.jg(b,c);d&&(a.appendChild(d),this.Qe(d,b,c))};k.en=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);Bl({node:a},kn,yl,[b[0]+" "+b[1],b[2]+" "+b[3]],c,["lowerCorner","upperCorner"],this)};var bn={"http://www.opengis.net/gml":{Curve:J(an.prototype.Pe),MultiCurve:J(an.prototype.di),Point:J(an.prototype.fi),MultiPoint:J(an.prototype.fn),LineString:J(an.prototype.Pe),MultiLineString:J(an.prototype.di),LinearRing:J(an.prototype.ci),Polygon:J(an.prototype.Qe),MultiPolygon:J(an.prototype.ei),Surface:J(an.prototype.Qe),MultiSurface:J(an.prototype.ei),Envelope:J(an.prototype.en)}},fn={"http://www.opengis.net/gml":{outerBoundaryIs:J(an.prototype.gi),innerBoundaryIs:J(an.prototype.gi)}},hn={"http://www.opengis.net/gml":{pointMember:J(an.prototype.gn)}},gn={"http://www.opengis.net/gml":{lineStringMember:J(an.prototype.bi),curveMember:J(an.prototype.bi)}};an.prototype.a=function(a,b){return jl("http://www.opengis.net/gml",ln[b[b.length-1].node.nodeName])};var ln={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"},jn={"http://www.opengis.net/gml":{surfaceMember:J(an.prototype.hi),polygonMember:J(an.prototype.hi)}},kn={"http://www.opengis.net/gml":{lowerCorner:J(Pm),upperCorner:J(Pm)}};function mn(a){a=a?a:{};Cm.call(this);this.defaultDataProjection=Tb("EPSG:4326");this.b=a.readExtensions}v(mn,Cm);var nn=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"];function on(a,b,c,d){a.push(parseFloat(c.getAttribute("lon")),parseFloat(c.getAttribute("lat")));"ele"in d?(a.push(d.ele),delete d.ele,b.hasZ=!0):a.push(0);"time"in d?(a.push(d.time),delete d.time,b.hasM=!0):a.push(0);return a}
function pn(a,b,c){var d="XY",e=2;a.hasZ&&a.hasM?(d="XYZM",e=4):a.hasZ?(d="XYZ",e=3):a.hasM&&(d="XYM",e=3);if(4!==e){var f;var g=0;for(f=b.length/4;g<f;g++)b[g*e]=b[4*g],b[g*e+1]=b[4*g+1],a.hasZ&&(b[g*e+2]=b[4*g+2]),a.hasM&&(b[g*e+2]=b[4*g+3]);b.length=b.length/4*e;if(c)for(g=0,f=c.length;g<f;g++)c[g]=c[g]/4*e}return d}function qn(a,b){var c=b[b.length-1],d=a.getAttribute("href");null!==d&&(c.link=d);Al(rn,a,b)}function sn(a,b){b[b.length-1].extensionsNode_=a}
function tn(a,b){var c=b[0];if(a=N({flatCoordinates:[],layoutOptions:{}},un,a,b)){b=a.flatCoordinates;delete a.flatCoordinates;var d=a.layoutOptions;delete a.layoutOptions;var d=pn(d,b),e=new O(null);e.ba(d,b);Hl(e,!1,c);c=new H(e);c.H(a);return c}}
function vn(a,b){var c=b[0];if(a=N({flatCoordinates:[],ends:[],layoutOptions:{}},wn,a,b)){b=a.flatCoordinates;delete a.flatCoordinates;var d=a.ends;delete a.ends;var e=a.layoutOptions;delete a.layoutOptions;var e=pn(e,b,d),f=new P(null);f.ba(e,b,d);Hl(f,!1,c);c=new H(f);c.H(a);return c}}function xn(a,b){var c=b[0];if(b=N({},yn,a,b)){var d={};a=on([],d,a,b);d=pn(d,a);a=new C(a,d);Hl(a,!1,c);c=new H(a);c.H(b);return c}}
var zn={rte:tn,trk:vn,wpt:xn},An=K(nn,{rte:rl(tn),trk:rl(vn),wpt:rl(xn)}),rn=K(nn,{text:I(S,"linkText"),type:I(S,"linkType")}),un=K(nn,{name:I(S),cmt:I(S),desc:I(S),src:I(S),link:qn,number:I(Mm),extensions:sn,type:I(S),rtept:function(a,b){var c=N({},Bn,a,b);c&&(b=b[b.length-1],on(b.flatCoordinates,b.layoutOptions,a,c))}}),Bn=K(nn,{ele:I(Km),time:I(Jm)}),wn=K(nn,{name:I(S),cmt:I(S),desc:I(S),src:I(S),link:qn,number:I(Mm),type:I(S),extensions:sn,trkseg:function(a,b){var c=b[b.length-1];Al(Cn,a,b);c.ends.push(c.flatCoordinates.length)}}),Cn=K(nn,{trkpt:function(a,b){var c=N({},Dn,a,b);c&&(b=b[b.length-1],on(b.flatCoordinates,b.layoutOptions,a,c))}}),Dn=K(nn,{ele:I(Km),time:I(Jm)}),yn=K(nn,{ele:I(Km),time:I(Jm),magvar:I(Km),geoidheight:I(Km),name:I(S),cmt:I(S),desc:I(S),src:I(S),link:qn,sym:I(S),type:I(S),fix:I(S),sat:I(Mm),hdop:I(Km),vdop:I(Km),pdop:I(Km),ageofdgpsdata:I(Km),dgpsid:I(Mm),extensions:sn});function En(a,b){b||(b=[]);for(var c=0,d=b.length;c<d;++c){var e=b[c];if(a.b){var f=e.get("extensionsNode_")||null;a.b(e,f)}e.set("extensionsNode_",void 0)}}mn.prototype.xg=function(a,b){if(!ja(nn,a.namespaceURI))return null;var c=zn[a.localName];if(!c)return null;a=c(a,[Fl(this,a,b)]);if(!a)return null;En(this,[a]);return a};mn.prototype.zc=function(a,b){return ja(nn,a.namespaceURI)?"gpx"==a.localName&&(a=N([],An,a,[Fl(this,a,b)]))?(En(this,a),a):[]:[]};function Fn(a,b,c){a.setAttribute("href",b);b=c[c.length-1].properties;Bl({node:a},Gn,yl,[b.linkText,b.linkType],c,Hn)}function In(a,b,c){var d=c[c.length-1],e=d.node.namespaceURI,f=d.properties;a.setAttributeNS(null,"lat",b[1]);a.setAttributeNS(null,"lon",b[0]);switch(d.geometryLayout){case "XYZM":b[3]&&(f.time=b[3]);case "XYZ":b[2]&&(f.ele=b[2]);break;case "XYM":b[2]&&(f.time=b[2])}b="rtept"==a.nodeName?Jn[e]:Kn[e];d=zl(f,b);Bl({node:a,properties:f},Ln,yl,d,c,b)}
var Hn=["text","type"],Gn=K(nn,{text:J(Pm),type:J(Pm)}),Mn=K(nn,"name cmt desc src link number type rtept".split(" ")),Nn=K(nn,{name:J(Pm),cmt:J(Pm),desc:J(Pm),src:J(Pm),link:J(Fn),number:J(Rm),type:J(Pm),rtept:vl(J(In))}),Jn=K(nn,["ele","time"]),On=K(nn,"name cmt desc src link number type trkseg".split(" ")),Rn=K(nn,{name:J(Pm),cmt:J(Pm),desc:J(Pm),src:J(Pm),link:J(Fn),number:J(Rm),type:J(Pm),trkseg:vl(J(function(a,b,c){Bl({node:a,geometryLayout:b.ja,properties:{}},Pn,Qn,b.X(),c)}))}),Qn=wl("trkpt"),Pn=K(nn,{trkpt:J(In)}),Kn=K(nn,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),Ln=K(nn,{ele:J(Qm),time:J(function(a,b){b=new Date(1E3*b);a.appendChild(il.createTextNode(b.getUTCFullYear()+"-"+Xe(b.getUTCMonth()+1)+"-"+Xe(b.getUTCDate())+"T"+Xe(b.getUTCHours())+":"+Xe(b.getUTCMinutes())+":"+Xe(b.getUTCSeconds())+"Z"))}),magvar:J(Qm),geoidheight:J(Qm),name:J(Pm),cmt:J(Pm),desc:J(Pm),src:J(Pm),link:J(Fn),sym:J(Pm),type:J(Pm),fix:J(Pm),sat:J(Rm),hdop:J(Qm),vdop:J(Qm),pdop:J(Qm),ageofdgpsdata:J(Qm),dgpsid:J(Rm)}),Sn={Point:"wpt",LineString:"rte",MultiLineString:"trk"};function Tn(a,b){if(a=a.V())if(a=Sn[a.U()])return jl(b[b.length-1].node.namespaceURI,a)}
var Un=K(nn,{rte:J(function(a,b,c){var d=c[0],e=b.N();a={node:a,properties:e};if(b=b.V())b=Hl(b,!0,d),a.geometryLayout=b.ja,e.rtept=b.X();d=Mn[c[c.length-1].node.namespaceURI];e=zl(e,d);Bl(a,Nn,yl,e,c,d)}),trk:J(function(a,b,c){var d=c[0],e=b.N();a={node:a,properties:e};if(b=b.V())b=Hl(b,!0,d),e.trkseg=b.gd();d=On[c[c.length-1].node.namespaceURI];e=zl(e,d);Bl(a,Rn,yl,e,c,d)}),wpt:J(function(a,b,c){var d=c[0],e=c[c.length-1];e.properties=b.N();if(b=b.V())b=Hl(b,!0,d),e.geometryLayout=b.ja,In(a,b.X(),c)})});mn.prototype.Xb=function(a,b){b=Gl(this,b);var c=jl("http://www.topografix.com/GPX/1/1","gpx");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");c.setAttribute("version","1.1");c.setAttribute("creator","OpenLayers");Bl({node:c},Un,Tn,a,[b]);return c};function Vn(){El.call(this)}v(Vn,El);function Wn(a){return"string"===typeof a?a:""}k=Vn.prototype;k.U=function(){return"text"};k.Tb=function(a,b){return this.ae(Wn(a),Gl(this,b))};k.Oa=function(a,b){return this.zg(Wn(a),Gl(this,b))};k.Sc=function(a,b){return this.wd(Wn(a),Gl(this,b))};k.kb=function(){return this.defaultDataProjection};k.Bd=function(a,b){return this.ge(a,Gl(this,b))};k.Wb=function(a,b){return this.Wg(a,Gl(this,b))};k.$c=function(a,b){return this.Cd(a,Gl(this,b))};function Xn(a){a=a?a:{};El.call(this);this.defaultDataProjection=Tb("EPSG:4326");this.b=a.altitudeMode?a.altitudeMode:"none"}v(Xn,Vn);var Yn=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,Zn=/^H.([A-Z]{3}).*?:(.*)/,$n=/^HFDTE(\d{2})(\d{2})(\d{2})/,ao=/\r\n|\r|\n/;k=Xn.prototype;k.ae=function(a,b){var c=this.b,d=a.split(ao);a={};var e=[],f=2E3,g=0,h=1,l=-1,m;var n=0;for(m=d.length;n<m;++n){var p=d[n],q;if("B"==p.charAt(0)){if(q=Yn.exec(p)){var p=parseInt(q[1],10),r=parseInt(q[2],10),u=parseInt(q[3],10),x=parseInt(q[4],10)+parseInt(q[5],10)/6E4;"S"==q[6]&&(x=-x);var B=parseInt(q[7],10)+parseInt(q[8],10)/6E4;"W"==q[9]&&(B=-B);e.push(B,x);"none"!=c&&e.push("gps"==c?parseInt(q[11],10):"barometric"==c?parseInt(q[12],10):0);q=Date.UTC(f,g,h,p,r,u);q<l&&(q=Date.UTC(f,g,h+1,p,r,u));e.push(q/1E3);l=q}}else"H"==p.charAt(0)&&((q=$n.exec(p))?(h=parseInt(q[1],10),g=parseInt(q[2],10)-1,f=2E3+parseInt(q[3],10)):(q=Zn.exec(p))&&(a[q[1]]=q[2].trim()))}if(!e.length)return null;d=new O(null);d.ba("none"==c?"XYM":"XYZM",e);b=new H(Hl(d,!1,b));b.H(a);return b};k.zg=function(a,b){return(a=this.ae(a,b))?[a]:[]};k.ge=function(){};k.Wg=function(){};k.Cd=function(){};k.wd=function(){};function bo(a,b,c,d,e,f){Qc.call(this);this.j=null;this.M=a?a:new Image;null!==d&&(this.M.crossOrigin=d);this.c=f?document.createElement("CANVAS"):null;this.g=f;this.f=null;this.i=e;this.a=c;this.o=b;this.l=!1;2==this.i&&co(this)}v(bo,Qc);function co(a){var b=jd(1,1);try{b.drawImage(a.M,0,0),b.getImageData(0,0,1,1)}catch(c){a.l=!0}}bo.prototype.v=function(){this.i=3;this.f.forEach(Ec);this.f=null;this.b("change")};bo.prototype.u=function(){this.i=2;this.a&&(this.M.width=this.a[0],this.M.height=this.a[1]);this.a=[this.M.width,this.M.height];this.f.forEach(Ec);this.f=null;co(this);if(!this.l&&null!==this.g){this.c.width=this.M.width;this.c.height=this.M.height;var a=this.c.getContext("2d");a.drawImage(this.M,0,0);for(var b=a.getImageData(0,0,this.M.width,this.M.height),c=b.data,d=this.g[0]/255,e=this.g[1]/255,f=this.g[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}this.b("change")};bo.prototype.Y=function(){return this.c?this.c:this.M};bo.prototype.load=function(){if(0==this.i){this.i=1;this.f=[Jc(this.M,"error",this.v,this),Jc(this.M,"load",this.u,this)];try{this.M.src=this.o}catch(a){this.v()}}};function eo(a){a=a||{};this.o=void 0!==a.anchor?a.anchor:[.5,.5];this.u=null;this.i=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.C=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.B=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";this.ra=void 0!==a.crossOrigin?a.crossOrigin:null;var b=void 0!==a.img?a.img:null,c=void 0!==a.imgSize?a.imgSize:null,d=a.src;xa(!(void 0!==d&&b),4);xa(!b||b&&c,5);void 0!==d&&d.length||!b||(d=b.src||w(b).toString());xa(void 0!==d&&0<d.length,6);var e=void 0!==a.src?0:2;this.j=void 0!==a.color?ed(a.color):null;var f=this.ra,g=this.j,h=zh.get(d,f,g);h||(h=new bo(b,d,c,f,e,g),zh.set(d,f,g,h));this.b=h;this.oa=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.S=null;this.D=void 0!==a.size?a.size:null;Xk.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1})}v(eo,Xk);k=eo.prototype;k.clone=function(){var a=this.Y(1);if(2===this.b.i)if("IMG"===a.tagName.toUpperCase())var b=a.cloneNode(!0);else{b=document.createElement("canvas");var c=b.getContext("2d");b.width=a.width;b.height=a.height;c.drawImage(a,0,0)}return new eo({anchor:this.o.slice(),anchorOrigin:this.i,anchorXUnits:this.C,anchorYUnits:this.B,crossOrigin:this.ra,color:this.j&&this.j.slice?this.j.slice():this.j||void 0,img:b?b:void 0,imgSize:b?this.b.a.slice():void 0,src:b?void 0:this.b.o,offset:this.oa.slice(),offsetOrigin:this.c,size:null!==this.D?this.D.slice():void 0,opacity:this.f,scale:this.a,snapToPixel:this.v,rotation:this.g,rotateWithView:this.l})};k.Hc=function(){if(this.u)return this.u;var a=this.o,b=this.ic();if("fraction"==this.C||"fraction"==this.B){if(!b)return null;a=this.o.slice();"fraction"==this.C&&(a[0]*=b[0]);"fraction"==this.B&&(a[1]*=b[1])}if("top-left"!=this.i){if(!b)return null;a===this.o&&(a=this.o.slice());if("top-right"==this.i||"bottom-right"==this.i)a[0]=-a[0]+b[0];if("bottom-left"==this.i||"bottom-right"==this.i)a[1]=-a[1]+b[1]}return this.u=a};k.Lo=function(){return this.j};k.Y=function(a){return this.b.Y(a)};k.ye=function(){return this.b.a};k.Ye=function(){return this.b.i};k.qg=function(){var a=this.b;if(!a.j)if(a.l){var b=a.a[0],c=a.a[1],d=jd(b,c);d.fillRect(0,0,b,c);a.j=d.canvas}else a.j=a.M;return a.j};k.Oc=function(){if(this.S)return this.S;var a=this.oa;if("top-left"!=this.c){var b=this.ic(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.S=a};k.Mo=function(){return this.b.o};k.ic=function(){return this.D?this.D:this.b.a};k.Nh=function(a,b){return y(this.b,"change",a,b)};k.load=function(){this.b.load()};k.Bj=function(a,b){Kc(this.b,"change",a,b)};function fo(a){a=a||{};this.a=a.font;this.f=a.rotation;this.o=a.rotateWithView;this.b=a.scale;this.Ia=a.text;this.g=a.textAlign;this.j=a.textBaseline;this.Va=void 0!==a.fill?a.fill:new al({color:"#333"});this.Ya=void 0!==a.stroke?a.stroke:null;this.i=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0}k=fo.prototype;k.clone=function(){return new fo({font:this.a,rotation:this.f,rotateWithView:this.o,scale:this.b,text:this.Na(),textAlign:this.g,textBaseline:this.j,fill:this.Fa()?this.Fa().clone():void 0,stroke:this.Ga()?this.Ga().clone():void 0,offsetX:this.i,offsetY:this.c})};k.Nk=function(){return this.a};k.cl=function(){return this.i};k.dl=function(){return this.c};k.Fa=function(){return this.Va};k.Ro=function(){return this.o};k.So=function(){return this.f};k.To=function(){return this.b};k.Ga=function(){return this.Ya};k.Na=function(){return this.Ia};k.nl=function(){return this.g};k.ol=function(){return this.j};k.nj=function(a){this.a=a};k.sj=function(a){this.i=a};k.tj=function(a){this.c=a};k.pf=function(a){this.Va=a};k.Uo=function(a){this.f=a};k.Si=function(a){this.b=a};k.qf=function(a){this.Ya=a};k.xd=function(a){this.Ia=a};k.vj=function(a){this.g=a};k.hq=function(a){this.j=a};function go(a){a=a?a:{};Cm.call(this);ho||(io=[255,255,255,1],jo=new al({color:io}),ko=[20,2],lo=mo="pixels",no=[64,64],oo="https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",po=.5,qo=new eo({anchor:ko,anchorOrigin:"bottom-left",anchorXUnits:mo,anchorYUnits:lo,crossOrigin:"anonymous",rotation:0,scale:po,size:no,src:oo}),ro="NO_IMAGE",so=new wj({color:io,width:1}),to=new wj({color:[51,51,51,1],width:2}),uo=new fo({font:"bold 16px Helvetica",fill:jo,stroke:to,scale:.8}),vo=new bl({fill:jo,image:qo,text:uo,stroke:so,zIndex:0}),ho=[vo]);this.defaultDataProjection=Tb("EPSG:4326");this.a=a.defaultStyle?a.defaultStyle:ho;this.c=void 0!==a.extractStyles?a.extractStyles:!0;this.j=void 0!==a.writeStyles?a.writeStyles:!0;this.b={};this.g=void 0!==a.showPointNames?a.showPointNames:!0}var ho,io,jo,ko,mo,lo,no,oo,po,qo,ro,so,to,uo,vo;v(go,Cm);var wo=["http://www.google.com/kml/ext/2.2"],xo=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],yo={fraction:"fraction",pixels:"pixels",insetPixels:"pixels"};function zo(a,b){var c=[0,0],d="start";if(a.Y()){var e=a.Y().ye();null===e&&(e=no);2==e.length&&(d=a.Y().a,c[0]=d*e[0]/2,c[1]=-d*e[1]/2,d="left")}null!==a.Na()?(e=a.Na(),a=e.clone(),a.nj(e.a||uo.a),a.Si(e.b||uo.b),a.pf(e.Fa()||uo.Fa()),a.qf(e.Ga()||to)):a=uo.clone();a.xd(b);a.sj(c[0]);a.tj(c[1]);a.vj(d);return new bl({text:a})}
function Ao(a,b,c,d,e){return function(){var f=e,g="";f&&this.V()&&(f="Point"===this.V().U());f&&(g=this.get("name"),f=f&&g);if(a)return f?(f=zo(a[0],g),a.concat(f)):a;if(b){var h=Bo(b,c,d);return f?(f=zo(h[0],g),h.concat(f)):h}return f?(f=zo(c[0],g),c.concat(f)):c}}function Bo(a,b,c){return Array.isArray(a)?a:"string"===typeof a?(!(a in c)&&"#"+a in c&&(a="#"+a),Bo(c[a],b,c)):b}
function Co(a){a=kl(a,!1);if(a=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(a))return a=a[1],[parseInt(a.substr(6,2),16),parseInt(a.substr(4,2),16),parseInt(a.substr(2,2),16),parseInt(a.substr(0,2),16)/255]}function Do(a){a=kl(a,!1);for(var b=[],c=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i,d;d=c.exec(a);)b.push(parseFloat(d[1]),parseFloat(d[2]),d[3]?parseFloat(d[3]):0),a=a.substr(d[0].length);if(""===a)return b}
function Eo(a){var b=kl(a,!1).trim();return a.baseURI&&"about:blank"!==a.baseURI?(new URL(b,a.baseURI)).href:b}function Fo(a){return Km(a)}function Go(a,b){return N(null,Ho,a,b)}function Io(a,b){if(b=N({A:[],Ej:[]},Jo,a,b)){a=b.A;b=b.Ej;var c;var d=0;for(c=Math.min(a.length,b.length);d<c;++d)a[4*d+3]=b[d];b=new O(null);b.ba("XYZM",a);return b}}function Ko(a,b){var c=N({},Lo,a,b);if(a=N(null,Mo,a,b))return b=new O(null),b.ba("XYZ",a),b.H(c),b}
function No(a,b){var c=N({},Lo,a,b);if(a=N(null,Mo,a,b))return b=new D(null),b.ba("XYZ",a,[a.length]),b.H(c),b}
function Oo(a,b){a=N([],Po,a,b);if(!a)return null;if(!a.length)return new tm(a);var c=!0,d=a[0].U(),e;var f=1;for(e=a.length;f<e;++f)if(b=a[f],b.U()!=d){c=!1;break}if(c)if("Point"==d){var g=a[0];c=g.ja;d=g.ga();f=1;for(e=a.length;f<e;++f)b=a[f],la(d,b.ga());g=new Q(null);g.ba(c,d);Qo(g,a)}else"LineString"==d?(g=new P(null),Nl(g,a),Qo(g,a)):"Polygon"==d?(g=new R(null),Pl(g,a),Qo(g,a)):"GeometryCollection"==d?g=new tm(a):xa(!1,37);else g=new tm(a);return g}
function Ro(a,b){var c=N({},Lo,a,b);if(a=N(null,Mo,a,b))return b=new C(null),b.ba("XYZ",a),b.H(c),b}function So(a,b){var c=N({},Lo,a,b);if((a=N([null],To,a,b))&&a[0]){b=new D(null);var d=a[0],e=[d.length],f;var g=1;for(f=a.length;g<f;++g)la(d,a[g]),e.push(d.length);b.ba("XYZ",d,e);b.H(c);return b}}
function Uo(a,b){b=N({},Vo,a,b);if(!b)return null;a="fillStyle"in b?b.fillStyle:jo;var c=b.fill;void 0===c||c||(a=null);c="imageStyle"in b?b.imageStyle:qo;c==ro&&(c=void 0);var d="textStyle"in b?b.textStyle:uo,e="strokeStyle"in b?b.strokeStyle:so;b=b.outline;void 0===b||b||(e=null);return[new bl({fill:a,image:c,stroke:e,text:d,zIndex:void 0})]}
function Qo(a,b){var c=b.length,d=Array(b.length),e=Array(b.length),f,g;var h=g=!1;for(f=0;f<c;++f){var l=b[f];d[f]=l.get("extrude");e[f]=l.get("altitudeMode");h=h||void 0!==d[f];g=g||e[f]}h&&a.set("extrude",d);g&&a.set("altitudeMode",e)}function Wo(a,b){Al(Xo,a,b)}function Yo(a,b){Al(Zo,a,b)}
var $o=K(xo,{displayName:I(S),value:I(S)}),Xo=K(xo,{Data:function(a,b){var c=a.getAttribute("name");Al($o,a,b);a=b[b.length-1];null!==c?a[c]=a.value:null!==a.displayName&&(a[a.displayName]=a.value)},SchemaData:function(a,b){Al(ap,a,b)}}),Zo=K(xo,{LatLonAltBox:function(a,b){if(a=N({},bp,a,b))b=b[b.length-1],b.extent=[parseFloat(a.west),parseFloat(a.south),parseFloat(a.east),parseFloat(a.north)],b.altitudeMode=a.altitudeMode,b.minAltitude=parseFloat(a.minAltitude),b.maxAltitude=parseFloat(a.maxAltitude)},Lod:function(a,b){if(a=N({},cp,a,b))b=b[b.length-1],b.minLodPixels=parseFloat(a.minLodPixels),b.maxLodPixels=parseFloat(a.maxLodPixels),b.minFadeExtent=parseFloat(a.minFadeExtent),b.maxFadeExtent=parseFloat(a.maxFadeExtent)}}),bp=K(xo,{altitudeMode:I(S),minAltitude:I(Km),maxAltitude:I(Km),north:I(Km),south:I(Km),east:I(Km),west:I(Km)}),cp=K(xo,{minLodPixels:I(Km),maxLodPixels:I(Km),minFadeExtent:I(Km),maxFadeExtent:I(Km)}),Lo=K(xo,{extrude:I(Hm),altitudeMode:I(S)}),Ho=K(xo,{coordinates:sl(Do)}),To=K(xo,{innerBoundaryIs:function(a,b){(a=N(void 0,dp,a,b))&&b[b.length-1].push(a)},outerBoundaryIs:function(a,b){(a=N(void 0,ep,a,b))&&(b[b.length-1][0]=a)}}),Jo=K(xo,{when:function(a,b){b=b[b.length-1].Ej;a=kl(a,!1);a=Date.parse(a);b.push(isNaN(a)?0:a)}},K(wo,{coord:function(a,b){b=b[b.length-1].A;a=kl(a,!1);(a=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(a))?b.push(parseFloat(a[1]),parseFloat(a[2]),parseFloat(a[3]),0):b.push(0,0,0,0)}})),Mo=K(xo,{coordinates:sl(Do)}),fp=K(xo,{href:I(Eo)},K(wo,{x:I(Km),y:I(Km),w:I(Km),h:I(Km)})),gp=K(xo,{Icon:I(function(a,b){return(a=N({},fp,a,b))?a:null}),heading:I(Km),hotSpot:I(function(a){var b=a.getAttribute("xunits"),c=a.getAttribute("yunits");var d="insetPixels"!==b?"insetPixels"!==c?"bottom-left":"top-left":"insetPixels"!==c?"bottom-right":"top-right";return{x:parseFloat(a.getAttribute("x")),Xg:yo[b],y:parseFloat(a.getAttribute("y")),Yg:yo[c],origin:d}}),scale:I(Fo)}),dp=K(xo,{LinearRing:sl(Go)}),hp=K(xo,{color:I(Co),scale:I(Fo)}),ip=K(xo,{color:I(Co),width:I(Km)}),Po=K(xo,{LineString:rl(Ko),LinearRing:rl(No),MultiGeometry:rl(Oo),Point:rl(Ro),Polygon:rl(So)}),jp=K(wo,{Track:rl(Io)}),lp=K(xo,{ExtendedData:Wo,Region:Yo,Link:function(a,b){Al(kp,a,b)},address:I(S),description:I(S),name:I(S),open:I(Hm),phoneNumber:I(S),visibility:I(Hm)}),kp=K(xo,{href:I(Eo)}),ep=K(xo,{LinearRing:sl(Go)}),mp=K(xo,{Style:I(Uo),key:I(S),styleUrl:I(Eo)}),op=K(xo,{ExtendedData:Wo,Region:Yo,MultiGeometry:I(Oo,"geometry"),LineString:I(Ko,"geometry"),LinearRing:I(No,"geometry"),Point:I(Ro,"geometry"),Polygon:I(So,"geometry"),Style:I(Uo),StyleMap:function(a,b){if(a=N(void 0,np,a,b))b=b[b.length-1],Array.isArray(a)?b.Style=a:"string"===typeof a?b.styleUrl=a:xa(!1,38)},address:I(S),description:I(S),name:I(S),open:I(Hm),phoneNumber:I(S),styleUrl:I(Eo),visibility:I(Hm)},K(wo,{MultiTrack:I(function(a,b){if(a=N([],jp,a,b))return b=new P(null),Nl(b,a),b},"geometry"),Track:I(Io,"geometry")})),pp=K(xo,{color:I(Co),fill:I(Hm),outline:I(Hm)}),ap=K(xo,{SimpleData:function(a,b){var c=a.getAttribute("name");null!==c&&(a=S(a),b[b.length-1][c]=a)}}),Vo=K(xo,{IconStyle:function(a,b){if(a=N({},gp,a,b)){b=b[b.length-1];var c="Icon"in a?a.Icon:{},d=!("Icon"in a)||0<Object.keys(c).length,e,f=c.href;f?e=f:d&&(e=oo);var f="bottom-left",g=a.hotSpot;if(g){var h=[g.x,g.y];var l=g.Xg;var m=g.Yg;f=g.origin}else e===oo?(h=ko,l=mo,m=lo):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(e)&&(h=[.5,0],m=l="fraction");var n,g=c.x,p=c.y;void 0!==g&&void 0!==p&&(n=[g,p]);var q,g=c.w,c=c.h;void 0!==g&&void 0!==c&&(q=[g,c]);var r,c=a.heading;void 0!==c&&(r=Ha(c));a=a.scale;d?(e==oo&&(q=no,void 0===a&&(a=po)),e=new eo({anchor:h,anchorOrigin:f,anchorXUnits:l,anchorYUnits:m,crossOrigin:"anonymous",offset:n,offsetOrigin:"bottom-left",rotation:r,scale:a,size:q,src:e}),b.imageStyle=e):b.imageStyle=ro}},LabelStyle:function(a,b){(a=N({},hp,a,b))&&(b[b.length-1].textStyle=new fo({fill:new al({color:"color"in a?a.color:io}),scale:a.scale}))},LineStyle:function(a,b){(a=N({},ip,a,b))&&(b[b.length-1].strokeStyle=new wj({color:"color"in a?a.color:io,width:"width"in a?a.width:1}))},PolyStyle:function(a,b){if(a=N({},pp,a,b)){b=b[b.length-1];b.fillStyle=new al({color:"color"in a?a.color:io});var c=a.fill;void 0!==c&&(b.fill=c);a=a.outline;void 0!==a&&(b.outline=a)}}}),np=K(xo,{Pair:function(a,b){if(a=N({},mp,a,b)){var c=a.key;c&&"normal"==c&&((c=a.styleUrl)&&(b[b.length-1]=c),(a=a.Style)&&(b[b.length-1]=a))}}});k=go.prototype;k.vg=function(a,b){var c=K(xo,{Document:ql(this.vg,this),Folder:ql(this.vg,this),Placemark:rl(this.Dg,this),Style:this.Jp.bind(this),StyleMap:this.Ip.bind(this)});if(a=N([],c,a,b,this))return a};k.Dg=function(a,b){var c=N({geometry:null},op,a,b);if(c){var d=new H;a=a.getAttribute("id");null!==a&&d.jc(a);b=b[0];(a=c.geometry)&&Hl(a,!1,b);d.Ra(a);delete c.geometry;this.c&&d.hg(Ao(c.Style,c.styleUrl,this.a,this.b,this.g));delete c.Style;d.H(c);return d}};k.Jp=function(a,b){var c=a.getAttribute("id");null!==c&&(b=Uo(a,b))&&(a=a.baseURI&&"about:blank"!==a.baseURI?(new URL("#"+c,a.baseURI)).href:"#"+c,this.b[a]=b)};k.Ip=function(a,b){var c=a.getAttribute("id");null!==c&&(b=N(void 0,np,a,b))&&(a=a.baseURI&&"about:blank"!==a.baseURI?(new URL("#"+c,a.baseURI)).href:"#"+c,this.b[a]=b)};k.xg=function(a,b){return ja(xo,a.namespaceURI)?(a=this.Dg(a,[Fl(this,a,b)]))?a:null:null};k.zc=function(a,b){if(!ja(xo,a.namespaceURI))return[];var c=a.localName;if("Document"==c||"Folder"==c)return(c=this.vg(a,[Fl(this,a,b)]))?c:[];if("Placemark"==c)return(b=this.Dg(a,[Fl(this,a,b)]))?[b]:[];if("kml"==c){c=[];for(a=a.firstElementChild;a;a=a.nextElementSibling){var d=this.zc(a,b);d&&la(c,d)}return c}return[]};k.Cp=function(a){if(ml(a))return qp(this,a);if(nl(a))return rp(this,a);if("string"===typeof a)return a=pl(a),qp(this,a)};function qp(a,b){for(b=b.firstChild;b;b=b.nextSibling)if(b.nodeType==Node.ELEMENT_NODE){var c=rp(a,b);if(c)return c}}function rp(a,b){var c;for(c=b.firstElementChild;c;c=c.nextElementSibling)if(ja(xo,c.namespaceURI)&&"name"==c.localName)return S(c);for(c=b.firstElementChild;c;c=c.nextElementSibling)if(b=c.localName,ja(xo,c.namespaceURI)&&("Document"==b||"Folder"==b||"Placemark"==b||"kml"==b)&&(b=rp(a,c)))return b}
k.Dp=function(a){var b=[];ml(a)?la(b,sp(this,a)):nl(a)?la(b,tp(this,a)):"string"===typeof a&&(a=pl(a),la(b,sp(this,a)));return b};function sp(a,b){var c=[];for(b=b.firstChild;b;b=b.nextSibling)b.nodeType==Node.ELEMENT_NODE&&la(c,tp(a,b));return c}
function tp(a,b){var c,d=[];for(c=b.firstElementChild;c;c=c.nextElementSibling)if(ja(xo,c.namespaceURI)&&"NetworkLink"==c.localName){var e=N({},lp,c,[]);d.push(e)}for(c=b.firstElementChild;c;c=c.nextElementSibling)b=c.localName,!ja(xo,c.namespaceURI)||"Document"!=b&&"Folder"!=b&&"kml"!=b||la(d,tp(a,c));return d}k.Gp=function(a){var b=[];ml(a)?la(b,up(this,a)):nl(a)?la(b,this.lf(a)):"string"===typeof a&&(a=pl(a),la(b,up(this,a)));return b};function up(a,b){var c=[];for(b=b.firstChild;b;b=b.nextSibling)b.nodeType==Node.ELEMENT_NODE&&la(c,a.lf(b));return c}k.lf=function(a){var b,c=[];for(b=a.firstElementChild;b;b=b.nextElementSibling)if(ja(xo,b.namespaceURI)&&"Region"==b.localName){var d=N({},Zo,b,[]);c.push(d)}for(b=a.firstElementChild;b;b=b.nextElementSibling)a=b.localName,!ja(xo,b.namespaceURI)||"Document"!=a&&"Folder"!=a&&"kml"!=a||la(c,this.lf(b));return c};function vp(a,b){b=ed(b);b=[255*(4==b.length?b[3]:1),b[2],b[1],b[0]];var c;for(c=0;4>c;++c){var d=parseInt(b[c],10).toString(16);b[c]=1==d.length?"0"+d:d}Pm(a,b.join(""))}function wp(a,b,c){a={node:a};var d=b.U();if("GeometryCollection"==d){var e=b.Vf();var f=xp}else"MultiPoint"==d?(e=b.Zd(),f=yp):"MultiLineString"==d?(e=b.gd(),f=zp):"MultiPolygon"==d?(e=b.Td(),f=Ap):xa(!1,39);Bl(a,Bp,f,e,c)}function Cp(a,b,c){Bl({node:a},Dp,Ep,[b],c)}
function Fp(a,b,c){var d={node:a};b.a&&a.setAttribute("id",b.a);a=b.N();var e={address:1,description:1,name:1,open:1,phoneNumber:1,styleUrl:1,visibility:1};e[b.c]=1;var f=Object.keys(a||{}).sort().filter(function(a){return!e[a]});if(0<f.length){var g=zl(a,f);Bl(d,Gp,Hp,[{names:f,values:g}],c)}if(f=b.Lc())if(f=f.call(b,0))f=Array.isArray(f)?f[0]:f,this.j&&(a.Style=f),(f=f.Na())&&(a.name=f.Na());f=Ip[c[c.length-1].node.namespaceURI];a=zl(a,f);Bl(d,Gp,yl,a,c,f);a=c[0];(b=b.V())&&(b=Hl(b,!0,a));Bl(d,Gp,xp,[b],c)}function Jp(a,b,c){var d=b.ga();a={node:a};a.layout=b.ja;a.stride=b.qa();Bl(a,Kp,Lp,[d],c)}function Mp(a,b,c){b=b.Sd();var d=b.shift();a={node:a};Bl(a,Np,Op,b,c);Bl(a,Np,Pp,[d],c)}function Qp(a,b){Qm(a,Math.round(1E6*b)/1E6)}
var Rp=K(xo,["Document","Placemark"]),Up=K(xo,{Document:J(function(a,b,c){Bl({node:a},Sp,Tp,b,c,void 0,this)}),Placemark:J(Fp)}),Sp=K(xo,{Placemark:J(Fp)}),Vp=K(xo,{Data:J(function(a,b,c){a.setAttribute("name",b.name);a={node:a};b=b.value;"object"==typeof b?(null!==b&&b.displayName&&Bl(a,Vp,yl,[b.displayName],c,["displayName"]),null!==b&&b.value&&Bl(a,Vp,yl,[b.value],c,["value"])):Bl(a,Vp,yl,[b],c,["value"])}),value:J(function(a,b){Pm(a,b)}),displayName:J(function(a,b){a.appendChild(il.createCDATASection(b))})}),Wp={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry",GeometryCollection:"MultiGeometry"},Xp=K(xo,["href"],K(wo,["x","y","w","h"])),Yp=K(xo,{href:J(Pm)},K(wo,{x:J(Qm),y:J(Qm),w:J(Qm),h:J(Qm)})),Zp=K(xo,["scale","heading","Icon","hotSpot"]),aq=K(xo,{Icon:J(function(a,b,c){a={node:a};var d=Xp[c[c.length-1].node.namespaceURI],e=zl(b,d);Bl(a,Yp,yl,e,c,d);d=Xp[wo[0]];e=zl(b,d);Bl(a,Yp,$p,e,c,d)}),heading:J(Qm),hotSpot:J(function(a,b){a.setAttribute("x",b.x);a.setAttribute("y",b.y);a.setAttribute("xunits",b.Xg);a.setAttribute("yunits",b.Yg)}),scale:J(Qp)}),bq=K(xo,["color","scale"]),cq=K(xo,{color:J(vp),scale:J(Qp)}),dq=K(xo,["color","width"]),eq=K(xo,{color:J(vp),width:J(Qm)}),Dp=K(xo,{LinearRing:J(Jp)}),Bp=K(xo,{LineString:J(Jp),Point:J(Jp),Polygon:J(Mp),GeometryCollection:J(wp)}),Ip=K(xo,"name open visibility address phoneNumber description styleUrl Style".split(" ")),Gp=K(xo,{ExtendedData:J(function(a,b,c){a={node:a};var d=b.names;b=b.values;for(var e=d.length,f=0;f<e;f++)Bl(a,Vp,fq,[{name:d[f],value:b[f]}],c)}),MultiGeometry:J(wp),LineString:J(Jp),LinearRing:J(Jp),Point:J(Jp),Polygon:J(Mp),Style:J(function(a,b,c){a={node:a};var d={},e=b.Fa(),f=b.Ga(),g=b.Y();b=b.Na();g instanceof eo&&(d.IconStyle=g);b&&(d.LabelStyle=b);f&&(d.LineStyle=f);e&&(d.PolyStyle=e);b=gq[c[c.length-1].node.namespaceURI];d=zl(d,b);Bl(a,hq,yl,d,c,b)}),address:J(Pm),description:J(Pm),name:J(Pm),open:J(Om),phoneNumber:J(Pm),styleUrl:J(Pm),visibility:J(Om)}),Kp=K(xo,{coordinates:J(function(a,b,c){c=c[c.length-1];var d=c.layout;c=c.stride;var e;"XY"==d||"XYM"==d?e=2:"XYZ"==d||"XYZM"==d?e=3:xa(!1,34);var f,g=b.length,h="";if(0<g){h+=b[0];for(d=1;d<e;++d)h+=","+b[d];for(f=c;f<g;f+=c)for(h+=" "+b[f],d=1;d<e;++d)h+=","+b[f+d]}Pm(a,h)})}),Np=K(xo,{outerBoundaryIs:J(Cp),innerBoundaryIs:J(Cp)}),iq=K(xo,{color:J(vp)}),gq=K(xo,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),hq=K(xo,{IconStyle:J(function(a,b,c){a={node:a};var d={},e=b.ic(),f=b.ye(),g={href:b.b.o};if(e){g.w=e[0];g.h=e[1];var h=b.Hc(),l=b.Oc();l&&f&&l[0]&&l[1]!==e[1]&&(g.x=l[0],g.y=f[1]-(l[1]+e[1]));h&&h[0]&&h[1]!==e[1]&&(d.hotSpot={x:h[0],Xg:"pixels",y:e[1]-h[1],Yg:"pixels"})}d.Icon=g;e=b.a;1!==e&&(d.scale=e);(b=b.g)&&(d.heading=b);b=Zp[c[c.length-1].node.namespaceURI];d=zl(d,b);Bl(a,aq,yl,d,c,b)}),LabelStyle:J(function(a,b,c){a={node:a};var d={},e=b.Fa();e&&(d.color=e.b);(b=b.b)&&1!==b&&(d.scale=b);b=bq[c[c.length-1].node.namespaceURI];d=zl(d,b);Bl(a,cq,yl,d,c,b)}),LineStyle:J(function(a,b,c){a={node:a};var d=dq[c[c.length-1].node.namespaceURI];b=zl({color:b.a,width:b.c},d);Bl(a,eq,yl,b,c,d)}),PolyStyle:J(function(a,b,c){Bl({node:a},iq,jq,[b.b],c)})});function $p(a,b,c){return jl(wo[0],"gx:"+c)}function Tp(a,b){return jl(b[b.length-1].node.namespaceURI,"Placemark")}function xp(a,b){if(a)return jl(b[b.length-1].node.namespaceURI,Wp[a.U()])}
var jq=wl("color"),Lp=wl("coordinates"),fq=wl("Data"),Hp=wl("ExtendedData"),Op=wl("innerBoundaryIs"),yp=wl("Point"),zp=wl("LineString"),Ep=wl("LinearRing"),Ap=wl("Polygon"),Pp=wl("outerBoundaryIs");go.prototype.Xb=function(a,b){b=Gl(this,b);var c=jl(xo[4],"kml");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",wo[0]);c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var d={node:c},e={};1<a.length?e.Document=a:1==a.length&&(e.Placemark=a[0]);a=Rp[c.namespaceURI];e=zl(e,a);Bl(d,Up,yl,e,[b],a,this);return c};Fj.Dd=function(){};(function(a){function b(a){this.lc=ArrayBuffer.isView&&ArrayBuffer.isView(a)?a:new Uint8Array(a||0);this.type=this.ea=0;this.length=this.lc.length}function c(a,b,c){var e=c.lc;var f=e[c.ea++];var g=(f&112)>>4;if(128>f)return d(a,g,b);f=e[c.ea++];g|=(f&127)<<3;if(128>f)return d(a,g,b);f=e[c.ea++];g|=(f&127)<<10;if(128>f)return d(a,g,b);f=e[c.ea++];g|=(f&127)<<17;if(128>f)return d(a,g,b);f=e[c.ea++];g|=(f&127)<<24;if(128>f)return d(a,g,b);f=e[c.ea++];if(128>f)return d(a,g|(f&1)<<31,b);throw Error("Expected varint not more than 10 bytes");}function d(a,b,c){return c?4294967296*b+(a>>>0):4294967296*(b>>>0)+(a>>>0)}var e={read:function(a,b,c,d,e){var f=8*e-d-1;var g=(1<<f)-1,h=g>>1,l=-7;e=c?e-1:0;var m=c?-1:1,x=a[b+e];e+=m;c=x&(1<<-l)-1;x>>=-l;for(l+=f;0<l;c=256*c+a[b+e],e+=m,l-=8);f=c&(1<<-l)-1;c>>=-l;for(l+=d;0<l;f=256*f+a[b+e],e+=m,l-=8);if(0===c)c=1-h;else{if(c===g)return f?NaN:Infinity*(x?-1:1);f+=Math.pow(2,d);c-=h}return(x?-1:1)*f*Math.pow(2,c-d)},write:function(a,b,c,d,e,n){var f,g=8*n-e-1,h=(1<<g)-1,l=h>>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;n=d?0:n-1;var B=d?1:-1,E=0>b||0===b&&0>1/b?1:0;b=Math.abs(b);isNaN(b)||Infinity===b?(b=isNaN(b)?1:0,d=h):(d=Math.floor(Math.log(b)/Math.LN2),1>b*(f=Math.pow(2,-d))&&(d--,f*=2),b=1<=d+l?b+m/f:b+m*Math.pow(2,1-l),2<=b*f&&(d++,f/=2),d+l>=h?(b=0,d=h):1<=d+l?(b=(b*f-1)*Math.pow(2,e),d+=l):(b=b*Math.pow(2,l-1)*Math.pow(2,e),d=0));for(;8<=e;a[c+n]=b&255,n+=B,b/=256,e-=8);d=d<<e|b;for(g+=e;0<g;a[c+n]=d&255,n+=B,d/=256,g-=8);a[c+n-B]|=128*E}};b.c=0;b.i=1;b.b=2;b.a=5;b.prototype={Ag:function(a,b,c){for(c=c||this.length;this.ea<c;){var d=this.Ka(),e=d>>3,f=this.ea;this.type=d&7;a(e,b,this);this.ea===f&&this.mq(d)}return b},yp:function(){var a=e.read(this.lc,this.ea,!0,23,4);this.ea+=4;return a},up:function(){var a=e.read(this.lc,this.ea,!0,52,8);this.ea+=8;return a},Ka:function(a){var b=this.lc;var d=b[this.ea++];var e=d&127;if(128>d)return e;d=b[this.ea++];e|=(d&127)<<7;if(128>d)return e;d=b[this.ea++];e|=(d&127)<<14;if(128>d)return e;d=b[this.ea++];e|=(d&127)<<21;if(128>d)return e;d=b[this.ea];return c(e|(d&15)<<28,a,this)},Kp:function(){return this.Ka(!0)},ce:function(){var a=this.Ka();return 1===a%2?(a+1)/-2:a/2},sp:function(){return!!this.Ka()},Gg:function(){for(var a=this.Ka()+this.ea,b=this.lc,c="",d=this.ea;d<a;){var e=b[d],n=null,p=239<e?4:223<e?3:191<e?2:1;if(d+p>a)break;if(1===p)128>e&&(n=e);else if(2===p){var q=b[d+1];128===(q&192)&&(n=(e&31)<<6|q&63,127>=n&&(n=null))}else if(3===p){q=b[d+1];var r=b[d+2];128===(q&192)&&128===(r&192)&&(n=(e&15)<<12|(q&63)<<6|r&63,2047>=n||55296<=n&&57343>=n)&&(n=null)}else if(4===p){q=b[d+1];r=b[d+2];var u=b[d+3];128===(q&192)&&128===(r&192)&&128===(u&192)&&(n=(e&15)<<18|(q&63)<<12|(r&63)<<6|u&63,65535>=n||1114112<=n)&&(n=null)}null===n?(n=65533,p=1):65535<n&&(n-=65536,c+=String.fromCharCode(n>>>10&1023|55296),n=56320|n&1023);c+=String.fromCharCode(n);d+=p}this.ea=a;return c},mq:function(a){a&=7;if(a===b.c)for(;127<this.lc[this.ea++];);else if(a===b.b)this.ea=this.Ka()+this.ea;else if(a===b.a)this.ea+=4;else if(a===b.i)this.ea+=8;else throw Error("Unimplemented type: "+
a);}};a["default"]=b})(Fj.Dd=Fj.Dd||{});Fj.Dd=Fj.Dd.default;Fj.xf={};Fj.xf.Bf=function(){};(function(a){function b(a,b){this.layers=a.Ag(l,{},b)}function c(a,b){this.x=a;this.y=b}function d(a,b,c,d,f){this.properties={};this.extent=c;this.type=0;this.Cc=a;this.Ef=-1;this.ne=d;this.pe=f;a.Ag(e,this,b)}function e(a,b,c){if(1==a)b.id=c.Ka();else if(2==a)for(a=c.Ka()+c.ea;c.ea<a;){var d=b.ne[c.Ka()],e=b.pe[c.Ka()];b.properties[d]=e}else 3==a?b.type=c.Ka():4==a&&(b.Ef=c.ea)}function f(a,b){this.version=1;this.name=null;this.extent=4096;this.length=0;this.Cc=a;this.ne=[];this.pe=[];this.me=[];a.Ag(g,this,b);this.length=this.me.length}function g(a,b,c){15===a?b.version=c.Ka():1===a?b.name=c.Gg():5===a?b.extent=c.Ka():2===a?b.me.push(c.ea):3===a?b.ne.push(c.Gg()):4===a&&b.pe.push(h(c))}function h(a){for(var b=null,c=a.Ka()+a.ea;a.ea<c;)b=a.Ka()>>3,b=1===b?a.Gg():2===b?a.yp():3===b?a.up():4===b?a.Kp():5===b?a.Ka():6===b?a.ce():7===b?a.sp():null;return b}function l(a,b,c){3===a&&(a=new m(c,c.Ka()+c.ea),a.length&&(b[a.name]=a))}c.prototype={clone:function(){return new c(this.x,this.y)},add:function(a){return this.clone().Yj(a)},rotate:function(a){return this.clone().hk(a)},round:function(){return this.clone().ik()},angle:function(){return Math.atan2(this.y,this.x)},Yj:function(a){this.x+=a.x;this.y+=a.y;return this},hk:function(a){var b=Math.cos(a);a=Math.sin(a);var c=a*this.x+b*this.y;this.x=b*this.x-a*this.y;this.y=c;return this},ik:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this}};c.Kq=function(a){return a instanceof c?a:Array.isArray(a)?new c(a[0],a[1]):a};d.b=["Unknown","Point","LineString","Polygon"];d.prototype.Oh=function(){var a=this.Cc;a.ea=this.Ef;for(var b=a.Ka()+a.ea,d=1,e=0,f=0,g=0,h=[],l;a.ea<b;)if(e||(e=a.Ka(),d=e&7,e>>=3),e--,1===d||2===d)f+=a.ce(),g+=a.ce(),1===d&&(l&&h.push(l),l=[]),l.push(new c(f,g));else if(7===d)l&&l.push(l[0].clone());else throw Error("unknown command "+d);l&&h.push(l);return h};d.prototype.bbox=function(){var a=this.Cc;a.ea=this.Ef;for(var b=a.Ka()+a.ea,c=1,d=0,e=0,f=0,g=Infinity,h=-Infinity,l=Infinity,m=-Infinity;a.ea<b;)if(d||(d=a.Ka(),c=d&7,d>>=3),d--,1===c||2===c)e+=a.ce(),f+=a.ce(),e<g&&(g=e),e>h&&(h=e),f<l&&(l=f),f>m&&(m=f);else if(7!==c)throw Error("unknown command "+c);return[g,l,h,m]};var m=f;f.prototype.feature=function(a){if(0>a||a>=this.me.length)throw Error("feature index out of bounds");this.Cc.ea=this.me[a];a=this.Cc.Ka()+this.Cc.ea;return new d(this.Cc,a,this.extent,this.ne,this.pe)};var n=m;a["default"]={Bf:b,Wj:d,Xj:n};a.Bf=b;a.Wj=d;a.Xj=n})(Fj.xf=Fj.xf||{});function kq(a,b,c,d,e){this.g=e;this.i=a;this.b=b;this.f=c;this.c=d}k=kq.prototype;k.get=function(a){return this.c[a]};k.Bb=function(){return this.f};k.G=function(){this.a||(this.a="Point"===this.i?Za(this.b):$a(this.b,0,this.b.length,2));return this.a};k.Wn=function(){return this.g};k.ec=function(){return this.b};k.ga=kq.prototype.ec;k.V=function(){return this};k.Xn=function(){return this.c};k.Vd=kq.prototype.V;k.qa=function(){return 2};k.Lc=ua;k.U=function(){return this.i};function lq(a){El.call(this);a=a?a:{};this.defaultDataProjection=new Bb({code:"",units:"tile-pixels"});this.b=a.featureClass?a.featureClass:kq;this.a=a.geometryName;this.i=a.layerName?a.layerName:"layer";this.c=a.layers?a.layers:null}v(lq,El);k=lq.prototype;k.U=function(){return"arraybuffer"};k.Oa=function(a,b){var c=this.c;a=new Fj.Dd(a);a=new Fj.xf.Bf(a);var d=[],e=this.b,f;for(f in a.layers)if(!c||-1!=c.indexOf(f)){var g=a.layers[f];for(var h=0,l=g.length;h<l;++h){if(e===kq){var m=void 0;var n=g.feature(h),p=f,q=n.Oh(),r=[],u=[];mq(q,u,r);var x=n.type;1===x?m=1===q.length?"Point":"MultiPoint":2===x?m=1===q.length?"LineString":"MultiLineString":3===x&&(m="Polygon");q=n.properties;q[this.i]=p;m=new this.b(m,u,r,q,n.id)}else{x=g.feature(h);u=f;r=b;m=new this.b;n=x.id;p=x.properties;p[this.i]=u;this.a&&m.Tc(this.a);u=void 0;q=x.type;if(0===q)u=null;else{var x=x.Oh(),B=[],E=[];mq(x,E,B);1===q?u=1===x.length?new C(null):new Q(null):2===q?1===x.length?u=new O(null):u=new P(null):3===q&&(u=new D(null));u.ba("XY",E,B)}r=Hl(u,!1,Gl(this,r));m.Ra(r);m.jc(n);m.H(p)}d.push(m)}}return d};k.kb=function(){return this.defaultDataProjection};k.mn=function(a){this.c=a};function mq(a,b,c){for(var d=0,e=0,f=a.length;e<f;++e){var g=a[e],h;var l=0;for(h=g.length;l<h;++l){var m=g[l];b.push(m.x,m.y)}d+=2*l;c.push(d)}}k.Tb=function(){};k.Sc=function(){};k.Bd=function(){};k.$c=function(){};k.Wb=function(){};function nq(){Cm.call(this);this.defaultDataProjection=Tb("EPSG:4326")}v(nq,Cm);function oq(a,b){b[b.length-1].fe[a.getAttribute("k")]=a.getAttribute("v")}
var pq=[null],qq=K(pq,{nd:function(a,b){b[b.length-1].md.push(a.getAttribute("ref"))},tag:oq}),sq=K(pq,{node:function(a,b){var c=b[0],d=b[b.length-1],e=a.getAttribute("id"),f=[parseFloat(a.getAttribute("lon")),parseFloat(a.getAttribute("lat"))];d.Sh[e]=f;a=N({fe:{}},rq,a,b);wb(a.fe)||(f=new C(f),Hl(f,!1,c),c=new H(f),c.jc(e),c.H(a.fe),d.features.push(c))},way:function(a,b){var c=b[0],d=a.getAttribute("id");a=N({md:[],fe:{}},qq,a,b);b=b[b.length-1];for(var e=[],f=0,g=a.md.length;f<g;f++)la(e,b.Sh[a.md[f]]);a.md[0]==a.md[a.md.length-1]?(f=new D(null),f.ba("XY",e,[e.length])):(f=new O(null),f.ba("XY",e));Hl(f,!1,c);c=new H(f);c.jc(d);c.H(a.fe);b.features.push(c)}}),rq=K(pq,{tag:oq});nq.prototype.zc=function(a,b){b=Fl(this,a,b);return"osm"==a.localName&&(a=N({Sh:{},features:[]},sq,a,[b]),a.features)?a.features:[]};nq.prototype.Vg=function(){};nq.prototype.Xb=function(){};nq.prototype.ie=function(){};function tq(a){return a.getAttributeNS("http://www.w3.org/1999/xlink","href")};function uq(){}uq.prototype.read=function(a){return ml(a)?this.a(a):nl(a)?this.b(a):"string"===typeof a?(a=pl(a),this.a(a)):null};function vq(){}v(vq,uq);vq.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};vq.prototype.b=function(a){return(a=N({},wq,a,[]))?a:null};var xq=[null,"http://www.opengis.net/ows/1.1"],wq=K(xq,{ServiceIdentification:I(function(a,b){return N({},yq,a,b)}),ServiceProvider:I(function(a,b){return N({},zq,a,b)}),OperationsMetadata:I(function(a,b){return N({},Aq,a,b)})}),Cq=K(xq,{DeliveryPoint:I(S),City:I(S),AdministrativeArea:I(S),PostalCode:I(S),Country:I(S),ElectronicMailAddress:I(S)}),Dq=K(xq,{Value:tl(function(a){return S(a)})}),Eq=K(xq,{AllowedValues:I(function(a,b){return N({},Dq,a,b)})}),Gq=K(xq,{Phone:I(function(a,b){return N({},Fq,a,b)}),Address:I(function(a,b){return N({},Cq,a,b)})}),Iq=K(xq,{HTTP:I(function(a,b){return N({},Hq,a,b)})}),Hq=K(xq,{Get:tl(function(a,b){var c=tq(a);if(c)return N({href:c},Jq,a,b)}),Post:void 0}),Kq=K(xq,{DCP:I(function(a,b){return N({},Iq,a,b)})}),Aq=K(xq,{Operation:function(a,b){var c=a.getAttribute("name");(a=N({},Kq,a,b))&&(b[b.length-1][c]=a)}}),Fq=K(xq,{Voice:I(S),Facsimile:I(S)}),Jq=K(xq,{Constraint:tl(function(a,b){var c=a.getAttribute("name");if(c)return N({name:c},Eq,a,b)})}),Lq=K(xq,{IndividualName:I(S),PositionName:I(S),ContactInfo:I(function(a,b){return N({},Gq,a,b)})}),yq=K(xq,{Title:I(S),ServiceTypeVersion:I(S),ServiceType:I(S)}),zq=K(xq,{ProviderName:I(S),ProviderSite:I(tq),ServiceContact:I(function(a,b){return N({},Lq,a,b)})});function Mq(a,b,c,d){var e;void 0!==d?e=d:e=[];for(var f=d=0;f<b;){var g=a[f++];e[d++]=a[f++];e[d++]=g;for(g=2;g<c;++g)e[d++]=a[f++]}e.length=d};function Nq(a){a=a?a:{};El.call(this);this.defaultDataProjection=Tb("EPSG:4326");this.b=a.factor?a.factor:1E5;this.a=a.geometryLayout?a.geometryLayout:"XY"}v(Nq,Vn);function Oq(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;var f;var g=0;for(f=a.length;g<f;)for(d=0;d<b;++d,++g){var h=a[g],l=h-e[d];e[d]=h;a[g]=l}return Pq(a,c?c:1E5)}function Qq(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;a=Rq(a,c?c:1E5);var f;c=0;for(f=a.length;c<f;)for(d=0;d<b;++d,++c)e[d]+=a[c],a[c]=e[d];return a}
function Pq(a,b){b=b?b:1E5;var c;var d=0;for(c=a.length;d<c;++d)a[d]=Math.round(a[d]*b);b=0;for(d=a.length;b<d;++b)c=a[b],a[b]=0>c?~(c<<1):c<<1;b="";d=0;for(c=a.length;d<c;++d){for(var e,f=a[d],g="";32<=f;)e=(32|f&31)+63,g+=String.fromCharCode(e),f>>=5;g+=String.fromCharCode(f+63);b+=g}return b}
function Rq(a,b){b=b?b:1E5;var c=[],d=0,e=0,f;var g=0;for(f=a.length;g<f;++g){var h=a.charCodeAt(g)-63,d=d|(h&31)<<e;32>h?(c.push(d),e=d=0):e+=5}a=0;for(d=c.length;a<d;++a)e=c[a],c[a]=e&1?~(e>>1):e>>1;a=0;for(d=c.length;a<d;++a)c[a]/=b;return c}k=Nq.prototype;k.ae=function(a,b){a=this.wd(a,b);return new H(a)};k.zg=function(a,b){return[this.ae(a,b)]};k.wd=function(a,b){var c=sf(this.a);a=Qq(a,c,this.b);Mq(a,a.length,c,a);c=Ff(a,0,a.length,c);return Hl(new O(c,this.a),!1,Gl(this,b))};k.ge=function(a,b){if(a=a.V())return this.Cd(a,b);xa(!1,40);return""};k.Wg=function(a,b){return this.ge(a[0],b)};k.Cd=function(a,b){a=Hl(a,!0,Gl(this,b));b=a.ga();a=a.qa();Mq(b,b.length,a,b);return Oq(b,a,this.b)};function Sq(a){a=a?a:{};El.call(this);this.a=a.layerName;this.b=a.layers?a.layers:null;this.defaultDataProjection=Tb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326")}v(Sq,Il);function Tq(a,b){var c=[],d,e;var f=0;for(e=a.length;f<e;++f){var g=a[f];0<f&&c.pop();0<=g?d=b[g]:d=b[~g].slice().reverse();c.push.apply(c,d)}a=0;for(b=c.length;a<b;++a)c[a]=c[a].slice();return c}
function Uq(a,b,c,d,e,f,g){a=a.geometries;var h=[],l;var m=0;for(l=a.length;m<l;++m)h[m]=Vq(a[m],b,c,d,e,f,g);return h}function Vq(a,b,c,d,e,f,g){var h=a.type,l=Wq[h];c="Point"===h||"MultiPoint"===h?l(a,c,d):l(a,b);b=new H;b.Ra(Hl(c,!1,g));void 0!==a.id&&b.jc(a.id);a=a.properties;e&&(a||(a={}),a[e]=f);a&&b.H(a);return b}
Sq.prototype.yg=function(a,b){if("Topology"==a.type){var c=null,d=null;if(a.transform){var e=a.transform;c=e.scale;d=e.translate}var f=a.arcs;if(e){e=c;var g=d,h;var l=0;for(h=f.length;l<h;++l){var m,n=f[l],p=e,q=g,r=0,u=0;var x=0;for(m=n.length;x<m;++x){var B=n[x];r+=B[0];u+=B[1];B[0]=r;B[1]=u;Xq(B,p,q)}}}e=[];a=a.objects;var g=this.a,E;for(E in a)this.b&&-1==this.b.indexOf(E)||("GeometryCollection"===a[E].type?(l=a[E],e.push.apply(e,Uq(l,f,c,d,g,E,b))):(l=a[E],e.push(Vq(l,f,c,d,g,E,b))));return e}return[]};function Xq(a,b,c){a[0]=a[0]*b[0]+c[0];a[1]=a[1]*b[1]+c[1]}Sq.prototype.Fg=function(){return this.defaultDataProjection};var Wq={Point:function(a,b,c){a=a.coordinates;b&&c&&Xq(a,b,c);return new C(a)},LineString:function(a,b){a=Tq(a.arcs,b);return new O(a)},Polygon:function(a,b){var c=[],d;var e=0;for(d=a.arcs.length;e<d;++e)c[e]=Tq(a.arcs[e],b);return new D(c)},MultiPoint:function(a,b,c){a=a.coordinates;var d;if(b&&c){var e=0;for(d=a.length;e<d;++e)Xq(a[e],b,c)}return new Q(a)},MultiLineString:function(a,b){var c=[],d;var e=0;for(d=a.arcs.length;e<d;++e)c[e]=Tq(a.arcs[e],b);return new P(c)},MultiPolygon:function(a,b){var c=[],d,e;var f=0;for(e=a.arcs.length;f<e;++f){var g=a.arcs[f];var h=[];var l=0;for(d=g.length;l<d;++l)h[l]=Tq(g[l],b);c[f]=h}return new R(c)}};k=Sq.prototype;k.Zc=function(){};k.he=function(){};k.je=function(){};k.Cg=function(){};k.Rc=function(){};function Yq(a){a=a?a:{};this.c=a.featureType;this.a=a.featureNS;this.b=a.gmlFormat?a.gmlFormat:new Sm;this.o=a.schemaLocation?a.schemaLocation:Zq["1.1.0"];Cm.call(this)}v(Yq,Cm);var Zq={"1.1.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd","1.0.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"};Yq.prototype.zc=function(a,b){var c={featureType:this.c,featureNS:this.a};tb(c,Fl(this,a,b?b:{}));b=[c];this.b.b["http://www.opengis.net/gml"].featureMember=rl(Fm.prototype.be);(a=N([],this.b.b,a,b,this.b))||(a=[]);return a};Yq.prototype.j=function(a){if(ml(a))return $q(a);if(nl(a))return N({},ar,a,[]);if("string"===typeof a)return a=pl(a),$q(a)};Yq.prototype.g=function(a){if(ml(a))return br(this,a);if(nl(a))return cr(this,a);if("string"===typeof a)return a=pl(a),br(this,a)};function br(a,b){for(b=b.firstChild;b;b=b.nextSibling)if(b.nodeType==Node.ELEMENT_NODE)return cr(a,b)}var dr={"http://www.opengis.net/gml":{boundedBy:I(Fm.prototype.gf,"bounds")}};function cr(a,b){var c={},d=Nm(b.getAttribute("numberOfFeatures"));c.numberOfFeatures=d;return N(c,dr,b,[],a.b)}
var er={"http://www.opengis.net/wfs":{totalInserted:I(Mm),totalUpdated:I(Mm),totalDeleted:I(Mm)}},fr={"http://www.opengis.net/ogc":{FeatureId:rl(function(a){return a.getAttribute("fid")})}},gr={"http://www.opengis.net/wfs":{Feature:function(a,b){Al(fr,a,b)}}},ar={"http://www.opengis.net/wfs":{TransactionSummary:I(function(a,b){return N({},er,a,b)},"transactionSummary"),InsertResults:I(function(a,b){return N([],gr,a,b)},"insertIds")}};function $q(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return N({},ar,a,[])}var hr={"http://www.opengis.net/wfs":{PropertyName:J(Pm)}};function ir(a,b){var c=jl("http://www.opengis.net/ogc","Filter"),d=jl("http://www.opengis.net/ogc","FeatureId");c.appendChild(d);d.setAttribute("fid",b);a.appendChild(c)}function jr(a,b){a=(a?a:"feature")+":";return b.indexOf(a)?a+b:b}
var kr={"http://www.opengis.net/wfs":{Insert:J(function(a,b,c){var d=c[c.length-1],e=d.gmlVersion,d=jl(d.featureNS,d.featureType);a.appendChild(d);if(2===e){a=an.prototype;(e=b.a)&&d.setAttribute("fid",e);var e=c[c.length-1],f=e.featureNS,g=b.c;e.lb||(e.lb={},e.lb[f]={});var h=b.N();b=[];var l=[];for(n in h){var m=h[n];null!==m&&(b.push(n),l.push(m),n==g||m instanceof of?n in e.lb[f]||(e.lb[f][n]=J(a.ai,a)):n in e.lb[f]||(e.lb[f][n]=J(Pm)))}var n=tb({},e);n.node=d;Bl(n,e.lb,wl(void 0,f),l,c,b)}else Sm.prototype.ii(d,b,c)}),Update:J(function(a,b,c){var d=c[c.length-1];xa(void 0!==b.a,27);var e=d.featurePrefix,f=d.featureNS;a.setAttribute("typeName",jr(e,d.featureType));a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,f);e=b.a;if(void 0!==e){for(var f=b.O(),g=[],h=0,l=f.length;h<l;h++){var m=b.get(f[h]);void 0!==m&&g.push({name:f[h],value:m})}Bl({gmlVersion:d.gmlVersion,node:a,hasZ:d.hasZ,srsName:d.srsName},kr,wl("Property"),g,c);ir(a,e)}}),Delete:J(function(a,b,c){c=c[c.length-1];xa(void 0!==b.a,26);var d=c.featurePrefix,e=c.featureNS;a.setAttribute("typeName",jr(d,c.featureType));a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+d,e);b=b.a;void 0!==b&&ir(a,b)}),Property:J(function(a,b,c){var d=jl("http://www.opengis.net/wfs","Name"),e=c[c.length-1].gmlVersion;a.appendChild(d);Pm(d,b.name);void 0!==b.value&&null!==b.value&&(d=jl("http://www.opengis.net/wfs","Value"),a.appendChild(d),b.value instanceof of?2===e?an.prototype.ai(d,b.value,c):Sm.prototype.od(d,b.value,c):Pm(d,b.value))}),Native:J(function(a,b){b.vq&&a.setAttribute("vendorId",b.vq);void 0!==b.Vp&&a.setAttribute("safeToIgnore",b.Vp);void 0!==b.value&&Pm(a,b.value)})}};function lr(a,b,c){var d={node:a};b.b.forEach(function(a){Bl(d,mr,wl(a.kc),[a],c)})}function nr(a,b){void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());or(a,b.b);pr(a,""+b.i)}function qr(a,b,c){a=jl("http://www.opengis.net/ogc",a);Pm(a,c);b.appendChild(a)}function or(a,b){qr("PropertyName",a,b)}function pr(a,b){qr("Literal",a,b)}
function rr(a,b){var c=jl("http://www.opengis.net/gml","TimeInstant");a.appendChild(c);a=jl("http://www.opengis.net/gml","timePosition");c.appendChild(a);Pm(a,b)}
var mr={"http://www.opengis.net/wfs":{Query:J(function(a,b,c){var d=c[c.length-1],e=d.featurePrefix,f=d.featureNS,g=d.propertyNames,h=d.srsName;a.setAttribute("typeName",e?jr(e,b):b);h&&a.setAttribute("srsName",h);f&&a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,f);b=tb({},d);b.node=a;Bl(b,hr,wl("PropertyName"),g,c);if(d=d.filter)g=jl("http://www.opengis.net/ogc","Filter"),a.appendChild(g),Bl({node:g},mr,wl(d.kc),[d],c)})},"http://www.opengis.net/ogc":{During:J(function(a,b){var c=jl("http://www.opengis.net/fes","ValueReference");Pm(c,b.b);a.appendChild(c);c=jl("http://www.opengis.net/gml","TimePeriod");a.appendChild(c);a=jl("http://www.opengis.net/gml","begin");c.appendChild(a);rr(a,b.a);a=jl("http://www.opengis.net/gml","end");c.appendChild(a);rr(a,b.i)}),And:J(lr),Or:J(lr),Not:J(function(a,b,c){b=b.condition;Bl({node:a},mr,wl(b.kc),[b],c)}),BBOX:J(function(a,b,c){c[c.length-1].srsName=b.srsName;or(a,b.geometryName);Sm.prototype.od(a,b.extent,c)}),Intersects:J(function(a,b,c){c[c.length-1].srsName=b.srsName;or(a,b.geometryName);Sm.prototype.od(a,b.geometry,c)}),Within:J(function(a,b,c){c[c.length-1].srsName=b.srsName;or(a,b.geometryName);Sm.prototype.od(a,b.geometry,c)}),PropertyIsEqualTo:J(nr),PropertyIsNotEqualTo:J(nr),PropertyIsLessThan:J(nr),PropertyIsLessThanOrEqualTo:J(nr),PropertyIsGreaterThan:J(nr),PropertyIsGreaterThanOrEqualTo:J(nr),PropertyIsNull:J(function(a,b){or(a,b.b)}),PropertyIsBetween:J(function(a,b){or(a,b.b);var c=jl("http://www.opengis.net/ogc","LowerBoundary");a.appendChild(c);pr(c,""+b.a);c=jl("http://www.opengis.net/ogc","UpperBoundary");a.appendChild(c);pr(c,""+b.i)}),PropertyIsLike:J(function(a,b){a.setAttribute("wildCard",b.g);a.setAttribute("singleChar",b.f);a.setAttribute("escapeChar",b.i);void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());or(a,b.b);pr(a,""+b.c)})}};Yq.prototype.l=function(a){var b=jl("http://www.opengis.net/wfs","GetFeature");b.setAttribute("service","WFS");b.setAttribute("version","1.1.0");if(a){a.handle&&b.setAttribute("handle",a.handle);a.outputFormat&&b.setAttribute("outputFormat",a.outputFormat);void 0!==a.maxFeatures&&b.setAttribute("maxFeatures",a.maxFeatures);a.resultType&&b.setAttribute("resultType",a.resultType);void 0!==a.startIndex&&b.setAttribute("startIndex",a.startIndex);void 0!==a.count&&b.setAttribute("count",a.count);var c=a.filter;if(a.bbox){xa(a.geometryName,12);var d=sm(a.geometryName,a.bbox,a.srsName);c?c=rm(c,d):c=d}}b.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.o);c={node:b,srsName:a.srsName,featureNS:a.featureNS?a.featureNS:this.a,featurePrefix:a.featurePrefix,geometryName:a.geometryName,filter:c,propertyNames:a.propertyNames?a.propertyNames:[]};xa(Array.isArray(a.featureTypes),11);a=a.featureTypes;c=[c];d=tb({},c[c.length-1]);d.node=b;Bl(d,mr,wl("Query"),a,c);return b};Yq.prototype.v=function(a,b,c,d){var e=[],f=jl("http://www.opengis.net/wfs","Transaction"),g=d.version?d.version:"1.1.0",h="1.0.0"===g?2:3;f.setAttribute("service","WFS");f.setAttribute("version",g);if(d){var l=d.gmlOptions?d.gmlOptions:{};d.handle&&f.setAttribute("handle",d.handle)}f.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",Zq[g]);a&&(g={node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,gmlVersion:h,hasZ:d.hasZ,srsName:d.srsName},tb(g,l),Bl(g,kr,wl("Insert"),a,e));b&&(g={node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,gmlVersion:h,hasZ:d.hasZ,srsName:d.srsName},tb(g,l),Bl(g,kr,wl("Update"),b,e));c&&Bl({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,gmlVersion:h,srsName:d.srsName},kr,wl("Delete"),c,e);d.nativeElements&&Bl({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,gmlVersion:h,srsName:d.srsName},kr,wl("Native"),d.nativeElements,e);return f};Yq.prototype.Eg=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.kf(a);return null};Yq.prototype.kf=function(a){if(a.firstElementChild&&a.firstElementChild.firstElementChild)for(a=a.firstElementChild.firstElementChild,a=a.firstElementChild;a;a=a.nextElementSibling)if(0!==a.childNodes.length&&(1!==a.childNodes.length||3!==a.firstChild.nodeType)){var b=[{}];this.b.gf(a,b);return Tb(b.pop().srsName)}return null};function sr(a){a=a?a:{};El.call(this);this.b=void 0!==a.splitCollection?a.splitCollection:!1}v(sr,Vn);function tr(a){a=a.X();return a.length?a.join(" "):""}function ur(a){a=a.X();for(var b=[],c=0,d=a.length;c<d;++c)b.push(a[c].join(" "));return b.join(",")}function vr(a){var b=[];a=a.Sd();for(var c=0,d=a.length;c<d;++c)b.push("("+ur(a[c])+")");return b.join(",")}
function wr(a){var b=a.U(),c=(0,xr[b])(a),b=b.toUpperCase();if(a instanceof rf){a=a.ja;var d="";if("XYZ"===a||"XYZM"===a)d+="Z";if("XYM"===a||"XYZM"===a)d+="M";a=d;0<a.length&&(b+=" "+a)}return c.length?b+"("+c+")":b+" EMPTY"}
var xr={Point:tr,LineString:ur,Polygon:vr,MultiPoint:function(a){var b=[];a=a.Zd();for(var c=0,d=a.length;c<d;++c)b.push("("+tr(a[c])+")");return b.join(",")},MultiLineString:function(a){var b=[];a=a.gd();for(var c=0,d=a.length;c<d;++c)b.push("("+ur(a[c])+")");return b.join(",")},MultiPolygon:function(a){var b=[];a=a.Td();for(var c=0,d=a.length;c<d;++c)b.push("("+vr(a[c])+")");return b.join(",")},GeometryCollection:function(a){var b=[];a=a.Vf();for(var c=0,d=a.length;c<d;++c)b.push(wr(a[c]));return b.join(",")}};k=sr.prototype;k.ae=function(a,b){return(a=this.wd(a,b))?(b=new H,b.Ra(a),b):null};k.zg=function(a,b){var c=[];a=this.wd(a,b);this.b&&"GeometryCollection"==a.U()?c=a.a:c=[a];b=[];for(var d=0,e=c.length;d<e;++d)a=new H,a.Ra(c[d]),b.push(a);return b};k.wd=function(a,b){a=new yr(new zr(a));Ar(a);return(a=Br(a))?Hl(a,!1,b):null};k.ge=function(a,b){return(a=a.V())?this.Cd(a,b):""};k.Wg=function(a,b){if(1==a.length)return this.ge(a[0],b);for(var c=[],d=0,e=a.length;d<e;++d)c.push(a[d].V());a=new tm(c);return this.Cd(a,b)};k.Cd=function(a,b){return wr(Hl(a,!0,b))};function zr(a){this.a=a;this.b=-1}
function Cr(a){var b=a.a.charAt(++a.b),c={position:a.b,value:b};if("("==b)c.type=2;else if(","==b)c.type=5;else if(")"==b)c.type=3;else if("0"<=b&&"9">=b||"."==b||"-"==b){c.type=4;var b=a.b,d=!1,e=!1;do{if("."==f)d=!0;else if("e"==f||"E"==f)e=!0;var f=a.a.charAt(++a.b)}while("0"<=f&&"9">=f||"."==f&&(void 0===d||!d)||!e&&("e"==f||"E"==f)||e&&("-"==f||"+"==f));a=parseFloat(a.a.substring(b,a.b--));c.value=a}else if("a"<=b&&"z">=b||"A"<=b&&"Z">=b){c.type=1;b=a.b;do f=a.a.charAt(++a.b);while("a"<=f&&"z">=f||"A"<=f&&"Z">=f);a=a.a.substring(b,a.b--).toUpperCase();c.value=a}else{if(" "==b||"\t"==b||"\r"==b||"\n"==b)return Cr(a);if(""===b)c.type=6;else throw Error("Unexpected character: "+b);}return c}function yr(a){this.i=a;this.a="XY"}function Ar(a){a.b=Cr(a.i)}function Dr(a,b){(b=a.b.type==b)&&Ar(a);return b}
function Br(a){var b=a.b;if(Dr(a,1)){var b=b.value,c="XY",d=a.b;1==a.b.type&&(d=d.value,"Z"===d?c="XYZ":"M"===d?c="XYM":"ZM"===d&&(c="XYZM"),"XY"!==c&&Ar(a));a.a=c;if("GEOMETRYCOLLECTION"==b){a:{if(Dr(a,2)){b=[];do b.push(Br(a));while(Dr(a,5));if(Dr(a,3)){a=b;break a}}else if(Er(a)){a=[];break a}throw Error(Fr(a));}return new tm(a)}d=Gr[b];c=Hr[b];if(!d||!c)throw Error("Invalid geometry type: "+b);b=d.call(a);return new c(b,a.a)}throw Error(Fr(a));}k=yr.prototype;k.tg=function(){if(Dr(this,2)){var a=Ir(this);if(Dr(this,3))return a}else if(Er(this))return null;throw Error(Fr(this));};k.sg=function(){if(Dr(this,2)){var a=Jr(this);if(Dr(this,3))return a}else if(Er(this))return[];throw Error(Fr(this));};k.ug=function(){if(Dr(this,2)){var a=Kr(this);if(Dr(this,3))return a}else if(Er(this))return[];throw Error(Fr(this));};k.fp=function(){if(Dr(this,2)){var a;if(2==this.b.type)for(a=[this.tg()];Dr(this,5);)a.push(this.tg());else a=Jr(this);if(Dr(this,3))return a}else if(Er(this))return[];throw Error(Fr(this));};k.ep=function(){if(Dr(this,2)){var a=Kr(this);if(Dr(this,3))return a}else if(Er(this))return[];throw Error(Fr(this));};k.gp=function(){if(Dr(this,2)){for(var a=[this.ug()];Dr(this,5);)a.push(this.ug());if(Dr(this,3))return a}else if(Er(this))return[];throw Error(Fr(this));};function Ir(a){for(var b=[],c=a.a.length,d=0;d<c;++d){var e=a.b;if(Dr(a,4))b.push(e.value);else break}if(b.length==c)return b;throw Error(Fr(a));}function Jr(a){for(var b=[Ir(a)];Dr(a,5);)b.push(Ir(a));return b}function Kr(a){for(var b=[a.sg()];Dr(a,5);)b.push(a.sg());return b}function Er(a){var b=1==a.b.type&&"EMPTY"==a.b.value;b&&Ar(a);return b}function Fr(a){return"Unexpected `"+a.b.value+"` at position "+a.b.position+" in `"+a.i.a+"`"}
var Hr={POINT:C,LINESTRING:O,POLYGON:D,MULTIPOINT:Q,MULTILINESTRING:P,MULTIPOLYGON:R},Gr={POINT:yr.prototype.tg,LINESTRING:yr.prototype.sg,POLYGON:yr.prototype.ug,MULTIPOINT:yr.prototype.fp,MULTILINESTRING:yr.prototype.ep,MULTIPOLYGON:yr.prototype.gp};function Lr(){this.version=void 0}v(Lr,uq);Lr.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};Lr.prototype.b=function(a){this.version=a.getAttribute("version").trim();return(a=N({version:this.version},Mr,a,[]))?a:null};function Nr(a,b){return N({},Or,a,b)}function Pr(a,b){return N({},Qr,a,b)}function Rr(a,b){if(b=Nr(a,b))return a=[Nm(a.getAttribute("width")),Nm(a.getAttribute("height"))],b.size=a,b}
function Sr(a,b){return N([],Tr,a,b)}
var Ur=[null,"http://www.opengis.net/wms"],Mr=K(Ur,{Service:I(function(a,b){return N({},Vr,a,b)}),Capability:I(function(a,b){return N({},Wr,a,b)})}),Wr=K(Ur,{Request:I(function(a,b){return N({},Xr,a,b)}),Exception:I(function(a,b){return N([],Yr,a,b)}),Layer:I(function(a,b){return N({},Zr,a,b)})}),Vr=K(Ur,{Name:I(S),Title:I(S),Abstract:I(S),KeywordList:I(Sr),OnlineResource:I(tq),ContactInformation:I(function(a,b){return N({},$r,a,b)}),Fees:I(S),AccessConstraints:I(S),LayerLimit:I(Mm),MaxWidth:I(Mm),MaxHeight:I(Mm)}),$r=K(Ur,{ContactPersonPrimary:I(function(a,b){return N({},as,a,b)}),ContactPosition:I(S),ContactAddress:I(function(a,b){return N({},bs,a,b)}),ContactVoiceTelephone:I(S),ContactFacsimileTelephone:I(S),ContactElectronicMailAddress:I(S)}),as=K(Ur,{ContactPerson:I(S),ContactOrganization:I(S)}),bs=K(Ur,{AddressType:I(S),Address:I(S),City:I(S),StateOrProvince:I(S),PostCode:I(S),Country:I(S)}),Yr=K(Ur,{Format:rl(S)}),Zr=K(Ur,{Name:I(S),Title:I(S),Abstract:I(S),KeywordList:I(Sr),CRS:tl(S),EX_GeographicBoundingBox:I(function(a,b){var c=N({},cs,a,b);if(c){a=c.westBoundLongitude;b=c.southBoundLatitude;var d=c.eastBoundLongitude,c=c.northBoundLatitude;if(void 0!==a&&void 0!==b&&void 0!==d&&void 0!==c)return[a,b,d,c]}}),BoundingBox:tl(function(a){var b=[Lm(a.getAttribute("minx")),Lm(a.getAttribute("miny")),Lm(a.getAttribute("maxx")),Lm(a.getAttribute("maxy"))],c=[Lm(a.getAttribute("resx")),Lm(a.getAttribute("resy"))];return{crs:a.getAttribute("CRS"),extent:b,res:c}}),Dimension:tl(function(a){return{name:a.getAttribute("name"),units:a.getAttribute("units"),unitSymbol:a.getAttribute("unitSymbol"),"default":a.getAttribute("default"),multipleValues:Im(a.getAttribute("multipleValues")),nearestValue:Im(a.getAttribute("nearestValue")),current:Im(a.getAttribute("current")),values:S(a)}}),Attribution:I(function(a,b){return N({},ds,a,b)}),AuthorityURL:tl(function(a,b){if(b=Nr(a,b))return b.name=a.getAttribute("name"),b}),Identifier:tl(S),MetadataURL:tl(function(a,b){if(b=Nr(a,b))return b.type=a.getAttribute("type"),b}),DataURL:tl(Nr),FeatureListURL:tl(Nr),Style:tl(function(a,b){return N({},es,a,b)}),MinScaleDenominator:I(Km),MaxScaleDenominator:I(Km),Layer:tl(function(a,b){var c=b[b.length-1],d=N({},Zr,a,b);if(d)return b=Im(a.getAttribute("queryable")),void 0===b&&(b=c.queryable),d.queryable=void 0!==b?b:!1,b=Nm(a.getAttribute("cascaded")),void 0===b&&(b=c.cascaded),d.cascaded=b,b=Im(a.getAttribute("opaque")),void 0===b&&(b=c.opaque),d.opaque=void 0!==b?b:!1,b=Im(a.getAttribute("noSubsets")),void 0===b&&(b=c.noSubsets),d.noSubsets=void 0!==b?b:!1,(b=Lm(a.getAttribute("fixedWidth")))||(b=c.fixedWidth),d.fixedWidth=b,(a=Lm(a.getAttribute("fixedHeight")))||(a=c.fixedHeight),d.fixedHeight=a,["Style","CRS","AuthorityURL"].forEach(function(a){a in c&&(d[a]=(d[a]||[]).concat(c[a]))}),"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(a){a in d||(d[a]=c[a])}),d})}),ds=K(Ur,{Title:I(S),OnlineResource:I(tq),LogoURL:I(Rr)}),cs=K(Ur,{westBoundLongitude:I(Km),eastBoundLongitude:I(Km),southBoundLatitude:I(Km),northBoundLatitude:I(Km)}),Xr=K(Ur,{GetCapabilities:I(Pr),GetMap:I(Pr),GetFeatureInfo:I(Pr)}),Qr=K(Ur,{Format:tl(S),DCPType:tl(function(a,b){return N({},fs,a,b)})}),fs=K(Ur,{HTTP:I(function(a,b){return N({},gs,a,b)})}),gs=K(Ur,{Get:I(Nr),Post:I(Nr)}),es=K(Ur,{Name:I(S),Title:I(S),Abstract:I(S),LegendURL:tl(Rr),StyleSheetURL:I(Nr),StyleURL:I(Nr)}),Or=K(Ur,{Format:I(S),OnlineResource:I(tq)}),Tr=K(Ur,{Keyword:rl(S)});function hs(a){a=a?a:{};this.a="http://mapserver.gis.umn.edu/mapserver";this.b=new an;this.c=a.layers?a.layers:null;Cm.call(this)}v(hs,Cm);hs.prototype.zc=function(a,b){var c={};b&&tb(c,Fl(this,a,b));c=[c];a.setAttribute("namespaceURI",this.a);var d=a.localName;b=[];if(a.childNodes.length){if("msGMLOutput"==d)for(var e=0,f=a.childNodes.length;e<f;e++){var g=a.childNodes[e];if(g.nodeType===Node.ELEMENT_NODE){var h=c[0],l=g.localName.replace("_layer","");if(!this.c||ja(this.c,l)){l+="_feature";h.featureType=l;h.featureNS=this.a;var m={};m[l]=rl(this.b.wg,this.b);h=K([h.featureNS,null],m);g.setAttribute("namespaceURI",this.a);(g=N([],h,g,c,this.b))&&la(b,g)}}}"FeatureCollection"==d&&(a=N([],this.b.b,a,[{}],this.b))&&(b=a)}return b};hs.prototype.Vg=function(){};hs.prototype.Xb=function(){};hs.prototype.ie=function(){};function is(){this.i=new vq}v(is,uq);is.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};is.prototype.b=function(a){var b=a.getAttribute("version").trim(),c=this.i.b(a);if(!c)return null;c.version=b;return(c=N(c,js,a,[]))?c:null};function ks(a){var b=S(a).split(" ");if(b&&2==b.length&&(a=+b[0],b=+b[1],!isNaN(a)&&!isNaN(b)))return[a,b]}
var ls=[null,"http://www.opengis.net/wmts/1.0"],ms=[null,"http://www.opengis.net/ows/1.1"],js=K(ls,{Contents:I(function(a,b){return N({},ns,a,b)})}),ns=K(ls,{Layer:tl(function(a,b){return N({},os,a,b)}),TileMatrixSet:tl(function(a,b){return N({},ps,a,b)})}),os=K(ls,{Style:tl(function(a,b){if(b=N({},qs,a,b))return a="true"===a.getAttribute("isDefault"),b.isDefault=a,b}),Format:tl(S),TileMatrixSetLink:tl(function(a,b){return N({},rs,a,b)}),Dimension:tl(function(a,b){return N({},ss,a,b)}),ResourceURL:tl(function(a){var b=a.getAttribute("format"),c=a.getAttribute("template");a=a.getAttribute("resourceType");var d={};b&&(d.format=b);c&&(d.template=c);a&&(d.resourceType=a);return d})},K(ms,{Title:I(S),Abstract:I(S),WGS84BoundingBox:I(function(a,b){a=N([],ts,a,b);if(2==a.length)return Na(a)}),Identifier:I(S)})),qs=K(ls,{LegendURL:tl(function(a){var b={};b.format=a.getAttribute("format");b.href=tq(a);return b})},K(ms,{Title:I(S),Identifier:I(S)})),rs=K(ls,{TileMatrixSet:I(S),TileMatrixSetLimits:I(function(a,b){return N([],us,a,b)})}),us=K(ls,{TileMatrixLimits:rl(function(a,b){return N({},vs,a,b)})}),vs=K(ls,{TileMatrix:I(S),MinTileRow:I(Mm),MaxTileRow:I(Mm),MinTileCol:I(Mm),MaxTileCol:I(Mm)}),ss=K(ls,{Default:I(S),Value:tl(S)},K(ms,{Identifier:I(S)})),ts=K(ms,{LowerCorner:rl(ks),UpperCorner:rl(ks)}),ps=K(ls,{WellKnownScaleSet:I(S),TileMatrix:tl(function(a,b){return N({},ws,a,b)})},K(ms,{SupportedCRS:I(S),Identifier:I(S)})),ws=K(ls,{TopLeftCorner:I(ks),ScaleDenominator:I(Km),TileWidth:I(Mm),TileHeight:I(Mm),MatrixWidth:I(Mm),MatrixHeight:I(Mm)},K(ms,{Identifier:I(S)}));function xs(a){Tc.call(this);a=a||{};this.a=null;this.f=fc;this.c=void 0;y(this,Vc("projection"),this.Am,this);y(this,Vc("tracking"),this.Bm,this);void 0!==a.projection&&this.Wh(a.projection);void 0!==a.trackingOptions&&this.wj(a.trackingOptions);this.Ke(void 0!==a.tracking?a.tracking:!1)}v(xs,Tc);k=xs.prototype;k.ka=function(){this.Ke(!1);Tc.prototype.ka.call(this)};k.Am=function(){var a=this.Uh();a&&(this.f=Vb(Tb("EPSG:4326"),a),this.a&&this.set("position",this.f(this.a)))};k.Bm=function(){if(Wd){var a=this.Vh();a&&void 0===this.c?this.c=navigator.geolocation.watchPosition(this.np.bind(this),this.op.bind(this),this.Gh()):a||void 0===this.c||(navigator.geolocation.clearWatch(this.c),this.c=void 0)}};k.np=function(a){a=a.coords;this.set("accuracy",a.accuracy);this.set("altitude",null===a.altitude?void 0:a.altitude);this.set("altitudeAccuracy",null===a.altitudeAccuracy?void 0:a.altitudeAccuracy);this.set("heading",null===a.heading?void 0:Ha(a.heading));this.a?(this.a[0]=a.longitude,this.a[1]=a.latitude):this.a=[a.longitude,a.latitude];var b=this.f(this.a);this.set("position",b);this.set("speed",null===a.speed?void 0:a.speed);a=Xf(Jb,this.a,a.accuracy);a.Dc(this.f);this.set("accuracyGeometry",a);this.s()};k.op=function(a){a.type="error";this.Ke(!1);this.b(a)};k.Dk=function(){return this.get("accuracy")};k.Ek=function(){return this.get("accuracyGeometry")||null};k.Gk=function(){return this.get("altitude")};k.Hk=function(){return this.get("altitudeAccuracy")};k.ym=function(){return this.get("heading")};k.zm=function(){return this.get("position")};k.Uh=function(){return this.get("projection")};k.ll=function(){return this.get("speed")};k.Vh=function(){return this.get("tracking")};k.Gh=function(){return this.get("trackingOptions")};k.Wh=function(a){this.set("projection",Tb(a))};k.Ke=function(a){this.set("tracking",a)};k.wj=function(a){this.set("trackingOptions",a)};function ys(a,b,c){rf.call(this);this.Ng(a,b?b:0,c)}v(ys,rf);k=ys.prototype;k.clone=function(){var a=new ys(null);tf(a,this.ja,this.A.slice());a.s();return a};k.Kb=function(a,b,c,d){var e=this.A;a-=e[0];var f=b-e[1];b=a*a+f*f;if(b<d){if(b)for(d=this.pd()/Math.sqrt(b),c[0]=e[0]+d*a,c[1]=e[1]+d*f,d=2;d<this.a;++d)c[d]=e[d];else for(d=0;d<this.a;++d)c[d]=e[d];c.length=this.a;return b}return d};k.Mc=function(a,b){var c=this.A;a-=c[0];b-=c[1];return a*a+b*b<=zs(this)};k.wa=function(){return this.A.slice(0,this.a)};k.se=function(a){var b=this.A,c=b[this.a]-b[0];return Xa(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};k.pd=function(){return Math.sqrt(zs(this))};function zs(a){var b=a.A[a.a]-a.A[0];a=a.A[a.a+1]-a.A[1];return b*b+a*a}k.U=function(){return"Circle"};k.Xa=function(a){var b=this.G();return qb(a,b)?(b=this.wa(),a[0]<=b[0]&&a[2]>=b[0]||a[1]<=b[1]&&a[3]>=b[1]?!0:db(a,this.sb,this)):!1};k.ob=function(a){var b=this.a,c=a.slice();c[b]=c[0]+(this.A[b]-this.A[0]);var d;for(d=1;d<b;++d)c[b+d]=a[d];tf(this,this.ja,c);this.s()};k.Ng=function(a,b,c){if(a){uf(this,c,a,0);this.A||(this.A=[]);c=this.A;a=Cf(c,a);c[a++]=c[0]+b;var d;b=1;for(d=this.a;b<d;++b)c[a++]=c[b];c.length=a}else tf(this,"XY",null);this.s()};k.X=function(){};k.ma=function(){};k.Uc=function(a){this.A[this.a]=this.A[0]+a;this.s()};function As(a,b,c){for(var d=[],e=a(0),f=a(1),g=b(e),h=b(f),l=[f,e],m=[h,g],n=[1,0],p={},q=1E5,r,u,x,B,E;0<--q&&0<n.length;)x=n.pop(),e=l.pop(),g=m.pop(),f=x.toString(),f in p||(d.push(g[0],g[1]),p[f]=!0),B=n.pop(),f=l.pop(),h=m.pop(),E=(x+B)/2,r=a(E),u=b(r),Fa(u[0],u[1],g[0],g[1],h[0],h[1])<c?(d.push(h[0],h[1]),f=B.toString(),p[f]=!0):(n.push(B,E,E,x),m.push(h,u,u,g),l.push(f,r,r,e));return d}function Bs(a,b,c,d,e){var f=Tb("EPSG:4326");return As(function(d){return[a,b+(c-b)*d]},ec(f,d),e)}
function Cs(a,b,c,d,e){var f=Tb("EPSG:4326");return As(function(d){return[b+(c-b)*d,a]},ec(f,d),e)};function Ds(a){a=a||{};this.j=this.v=null;this.f=this.o=Infinity;this.g=this.l=-Infinity;this.ra=this.oa=Infinity;this.R=this.I=-Infinity;this.Jb=void 0!==a.targetSize?a.targetSize:100;this.fb=void 0!==a.maxLines?a.maxLines:100;this.i=[];this.c=[];this.pa=void 0!==a.strokeStyle?a.strokeStyle:Es;this.D=this.u=void 0;this.a=this.b=this.S=null;1==a.showLabels&&(this.na=a.lonLabelFormatter?a.lonLabelFormatter:bf.bind(this,"EW"),this.Ua=a.latLabelFormatter?a.latLabelFormatter:bf.bind(this,"NS"),this.fa=void 0==a.lonLabelPosition?0:a.lonLabelPosition,this.T=void 0==a.latLabelPosition?1:a.latLabelPosition,this.B=void 0!==a.lonLabelStyle?a.lonLabelStyle:new fo({font:"12px Calibri,sans-serif",textBaseline:"bottom",fill:new al({color:"rgba(0,0,0,1)"}),stroke:new wj({color:"rgba(255,255,255,1)",width:3})}),this.C=void 0!==a.latLabelStyle?a.latLabelStyle:new fo({font:"12px Calibri,sans-serif",textAlign:"end",fill:new al({color:"rgba(0,0,0,1)"}),stroke:new wj({color:"rgba(255,255,255,1)",width:3})}),this.b=[],this.a=[]);this.setMap(void 0!==a.map?a.map:null)}var Es=new wj({color:"rgba(0,0,0,0.2)"}),Fs=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];function Gs(a,b,c,d,e,f,g){var h=g;c=Bs(b,c,d,a.j,e);h=void 0!==a.i[h]?a.i[h]:new O(null);h.ba("XY",c);qb(h.G(),f)&&(a.b&&(c=g,d=h.ga(),f=[d[0],Ca(f[1]+Math.abs(f[1]-f[3])*a.fa,Math.max(f[1],d[1]),Math.min(f[3],d[d.length-1]))],c=a.b[c]?a.b[c].Qd:new C(null),c.ma(f),a.b[g]={Qd:c,text:a.na(b)}),a.i[g++]=h);return g}
function Hs(a,b,c,d,e){var f=e;c=Cs(b,a.g,a.f,a.j,c);f=void 0!==a.c[f]?a.c[f]:new O(null);f.ba("XY",c);if(qb(f.G(),d)){if(a.a){c=e;var g=f.ga();d=[Ca(d[0]+Math.abs(d[0]-d[2])*a.T,Math.max(d[0],g[0]),Math.min(d[2],g[g.length-2])),g[1]];c=a.a[c]?a.a[c].Qd:new C(null);c.ma(d);a.a[e]={Qd:c,text:a.Ua(b)}}a.c[e++]=f}return e}k=Ds.prototype;k.Cm=function(){return this.v};k.al=function(){return this.i};k.hl=function(){return this.c};k.Kh=function(a){var b=a.vectorContext,c=a.frameState,d=c.extent;a=c.viewState;var e=a.center,f=a.projection,g=a.resolution;a=c.pixelRatio;a=g*g/(4*a*a);if(!this.j||!dc(this.j,f)){var h=Tb("EPSG:4326"),l=f.G(),m=f.g,n=hc(m,h,f),p=m[2],q=m[1],r=m[0],u=n[3],x=n[2],B=n[1],n=n[0];this.o=m[3];this.f=p;this.l=q;this.g=r;this.oa=u;this.ra=x;this.I=B;this.R=n;this.u=ec(h,f);this.D=ec(f,h);this.S=this.D(nb(l));this.j=f}f.i&&(f=f.G(),h=lb(f),c=c.focus[0],c<f[0]||c>f[2])&&(c=h*Math.ceil((f[0]-c)/h),d=[d[0]+
c,d[1],d[2]+c,d[3]]);c=this.S[0];f=this.S[1];h=-1;m=Math.pow(this.Jb*g,2);p=[];q=[];g=0;for(l=Fs.length;g<l;++g){r=Fs[g]/2;p[0]=c-r;p[1]=f-r;q[0]=c+r;q[1]=f+r;this.u(p,p);this.u(q,q);r=Math.pow(q[0]-p[0],2)+Math.pow(q[1]-p[1],2);if(r<=m)break;h=Fs[g]}g=h;if(-1==g)this.i.length=this.c.length=0,this.b&&(this.b.length=0),this.a&&(this.a.length=0);else{c=this.D(e);e=c[0];c=c[1];f=this.fb;h=[Math.max(d[0],this.R),Math.max(d[1],this.I),Math.min(d[2],this.ra),Math.min(d[3],this.oa)];h=hc(h,this.j,"EPSG:4326");m=h[3];q=h[1];e=Math.floor(e/g)*g;p=Ca(e,this.g,this.f);l=Gs(this,p,q,m,a,d,0);for(h=0;p!=this.g&&h++<f;)p=Math.max(p-g,this.g),l=Gs(this,p,q,m,a,d,l);p=Ca(e,this.g,this.f);for(h=0;p!=this.f&&h++<f;)p=Math.min(p+g,this.f),l=Gs(this,p,q,m,a,d,l);this.i.length=l;this.b&&(this.b.length=l);c=Math.floor(c/g)*g;e=Ca(c,this.l,this.o);l=Hs(this,e,a,d,0);for(h=0;e!=this.l&&h++<f;)e=Math.max(e-g,this.l),l=Hs(this,e,a,d,l);e=Ca(c,this.l,this.o);for(h=0;e!=this.o&&h++<f;)e=Math.min(e+g,this.o),l=Hs(this,e,a,d,l);this.c.length=l;this.a&&(this.a.length=l)}b.Ma(null,this.pa);a=0;for(e=this.i.length;a<e;++a)g=this.i[a],b.zb(g);a=0;for(e=this.c.length;a<e;++a)g=this.c[a],b.zb(g);if(this.b)for(a=0,e=this.b.length;a<e;++a)g=this.b[a],this.B.xd(g.text),b.Cb(this.B),b.zb(g.Qd);if(this.a)for(a=0,e=this.a.length;a<e;++a)g=this.a[a],this.C.xd(g.text),b.Cb(this.C),b.zb(g.Qd)};k.setMap=function(a){this.v&&(this.v.K("postcompose",this.Kh,this),this.v.render());a&&(a.J("postcompose",this.Kh,this),a.render());this.v=a};function Is(a,b,c,d,e){Qc.call(this);this.f=e;this.extent=a;this.a=c;this.resolution=b;this.state=d}v(Is,Qc);Is.prototype.s=function(){this.b("change")};Is.prototype.G=function(){return this.extent};Is.prototype.getState=function(){return this.state};function Js(a,b,c,d,e,f,g){Is.call(this,a,b,c,0,d);this.j=e;this.M=new Image;null!==f&&(this.M.crossOrigin=f);this.c={};this.i=null;this.state=0;this.g=g}v(Js,Is);k=Js.prototype;k.Y=function(a){if(void 0!==a){var b;a=w(a);if(a in this.c)return this.c[a];wb(this.c)?b=this.M:b=this.M.cloneNode(!1);return this.c[a]=b}return this.M};k.Fm=function(){this.state=3;this.i.forEach(Ec);this.i=null;this.s()};k.Gm=function(){void 0===this.resolution&&(this.resolution=mb(this.extent)/this.M.height);this.state=2;this.i.forEach(Ec);this.i=null;this.s()};k.load=function(){if(0==this.state||3==this.state)this.state=1,this.s(),this.i=[Jc(this.M,"error",this.Fm,this),Jc(this.M,"load",this.Gm,this)],this.g(this,this.j)};k.Og=function(a){this.M=a};function Ks(a,b,c,d,e,f){this.c=f?f:null;Is.call(this,a,b,c,f?0:2,d);this.i=e}v(Ks,Is);Ks.prototype.g=function(a){this.state=a?3:2;this.s()};Ks.prototype.load=function(){0==this.state&&(this.state=1,this.s(),this.c(this.g.bind(this)))};Ks.prototype.Y=function(){return this.i};function Ls(a,b){Qc.call(this);this.ta=a;this.state=b;this.i=null;this.key=""}v(Ls,Qc);Ls.prototype.s=function(){this.b("change")};Ls.prototype.bb=function(){return this.key+"/"+this.ta};function Ms(a){if(!a.i)return a;var b=a.i;do{if(2==b.getState())return b;b=b.i}while(b);return a}Ls.prototype.f=function(){return this.ta};Ls.prototype.getState=function(){return this.state};function Ns(a,b){a.state=b;a.s()};function Os(a,b,c,d,e){Ls.call(this,a,b);this.g=c;this.M=new Image;null!==d&&(this.M.crossOrigin=d);this.c=null;this.j=e}v(Os,Ls);k=Os.prototype;k.ka=function(){1==this.state&&Ps(this);this.i&&Nc(this.i);this.state=5;this.s();Ls.prototype.ka.call(this)};k.Y=function(){return this.M};k.bb=function(){return this.g};k.Dm=function(){this.state=3;this.M=Qs;Ps(this);this.s()};k.Em=function(){this.state=this.M.naturalWidth&&this.M.naturalHeight?2:4;Ps(this);this.s()};k.load=function(){if(0==this.state||3==this.state)this.state=1,this.s(),this.c=[Jc(this.M,"error",this.Dm,this),Jc(this.M,"load",this.Em,this)],this.j(this,this.g)};function Ps(a){a.c.forEach(Ec);a.c=null}var Qs=new Image;Qs.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";function Rs(a){a=a?a:{};ng.call(this,{handleEvent:mf});this.g=a.formatConstructors?a.formatConstructors:[];this.o=a.projection?Tb(a.projection):null;this.a=null;this.target=a.target?a.target:null}v(Rs,ng);function Ss(a){a=a.dataTransfer.files;var b;var c=0;for(b=a.length;c<b;++c){var d=a.item(c);var e=new FileReader;e.addEventListener("load",this.j.bind(this,d));e.readAsText(d)}}function Ts(a){a.stopPropagation();a.preventDefault();a.dataTransfer.dropEffect="copy"}
Rs.prototype.j=function(a,b){b=b.target.result;var c=this.v,d=this.o;d||(d=c.Z().v);var c=this.g,e=[],f;var g=0;for(f=c.length;g<f;++g){var h=new c[g];var l={featureProjection:d};try{e=h.Oa(b,l)}catch(m){e=null}if(e&&0<e.length)break}this.b(new Us(Vs,a,e,d))};function Ws(a){var b=a.v;b&&(b=a.target?a.target:b.a,a.a=[y(b,"drop",Ss,a),y(b,"dragenter",Ts,a),y(b,"dragover",Ts,a),y(b,"drop",Ts,a)])}Rs.prototype.Ha=function(a){ng.prototype.Ha.call(this,a);a?Ws(this):Xs(this)};Rs.prototype.setMap=function(a){Xs(this);ng.prototype.setMap.call(this,a);this.c()&&Ws(this)};function Xs(a){a.a&&(a.a.forEach(Ec),a.a=null)}var Vs="addfeatures";function Us(a,b,c,d){Oc.call(this,a);this.features=c;this.file=b;this.projection=d}v(Us,Oc);function Ys(a){a=a?a:{};Dg.call(this,{handleDownEvent:Zs,handleDragEvent:$s,handleUpEvent:at});this.l=a.condition?a.condition:yg;this.a=this.g=void 0;this.j=0;this.u=void 0!==a.duration?a.duration:400}v(Ys,Dg);function $s(a){if(Bg(a)){var b=a.map,c=b.Ob(),d=a.pixel;a=d[0]-c[0]/2;d=c[1]/2-d[1];c=Math.atan2(d,a);a=Math.sqrt(a*a+d*d);b=b.Z();b.g.rotation!==Te&&void 0!==this.g&&(d=c-this.g,og(b,b.Qa()-d));this.g=c;void 0!==this.a&&(c=this.a*(b.Pa()/a),qg(b,c));void 0!==this.a&&(this.j=this.a/a);this.a=a}}
function at(a){if(!Bg(a))return!0;a=a.map.Z();cg(a,1,-1);var b=this.j-1,c=a.Qa(),c=a.constrainRotation(c,0);og(a,c,void 0,void 0);var c=a.Pa(),d=this.u,c=a.constrainResolution(c,0,b);qg(a,c,void 0,d);this.j=0;return!1}function Zs(a){return Bg(a)&&this.l(a)?(cg(a.map.Z(),1,1),this.a=this.g=void 0,!0):!1};function bt(a,b,c,d){this.fb=a;this.Ua=b;this.overlaps=d;this.c=0;this.resolution=c;this.ra=this.oa=null;this.a=[];this.coordinates=[];this.T=Bh();this.b=[];this.B=null;this.fa=Bh();this.na=Bh()}v(bt,Wh);function ct(a,b,c,d,e,f,g){var h=a.coordinates.length,l=a.Sf();g&&(c+=e);g=[b[c],b[c+1]];var m=[NaN,NaN],n=!0,p;for(p=c+e;p<d;p+=e){m[0]=b[p];m[1]=b[p+1];var q=Wa(l,m);q!==r?(n&&(a.coordinates[h++]=g[0],a.coordinates[h++]=g[1]),a.coordinates[h++]=m[0],a.coordinates[h++]=m[1],n=!1):1===q?(a.coordinates[h++]=m[0],a.coordinates[h++]=m[1],n=!1):n=!0;g[0]=m[0];g[1]=m[1];var r=q}if(f&&n||p===c+e)a.coordinates[h++]=g[0],a.coordinates[h++]=g[1];return h}
function dt(a,b){a.oa=[0,b,0];a.a.push(a.oa);a.ra=[0,b,0];a.b.push(a.ra)}bt.prototype.Va=function(a,b){if(this.R){var c=Gh(this.T,this.R.slice());a.translate(c[0],c[1]);a.rotate(b)}a.fill();this.R&&a.setTransform.apply(a,this.na)};function et(a,b,c,d,e,f,g,h,l){if(a.B&&pa(d,a.T))var m=a.B;else a.B||(a.B=[]),m=pf(a.coordinates,0,a.coordinates.length,2,d,a.B),Fh(a.T,d);d=!wb(f);for(var n=0,p=g.length,q=0,r,u=a.fa,x=a.na,B,E,A,L,oa=0,ha=0,ga=a.a!=g||a.overlaps?0:200;n<p;){var z=g[n];switch(z[0]){case 0:q=z[1];d&&f[w(q).toString()]||!q.V()?n=z[2]:void 0===l||qb(l,q.V().G())?++n:n=z[2]+1;break;case 1:oa>ga&&(a.Va(b,e),oa=0);ha>ga&&(b.stroke(),ha=0);oa||ha||(b.beginPath(),B=E=NaN);++n;break;case 2:q=z[1];r=m[q];z=m[q+1];A=m[q+2]-
r;q=m[q+3]-z;q=Math.sqrt(A*A+q*q);b.moveTo(r+q,z);b.arc(r,z,q,0,2*Math.PI,!0);++n;break;case 3:b.closePath();++n;break;case 4:q=z[1];r=z[2];var M=z[3];var ba=z[4]*c;var da=z[5]*c;var fb=z[6],ca=z[7],Ub=z[8],uc=z[9];var bc=z[10];A=z[11];L=z[12];var Je=z[13],zg=z[14];for(bc&&(A+=e);q<r;q+=2){z=m[q]-ba;bc=m[q+1]-da;Je&&(z=Math.round(z),bc=Math.round(bc));if(1!=L||A){var ff=z+ba,rh=bc+da;Kh(u,ff,rh,L,L,A,-ff,-rh);b.setTransform.apply(b,u)}ff=b.globalAlpha;1!=ca&&(b.globalAlpha=ff*ca);var rh=zg+Ub>M.width?M.width-Ub:zg,Bq=fb+uc>M.height?M.height-uc:fb;b.drawImage(M,Ub,uc,rh,Bq,z,bc,rh*c,Bq*c);1!=ca&&(b.globalAlpha=ff);(1!=L||A)&&b.setTransform.apply(b,x)}++n;break;case 5:q=z[1];r=z[2];da=z[3];fb=z[4]*c;ca=z[5]*c;A=z[6];L=z[7]*c;M=z[8];ba=z[9];for((bc=z[10])&&(A+=e);q<r;q+=2){z=m[q]+fb;bc=m[q+1]+ca;if(1!=L||A)Kh(u,z,bc,L,L,A,-z,-bc),b.setTransform.apply(b,u);Ub=da.split("\n");uc=Ub.length;1<uc?(Je=Math.round(1.5*b.measureText("M").width),bc-=(uc-1)/2*Je):Je=0;for(zg=0;zg<uc;zg++)ff=Ub[zg],ba&&b.strokeText(ff,z,bc),M&&b.fillText(ff,z,bc),bc+=Je;(1!=L||A)&&b.setTransform.apply(b,x)}++n;break;case 6:if(h&&(q=z[1],q=h(q)))return q;++n;break;case 7:ga?oa++:a.Va(b,e);++n;break;case 8:q=z[1];r=z[2];z=m[q];bc=m[q+1];A=z+.5|0;L=bc+.5|0;if(A!==B||L!==E)b.moveTo(z,bc),B=A,E=L;for(q+=2;q<r;q+=2)if(z=m[q],bc=m[q+1],A=z+.5|0,L=bc+.5|0,q==r-2||A!==B||L!==E)b.lineTo(z,bc),B=A,E=L;++n;break;case 9:a.R=z[2];oa&&(a.Va(b,e),oa=0,ha&&(b.stroke(),ha=0));b.fillStyle=z[1];++n;break;case 10:var q=void 0!==z[8]?z[8]:!0,ul=z[9];r=z[2];ha&&(b.stroke(),ha=0);b.strokeStyle=z[1];b.lineWidth=q?r*c:r;b.lineCap=z[3];b.lineJoin=z[4];b.miterLimit=z[5];Td&&(r=z[6],A=z[7],q&&c!==ul&&(r=r.map(function(a){return a*c/ul}),A*=c/ul,z[6]=r,z[7]=A,z[9]=c),b.lineDashOffset=A,b.setLineDash(r));++n;break;case 11:b.font=z[1];b.textAlign=z[2];b.textBaseline=z[3];++n;break;case 12:ga?ha++:b.stroke();++n;break;default:++n}}oa&&a.Va(b,e);ha&&b.stroke()}bt.prototype.La=function(a,b,c,d,e){et(this,a,b,c,d,e,this.a,void 0,void 0)};function ft(a){var b=a.b;b.reverse();var c,d=b.length,e=-1;for(c=0;c<d;++c){var f=b[c];var g=f[0];if(6==g)e=c;else if(0==g){f[2]=c;f=a.b;for(g=c;e<g;){var h=f[e];f[e]=f[g];f[g]=h;++e;--g}e=-1}}}function gt(a,b){a.oa[2]=a.a.length;a.oa=null;a.ra[2]=a.b.length;a.ra=null;b=[6,b];a.a.push(b);a.b.push(b)}bt.prototype.Te=ua;bt.prototype.Sf=function(){return this.Ua};function ht(a,b,c,d){bt.call(this,a,b,c,d);this.M=this.I=null;this.C=this.D=this.S=this.u=this.v=this.l=this.o=this.j=this.g=this.f=this.i=void 0}v(ht,bt);ht.prototype.qc=function(a,b){if(this.M){dt(this,b);var c=a.ga(),d=this.coordinates.length;a=ct(this,c,0,c.length,a.qa(),!1,!1);this.a.push([4,d,a,this.M,this.i,this.f,this.g,this.j,this.o,this.l,this.v,this.u,this.S,this.D,this.C]);this.b.push([4,d,a,this.I,this.i,this.f,this.g,this.j,this.o,this.l,this.v,this.u,this.S,this.D,this.C]);gt(this,b)}};ht.prototype.oc=function(a,b){if(this.M){dt(this,b);var c=a.ga(),d=this.coordinates.length;a=ct(this,c,0,c.length,a.qa(),!1,!1);this.a.push([4,d,a,this.M,this.i,this.f,this.g,this.j,this.o,this.l,this.v,this.u,this.S,this.D,this.C]);this.b.push([4,d,a,this.I,this.i,this.f,this.g,this.j,this.o,this.l,this.v,this.u,this.S,this.D,this.C]);gt(this,b)}};ht.prototype.Te=function(){ft(this);this.f=this.i=void 0;this.M=this.I=null;this.C=this.D=this.u=this.v=this.l=this.o=this.j=this.S=this.g=void 0};ht.prototype.Ub=function(a){var b=a.Hc(),c=a.ic(),d=a.qg(1),e=a.Y(1),f=a.Oc();this.i=b[0];this.f=b[1];this.I=d;this.M=e;this.g=c[1];this.j=a.f;this.o=f[0];this.l=f[1];this.v=a.l;this.u=a.g;this.S=a.a;this.D=a.v;this.C=c[0]};function it(a,b,c,d){bt.call(this,a,b,c,d);this.f=null;this.i={Md:void 0,Gd:void 0,Hd:null,Id:void 0,Jd:void 0,Kd:void 0,Ld:void 0,eg:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineDashOffset:void 0,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}v(it,bt);function jt(a,b,c,d,e){var f=a.coordinates.length;b=ct(a,b,c,d,e,!1,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}k=it.prototype;k.Sf=function(){this.f||(this.f=Ra(this.Ua),0<this.c&&Qa(this.f,this.resolution*(this.c+1)/2,this.f));return this.f};function kt(a){var b=a.i,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineDashOffset,g=b.lineJoin,h=b.lineWidth,l=b.miterLimit;b.Md==c&&b.Gd==d&&pa(b.Hd,e)&&b.Id==f&&b.Jd==g&&b.Kd==h&&b.Ld==l||(b.eg!=a.coordinates.length&&(a.a.push([12]),b.eg=a.coordinates.length),a.a.push([10,c,h,d,g,l,e,f,!0,1],[1]),b.Md=c,b.Gd=d,b.Hd=e,b.Id=f,b.Jd=g,b.Kd=h,b.Ld=l)}
k.mc=function(a,b){var c=this.i,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(kt(this),dt(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash,c.lineDashOffset,!0,1],[1]),c=a.ga(),jt(this,c,0,c.length,a.qa()),this.b.push([12]),gt(this,b))};k.nc=function(a,b){var c=this.i,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){kt(this);dt(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash,c.lineDashOffset,!0,1],[1]);c=a.Bb();d=a.ga();a=a.qa();var e=0,f;var g=0;for(f=c.length;g<f;++g)e=jt(this,d,e,c[g],a);this.b.push([12]);gt(this,b)}};k.Te=function(){this.i.eg!=this.coordinates.length&&this.a.push([12]);ft(this);this.i=null};k.Ma=function(a,b){a=b.a;this.i.strokeStyle=id(a?a:Uh);a=b.f;this.i.lineCap=void 0!==a?a:"round";a=b.i;this.i.lineDash=a?a:Th;a=b.g;this.i.lineDashOffset=a?a:0;a=b.j;this.i.lineJoin=void 0!==a?a:"round";a=b.c;this.i.lineWidth=void 0!==a?a:1;b=b.o;this.i.miterLimit=void 0!==b?b:10;this.i.lineWidth>this.c&&(this.c=this.i.lineWidth,this.f=null)};function lt(a,b,c,d){bt.call(this,a,b,c,d);this.f=null;this.i={oh:void 0,Md:void 0,Gd:void 0,Hd:null,Id:void 0,Jd:void 0,Kd:void 0,Ld:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineDashOffset:void 0,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}v(lt,bt);function mt(a,b,c,d,e){var f=a.i,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length,l=[1];a.a.push(l);a.b.push(l);for(l=0;l<h;++l){var m=d[l],n=a.coordinates.length;c=ct(a,b,c,m,e,!0,!f);c=[8,n,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=m}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}k=lt.prototype;k.Zb=function(a,b){var c=this.i,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){nt(this,a);dt(this,b);this.b.push([9,gd(Sh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash,c.lineDashOffset,!0,1]);var e=a.ga(),d=this.coordinates.length;ct(this,e,0,e.length,a.qa(),!1,!1);a=[1];d=[2,d];this.a.push(a,d);this.b.push(a,d);a=[7];this.b.push(a);void 0!==c.fillStyle&&this.a.push(a);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));gt(this,b)}};k.rc=function(a,b){var c=this.i;nt(this,a);dt(this,b);this.b.push([9,gd(Sh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash,c.lineDashOffset,!0,1]);var c=a.Bb(),d=a.ec();mt(this,d,0,c,a.qa());gt(this,b)};k.pc=function(a,b){var c=this.i,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){nt(this,a);dt(this,b);this.b.push([9,gd(Sh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash,c.lineDashOffset,!0,1]);c=a.c;d=fi(a);a=a.qa();var e=0,f;var g=0;for(f=c.length;g<f;++g)e=mt(this,d,e,c[g],a);gt(this,b)}};k.Te=function(){ft(this);this.i=null;var a=this.fb;if(a){var b=this.coordinates,c;var d=0;for(c=b.length;d<c;++d)b[d]=a*Math.round(b[d]/a)}};k.Sf=function(){this.f||(this.f=Ra(this.Ua),0<this.c&&Qa(this.f,this.resolution*(this.c+1)/2,this.f));return this.f};k.Ma=function(a,b){var c=this.i;a?(a=a.b,c.fillStyle=id(a?a:Sh)):c.fillStyle=void 0;b?(a=b.a,c.strokeStyle=id(a?a:Uh),a=b.f,c.lineCap=void 0!==a?a:"round",a=b.i,c.lineDash=a?a.slice():Th,a=b.g,c.lineDashOffset=a?a:0,a=b.j,c.lineJoin=void 0!==a?a:"round",a=b.c,c.lineWidth=void 0!==a?a:1,b=b.o,c.miterLimit=void 0!==b?b:10,c.lineWidth>this.c&&(this.c=c.lineWidth,this.f=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineDashOffset=void 0,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};function nt(a,b){var c=a.i,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineDashOffset,l=c.lineJoin,m=c.lineWidth,n=c.miterLimit;if(void 0!==d&&("string"!==typeof d||c.oh!=d)){var p=[9,d];"string"!==typeof d&&(b=b.G(),p.push([b[0],b[3]]));a.a.push(p);c.oh=c.fillStyle}void 0===e||c.Md==e&&c.Gd==f&&pa(c.Hd,g)&&c.Id==h&&c.Jd==l&&c.Kd==m&&c.Ld==n||(a.a.push([10,e,m,f,l,n,g,h,!0,1]),c.Md=e,c.Gd=f,c.Hd=g,c.Id=h,c.Jd=l,c.Kd=m,c.Ld=n)};function ot(a,b,c,d){bt.call(this,a,b,c,d);this.C=this.D=this.S=null;this.Ia="";this.o=this.j=0;this.l=void 0;this.u=this.v=0;this.g=this.f=this.i=null}v(ot,bt);ot.prototype.yc=function(a,b,c,d,e,f){if(""!==this.Ia&&this.g&&(this.i||this.f)){if(this.i){e=this.i;var g=this.S;if(!g||g.fillStyle!=e.fillStyle){var h=[9,e.fillStyle];this.a.push(h);this.b.push(h);g?g.fillStyle=e.fillStyle:this.S={fillStyle:e.fillStyle}}}this.f&&(e=this.f,g=this.D,g&&g.lineCap==e.lineCap&&g.lineDash==e.lineDash&&g.lineDashOffset==e.lineDashOffset&&g.lineJoin==e.lineJoin&&g.lineWidth==e.lineWidth&&g.miterLimit==e.miterLimit&&g.strokeStyle==e.strokeStyle||(h=[10,e.strokeStyle,e.lineWidth,e.lineCap,e.lineJoin,e.miterLimit,e.lineDash,e.lineDashOffset,!1,1],this.a.push(h),this.b.push(h),g?(g.lineCap=e.lineCap,g.lineDash=e.lineDash,g.lineDashOffset=e.lineDashOffset,g.lineJoin=e.lineJoin,g.lineWidth=e.lineWidth,g.miterLimit=e.miterLimit,g.strokeStyle=e.strokeStyle):this.D={lineCap:e.lineCap,lineDash:e.lineDash,lineDashOffset:e.lineDashOffset,lineJoin:e.lineJoin,lineWidth:e.lineWidth,miterLimit:e.miterLimit,strokeStyle:e.strokeStyle}));e=this.g;g=this.C;g&&g.font==e.font&&g.textAlign==e.textAlign&&g.textBaseline==e.textBaseline||(h=[11,e.font,e.textAlign,e.textBaseline],this.a.push(h),this.b.push(h),g?(g.font=e.font,g.textAlign=e.textAlign,g.textBaseline=e.textBaseline):this.C={font:e.font,textAlign:e.textAlign,textBaseline:e.textBaseline});dt(this,f);e=this.coordinates.length;a=ct(this,a,b,c,d,!1,!1);a=[5,e,a,this.Ia,this.j,this.o,this.v,this.u,!!this.i,!!this.f,this.l];this.a.push(a);this.b.push(a);gt(this,f)}};ot.prototype.Cb=function(a){if(a){var b=a.Fa();b?(b=b.b,b=id(b?b:Sh),this.i?this.i.fillStyle=b:this.i={fillStyle:b}):this.i=null;var c=a.Ga();if(c){var b=c.a,d=c.f,e=c.i,f=c.g,g=c.j,h=c.c,c=c.o,d=void 0!==d?d:"round",e=e?e.slice():Th,f=void 0!==f?f:0,g=void 0!==g?g:"round",h=void 0!==h?h:1,c=void 0!==c?c:10,b=id(b?b:Uh);if(this.f){var l=this.f;l.lineCap=d;l.lineDash=e;l.lineDashOffset=f;l.lineJoin=g;l.lineWidth=h;l.miterLimit=c;l.strokeStyle=b}else this.f={lineCap:d,lineDash:e,lineDashOffset:f,lineJoin:g,lineWidth:h,miterLimit:c,strokeStyle:b}}else this.f=null;var m=a.a,b=a.i,d=a.c,e=a.o,h=a.f,c=a.b,f=a.Na(),g=a.g,l=a.j;a=void 0!==m?m:"10px sans-serif";g=void 0!==g?g:"center";l=void 0!==l?l:"middle";this.g?(m=this.g,m.font=a,m.textAlign=g,m.textBaseline=l):this.g={font:a,textAlign:g,textBaseline:l};this.Ia=void 0!==f?f:"";this.j=void 0!==b?b:0;this.o=void 0!==d?d:0;this.l=void 0!==e?e:!1;this.v=void 0!==h?h:0;this.u=void 0!==c?c:1}else this.Ia=""};function pt(a,b,c,d,e){this.v=a;this.c=b;this.o=d;this.l=c;this.f=e;this.a={};this.g=jd(1,1);this.j=Bh()}v(pt,ki);var qt={0:[[!0]]};function rt(a,b,c){var d,e=Math.floor(a.length/2);if(b>=e)for(d=e;d<b;d++)a[d][c]=!0;else if(b<e)for(d=b+1;d<e;d++)a[d][c]=!0}
function st(a){if(void 0!==qt[a])return qt[a];for(var b=2*a+1,c=Array(b),d=0;d<b;d++)c[d]=Array(b);for(var b=a,e=d=0;b>=d;)rt(c,a+b,a+d),rt(c,a+d,a+b),rt(c,a-d,a+b),rt(c,a-b,a+d),rt(c,a-b,a-d),rt(c,a-d,a-b),rt(c,a+d,a-b),rt(c,a+b,a-d),d++,e+=1+2*d,0<2*(e-b)+1&&(--b,e+=1-2*b);return qt[a]=c}function tt(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].Te()}}
pt.prototype.Ea=function(a,b,c,d,e,f){d=Math.round(d);var g=2*d+1,h=Kh(this.j,d+.5,d+.5,1/b,-1/b,-c,-a[0],-a[1]),l=this.g;l.canvas.width!==g||l.canvas.height!==g?(l.canvas.width=g,l.canvas.height=g):l.clearRect(0,0,g,g);if(void 0!==this.f){var m=Oa();Pa(m,a);Qa(m,b*(this.f+d),m)}var n=st(d);return ut(this,l,h,c,e,function(a){for(var b=l.getImageData(0,0,g,g).data,c=0;c<g;c++)for(var d=0;d<g;d++)if(n[c][d]&&0<b[4*(d*g+c)+3]){if(a=f(a))return a;l.clearRect(0,0,g,g);return}},m)};function vt(a,b){var c=a.c;a=c[0];var d=c[1],e=c[2],c=c[3];a=[a,d,a,c,e,c,e,d];pf(a,0,8,2,b,a);return a}pt.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0";a=this.a[c];void 0===a&&(a={},this.a[c]=a);c=a[b];void 0===c&&(c=new wt[b](this.v,this.c,this.l,this.o),a[b]=c);return c};pt.prototype.i=function(){return wb(this.a)};pt.prototype.La=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(ia);var h=vt(this,c);a.save();a.beginPath();a.moveTo(h[0],h[1]);a.lineTo(h[2],h[3]);a.lineTo(h[4],h[5]);a.lineTo(h[6],h[7]);a.clip();f=f?f:ji;var l,m,h=0;for(l=g.length;h<l;++h){var n=this.a[g[h].toString()];var p=0;for(m=f.length;p<m;++p){var q=n[f[p]];void 0!==q&&q.La(a,b,c,d,e)}}a.restore()};function ut(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var l,m;var n=0;for(l=h.length;n<l;++n){var p=a.a[h[n].toString()];for(m=ji.length-1;0<=m;--m){var q=p[ji[m]];if(void 0!==q&&(q=et(q,b,1,c,d,e,q.b,f,g)))return q}}}var wt={Circle:lt,Image:ht,LineString:it,Polygon:lt,Text:ot};function xt(a){Sc.call(this);this.a=a}v(xt,Sc);xt.prototype.Ea=ua;xt.prototype.Ue=nf;xt.prototype.Nf=function(a,b,c){return function(d,e){return yt(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.ta.toString()]=a})}};xt.prototype.na=function(a){2===a.target.getState()&&zt(this)};function At(a,b){var c=b.getState();2!=c&&3!=c&&y(b,"change",a.na,a);0==c&&(b.load(),c=b.getState());return 2==c}function zt(a){var b=a.a;b.Mb()&&"ready"==b.$f()&&a.s()}
function Bt(a,b){b.Ki()&&a.postRenderFunctions.push(function(a,b,e){b=w(a).toString();a.fd(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Ct(a,b){if(b){var c;var d=0;for(c=b.length;d<c;++d){var e=b[d];a[w(e).toString()]=e}}}function Dt(a,b){b=b.D;void 0!==b&&("string"===typeof b?a.logos[b]="":b&&(xa("string"==typeof b.href,44),xa("string"==typeof b.src,45),a.logos[b.src]=b.href))}
function Et(a,b,c,d){b=w(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.ca<a.ca&&(a.ca=d.ca),d.$>a.$&&(a.$=d.$),d.da<a.da&&(a.da=d.da),d.ia>a.ia&&(a.ia=d.ia)):a[b][c]=d:(a[b]={},a[b][c]=d)}
function Ft(a,b,c,d,e,f,g,h,l,m){var n=w(b).toString();n in a.wantedTiles||(a.wantedTiles[n]={});var p=a.wantedTiles[n];a=a.tileQueue;var q=c.minZoom,r,u,x;for(x=g;x>=q;--x){var B=oc(c,f,x,B);var E=c.Da(x);for(r=B.ca;r<=B.$;++r)for(u=B.da;u<=B.ia;++u)if(g-x<=h){var A=b.Nc(x,r,u,d,e);0==A.getState()&&(p[A.bb()]=!0,A.bb()in a.a||a.f([A,n,tc(c,A.ta),E]));l&&l.call(m,A)}else b.Ug(x,r,u,e)}};function Gt(a){xt.call(this,a);this.fa=Bh()}v(Gt,xt);function Ht(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=ib(c),l=hb(c),m=gb(c);c=eb(c);Gh(b.coordinateToPixelTransform,h);Gh(b.coordinateToPixelTransform,l);Gh(b.coordinateToPixelTransform,m);Gh(b.coordinateToPixelTransform,c);a.save();Vh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(m[0]*d,m[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();Vh(a,g,e/2,f/2)}
function It(a,b,c,d,e){var f=a.a;if(Rc(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,l=d.viewState.rotation;Vh(c,-l,g/2,h/2);a=e?e:Jt(a,d,0);f.b(new Rh(b,new Xh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));Vh(c,l,g/2,h/2)}}Gt.prototype.u=function(a,b,c,d){if(this.Ea(a,b,0,mf,this))return c.call(d,this.a,null)};Gt.prototype.ef=function(a,b,c,d){It(this,"postcompose",a,b,d)};function Jt(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Kh(a.fa,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function Kt(a,b){return w(a)-w(b)}function Lt(a,b){a=.5*a/b;return a*a}function Mt(a,b,c,d,e,f){var g=!1,h;if(h=c.Y()){var l=h.Ye();2==l||3==l?h.Bj(e,f):(0==l&&h.load(),h.Nh(e,f),g=!0)}if(e=(0,c.Za)(b))d=e.Vd(d),(0,Nt[d.U()])(a,d,c,b);return g}
var Nt={Point:function(a,b,c,d){var e=c.Y();if(e){if(2!=e.Ye())return;var f=a.b(c.Ba(),"Image");f.Ub(e);f.qc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),a.yc(b.ga(),0,2,2,b,d)},LineString:function(a,b,c,d){var e=c.Ga();if(e){var f=a.b(c.Ba(),"LineString");f.Ma(null,e);f.mc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),a.yc(di(b),0,2,2,b,d)},Polygon:function(a,b,c,d){var e=c.Fa(),f=c.Ga();if(e||f){var g=a.b(c.Ba(),"Polygon");g.Ma(e,f);g.rc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),a.yc(Wf(b),0,2,2,b,d)},MultiPoint:function(a,b,c,d){var e=c.Y();if(e){if(2!=e.Ye())return;var f=a.b(c.Ba(),"Image");f.Ub(e);f.oc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),c=b.ga(),a.yc(c,0,c.length,b.qa(),b,d)},MultiLineString:function(a,b,c,d){var e=c.Ga();if(e){var f=a.b(c.Ba(),"LineString");f.Ma(null,e);f.nc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),c=ei(b),a.yc(c,0,c.length,2,b,d)},MultiPolygon:function(a,b,c,d){var e=c.Fa(),f=c.Ga();if(f||e){var g=a.b(c.Ba(),"Polygon");g.Ma(e,f);g.pc(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),c=gi(b),a.yc(c,0,c.length,2,b,d)},GeometryCollection:function(a,b,c,d){b=b.a;var e;var f=0;for(e=b.length;f<e;++f)(0,Nt[b[f].U()])(a,b[f],c,d)},Circle:function(a,b,c,d){var e=c.Fa(),f=c.Ga();if(e||f){var g=a.b(c.Ba(),"Circle");g.Ma(e,f);g.Zb(b,d)}if(e=c.Na())a=a.b(c.Ba(),"Text"),a.Cb(e),a.yc(b.wa(),0,2,2,b,d)}};function Ot(a){Gt.call(this,a);this.c=!1;this.v=-1;this.l=NaN;this.j=Oa();this.f=this.o=null;this.g=jd()}v(Ot,Gt);Ot.prototype.S=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.Je?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,l=h.G(),m=this.a.ha(),n=Jt(this,a,0);It(this,"precompose",c,a,n);var p=b.extent,q=void 0!==p;q&&Ht(c,a,p);if((p=this.f)&&!p.i()){var r=0,u=0;if(Rc(this.a,"render")){var x=c.canvas.width;var B=c.canvas.height;if(g){var E=Math.round(Math.sqrt(x*x+B*B)),r=(E-x)/2,u=(E-B)/2;x=B=E}this.g.canvas.width=x;this.g.canvas.height=B;x=this.g}else x=c;B=x.globalAlpha;x.globalAlpha=b.opacity;x!=c&&x.translate(r,u);var E=a.size[0]*e,A=a.size[1]*e;Vh(x,-g,E/2,A/2);p.La(x,e,n,g,f);if(m.u&&h.i&&!Va(l,d)){for(var h=d[0],m=lb(l),L=0;h<l[0];)--L,n=m*L,n=Jt(this,a,n),p.La(x,e,n,g,f),h+=m;L=0;for(h=d[2];h>l[2];)++L,n=m*L,n=Jt(this,a,n),p.La(x,e,n,g,f),h-=m;n=Jt(this,a,0)}Vh(x,g,E/2,A/2);x!=c&&(It(this,"render",x,a,n),c.drawImage(x.canvas,-r,-u),x.translate(-r,-u));x.globalAlpha=B}q&&c.restore();this.ef(c,a,b,n)};Ot.prototype.Ea=function(a,b,c,d,e){if(this.f){var f=this.a,g={};return this.f.Ea(a,b.viewState.resolution,b.viewState.rotation,c,{},function(a){var b=w(a).toString();if(!(b in g))return g[b]=!0,d.call(e,a,f)})}};Ot.prototype.D=function(){zt(this)};Ot.prototype.sd=function(a){function b(a){var b=a.Lc();if(b)var d=b.call(a,m);else(b=c.f)&&(d=b(a,m));if(d){if(d){b=!1;if(Array.isArray(d))for(var e=0,f=d.length;e<f;++e)b=Mt(q,a,d[e],Lt(m,n),this.D,this)||b;else b=Mt(q,a,d,Lt(m,n),this.D,this)||b;a=b}else a=!1;this.c=this.c||a}}var c=this.a,d=c.ha();Ct(a.attributions,d.j);Dt(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.T,h=c.na;if(!this.c&&!g&&e||!h&&f)return!0;var l=a.extent,h=a.viewState,e=h.projection,m=h.resolution,n=a.pixelRatio,f=c.i,p=c.c,g=c.get(Pt);void 0===g&&(g=Kt);l=Qa(l,p*m);p=h.projection.G();d.u&&h.projection.i&&!Va(p,a.extent)&&(a=Math.max(lb(l)/2,lb(p)),l[0]=p[0]-a,l[2]=p[2]+a);if(!this.c&&this.l==m&&this.v==f&&this.o==g&&Va(this.j,l))return!0;this.f=null;this.c=!1;var q=new pt(.5*m/n,l,m,d.T,c.c);d.Yd(l,m,e);if(g){var r=[];d.$b(l,function(a){r.push(a)},this);r.sort(g);r.forEach(b,this)}else d.$b(l,b,this);tt(q);this.l=m;this.v=f;this.o=g;this.j=l;this.f=q;return!0};function Qt(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}v(Qt,mi);var Rt=new Qt;function St(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}v(St,ni);var Tt=new St;function Ut(a,b){this.i=a.getUniformLocation(b,"f");this.c=a.getUniformLocation(b,"e");this.g=a.getUniformLocation(b,"d");this.f=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Vt(a,b){xt.call(this,b);this.c=a;this.T=new Di([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.g=this.Ib=null;this.j=void 0;this.v=Bh();this.S=Bh();this.C=ti();this.u=null}v(Vt,xt);function Wt(a,b,c){var d=a.c.i;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.g,a.Ib));b=Qi(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Ib=b;a.g=e;a.j=c}else d.bindFramebuffer(36160,a.g)}
Vt.prototype.Gi=function(a,b,c){Xt(this,"precompose",c,a);wi(c,34962,this.T);var d=c.b,e=Hi(c,Rt,Tt);if(this.u)var f=this.u;else this.u=f=new Ut(d,e);c.Qc(e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.f,0));d.uniformMatrix4fv(f.g,!1,ui(this.C,this.v));d.uniformMatrix4fv(f.c,!1,ui(this.C,this.S));d.uniform1f(f.i,b.opacity);d.bindTexture(3553,this.Ib);d.drawArrays(5,0,4);Xt(this,"postcompose",c,a)};function Xt(a,b,c,d){a=a.a;if(Rc(a,b)){var e=d.viewState;a.b(new Rh(b,new kk(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Vt.prototype.mg=function(){this.g=this.Ib=null;this.j=void 0};function Yt(a,b){Vt.call(this,a,b);this.l=!1;this.R=-1;this.I=NaN;this.D=Oa();this.o=this.f=this.B=null}v(Yt,Vt);k=Yt.prototype;k.Gi=function(a,b,c){this.o=b;var d=a.viewState,e=this.f,f=a.size,g=a.pixelRatio,h=this.c.i;e&&!e.i()&&(h.enable(h.SCISSOR_TEST),h.scissor(0,0,f[0]*g,f[1]*g),e.La(c,d.center,d.resolution,d.rotation,f,g,b.opacity,b.Je?a.skippedFeatureUids:{}),h.disable(h.SCISSOR_TEST))};k.ka=function(){var a=this.f;a&&(ek(a,this.c.f)(),this.f=null);Vt.prototype.ka.call(this)};k.Ea=function(a,b,c,d,e){if(this.f&&this.o){c=b.viewState;var f=this.a,g={};return this.f.Ea(a,this.c.f,c.center,c.resolution,c.rotation,b.size,b.pixelRatio,this.o.opacity,{},function(a){var b=w(a).toString();if(!(b in g))return g[b]=!0,d.call(e,a,f)})}};k.Ue=function(a,b){if(this.f&&this.o){var c=b.viewState;return jk(this.f,a,this.c.f,c.resolution,c.rotation,b.pixelRatio,this.o.opacity,b.skippedFeatureUids)}return!1};k.lg=function(a,b,c,d){a=Gh(b.pixelToCoordinateTransform,a.slice());if(this.Ue(a,b))return c.call(d,this.a,null)};k.Hi=function(){zt(this)};k.ng=function(a,b,c){function d(a){var b=a.Lc();if(b)var c=b.call(a,m);else(b=e.f)&&(c=b(a,m));if(c){if(c){b=!1;if(Array.isArray(c))for(var d=c.length-1;0<=d;--d)b=Mt(q,a,c[d],Lt(m,n),this.Hi,this)||b;else b=Mt(q,a,c,Lt(m,n),this.Hi,this)||b;a=b}else a=!1;this.l=this.l||a}}var e=this.a;b=e.ha();Ct(a.attributions,b.j);Dt(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.T,l=e.na;if(!this.l&&!h&&f||!l&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,m=h.resolution,n=a.pixelRatio,h=e.i,p=e.c,l=e.get(Pt);void 0===l&&(l=Kt);g=Qa(g,p*m);if(!this.l&&this.I==m&&this.R==h&&this.B==l&&Va(this.D,g))return!0;this.f&&a.postRenderFunctions.push(ek(this.f,c));this.l=!1;var q=new dk(.5*m/n,g,e.c);b.Yd(g,m,f);if(l){var r=[];b.$b(g,function(a){r.push(a)},this);r.sort(l);r.forEach(d,this)}else b.$b(g,d,this);fk(q,c);this.I=m;this.R=h;this.B=l;this.D=g;this.f=q;return!0};function T(a){a=a?a:{};var b=tb({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;wh.call(this,b);this.c=void 0!==a.renderBuffer?a.renderBuffer:100;this.u=null;this.f=void 0;this.g(a.style);this.T=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.na=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}v(T,wh);T.prototype.Fd=function(a){var b=null,c=a.U();"canvas"===c?b=new Ot(this):"webgl"===c&&(b=new Yt(a,this));return b};T.prototype.D=function(){return this.u};T.prototype.C=function(){return this.f};T.prototype.g=function(a){this.u=void 0!==a?a:fl;this.f=null===a?void 0:dl(this.u);this.s()};var Pt="renderOrder";function Zt(){return[[-Infinity,-Infinity,Infinity,Infinity]]};function $t(a){Tc.call(this);this.c=Tb(a.projection);this.j=au(a.attributions);this.D=a.logo;this.na=void 0!==a.state?a.state:"ready";this.u=void 0!==a.wrapX?a.wrapX:!1}v($t,Tc);function au(a){if("string"===typeof a)return[new Ac({html:a})];if(a instanceof Ac)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new Ac({html:e}):e}return c}return null}k=$t.prototype;k.Ea=ua;k.ya=function(){return this.j};k.xa=function(){return this.D};k.za=function(){return this.c};k.getState=function(){return this.na};k.sa=function(){this.s()};k.ua=function(a){this.j=au(a);this.s()};function bu(a,b){a.na=b;a.s()};function U(a){a=a||{};$t.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=ua;this.C=a.format;this.T=void 0==a.overlaps?!0:a.overlaps;this.I=a.url;a.loader?this.B=a.loader:void 0!==this.I&&(xa(this.C,7),this.B=Dl(this.I,this.C));this.fa=a.strategy?a.strategy:Zt;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.a=b?new Gj:null;this.R=new Gj;this.g={};this.o={};this.l={};this.v={};this.f=null;if(a.features instanceof
Yc){var c=a.features;var d=c.a}else Array.isArray(a.features)&&(d=a.features);b||c||(c=new Yc(d));d&&cu(this,d);c&&du(this,c)}v(U,$t);k=U.prototype;k.yb=function(a){var b=w(a).toString();if(eu(this,b,a)){fu(this,b,a);var c=a.V();c?(b=c.G(),this.a&&this.a.Ca(b,a)):this.g[b]=a;this.b(new gu("addfeature",a))}this.s()};function fu(a,b,c){a.v[b]=[y(c,"change",a.Oi,a),y(c,"propertychange",a.Oi,a)]}
function eu(a,b,c){var d=!0,e=c.a;void 0!==e?e.toString()in a.o?d=!1:a.o[e.toString()]=c:(xa(!(b in a.l),30),a.l[b]=c);return d}k.cd=function(a){cu(this,a);this.s()};function cu(a,b){var c,d=[],e=[],f=[];var g=0;for(c=b.length;g<c;g++){var h=b[g];var l=w(h).toString();eu(a,l,h)&&e.push(h)}g=0;for(c=e.length;g<c;g++)h=e[g],l=w(h).toString(),fu(a,l,h),(b=h.V())?(l=b.G(),d.push(l),f.push(h)):a.g[l]=h;a.a&&a.a.load(d,f);g=0;for(c=e.length;g<c;g++)a.b(new gu("addfeature",e[g]))}
function du(a,b){var c=!1;y(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});y(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});y(b,"add",function(a){c||(c=!0,this.yb(a.element),c=!1)},a);y(b,"remove",function(a){c||(c=!0,this.Gb(a.element),c=!1)},a);a.f=b}
k.clear=function(a){if(a){for(var b in this.v)this.v[b].forEach(Ec);this.f||(this.v={},this.o={},this.l={})}else if(this.a){this.a.forEach(this.Ig,this);for(var c in this.g)this.Ig(this.g[c])}this.f&&this.f.clear();this.a&&this.a.clear();this.R.clear();this.g={};this.b(new gu("clear"));this.s()};k.sh=function(a,b){if(this.a)return this.a.forEach(a,b);if(this.f)return this.f.forEach(a,b)};function hu(a,b,c){a.$b([b[0],b[1],b[0],b[1]],function(a){if(a.V().sb(b))return c.call(void 0,a)})}
k.$b=function(a,b,c){if(this.a)return Lj(this.a,a,b,c);if(this.f)return this.f.forEach(b,c)};k.th=function(a,b,c){return this.$b(a,function(d){if(d.V().Xa(a)&&(d=b.call(c,d)))return d})};k.Ah=function(){return this.f};k.Xe=function(){if(this.f)var a=this.f.a;else this.a&&(a=Ij(this.a),wb(this.g)||la(a,vb(this.g)));return a};k.zh=function(a){var b=[];hu(this,a,function(a){b.push(a)});return b};k.Uf=function(a){return Jj(this.a,a)};k.vh=function(a,b){var c=a[0],d=a[1],e=null,f=[NaN,NaN],g=Infinity,h=[-Infinity,-Infinity,Infinity,Infinity],l=b?b:mf;Lj(this.a,h,function(a){if(l(a)){var b=a.V(),m=g;g=b.Kb(c,d,f,g);g<m&&(e=a,a=Math.sqrt(g),h[0]=c-a,h[1]=d-a,h[2]=c+a,h[3]=d+a)}});return e};k.G=function(a){return this.a.G(a)};k.yh=function(a){a=this.o[a.toString()];return void 0!==a?a:null};k.Mi=function(){return this.C};k.Ni=function(){return this.I};k.Oi=function(a){a=a.target;var b=w(a).toString(),c=a.V();c?(c=c.G(),b in this.g?(delete this.g[b],this.a&&this.a.Ca(c,a)):this.a&&Hj(this.a,c,a)):b in this.g||(this.a&&this.a.remove(a),this.g[b]=a);c=a.a;void 0!==c?(c=c.toString(),b in this.l?(delete this.l[b],this.o[c]=a):this.o[c]!==a&&(iu(this,a),this.o[c]=a)):b in this.l||(iu(this,a),this.l[b]=a);this.s();this.b(new gu("changefeature",a))};k.Yd=function(a,b,c){var d=this.R;a=this.fa(a,b);var e;var f=0;for(e=a.length;f<e;++f){var g=a[f];Lj(d,g,function(a){return Va(a.extent,g)})||(this.B.call(this,g,b,c),d.Ca(g,{extent:g.slice()}))}};k.Gb=function(a){var b=w(a).toString();b in this.g?delete this.g[b]:this.a&&this.a.remove(a);this.Ig(a);this.s()};k.Ig=function(a){var b=w(a).toString();this.v[b].forEach(Ec);delete this.v[b];var c=a.a;void 0!==c?delete this.o[c.toString()]:delete this.l[b];this.b(new gu("removefeature",a))};function iu(a,b){for(var c in a.o)if(a.o[c]===b){delete a.o[c];break}}function gu(a,b){Oc.call(this,a);this.feature=b}v(gu,Oc);function ju(a){Dg.call(this,{handleDownEvent:ku,handleEvent:lu,handleUpEvent:mu});this.T=!1;this.fa=null;this.u=!1;this.Yb=a.source?a.source:null;this.$a=a.features?a.features:null;this.wk=a.snapTolerance?a.snapTolerance:12;this.R=a.type;this.g=nu(this.R);this.Sa=a.minPoints?a.minPoints:this.g===ou?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Cf=a.finishCondition?a.finishCondition:mf;var b=a.geometryFunction;if(!b)if("Circle"===this.R)b=function(a,b){b=b?b:new ys([NaN,NaN]);b.Ng(a[0],Math.sqrt(hf(a[0],a[1])));return b};else{var c,d=this.g;d===pu?c=C:d===qu?c=O:d===ou&&(c=D);b=function(a,b){b?d===ou?b.ma([a[0].concat([a[0][0]])]):b.ma(a):b=new c(a);return b}}this.Za=b;this.I=this.C=this.a=this.B=this.j=this.l=null;this.ad=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.pa=new T({source:new U({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ru()});this.xb=a.geometryName;this.vk=a.condition?a.condition:xg;this.Df=a.freehand?mf:a.freehandCondition?a.freehandCondition:yg;y(this,Vc("active"),this.ri,this)}v(ju,Dg);function ru(){var a=gl();return function(b){return a[b.V().U()]}}k=ju.prototype;k.setMap=function(a){Dg.prototype.setMap.call(this,a);this.ri()};function lu(a){this.u=this.g!==pu&&this.Df(a);var b=!this.u;this.u&&"pointerdrag"===a.type&&null!==this.j?(su(this,a),b=!1):"pointermove"===a.type?b=tu(this,a):"dblclick"===a.type&&(b=!1);return Eg.call(this,a)&&b}
function ku(a){this.T=!this.u;return this.u?(this.fa=a.pixel,this.l||uu(this,a),!0):this.vk(a)?(this.fa=a.pixel,!0):!1}function mu(a){var b=!0;tu(this,a);var c=this.g===vu;this.T?(this.l?this.u||c?this.Pd():wu(this,a)?this.Cf(a)&&this.Pd():su(this,a):(uu(this,a),this.g===pu&&this.Pd()),b=!1):this.u&&(this.l=null,xu(this));return b}
function tu(a,b){if(a.fa&&(!a.u&&a.T||a.u&&!a.T)){var c=a.fa,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],e=e*e+c*c;a.T=a.u?e>a.ad:e<=a.ad}a.l?(e=b.coordinate,c=a.j.V(),a.g===pu?d=a.a:a.g===ou?(d=a.a[0],d=d[d.length-1],wu(a,b)&&(e=a.l.slice())):(d=a.a,d=d[d.length-1]),d[0]=e[0],d[1]=e[1],a.Za(a.a,c),a.B&&a.B.V().ma(e),c instanceof D&&a.g!==ou?(a.C||(a.C=new H(new O(null))),e=c.Ch(0),b=a.C.V(),b.ba(e.ja,e.ga())):a.I&&(b=a.C.V(),b.ma(a.I)),yu(a)):(b=b.coordinate.slice(),a.B?a.B.V().ma(b):(a.B=new H(new C(b)),yu(a)));return!0}function wu(a,b){var c=!1;if(a.j){var d=!1,e=[a.l];a.g===qu?d=a.a.length>a.Sa:a.g===ou&&(d=a.a[0].length>a.Sa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],l=d.Ja(h),m=b.pixel,c=m[0]-l[0],l=m[1]-l[1];if(c=Math.sqrt(c*c+l*l)<=(a.u?1:a.wk)){a.l=h;break}}}return c}
function uu(a,b){b=b.coordinate;a.l=b;a.g===pu?a.a=b.slice():a.g===ou?(a.a=[[b.slice(),b.slice()]],a.I=a.a[0]):(a.a=[b.slice(),b.slice()],a.g===vu&&(a.I=a.a));a.I&&(a.C=new H(new O(a.I)));b=a.Za(a.a);a.j=new H;a.xb&&a.j.Tc(a.xb);a.j.Ra(b);yu(a);a.b(new zu("drawstart",a.j))}
function su(a,b){b=b.coordinate;var c=a.j.V(),d;if(a.g===qu){a.l=b.slice();var e=a.a;e.length>=a.va&&(a.u?e.pop():d=!0);e.push(b.slice());a.Za(e,c)}else a.g===ou&&(e=a.a[0],e.length>=a.va&&(a.u?e.pop():d=!0),e.push(b.slice()),d&&(a.l=e[0]),a.Za(a.a,c));yu(a);d&&a.Pd()}
k.Op=function(){if(this.j){var a=this.j.V();if(this.g===qu){var b=this.a;b.splice(-2,1);this.Za(b,a);2<=b.length&&(this.l=b[b.length-2].slice())}else if(this.g===ou){b=this.a[0];b.splice(-2,1);var c=this.C.V();c.ma(b);this.Za(this.a,a)}0===b.length&&(this.l=null);yu(this)}};k.Pd=function(){var a=xu(this),b=this.a,c=a.V();this.g===qu?(b.pop(),this.Za(b,c)):this.g===ou&&(b[0].pop(),this.Za(b,c),b=c.X());"MultiPoint"===this.R?a.Ra(new Q([b])):"MultiLineString"===this.R?a.Ra(new P([b])):"MultiPolygon"===this.R&&a.Ra(new R([b]));this.b(new zu("drawend",a));this.$a&&this.$a.push(a);this.Yb&&this.Yb.yb(a)};function xu(a){a.l=null;var b=a.j;b&&(a.j=null,a.B=null,a.C=null,a.pa.ha().clear(!0));return b}
k.vn=function(a){var b=a.V();this.j=a;this.a=b.X();a=this.a[this.a.length-1];this.l=a.slice();this.a.push(a.slice());yu(this);this.b(new zu("drawstart",this.j))};k.Xc=nf;function yu(a){var b=[];a.j&&b.push(a.j);a.C&&b.push(a.C);a.B&&b.push(a.B);a=a.pa.ha();a.clear(!0);a.cd(b)}k.ri=function(){var a=this.v,b=this.c();a&&b||xu(this);this.pa.setMap(b?a:null)};function nu(a){var b;"Point"===a||"MultiPoint"===a?b=pu:"LineString"===a||"MultiLineString"===a?b=qu:"Polygon"===a||"MultiPolygon"===a?b=ou:"Circle"===a&&(b=vu);return b}var pu="Point",qu="LineString",ou="Polygon",vu="Circle";function zu(a,b){Oc.call(this,a);this.feature=b}v(zu,Oc);function Au(a){this.a=this.j=null;this.C=!1;this.B=this.l=null;a||(a={});a.extent&&this.g(a.extent);Dg.call(this,{handleDownEvent:Bu,handleDragEvent:Cu,handleEvent:Du,handleUpEvent:Eu});this.u=new T({source:new U({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.boxStyle?a.boxStyle:Fu(),updateWhileAnimating:!0,updateWhileInteracting:!0});this.I=new T({source:new U({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.pointerStyle?a.pointerStyle:Gu(),updateWhileAnimating:!0,updateWhileInteracting:!0})}v(Au,Dg);function Du(a){if(!(a instanceof ee))return!0;if("pointermove"==a.type&&!this.D){var b=a.pixel,c=a.map,d=Hu(this,b,c);d||(d=c.Wa(b));Iu(this,d)}Eg.call(this,a);return!1}
function Bu(a){function b(a){var b=null,c=null;a[0]==e[0]?b=e[2]:a[0]==e[2]&&(b=e[0]);a[1]==e[1]?c=e[3]:a[1]==e[3]&&(c=e[1]);return null!==b&&null!==c?[b,c]:null}var c=a.pixel,d=a.map,e=this.G();(a=Hu(this,c,d))&&e?(c=a[0]==e[0]||a[0]==e[2]?a[0]:null,d=a[1]==e[1]||a[1]==e[3]?a[1]:null,null!==c&&null!==d?this.a=Ju(b(a)):null!==c?this.a=Ku(b([c,e[1]]),b([c,e[3]])):null!==d&&(this.a=Ku(b([e[0],d]),b([e[2],d])))):(a=d.Wa(c),this.g([a[0],a[1],a[0],a[1]]),this.a=Ju(a));return!0}
function Cu(a){this.a&&(a=a.coordinate,this.g(this.a(a)),Iu(this,a));return!0}function Eu(){this.a=null;var a=this.G();a&&jb(a)||this.g(null);return!1}function Fu(){var a=gl();return function(){return a.Polygon}}function Gu(){var a=gl();return function(){return a.Point}}function Ju(a){return function(b){return Na([a,b])}}function Ku(a,b){return a[0]==b[0]?function(c){return Na([a,[c[0],b[1]]])}:a[1]==b[1]?function(c){return Na([a,[b[0],c[1]]])}:null}
function Hu(a,b,c){function d(a,b){return kf(e,a)-kf(e,b)}var e=c.Wa(b),f=a.G();if(f){f=[[[f[0],f[1]],[f[0],f[3]]],[[f[0],f[3]],[f[2],f[3]]],[[f[2],f[3]],[f[2],f[1]]],[[f[2],f[1]],[f[0],f[1]]]];f.sort(d);var f=f[0],g=af(e,f),h=c.Ja(g);if(10>=jf(b,h))return b=c.Ja(f[0]),c=c.Ja(f[1]),b=hf(h,b),c=hf(h,c),a.C=10>=Math.sqrt(Math.min(b,c)),a.C&&(g=b>c?f[1]:f[0]),g}return null}function Iu(a,b){var c=a.B;c?c.V().ma(b):(c=new H(new C(b)),a.B=c,a.I.ha().yb(c))}
Au.prototype.setMap=function(a){this.u.setMap(a);this.I.setMap(a);Dg.prototype.setMap.call(this,a)};Au.prototype.G=function(){return this.j};Au.prototype.g=function(a){this.j=a?a:null;var b=this.l;b?a?b.Ra(Yf(a)):b.Ra(void 0):(this.l=b=a?new H(Yf(a)):new H({}),this.u.ha().yb(b));this.b(new Lu(this.j))};function Lu(a){Oc.call(this,Mu);this.b=a}v(Lu,Oc);var Mu="extentchanged";function Nu(a){Dg.call(this,{handleDownEvent:Ou,handleDragEvent:Pu,handleEvent:Qu,handleUpEvent:Ru});this.ad=a.condition?a.condition:Cg;this.$a=function(a){return xg(a)&&wg(a)};this.xb=a.deleteCondition?a.deleteCondition:this.$a;this.Yb=a.insertVertexCondition?a.insertVertexCondition:mf;this.Sa=this.g=null;this.va=[0,0];this.C=this.I=!1;this.a=new Gj;this.fa=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.l=this.pa=!1;this.j=[];this.B=new T({source:new U({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.style?a.style:Su(),updateWhileAnimating:!0,updateWhileInteracting:!0});this.T={Point:this.Dn,LineString:this.ti,LinearRing:this.ti,Polygon:this.En,MultiPoint:this.Bn,MultiLineString:this.An,MultiPolygon:this.Cn,Circle:this.yn,GeometryCollection:this.zn};this.u=a.features;this.u.forEach(this.kg,this);y(this.u,"add",this.wn,this);y(this.u,"remove",this.xn,this);this.R=null}v(Nu,Dg);k=Nu.prototype;k.kg=function(a){var b=a.V();b&&b.U()in this.T&&this.T[b.U()].call(this,a,b);(b=this.v)&&b.c&&this.c()&&Tu(this,this.va,b);y(a,"change",this.si,this)};function Uu(a,b){a.C||(a.C=!0,a.b(new Vu("modifystart",a.u,b)))}function Wu(a,b){Xu(a,b);a.g&&!a.u.dc()&&(a.B.ha().Gb(a.g),a.g=null);Kc(b,"change",a.si,a)}function Xu(a,b){a=a.a;var c=[];a.forEach(function(a){b===a.feature&&c.push(a)});for(var d=c.length-1;0<=d;--d)a.remove(c[d])}
k.Ha=function(a){this.g&&!a&&(this.B.ha().Gb(this.g),this.g=null);Dg.prototype.Ha.call(this,a)};k.setMap=function(a){this.B.setMap(a);Dg.prototype.setMap.call(this,a)};k.wn=function(a){this.kg(a.element)};k.si=function(a){this.l||(a=a.target,Wu(this,a),this.kg(a))};k.xn=function(a){Wu(this,a.element)};k.Dn=function(a,b){var c=b.X();a={feature:a,geometry:b,la:[c,c]};this.a.Ca(b.G(),a)};k.Bn=function(a,b){var c=b.X(),d;var e=0;for(d=c.length;e<d;++e){var f=c[e];f={feature:a,geometry:b,depth:[e],index:e,la:[f,f]};this.a.Ca(b.G(),f)}};k.ti=function(a,b){var c=b.X(),d;var e=0;for(d=c.length-1;e<d;++e){var f=c.slice(e,e+2);var g={feature:a,geometry:b,index:e,la:f};this.a.Ca(Na(f),g)}};k.An=function(a,b){var c=b.X(),d,e;var f=0;for(e=c.length;f<e;++f){var g=c[f];var h=0;for(d=g.length-1;h<d;++h){var l=g.slice(h,h+2);var m={feature:a,geometry:b,depth:[f],index:h,la:l};this.a.Ca(Na(l),m)}}};k.En=function(a,b){var c=b.X(),d,e;var f=0;for(e=c.length;f<e;++f){var g=c[f];var h=0;for(d=g.length-1;h<d;++h){var l=g.slice(h,h+2);var m={feature:a,geometry:b,depth:[f],index:h,la:l};this.a.Ca(Na(l),m)}}};k.Cn=function(a,b){var c=b.X(),d,e,f;var g=0;for(f=c.length;g<f;++g){var h=c[g];var l=0;for(e=h.length;l<e;++l){var m=h[l];var n=0;for(d=m.length-1;n<d;++n){var p=m.slice(n,n+2);var q={feature:a,geometry:b,depth:[l,g],index:n,la:p};this.a.Ca(Na(p),q)}}}};k.yn=function(a,b){var c=b.wa(),d={feature:a,geometry:b,index:0,la:[c,c]};a={feature:a,geometry:b,index:1,la:[c,c]};d.Pf=a.Pf=[d,a];this.a.Ca(Za(c),d);this.a.Ca(b.G(),a)};k.zn=function(a,b){var c=b.a;for(b=0;b<c.length;++b)this.T[c[b].U()].call(this,a,c[b])};function Yu(a,b){var c=a.g;c?c.V().ma(b):(c=new H(new C(b)),a.g=c,a.B.ha().yb(c))}function Zu(a,b){return a.index-b.index}
function Ou(a){if(!this.ad(a))return!1;Tu(this,a.pixel,a.map);var b=a.map.Wa(a.pixel);this.j.length=0;this.C=!1;var c=this.g;if(c){var d=[],c=c.V().X(),e=Na([c]),e=Jj(this.a,e),f={};e.sort(Zu);for(var g=0,h=e.length;g<h;++g){var l=e[g],m=l.la,n=w(l.feature),p=l.depth;p&&(n+="-"+p.join("-"));f[n]||(f[n]=Array(2));if("Circle"===l.geometry.U()&&1===l.index)m=$u(b,l),df(m,c)&&!f[n][0]&&(this.j.push([l,0]),f[n][0]=l);else if(df(m[0],c)&&!f[n][0])this.j.push([l,0]),f[n][0]=l;else if(df(m[1],c)&&!f[n][1]){if("LineString"!==l.geometry.U()&&"MultiLineString"!==l.geometry.U()||!f[n][0]||0!==f[n][0].index)this.j.push([l,1]),f[n][1]=l}else this.Yb(a)&&w(m)in this.Sa&&!f[n][0]&&!f[n][1]&&d.push([l,c])}d.length&&Uu(this,a);for(a=d.length-1;0<=a;--a)this.bm.apply(this,d[a])}return!!this.g}
function Pu(a){this.I=!1;Uu(this,a);a=a.coordinate;for(var b=0,c=this.j.length;b<c;++b){for(var d=this.j[b],e=d[0],f=e.depth,g=e.geometry,h,l=e.la,d=d[1];a.length<g.qa();)a.push(l[d][a.length]);switch(g.U()){case "Point":h=a;l[0]=l[1]=a;break;case "MultiPoint":h=g.X();h[e.index]=a;l[0]=l[1]=a;break;case "LineString":h=g.X();h[e.index+d]=a;l[d]=a;break;case "MultiLineString":h=g.X();h[f[0]][e.index+d]=a;l[d]=a;break;case "Polygon":h=g.X();h[f[0]][e.index+d]=a;l[d]=a;break;case "MultiPolygon":h=g.X();h[f[1]][f[0]][e.index+d]=a;l[d]=a;break;case "Circle":l[0]=l[1]=a,0===e.index?(this.l=!0,g.ob(a)):(this.l=!0,g.Uc(jf(g.wa(),a))),this.l=!1}h&&(e=g,f=h,this.l=!0,e.ma(f),this.l=!1)}Yu(this,a)}function Ru(a){for(var b,c,d=this.j.length-1;0<=d;--d)if(b=this.j[d][0],c=b.geometry,"Circle"===c.U()){var e=c.wa(),f=b.Pf[0];b=b.Pf[1];f.la[0]=f.la[1]=e;b.la[0]=b.la[1]=e;Hj(this.a,Za(e),f);Hj(this.a,c.G(),b)}else Hj(this.a,Na(b.la),b);this.C&&(this.b(new Vu("modifyend",this.u,a)),this.C=!1);return!1}
function Qu(a){if(!(a instanceof ee))return!0;this.R=a;var b;dg(a.map.Z())[1]||"pointermove"!=a.type||this.D||(this.va=a.pixel,Tu(this,a.pixel,a.map));this.g&&this.xb(a)&&(b="singleclick"==a.type&&this.I?!0:this.hj());"singleclick"==a.type&&(this.I=!1);return Eg.call(this,a)&&!b}
function Tu(a,b,c){function d(a,b){return av(e,a)-av(e,b)}var e=c.Wa(b),f=Qa(Za(e),c.Z().Pa()*a.fa),f=Jj(a.a,f);if(0<f.length){f.sort(d);var g=f[0],h=g.la,l=$u(e,g),m=c.Ja(l),n=jf(b,m);if(n<=a.fa){b={};if("Circle"===g.geometry.U()&&1===g.index)a.pa=!0,Yu(a,l);else for(n=c.Ja(h[0]),g=c.Ja(h[1]),c=hf(m,n),m=hf(m,g),n=Math.sqrt(Math.min(c,m)),a.pa=n<=a.fa,a.pa&&(l=c>m?h[1]:h[0]),Yu(a,l),m=1,c=f.length;m<c;++m)if(l=f[m].la,df(h[0],l[0])&&df(h[1],l[1])||df(h[0],l[1])&&df(h[1],l[0]))b[w(l)]=!0;else break;b[w(h)]=!0;a.Sa=b;return}}a.g&&(a.B.ha().Gb(a.g),a.g=null)}function av(a,b){var c=b.geometry;return"Circle"===c.U()&&1===b.index?(a=hf(c.wa(),a),c=Math.sqrt(a)-c.pd(),c*c):kf(a,b.la)}function $u(a,b){var c=b.geometry;return"Circle"===c.U()&&1===b.index?c.Ab(a):af(a,b.la)}
k.bm=function(a,b){for(var c=a.la,d=a.feature,e=a.geometry,f=a.depth,g=a.index,h;b.length<e.qa();)b.push(0);switch(e.U()){case "MultiLineString":h=e.X();h[f[0]].splice(g+1,0,b);break;case "Polygon":h=e.X();h[f[0]].splice(g+1,0,b);break;case "MultiPolygon":h=e.X();h[f[1]][f[0]].splice(g+1,0,b);break;case "LineString":h=e.X();h.splice(g+1,0,b);break;default:return}this.l=!0;e.ma(h);this.l=!1;h=this.a;h.remove(a);bv(this,e,g,f,1);a={la:[c[0],b],feature:d,geometry:e,depth:f,index:g};h.Ca(Na(a.la),a);this.j.push([a,1]);b={la:[b,c[1]],feature:d,geometry:e,depth:f,index:g+1};h.Ca(Na(b.la),b);this.j.push([b,0]);this.I=!0};k.hj=function(){if(this.R&&"pointerdrag"!=this.R.type){var a=this.R;Uu(this,a);var b=this.j,c={},d,e;for(e=b.length-1;0<=e;--e){var f=b[e];var g=f[0];var h=w(g.feature);g.depth&&(h+="-"+g.depth.join("-"));h in c||(c[h]={});0===f[1]?(c[h].right=g,c[h].index=g.index):1==f[1]&&(c[h].left=g,c[h].index=g.index+1)}for(h in c){var l=c[h].right;var m=c[h].left;e=c[h].index;var n=e-1;g=void 0!==m?m:l;0>n&&(n=0);f=g.geometry;var p=d=f.X();var q=!1;switch(f.U()){case "MultiLineString":2<d[g.depth[0]].length&&(d[g.depth[0]].splice(e,1),q=!0);break;case "LineString":2<d.length&&(d.splice(e,1),q=!0);break;case "MultiPolygon":p=p[g.depth[1]];case "Polygon":p=p[g.depth[0]],4<p.length&&(e==p.length-1&&(e=0),p.splice(e,1),q=!0,0===e&&(p.pop(),p.push(p[0]),n=p.length-1))}q&&(q=f,this.l=!0,q.ma(d),this.l=!1,d=[],void 0!==m&&(this.a.remove(m),d.push(m.la[0])),void 0!==l&&(this.a.remove(l),d.push(l.la[1])),void 0!==m&&void 0!==l&&(m={depth:g.depth,feature:g.feature,geometry:g.geometry,index:n,la:d},this.a.Ca(Na(m.la),m)),bv(this,f,e,g.depth,-1),this.g&&(this.B.ha().Gb(this.g),this.g=null),b.length=0)}this.b(new Vu("modifyend",this.u,a));this.C=!1;return!0}return!1};function bv(a,b,c,d,e){Lj(a.a,b.G(),function(a){a.geometry===b&&(void 0===d||void 0===a.depth||pa(a.depth,d))&&a.index>c&&(a.index+=e)})}function Su(){var a=gl();return function(){return a.Point}}function Vu(a,b,c){Oc.call(this,a);this.features=b;this.mapBrowserEvent=c}v(Vu,Oc);function cv(a){ng.call(this,{handleEvent:dv});a=a?a:{};this.C=a.condition?a.condition:wg;this.D=a.addCondition?a.addCondition:nf;this.B=a.removeCondition?a.removeCondition:nf;this.I=a.toggleCondition?a.toggleCondition:yg;this.l=a.multi?a.multi:!1;this.o=a.filter?a.filter:mf;this.j=a.hitTolerance?a.hitTolerance:0;this.g=new T({source:new U({useSpatialIndex:!1,features:a.features,wrapX:a.wrapX}),style:a.style?a.style:ev(),updateWhileAnimating:!0,updateWhileInteracting:!0});if(a.layers)if("function"===typeof a.layers)a=a.layers;else{var b=a.layers;a=function(a){return ja(b,a)}}else a=mf;this.u=a;this.a={};a=this.g.ha().f;y(a,"add",this.Fn,this);y(a,"remove",this.Jn,this)}v(cv,ng);k=cv.prototype;k.Gn=function(){return this.g.ha().f};k.Hn=function(){return this.j};k.In=function(a){a=w(a);return this.a[a]};function dv(a){if(!this.C(a))return!0;var b=this.D(a),c=this.B(a),d=this.I(a),e=!b&&!c&&!d,f=a.map,g=this.g.ha().f,h=[],l=[];if(e){ub(this.a);f.we(a.pixel,function(a,b){if(this.o(a,b))return l.push(a),a=w(a),this.a[a]=b,!this.l}.bind(this),{layerFilter:this.u,hitTolerance:this.j});for(e=g.dc()-1;0<=e;--e){var f=g.item(e),m=l.indexOf(f);-1<m?l.splice(m,1):(g.remove(f),h.push(f))}l.length&&g.fg(l)}else{f.we(a.pixel,function(a,e){if(this.o(a,e))return!b&&!d||ja(g.a,a)?(c||d)&&ja(g.a,a)&&(h.push(a),e=w(a),delete this.a[e]):(l.push(a),a=w(a),this.a[a]=e),!this.l}.bind(this),{layerFilter:this.u,hitTolerance:this.j});for(e=h.length-1;0<=e;--e)g.remove(h[e]);g.fg(l)}(0<l.length||0<h.length)&&this.b(new fv(gv,l,h,a));return vg(a)}k.Kn=function(a){this.j=a};k.setMap=function(a){var b=this.v,c=this.g.ha().f;b&&c.forEach(b.Cj,b);ng.prototype.setMap.call(this,a);this.g.setMap(a);a&&c.forEach(a.xj,a)};function ev(){var a=gl();la(a.Polygon,a.LineString);la(a.GeometryCollection,a.LineString);return function(b){return b.V()?a[b.V().U()]:null}}k.Fn=function(a){var b=this.v;b&&b.xj(a.element)};k.Jn=function(a){var b=this.v;b&&b.Cj(a.element)};function fv(a,b,c,d){Oc.call(this,a);this.selected=b;this.deselected=c;this.mapBrowserEvent=d}v(fv,Oc);var gv="select";function hv(a){Dg.call(this,{handleEvent:iv,handleDownEvent:mf,handleUpEvent:jv});a=a?a:{};this.l=a.source?a.source:null;this.R=void 0!==a.vertex?a.vertex:!0;this.C=void 0!==a.edge?a.edge:!0;this.j=a.features?a.features:null;this.pa=[];this.B={};this.T={};this.u={};this.I=null;this.g=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.va=kv.bind(this);this.a=new Gj;this.fa={Point:this.Rn,LineString:this.wi,LinearRing:this.wi,Polygon:this.Sn,MultiPoint:this.Pn,MultiLineString:this.On,MultiPolygon:this.Qn,GeometryCollection:this.Nn,Circle:this.Mn}}v(hv,Dg);k=hv.prototype;k.yb=function(a,b){b=void 0!==b?b:!0;var c=w(a),d=a.V();if(d){var e=this.fa[d.U()];e&&(this.T[c]=d.G(Oa()),e.call(this,a,d))}b&&(this.B[c]=y(a,"change",this.Ln,this))};k.Ak=function(a){this.yb(a)};k.Bk=function(a){this.Gb(a)};k.ui=function(a){if(a instanceof gu)var b=a.feature;else a instanceof bd&&(b=a.element);this.yb(b)};k.vi=function(a){if(a instanceof gu)var b=a.feature;else a instanceof bd&&(b=a.element);this.Gb(b)};k.Ln=function(a){a=a.target;if(this.D){var b=w(a);b in this.u||(this.u[b]=a)}else this.Dj(a)};k.Gb=function(a,b){b=void 0!==b?b:!0;var c=w(a),d=this.T[c];if(d){var e=this.a,f=[];Lj(e,d,function(b){a===b.feature&&f.push(b)});for(d=f.length-1;0<=d;--d)e.remove(f[d])}b&&(Ec(this.B[c]),delete this.B[c])};k.setMap=function(a){var b=this.v,c=this.pa,d;this.j?d=this.j:this.l&&(d=this.l.Xe());b&&(c.forEach(Ec),c.length=0,d.forEach(this.Bk,this));Dg.prototype.setMap.call(this,a);a&&(this.j?c.push(y(this.j,"add",this.ui,this),y(this.j,"remove",this.vi,this)):this.l&&c.push(y(this.l,"addfeature",this.ui,this),y(this.l,"removefeature",this.vi,this)),d.forEach(this.Ak,this))};k.Xc=nf;function lv(a,b,c,d){var e=d.Wa([b[0]-a.g,b[1]+a.g]),f=d.Wa([b[0]+a.g,b[1]-a.g]),e=Na([e,f]),g=Jj(a.a,e);a.R&&!a.C&&(g=g.filter(function(a){return"Circle"!==a.feature.V().U()}));var h=!1,e=!1,l=f=null;if(0<g.length){a.I=c;g.sort(a.va);var m=g[0].la,h="Circle"===g[0].feature.V().U();if(a.R&&!a.C){if(c=d.Ja(m[0]),h=d.Ja(m[1]),c=hf(b,c),b=hf(b,h),h=Math.sqrt(Math.min(c,b)),h=h<=a.g)e=!0,f=c>b?m[1]:m[0],l=d.Ja(f)}else a.C&&(f=h?$e(c,g[0].feature.V()):af(c,m),l=d.Ja(f),jf(b,l)<=a.g&&(e=!0,a.R&&!h&&(c=d.Ja(m[0]),h=d.Ja(m[1]),c=hf(l,c),b=hf(l,h),h=Math.sqrt(Math.min(c,b)),h=h<=a.g)))&&(f=c>b?m[1]:m[0],l=d.Ja(f));e&&(l=[Math.round(l[0]),Math.round(l[1])])}return{nq:e,vertex:f,wq:l}}k.Dj=function(a){this.Gb(a,!1);this.yb(a,!1)};k.Mn=function(a,b){b=Zf(b).X()[0];var c;var d=0;for(c=b.length-1;d<c;++d){var e=b.slice(d,d+2);var f={feature:a,la:e};this.a.Ca(Na(e),f)}};k.Nn=function(a,b){var c=b.a;for(b=0;b<c.length;++b){var d=this.fa[c[b].U()];d&&d.call(this,a,c[b])}};k.wi=function(a,b){b=b.X();var c;var d=0;for(c=b.length-1;d<c;++d){var e=b.slice(d,d+2);var f={feature:a,la:e};this.a.Ca(Na(e),f)}};k.On=function(a,b){b=b.X();var c,d;var e=0;for(d=b.length;e<d;++e){var f=b[e];var g=0;for(c=f.length-1;g<c;++g){var h=f.slice(g,g+2);var l={feature:a,la:h};this.a.Ca(Na(h),l)}}};k.Pn=function(a,b){var c=b.X(),d;var e=0;for(d=c.length;e<d;++e){var f=c[e];f={feature:a,la:[f,f]};this.a.Ca(b.G(),f)}};k.Qn=function(a,b){b=b.X();var c,d,e;var f=0;for(e=b.length;f<e;++f){var g=b[f];var h=0;for(d=g.length;h<d;++h){var l=g[h];var m=0;for(c=l.length-1;m<c;++m){var n=l.slice(m,m+2);var p={feature:a,la:n};this.a.Ca(Na(n),p)}}}};k.Rn=function(a,b){var c=b.X();a={feature:a,la:[c,c]};this.a.Ca(b.G(),a)};k.Sn=function(a,b){b=b.X();var c,d;var e=0;for(d=b.length;e<d;++e){var f=b[e];var g=0;for(c=f.length-1;g<c;++g){var h=f.slice(g,g+2);var l={feature:a,la:h};this.a.Ca(Na(h),l)}}};function iv(a){var b=lv(this,a.pixel,a.coordinate,a.map);b.nq&&(a.coordinate=b.vertex.slice(0,2),a.pixel=b.wq);return Eg.call(this,a)}function jv(){var a=vb(this.u);a.length&&(a.forEach(this.Dj,this),this.u={});return!1}function kv(a,b){return kf(this.I,a.la)-kf(this.I,b.la)};function mv(a){Dg.call(this,{handleDownEvent:nv,handleDragEvent:ov,handleMoveEvent:pv,handleUpEvent:qv});a=a?a:{};this.a=null;this.j=void 0!==a.features?a.features:null;if(a.layers)if("function"===typeof a.layers)var b=a.layers;else{var c=a.layers;b=function(a){return ja(c,a)}}else b=mf;this.C=b;this.l=a.hitTolerance?a.hitTolerance:0;this.g=null;y(this,Vc("active"),this.u,this)}v(mv,Dg);function nv(a){this.g=rv(this,a.pixel,a.map);if(!this.a&&this.g){this.a=a.coordinate;pv.call(this,a);var b=this.j||new Yc([this.g]);this.b(new sv("translatestart",b,a.coordinate));return!0}return!1}function qv(a){if(this.a){this.a=null;pv.call(this,a);var b=this.j||new Yc([this.g]);this.b(new sv("translateend",b,a.coordinate));return!0}return!1}
function ov(a){if(this.a){a=a.coordinate;var b=a[0]-this.a[0],c=a[1]-this.a[1],d=this.j||new Yc([this.g]);d.forEach(function(a){var d=a.V();d.translate(b,c);a.Ra(d)});this.a=a;this.b(new sv("translating",d,a))}}function pv(a){var b=a.map.a;rv(this,a.pixel,a.map)?(b.classList.remove(this.a?"ol-grab":"ol-grabbing"),b.classList.add(this.a?"ol-grabbing":"ol-grab")):b.classList.remove("ol-grab","ol-grabbing")}
function rv(a,b,c){return c.we(b,function(a){if(!this.j||ja(this.j.a,a))return a}.bind(a),{layerFilter:a.C,hitTolerance:a.l})}mv.prototype.B=function(){return this.l};mv.prototype.I=function(a){this.l=a};mv.prototype.setMap=function(a){var b=this.v;Dg.prototype.setMap.call(this,a);tv(this,b)};mv.prototype.u=function(){tv(this,null)};function tv(a,b){var c=a.v;a=a.c();c&&a||(c||(c=b),c.a.classList.remove("ol-grab","ol-grabbing"))}
function sv(a,b,c){Oc.call(this,a);this.features=b;this.coordinate=c}v(sv,Oc);function V(a){a=a?a:{};var b=tb({},a);delete b.gradient;delete b.radius;delete b.blur;delete b.shadow;delete b.weight;T.call(this,b);this.j=null;this.R=void 0!==a.shadow?a.shadow:250;this.I=void 0;this.B=null;y(this,Vc(uv),this.Bl,this);this.pj(a.gradient?a.gradient:vv);this.jj(void 0!==a.blur?a.blur:15);this.Uc(void 0!==a.radius?a.radius:8);y(this,Vc(wv),this.cg,this);y(this,Vc(xv),this.cg,this);this.cg();var c=a.weight?a.weight:"weight",d;"string"===typeof c?d=function(a){return a.get(c)}:d=c;this.g(function(a){a=d(a);a=void 0!==a?Ca(a,0,1):1;var b=255*a|0,c=this.B[b];c||(c=[new bl({image:new eo({opacity:a,src:this.I})})],this.B[b]=c);return c}.bind(this));this.set(Pt,null);y(this,"render",this.Sl,this)}v(V,T);var vv=["#00f","#0ff","#0f0","#ff0","#f00"];k=V.prototype;k.uh=function(){return this.get(wv)};k.Bh=function(){return this.get(uv)};k.yi=function(){return this.get(xv)};k.Bl=function(){for(var a=this.Bh(),b=jd(1,256),c=b.createLinearGradient(0,0,1,256),d=1/(a.length-1),e=0,f=a.length;e<f;++e)c.addColorStop(e*d,a[e]);b.fillStyle=c;b.fillRect(0,0,1,256);this.j=b.getImageData(0,0,1,256).data};k.cg=function(){var a=this.yi(),b=this.uh(),c=a+b+1,d=2*c,d=jd(d,d);d.shadowOffsetX=d.shadowOffsetY=this.R;d.shadowBlur=b;d.shadowColor="#000";d.beginPath();b=c-this.R;d.arc(b,b,a,0,2*Math.PI,!0);d.fill();this.I=d.canvas.toDataURL();this.B=Array(256);this.s()};k.Sl=function(a){a=a.context;var b=a.canvas,b=a.getImageData(0,0,b.width,b.height),c=b.data,d,e;var f=0;for(d=c.length;f<d;f+=4)if(e=4*c[f+3])c[f]=this.j[e],c[f+1]=this.j[e+1],c[f+2]=this.j[e+2];a.putImageData(b,0,0)};k.jj=function(a){this.set(wv,a)};k.pj=function(a){this.set(uv,a)};k.Uc=function(a){this.set(xv,a)};var wv="blur",uv="gradient",xv="radius";function yv(a){Gt.call(this,a);this.v=Bh();this.j=null}v(yv,Gt);yv.prototype.S=function(a,b,c){It(this,"precompose",c,a,void 0);var d=this.Y();if(d){var e=b.extent,f=void 0!==e&&!Va(e,a.extent)&&qb(e,a.extent);f&&Ht(c,a,e);var e=this.C(),g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}this.ef(c,a,b)};yv.prototype.Ea=function(a,b,c,d,e){var f=this.a;return f.ha().Ea(a,b.viewState.resolution,b.viewState.rotation,c,b.skippedFeatureUids,function(a){return d.call(e,a,f)})};yv.prototype.u=function(a,b,c,d){if(this.Y()){if(this.a.ha().Ea!==ua)return Gt.prototype.u.apply(this,arguments);var e=Gh(this.v,a.slice());gf(e,b.viewState.resolution/this.f);this.j||(this.j=jd(1,1));this.j.clearRect(0,0,1,1);this.j.drawImage(this.Y(),e[0],e[1],1,1,0,0,1,1);e=this.j.getImageData(0,0,1,1).data;if(0<e[3])return c.call(d,this.a,e)}};function zv(a){yv.call(this,a);this.M=null;this.c=Bh()}v(zv,yv);zv.prototype.Y=function(){return this.M?this.M.Y():null};zv.prototype.C=function(){return this.c};zv.prototype.sd=function(a,b){var c=a.pixelRatio,d=a.size,e=a.viewState,f=e.center,g=e.resolution,h=this.a.ha(),l=a.viewHints,m=a.extent;void 0!==b.extent&&(m=pb(m,b.extent));l[0]||l[1]||kb(m)||(b=h.Y(m,g,c,e.projection))&&At(this,b)&&(this.M=b);if(this.M){b=this.M;var l=b.G(),m=b.resolution,e=b.a,n=c*m/(g*e),l=Kh(this.c,c*d[0]/2,c*d[1]/2,n,n,0,e*(l[0]-f[0])/m,e*(f[1]-l[3])/m);Kh(this.v,c*d[0]/2-l[4],c*d[1]/2-l[5],c/g,-c/g,0,-f[0],-f[1]);Ct(a.attributions,b.f);Dt(a,h);this.f=g*c/e}return!!this.M};function Av(a,b,c,d){var e=gc(c,b,a);c=Sb(b,d,c);b=b.sc();void 0!==b&&(c*=b);b=a.sc();void 0!==b&&(c/=b);a=Sb(a,c,e)/c;isFinite(a)&&0<a&&(c/=a);return c}function Bv(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
function Cv(a,b,c,d,e,f,g,h,l,m,n){var p=jd(Math.round(c*a),Math.round(c*b));if(!l.length)return p.canvas;p.scale(c,c);var q=Oa();l.forEach(function(a){cb(q,a.extent)});var r=jd(Math.round(c*lb(q)/d),Math.round(c*mb(q)/d)),u=c/d;l.forEach(function(a){r.drawImage(a.image,m,m,a.image.width-2*m,a.image.height-2*m,(a.extent[0]-q[0])*u,-(a.extent[3]-q[3])*u,lb(a.extent)*u,mb(a.extent)*u)});var x=ib(g);h.c.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],l=b[2][0],m=b[2][1];a=(e[0][0]-
x[0])/f;var n=-(e[0][1]-x[1])/f,u=(e[1][0]-x[0])/f,B=-(e[1][1]-x[1])/f,da=(e[2][0]-x[0])/f,fb=-(e[2][1]-x[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,l=l-e,m=m-b;a:{g=[[g,h,0,0,u-a],[l,m,0,0,da-a],[0,0,g,h,B-n],[0,0,l,m,fb-n]];h=g.length;for(l=0;l<h;l++){for(var m=l,ca=Math.abs(g[l][l]),Ub=l+1;Ub<h;Ub++){var uc=Math.abs(g[Ub][l]);uc>ca&&(ca=uc,m=Ub)}if(!ca){g=null;break a}ca=g[m];g[m]=g[l];g[l]=ca;for(m=l+1;m<h;m++)for(ca=-g[m][l]/g[l][l],Ub=l;Ub<h+1;Ub++)g[m][Ub]=l==Ub?0:g[m][Ub]+ca*g[l][Ub]}l=Array(h);for(m=h-1;0<=m;m--)for(l[m]=g[m][h]/g[m][m],ca=m-1;0<=ca;ca--)g[ca][h]-=g[ca][m]*l[m];g=l}g&&(p.save(),p.beginPath(),l=(a+u+da)/3,m=(n+B+fb)/3,h=Bv(l,m,a,n),u=Bv(l,m,u,B),da=Bv(l,m,da,fb),p.moveTo(u[0],u[1]),p.lineTo(h[0],h[1]),p.lineTo(da[0],da[1]),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,n),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(r.canvas,0,0),p.restore())});n&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.c.forEach(function(a){var b=a.target;a=(b[0][0]-x[0])/f;var c=-(b[0][1]-
x[1])/f,d=(b[1][0]-x[0])/f,e=-(b[1][1]-x[1])/f,g=(b[2][0]-x[0])/f,b=-(b[2][1]-x[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Dv(a,b,c,d,e){this.i=a;this.f=b;var f={},g=ec(this.f,this.i);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.g=d;this.v=e*e;this.c=[];this.o=!1;this.l=this.i.i&&!!d&&!!this.i.G()&&lb(d)==lb(this.i.G());this.b=this.i.G()?lb(this.i.G()):null;this.j=this.f.G()?lb(this.f.G()):null;a=ib(c);b=hb(c);d=gb(c);c=eb(c);e=this.a(a);var h=this.a(b),l=this.a(d),m=this.a(c);Ev(this,a,b,d,c,e,h,l,m,10);if(this.o){var n=Infinity;this.c.forEach(function(a){n=Math.min(n,a.source[0][0],a.source[1][0],a.source[2][0])});this.c.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-n>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-n>this.b/2&&(b[0][0]-=this.b);b[1][0]-n>this.b/2&&(b[1][0]-=this.b);b[2][0]-n>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
function Ev(a,b,c,d,e,f,g,h,l,m){var n=Na([f,g,h,l]),p=a.b?lb(n)/a.b:null,q=a.b,r=a.i.i&&.5<p&&1>p,u=!1;if(0<m){if(a.f.c&&a.j)var x=Na([b,c,d,e]),u=u|.25<lb(x)/a.j;!r&&a.i.c&&p&&(u|=.25<p)}if(u||!a.g||qb(n,a.g)){if(!(u||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(n=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=r?(Ia(f[0],q)+Ia(h[0],q))/2-Ia(n[0],q):(f[0]+h[0])/2-n[0],n=(f[1]+h[1])/2-n[1],u=q*q+n*n>a.v),u)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(r),n=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(n),Ev(a,b,c,r,n,f,g,q,p,m-1),Ev(a,n,r,d,e,p,q,h,l,m-1)):(r=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(r),n=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(n),Ev(a,b,r,n,e,f,q,p,l,m-1),Ev(a,r,c,d,n,q,g,h,p,m-1));return}if(r){if(!a.l)return;a.o=!0}a.c.push({source:[f,h,l],target:[b,d,e]});a.c.push({source:[f,g,h],target:[b,c,d]})}}
function Fv(a){var b=Oa();a.c.forEach(function(a){a=a.source;Pa(b,a[0]);Pa(b,a[1]);Pa(b,a[2])});return b};function Gv(a,b,c,d,e,f){this.v=b;this.l=a.G();var g=b.G(),h=g?pb(c,g):c,g=Av(a,b,nb(h),d);this.j=new Dv(a,b,h,this.l,.5*g);this.c=d;this.i=c;a=Fv(this.j);this.o=(this.Hb=f(a,g,e))?this.Hb.a:1;this.ee=this.g=null;e=2;f=[];this.Hb&&(e=0,f=this.Hb.f);Is.call(this,c,d,this.o,e,f)}v(Gv,Is);Gv.prototype.ka=function(){1==this.state&&(Ec(this.ee),this.ee=null);Is.prototype.ka.call(this)};Gv.prototype.Y=function(){return this.g};Gv.prototype.de=function(){var a=this.Hb.getState();2==a&&(this.g=Cv(lb(this.i)/this.c,mb(this.i)/this.c,this.o,this.Hb.resolution,0,this.c,this.i,this.j,[{extent:this.Hb.G(),image:this.Hb.Y()}],0));this.state=a;this.s()};Gv.prototype.load=function(){if(0==this.state){this.state=1;this.s();var a=this.Hb.getState();2==a||3==a?this.de():(this.ee=y(this.Hb,"change",function(){var a=this.Hb.getState();if(2==a||3==a)Ec(this.ee),this.ee=null,this.de()},this),this.Hb.load())}};function Hv(a){$t.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state});this.C=void 0!==a.resolutions?a.resolutions:null;this.a=null;this.fa=0}v(Hv,$t);function Iv(a,b){a.C&&(b=a.C[ka(a.C,b,0)]);return b}
Hv.prototype.Y=function(a,b,c,d){var e=this.c;if(e&&d&&!dc(e,d)){if(this.a){if(this.fa==this.i&&dc(this.a.v,d)&&this.a.resolution==b&&this.a.a==c&&bb(this.a.G(),a))return this.a;Nc(this.a);this.a=null}this.a=new Gv(e,d,a,b,c,function(a,b,c){return this.Jc(a,b,c,e)}.bind(this));this.fa=this.i;return this.a}e&&(d=e);return this.Jc(a,b,c,d)};Hv.prototype.o=function(a){a=a.target;switch(a.getState()){case 1:this.b(new Jv(Kv,a));break;case 2:this.b(new Jv(Lv,a));break;case 3:this.b(new Jv(Mv,a))}};function Nv(a,b){a.Y().src=b}function Jv(a,b){Oc.call(this,a);this.image=b}v(Jv,Oc);var Kv="imageloadstart",Lv="imageloadend",Mv="imageloaderror";function Ov(a){Hv.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions,state:a.state});this.pa=a.canvasFunction;this.R=null;this.T=0;this.va=void 0!==a.ratio?a.ratio:1.5}v(Ov,Hv);Ov.prototype.Jc=function(a,b,c,d){b=Iv(this,b);var e=this.R;if(e&&this.T==this.i&&e.resolution==b&&e.a==c&&Va(e.G(),a))return e;a=a.slice();rb(a,this.va);(d=this.pa(a,b,c,[lb(a)/b*c,mb(a)/b*c],d))&&(e=new Ks(a,b,c,this.j,d));this.R=e;this.T=this.i;return e};function Pv(a){this.f=a.source;this.$a=Bh();this.g=jd();this.l=[0,0];this.Sa=void 0==a.renderBuffer?100:a.renderBuffer;this.B=null;Ov.call(this,{attributions:a.attributions,canvasFunction:this.tk.bind(this),logo:a.logo,projection:a.projection,ratio:a.ratio,resolutions:a.resolutions,state:this.f.getState()});this.I=null;this.v=void 0;this.Ii(a.style);y(this.f,"change",this.ro,this)}v(Pv,Ov);k=Pv.prototype;k.tk=function(a,b,c,d,e){var f=new pt(.5*b/c,a,b,this.f.T,this.Sa);this.f.Yd(a,b,e);var g=!1;this.f.$b(a,function(a){var d;if(!(d=g)){var e;(d=a.Lc())?e=d.call(a,b):this.v&&(e=this.v(a,b));if(e){var h,p=!1;Array.isArray(e)||(e=[e]);d=0;for(h=e.length;d<h;++d)p=Mt(f,a,e[d],Lt(b,c),this.qo,this)||p;d=p}else d=!1}g=d},this);tt(f);if(g)return null;this.l[0]!=d[0]||this.l[1]!=d[1]?(this.g.canvas.width=d[0],this.g.canvas.height=d[1],this.l[0]=d[0],this.l[1]=d[1]):this.g.clearRect(0,0,d[0],d[1]);a=Qv(this,nb(a),b,c,d);f.La(this.g,c,a,0,{});this.B=f;return this.g.canvas};k.Ea=function(a,b,c,d,e,f){if(this.B){var g={};return this.B.Ea(a,b,0,d,e,function(a){var b=w(a).toString();if(!(b in g))return g[b]=!0,f(a)})}};k.no=function(){return this.f};k.oo=function(){return this.I};k.po=function(){return this.v};function Qv(a,b,c,d,e){c=d/c;return Kh(a.$a,e[0]/2,e[1]/2,c,-c,0,-b[0],-b[1])}k.qo=function(){this.s()};k.ro=function(){bu(this,this.f.getState())};k.Ii=function(a){this.I=void 0!==a?a:fl;this.v=a?dl(this.I):void 0;this.s()};function Rv(a,b){Vt.call(this,a,b);this.o=this.f=this.M=null}v(Rv,Vt);function Sv(a,b){b=b.Y();return Ti(a.c.i,b)}Rv.prototype.Ea=function(a,b,c,d,e){var f=this.a;return f.ha().Ea(a,b.viewState.resolution,b.viewState.rotation,c,b.skippedFeatureUids,function(a){return d.call(e,a,f)})};Rv.prototype.ng=function(a,b){var c=this.c.i,d=a.pixelRatio,e=a.viewState,f=e.center,g=e.resolution,h=e.rotation,l=this.M,m=this.Ib,n=this.a.ha(),p=a.viewHints,q=a.extent;void 0!==b.extent&&(q=pb(q,b.extent));p[0]||p[1]||kb(q)||(b=n.Y(q,g,d,e.projection))&&At(this,b)&&(l=b,m=Sv(this,b),this.Ib&&a.postRenderFunctions.push(function(a,b){a.isContextLost()||a.deleteTexture(b)}.bind(null,c,this.Ib)));l&&(c=this.c.f.j,Tv(this,c.width,c.height,d,f,g,h,l.G()),this.o=null,d=this.v,Ch(d),Ih(d,1,-1),Jh(d,0,-1),this.M=l,this.Ib=m,Ct(a.attributions,l.f),Dt(a,n));return!!l};function Tv(a,b,c,d,e,f,g,h){b*=f;c*=f;a=a.S;Ch(a);Ih(a,2*d/b,2*d/c);Hh(a,-g);Jh(a,h[0]-e[0],h[1]-e[1]);Ih(a,(h[2]-h[0])/2,(h[3]-h[1])/2);Jh(a,1,1)}Rv.prototype.Ue=function(a,b){return void 0!==this.Ea(a,b,0,mf,this)};Rv.prototype.lg=function(a,b,c,d){if(this.M&&this.M.Y())if(this.a.ha()instanceof Pv){var e=Gh(b.pixelToCoordinateTransform,a.slice());if(this.Ea(e,b,0,mf,this))return c.call(d,this.a,null)}else{e=[this.M.Y().width,this.M.Y().height];if(!this.o){var f=b.size;b=Bh();Jh(b,-1,-1);Ih(b,2/f[0],2/f[1]);Jh(b,0,f[1]);Ih(b,1,-1);var f=Lh(this.S.slice()),g=Bh();Jh(g,0,e[1]);Ih(g,1,-1);Ih(g,e[0]/2,e[1]/2);Jh(g,1,1);Eh(g,f);Eh(g,b);this.o=g}a=Gh(this.o,a.slice());if(!(0>a[0]||a[0]>e[0]||0>a[1]||a[1]>e[1])&&(this.f||(this.f=jd(1,1)),this.f.clearRect(0,0,1,1),this.f.drawImage(this.M.Y(),a[0],a[1],1,1,0,0,1,1),e=this.f.getImageData(0,0,1,1).data,0<e[3]))return c.call(d,this.a,e)}};function Uv(a){wh.call(this,a?a:{})}v(Uv,wh);Uv.prototype.Fd=function(a){var b=null,c=a.U();"canvas"===c?b=new zv(this):"webgl"===c&&(b=new Rv(a,this));return b};function Vv(a){yv.call(this,a);this.c=null===this.c?null:jd();this.o=null;this.g=[];this.l=Oa();this.va=new ya(0,0,0,0);this.B=Bh();this.T=0}v(Vv,yv);function Wv(a,b){b=b.getState();a=a.a.kd();return 2==b||4==b||3==b&&!a}
Vv.prototype.sd=function(a,b){var c=a.pixelRatio,d=a.size,e=a.viewState,f=e.projection,g=e.resolution,e=e.center,h=this.a,l=h.ha(),m=l.i,n=l.Ta(f),p=n.tc(g,this.T),q=n.Da(p),r=Math.round(g/q)||1,u=a.extent;void 0!==b.extent&&(u=pb(u,b.extent));if(kb(u))return!1;var x=rc(n,u,q);var B=n.Pc(p);var E=n.Da(p),A=Ma(n.gb(p),n.j);B=Xa(B[0]+x.ca*A[0]*E,B[1]+x.da*A[1]*E,B[0]+(x.$+1)*A[0]*E,B[1]+(x.ia+1)*A[1]*E,void 0);E=l.nb(c);A={};A[p]={};var L=this.Nf(l,f,A),oa=this.l,ha=this.va,ga=!1,z,M;for(z=x.ca;z<=x.$;++z)for(M=x.da;M<=x.ia;++M){var ba=l.Nc(p,z,M,c,f);3!=ba.getState()||this.a.kd()||Ns(ba,2);Wv(this,ba)||(ba=Ms(ba));Wv(this,ba)?2==ba.getState()&&(A[p][ba.ta.toString()]=ba,ga||-1!=this.g.indexOf(ba)||(ga=!0)):pc(n,ba.ta,L,ha,oa)||(ba=qc(n,ba.ta,ha,oa))&&L(p+1,ba)}z=a.viewHints;z=z[0]||z[1];if(!(this.f&&16<Date.now()-a.time&&z||!ga&&this.o&&Va(this.o,u)&&this.mf==m&&r==this.R&&(z||q*c/E*r==this.f))){if(z=this.c)M=l.Xd(p,c,f),ba=Math.round((x.$-x.ca+1)*M[0]/r),M=Math.round((x.ia-x.da+1)*M[1]/r),ga=z.canvas,ga.width!=ba||ga.height!=M?(this.R=r,ga.width=ba,ga.height=M):(z.clearRect(0,0,ba,M),r=this.R);this.g.length=0;ga=Object.keys(A).map(Number);ga.sort(ia);var da,ha=0;for(da=ga.length;ha<da;++ha){z=ga[ha];L=l.Xd(z,c,f);ba=n.Da(z);var fb=ba/q;var ca=E*l.Wf(f);var Ub=A[z];for(var uc in Ub){ba=Ub[uc];M=n.Aa(ba.ta,oa);z=(M[0]-B[0])/q*E/r;M=(B[3]-M[3])/q*E/r;var bc=L[0]*fb/r;var Je=L[1]*fb/r;this.Of(ba,a,b,z,M,bc,Je,ca);this.g.push(ba)}}this.mf=m;this.f=q*c/E*r;this.o=B}b=this.f/g;b=Kh(this.B,c*d[0]/2,c*d[1]/2,b,b,0,(this.o[0]-e[0])/this.f*c,(e[1]-this.o[3])/this.f*c);Kh(this.v,c*d[0]/2-b[4],c*d[1]/2-b[5],c/g,-c/g,0,-e[0],-e[1]);Et(a.usedTiles,l,p,x);Ft(a,l,n,c,f,u,p,h.Ud());Bt(a,l);Dt(a,l);return 0<this.g.length};Vv.prototype.Of=function(a,b,c,d,e,f,g,h){this.a.ha().Zf(b.viewState.projection)||this.c.clearRect(d,e,f,g);(a=a.Y())&&this.c.drawImage(a,h,h,a.width-2*h,a.height-2*h,d,e,f,g)};Vv.prototype.Y=function(){var a=this.c;return a?a.canvas:null};Vv.prototype.C=function(){return this.B};function Xv(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}v(Xv,mi);var Yv=new Xv;function Zv(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}v(Zv,ni);var $v=new Zv;function aw(a,b){this.i=a.getUniformLocation(b,"e");this.c=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function bw(a,b){Vt.call(this,a,b);this.I=Yv;this.fa=$v;this.f=null;this.B=new Di([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.D=this.o=null;this.l=-1;this.R=[0,0]}v(bw,Vt);k=bw.prototype;k.ka=function(){Gi(this.c.f,this.B);Vt.prototype.ka.call(this)};k.Nf=function(a,b,c){var d=this.c;return function(e,f){return yt(a,b,e,f,function(a){var b=d.a.b.hasOwnProperty(a.bb());b&&(c[e]||(c[e]={}),c[e][a.ta.toString()]=a);return b})}};k.mg=function(){Vt.prototype.mg.call(this);this.f=null};k.ng=function(a,b,c){var d=this.c,e=c.b,f=a.viewState,g=f.projection,h=this.a,l=h.ha(),m=l.Ta(g),n=m.tc(f.resolution),p=m.Da(n),q=l.Xd(n,a.pixelRatio,g),r=q[0]/Ma(m.gb(n),this.R)[0],u=p/r,x=l.nb(r)*l.Wf(g),B=f.center,E=a.extent,A=rc(m,E,p);if(this.o&&Aa(this.o,A)&&this.l==l.i)u=this.D;else{var L=[A.$-A.ca+1,A.ia-A.da+1],oa=Ea(Math.max(L[0]*q[0],L[1]*q[1])),L=u*oa,ha=m.Pc(n),ga=ha[0]+A.ca*q[0]*u,u=ha[1]+A.da*q[1]*u,u=[ga,u,ga+L,u+L];Wt(this,a,oa);e.viewport(0,0,oa,oa);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);oa=Hi(c,this.I,this.fa);c.Qc(oa);this.f||(this.f=new aw(e,oa));wi(c,34962,this.B);e.enableVertexAttribArray(this.f.b);e.vertexAttribPointer(this.f.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.f.a);e.vertexAttribPointer(this.f.a,2,5126,!1,16,8);e.uniform1i(this.f.i,0);c={};c[n]={};var z=this.Nf(l,g,c),M=h.kd(),oa=!0,ga=Oa(),ba=new ya(0,0,0,0),da,fb;for(da=A.ca;da<=A.$;++da)for(fb=A.da;fb<=A.ia;++fb){ha=l.Nc(n,da,fb,r,g);if(void 0!==b.extent){var ca=m.Aa(ha.ta,ga);if(!qb(ca,b.extent))continue}ca=ha.getState();(ca=2==ca||4==ca||3==ca&&!M)||(ha=Ms(ha));ca=ha.getState();if(2==ca){if(d.a.b.hasOwnProperty(ha.bb())){c[n][ha.ta.toString()]=ha;continue}}else if(4==ca||3==ca&&!M)continue;oa=!1;ca=pc(m,ha.ta,z,ba,ga);ca||(ha=qc(m,ha.ta,ba,ga))&&z(n+1,ha)}b=Object.keys(c).map(Number);b.sort(ia);for(var z=new Float32Array(4),Ub,M=0,ba=b.length;M<ba;++M)for(Ub in da=c[b[M]],da)ha=da[Ub],ca=m.Aa(ha.ta,ga),z[0]=2*(ca[2]-ca[0])/L,z[1]=2*(ca[3]-ca[1])/L,z[2]=2*(ca[0]-u[0])/L-1,z[3]=2*(ca[1]-u[1])/L-1,e.uniform4fv(this.f.c,z),nk(d,ha,q,x*r),e.drawArrays(5,0,4);oa?(this.o=A,this.D=u,this.l=l.i):(this.D=this.o=null,this.l=-1,a.animate=!0)}Et(a.usedTiles,l,n,A);var uc=d.j;Ft(a,l,m,r,g,E,n,h.Ud(),function(a){2!=a.getState()||d.a.b.hasOwnProperty(a.bb())||a.bb()in uc.a||uc.f([a,tc(m,a.ta),m.Da(a.ta[0]),q,x*r])},this);Bt(a,l);Dt(a,l);e=this.v;Ch(e);Jh(e,(Math.round(B[0]/p)*p-u[0])/(u[2]-u[0]),(Math.round(B[1]/p)*p-u[1])/(u[3]-u[1]));f.rotation&&Hh(e,f.rotation);Ih(e,a.size[0]*f.resolution/(u[2]-u[0]),a.size[1]*f.resolution/(u[3]-u[1]));Jh(e,-.5,-.5);return!0};k.lg=function(a,b,c,d){if(this.g){a=Gh(this.v,[a[0]/b.size[0],(b.size[1]-a[1])/b.size[1]].slice());a=[a[0]*this.j,a[1]*this.j];b=this.c.f.b;b.bindFramebuffer(b.FRAMEBUFFER,this.g);var e=new Uint8Array(4);b.readPixels(a[0],a[1],1,1,b.RGBA,b.UNSIGNED_BYTE,e);if(0<e[3])return c.call(d,this.a,e)}};function cw(a){a=a?a:{};var b=tb({},a);delete b.preload;delete b.useInterimTilesOnError;wh.call(this,b);this.zi(void 0!==a.preload?a.preload:0);this.Ai(void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}v(cw,wh);k=cw.prototype;k.Fd=function(a){var b=null,c=a.U();"canvas"===c?b=new Vv(this):"webgl"===c&&(b=new bw(a,this));return b};k.Ud=function(){return this.get("preload")};k.zi=function(a){this.set("preload",a)};k.kd=function(){return this.get("useInterimTilesOnError")};k.Ai=function(a){this.set("useInterimTilesOnError",a)};function dw(a){this.c=null;Vv.call(this,a);this.I=!1;this.D=Bh();this.T="vector"==a.j?1:0}v(dw,Vv);var ew={image:ji,hybrid:["Polygon","LineString"]},fw={hybrid:["Image","Text"],vector:ji};k=dw.prototype;k.sd=function(a,b){var c=this.a,d=c.i;this.pa!=d&&(this.g.length=0,c=c.j,this.c||"vector"==c||(this.c=jd()),this.c&&"vector"==c&&(this.c=null));this.pa=d;return Vv.prototype.sd.apply(this,arguments)};k.Of=function(a,b,c,d,e,f,g,h){var l=a,m=this.a,n=b.pixelRatio,p=b.viewState.projection,q=m.i,r=m.get(Pt)||null,u=l.o;if(u.Nd||u.mf!=q||u.Kg!=r){for(var x=0,B=l.a.length;x<B;++x){var E=l.c[l.a[x]];E.S=null;u.Nd=!1;var A=m.ha(),L=A.tileGrid,oa=E.ta,ha=E.a,ga=A.Ta(p),z=ga.Da(l.ta[0]),M=L.Da(E.ta[0]),ga=ga.Aa(l.v),oa=L.Aa(oa),ga=pb(ga,oa);if("tile-pixels"==ha.a)var ba=L=A.nb(),M=Kh(this.D,0,0,1/M*ba,-1/M*ba,0,-oa[0],-oa[3]),M=Gh(M,[ga[0],ga[3]]).concat(Gh(M,[ga[2],ga[1]]));else if(L=z,M=ga,!dc(p,ha)){var da=!0;E.ig(p)}u.Nd=!1;A=new pt(0,M,L,A.l,m.c);M=Lt(L,n);L=E.g;r&&r!==u.Kg&&L.sort(r);oa=0;for(ga=L.length;oa<ga;++oa){ba=L[oa];da&&ba.V().tb(ha,p);var fb=void 0,ca=ba.Lc();ca?fb=ca.call(ba,z):(ca=m.f)&&(fb=ca(ba,z));if(fb){Array.isArray(fb)||(fb=[fb]);var ca=M,Ub=A;if(fb){var uc=!1;if(Array.isArray(fb))for(var bc=0,Je=fb.length;bc<Je;++bc)uc=Mt(Ub,ba,fb[bc],ca,this.Fi,this)||uc;else uc=Mt(Ub,ba,fb,ca,this.Fi,this)||uc;ba=uc}else ba=!1;this.I=this.I||ba;u.Nd=u.Nd||ba}}tt(A);E.c[l.ta.toString()]=A}u.mf=q;u.Kg=r}if(this.c){x=b;p=this.a;n=l.o;q=p.i;if((m=ew[p.j])&&n.Lg!==q)for(n.Lg=q,B=l.v,E=B[0],n=x.pixelRatio,z=p.ha(),p=z.tileGrid,ha=z.Ta(x.viewState.projection),q=ha.Da(E),r=z.nb(),l.j||(l.j=jd()),u=l.j,x=z.Xd(E,n,x.viewState.projection),u.canvas.width=x[0],u.canvas.height=x[1],x=ha.Aa(B),B=0,E=l.a.length;B<E;++B)ha=l.c[l.a[B]],A=ha.ta,da=n/q,z=Ch(this.D),"tile-pixels"==ha.a.a?(da=p.Aa(A,this.l),A=p.Da(A[0]),M=n/r*A/q,Ih(z,M,M),Jh(z,Math.round((da[0]-x[0])/A*r),Math.round((x[3]-da[3])/A*r))):(Ih(z,da,-da),Jh(z,-x[0],-x[3])),ha.c[l.ta.toString()].La(u,n,z,0,{},m);Vv.prototype.Of.apply(this,arguments)}};k.Ea=function(a,b,c,d,e){var f=b.viewState.resolution,g=b.viewState.rotation;c=void 0==c?0:c;var h=this.a,l={},m=this.g,n=h.ha();b=n.Ta(b.viewState.projection);var p=n.tileGrid,q;var r=0;for(q=m.length;r<q;++r){var u=m[r];var x=u.ta;x=b.Aa(x,this.l);var B=Qa(x,c*f,B);if(Ta(B,a)){x=0;for(var E=u.a.length;x<E;++x){var A=u.c[u.a[x]];if("tile-pixels"===A.a.a){var L=A.ta;f=p.Aa(L,this.l);var oa=ib(f);f=n.nb();L=p.Da(L[0])/f;oa=[(a[0]-oa[0])/L,(oa[1]-a[1])/L]}else oa=a;A=A.c[u.ta];var ha=ha||A.Ea(oa,f,g,c,{},function(a){var b=w(a).toString();if(!(b in l))return l[b]=!0,d.call(e,a,h)})}}}return ha};k.Fi=function(){zt(this)};k.ef=function(a,b,c){var d=this.a,e=d.ha(),f=fw[d.j];if(f)for(var g=b.pixelRatio,h=b.viewState.rotation,l=b.size,m=Math.round(g*l[0]/2),l=Math.round(g*l[1]/2),n=this.g,d=d.ha().nb(),p=e.tileGrid,e=e.Ta(b.viewState.projection),q=[],r=[],u=n.length-1;0<=u;--u){var x=n[u];if(5!=x.getState())for(var B=x.ta,E=e.Aa(B)[0]-e.Aa(x.v)[0],A=0,L=x.a.length;A<L;++A){var oa=x.c[x.a[A]],ha=oa.ta[0],ga=p.Da(ha);var z=oa;var M=b;if("tile-pixels"==z.a.a){var ba=this.a.ha(),da=ba.tileGrid,fb=z.ta,ba=da.Da(fb[0])/ba.nb(),z=M.viewState,ca=M.pixelRatio,Ub=z.resolution/ca,fb=da.Aa(fb,this.l),da=z.center,fb=ib(fb);M=M.size;M=Kh(this.D,Math.round(ca*M[0]/2),Math.round(ca*M[1]/2),ba/Ub,ba/Ub,z.rotation,(fb[0]-da[0])/ba,(da[1]-fb[1])/ba)}else M=Jt(this,M,0);Jh(M,E*d/ga,0);oa=oa.c[B.toString()];ga=vt(oa,M);a.save();a.globalAlpha=c.opacity;Vh(a,-h,m,l);ba=0;for(z=q.length;ba<z;++ba)ca=q[ba],ha<r[ba]&&(a.beginPath(),a.moveTo(ga[0],ga[1]),a.lineTo(ga[2],ga[3]),a.lineTo(ga[4],ga[5]),a.lineTo(ga[6],ga[7]),a.moveTo(ca[6],ca[7]),a.lineTo(ca[4],ca[5]),a.lineTo(ca[2],ca[3]),a.lineTo(ca[0],ca[1]),a.clip());oa.La(a,g,M,h,{},f);a.restore();q.push(ga);r.push(ha)}}Vv.prototype.ef.apply(this,arguments)};function W(a){a=a?a:{};var b=tb({},a);delete b.preload;delete b.useInterimTilesOnError;T.call(this,b);this.Bi(a.preload?a.preload:0);this.Ci(a.useInterimTilesOnError?a.useInterimTilesOnError:!0);xa(void 0==a.renderMode||"image"==a.renderMode||"hybrid"==a.renderMode||"vector"==a.renderMode,28);this.j=a.renderMode||"hybrid"}v(W,T);k=W.prototype;k.Fd=function(a){var b=null;"canvas"===a.U()&&(b=new dw(this));return b};k.Ud=function(){return this.get("preload")};k.kd=function(){return this.get("useInterimTilesOnError")};k.Bi=function(a){this.set("preload",a)};k.Ci=function(a){this.set("useInterimTilesOnError",a)};function gw(a,b,c,d){function e(){delete window[g];f.parentNode.removeChild(f)}var f=document.createElement("script"),g="olc_"+w(b);f.async=!0;f.src=a+(-1==a.indexOf("?")?"?":"&")+(d||"callback")+"="+g;var h=setTimeout(function(){e();c&&c()},1E4);window[g]=function(a){clearTimeout(h);e();b(a)};document.getElementsByTagName("head")[0].appendChild(f)};function hw(a,b,c,d,e,f,g,h,l,m,n){Ls.call(this,e,0);this.D=void 0!==n?n:!1;this.S=g;this.u=h;this.v=null;this.c=b;this.j=d;this.o=f?f:e;this.a=[];this.yd=null;this.g=0;f=d.Aa(this.o);h=this.j.G();e=this.c.G();f=h?pb(f,h):f;if(jb(f))if((h=a.G())&&(e?e=pb(e,h):e=h),d=Av(a,c,nb(f),d.Da(this.o[0])),!isFinite(d)||0>=d)this.state=4;else if(this.l=new Dv(a,c,f,e,d*(void 0!==m?m:.5)),this.l.c.length)if(this.g=b.tc(d),c=Fv(this.l),e&&(a.i?(c[1]=Ca(c[1],e[1],e[3]),c[3]=Ca(c[3],e[1],e[3])):c=pb(c,e)),jb(c)){a=oc(b,c,this.g);for(b=a.ca;b<=a.$;b++)for(c=a.da;c<=a.ia;c++)(m=l(this.g,b,c,g))&&this.a.push(m);this.a.length||(this.state=4)}else this.state=4;else this.state=4;else this.state=4}v(hw,Ls);hw.prototype.ka=function(){1==this.state&&(this.yd.forEach(Ec),this.yd=null);Ls.prototype.ka.call(this)};hw.prototype.Y=function(){return this.v};hw.prototype.de=function(){var a=[];this.a.forEach(function(b){b&&2==b.getState()&&a.push({extent:this.c.Aa(b.ta),image:b.Y()})},this);this.a.length=0;if(a.length){var b=this.o[0],c=this.j.gb(b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.j.Da(b),e=this.c.Da(this.g),f=this.j.Aa(this.o);this.v=Cv(d,c,this.S,e,this.c.G(),b,f,this.l,a,this.u,this.D);this.state=2}else this.state=3;this.s()};hw.prototype.load=function(){if(0==this.state){this.state=1;this.s();var a=0;this.yd=[];this.a.forEach(function(b){var c=b.getState();if(0==c||1==c){a++;var d=y(b,"change",function(){var c=b.getState();if(2==c||3==c||4==c)Ec(d),a--,a||(this.yd.forEach(Ec),this.yd=null,this.de())},this);this.yd.push(d)}},this);this.a.forEach(function(a){0==a.getState()&&a.load()});a||setTimeout(this.de.bind(this),0)}};function iw(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;xa(a,55);return(a.ia-a.da+1+g[2]).toString()})}}function jw(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=iw(a[e],b);return kw(d)}function kw(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[Ia((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
function lw(){}function mw(a){var b=[],c=/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)));return b}if(c=c=/\{(\d+)-(\d+)\}/.exec(a)){d=parseInt(c[2],10);for(e=parseInt(c[1],10);e<=d;e++)b.push(a.replace(c[0],e.toString()));return b}b.push(a);return b};function nw(a){lk.call(this);this.highWaterMark=void 0!==a?a:2048}v(nw,lk);function ow(a){return a.c>a.highWaterMark}nw.prototype.fd=function(a){for(var b,c;ow(this);){b=this.a.Yc;c=b.ta[0].toString();var d;if(d=c in a)b=b.ta,d=za(a[c],b[1],b[2]);if(d)break;else Nc(this.pop())}};function pw(a){$t.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.va=void 0!==a.opaque?a.opaque:!1;this.$a=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new nw(a.cacheSize);this.o=[0,0];this.uc=""}v(pw,$t);k=pw.prototype;k.Ki=function(){return ow(this.a)};k.fd=function(a,b){(a=this.Wd(a))&&a.fd(b)};function yt(a,b,c,d,e){b=a.Wd(b);if(!b)return!1;for(var f=!0,g,h,l=d.ca;l<=d.$;++l)for(var m=d.da;m<=d.ia;++m)g=a.Sb(c,l,m),h=!1,b.b.hasOwnProperty(g)&&(g=b.get(g),(h=2===g.getState())&&(h=!1!==e(g))),h||(f=!1);return f}k.Wf=function(){return 0};function qw(a,b){a.uc!==b&&(a.uc=b,a.s())}k.Sb=function(a,b,c){return a+"/"+b+"/"+c};k.Zf=function(){return this.va};k.ab=function(){return this.tileGrid};k.Ta=function(a){return this.tileGrid?this.tileGrid:vc(a)};k.Wd=function(a){var b=this.c;return b&&!dc(b,a)?null:this.a};k.nb=function(){return this.$a};k.Xd=function(a,b,c){c=this.Ta(c);b=this.nb(b);a=Ma(c.gb(a),this.o);return 1==b?a:La(a,b,this.o)};function rw(a,b,c){var d=void 0!==c?c:a.c;c=a.Ta(d);if(a.u&&d.c){var e=b;b=e[0];a=tc(c,e);d=zc(d);Ta(d,a)?b=e:(e=lb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=c.bg(a,b))}e=b[0];d=b[1];a=b[2];if(c.minZoom>e||e>c.maxZoom)c=!1;else{var f=c.G();c=(c=f?oc(c,f,e):c.a?c.a[e]:null)?za(c,d,a):!0}return c?b:null}
k.sa=function(){this.a.clear();this.s()};k.Ug=ua;function sw(a,b){Oc.call(this,a);this.tile=b}v(sw,Oc);function tw(a){pw.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.Fc?this.Fc.bind(this):lw;this.urls=null;a.urls?this.eb(a.urls):a.url&&this.jb(a.url);a.tileUrlFunction&&this.cb(a.tileUrlFunction)}v(tw,pw);k=tw.prototype;k.pb=function(){return this.tileLoadFunction};k.qb=function(){return this.tileUrlFunction};k.rb=function(){return this.urls};k.Li=function(a){a=a.target;switch(a.getState()){case 1:this.b(new sw("tileloadstart",a));break;case 2:this.b(new sw("tileloadend",a));break;case 3:this.b(new sw("tileloaderror",a))}};k.vb=function(a){this.a.clear();this.tileLoadFunction=a;this.s()};k.cb=function(a,b){this.tileUrlFunction=a;"undefined"!==typeof b?qw(this,b):this.s()};k.jb=function(a){var b=this.urls=mw(a);this.cb(this.Fc?this.Fc.bind(this):jw(b,this.tileGrid),a)};k.eb=function(a){this.urls=a;var b=a.join("\n");this.cb(this.Fc?this.Fc.bind(this):jw(a,this.tileGrid),b)};k.Ug=function(a,b,c){a=this.Sb(a,b,c);this.a.b.hasOwnProperty(a)&&this.a.get(a)};function X(a){tw.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:uw,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=a.tileClass?a.tileClass:Os;this.g={};this.v={};this.Sa=a.reprojectionErrorThreshold;this.I=!1}v(X,tw);k=X.prototype;k.Ki=function(){if(ow(this.a))return!0;for(var a in this.g)if(ow(this.g[a]))return!0;return!1};k.fd=function(a,b){a=this.Wd(a);this.a.fd(this.a==a?b:{});for(var c in this.g){var d=this.g[c];d.fd(d==a?b:{})}};k.Wf=function(a){return this.c&&a&&!dc(this.c,a)?0:this.Xf()};k.Xf=function(){return 0};k.Zf=function(a){return this.c&&a&&!dc(this.c,a)?!1:tw.prototype.Zf.call(this,a)};k.Ta=function(a){var b=this.c;return!this.tileGrid||b&&!dc(b,a)?(b=w(a).toString(),b in this.v||(this.v[b]=vc(a)),this.v[b]):this.tileGrid};k.Wd=function(a){var b=this.c;if(!b||dc(b,a))return this.a;a=w(a).toString();a in this.g||(this.g[a]=new nw(this.a.highWaterMark));return this.g[a]};function vw(a,b,c,d,e,f,g){b=[b,c,d];e=(c=rw(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;y(e,"change",a.Li,a);return e}
k.Nc=function(a,b,c,d,e){if(this.c&&e&&!dc(this.c,e)){var f=this.Wd(e);c=[a,b,c];var g;a=this.Sb.apply(this,c);f.b.hasOwnProperty(a)&&(g=f.get(a));b=this.uc;if(g&&g.key==b)return g;var h=this.c,l=this.Ta(h),m=this.Ta(e),n=rw(this,c,e);d=new hw(h,l,e,m,c,n,this.nb(d),this.Xf(),function(a,b,c,d){return ww(this,a,b,c,d,h)}.bind(this),this.Sa,this.I);d.key=b;g?(d.i=g,f.replace(a,d)):f.set(a,d);return d}return ww(this,a,b,c,d,e)};function ww(a,b,c,d,e,f){var g=a.Sb(b,c,d),h=a.uc;if(a.a.b.hasOwnProperty(g)){var l=a.a.get(g);if(l.key!=h){var m=l;l=vw(a,b,c,d,e,f,h);0==m.getState()?l.i=m.i:l.i=m;if(l.i){b=l.i;c=l;do{if(2==b.getState()){b.i=null;break}else 1==b.getState()?c=b:0==b.getState()?c.i=b.i:c=b;b=c.i}while(b)}a.a.replace(g,l)}}else l=vw(a,b,c,d,e,f,h),a.a.set(g,l);return l}k.Pb=function(a){if(this.I!=a){this.I=a;for(var b in this.g)this.g[b].clear();this.s()}};k.Qb=function(a,b){if(a=Tb(a))a=w(a).toString(),a in this.v||(this.v[a]=b)};function uw(a,b){a.Y().src=b};function xw(a){this.B=void 0!==a.hidpi?a.hidpi:!1;X.call(this,{cacheSize:a.cacheSize,crossOrigin:"anonymous",opaque:!0,projection:Tb("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,tilePixelRatio:this.B?2:1,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.R=void 0!==a.culture?a.culture:"en-us";this.C=void 0!==a.maxZoom?a.maxZoom:-1;this.f=a.key;this.l=a.imagerySet;gw("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.l+"?uriScheme=https&include=ImageryProviders&key="+
this.f,this.pa.bind(this),void 0,"jsonp")}v(xw,X);var yw=new Ac({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});xw.prototype.T=function(){return this.f};xw.prototype.fa=function(){return this.l};xw.prototype.pa=function(a){if(200!=a.statusCode||"OK"!=a.statusDescription||"ValidCredentials"!=a.authenticationResultCode||1!=a.resourceSets.length||1!=a.resourceSets[0].resources.length)bu(this,"error");else{var b=a.brandLogoUri;-1==b.indexOf("https")&&(b=b.replace("http","https"));var c=a.resourceSets[0].resources[0],d=-1==this.C?c.zoomMax:this.C;a=zc(this.c);var e=xc({extent:a,minZoom:c.zoomMin,maxZoom:d,tileSize:(c.imageWidth==c.imageHeight?c.imageWidth:[c.imageWidth,c.imageHeight])/this.nb()});this.tileGrid=e;var f=this.R,g=this.B;this.tileUrlFunction=kw(c.imageUrlSubdomains.map(function(a){var b=[0,0,0],d=c.imageUrl.replace("{subdomain}",a).replace("{culture}",f);return function(a){if(a)return jc(a[0],a[1],-a[2]-1,b),a=d,g&&(a+="&dpi=d1&device=mobile"),a.replace("{quadkey}",kc(b))}}));if(c.imageryProviders){var h=Vb(Tb("EPSG:4326"),this.c);a=c.imageryProviders.map(function(a){var b=a.attribution,c={};a.coverageAreas.forEach(function(a){var b=a.zoomMin,f=Math.min(a.zoomMax,d);a=a.bbox;a=sb([a[1],a[0],a[3],a[2]],h);var g;for(g=b;g<=f;++g){var l=g.toString();b=oc(e,a,g);l in c?c[l].push(b):c[l]=[b]}});return new Ac({html:b,tileRanges:c})});a.push(yw);this.ua(a)}this.D=b;bu(this,"ready")}};function zw(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c=void 0!==a.tileGrid?a.tileGrid:xc({extent:zc(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize});X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}v(zw,X);function Aw(a){this.C=a.account;this.B=a.map||"";this.f=a.config||{};this.l={};zw.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,maxZoom:void 0!==a.maxZoom?a.maxZoom:18,minZoom:a.minZoom,projection:a.projection,state:"loading",wrapX:a.wrapX});Bw(this)}v(Aw,zw);k=Aw.prototype;k.Kk=function(){return this.f};k.tq=function(a){tb(this.f,a);Bw(this)};k.Xp=function(a){this.f=a||{};Bw(this)};function Bw(a){var b=JSON.stringify(a.f);if(a.l[b])Cw(a,a.l[b]);else{var c="https://"+a.C+".cartodb.com/api/v1/map";a.B&&(c+="/named/"+a.B);var d=new XMLHttpRequest;d.addEventListener("load",a.Dl.bind(a,b));d.addEventListener("error",a.Cl.bind(a));d.open("POST",c);d.setRequestHeader("Content-type","application/json");d.send(JSON.stringify(a.f))}}
k.Dl=function(a,b){b=b.target;if(!b.status||200<=b.status&&300>b.status){try{var c=JSON.parse(b.responseText)}catch(d){bu(this,"error");return}Cw(this,c);this.l[a]=c;bu(this,"ready")}else bu(this,"error")};k.Cl=function(){bu(this,"error")};function Cw(a,b){a.jb("https://"+b.cdn_url.https+"/"+a.C+"/api/v1/map/"+b.layergroupid+"/{z}/{x}/{y}.png")};function Y(a){U.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,wrapX:a.wrapX});this.resolution=void 0;this.distance=void 0!==a.distance?a.distance:20;this.features=[];this.geometryFunction=a.geometryFunction||function(a){a=a.V();xa(a instanceof C,10);return a};this.source=a.source;this.source.J("change",Y.prototype.sa,this)}v(Y,U);k=Y.prototype;k.$n=function(){return this.distance};k.ao=function(){return this.source};k.Yd=function(a,b,c){this.source.Yd(a,b,c);b!==this.resolution&&(this.clear(),this.resolution=b,Dw(this),this.cd(this.features))};k.Yp=function(a){this.distance=a;this.sa()};k.sa=function(){this.clear();Dw(this);this.cd(this.features);U.prototype.sa.call(this)};function Dw(a){if(void 0!==a.resolution){a.features.length=0;for(var b=Oa(),c=a.distance*a.resolution,d=a.source.Xe(),e={},f=0,g=d.length;f<g;f++){var h=d[f];w(h).toString()in e||!(h=a.geometryFunction(h))||(h=h.X(),Za(h,b),Qa(b,c,b),h=a.source.Uf(b),h=h.filter(function(a){a=w(a).toString();return a in e?!1:e[a]=!0}),a.features.push(Ew(a,h)))}}}
function Ew(a,b){for(var c=[0,0],d=b.length-1;0<=d;--d){var e=a.geometryFunction(b[d]);e?Ze(c,e.X()):b.splice(d,1)}gf(c,1/b.length);a=new H(new C(c));a.set("features",b);return a};function Fw(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Gw(a){a=a||{};Hv.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.R=void 0!==a.crossOrigin?a.crossOrigin:null;this.T=void 0!==a.hidpi?a.hidpi:!0;this.f=a.url;this.g=a.imageLoadFunction?a.imageLoadFunction:Nv;this.v=a.params||{};this.M=null;this.l=[0,0];this.I=0;this.B=void 0!==a.ratio?a.ratio:1.5}v(Gw,Hv);k=Gw.prototype;k.co=function(){return this.v};k.Jc=function(a,b,c,d){if(void 0===this.f)return null;b=Iv(this,b);c=this.T?c:1;var e=this.M;if(e&&this.I==this.i&&e.resolution==b&&e.a==c&&Va(e.G(),a))return e;e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};tb(e,this.v);a=a.slice();var f=(a[0]+a[2])/2,g=(a[1]+a[3])/2;if(1!=this.B){var h=this.B*lb(a)/2,l=this.B*mb(a)/2;a[0]=f-h;a[1]=g-l;a[2]=f+h;a[3]=g+l}var h=b/c,l=Math.ceil(lb(a)/h),m=Math.ceil(mb(a)/h);a[0]=f-h*l/2;a[2]=f+h*l/2;a[1]=g-h*m/2;a[3]=g+h*m/2;this.l[0]=l;this.l[1]=m;f=a;g=this.l;h=c;d=d.mb.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(90*h);d=this.f;f=d.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage");f==d&&xa(!1,50);e=Fw(f,e);this.M=new Js(a,b,c,this.j,e,this.R,this.g);this.I=this.i;y(this.M,"change",this.o,this);return this.M};k.bo=function(){return this.g};k.eo=function(){return this.f};k.fo=function(a){this.M=null;this.g=a;this.s()};k.ho=function(a){a!=this.f&&(this.f=a,this.M=null,this.s())};k.io=function(a){tb(this.v,a);this.M=null;this.s()};function Hw(a){Hv.call(this,{projection:a.projection,resolutions:a.resolutions});this.R=void 0!==a.crossOrigin?a.crossOrigin:null;this.l=void 0!==a.displayDpi?a.displayDpi:96;this.g=a.params||{};this.I=a.url;this.f=a.imageLoadFunction?a.imageLoadFunction:Nv;this.T=void 0!==a.hidpi?a.hidpi:!0;this.pa=void 0!==a.metersPerUnit?a.metersPerUnit:1;this.v=void 0!==a.ratio?a.ratio:1;this.va=void 0!==a.useOverlay?a.useOverlay:!1;this.M=null;this.B=0}v(Hw,Hv);k=Hw.prototype;k.ko=function(){return this.g};k.Jc=function(a,b,c){b=Iv(this,b);c=this.T?c:1;var d=this.M;if(d&&this.B==this.i&&d.resolution==b&&d.a==c&&Va(d.G(),a))return d;1!=this.v&&(a=a.slice(),rb(a,this.v));var e=[lb(a)/b*c,mb(a)/b*c];if(void 0!==this.I){var d=this.I,f=nb(a),g=this.pa,h=lb(a),l=mb(a),m=e[0],n=e[1],p=.0254/this.l,e={OPERATION:this.va?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.l,SETDISPLAYWIDTH:Math.round(e[0]),SETDISPLAYHEIGHT:Math.round(e[1]),SETVIEWSCALE:n*h>m*l?h*g/(m*p):l*g/(n*p),SETVIEWCENTERX:f[0],SETVIEWCENTERY:f[1]};tb(e,this.g);d=Fw(d,e);d=new Js(a,b,c,this.j,d,this.R,this.f);y(d,"change",this.o,this)}else d=null;this.M=d;this.B=this.i;return d};k.jo=function(){return this.f};k.mo=function(a){tb(this.g,a);this.s()};k.lo=function(a){this.M=null;this.f=a;this.s()};function Iw(a){var b=a.imageExtent,c=void 0!==a.crossOrigin?a.crossOrigin:null,d=a.imageLoadFunction?a.imageLoadFunction:Nv;Hv.call(this,{attributions:a.attributions,logo:a.logo,projection:Tb(a.projection)});this.M=new Js(b,void 0,1,this.j,a.url,c,d);this.f=a.imageSize?a.imageSize:null;y(this.M,"change",this.o,this)}v(Iw,Hv);Iw.prototype.Jc=function(a){return qb(a,this.M.G())?this.M:null};Iw.prototype.o=function(a){if(2==this.M.getState()){var b=this.M.G(),c=this.M.Y();if(this.f){var d=this.f[0];var e=this.f[1]}else d=c.width,e=c.height;b=Math.ceil(lb(b)/(mb(b)/e));if(b!=d){var b=jd(b,e),f=b.canvas;b.drawImage(c,0,0,d,e,0,0,f.width,f.height);this.M.Og(f)}}Hv.prototype.o.call(this,a)};function Jw(a){a=a||{};Hv.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.pa=void 0!==a.crossOrigin?a.crossOrigin:null;this.g=a.url;this.v=a.imageLoadFunction?a.imageLoadFunction:Nv;this.f=a.params||{};this.l=!0;Kw(this);this.T=a.serverType;this.va=void 0!==a.hidpi?a.hidpi:!0;this.M=null;this.B=[0,0];this.R=0;this.I=void 0!==a.ratio?a.ratio:1.5}v(Jw,Hv);var Lw=[101,101];k=Jw.prototype;k.so=function(a,b,c,d){if(void 0!==this.g){var e=ob(a,b,0,Lw),f={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.f.LAYERS};tb(f,this.f,d);d=Math.floor((e[3]-a[1])/b);f[this.l?"I":"X"]=Math.floor((a[0]-e[0])/b);f[this.l?"J":"Y"]=d;return Mw(this,e,Lw,1,Tb(c),f)}};k.uo=function(){return this.f};k.Jc=function(a,b,c,d){if(void 0===this.g)return null;b=Iv(this,b);1==c||this.va&&void 0!==this.T||(c=1);var e=b/c,f=nb(a),g=ob(f,e,0,[Math.ceil(lb(a)/e),Math.ceil(mb(a)/e)]);a=ob(f,e,0,[Math.ceil(this.I*lb(a)/e),Math.ceil(this.I*mb(a)/e)]);if((f=this.M)&&this.R==this.i&&f.resolution==b&&f.a==c&&Va(f.G(),g))return f;g={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};tb(g,this.f);this.B[0]=Math.round(lb(a)/e);this.B[1]=Math.round(mb(a)/e);d=Mw(this,a,this.B,c,d,g);this.M=new Js(a,b,c,this.j,d,this.pa,this.v);this.R=this.i;y(this.M,"change",this.o,this);return this.M};k.to=function(){return this.v};function Mw(a,b,c,d,e,f){xa(void 0!==a.g,9);f[a.l?"CRS":"SRS"]=e.mb;"STYLES"in a.f||(f.STYLES="");if(1!=d)switch(a.T){case "geoserver":d=90*d+.5|0;f.FORMAT_OPTIONS="FORMAT_OPTIONS"in f?f.FORMAT_OPTIONS+(";dpi:"+d):"dpi:"+d;break;case "mapserver":f.MAP_RESOLUTION=90*d;break;case "carmentaserver":case "qgis":f.DPI=90*d;break;default:xa(!1,8)}f.WIDTH=c[0];f.HEIGHT=c[1];c=e.b;var g;a.l&&"ne"==c.substr(0,2)?g=[b[1],b[0],b[3],b[2]]:g=b;f.BBOX=g.join(",");return Fw(a.g,f)}k.vo=function(){return this.g};k.wo=function(a){this.M=null;this.v=a;this.s()};k.xo=function(a){a!=this.g&&(this.g=a,this.M=null,this.s())};k.yo=function(a){tb(this.f,a);Kw(this);this.M=null;this.s()};function Kw(a){a.l=0<=Ye(a.f.VERSION||"1.3.0")};function Nw(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Ow];zw.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}v(Nw,zw);var Ow=new Ac({html:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});Fj.df={};Fj.df.Af=function(){};(function(a){function b(a,b,c){if(g)return new ImageData(a,b,c);b=h.createImageData(b,c);b.data.set(a);return b}function c(a){var b=!0;try{new ImageData(10,10)}catch(n){b=!1}return function(c){var d=c.buffers,e=c.meta,f=c.width,g=c.height,h=d.length,l=d[0].byteLength;if(c.imageOps){l=Array(h);for(c=0;c<h;++c){var m=c;var n=new Uint8ClampedArray(d[c]);var L=f,oa=g;n=b?new ImageData(n,L,oa):{data:n,width:L,height:oa};l[m]=n}f=a(l,e).data}else{f=new Uint8ClampedArray(l);g=Array(h);m=Array(h);for(c=0;c<h;++c)g[c]=new Uint8ClampedArray(d[c]),m[c]=[0,0,0,0];for(d=0;d<l;d+=4){for(c=0;c<h;++c)n=g[c],m[c][0]=n[d],m[c][1]=n[d+1],m[c][2]=n[d+2],m[c][3]=n[d+3];c=a(m,e);f[d]=c[0];f[d+1]=c[1];f[d+2]=c[2];f[d+3]=c[3]}}return f.buffer}}function d(a,b){var d=Object.keys(a.lib||{}).map(function(b){return"var "+b+" = "+a.lib[b].toString()+";"}).concat(["var __minion__ = ("+c.toString()+")(",a.operation.toString(),");",'self.addEventListener("message", function(event) {',"  var buffer = __minion__(event.data);","  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);","});"]),d=URL.createObjectURL(new Blob(d,{type:"text/javascript"})),d=new Worker(d);d.addEventListener("message",b);return d}function e(a,b){var d=c(a.operation);return{postMessage:function(a){setTimeout(function(){b({data:{buffer:d(a),meta:a.meta}})},0)}}}function f(a){this.Ff=!!a.$l;var b;0===a.threads?b=0:this.Ff?b=1:b=a.threads||1;var c=[];if(b)for(var f=0;f<b;++f)c[f]=d(a,this.gh.bind(this,f));else c[0]=e(a,this.gh.bind(this,0));this.qe=c;this.Ed=[];this.fk=a.rp||Infinity;this.oe=0;this.bd={};this.Gf=null}var g=!0;try{new ImageData(10,10)}catch(l){g=!1}var h=document.createElement("canvas").getContext("2d");f.prototype.pp=function(a,b,c){this.dk({inputs:a,Qh:b,callback:c});this.dh()};f.prototype.dk=function(a){for(this.Ed.push(a);this.Ed.length>this.fk;)this.Ed.shift().callback(null,null)};f.prototype.dh=function(){if(0===this.oe&&0<this.Ed.length){var a=this.Gf=this.Ed.shift(),b=a.inputs[0].width,c=a.inputs[0].height,d=a.inputs.map(function(a){return a.data.buffer}),e=this.qe.length;this.oe=e;if(1===e)this.qe[0].postMessage({buffers:d,meta:a.Qh,imageOps:this.Ff,width:b,height:c},d);else for(var f=4*Math.ceil(a.inputs[0].data.length/4/e),g=0;g<e;++g){for(var h=g*f,B=[],E=0,A=d.length;E<A;++E)B.push(d[g].slice(h,h+f));this.qe[g].postMessage({buffers:B,meta:a.Qh,imageOps:this.Ff,width:b,height:c},B)}}};f.prototype.gh=function(a,b){this.Jq||(this.bd[a]=b.data,--this.oe,0===this.oe&&this.gk())};f.prototype.gk=function(){var a=this.Gf,c=this.qe.length;if(1===c){var d=new Uint8ClampedArray(this.bd[0].buffer);var e=this.bd[0].meta}else{var f=a.inputs[0].data.length;d=new Uint8ClampedArray(f);e=Array(f);for(var f=4*Math.ceil(f/4/c),g=0;g<c;++g){var h=g*f;d.set(new Uint8ClampedArray(this.bd[g].buffer),h);e[g]=this.bd[g].meta}}this.Gf=null;this.bd={};a.callback(null,b(d,a.inputs[0].width,a.inputs[0].height),e);this.dh()};a["default"]={Af:f};a.Af=f})(Fj.df=Fj.df||{});function Pw(a){this.B=null;this.va=void 0!==a.operationType?a.operationType:"pixel";this.Sa=void 0!==a.threads?a.threads:1;this.g=Qw(a.sources);for(var b=0,c=this.g.length;b<c;++b)y(this.g[b],"change",this.s,this);this.T=new Pe(function(){return 1},this.s.bind(this));for(var b=Rw(this.g),c={},d=0,e=b.length;d<e;++d)c[w(b[d].layer)]=b[d];this.f=null;this.I={animate:!1,attributions:{},coordinateToPixelTransform:Bh(),extent:null,focus:null,index:0,layerStates:c,layerStatesArray:b,logos:{},pixelRatio:1,pixelToCoordinateTransform:Bh(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.T,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}};Hv.call(this,{});a.operation&&this.v(a.operation,a.lib)}v(Pw,Hv);Pw.prototype.v=function(a,b){this.B=new Fj.df.Af({operation:a,$l:"image"===this.va,rp:1,lib:b,threads:this.Sa});this.s()};Pw.prototype.Y=function(a,b,c,d){c=!0;for(var e,f=0,g=this.g.length;f<g;++f)if(e=this.g[f].a.ha(),"ready"!==e.getState()){c=!1;break}if(!c)return null;c=tb({},this.I);c.viewState=tb({},c.viewState);e=nb(a);c.extent=a.slice();c.focus=e;c.size[0]=Math.round(lb(a)/b);c.size[1]=Math.round(mb(a)/b);f=c.viewState;f.center=e;f.projection=d;f.resolution=b;this.l=c;Qe(c.tileQueue,16,16);this.f&&(d=this.f.resolution,c=this.f.G(),b===d&&bb(a,c)||(this.f=null));if(!this.f||this.i!==this.R)a:{a=this.l;d=this.g.length;b=Array(d);for(c=0;c<d;++c){e=this.g[c];f=a;g=a.layerStatesArray[c];if(e.sd(f,g)){var h=f.size[0],l=f.size[1];if(Sw){var m=Sw.canvas;m.width!==h||m.height!==l?Sw=jd(h,l):Sw.clearRect(0,0,h,l)}else Sw=jd(h,l);e.S(f,g,Sw);e=Sw.getImageData(0,0,h,l)}else e=null;if(e)b[c]=e;else break a}d={};this.b(new Tw(Uw,a,d));this.B.pp(b,d,this.pa.bind(this,a))}return this.f};Pw.prototype.pa=function(a,b,c,d){if(!b&&c){b=a.extent;var e=a.viewState.resolution;if(e===this.l.viewState.resolution&&bb(b,this.l.extent)){if(this.f)var f=this.f.Y().getContext("2d");else f=jd(Math.round(lb(b)/e),Math.round(mb(b)/e)),this.f=new Ks(b,e,1,this.j,f.canvas);f.putImageData(c,0,0);this.s();this.R=this.i;this.b(new Tw(Vw,a,d))}}};var Sw=null;function Rw(a){return a.map(function(a){return th(a.a)})}
function Qw(a){for(var b=a.length,c=Array(b),d=0;d<b;++d){var e=d,f=a[d],g=null;f instanceof pw?(f=new cw({source:f}),g=new Vv(f)):f instanceof Hv&&(f=new Uv({source:f}),g=new zv(f));c[e]=g}return c}function Tw(a,b,c){Oc.call(this,a);this.extent=b.extent;this.resolution=b.viewState.resolution/b.pixelRatio;this.data=c}v(Tw,Oc);Pw.prototype.Jc=function(){return null};var Uw="beforeoperations",Vw="afteroperations";function Ww(a){var b=a.layer.indexOf("-"),b=Xw[-1==b?a.layer:a.layer.slice(0,b)],c=Yw[a.layer];zw.call(this,{attributions:Zw,cacheSize:a.cacheSize,crossOrigin:"anonymous",maxZoom:void 0!=a.maxZoom?a.maxZoom:b.maxZoom,minZoom:void 0!=a.minZoom?a.minZoom:b.minZoom,opaque:c.opaque,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+a.layer+"/{z}/{x}/{y}."+c.Lb,wrapX:a.wrapX})}v(Ww,zw);var Zw=[new Ac({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),Ow],Yw={terrain:{Lb:"jpg",opaque:!0},"terrain-background":{Lb:"jpg",opaque:!0},"terrain-labels":{Lb:"png",opaque:!1},"terrain-lines":{Lb:"png",opaque:!1},"toner-background":{Lb:"png",opaque:!0},toner:{Lb:"png",opaque:!0},"toner-hybrid":{Lb:"png",opaque:!1},"toner-labels":{Lb:"png",opaque:!1},"toner-lines":{Lb:"png",opaque:!1},"toner-lite":{Lb:"png",opaque:!0},watercolor:{Lb:"jpg",opaque:!0}},Xw={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:1,maxZoom:16}};function $w(a){a=a||{};X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.f=a.params||{};this.l=Oa();qw(this,ax(this))}v($w,X);function ax(a){var b=0,c=[],d;for(d in a.f)c[b++]=d+"-"+a.f[d];return c.join("/")}$w.prototype.C=function(){return this.f};$w.prototype.nb=function(a){return a};$w.prototype.Fc=function(a,b,c){var d=this.tileGrid;d||(d=this.Ta(c));if(!(d.b.length<=a[0])){var e=d.Aa(a,this.l),f=Ma(d.gb(a[0]),this.o);1!=b&&(f=La(f,b,this.o));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};tb(d,this.f);var g=this.urls;g?(c=c.mb.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=(1==g.length?g[0]:g[Ia((a[1]<<a[0])+a[2],g.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),a=Fw(a,d)):a=void 0;return a}};$w.prototype.B=function(a){tb(this.f,a);qw(this,ax(this))};function bx(a){pw.call(this,{opaque:!1,projection:a.projection,tileGrid:a.tileGrid,wrapX:void 0!==a.wrapX?a.wrapX:!0})}v(bx,pw);bx.prototype.Nc=function(a,b,c){var d=this.Sb(a,b,c);if(this.a.b.hasOwnProperty(d))return this.a.get(d);var e=Ma(this.tileGrid.gb(a));a=[a,b,c];b=(b=rw(this,a))?rw(this,b).toString():"";e=new cx(a,e,b);this.a.set(d,e);return e};function cx(a,b,c){Ls.call(this,a,2);this.c=b;this.Ia=c;this.a=null}v(cx,Ls);cx.prototype.Y=function(){if(this.a)return this.a;var a=this.c,b=jd(a[0],a[1]);b.strokeStyle="black";b.strokeRect(.5,.5,a[0]+.5,a[1]+.5);b.fillStyle="black";b.textAlign="center";b.textBaseline="middle";b.font="24px sans-serif";b.fillText(this.Ia,a[0]/2,a[1]/2);return this.a=b.canvas};cx.prototype.load=function(){};function dx(a){this.f=null;X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,projection:Tb("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,wrapX:void 0!==a.wrapX?a.wrapX:!0});if(a.url)if(a.jsonp)gw(a.url,this.og.bind(this),this.Ve.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.Ao.bind(this));b.addEventListener("error",this.zo.bind(this));b.open("GET",a.url);b.send()}else a.tileJSON?this.og(a.tileJSON):xa(!1,51)}v(dx,X);k=dx.prototype;k.Ao=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){try{var b=JSON.parse(a.responseText)}catch(c){this.Ve();return}this.og(b)}else this.Ve()};k.zo=function(){this.Ve()};k.pl=function(){return this.f};k.og=function(a){var b=Tb("EPSG:4326"),c=this.c;if(a.bounds){var d=Vb(b,c);var e=sb(a.bounds,d)}var f=a.minzoom||0,d=a.maxzoom||22;this.tileGrid=c=xc({extent:zc(c),maxZoom:d,minZoom:f});this.tileUrlFunction=jw(a.tiles,c);if(void 0!==a.attribution&&!this.j){b=void 0!==e?e:b.G();e={};for(var g;f<=d;++f)g=f.toString(),e[g]=[oc(c,b,f)];this.ua([new Ac({html:a.attribution,tileRanges:e})])}this.f=a;bu(this,"ready")};k.Ve=function(){bu(this,"error")};function ex(a){pw.call(this,{projection:Tb("EPSG:3857"),state:"loading"});this.v=void 0!==a.preemptive?a.preemptive:!0;this.l=lw;this.g=void 0;this.f=a.jsonp||!1;if(a.url)if(this.f)gw(a.url,this.pg.bind(this),this.We.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.Eo.bind(this));b.addEventListener("error",this.Do.bind(this));b.open("GET",a.url);b.send()}else a.tileJSON?this.pg(a.tileJSON):xa(!1,51)}v(ex,pw);k=ex.prototype;k.Eo=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){try{var b=JSON.parse(a.responseText)}catch(c){this.We();return}this.pg(b)}else this.We()};k.Do=function(){this.We()};k.ml=function(){return this.g};k.zk=function(a,b,c,d,e){this.tileGrid?(b=this.tileGrid.Be(a,b),fx(this.Nc(b[0],b[1],b[2],1,this.c),a,c,d,e)):!0===e?setTimeout(function(){c.call(d,null)},0):c.call(d,null)};k.We=function(){bu(this,"error")};k.pg=function(a){var b=Tb("EPSG:4326"),c=this.c;if(a.bounds){var d=Vb(b,c);var e=sb(a.bounds,d)}var f=a.minzoom||0,d=a.maxzoom||22;this.tileGrid=c=xc({extent:zc(c),maxZoom:d,minZoom:f});this.g=a.template;var g=a.grids;if(g){this.l=jw(g,c);if(void 0!==a.attribution){b=void 0!==e?e:b.G();for(e={};f<=d;++f)g=f.toString(),e[g]=[oc(c,b,f)];this.ua([new Ac({html:a.attribution,tileRanges:e})])}bu(this,"ready")}else bu(this,"error")};k.Nc=function(a,b,c,d,e){var f=this.Sb(a,b,c);if(this.a.b.hasOwnProperty(f))return this.a.get(f);a=[a,b,c];b=rw(this,a,e);d=this.l(b,d,e);d=new gx(a,void 0!==d?0:4,void 0!==d?d:"",this.tileGrid.Aa(a),this.v,this.f);this.a.set(f,d);return d};k.Ug=function(a,b,c){a=this.Sb(a,b,c);this.a.b.hasOwnProperty(a)&&this.a.get(a)};function gx(a,b,c,d,e,f){Ls.call(this,a,b);this.o=c;this.a=d;this.v=e;this.c=this.j=this.g=null;this.l=f}v(gx,Ls);k=gx.prototype;k.Y=function(){return null};k.getData=function(a){if(!this.g||!this.j)return null;var b=this.g[Math.floor((1-(a[1]-this.a[1])/(this.a[3]-this.a[1]))*this.g.length)];if("string"!==typeof b)return null;b=b.charCodeAt(Math.floor((a[0]-this.a[0])/(this.a[2]-this.a[0])*b.length));93<=b&&b--;35<=b&&b--;b-=32;a=null;b in this.j&&(b=this.j[b],this.c&&b in this.c?a=this.c[b]:a=b);return a};function fx(a,b,c,d,e){0==a.state&&!0===e?(Jc(a,"change",function(){c.call(d,this.getData(b))},a),hx(a)):!0===e?setTimeout(function(){c.call(d,this.getData(b))}.bind(a),0):c.call(d,a.getData(b))}k.bb=function(){return this.o};k.De=function(){this.state=3;this.s()};k.Ji=function(a){this.g=a.grid;this.j=a.keys;this.c=a.data;this.state=4;this.s()};function hx(a){if(0==a.state)if(a.state=1,a.l)gw(a.o,a.Ji.bind(a),a.De.bind(a));else{var b=new XMLHttpRequest;b.addEventListener("load",a.Co.bind(a));b.addEventListener("error",a.Bo.bind(a));b.open("GET",a.o);b.send()}}k.Co=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){try{var b=JSON.parse(a.responseText)}catch(c){this.De();return}this.Ji(b)}else this.De()};k.Bo=function(){this.De()};k.load=function(){this.v&&hx(this)};function ix(a){a=a||{};var b=a.params||{};X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:!("TRANSPARENT"in b?b.TRANSPARENT:1),projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.C=void 0!==a.gutter?a.gutter:0;this.f=b;this.l=!0;this.B=a.serverType;this.T=void 0!==a.hidpi?a.hidpi:!0;this.R="";jx(this);this.fa=Oa();kx(this);qw(this,lx(this))}v(ix,X);k=ix.prototype;k.Fo=function(a,b,c,d){c=Tb(c);var e=this.tileGrid;e||(e=this.Ta(c));b=e.Be(a,b);if(!(e.b.length<=b[0])){var f=e.Da(b[0]),g=e.Aa(b,this.fa),e=Ma(e.gb(b[0]),this.o),h=this.C;h&&(e=Ka(e,h,this.o),g=Qa(g,f*h,g));h={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.f.LAYERS};tb(h,this.f,d);d=Math.floor((g[3]-a[1])/f);h[this.l?"I":"X"]=Math.floor((a[0]-g[0])/f);h[this.l?"J":"Y"]=d;return mx(this,b,e,g,1,c,h)}};k.Xf=function(){return this.C};k.Sb=function(a,b,c){return this.R+X.prototype.Sb.call(this,a,b,c)};k.Go=function(){return this.f};function mx(a,b,c,d,e,f,g){var h=a.urls;if(h){g.WIDTH=c[0];g.HEIGHT=c[1];g[a.l?"CRS":"SRS"]=f.mb;"STYLES"in a.f||(g.STYLES="");if(1!=e)switch(a.B){case "geoserver":c=90*e+.5|0;g.FORMAT_OPTIONS="FORMAT_OPTIONS"in g?g.FORMAT_OPTIONS+(";dpi:"+c):"dpi:"+c;break;case "mapserver":g.MAP_RESOLUTION=90*e;break;case "carmentaserver":case "qgis":g.DPI=90*e;break;default:xa(!1,52)}f=f.b;a.l&&"ne"==f.substr(0,2)&&(a=d[0],d[0]=d[1],d[1]=a,a=d[2],d[2]=d[3],d[3]=a);g.BBOX=d.join(",");return Fw(1==h.length?h[0]:h[Ia((b[1]<<b[0])+b[2],h.length)],g)}}k.nb=function(a){return this.T&&void 0!==this.B?a:1};function jx(a){var b=0,c=[];if(a.urls){var d;var e=0;for(d=a.urls.length;e<d;++e)c[b++]=a.urls[e]}a.R=c.join("#")}function lx(a){var b=0,c=[],d;for(d in a.f)c[b++]=d+"-"+a.f[d];return c.join("/")}
k.Fc=function(a,b,c){var d=this.tileGrid;d||(d=this.Ta(c));if(!(d.b.length<=a[0])){1==b||this.T&&void 0!==this.B||(b=1);var e=d.Da(a[0]),f=d.Aa(a,this.fa),d=Ma(d.gb(a[0]),this.o),g=this.C;g&&(d=Ka(d,g,this.o),f=Qa(f,e*g,f));1!=b&&(d=La(d,b,this.o));e={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};tb(e,this.f);return mx(this,a,d,f,b,c,e)}};k.eb=function(a){X.prototype.eb.call(this,a);jx(this)};k.Ho=function(a){tb(this.f,a);jx(this);kx(this);qw(this,lx(this))};function kx(a){a.l=0<=Ye(a.f.VERSION||"1.3.0")};function nx(a,b,c,d,e,f,g,h,l,m,n,p,q,r){Ls.call(this,a,b);this.j=null;this.o={Nd:!1,Kg:null,mf:-1,Lg:-1};this.c=m;this.a=[];this.u=c;this.v=f;this.g=[];this.l=[];if(f){var u=l.Aa(f),x=l.Da(a[0]);h.Rf(u,h.tc(x),function(a){var b=pb(u,h.Aa(a));if(.5<=lb(b)/x&&.5<=mb(b)/x){var b=a.toString(),c=m[b];c||(c=g(a,n,p),c=m[b]=new q(a,void 0==c?4:0,void 0==c?"":c,d,e),this.l.push(y(c,"change",r)));c.j++;this.a.push(b)}}.bind(this))}}v(nx,Ls);nx.prototype.ka=function(){for(var a=0,b=this.a.length;a<b;++a){var c=this.a[a],d=this.c[c];d.j--;d.j||(delete this.c[c],Nc(d))}this.a.length=0;this.c=null;1==this.state&&(this.g.forEach(Ec),this.g.length=0);this.i&&Nc(this.i);this.state=5;this.s();this.l.forEach(Ec);this.l.length=0;Ls.prototype.ka.call(this)};nx.prototype.Y=function(){return-1==this.o.Lg?null:this.j.canvas};nx.prototype.bb=function(){return this.a.join("/")+"/"+this.u};nx.prototype.load=function(){var a=0,b=!1;0==this.state&&Ns(this,1);1==this.state&&this.a.forEach(function(c){var d=this.c[c];0==d.state?(d.Pg(this.S),d.load()):3==d.state?b=!0:4==d.state&&ma(this.a,c);if(1==d.state){var e=y(d,"change",function(){var f=d.getState();if(2==f||3==f)--a,Ec(e),ma(this.g,e),3==f&&(ma(this.a,c),b=!0),a||Ns(this,0<this.a.length?2:3)}.bind(this));this.g.push(e);++a}}.bind(this));a||setTimeout(function(){Ns(this,0<this.a.length?2:b?3:4)}.bind(this),0)};function ox(a,b){a.Pg(Cl(b,a.o,a.$o.bind(a),a.Zo.bind(a)))};function px(a,b,c,d,e){Ls.call(this,a,b);this.j=0;this.o=d;this.g=null;this.c={};this.u=e;this.l=c}v(px,Ls);k=px.prototype;k.ka=function(){this.g=null;this.c={};this.state=5;this.s();Ls.prototype.ka.call(this)};k.Lm=function(){return this.o};k.Km=function(){return this.g};k.bb=function(){return this.l};k.Mm=function(){return this.a};k.load=function(){0==this.state&&(Ns(this,1),this.u(this,this.l),this.v(null,NaN,null))};k.$o=function(a,b){this.ig(b);this.mj(a)};k.Zo=function(){Ns(this,3)};k.mj=function(a){this.g=a;Ns(this,2)};k.ig=function(a){this.a=a};k.Pg=function(a){this.v=a};function qx(a){tw.call(this,{attributions:a.attributions,cacheSize:void 0!==a.cacheSize?a.cacheSize:128,extent:a.extent,logo:a.logo,opaque:!1,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:ox,tileUrlFunction:a.tileUrlFunction,tilePixelRatio:a.tilePixelRatio,url:a.url,urls:a.urls,wrapX:void 0===a.wrapX?!0:a.wrapX});this.g=a.format?a.format:null;this.v={};this.l=void 0==a.overlaps?!0:a.overlaps;this.tileClass=a.tileClass?a.tileClass:px;this.f={};this.tileGrid||(this.tileGrid=this.Ta(Tb(a.projection||"EPSG:3857")))}v(qx,tw);qx.prototype.Nc=function(a,b,c,d,e){var f=this.Sb(a,b,c);if(this.a.b.hasOwnProperty(f))return this.a.get(f);a=[a,b,c];c=(b=rw(this,a,e))?this.tileUrlFunction(b,d,e):void 0;d=new nx(a,void 0!==c?0:4,void 0!==c?c:"",this.g,this.tileLoadFunction,b,this.tileUrlFunction,this.tileGrid,this.Ta(e),this.v,d,e,this.tileClass,this.Li.bind(this));this.a.set(f,d);return d};qx.prototype.Ta=function(a){var b=a.mb,c=this.f[b];c||(c=this.tileGrid,c=this.f[b]=wc(a,void 0,c?c.gb(c.minZoom):void 0));return c};qx.prototype.nb=function(a){return void 0==a?tw.prototype.nb.call(this,a):a};qx.prototype.Xd=function(a,b,c){a=Ma(this.Ta(c).gb(a));return[Math.round(a[0]*b),Math.round(a[1]*b)]};function rx(a){this.o=a.matrixIds;lc.call(this,{extent:a.extent,origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes,sizes:a.sizes})}v(rx,lc);rx.prototype.l=function(){return this.o};function sx(a,b,c){var d=[],e=[],f=[],g=[],h=[],l=void 0!==c?c:[];c=Tb(a.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var m=c.sc(),n="ne"==c.b.substr(0,2);a.TileMatrix.sort(function(a,b){return b.ScaleDenominator-a.ScaleDenominator});a.TileMatrix.forEach(function(a){var b;0<l.length?b=na(l,function(b){return a.Identifier==b.TileMatrix}):b=!0;if(b){e.push(a.Identifier);b=2.8E-4*a.ScaleDenominator/m;var c=a.TileWidth,p=a.TileHeight;n?f.push([a.TopLeftCorner[1],a.TopLeftCorner[0]]):f.push(a.TopLeftCorner);d.push(b);g.push(c==p?c:[c,p]);h.push([a.MatrixWidth,-a.MatrixHeight])}});return new rx({extent:b,origins:f,resolutions:d,matrixIds:e,tileSizes:g,sizes:h})};function Z(a){function b(a){a="KVP"==d?Fw(a,f):a.replace(/\{(\w+?)\}/g,function(a,b){return b.toLowerCase()in f?f[b.toLowerCase()]:a});return function(b){if(b){var c={TileMatrix:e.o[b[0]],TileCol:b[1],TileRow:-b[2]-1};tb(c,g);b=a;return b="KVP"==d?Fw(b,c):b.replace(/\{(\w+?)\}/g,function(a,b){return c[b]})}}}this.fa=void 0!==a.version?a.version:"1.0.0";this.C=void 0!==a.format?a.format:"image/jpeg";this.f=a.dimensions?a.dimensions:{};this.B=a.layer;this.l=a.matrixSet;this.R=a.style;var c=a.urls;void 0===c&&void 0!==a.url&&(c=mw(a.url));var d=this.T=void 0!==a.requestEncoding?a.requestEncoding:"KVP",e=a.tileGrid,f={layer:this.B,style:this.R,tilematrixset:this.l};"KVP"==d&&tb(f,{Service:"WMTS",Request:"GetTile",Version:this.fa,Format:this.C});var g=this.f,h=c&&0<c.length?kw(c.map(b)):lw;X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:a.tileClass,tileGrid:e,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:h,urls:c,wrapX:void 0!==a.wrapX?a.wrapX:!1});qw(this,tx(this))}v(Z,X);k=Z.prototype;k.Mk=function(){return this.f};k.Io=function(){return this.C};k.Jo=function(){return this.B};k.$k=function(){return this.l};k.kl=function(){return this.T};k.Ko=function(){return this.R};k.rl=function(){return this.fa};function tx(a){var b=0,c=[],d;for(d in a.f)c[b++]=d+"-"+a.f[d];return c.join("/")}
k.uq=function(a){tb(this.f,a);qw(this,tx(this))};function ux(a){a=a||{};var b=a.size,c=b[0],d=b[1],e=[],f=256;switch(void 0!==a.tierSizeCalculation?a.tierSizeCalculation:vx){case vx:for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),f+=f;break;case wx:for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),c>>=1,d>>=1;break;default:xa(!1,53)}e.push([1,1]);e.reverse();for(var f=[1],g=[0],d=1,c=e.length;d<c;d++)f.push(1<<d),g.push(e[d-1][0]*e[d-1][1]+g[d-1]);f.reverse();b=[0,-b[1],b[0],0];b=new lc({extent:b,origin:ib(b),resolutions:f});(f=a.url)&&-1==f.indexOf("{TileGroup}")&&(f+="{TileGroup}/{z}-{x}-{y}.jpg");f=mw(f);f=kw(f.map(function(a){return function(b){if(b){var c=b[0],d=b[1];b=-b[2]-1;var f={z:c,x:d,y:b,TileGroup:"TileGroup"+((d+b*e[c][0]+g[c])/256|0)};return a.replace(/\{(\w+?)\}/g,function(a,b){return f[b]})}}}));X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:xx,tileGrid:b,tileUrlFunction:f})}
v(ux,X);function xx(a,b,c,d,e){Os.call(this,a,b,c,d,e);this.a=null}v(xx,Os);xx.prototype.Y=function(){if(this.a)return this.a;var a=Os.prototype.Y.call(this);if(2==this.state){if(256==a.width&&256==a.height)return this.a=a;var b=jd(256,256);b.drawImage(a,0,0);return this.a=b.canvas}return a};var vx="default",wx="truncated";function yx(a,b){this.b=b;this.a=[{x:0,y:0,width:a,height:a}];this.c={};this.i=jd(a,a);this.f=this.i.canvas}yx.prototype.get=function(a){return this.c[a]||null};yx.prototype.add=function(a,b,c,d,e){var f;var g=0;for(f=this.a.length;g<f;++g){var h=this.a[g];if(h.width>=b+this.b&&h.height>=c+this.b)return f={offsetX:h.x+this.b,offsetY:h.y+this.b,image:this.f},this.c[a]=f,d.call(e,this.i,h.x+this.b,h.y+this.b),a=g,b+=this.b,d=c+this.b,h.width-b>h.height-d?(c={x:h.x+b,y:h.y,width:h.width-b,height:h.height},b={x:h.x,y:h.y+d,width:b,height:h.height-d},zx(this,a,c,b)):(c={x:h.x+b,y:h.y,width:h.width-b,height:d},b={x:h.x,y:h.y+d,width:h.width,height:h.height-d},zx(this,a,c,b)),f}return null};function zx(a,b,c,d){b=[b,1];0<c.width&&0<c.height&&b.push(c);0<d.width&&0<d.height&&b.push(d);a.a.splice.apply(a.a,b)};function Ax(a){a=a||{};this.a=void 0!==a.initialSize?a.initialSize:256;this.i=void 0!==a.maxSize?a.maxSize:void 0!==ea?ea:2048;this.b=void 0!==a.space?a.space:1;this.f=[new yx(this.a,this.b)];this.c=this.a;this.g=[new yx(this.c,this.b)]}Ax.prototype.add=function(a,b,c,d,e,f){if(b+this.b>this.i||c+this.b>this.i)return null;d=Bx(this,!1,a,b,c,d,f);if(!d)return null;a=Bx(this,!0,a,b,c,e?e:ua,f);return{offsetX:d.offsetX,offsetY:d.offsetY,image:d.image,Zl:a.image}};function Bx(a,b,c,d,e,f,g){var h=b?a.g:a.f,l;var m=0;for(l=h.length;m<l;++m){var n=h[m];if(n=n.add(c,d,e,f,g))return n;n||m!==l-1||(b?(n=Math.min(2*a.c,a.i),a.c=n):(n=Math.min(2*a.a,a.i),a.a=n),n=new yx(n,a.b),h.push(n),++l)}return null};wa.prototype.code=wa.prototype.code;t("ol.Attribution",Ac);Ac.prototype.getHTML=Ac.prototype.i;t("ol.Collection",Yc);Yc.prototype.clear=Yc.prototype.clear;Yc.prototype.extend=Yc.prototype.fg;Yc.prototype.forEach=Yc.prototype.forEach;Yc.prototype.getArray=Yc.prototype.tm;Yc.prototype.item=Yc.prototype.item;Yc.prototype.getLength=Yc.prototype.dc;Yc.prototype.insertAt=Yc.prototype.He;Yc.prototype.pop=Yc.prototype.pop;Yc.prototype.push=Yc.prototype.push;Yc.prototype.remove=Yc.prototype.remove;Yc.prototype.removeAt=Yc.prototype.Hg;Yc.prototype.setAt=Yc.prototype.Wp;bd.prototype.element=bd.prototype.element;t("ol.color.asArray",ed);t("ol.color.asString",gd);t("ol.colorlike.asColorLike",id);t("ol.control.defaults",xd);t("ol.coordinate.add",Ze);t("ol.coordinate.createStringXY",function(a){return function(b){return lf(b,a)}});t("ol.coordinate.format",cf);t("ol.coordinate.rotate",ef);t("ol.coordinate.toStringHDMS",function(a,b){return a?bf("NS",a[1],b)+" "+bf("EW",a[0],b):""});t("ol.coordinate.toStringXY",lf);t("ol.DeviceOrientation",Rk);Rk.prototype.getAlpha=Rk.prototype.Fk;Rk.prototype.getBeta=Rk.prototype.Ik;Rk.prototype.getGamma=Rk.prototype.Ok;Rk.prototype.getHeading=Rk.prototype.um;Rk.prototype.getTracking=Rk.prototype.Th;Rk.prototype.setTracking=Rk.prototype.gg;t("ol.easing.easeIn",qd);t("ol.easing.easeOut",rd);t("ol.easing.inAndOut",sd);t("ol.easing.linear",td);t("ol.easing.upAndDown",function(a){return.5>a?sd(2*a):1-sd(2*(a-.5))});t("ol.extent.boundingExtent",Na);t("ol.extent.buffer",Qa);t("ol.extent.containsCoordinate",Ta);t("ol.extent.containsExtent",Va);t("ol.extent.containsXY",Ua);t("ol.extent.createEmpty",Oa);t("ol.extent.equals",bb);t("ol.extent.extend",cb);t("ol.extent.getArea",jb);t("ol.extent.getBottomLeft",eb);t("ol.extent.getBottomRight",gb);t("ol.extent.getCenter",nb);t("ol.extent.getHeight",mb);t("ol.extent.getIntersection",pb);t("ol.extent.getSize",function(a){return[a[2]-a[0],a[3]-a[1]]});t("ol.extent.getTopLeft",ib);t("ol.extent.getTopRight",hb);t("ol.extent.getWidth",lb);t("ol.extent.intersects",qb);t("ol.extent.isEmpty",kb);t("ol.extent.applyTransform",sb);t("ol.Feature",H);H.prototype.clone=H.prototype.clone;H.prototype.getGeometry=H.prototype.V;H.prototype.getId=H.prototype.wm;H.prototype.getGeometryName=H.prototype.Qk;H.prototype.getStyle=H.prototype.xm;H.prototype.getStyleFunction=H.prototype.Lc;H.prototype.setGeometry=H.prototype.Ra;H.prototype.setStyle=H.prototype.hg;H.prototype.setId=H.prototype.jc;H.prototype.setGeometryName=H.prototype.Tc;t("ol.featureloader.xhr",Dl);t("ol.Geolocation",xs);xs.prototype.getAccuracy=xs.prototype.Dk;xs.prototype.getAccuracyGeometry=xs.prototype.Ek;xs.prototype.getAltitude=xs.prototype.Gk;xs.prototype.getAltitudeAccuracy=xs.prototype.Hk;xs.prototype.getHeading=xs.prototype.ym;xs.prototype.getPosition=xs.prototype.zm;xs.prototype.getProjection=xs.prototype.Uh;xs.prototype.getSpeed=xs.prototype.ll;xs.prototype.getTracking=xs.prototype.Vh;xs.prototype.getTrackingOptions=xs.prototype.Gh;xs.prototype.setProjection=xs.prototype.Wh;xs.prototype.setTracking=xs.prototype.Ke;xs.prototype.setTrackingOptions=xs.prototype.wj;t("ol.Graticule",Ds);Ds.prototype.getMap=Ds.prototype.Cm;Ds.prototype.getMeridians=Ds.prototype.al;Ds.prototype.getParallels=Ds.prototype.hl;Ds.prototype.setMap=Ds.prototype.setMap;t("ol.has.DEVICE_PIXEL_RATIO",Sd);t("ol.has.CANVAS",Ud);t("ol.has.DEVICE_ORIENTATION",Vd);t("ol.has.GEOLOCATION",Wd);t("ol.has.TOUCH",Xd);t("ol.has.WEBGL",Md);Js.prototype.getImage=Js.prototype.Y;Js.prototype.load=Js.prototype.load;Os.prototype.getImage=Os.prototype.Y;t("ol.inherits",v);t("ol.interaction.defaults",qh);t("ol.Kinetic",kg);t("ol.loadingstrategy.all",Zt);t("ol.loadingstrategy.bbox",function(a){return[a]});t("ol.loadingstrategy.tile",function(a){return function(b,c){c=a.tc(c);b=oc(a,b,c);var d=[];c=[c,0,0];for(c[1]=b.ca;c[1]<=b.$;++c[1])for(c[2]=b.da;c[2]<=b.ia;++c[2])d.push(a.Aa(c));return d}});t("ol.Map",G);G.prototype.addControl=G.prototype.kk;G.prototype.addInteraction=G.prototype.lk;G.prototype.addLayer=G.prototype.ih;G.prototype.addOverlay=G.prototype.jh;G.prototype.forEachFeatureAtPixel=G.prototype.we;G.prototype.forEachLayerAtPixel=G.prototype.Im;G.prototype.hasFeatureAtPixel=G.prototype.Yl;G.prototype.getEventCoordinate=G.prototype.Tf;G.prototype.getEventPixel=G.prototype.xe;G.prototype.getTarget=G.prototype.ag;G.prototype.getTargetElement=G.prototype.jd;G.prototype.getCoordinateFromPixel=G.prototype.Wa;G.prototype.getControls=G.prototype.Lk;G.prototype.getOverlays=G.prototype.fl;G.prototype.getOverlayById=G.prototype.el;G.prototype.getInteractions=G.prototype.Sk;G.prototype.getLayerGroup=G.prototype.Kc;G.prototype.getLayers=G.prototype.Xh;G.prototype.getPixelFromCoordinate=G.prototype.Ja;G.prototype.getSize=G.prototype.Ob;G.prototype.getView=G.prototype.Z;G.prototype.getViewport=G.prototype.sl;G.prototype.renderSync=G.prototype.Tp;G.prototype.render=G.prototype.render;G.prototype.removeControl=G.prototype.Mp;G.prototype.removeInteraction=G.prototype.Np;G.prototype.removeLayer=G.prototype.Pp;G.prototype.removeOverlay=G.prototype.Qp;G.prototype.setLayerGroup=G.prototype.qj;G.prototype.setSize=G.prototype.Qg;G.prototype.setTarget=G.prototype.Le;G.prototype.setView=G.prototype.iq;G.prototype.updateSize=G.prototype.Ad;Jd.prototype.originalEvent=Jd.prototype.originalEvent;Jd.prototype.pixel=Jd.prototype.pixel;Jd.prototype.coordinate=Jd.prototype.coordinate;Jd.prototype.dragging=Jd.prototype.dragging;Id.prototype.map=Id.prototype.map;Id.prototype.frameState=Id.prototype.frameState;t("ol.Object",Tc);Tc.prototype.get=Tc.prototype.get;Tc.prototype.getKeys=Tc.prototype.O;Tc.prototype.getProperties=Tc.prototype.N;Tc.prototype.set=Tc.prototype.set;Tc.prototype.setProperties=Tc.prototype.H;Tc.prototype.unset=Tc.prototype.P;Xc.prototype.key=Xc.prototype.key;Xc.prototype.oldValue=Xc.prototype.oldValue;t("ol.Observable",Sc);t("ol.Observable.unByKey",function(a){if(Array.isArray(a))for(var b=0,c=a.length;b<c;++b)Ec(a[b]);else Ec(a)});Sc.prototype.changed=Sc.prototype.s;Sc.prototype.dispatchEvent=Sc.prototype.b;Sc.prototype.getRevision=Sc.prototype.L;Sc.prototype.on=Sc.prototype.J;Sc.prototype.once=Sc.prototype.once;Sc.prototype.un=Sc.prototype.K;t("ol.Overlay",sk);sk.prototype.getElement=sk.prototype.Rd;sk.prototype.getId=sk.prototype.Jm;sk.prototype.getMap=sk.prototype.Me;sk.prototype.getOffset=sk.prototype.Dh;sk.prototype.getPosition=sk.prototype.Yh;sk.prototype.getPositioning=sk.prototype.Eh;sk.prototype.setElement=sk.prototype.lj;sk.prototype.setMap=sk.prototype.setMap;sk.prototype.setOffset=sk.prototype.rj;sk.prototype.setPosition=sk.prototype.Ne;sk.prototype.setPositioning=sk.prototype.uj;t("ol.proj.METERS_PER_UNIT",zb);t("ol.proj.setProj4",function(a){Ab=a});t("ol.proj.getPointResolution",Sb);t("ol.proj.addEquivalentProjections",Wb);t("ol.proj.addProjection",Xb);t("ol.proj.addCoordinateTransforms",ac);t("ol.proj.fromLonLat",function(a,b){return gc(a,"EPSG:4326",void 0!==b?b:"EPSG:3857")});t("ol.proj.toLonLat",function(a,b){return gc(a,void 0!==b?b:"EPSG:3857","EPSG:4326")});t("ol.proj.get",Tb);t("ol.proj.equivalent",dc);t("ol.proj.getTransform",ec);t("ol.proj.transform",gc);t("ol.proj.transformExtent",hc);t("ol.render.toContext",function(a,b){var c=a.canvas,d=b?b:{};b=d.pixelRatio||Sd;if(d=d.size)c.width=d[0]*b,c.height=d[1]*b,c.style.width=d[0]+"px",c.style.height=d[1]+"px";c=[0,0,c.width,c.height];d=Ih(Bh(),b,b);return new Xh(a,b,c,d,0)});t("ol.size.toSize",Ma);t("ol.Sphere",xb);xb.prototype.geodesicArea=xb.prototype.a;xb.prototype.haversineDistance=xb.prototype.b;Ls.prototype.getTileCoord=Ls.prototype.f;Ls.prototype.load=Ls.prototype.load;t("ol.tilegrid.createXYZ",xc);px.prototype.getFormat=px.prototype.Lm;px.prototype.getFeatures=px.prototype.Km;px.prototype.getProjection=px.prototype.Mm;px.prototype.setFeatures=px.prototype.mj;px.prototype.setProjection=px.prototype.ig;px.prototype.setLoader=px.prototype.Pg;t("ol.View",F);F.prototype.animate=F.prototype.animate;F.prototype.getAnimating=F.prototype.Ic;F.prototype.getInteracting=F.prototype.Rk;F.prototype.cancelAnimations=F.prototype.ed;F.prototype.constrainCenter=F.prototype.Ec;F.prototype.constrainResolution=F.prototype.constrainResolution;F.prototype.constrainRotation=F.prototype.constrainRotation;F.prototype.getCenter=F.prototype.wa;F.prototype.calculateExtent=F.prototype.dd;F.prototype.getMaxResolution=F.prototype.Nm;F.prototype.getMinResolution=F.prototype.Pm;F.prototype.getMaxZoom=F.prototype.Om;F.prototype.setMaxZoom=F.prototype.eq;F.prototype.getMinZoom=F.prototype.Qm;F.prototype.setMinZoom=F.prototype.fq;F.prototype.getProjection=F.prototype.Rm;F.prototype.getResolution=F.prototype.Pa;F.prototype.getResolutions=F.prototype.Sm;F.prototype.getResolutionForExtent=F.prototype.ze;F.prototype.getRotation=F.prototype.Qa;F.prototype.getZoom=F.prototype.Hh;F.prototype.getZoomForResolution=F.prototype.Ce;F.prototype.fit=F.prototype.Qf;F.prototype.centerOn=F.prototype.uk;F.prototype.rotate=F.prototype.rotate;F.prototype.setCenter=F.prototype.ob;F.prototype.setResolution=F.prototype.Vc;F.prototype.setRotation=F.prototype.Oe;F.prototype.setZoom=F.prototype.lq;t("ol.xml.getAllTextContent",kl);t("ol.xml.parse",pl);Oi.prototype.getGL=Oi.prototype.Wo;Oi.prototype.useProgram=Oi.prototype.Qc;t("ol.tilegrid.TileGrid",lc);lc.prototype.forEachTileCoord=lc.prototype.Rf;lc.prototype.getMaxZoom=lc.prototype.Ti;lc.prototype.getMinZoom=lc.prototype.Ui;lc.prototype.getOrigin=lc.prototype.Pc;lc.prototype.getResolution=lc.prototype.Da;lc.prototype.getResolutions=lc.prototype.Vi;lc.prototype.getTileCoordExtent=lc.prototype.Aa;lc.prototype.getTileCoordForCoordAndResolution=lc.prototype.Be;lc.prototype.getTileCoordForCoordAndZ=lc.prototype.bg;lc.prototype.getTileSize=lc.prototype.gb;lc.prototype.getZForResolution=lc.prototype.tc;t("ol.tilegrid.WMTS",rx);rx.prototype.getMatrixIds=rx.prototype.l;t("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",sx);t("ol.style.AtlasManager",Ax);t("ol.style.Circle",$k);$k.prototype.setRadius=$k.prototype.Uc;t("ol.style.Fill",al);al.prototype.clone=al.prototype.clone;al.prototype.getColor=al.prototype.i;al.prototype.setColor=al.prototype.c;t("ol.style.Icon",eo);eo.prototype.clone=eo.prototype.clone;eo.prototype.getAnchor=eo.prototype.Hc;eo.prototype.getColor=eo.prototype.Lo;eo.prototype.getImage=eo.prototype.Y;eo.prototype.getOrigin=eo.prototype.Oc;eo.prototype.getSrc=eo.prototype.Mo;eo.prototype.getSize=eo.prototype.ic;eo.prototype.load=eo.prototype.load;t("ol.style.Image",Xk);Xk.prototype.getOpacity=Xk.prototype.Ze;Xk.prototype.getRotateWithView=Xk.prototype.$e;Xk.prototype.getRotation=Xk.prototype.af;Xk.prototype.getScale=Xk.prototype.bf;Xk.prototype.getSnapToPixel=Xk.prototype.Ae;Xk.prototype.setOpacity=Xk.prototype.td;Xk.prototype.setRotation=Xk.prototype.cf;Xk.prototype.setScale=Xk.prototype.ud;t("ol.style.RegularShape",Yk);Yk.prototype.clone=Yk.prototype.clone;Yk.prototype.getAnchor=Yk.prototype.Hc;Yk.prototype.getAngle=Yk.prototype.Pi;Yk.prototype.getFill=Yk.prototype.Fa;Yk.prototype.getImage=Yk.prototype.Y;Yk.prototype.getOrigin=Yk.prototype.Oc;Yk.prototype.getPoints=Yk.prototype.Qi;Yk.prototype.getRadius=Yk.prototype.Ri;Yk.prototype.getRadius2=Yk.prototype.Fh;Yk.prototype.getSize=Yk.prototype.ic;Yk.prototype.getStroke=Yk.prototype.Ga;t("ol.style.Stroke",wj);wj.prototype.clone=wj.prototype.clone;wj.prototype.getColor=wj.prototype.No;wj.prototype.getLineCap=wj.prototype.Vk;wj.prototype.getLineDash=wj.prototype.Oo;wj.prototype.getLineDashOffset=wj.prototype.Wk;wj.prototype.getLineJoin=wj.prototype.Xk;wj.prototype.getMiterLimit=wj.prototype.bl;wj.prototype.getWidth=wj.prototype.Po;wj.prototype.setColor=wj.prototype.Qo;wj.prototype.setLineCap=wj.prototype.aq;wj.prototype.setLineDash=wj.prototype.setLineDash;wj.prototype.setLineDashOffset=wj.prototype.bq;wj.prototype.setLineJoin=wj.prototype.cq;wj.prototype.setMiterLimit=wj.prototype.gq;wj.prototype.setWidth=wj.prototype.jq;t("ol.style.Style",bl);bl.prototype.clone=bl.prototype.clone;bl.prototype.getGeometry=bl.prototype.V;bl.prototype.getGeometryFunction=bl.prototype.Pk;bl.prototype.getFill=bl.prototype.Fa;bl.prototype.setFill=bl.prototype.pf;bl.prototype.getImage=bl.prototype.Y;bl.prototype.setImage=bl.prototype.Og;bl.prototype.getStroke=bl.prototype.Ga;bl.prototype.setStroke=bl.prototype.qf;bl.prototype.getText=bl.prototype.Na;bl.prototype.setText=bl.prototype.xd;bl.prototype.getZIndex=bl.prototype.Ba;bl.prototype.setGeometry=bl.prototype.Ra;bl.prototype.setZIndex=bl.prototype.Vb;t("ol.style.Text",fo);fo.prototype.clone=fo.prototype.clone;fo.prototype.getFont=fo.prototype.Nk;fo.prototype.getOffsetX=fo.prototype.cl;fo.prototype.getOffsetY=fo.prototype.dl;fo.prototype.getFill=fo.prototype.Fa;fo.prototype.getRotateWithView=fo.prototype.Ro;fo.prototype.getRotation=fo.prototype.So;fo.prototype.getScale=fo.prototype.To;fo.prototype.getStroke=fo.prototype.Ga;fo.prototype.getText=fo.prototype.Na;fo.prototype.getTextAlign=fo.prototype.nl;fo.prototype.getTextBaseline=fo.prototype.ol;fo.prototype.setFont=fo.prototype.nj;fo.prototype.setOffsetX=fo.prototype.sj;fo.prototype.setOffsetY=fo.prototype.tj;fo.prototype.setFill=fo.prototype.pf;fo.prototype.setRotation=fo.prototype.Uo;fo.prototype.setScale=fo.prototype.Si;fo.prototype.setStroke=fo.prototype.qf;fo.prototype.setText=fo.prototype.xd;fo.prototype.setTextAlign=fo.prototype.vj;fo.prototype.setTextBaseline=fo.prototype.hq;t("ol.source.BingMaps",xw);t("ol.source.BingMaps.TOS_ATTRIBUTION",yw);xw.prototype.getApiKey=xw.prototype.T;xw.prototype.getImagerySet=xw.prototype.fa;t("ol.source.CartoDB",Aw);Aw.prototype.getConfig=Aw.prototype.Kk;Aw.prototype.updateConfig=Aw.prototype.tq;Aw.prototype.setConfig=Aw.prototype.Xp;t("ol.source.Cluster",Y);Y.prototype.getDistance=Y.prototype.$n;Y.prototype.getSource=Y.prototype.ao;Y.prototype.setDistance=Y.prototype.Yp;t("ol.source.Image",Hv);Jv.prototype.image=Jv.prototype.image;t("ol.source.ImageArcGISRest",Gw);Gw.prototype.getParams=Gw.prototype.co;Gw.prototype.getImageLoadFunction=Gw.prototype.bo;Gw.prototype.getUrl=Gw.prototype.eo;Gw.prototype.setImageLoadFunction=Gw.prototype.fo;Gw.prototype.setUrl=Gw.prototype.ho;Gw.prototype.updateParams=Gw.prototype.io;t("ol.source.ImageCanvas",Ov);t("ol.source.ImageMapGuide",Hw);Hw.prototype.getParams=Hw.prototype.ko;Hw.prototype.getImageLoadFunction=Hw.prototype.jo;Hw.prototype.updateParams=Hw.prototype.mo;Hw.prototype.setImageLoadFunction=Hw.prototype.lo;t("ol.source.ImageStatic",Iw);t("ol.source.ImageVector",Pv);Pv.prototype.getSource=Pv.prototype.no;Pv.prototype.getStyle=Pv.prototype.oo;Pv.prototype.getStyleFunction=Pv.prototype.po;Pv.prototype.setStyle=Pv.prototype.Ii;t("ol.source.ImageWMS",Jw);Jw.prototype.getGetFeatureInfoUrl=Jw.prototype.so;Jw.prototype.getParams=Jw.prototype.uo;Jw.prototype.getImageLoadFunction=Jw.prototype.to;Jw.prototype.getUrl=Jw.prototype.vo;Jw.prototype.setImageLoadFunction=Jw.prototype.wo;Jw.prototype.setUrl=Jw.prototype.xo;Jw.prototype.updateParams=Jw.prototype.yo;t("ol.source.OSM",Nw);t("ol.source.OSM.ATTRIBUTION",Ow);t("ol.source.Raster",Pw);Pw.prototype.setOperation=Pw.prototype.v;Tw.prototype.extent=Tw.prototype.extent;Tw.prototype.resolution=Tw.prototype.resolution;Tw.prototype.data=Tw.prototype.data;t("ol.source.Source",$t);$t.prototype.getAttributions=$t.prototype.ya;$t.prototype.getLogo=$t.prototype.xa;$t.prototype.getProjection=$t.prototype.za;$t.prototype.getState=$t.prototype.getState;$t.prototype.refresh=$t.prototype.sa;$t.prototype.setAttributions=$t.prototype.ua;t("ol.source.Stamen",Ww);t("ol.source.Tile",pw);pw.prototype.getTileGrid=pw.prototype.ab;sw.prototype.tile=sw.prototype.tile;t("ol.source.TileArcGISRest",$w);$w.prototype.getParams=$w.prototype.C;$w.prototype.updateParams=$w.prototype.B;t("ol.source.TileDebug",bx);t("ol.source.TileImage",X);X.prototype.setRenderReprojectionEdges=X.prototype.Pb;X.prototype.setTileGridForProjection=X.prototype.Qb;t("ol.source.TileJSON",dx);dx.prototype.getTileJSON=dx.prototype.pl;t("ol.source.TileUTFGrid",ex);ex.prototype.getTemplate=ex.prototype.ml;ex.prototype.forDataAtCoordinateAndResolution=ex.prototype.zk;t("ol.source.TileWMS",ix);ix.prototype.getGetFeatureInfoUrl=ix.prototype.Fo;ix.prototype.getParams=ix.prototype.Go;ix.prototype.updateParams=ix.prototype.Ho;tw.prototype.getTileLoadFunction=tw.prototype.pb;tw.prototype.getTileUrlFunction=tw.prototype.qb;tw.prototype.getUrls=tw.prototype.rb;tw.prototype.setTileLoadFunction=tw.prototype.vb;tw.prototype.setTileUrlFunction=tw.prototype.cb;tw.prototype.setUrl=tw.prototype.jb;tw.prototype.setUrls=tw.prototype.eb;t("ol.source.Vector",U);U.prototype.addFeature=U.prototype.yb;U.prototype.addFeatures=U.prototype.cd;U.prototype.clear=U.prototype.clear;U.prototype.forEachFeature=U.prototype.sh;U.prototype.forEachFeatureInExtent=U.prototype.$b;U.prototype.forEachFeatureIntersectingExtent=U.prototype.th;U.prototype.getFeaturesCollection=U.prototype.Ah;U.prototype.getFeatures=U.prototype.Xe;U.prototype.getFeaturesAtCoordinate=U.prototype.zh;U.prototype.getFeaturesInExtent=U.prototype.Uf;U.prototype.getClosestFeatureToCoordinate=U.prototype.vh;U.prototype.getExtent=U.prototype.G;U.prototype.getFeatureById=U.prototype.yh;U.prototype.getFormat=U.prototype.Mi;U.prototype.getUrl=U.prototype.Ni;U.prototype.removeFeature=U.prototype.Gb;gu.prototype.feature=gu.prototype.feature;t("ol.source.VectorTile",qx);t("ol.source.WMTS",Z);Z.prototype.getDimensions=Z.prototype.Mk;Z.prototype.getFormat=Z.prototype.Io;Z.prototype.getLayer=Z.prototype.Jo;Z.prototype.getMatrixSet=Z.prototype.$k;Z.prototype.getRequestEncoding=Z.prototype.kl;Z.prototype.getStyle=Z.prototype.Ko;Z.prototype.getVersion=Z.prototype.rl;Z.prototype.updateDimensions=Z.prototype.uq;t("ol.source.WMTS.optionsFromCapabilities",function(a,b){var c=na(a.Contents.Layer,function(a){return a.Identifier==b.layer});if(null===c)return null;var d=a.Contents.TileMatrixSet;var e=1<c.TileMatrixSetLink.length?"projection"in b?sa(c.TileMatrixSetLink,function(a){var c=na(d,function(b){return b.Identifier==a.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"),e=Tb(c),f=Tb(b.projection);return e&&f?dc(e,f):c==b.projection}):sa(c.TileMatrixSetLink,function(a){return a.TileMatrixSet==b.matrixSet}):0;0>e&&(e=0);var f=c.TileMatrixSetLink[e].TileMatrixSet;var g=c.TileMatrixSetLink[e].TileMatrixSetLimits;var h=c.Format[0];"format"in b&&(h=b.format);e=sa(c.Style,function(a){return"style"in b?a.Title==b.style:a.isDefault});0>e&&(e=0);e=c.Style[e].Identifier;var l={};"Dimension"in c&&c.Dimension.forEach(function(a){var b=a.Identifier,c=a.Default;void 0===c&&(c=a.Value[0]);l[b]=c});var m=na(a.Contents.TileMatrixSet,function(a){return a.Identifier==f});var n="projection"in b?Tb(b.projection):Tb(m.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var p=c.WGS84BoundingBox;if(void 0!==p){var q=Tb("EPSG:4326").G();q=p[0]==q[0]&&p[2]==q[2];var r=hc(p,"EPSG:4326",n);(p=n.G())&&(Va(p,r)||(r=void 0))}g=sx(m,r,g);var u=[],m=b.requestEncoding,m=void 0!==m?m:"";if("OperationsMetadata"in a&&"GetTile"in a.OperationsMetadata)for(a=a.OperationsMetadata.GetTile.DCP.HTTP.Get,r=0,p=a.length;r<p;++r){var x=na(a[r].Constraint,function(a){return"GetEncoding"==a.name}).AllowedValues.Value;""===m&&(m=x[0]);if("KVP"===m)ja(x,"KVP")&&u.push(a[r].href);else break}u.length||(m="REST",c.ResourceURL.forEach(function(a){"tile"===a.resourceType&&(h=a.format,u.push(a.template))}));return{urls:u,layer:b.layer,matrixSet:f,format:h,projection:n,requestEncoding:m,tileGrid:g,style:e,dimensions:l,wrapX:q,crossOrigin:b.crossOrigin}});t("ol.source.XYZ",zw);t("ol.source.Zoomify",ux);Rh.prototype.vectorContext=Rh.prototype.vectorContext;Rh.prototype.frameState=Rh.prototype.frameState;Rh.prototype.context=Rh.prototype.context;Rh.prototype.glContext=Rh.prototype.glContext;kq.prototype.get=kq.prototype.get;kq.prototype.getExtent=kq.prototype.G;kq.prototype.getId=kq.prototype.Wn;kq.prototype.getGeometry=kq.prototype.V;kq.prototype.getProperties=kq.prototype.Xn;kq.prototype.getType=kq.prototype.U;t("ol.render.VectorContext",Wh);kk.prototype.setStyle=kk.prototype.rd;kk.prototype.drawGeometry=kk.prototype.zb;kk.prototype.drawFeature=kk.prototype.te;Xh.prototype.drawCircle=Xh.prototype.Zb;Xh.prototype.setStyle=Xh.prototype.rd;Xh.prototype.drawGeometry=Xh.prototype.zb;Xh.prototype.drawFeature=Xh.prototype.te;t("ol.proj.common.add",ic);t("ol.proj.Projection",Bb);Bb.prototype.getCode=Bb.prototype.Jk;Bb.prototype.getExtent=Bb.prototype.G;Bb.prototype.getUnits=Bb.prototype.Un;Bb.prototype.getMetersPerUnit=Bb.prototype.sc;Bb.prototype.getWorldExtent=Bb.prototype.tl;Bb.prototype.isGlobal=Bb.prototype.dm;Bb.prototype.setGlobal=Bb.prototype.$p;Bb.prototype.setExtent=Bb.prototype.Vn;Bb.prototype.setWorldExtent=Bb.prototype.kq;Bb.prototype.setGetPointResolution=Bb.prototype.Zp;t("ol.proj.Units.METERS_PER_UNIT",zb);t("ol.layer.Base",sh);sh.prototype.getExtent=sh.prototype.G;sh.prototype.getMaxResolution=sh.prototype.fc;sh.prototype.getMinResolution=sh.prototype.gc;sh.prototype.getOpacity=sh.prototype.hc;sh.prototype.getVisible=sh.prototype.Mb;sh.prototype.getZIndex=sh.prototype.Ba;sh.prototype.setExtent=sh.prototype.vc;sh.prototype.setMaxResolution=sh.prototype.Ac;sh.prototype.setMinResolution=sh.prototype.Bc;sh.prototype.setOpacity=sh.prototype.wc;sh.prototype.setVisible=sh.prototype.xc;sh.prototype.setZIndex=sh.prototype.Vb;t("ol.layer.Group",uh);uh.prototype.getLayers=uh.prototype.qd;uh.prototype.setLayers=uh.prototype.xi;t("ol.layer.Heatmap",V);V.prototype.getBlur=V.prototype.uh;V.prototype.getGradient=V.prototype.Bh;V.prototype.getRadius=V.prototype.yi;V.prototype.setBlur=V.prototype.jj;V.prototype.setGradient=V.prototype.pj;V.prototype.setRadius=V.prototype.Uc;t("ol.layer.Image",Uv);Uv.prototype.getSource=Uv.prototype.ha;t("ol.layer.Layer",wh);wh.prototype.getSource=wh.prototype.ha;wh.prototype.setMap=wh.prototype.setMap;wh.prototype.setSource=wh.prototype.Wc;t("ol.layer.Tile",cw);cw.prototype.getPreload=cw.prototype.Ud;cw.prototype.getSource=cw.prototype.ha;cw.prototype.setPreload=cw.prototype.zi;cw.prototype.getUseInterimTilesOnError=cw.prototype.kd;cw.prototype.setUseInterimTilesOnError=cw.prototype.Ai;t("ol.layer.Vector",T);T.prototype.getSource=T.prototype.ha;T.prototype.getStyle=T.prototype.D;T.prototype.getStyleFunction=T.prototype.C;T.prototype.setStyle=T.prototype.g;t("ol.layer.VectorTile",W);W.prototype.getPreload=W.prototype.Ud;W.prototype.getUseInterimTilesOnError=W.prototype.kd;W.prototype.setPreload=W.prototype.Bi;W.prototype.setUseInterimTilesOnError=W.prototype.Ci;t("ol.interaction.DoubleClickZoom",rg);t("ol.interaction.DoubleClickZoom.handleEvent",sg);t("ol.interaction.DragAndDrop",Rs);t("ol.interaction.DragAndDrop.handleEvent",mf);Us.prototype.features=Us.prototype.features;Us.prototype.file=Us.prototype.file;Us.prototype.projection=Us.prototype.projection;t("ol.interaction.DragBox",Rg);Rg.prototype.getGeometry=Rg.prototype.V;Wg.prototype.coordinate=Wg.prototype.coordinate;Wg.prototype.mapBrowserEvent=Wg.prototype.mapBrowserEvent;t("ol.interaction.DragPan",Gg);t("ol.interaction.DragRotate",Kg);t("ol.interaction.DragRotateAndZoom",Ys);t("ol.interaction.DragZoom",$g);t("ol.interaction.Draw",ju);t("ol.interaction.Draw.handleEvent",lu);ju.prototype.removeLastPoint=ju.prototype.Op;ju.prototype.finishDrawing=ju.prototype.Pd;ju.prototype.extend=ju.prototype.vn;t("ol.interaction.Draw.createRegularPolygon",function(a,b){return function(c,d){var e=c[0];c=c[1];var f=Math.sqrt(hf(e,c));d=d?d:Zf(new ys(e),a);$f(d,e,f,b?b:Math.atan((c[1]-e[1])/(c[0]-e[0])));return d}});t("ol.interaction.Draw.createBox",function(){return function(a,b){a=Na(a);b=b||new D(null);b.ma([[eb(a),gb(a),hb(a),ib(a),eb(a)]]);return b}});zu.prototype.feature=zu.prototype.feature;t("ol.interaction.Extent",Au);Au.prototype.getExtent=Au.prototype.G;Au.prototype.setExtent=Au.prototype.g;Lu.prototype.extent_=Lu.prototype.b;t("ol.interaction.Interaction",ng);ng.prototype.getActive=ng.prototype.c;ng.prototype.getMap=ng.prototype.f;ng.prototype.setActive=ng.prototype.Ha;t("ol.interaction.KeyboardPan",ah);t("ol.interaction.KeyboardPan.handleEvent",bh);t("ol.interaction.KeyboardZoom",ch);t("ol.interaction.KeyboardZoom.handleEvent",dh);t("ol.interaction.Modify",Nu);t("ol.interaction.Modify.handleEvent",Qu);Nu.prototype.removePoint=Nu.prototype.hj;Vu.prototype.features=Vu.prototype.features;Vu.prototype.mapBrowserEvent=Vu.prototype.mapBrowserEvent;t("ol.interaction.MouseWheelZoom",eh);t("ol.interaction.MouseWheelZoom.handleEvent",fh);eh.prototype.setMouseAnchor=eh.prototype.T;t("ol.interaction.PinchRotate",ih);t("ol.interaction.PinchZoom",mh);t("ol.interaction.Pointer",Dg);t("ol.interaction.Pointer.handleEvent",Eg);t("ol.interaction.Select",cv);cv.prototype.getFeatures=cv.prototype.Gn;cv.prototype.getHitTolerance=cv.prototype.Hn;cv.prototype.getLayer=cv.prototype.In;t("ol.interaction.Select.handleEvent",dv);cv.prototype.setHitTolerance=cv.prototype.Kn;cv.prototype.setMap=cv.prototype.setMap;fv.prototype.selected=fv.prototype.selected;fv.prototype.deselected=fv.prototype.deselected;fv.prototype.mapBrowserEvent=fv.prototype.mapBrowserEvent;t("ol.interaction.Snap",hv);hv.prototype.addFeature=hv.prototype.yb;hv.prototype.removeFeature=hv.prototype.Gb;t("ol.interaction.Translate",mv);mv.prototype.getHitTolerance=mv.prototype.B;mv.prototype.setHitTolerance=mv.prototype.I;sv.prototype.features=sv.prototype.features;sv.prototype.coordinate=sv.prototype.coordinate;t("ol.geom.Circle",ys);ys.prototype.clone=ys.prototype.clone;ys.prototype.getCenter=ys.prototype.wa;ys.prototype.getRadius=ys.prototype.pd;ys.prototype.getType=ys.prototype.U;ys.prototype.intersectsExtent=ys.prototype.Xa;ys.prototype.setCenter=ys.prototype.ob;ys.prototype.setCenterAndRadius=ys.prototype.Ng;ys.prototype.setRadius=ys.prototype.Uc;ys.prototype.transform=ys.prototype.tb;t("ol.geom.Geometry",of);of.prototype.getClosestPoint=of.prototype.Ab;of.prototype.intersectsCoordinate=of.prototype.sb;of.prototype.getExtent=of.prototype.G;of.prototype.rotate=of.prototype.rotate;of.prototype.scale=of.prototype.scale;of.prototype.simplify=of.prototype.Rb;of.prototype.transform=of.prototype.tb;t("ol.geom.GeometryCollection",tm);tm.prototype.clone=tm.prototype.clone;tm.prototype.getGeometries=tm.prototype.Vf;tm.prototype.getType=tm.prototype.U;tm.prototype.intersectsExtent=tm.prototype.Xa;tm.prototype.setGeometries=tm.prototype.oj;tm.prototype.applyTransform=tm.prototype.Dc;tm.prototype.translate=tm.prototype.translate;t("ol.geom.LinearRing",Jf);Jf.prototype.clone=Jf.prototype.clone;Jf.prototype.getArea=Jf.prototype.qn;Jf.prototype.getCoordinates=Jf.prototype.X;Jf.prototype.getType=Jf.prototype.U;Jf.prototype.setCoordinates=Jf.prototype.ma;t("ol.geom.LineString",O);O.prototype.appendCoordinate=O.prototype.mk;O.prototype.clone=O.prototype.clone;O.prototype.forEachSegment=O.prototype.Ck;O.prototype.getCoordinateAtM=O.prototype.nn;O.prototype.getCoordinates=O.prototype.X;O.prototype.getCoordinateAt=O.prototype.wh;O.prototype.getLength=O.prototype.pn;O.prototype.getType=O.prototype.U;O.prototype.intersectsExtent=O.prototype.Xa;O.prototype.setCoordinates=O.prototype.ma;t("ol.geom.MultiLineString",P);P.prototype.appendLineString=P.prototype.nk;P.prototype.clone=P.prototype.clone;P.prototype.getCoordinateAtM=P.prototype.rn;P.prototype.getCoordinates=P.prototype.X;P.prototype.getLineString=P.prototype.Yk;P.prototype.getLineStrings=P.prototype.gd;P.prototype.getType=P.prototype.U;P.prototype.intersectsExtent=P.prototype.Xa;P.prototype.setCoordinates=P.prototype.ma;t("ol.geom.MultiPoint",Q);Q.prototype.appendPoint=Q.prototype.qk;Q.prototype.clone=Q.prototype.clone;Q.prototype.getCoordinates=Q.prototype.X;Q.prototype.getPoint=Q.prototype.il;Q.prototype.getPoints=Q.prototype.Zd;Q.prototype.getType=Q.prototype.U;Q.prototype.intersectsExtent=Q.prototype.Xa;Q.prototype.setCoordinates=Q.prototype.ma;t("ol.geom.MultiPolygon",R);R.prototype.appendPolygon=R.prototype.rk;R.prototype.clone=R.prototype.clone;R.prototype.getArea=R.prototype.sn;R.prototype.getCoordinates=R.prototype.X;R.prototype.getInteriorPoints=R.prototype.Uk;R.prototype.getPolygon=R.prototype.jl;R.prototype.getPolygons=R.prototype.Td;R.prototype.getType=R.prototype.U;R.prototype.intersectsExtent=R.prototype.Xa;R.prototype.setCoordinates=R.prototype.ma;t("ol.geom.Point",C);C.prototype.clone=C.prototype.clone;C.prototype.getCoordinates=C.prototype.X;C.prototype.getType=C.prototype.U;C.prototype.intersectsExtent=C.prototype.Xa;C.prototype.setCoordinates=C.prototype.ma;t("ol.geom.Polygon",D);D.prototype.appendLinearRing=D.prototype.pk;D.prototype.clone=D.prototype.clone;D.prototype.getArea=D.prototype.tn;D.prototype.getCoordinates=D.prototype.X;D.prototype.getInteriorPoint=D.prototype.Tk;D.prototype.getLinearRingCount=D.prototype.Zk;D.prototype.getLinearRing=D.prototype.Ch;D.prototype.getLinearRings=D.prototype.Sd;D.prototype.getType=D.prototype.U;D.prototype.intersectsExtent=D.prototype.Xa;D.prototype.setCoordinates=D.prototype.ma;t("ol.geom.Polygon.circular",Xf);t("ol.geom.Polygon.fromExtent",Yf);t("ol.geom.Polygon.fromCircle",Zf);t("ol.geom.SimpleGeometry",rf);rf.prototype.getFirstCoordinate=rf.prototype.ac;rf.prototype.getLastCoordinate=rf.prototype.bc;rf.prototype.getLayout=rf.prototype.cc;rf.prototype.applyTransform=rf.prototype.Dc;rf.prototype.translate=rf.prototype.translate;t("ol.format.EsriJSON",Ql);Ql.prototype.readFeature=Ql.prototype.Tb;Ql.prototype.readFeatures=Ql.prototype.Oa;Ql.prototype.readGeometry=Ql.prototype.Sc;Ql.prototype.readProjection=Ql.prototype.kb;Ql.prototype.writeGeometry=Ql.prototype.$c;Ql.prototype.writeGeometryObject=Ql.prototype.je;Ql.prototype.writeFeature=Ql.prototype.Bd;Ql.prototype.writeFeatureObject=Ql.prototype.Zc;Ql.prototype.writeFeatures=Ql.prototype.Wb;Ql.prototype.writeFeaturesObject=Ql.prototype.he;t("ol.format.Feature",El);t("ol.format.filter.and",rm);t("ol.format.filter.or",function(a){var b=[null].concat(Array.prototype.slice.call(arguments));return new(Function.prototype.bind.apply(pm,b))});t("ol.format.filter.not",function(a){return new nm(a)});t("ol.format.filter.bbox",sm);t("ol.format.filter.intersects",function(a,b,c){return new hm(a,b,c)});t("ol.format.filter.within",function(a,b,c){return new qm(a,b,c)});t("ol.format.filter.equalTo",function(a,b,c){return new dm(a,b,c)});t("ol.format.filter.notEqualTo",function(a,b,c){return new om(a,b,c)});t("ol.format.filter.lessThan",function(a,b){return new lm(a,b)});t("ol.format.filter.lessThanOrEqualTo",function(a,b){return new mm(a,b)});t("ol.format.filter.greaterThan",function(a,b){return new em(a,b)});t("ol.format.filter.greaterThanOrEqualTo",function(a,b){return new fm(a,b)});t("ol.format.filter.isNull",function(a){return new km(a)});t("ol.format.filter.between",function(a,b,c){return new im(a,b,c)});t("ol.format.filter.like",function(a,b,c,d,e,f){return new jm(a,b,c,d,e,f)});t("ol.format.filter.during",function(a,b,c){return new bm(a,b,c)});t("ol.format.GeoJSON",xm);xm.prototype.readFeature=xm.prototype.Tb;xm.prototype.readFeatures=xm.prototype.Oa;xm.prototype.readGeometry=xm.prototype.Sc;xm.prototype.readProjection=xm.prototype.kb;xm.prototype.writeFeature=xm.prototype.Bd;xm.prototype.writeFeatureObject=xm.prototype.Zc;xm.prototype.writeFeatures=xm.prototype.Wb;xm.prototype.writeFeaturesObject=xm.prototype.he;xm.prototype.writeGeometry=xm.prototype.$c;xm.prototype.writeGeometryObject=xm.prototype.je;t("ol.format.GML",Sm);Sm.prototype.writeFeatures=Sm.prototype.Wb;Sm.prototype.writeFeaturesNode=Sm.prototype.Xb;t("ol.format.GML2",an);t("ol.format.GML3",Sm);Sm.prototype.writeGeometryNode=Sm.prototype.ie;Sm.prototype.writeFeatures=Sm.prototype.Wb;Sm.prototype.writeFeaturesNode=Sm.prototype.Xb;Fm.prototype.readFeatures=Fm.prototype.Oa;t("ol.format.GPX",mn);mn.prototype.readFeature=mn.prototype.Tb;mn.prototype.readFeatures=mn.prototype.Oa;mn.prototype.readProjection=mn.prototype.kb;mn.prototype.writeFeatures=mn.prototype.Wb;mn.prototype.writeFeaturesNode=mn.prototype.Xb;t("ol.format.IGC",Xn);Xn.prototype.readFeature=Xn.prototype.Tb;Xn.prototype.readFeatures=Xn.prototype.Oa;Xn.prototype.readProjection=Xn.prototype.kb;t("ol.format.KML",go);go.prototype.readFeature=go.prototype.Tb;go.prototype.readFeatures=go.prototype.Oa;go.prototype.readName=go.prototype.Cp;go.prototype.readNetworkLinks=go.prototype.Dp;go.prototype.readRegion=go.prototype.Gp;go.prototype.readRegionFromNode=go.prototype.lf;go.prototype.readProjection=go.prototype.kb;go.prototype.writeFeatures=go.prototype.Wb;go.prototype.writeFeaturesNode=go.prototype.Xb;t("ol.format.MVT",lq);lq.prototype.readFeatures=lq.prototype.Oa;lq.prototype.readProjection=lq.prototype.kb;lq.prototype.setLayers=lq.prototype.mn;t("ol.format.OSMXML",nq);nq.prototype.readFeatures=nq.prototype.Oa;nq.prototype.readProjection=nq.prototype.kb;t("ol.format.Polyline",Nq);t("ol.format.Polyline.encodeDeltas",Oq);t("ol.format.Polyline.decodeDeltas",Qq);t("ol.format.Polyline.encodeFloats",Pq);t("ol.format.Polyline.decodeFloats",Rq);Nq.prototype.readFeature=Nq.prototype.Tb;Nq.prototype.readFeatures=Nq.prototype.Oa;Nq.prototype.readGeometry=Nq.prototype.Sc;Nq.prototype.readProjection=Nq.prototype.kb;Nq.prototype.writeGeometry=Nq.prototype.$c;t("ol.format.TopoJSON",Sq);Sq.prototype.readFeatures=Sq.prototype.Oa;Sq.prototype.readProjection=Sq.prototype.kb;t("ol.format.WFS",Yq);Yq.prototype.readFeatures=Yq.prototype.Oa;Yq.prototype.readTransactionResponse=Yq.prototype.j;Yq.prototype.readFeatureCollectionMetadata=Yq.prototype.g;t("ol.format.WFS.writeFilter",function(a){var b=jl("http://www.opengis.net/ogc","Filter");Bl({node:b},mr,wl(a.kc),[a],[]);return b});Yq.prototype.writeGetFeature=Yq.prototype.l;Yq.prototype.writeTransaction=Yq.prototype.v;Yq.prototype.readProjection=Yq.prototype.kb;t("ol.format.WKT",sr);sr.prototype.readFeature=sr.prototype.Tb;sr.prototype.readFeatures=sr.prototype.Oa;sr.prototype.readGeometry=sr.prototype.Sc;sr.prototype.writeFeature=sr.prototype.Bd;sr.prototype.writeFeatures=sr.prototype.Wb;sr.prototype.writeGeometry=sr.prototype.$c;t("ol.format.WMSCapabilities",Lr);Lr.prototype.read=Lr.prototype.read;t("ol.format.WMSGetFeatureInfo",hs);hs.prototype.readFeatures=hs.prototype.Oa;t("ol.format.WMTSCapabilities",is);is.prototype.read=is.prototype.read;t("ol.format.filter.And",Zl);t("ol.format.filter.Bbox",$l);t("ol.format.filter.Comparison",am);t("ol.format.filter.ComparisonBinary",cm);t("ol.format.filter.During",bm);t("ol.format.filter.EqualTo",dm);t("ol.format.filter.Filter",Xl);t("ol.format.filter.GreaterThan",em);t("ol.format.filter.GreaterThanOrEqualTo",fm);t("ol.format.filter.Intersects",hm);t("ol.format.filter.IsBetween",im);t("ol.format.filter.IsLike",jm);t("ol.format.filter.IsNull",km);t("ol.format.filter.LessThan",lm);t("ol.format.filter.LessThanOrEqualTo",mm);t("ol.format.filter.Not",nm);t("ol.format.filter.NotEqualTo",om);t("ol.format.filter.Or",pm);t("ol.format.filter.Spatial",gm);t("ol.format.filter.Within",qm);t("ol.events.condition.altKeyOnly",function(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey});t("ol.events.condition.altShiftKeysOnly",tg);t("ol.events.condition.always",mf);t("ol.events.condition.click",function(a){return"click"==a.type});t("ol.events.condition.never",nf);t("ol.events.condition.pointerMove",vg);t("ol.events.condition.singleClick",wg);t("ol.events.condition.doubleClick",function(a){return"dblclick"==a.type});t("ol.events.condition.noModifierKeys",xg);t("ol.events.condition.platformModifierKeyOnly",function(a){a=a.originalEvent;return!a.altKey&&(Rd?a.metaKey:a.ctrlKey)&&!a.shiftKey});t("ol.events.condition.shiftKeyOnly",yg);t("ol.events.condition.targetNotEditable",Ag);t("ol.events.condition.mouseOnly",Bg);t("ol.events.condition.primaryAction",Cg);Oc.prototype.type=Oc.prototype.type;Oc.prototype.target=Oc.prototype.target;Oc.prototype.preventDefault=Oc.prototype.preventDefault;Oc.prototype.stopPropagation=Oc.prototype.stopPropagation;t("ol.control.Attribution",nd);t("ol.control.Attribution.render",od);nd.prototype.getCollapsible=nd.prototype.Um;nd.prototype.setCollapsible=nd.prototype.Xm;nd.prototype.setCollapsed=nd.prototype.Wm;nd.prototype.getCollapsed=nd.prototype.Tm;t("ol.control.Control",md);md.prototype.getMap=md.prototype.g;md.prototype.setMap=md.prototype.setMap;md.prototype.setTarget=md.prototype.f;t("ol.control.FullScreen",yd);t("ol.control.MousePosition",Dd);t("ol.control.MousePosition.render",Ed);Dd.prototype.getCoordinateFormat=Dd.prototype.xh;Dd.prototype.getProjection=Dd.prototype.Zh;Dd.prototype.setCoordinateFormat=Dd.prototype.kj;Dd.prototype.setProjection=Dd.prototype.$h;t("ol.control.OverviewMap",Bk);t("ol.control.OverviewMap.render",Ck);Bk.prototype.getCollapsible=Bk.prototype.$m;Bk.prototype.setCollapsible=Bk.prototype.cn;Bk.prototype.setCollapsed=Bk.prototype.bn;Bk.prototype.getCollapsed=Bk.prototype.Zm;Bk.prototype.getOverviewMap=Bk.prototype.gl;t("ol.control.Rotate",ud);t("ol.control.Rotate.render",vd);t("ol.control.ScaleLine",Gk);Gk.prototype.getUnits=Gk.prototype.C;t("ol.control.ScaleLine.render",Hk);Gk.prototype.setUnits=Gk.prototype.I;t("ol.control.Zoom",wd);t("ol.control.ZoomSlider",Lk);t("ol.control.ZoomSlider.render",Nk);t("ol.control.ZoomToExtent",Qk);Tc.prototype.changed=Tc.prototype.s;Tc.prototype.dispatchEvent=Tc.prototype.b;Tc.prototype.getRevision=Tc.prototype.L;Tc.prototype.on=Tc.prototype.J;Tc.prototype.once=Tc.prototype.once;Tc.prototype.un=Tc.prototype.K;Yc.prototype.get=Yc.prototype.get;Yc.prototype.getKeys=Yc.prototype.O;Yc.prototype.getProperties=Yc.prototype.N;Yc.prototype.set=Yc.prototype.set;Yc.prototype.setProperties=Yc.prototype.H;Yc.prototype.unset=Yc.prototype.P;Yc.prototype.changed=Yc.prototype.s;Yc.prototype.dispatchEvent=Yc.prototype.b;Yc.prototype.getRevision=Yc.prototype.L;Yc.prototype.on=Yc.prototype.J;Yc.prototype.once=Yc.prototype.once;Yc.prototype.un=Yc.prototype.K;bd.prototype.type=bd.prototype.type;bd.prototype.target=bd.prototype.target;bd.prototype.preventDefault=bd.prototype.preventDefault;bd.prototype.stopPropagation=bd.prototype.stopPropagation;Rk.prototype.get=Rk.prototype.get;Rk.prototype.getKeys=Rk.prototype.O;Rk.prototype.getProperties=Rk.prototype.N;Rk.prototype.set=Rk.prototype.set;Rk.prototype.setProperties=Rk.prototype.H;Rk.prototype.unset=Rk.prototype.P;Rk.prototype.changed=Rk.prototype.s;Rk.prototype.dispatchEvent=Rk.prototype.b;Rk.prototype.getRevision=Rk.prototype.L;Rk.prototype.on=Rk.prototype.J;Rk.prototype.once=Rk.prototype.once;Rk.prototype.un=Rk.prototype.K;H.prototype.get=H.prototype.get;H.prototype.getKeys=H.prototype.O;H.prototype.getProperties=H.prototype.N;H.prototype.set=H.prototype.set;H.prototype.setProperties=H.prototype.H;H.prototype.unset=H.prototype.P;H.prototype.changed=H.prototype.s;H.prototype.dispatchEvent=H.prototype.b;H.prototype.getRevision=H.prototype.L;H.prototype.on=H.prototype.J;H.prototype.once=H.prototype.once;H.prototype.un=H.prototype.K;xs.prototype.get=xs.prototype.get;xs.prototype.getKeys=xs.prototype.O;xs.prototype.getProperties=xs.prototype.N;xs.prototype.set=xs.prototype.set;xs.prototype.setProperties=xs.prototype.H;xs.prototype.unset=xs.prototype.P;xs.prototype.changed=xs.prototype.s;xs.prototype.dispatchEvent=xs.prototype.b;xs.prototype.getRevision=xs.prototype.L;xs.prototype.on=xs.prototype.J;xs.prototype.once=xs.prototype.once;xs.prototype.un=xs.prototype.K;Os.prototype.getTileCoord=Os.prototype.f;Os.prototype.load=Os.prototype.load;G.prototype.get=G.prototype.get;G.prototype.getKeys=G.prototype.O;G.prototype.getProperties=G.prototype.N;G.prototype.set=G.prototype.set;G.prototype.setProperties=G.prototype.H;G.prototype.unset=G.prototype.P;G.prototype.changed=G.prototype.s;G.prototype.dispatchEvent=G.prototype.b;G.prototype.getRevision=G.prototype.L;G.prototype.on=G.prototype.J;G.prototype.once=G.prototype.once;G.prototype.un=G.prototype.K;Id.prototype.type=Id.prototype.type;Id.prototype.target=Id.prototype.target;Id.prototype.preventDefault=Id.prototype.preventDefault;Id.prototype.stopPropagation=Id.prototype.stopPropagation;Jd.prototype.map=Jd.prototype.map;Jd.prototype.frameState=Jd.prototype.frameState;Jd.prototype.type=Jd.prototype.type;Jd.prototype.target=Jd.prototype.target;Jd.prototype.preventDefault=Jd.prototype.preventDefault;Jd.prototype.stopPropagation=Jd.prototype.stopPropagation;ee.prototype.originalEvent=ee.prototype.originalEvent;ee.prototype.pixel=ee.prototype.pixel;ee.prototype.coordinate=ee.prototype.coordinate;ee.prototype.dragging=ee.prototype.dragging;ee.prototype.preventDefault=ee.prototype.preventDefault;ee.prototype.stopPropagation=ee.prototype.stopPropagation;ee.prototype.map=ee.prototype.map;ee.prototype.frameState=ee.prototype.frameState;ee.prototype.type=ee.prototype.type;ee.prototype.target=ee.prototype.target;Xc.prototype.type=Xc.prototype.type;Xc.prototype.target=Xc.prototype.target;Xc.prototype.preventDefault=Xc.prototype.preventDefault;Xc.prototype.stopPropagation=Xc.prototype.stopPropagation;sk.prototype.get=sk.prototype.get;sk.prototype.getKeys=sk.prototype.O;sk.prototype.getProperties=sk.prototype.N;sk.prototype.set=sk.prototype.set;sk.prototype.setProperties=sk.prototype.H;sk.prototype.unset=sk.prototype.P;sk.prototype.changed=sk.prototype.s;sk.prototype.dispatchEvent=sk.prototype.b;sk.prototype.getRevision=sk.prototype.L;sk.prototype.on=sk.prototype.J;sk.prototype.once=sk.prototype.once;sk.prototype.un=sk.prototype.K;nx.prototype.getTileCoord=nx.prototype.f;nx.prototype.load=nx.prototype.load;px.prototype.getTileCoord=px.prototype.f;px.prototype.load=px.prototype.load;F.prototype.get=F.prototype.get;F.prototype.getKeys=F.prototype.O;F.prototype.getProperties=F.prototype.N;F.prototype.set=F.prototype.set;F.prototype.setProperties=F.prototype.H;F.prototype.unset=F.prototype.P;F.prototype.changed=F.prototype.s;F.prototype.dispatchEvent=F.prototype.b;F.prototype.getRevision=F.prototype.L;F.prototype.on=F.prototype.J;F.prototype.once=F.prototype.once;F.prototype.un=F.prototype.K;rx.prototype.forEachTileCoord=rx.prototype.Rf;rx.prototype.getMaxZoom=rx.prototype.Ti;rx.prototype.getMinZoom=rx.prototype.Ui;rx.prototype.getOrigin=rx.prototype.Pc;rx.prototype.getResolution=rx.prototype.Da;rx.prototype.getResolutions=rx.prototype.Vi;rx.prototype.getTileCoordExtent=rx.prototype.Aa;rx.prototype.getTileCoordForCoordAndResolution=rx.prototype.Be;rx.prototype.getTileCoordForCoordAndZ=rx.prototype.bg;rx.prototype.getTileSize=rx.prototype.gb;rx.prototype.getZForResolution=rx.prototype.tc;Yk.prototype.getOpacity=Yk.prototype.Ze;Yk.prototype.getRotateWithView=Yk.prototype.$e;Yk.prototype.getRotation=Yk.prototype.af;Yk.prototype.getScale=Yk.prototype.bf;Yk.prototype.getSnapToPixel=Yk.prototype.Ae;Yk.prototype.setOpacity=Yk.prototype.td;Yk.prototype.setRotation=Yk.prototype.cf;Yk.prototype.setScale=Yk.prototype.ud;$k.prototype.clone=$k.prototype.clone;$k.prototype.getAngle=$k.prototype.Pi;$k.prototype.getFill=$k.prototype.Fa;$k.prototype.getPoints=$k.prototype.Qi;$k.prototype.getRadius=$k.prototype.Ri;$k.prototype.getRadius2=$k.prototype.Fh;$k.prototype.getStroke=$k.prototype.Ga;$k.prototype.getOpacity=$k.prototype.Ze;$k.prototype.getRotateWithView=$k.prototype.$e;$k.prototype.getRotation=$k.prototype.af;$k.prototype.getScale=$k.prototype.bf;$k.prototype.getSnapToPixel=$k.prototype.Ae;$k.prototype.setOpacity=$k.prototype.td;$k.prototype.setRotation=$k.prototype.cf;$k.prototype.setScale=$k.prototype.ud;eo.prototype.getOpacity=eo.prototype.Ze;eo.prototype.getRotateWithView=eo.prototype.$e;eo.prototype.getRotation=eo.prototype.af;eo.prototype.getScale=eo.prototype.bf;eo.prototype.getSnapToPixel=eo.prototype.Ae;eo.prototype.setOpacity=eo.prototype.td;eo.prototype.setRotation=eo.prototype.cf;eo.prototype.setScale=eo.prototype.ud;$t.prototype.get=$t.prototype.get;$t.prototype.getKeys=$t.prototype.O;$t.prototype.getProperties=$t.prototype.N;$t.prototype.set=$t.prototype.set;$t.prototype.setProperties=$t.prototype.H;$t.prototype.unset=$t.prototype.P;$t.prototype.changed=$t.prototype.s;$t.prototype.dispatchEvent=$t.prototype.b;$t.prototype.getRevision=$t.prototype.L;$t.prototype.on=$t.prototype.J;$t.prototype.once=$t.prototype.once;$t.prototype.un=$t.prototype.K;pw.prototype.getAttributions=pw.prototype.ya;pw.prototype.getLogo=pw.prototype.xa;pw.prototype.getProjection=pw.prototype.za;pw.prototype.getState=pw.prototype.getState;pw.prototype.refresh=pw.prototype.sa;pw.prototype.setAttributions=pw.prototype.ua;pw.prototype.get=pw.prototype.get;pw.prototype.getKeys=pw.prototype.O;pw.prototype.getProperties=pw.prototype.N;pw.prototype.set=pw.prototype.set;pw.prototype.setProperties=pw.prototype.H;pw.prototype.unset=pw.prototype.P;pw.prototype.changed=pw.prototype.s;pw.prototype.dispatchEvent=pw.prototype.b;pw.prototype.getRevision=pw.prototype.L;pw.prototype.on=pw.prototype.J;pw.prototype.once=pw.prototype.once;pw.prototype.un=pw.prototype.K;tw.prototype.getTileGrid=tw.prototype.ab;tw.prototype.refresh=tw.prototype.sa;tw.prototype.getAttributions=tw.prototype.ya;tw.prototype.getLogo=tw.prototype.xa;tw.prototype.getProjection=tw.prototype.za;tw.prototype.getState=tw.prototype.getState;tw.prototype.setAttributions=tw.prototype.ua;tw.prototype.get=tw.prototype.get;tw.prototype.getKeys=tw.prototype.O;tw.prototype.getProperties=tw.prototype.N;tw.prototype.set=tw.prototype.set;tw.prototype.setProperties=tw.prototype.H;tw.prototype.unset=tw.prototype.P;tw.prototype.changed=tw.prototype.s;tw.prototype.dispatchEvent=tw.prototype.b;tw.prototype.getRevision=tw.prototype.L;tw.prototype.on=tw.prototype.J;tw.prototype.once=tw.prototype.once;tw.prototype.un=tw.prototype.K;X.prototype.getTileLoadFunction=X.prototype.pb;X.prototype.getTileUrlFunction=X.prototype.qb;X.prototype.getUrls=X.prototype.rb;X.prototype.setTileLoadFunction=X.prototype.vb;X.prototype.setTileUrlFunction=X.prototype.cb;X.prototype.setUrl=X.prototype.jb;X.prototype.setUrls=X.prototype.eb;X.prototype.getTileGrid=X.prototype.ab;X.prototype.refresh=X.prototype.sa;X.prototype.getAttributions=X.prototype.ya;X.prototype.getLogo=X.prototype.xa;X.prototype.getProjection=X.prototype.za;X.prototype.getState=X.prototype.getState;X.prototype.setAttributions=X.prototype.ua;X.prototype.get=X.prototype.get;X.prototype.getKeys=X.prototype.O;X.prototype.getProperties=X.prototype.N;X.prototype.set=X.prototype.set;X.prototype.setProperties=X.prototype.H;X.prototype.unset=X.prototype.P;X.prototype.changed=X.prototype.s;X.prototype.dispatchEvent=X.prototype.b;X.prototype.getRevision=X.prototype.L;X.prototype.on=X.prototype.J;X.prototype.once=X.prototype.once;X.prototype.un=X.prototype.K;xw.prototype.setRenderReprojectionEdges=xw.prototype.Pb;xw.prototype.setTileGridForProjection=xw.prototype.Qb;xw.prototype.getTileLoadFunction=xw.prototype.pb;xw.prototype.getTileUrlFunction=xw.prototype.qb;xw.prototype.getUrls=xw.prototype.rb;xw.prototype.setTileLoadFunction=xw.prototype.vb;xw.prototype.setTileUrlFunction=xw.prototype.cb;xw.prototype.setUrl=xw.prototype.jb;xw.prototype.setUrls=xw.prototype.eb;xw.prototype.getTileGrid=xw.prototype.ab;xw.prototype.refresh=xw.prototype.sa;xw.prototype.getAttributions=xw.prototype.ya;xw.prototype.getLogo=xw.prototype.xa;xw.prototype.getProjection=xw.prototype.za;xw.prototype.getState=xw.prototype.getState;xw.prototype.setAttributions=xw.prototype.ua;xw.prototype.get=xw.prototype.get;xw.prototype.getKeys=xw.prototype.O;xw.prototype.getProperties=xw.prototype.N;xw.prototype.set=xw.prototype.set;xw.prototype.setProperties=xw.prototype.H;xw.prototype.unset=xw.prototype.P;xw.prototype.changed=xw.prototype.s;xw.prototype.dispatchEvent=xw.prototype.b;xw.prototype.getRevision=xw.prototype.L;xw.prototype.on=xw.prototype.J;xw.prototype.once=xw.prototype.once;xw.prototype.un=xw.prototype.K;zw.prototype.setRenderReprojectionEdges=zw.prototype.Pb;zw.prototype.setTileGridForProjection=zw.prototype.Qb;zw.prototype.getTileLoadFunction=zw.prototype.pb;zw.prototype.getTileUrlFunction=zw.prototype.qb;zw.prototype.getUrls=zw.prototype.rb;zw.prototype.setTileLoadFunction=zw.prototype.vb;zw.prototype.setTileUrlFunction=zw.prototype.cb;zw.prototype.setUrl=zw.prototype.jb;zw.prototype.setUrls=zw.prototype.eb;zw.prototype.getTileGrid=zw.prototype.ab;zw.prototype.refresh=zw.prototype.sa;zw.prototype.getAttributions=zw.prototype.ya;zw.prototype.getLogo=zw.prototype.xa;zw.prototype.getProjection=zw.prototype.za;zw.prototype.getState=zw.prototype.getState;zw.prototype.setAttributions=zw.prototype.ua;zw.prototype.get=zw.prototype.get;zw.prototype.getKeys=zw.prototype.O;zw.prototype.getProperties=zw.prototype.N;zw.prototype.set=zw.prototype.set;zw.prototype.setProperties=zw.prototype.H;zw.prototype.unset=zw.prototype.P;zw.prototype.changed=zw.prototype.s;zw.prototype.dispatchEvent=zw.prototype.b;zw.prototype.getRevision=zw.prototype.L;zw.prototype.on=zw.prototype.J;zw.prototype.once=zw.prototype.once;zw.prototype.un=zw.prototype.K;Aw.prototype.setRenderReprojectionEdges=Aw.prototype.Pb;Aw.prototype.setTileGridForProjection=Aw.prototype.Qb;Aw.prototype.getTileLoadFunction=Aw.prototype.pb;Aw.prototype.getTileUrlFunction=Aw.prototype.qb;Aw.prototype.getUrls=Aw.prototype.rb;Aw.prototype.setTileLoadFunction=Aw.prototype.vb;Aw.prototype.setTileUrlFunction=Aw.prototype.cb;Aw.prototype.setUrl=Aw.prototype.jb;Aw.prototype.setUrls=Aw.prototype.eb;Aw.prototype.getTileGrid=Aw.prototype.ab;Aw.prototype.refresh=Aw.prototype.sa;Aw.prototype.getAttributions=Aw.prototype.ya;Aw.prototype.getLogo=Aw.prototype.xa;Aw.prototype.getProjection=Aw.prototype.za;Aw.prototype.getState=Aw.prototype.getState;Aw.prototype.setAttributions=Aw.prototype.ua;Aw.prototype.get=Aw.prototype.get;Aw.prototype.getKeys=Aw.prototype.O;Aw.prototype.getProperties=Aw.prototype.N;Aw.prototype.set=Aw.prototype.set;Aw.prototype.setProperties=Aw.prototype.H;Aw.prototype.unset=Aw.prototype.P;Aw.prototype.changed=Aw.prototype.s;Aw.prototype.dispatchEvent=Aw.prototype.b;Aw.prototype.getRevision=Aw.prototype.L;Aw.prototype.on=Aw.prototype.J;Aw.prototype.once=Aw.prototype.once;Aw.prototype.un=Aw.prototype.K;U.prototype.getAttributions=U.prototype.ya;U.prototype.getLogo=U.prototype.xa;U.prototype.getProjection=U.prototype.za;U.prototype.getState=U.prototype.getState;U.prototype.refresh=U.prototype.sa;U.prototype.setAttributions=U.prototype.ua;U.prototype.get=U.prototype.get;U.prototype.getKeys=U.prototype.O;U.prototype.getProperties=U.prototype.N;U.prototype.set=U.prototype.set;U.prototype.setProperties=U.prototype.H;U.prototype.unset=U.prototype.P;U.prototype.changed=U.prototype.s;U.prototype.dispatchEvent=U.prototype.b;U.prototype.getRevision=U.prototype.L;U.prototype.on=U.prototype.J;U.prototype.once=U.prototype.once;U.prototype.un=U.prototype.K;Y.prototype.addFeature=Y.prototype.yb;Y.prototype.addFeatures=Y.prototype.cd;Y.prototype.clear=Y.prototype.clear;Y.prototype.forEachFeature=Y.prototype.sh;Y.prototype.forEachFeatureInExtent=Y.prototype.$b;Y.prototype.forEachFeatureIntersectingExtent=Y.prototype.th;Y.prototype.getFeaturesCollection=Y.prototype.Ah;Y.prototype.getFeatures=Y.prototype.Xe;Y.prototype.getFeaturesAtCoordinate=Y.prototype.zh;Y.prototype.getFeaturesInExtent=Y.prototype.Uf;Y.prototype.getClosestFeatureToCoordinate=Y.prototype.vh;Y.prototype.getExtent=Y.prototype.G;Y.prototype.getFeatureById=Y.prototype.yh;Y.prototype.getFormat=Y.prototype.Mi;Y.prototype.getUrl=Y.prototype.Ni;Y.prototype.removeFeature=Y.prototype.Gb;Y.prototype.getAttributions=Y.prototype.ya;Y.prototype.getLogo=Y.prototype.xa;Y.prototype.getProjection=Y.prototype.za;Y.prototype.getState=Y.prototype.getState;Y.prototype.refresh=Y.prototype.sa;Y.prototype.setAttributions=Y.prototype.ua;Y.prototype.get=Y.prototype.get;Y.prototype.getKeys=Y.prototype.O;Y.prototype.getProperties=Y.prototype.N;Y.prototype.set=Y.prototype.set;Y.prototype.setProperties=Y.prototype.H;Y.prototype.unset=Y.prototype.P;Y.prototype.changed=Y.prototype.s;Y.prototype.dispatchEvent=Y.prototype.b;Y.prototype.getRevision=Y.prototype.L;Y.prototype.on=Y.prototype.J;Y.prototype.once=Y.prototype.once;Y.prototype.un=Y.prototype.K;Hv.prototype.getAttributions=Hv.prototype.ya;Hv.prototype.getLogo=Hv.prototype.xa;Hv.prototype.getProjection=Hv.prototype.za;Hv.prototype.getState=Hv.prototype.getState;Hv.prototype.refresh=Hv.prototype.sa;Hv.prototype.setAttributions=Hv.prototype.ua;Hv.prototype.get=Hv.prototype.get;Hv.prototype.getKeys=Hv.prototype.O;Hv.prototype.getProperties=Hv.prototype.N;Hv.prototype.set=Hv.prototype.set;Hv.prototype.setProperties=Hv.prototype.H;Hv.prototype.unset=Hv.prototype.P;Hv.prototype.changed=Hv.prototype.s;Hv.prototype.dispatchEvent=Hv.prototype.b;Hv.prototype.getRevision=Hv.prototype.L;Hv.prototype.on=Hv.prototype.J;Hv.prototype.once=Hv.prototype.once;Hv.prototype.un=Hv.prototype.K;Jv.prototype.type=Jv.prototype.type;Jv.prototype.target=Jv.prototype.target;Jv.prototype.preventDefault=Jv.prototype.preventDefault;Jv.prototype.stopPropagation=Jv.prototype.stopPropagation;Gw.prototype.getAttributions=Gw.prototype.ya;Gw.prototype.getLogo=Gw.prototype.xa;Gw.prototype.getProjection=Gw.prototype.za;Gw.prototype.getState=Gw.prototype.getState;Gw.prototype.refresh=Gw.prototype.sa;Gw.prototype.setAttributions=Gw.prototype.ua;Gw.prototype.get=Gw.prototype.get;Gw.prototype.getKeys=Gw.prototype.O;Gw.prototype.getProperties=Gw.prototype.N;Gw.prototype.set=Gw.prototype.set;Gw.prototype.setProperties=Gw.prototype.H;Gw.prototype.unset=Gw.prototype.P;Gw.prototype.changed=Gw.prototype.s;Gw.prototype.dispatchEvent=Gw.prototype.b;Gw.prototype.getRevision=Gw.prototype.L;Gw.prototype.on=Gw.prototype.J;Gw.prototype.once=Gw.prototype.once;Gw.prototype.un=Gw.prototype.K;Ov.prototype.getAttributions=Ov.prototype.ya;Ov.prototype.getLogo=Ov.prototype.xa;Ov.prototype.getProjection=Ov.prototype.za;Ov.prototype.getState=Ov.prototype.getState;Ov.prototype.refresh=Ov.prototype.sa;Ov.prototype.setAttributions=Ov.prototype.ua;Ov.prototype.get=Ov.prototype.get;Ov.prototype.getKeys=Ov.prototype.O;Ov.prototype.getProperties=Ov.prototype.N;Ov.prototype.set=Ov.prototype.set;Ov.prototype.setProperties=Ov.prototype.H;Ov.prototype.unset=Ov.prototype.P;Ov.prototype.changed=Ov.prototype.s;Ov.prototype.dispatchEvent=Ov.prototype.b;Ov.prototype.getRevision=Ov.prototype.L;Ov.prototype.on=Ov.prototype.J;Ov.prototype.once=Ov.prototype.once;Ov.prototype.un=Ov.prototype.K;Hw.prototype.getAttributions=Hw.prototype.ya;Hw.prototype.getLogo=Hw.prototype.xa;Hw.prototype.getProjection=Hw.prototype.za;Hw.prototype.getState=Hw.prototype.getState;Hw.prototype.refresh=Hw.prototype.sa;Hw.prototype.setAttributions=Hw.prototype.ua;Hw.prototype.get=Hw.prototype.get;Hw.prototype.getKeys=Hw.prototype.O;Hw.prototype.getProperties=Hw.prototype.N;Hw.prototype.set=Hw.prototype.set;Hw.prototype.setProperties=Hw.prototype.H;Hw.prototype.unset=Hw.prototype.P;Hw.prototype.changed=Hw.prototype.s;Hw.prototype.dispatchEvent=Hw.prototype.b;Hw.prototype.getRevision=Hw.prototype.L;Hw.prototype.on=Hw.prototype.J;Hw.prototype.once=Hw.prototype.once;Hw.prototype.un=Hw.prototype.K;Iw.prototype.getAttributions=Iw.prototype.ya;Iw.prototype.getLogo=Iw.prototype.xa;Iw.prototype.getProjection=Iw.prototype.za;Iw.prototype.getState=Iw.prototype.getState;Iw.prototype.refresh=Iw.prototype.sa;Iw.prototype.setAttributions=Iw.prototype.ua;Iw.prototype.get=Iw.prototype.get;Iw.prototype.getKeys=Iw.prototype.O;Iw.prototype.getProperties=Iw.prototype.N;Iw.prototype.set=Iw.prototype.set;Iw.prototype.setProperties=Iw.prototype.H;Iw.prototype.unset=Iw.prototype.P;Iw.prototype.changed=Iw.prototype.s;Iw.prototype.dispatchEvent=Iw.prototype.b;Iw.prototype.getRevision=Iw.prototype.L;Iw.prototype.on=Iw.prototype.J;Iw.prototype.once=Iw.prototype.once;Iw.prototype.un=Iw.prototype.K;Pv.prototype.getAttributions=Pv.prototype.ya;Pv.prototype.getLogo=Pv.prototype.xa;Pv.prototype.getProjection=Pv.prototype.za;Pv.prototype.getState=Pv.prototype.getState;Pv.prototype.refresh=Pv.prototype.sa;Pv.prototype.setAttributions=Pv.prototype.ua;Pv.prototype.get=Pv.prototype.get;Pv.prototype.getKeys=Pv.prototype.O;Pv.prototype.getProperties=Pv.prototype.N;Pv.prototype.set=Pv.prototype.set;Pv.prototype.setProperties=Pv.prototype.H;Pv.prototype.unset=Pv.prototype.P;Pv.prototype.changed=Pv.prototype.s;Pv.prototype.dispatchEvent=Pv.prototype.b;Pv.prototype.getRevision=Pv.prototype.L;Pv.prototype.on=Pv.prototype.J;Pv.prototype.once=Pv.prototype.once;Pv.prototype.un=Pv.prototype.K;Jw.prototype.getAttributions=Jw.prototype.ya;Jw.prototype.getLogo=Jw.prototype.xa;Jw.prototype.getProjection=Jw.prototype.za;Jw.prototype.getState=Jw.prototype.getState;Jw.prototype.refresh=Jw.prototype.sa;Jw.prototype.setAttributions=Jw.prototype.ua;Jw.prototype.get=Jw.prototype.get;Jw.prototype.getKeys=Jw.prototype.O;Jw.prototype.getProperties=Jw.prototype.N;Jw.prototype.set=Jw.prototype.set;Jw.prototype.setProperties=Jw.prototype.H;Jw.prototype.unset=Jw.prototype.P;Jw.prototype.changed=Jw.prototype.s;Jw.prototype.dispatchEvent=Jw.prototype.b;Jw.prototype.getRevision=Jw.prototype.L;Jw.prototype.on=Jw.prototype.J;Jw.prototype.once=Jw.prototype.once;Jw.prototype.un=Jw.prototype.K;Nw.prototype.setRenderReprojectionEdges=Nw.prototype.Pb;Nw.prototype.setTileGridForProjection=Nw.prototype.Qb;Nw.prototype.getTileLoadFunction=Nw.prototype.pb;Nw.prototype.getTileUrlFunction=Nw.prototype.qb;Nw.prototype.getUrls=Nw.prototype.rb;Nw.prototype.setTileLoadFunction=Nw.prototype.vb;Nw.prototype.setTileUrlFunction=Nw.prototype.cb;Nw.prototype.setUrl=Nw.prototype.jb;Nw.prototype.setUrls=Nw.prototype.eb;Nw.prototype.getTileGrid=Nw.prototype.ab;Nw.prototype.refresh=Nw.prototype.sa;Nw.prototype.getAttributions=Nw.prototype.ya;Nw.prototype.getLogo=Nw.prototype.xa;Nw.prototype.getProjection=Nw.prototype.za;Nw.prototype.getState=Nw.prototype.getState;Nw.prototype.setAttributions=Nw.prototype.ua;Nw.prototype.get=Nw.prototype.get;Nw.prototype.getKeys=Nw.prototype.O;Nw.prototype.getProperties=Nw.prototype.N;Nw.prototype.set=Nw.prototype.set;Nw.prototype.setProperties=Nw.prototype.H;Nw.prototype.unset=Nw.prototype.P;Nw.prototype.changed=Nw.prototype.s;Nw.prototype.dispatchEvent=Nw.prototype.b;Nw.prototype.getRevision=Nw.prototype.L;Nw.prototype.on=Nw.prototype.J;Nw.prototype.once=Nw.prototype.once;Nw.prototype.un=Nw.prototype.K;Pw.prototype.getAttributions=Pw.prototype.ya;Pw.prototype.getLogo=Pw.prototype.xa;Pw.prototype.getProjection=Pw.prototype.za;Pw.prototype.getState=Pw.prototype.getState;Pw.prototype.refresh=Pw.prototype.sa;Pw.prototype.setAttributions=Pw.prototype.ua;Pw.prototype.get=Pw.prototype.get;Pw.prototype.getKeys=Pw.prototype.O;Pw.prototype.getProperties=Pw.prototype.N;Pw.prototype.set=Pw.prototype.set;Pw.prototype.setProperties=Pw.prototype.H;Pw.prototype.unset=Pw.prototype.P;Pw.prototype.changed=Pw.prototype.s;Pw.prototype.dispatchEvent=Pw.prototype.b;Pw.prototype.getRevision=Pw.prototype.L;Pw.prototype.on=Pw.prototype.J;Pw.prototype.once=Pw.prototype.once;Pw.prototype.un=Pw.prototype.K;Tw.prototype.type=Tw.prototype.type;Tw.prototype.target=Tw.prototype.target;Tw.prototype.preventDefault=Tw.prototype.preventDefault;Tw.prototype.stopPropagation=Tw.prototype.stopPropagation;Ww.prototype.setRenderReprojectionEdges=Ww.prototype.Pb;Ww.prototype.setTileGridForProjection=Ww.prototype.Qb;Ww.prototype.getTileLoadFunction=Ww.prototype.pb;Ww.prototype.getTileUrlFunction=Ww.prototype.qb;Ww.prototype.getUrls=Ww.prototype.rb;Ww.prototype.setTileLoadFunction=Ww.prototype.vb;Ww.prototype.setTileUrlFunction=Ww.prototype.cb;Ww.prototype.setUrl=Ww.prototype.jb;Ww.prototype.setUrls=Ww.prototype.eb;Ww.prototype.getTileGrid=Ww.prototype.ab;Ww.prototype.refresh=Ww.prototype.sa;Ww.prototype.getAttributions=Ww.prototype.ya;Ww.prototype.getLogo=Ww.prototype.xa;Ww.prototype.getProjection=Ww.prototype.za;Ww.prototype.getState=Ww.prototype.getState;Ww.prototype.setAttributions=Ww.prototype.ua;Ww.prototype.get=Ww.prototype.get;Ww.prototype.getKeys=Ww.prototype.O;Ww.prototype.getProperties=Ww.prototype.N;Ww.prototype.set=Ww.prototype.set;Ww.prototype.setProperties=Ww.prototype.H;Ww.prototype.unset=Ww.prototype.P;Ww.prototype.changed=Ww.prototype.s;Ww.prototype.dispatchEvent=Ww.prototype.b;Ww.prototype.getRevision=Ww.prototype.L;Ww.prototype.on=Ww.prototype.J;Ww.prototype.once=Ww.prototype.once;Ww.prototype.un=Ww.prototype.K;sw.prototype.type=sw.prototype.type;sw.prototype.target=sw.prototype.target;sw.prototype.preventDefault=sw.prototype.preventDefault;sw.prototype.stopPropagation=sw.prototype.stopPropagation;$w.prototype.setRenderReprojectionEdges=$w.prototype.Pb;$w.prototype.setTileGridForProjection=$w.prototype.Qb;$w.prototype.getTileLoadFunction=$w.prototype.pb;$w.prototype.getTileUrlFunction=$w.prototype.qb;$w.prototype.getUrls=$w.prototype.rb;$w.prototype.setTileLoadFunction=$w.prototype.vb;$w.prototype.setTileUrlFunction=$w.prototype.cb;$w.prototype.setUrl=$w.prototype.jb;$w.prototype.setUrls=$w.prototype.eb;$w.prototype.getTileGrid=$w.prototype.ab;$w.prototype.refresh=$w.prototype.sa;$w.prototype.getAttributions=$w.prototype.ya;$w.prototype.getLogo=$w.prototype.xa;$w.prototype.getProjection=$w.prototype.za;$w.prototype.getState=$w.prototype.getState;$w.prototype.setAttributions=$w.prototype.ua;$w.prototype.get=$w.prototype.get;$w.prototype.getKeys=$w.prototype.O;$w.prototype.getProperties=$w.prototype.N;$w.prototype.set=$w.prototype.set;$w.prototype.setProperties=$w.prototype.H;$w.prototype.unset=$w.prototype.P;$w.prototype.changed=$w.prototype.s;$w.prototype.dispatchEvent=$w.prototype.b;$w.prototype.getRevision=$w.prototype.L;$w.prototype.on=$w.prototype.J;$w.prototype.once=$w.prototype.once;$w.prototype.un=$w.prototype.K;bx.prototype.getTileGrid=bx.prototype.ab;bx.prototype.refresh=bx.prototype.sa;bx.prototype.getAttributions=bx.prototype.ya;bx.prototype.getLogo=bx.prototype.xa;bx.prototype.getProjection=bx.prototype.za;bx.prototype.getState=bx.prototype.getState;bx.prototype.setAttributions=bx.prototype.ua;bx.prototype.get=bx.prototype.get;bx.prototype.getKeys=bx.prototype.O;bx.prototype.getProperties=bx.prototype.N;bx.prototype.set=bx.prototype.set;bx.prototype.setProperties=bx.prototype.H;bx.prototype.unset=bx.prototype.P;bx.prototype.changed=bx.prototype.s;bx.prototype.dispatchEvent=bx.prototype.b;bx.prototype.getRevision=bx.prototype.L;bx.prototype.on=bx.prototype.J;bx.prototype.once=bx.prototype.once;bx.prototype.un=bx.prototype.K;dx.prototype.setRenderReprojectionEdges=dx.prototype.Pb;dx.prototype.setTileGridForProjection=dx.prototype.Qb;dx.prototype.getTileLoadFunction=dx.prototype.pb;dx.prototype.getTileUrlFunction=dx.prototype.qb;dx.prototype.getUrls=dx.prototype.rb;dx.prototype.setTileLoadFunction=dx.prototype.vb;dx.prototype.setTileUrlFunction=dx.prototype.cb;dx.prototype.setUrl=dx.prototype.jb;dx.prototype.setUrls=dx.prototype.eb;dx.prototype.getTileGrid=dx.prototype.ab;dx.prototype.refresh=dx.prototype.sa;dx.prototype.getAttributions=dx.prototype.ya;dx.prototype.getLogo=dx.prototype.xa;dx.prototype.getProjection=dx.prototype.za;dx.prototype.getState=dx.prototype.getState;dx.prototype.setAttributions=dx.prototype.ua;dx.prototype.get=dx.prototype.get;dx.prototype.getKeys=dx.prototype.O;dx.prototype.getProperties=dx.prototype.N;dx.prototype.set=dx.prototype.set;dx.prototype.setProperties=dx.prototype.H;dx.prototype.unset=dx.prototype.P;dx.prototype.changed=dx.prototype.s;dx.prototype.dispatchEvent=dx.prototype.b;dx.prototype.getRevision=dx.prototype.L;dx.prototype.on=dx.prototype.J;dx.prototype.once=dx.prototype.once;dx.prototype.un=dx.prototype.K;ex.prototype.getTileGrid=ex.prototype.ab;ex.prototype.refresh=ex.prototype.sa;ex.prototype.getAttributions=ex.prototype.ya;ex.prototype.getLogo=ex.prototype.xa;ex.prototype.getProjection=ex.prototype.za;ex.prototype.getState=ex.prototype.getState;ex.prototype.setAttributions=ex.prototype.ua;ex.prototype.get=ex.prototype.get;ex.prototype.getKeys=ex.prototype.O;ex.prototype.getProperties=ex.prototype.N;ex.prototype.set=ex.prototype.set;ex.prototype.setProperties=ex.prototype.H;ex.prototype.unset=ex.prototype.P;ex.prototype.changed=ex.prototype.s;ex.prototype.dispatchEvent=ex.prototype.b;ex.prototype.getRevision=ex.prototype.L;ex.prototype.on=ex.prototype.J;ex.prototype.once=ex.prototype.once;ex.prototype.un=ex.prototype.K;ix.prototype.setRenderReprojectionEdges=ix.prototype.Pb;ix.prototype.setTileGridForProjection=ix.prototype.Qb;ix.prototype.getTileLoadFunction=ix.prototype.pb;ix.prototype.getTileUrlFunction=ix.prototype.qb;ix.prototype.getUrls=ix.prototype.rb;ix.prototype.setTileLoadFunction=ix.prototype.vb;ix.prototype.setTileUrlFunction=ix.prototype.cb;ix.prototype.setUrl=ix.prototype.jb;ix.prototype.setUrls=ix.prototype.eb;ix.prototype.getTileGrid=ix.prototype.ab;ix.prototype.refresh=ix.prototype.sa;ix.prototype.getAttributions=ix.prototype.ya;ix.prototype.getLogo=ix.prototype.xa;ix.prototype.getProjection=ix.prototype.za;ix.prototype.getState=ix.prototype.getState;ix.prototype.setAttributions=ix.prototype.ua;ix.prototype.get=ix.prototype.get;ix.prototype.getKeys=ix.prototype.O;ix.prototype.getProperties=ix.prototype.N;ix.prototype.set=ix.prototype.set;ix.prototype.setProperties=ix.prototype.H;ix.prototype.unset=ix.prototype.P;ix.prototype.changed=ix.prototype.s;ix.prototype.dispatchEvent=ix.prototype.b;ix.prototype.getRevision=ix.prototype.L;ix.prototype.on=ix.prototype.J;ix.prototype.once=ix.prototype.once;ix.prototype.un=ix.prototype.K;gu.prototype.type=gu.prototype.type;gu.prototype.target=gu.prototype.target;gu.prototype.preventDefault=gu.prototype.preventDefault;gu.prototype.stopPropagation=gu.prototype.stopPropagation;qx.prototype.getTileLoadFunction=qx.prototype.pb;qx.prototype.getTileUrlFunction=qx.prototype.qb;qx.prototype.getUrls=qx.prototype.rb;qx.prototype.setTileLoadFunction=qx.prototype.vb;qx.prototype.setTileUrlFunction=qx.prototype.cb;qx.prototype.setUrl=qx.prototype.jb;qx.prototype.setUrls=qx.prototype.eb;qx.prototype.getTileGrid=qx.prototype.ab;qx.prototype.refresh=qx.prototype.sa;qx.prototype.getAttributions=qx.prototype.ya;qx.prototype.getLogo=qx.prototype.xa;qx.prototype.getProjection=qx.prototype.za;qx.prototype.getState=qx.prototype.getState;qx.prototype.setAttributions=qx.prototype.ua;qx.prototype.get=qx.prototype.get;qx.prototype.getKeys=qx.prototype.O;qx.prototype.getProperties=qx.prototype.N;qx.prototype.set=qx.prototype.set;qx.prototype.setProperties=qx.prototype.H;qx.prototype.unset=qx.prototype.P;qx.prototype.changed=qx.prototype.s;qx.prototype.dispatchEvent=qx.prototype.b;qx.prototype.getRevision=qx.prototype.L;qx.prototype.on=qx.prototype.J;qx.prototype.once=qx.prototype.once;qx.prototype.un=qx.prototype.K;Z.prototype.setRenderReprojectionEdges=Z.prototype.Pb;Z.prototype.setTileGridForProjection=Z.prototype.Qb;Z.prototype.getTileLoadFunction=Z.prototype.pb;Z.prototype.getTileUrlFunction=Z.prototype.qb;Z.prototype.getUrls=Z.prototype.rb;Z.prototype.setTileLoadFunction=Z.prototype.vb;Z.prototype.setTileUrlFunction=Z.prototype.cb;Z.prototype.setUrl=Z.prototype.jb;Z.prototype.setUrls=Z.prototype.eb;Z.prototype.getTileGrid=Z.prototype.ab;Z.prototype.refresh=Z.prototype.sa;Z.prototype.getAttributions=Z.prototype.ya;Z.prototype.getLogo=Z.prototype.xa;Z.prototype.getProjection=Z.prototype.za;Z.prototype.getState=Z.prototype.getState;Z.prototype.setAttributions=Z.prototype.ua;Z.prototype.get=Z.prototype.get;Z.prototype.getKeys=Z.prototype.O;Z.prototype.getProperties=Z.prototype.N;Z.prototype.set=Z.prototype.set;Z.prototype.setProperties=Z.prototype.H;Z.prototype.unset=Z.prototype.P;Z.prototype.changed=Z.prototype.s;Z.prototype.dispatchEvent=Z.prototype.b;Z.prototype.getRevision=Z.prototype.L;Z.prototype.on=Z.prototype.J;Z.prototype.once=Z.prototype.once;Z.prototype.un=Z.prototype.K;ux.prototype.setRenderReprojectionEdges=ux.prototype.Pb;ux.prototype.setTileGridForProjection=ux.prototype.Qb;ux.prototype.getTileLoadFunction=ux.prototype.pb;ux.prototype.getTileUrlFunction=ux.prototype.qb;ux.prototype.getUrls=ux.prototype.rb;ux.prototype.setTileLoadFunction=ux.prototype.vb;ux.prototype.setTileUrlFunction=ux.prototype.cb;ux.prototype.setUrl=ux.prototype.jb;ux.prototype.setUrls=ux.prototype.eb;ux.prototype.getTileGrid=ux.prototype.ab;ux.prototype.refresh=ux.prototype.sa;ux.prototype.getAttributions=ux.prototype.ya;ux.prototype.getLogo=ux.prototype.xa;ux.prototype.getProjection=ux.prototype.za;ux.prototype.getState=ux.prototype.getState;ux.prototype.setAttributions=ux.prototype.ua;ux.prototype.get=ux.prototype.get;ux.prototype.getKeys=ux.prototype.O;ux.prototype.getProperties=ux.prototype.N;ux.prototype.set=ux.prototype.set;ux.prototype.setProperties=ux.prototype.H;ux.prototype.unset=ux.prototype.P;ux.prototype.changed=ux.prototype.s;ux.prototype.dispatchEvent=ux.prototype.b;ux.prototype.getRevision=ux.prototype.L;ux.prototype.on=ux.prototype.J;ux.prototype.once=ux.prototype.once;ux.prototype.un=ux.prototype.K;hw.prototype.getTileCoord=hw.prototype.f;hw.prototype.load=hw.prototype.load;xt.prototype.changed=xt.prototype.s;xt.prototype.dispatchEvent=xt.prototype.b;xt.prototype.getRevision=xt.prototype.L;xt.prototype.on=xt.prototype.J;xt.prototype.once=xt.prototype.once;xt.prototype.un=xt.prototype.K;Vt.prototype.changed=Vt.prototype.s;Vt.prototype.dispatchEvent=Vt.prototype.b;Vt.prototype.getRevision=Vt.prototype.L;Vt.prototype.on=Vt.prototype.J;Vt.prototype.once=Vt.prototype.once;Vt.prototype.un=Vt.prototype.K;Rv.prototype.changed=Rv.prototype.s;Rv.prototype.dispatchEvent=Rv.prototype.b;Rv.prototype.getRevision=Rv.prototype.L;Rv.prototype.on=Rv.prototype.J;Rv.prototype.once=Rv.prototype.once;Rv.prototype.un=Rv.prototype.K;bw.prototype.changed=bw.prototype.s;bw.prototype.dispatchEvent=bw.prototype.b;bw.prototype.getRevision=bw.prototype.L;bw.prototype.on=bw.prototype.J;bw.prototype.once=bw.prototype.once;bw.prototype.un=bw.prototype.K;Yt.prototype.changed=Yt.prototype.s;Yt.prototype.dispatchEvent=Yt.prototype.b;Yt.prototype.getRevision=Yt.prototype.L;Yt.prototype.on=Yt.prototype.J;Yt.prototype.once=Yt.prototype.once;Yt.prototype.un=Yt.prototype.K;Gt.prototype.changed=Gt.prototype.s;Gt.prototype.dispatchEvent=Gt.prototype.b;Gt.prototype.getRevision=Gt.prototype.L;Gt.prototype.on=Gt.prototype.J;Gt.prototype.once=Gt.prototype.once;Gt.prototype.un=Gt.prototype.K;yv.prototype.changed=yv.prototype.s;yv.prototype.dispatchEvent=yv.prototype.b;yv.prototype.getRevision=yv.prototype.L;yv.prototype.on=yv.prototype.J;yv.prototype.once=yv.prototype.once;yv.prototype.un=yv.prototype.K;zv.prototype.changed=zv.prototype.s;zv.prototype.dispatchEvent=zv.prototype.b;zv.prototype.getRevision=zv.prototype.L;zv.prototype.on=zv.prototype.J;zv.prototype.once=zv.prototype.once;zv.prototype.un=zv.prototype.K;Vv.prototype.changed=Vv.prototype.s;Vv.prototype.dispatchEvent=Vv.prototype.b;Vv.prototype.getRevision=Vv.prototype.L;Vv.prototype.on=Vv.prototype.J;Vv.prototype.once=Vv.prototype.once;Vv.prototype.un=Vv.prototype.K;Ot.prototype.changed=Ot.prototype.s;Ot.prototype.dispatchEvent=Ot.prototype.b;Ot.prototype.getRevision=Ot.prototype.L;Ot.prototype.on=Ot.prototype.J;Ot.prototype.once=Ot.prototype.once;Ot.prototype.un=Ot.prototype.K;dw.prototype.changed=dw.prototype.s;dw.prototype.dispatchEvent=dw.prototype.b;dw.prototype.getRevision=dw.prototype.L;dw.prototype.on=dw.prototype.J;dw.prototype.once=dw.prototype.once;dw.prototype.un=dw.prototype.K;Rh.prototype.type=Rh.prototype.type;Rh.prototype.target=Rh.prototype.target;Rh.prototype.preventDefault=Rh.prototype.preventDefault;Rh.prototype.stopPropagation=Rh.prototype.stopPropagation;pe.prototype.type=pe.prototype.type;pe.prototype.target=pe.prototype.target;pe.prototype.preventDefault=pe.prototype.preventDefault;pe.prototype.stopPropagation=pe.prototype.stopPropagation;sh.prototype.get=sh.prototype.get;sh.prototype.getKeys=sh.prototype.O;sh.prototype.getProperties=sh.prototype.N;sh.prototype.set=sh.prototype.set;sh.prototype.setProperties=sh.prototype.H;sh.prototype.unset=sh.prototype.P;sh.prototype.changed=sh.prototype.s;sh.prototype.dispatchEvent=sh.prototype.b;sh.prototype.getRevision=sh.prototype.L;sh.prototype.on=sh.prototype.J;sh.prototype.once=sh.prototype.once;sh.prototype.un=sh.prototype.K;uh.prototype.getExtent=uh.prototype.G;uh.prototype.getMaxResolution=uh.prototype.fc;uh.prototype.getMinResolution=uh.prototype.gc;uh.prototype.getOpacity=uh.prototype.hc;uh.prototype.getVisible=uh.prototype.Mb;uh.prototype.getZIndex=uh.prototype.Ba;uh.prototype.setExtent=uh.prototype.vc;uh.prototype.setMaxResolution=uh.prototype.Ac;uh.prototype.setMinResolution=uh.prototype.Bc;uh.prototype.setOpacity=uh.prototype.wc;uh.prototype.setVisible=uh.prototype.xc;uh.prototype.setZIndex=uh.prototype.Vb;uh.prototype.get=uh.prototype.get;uh.prototype.getKeys=uh.prototype.O;uh.prototype.getProperties=uh.prototype.N;uh.prototype.set=uh.prototype.set;uh.prototype.setProperties=uh.prototype.H;uh.prototype.unset=uh.prototype.P;uh.prototype.changed=uh.prototype.s;uh.prototype.dispatchEvent=uh.prototype.b;uh.prototype.getRevision=uh.prototype.L;uh.prototype.on=uh.prototype.J;uh.prototype.once=uh.prototype.once;uh.prototype.un=uh.prototype.K;wh.prototype.getExtent=wh.prototype.G;wh.prototype.getMaxResolution=wh.prototype.fc;wh.prototype.getMinResolution=wh.prototype.gc;wh.prototype.getOpacity=wh.prototype.hc;wh.prototype.getVisible=wh.prototype.Mb;wh.prototype.getZIndex=wh.prototype.Ba;wh.prototype.setExtent=wh.prototype.vc;wh.prototype.setMaxResolution=wh.prototype.Ac;wh.prototype.setMinResolution=wh.prototype.Bc;wh.prototype.setOpacity=wh.prototype.wc;wh.prototype.setVisible=wh.prototype.xc;wh.prototype.setZIndex=wh.prototype.Vb;wh.prototype.get=wh.prototype.get;wh.prototype.getKeys=wh.prototype.O;wh.prototype.getProperties=wh.prototype.N;wh.prototype.set=wh.prototype.set;wh.prototype.setProperties=wh.prototype.H;wh.prototype.unset=wh.prototype.P;wh.prototype.changed=wh.prototype.s;wh.prototype.dispatchEvent=wh.prototype.b;wh.prototype.getRevision=wh.prototype.L;wh.prototype.on=wh.prototype.J;wh.prototype.once=wh.prototype.once;wh.prototype.un=wh.prototype.K;T.prototype.setMap=T.prototype.setMap;T.prototype.setSource=T.prototype.Wc;T.prototype.getExtent=T.prototype.G;T.prototype.getMaxResolution=T.prototype.fc;T.prototype.getMinResolution=T.prototype.gc;T.prototype.getOpacity=T.prototype.hc;T.prototype.getVisible=T.prototype.Mb;T.prototype.getZIndex=T.prototype.Ba;T.prototype.setExtent=T.prototype.vc;T.prototype.setMaxResolution=T.prototype.Ac;T.prototype.setMinResolution=T.prototype.Bc;T.prototype.setOpacity=T.prototype.wc;T.prototype.setVisible=T.prototype.xc;T.prototype.setZIndex=T.prototype.Vb;T.prototype.get=T.prototype.get;T.prototype.getKeys=T.prototype.O;T.prototype.getProperties=T.prototype.N;T.prototype.set=T.prototype.set;T.prototype.setProperties=T.prototype.H;T.prototype.unset=T.prototype.P;T.prototype.changed=T.prototype.s;T.prototype.dispatchEvent=T.prototype.b;T.prototype.getRevision=T.prototype.L;T.prototype.on=T.prototype.J;T.prototype.once=T.prototype.once;T.prototype.un=T.prototype.K;V.prototype.getSource=V.prototype.ha;V.prototype.getStyle=V.prototype.D;V.prototype.getStyleFunction=V.prototype.C;V.prototype.setStyle=V.prototype.g;V.prototype.setMap=V.prototype.setMap;V.prototype.setSource=V.prototype.Wc;V.prototype.getExtent=V.prototype.G;V.prototype.getMaxResolution=V.prototype.fc;V.prototype.getMinResolution=V.prototype.gc;V.prototype.getOpacity=V.prototype.hc;V.prototype.getVisible=V.prototype.Mb;V.prototype.getZIndex=V.prototype.Ba;V.prototype.setExtent=V.prototype.vc;V.prototype.setMaxResolution=V.prototype.Ac;V.prototype.setMinResolution=V.prototype.Bc;V.prototype.setOpacity=V.prototype.wc;V.prototype.setVisible=V.prototype.xc;V.prototype.setZIndex=V.prototype.Vb;V.prototype.get=V.prototype.get;V.prototype.getKeys=V.prototype.O;V.prototype.getProperties=V.prototype.N;V.prototype.set=V.prototype.set;V.prototype.setProperties=V.prototype.H;V.prototype.unset=V.prototype.P;V.prototype.changed=V.prototype.s;V.prototype.dispatchEvent=V.prototype.b;V.prototype.getRevision=V.prototype.L;V.prototype.on=V.prototype.J;V.prototype.once=V.prototype.once;V.prototype.un=V.prototype.K;Uv.prototype.setMap=Uv.prototype.setMap;Uv.prototype.setSource=Uv.prototype.Wc;Uv.prototype.getExtent=Uv.prototype.G;Uv.prototype.getMaxResolution=Uv.prototype.fc;Uv.prototype.getMinResolution=Uv.prototype.gc;Uv.prototype.getOpacity=Uv.prototype.hc;Uv.prototype.getVisible=Uv.prototype.Mb;Uv.prototype.getZIndex=Uv.prototype.Ba;Uv.prototype.setExtent=Uv.prototype.vc;Uv.prototype.setMaxResolution=Uv.prototype.Ac;Uv.prototype.setMinResolution=Uv.prototype.Bc;Uv.prototype.setOpacity=Uv.prototype.wc;Uv.prototype.setVisible=Uv.prototype.xc;Uv.prototype.setZIndex=Uv.prototype.Vb;Uv.prototype.get=Uv.prototype.get;Uv.prototype.getKeys=Uv.prototype.O;Uv.prototype.getProperties=Uv.prototype.N;Uv.prototype.set=Uv.prototype.set;Uv.prototype.setProperties=Uv.prototype.H;Uv.prototype.unset=Uv.prototype.P;Uv.prototype.changed=Uv.prototype.s;Uv.prototype.dispatchEvent=Uv.prototype.b;Uv.prototype.getRevision=Uv.prototype.L;Uv.prototype.on=Uv.prototype.J;Uv.prototype.once=Uv.prototype.once;Uv.prototype.un=Uv.prototype.K;cw.prototype.setMap=cw.prototype.setMap;cw.prototype.setSource=cw.prototype.Wc;cw.prototype.getExtent=cw.prototype.G;cw.prototype.getMaxResolution=cw.prototype.fc;cw.prototype.getMinResolution=cw.prototype.gc;cw.prototype.getOpacity=cw.prototype.hc;cw.prototype.getVisible=cw.prototype.Mb;cw.prototype.getZIndex=cw.prototype.Ba;cw.prototype.setExtent=cw.prototype.vc;cw.prototype.setMaxResolution=cw.prototype.Ac;cw.prototype.setMinResolution=cw.prototype.Bc;cw.prototype.setOpacity=cw.prototype.wc;cw.prototype.setVisible=cw.prototype.xc;cw.prototype.setZIndex=cw.prototype.Vb;cw.prototype.get=cw.prototype.get;cw.prototype.getKeys=cw.prototype.O;cw.prototype.getProperties=cw.prototype.N;cw.prototype.set=cw.prototype.set;cw.prototype.setProperties=cw.prototype.H;cw.prototype.unset=cw.prototype.P;cw.prototype.changed=cw.prototype.s;cw.prototype.dispatchEvent=cw.prototype.b;cw.prototype.getRevision=cw.prototype.L;cw.prototype.on=cw.prototype.J;cw.prototype.once=cw.prototype.once;cw.prototype.un=cw.prototype.K;W.prototype.getSource=W.prototype.ha;W.prototype.getStyle=W.prototype.D;W.prototype.getStyleFunction=W.prototype.C;W.prototype.setStyle=W.prototype.g;W.prototype.setMap=W.prototype.setMap;W.prototype.setSource=W.prototype.Wc;W.prototype.getExtent=W.prototype.G;W.prototype.getMaxResolution=W.prototype.fc;W.prototype.getMinResolution=W.prototype.gc;W.prototype.getOpacity=W.prototype.hc;W.prototype.getVisible=W.prototype.Mb;W.prototype.getZIndex=W.prototype.Ba;W.prototype.setExtent=W.prototype.vc;W.prototype.setMaxResolution=W.prototype.Ac;W.prototype.setMinResolution=W.prototype.Bc;W.prototype.setOpacity=W.prototype.wc;W.prototype.setVisible=W.prototype.xc;W.prototype.setZIndex=W.prototype.Vb;W.prototype.get=W.prototype.get;W.prototype.getKeys=W.prototype.O;W.prototype.getProperties=W.prototype.N;W.prototype.set=W.prototype.set;W.prototype.setProperties=W.prototype.H;W.prototype.unset=W.prototype.P;W.prototype.changed=W.prototype.s;W.prototype.dispatchEvent=W.prototype.b;W.prototype.getRevision=W.prototype.L;W.prototype.on=W.prototype.J;W.prototype.once=W.prototype.once;W.prototype.un=W.prototype.K;ng.prototype.get=ng.prototype.get;ng.prototype.getKeys=ng.prototype.O;ng.prototype.getProperties=ng.prototype.N;ng.prototype.set=ng.prototype.set;ng.prototype.setProperties=ng.prototype.H;ng.prototype.unset=ng.prototype.P;ng.prototype.changed=ng.prototype.s;ng.prototype.dispatchEvent=ng.prototype.b;ng.prototype.getRevision=ng.prototype.L;ng.prototype.on=ng.prototype.J;ng.prototype.once=ng.prototype.once;ng.prototype.un=ng.prototype.K;rg.prototype.getActive=rg.prototype.c;rg.prototype.getMap=rg.prototype.f;rg.prototype.setActive=rg.prototype.Ha;rg.prototype.get=rg.prototype.get;rg.prototype.getKeys=rg.prototype.O;rg.prototype.getProperties=rg.prototype.N;rg.prototype.set=rg.prototype.set;rg.prototype.setProperties=rg.prototype.H;rg.prototype.unset=rg.prototype.P;rg.prototype.changed=rg.prototype.s;rg.prototype.dispatchEvent=rg.prototype.b;rg.prototype.getRevision=rg.prototype.L;rg.prototype.on=rg.prototype.J;rg.prototype.once=rg.prototype.once;rg.prototype.un=rg.prototype.K;Rs.prototype.getActive=Rs.prototype.c;Rs.prototype.getMap=Rs.prototype.f;Rs.prototype.setActive=Rs.prototype.Ha;Rs.prototype.get=Rs.prototype.get;Rs.prototype.getKeys=Rs.prototype.O;Rs.prototype.getProperties=Rs.prototype.N;Rs.prototype.set=Rs.prototype.set;Rs.prototype.setProperties=Rs.prototype.H;Rs.prototype.unset=Rs.prototype.P;Rs.prototype.changed=Rs.prototype.s;Rs.prototype.dispatchEvent=Rs.prototype.b;Rs.prototype.getRevision=Rs.prototype.L;Rs.prototype.on=Rs.prototype.J;Rs.prototype.once=Rs.prototype.once;Rs.prototype.un=Rs.prototype.K;Us.prototype.type=Us.prototype.type;Us.prototype.target=Us.prototype.target;Us.prototype.preventDefault=Us.prototype.preventDefault;Us.prototype.stopPropagation=Us.prototype.stopPropagation;Dg.prototype.getActive=Dg.prototype.c;Dg.prototype.getMap=Dg.prototype.f;Dg.prototype.setActive=Dg.prototype.Ha;Dg.prototype.get=Dg.prototype.get;Dg.prototype.getKeys=Dg.prototype.O;Dg.prototype.getProperties=Dg.prototype.N;Dg.prototype.set=Dg.prototype.set;Dg.prototype.setProperties=Dg.prototype.H;Dg.prototype.unset=Dg.prototype.P;Dg.prototype.changed=Dg.prototype.s;Dg.prototype.dispatchEvent=Dg.prototype.b;Dg.prototype.getRevision=Dg.prototype.L;Dg.prototype.on=Dg.prototype.J;Dg.prototype.once=Dg.prototype.once;Dg.prototype.un=Dg.prototype.K;Rg.prototype.getActive=Rg.prototype.c;Rg.prototype.getMap=Rg.prototype.f;Rg.prototype.setActive=Rg.prototype.Ha;Rg.prototype.get=Rg.prototype.get;Rg.prototype.getKeys=Rg.prototype.O;Rg.prototype.getProperties=Rg.prototype.N;Rg.prototype.set=Rg.prototype.set;Rg.prototype.setProperties=Rg.prototype.H;Rg.prototype.unset=Rg.prototype.P;Rg.prototype.changed=Rg.prototype.s;Rg.prototype.dispatchEvent=Rg.prototype.b;Rg.prototype.getRevision=Rg.prototype.L;Rg.prototype.on=Rg.prototype.J;Rg.prototype.once=Rg.prototype.once;Rg.prototype.un=Rg.prototype.K;Wg.prototype.type=Wg.prototype.type;Wg.prototype.target=Wg.prototype.target;Wg.prototype.preventDefault=Wg.prototype.preventDefault;Wg.prototype.stopPropagation=Wg.prototype.stopPropagation;Gg.prototype.getActive=Gg.prototype.c;Gg.prototype.getMap=Gg.prototype.f;Gg.prototype.setActive=Gg.prototype.Ha;Gg.prototype.get=Gg.prototype.get;Gg.prototype.getKeys=Gg.prototype.O;Gg.prototype.getProperties=Gg.prototype.N;Gg.prototype.set=Gg.prototype.set;Gg.prototype.setProperties=Gg.prototype.H;Gg.prototype.unset=Gg.prototype.P;Gg.prototype.changed=Gg.prototype.s;Gg.prototype.dispatchEvent=Gg.prototype.b;Gg.prototype.getRevision=Gg.prototype.L;Gg.prototype.on=Gg.prototype.J;Gg.prototype.once=Gg.prototype.once;Gg.prototype.un=Gg.prototype.K;Kg.prototype.getActive=Kg.prototype.c;Kg.prototype.getMap=Kg.prototype.f;Kg.prototype.setActive=Kg.prototype.Ha;Kg.prototype.get=Kg.prototype.get;Kg.prototype.getKeys=Kg.prototype.O;Kg.prototype.getProperties=Kg.prototype.N;Kg.prototype.set=Kg.prototype.set;Kg.prototype.setProperties=Kg.prototype.H;Kg.prototype.unset=Kg.prototype.P;Kg.prototype.changed=Kg.prototype.s;Kg.prototype.dispatchEvent=Kg.prototype.b;Kg.prototype.getRevision=Kg.prototype.L;Kg.prototype.on=Kg.prototype.J;Kg.prototype.once=Kg.prototype.once;Kg.prototype.un=Kg.prototype.K;Ys.prototype.getActive=Ys.prototype.c;Ys.prototype.getMap=Ys.prototype.f;Ys.prototype.setActive=Ys.prototype.Ha;Ys.prototype.get=Ys.prototype.get;Ys.prototype.getKeys=Ys.prototype.O;Ys.prototype.getProperties=Ys.prototype.N;Ys.prototype.set=Ys.prototype.set;Ys.prototype.setProperties=Ys.prototype.H;Ys.prototype.unset=Ys.prototype.P;Ys.prototype.changed=Ys.prototype.s;Ys.prototype.dispatchEvent=Ys.prototype.b;Ys.prototype.getRevision=Ys.prototype.L;Ys.prototype.on=Ys.prototype.J;Ys.prototype.once=Ys.prototype.once;Ys.prototype.un=Ys.prototype.K;$g.prototype.getGeometry=$g.prototype.V;$g.prototype.getActive=$g.prototype.c;$g.prototype.getMap=$g.prototype.f;$g.prototype.setActive=$g.prototype.Ha;$g.prototype.get=$g.prototype.get;$g.prototype.getKeys=$g.prototype.O;$g.prototype.getProperties=$g.prototype.N;$g.prototype.set=$g.prototype.set;$g.prototype.setProperties=$g.prototype.H;$g.prototype.unset=$g.prototype.P;$g.prototype.changed=$g.prototype.s;$g.prototype.dispatchEvent=$g.prototype.b;$g.prototype.getRevision=$g.prototype.L;$g.prototype.on=$g.prototype.J;$g.prototype.once=$g.prototype.once;$g.prototype.un=$g.prototype.K;ju.prototype.getActive=ju.prototype.c;ju.prototype.getMap=ju.prototype.f;ju.prototype.setActive=ju.prototype.Ha;ju.prototype.get=ju.prototype.get;ju.prototype.getKeys=ju.prototype.O;ju.prototype.getProperties=ju.prototype.N;ju.prototype.set=ju.prototype.set;ju.prototype.setProperties=ju.prototype.H;ju.prototype.unset=ju.prototype.P;ju.prototype.changed=ju.prototype.s;ju.prototype.dispatchEvent=ju.prototype.b;ju.prototype.getRevision=ju.prototype.L;ju.prototype.on=ju.prototype.J;ju.prototype.once=ju.prototype.once;ju.prototype.un=ju.prototype.K;zu.prototype.type=zu.prototype.type;zu.prototype.target=zu.prototype.target;zu.prototype.preventDefault=zu.prototype.preventDefault;zu.prototype.stopPropagation=zu.prototype.stopPropagation;Au.prototype.getActive=Au.prototype.c;Au.prototype.getMap=Au.prototype.f;Au.prototype.setActive=Au.prototype.Ha;Au.prototype.get=Au.prototype.get;Au.prototype.getKeys=Au.prototype.O;Au.prototype.getProperties=Au.prototype.N;Au.prototype.set=Au.prototype.set;Au.prototype.setProperties=Au.prototype.H;Au.prototype.unset=Au.prototype.P;Au.prototype.changed=Au.prototype.s;Au.prototype.dispatchEvent=Au.prototype.b;Au.prototype.getRevision=Au.prototype.L;Au.prototype.on=Au.prototype.J;Au.prototype.once=Au.prototype.once;Au.prototype.un=Au.prototype.K;Lu.prototype.type=Lu.prototype.type;Lu.prototype.target=Lu.prototype.target;Lu.prototype.preventDefault=Lu.prototype.preventDefault;Lu.prototype.stopPropagation=Lu.prototype.stopPropagation;ah.prototype.getActive=ah.prototype.c;ah.prototype.getMap=ah.prototype.f;ah.prototype.setActive=ah.prototype.Ha;ah.prototype.get=ah.prototype.get;ah.prototype.getKeys=ah.prototype.O;ah.prototype.getProperties=ah.prototype.N;ah.prototype.set=ah.prototype.set;ah.prototype.setProperties=ah.prototype.H;ah.prototype.unset=ah.prototype.P;ah.prototype.changed=ah.prototype.s;ah.prototype.dispatchEvent=ah.prototype.b;ah.prototype.getRevision=ah.prototype.L;ah.prototype.on=ah.prototype.J;ah.prototype.once=ah.prototype.once;ah.prototype.un=ah.prototype.K;ch.prototype.getActive=ch.prototype.c;ch.prototype.getMap=ch.prototype.f;ch.prototype.setActive=ch.prototype.Ha;ch.prototype.get=ch.prototype.get;ch.prototype.getKeys=ch.prototype.O;ch.prototype.getProperties=ch.prototype.N;ch.prototype.set=ch.prototype.set;ch.prototype.setProperties=ch.prototype.H;ch.prototype.unset=ch.prototype.P;ch.prototype.changed=ch.prototype.s;ch.prototype.dispatchEvent=ch.prototype.b;ch.prototype.getRevision=ch.prototype.L;ch.prototype.on=ch.prototype.J;ch.prototype.once=ch.prototype.once;ch.prototype.un=ch.prototype.K;Nu.prototype.getActive=Nu.prototype.c;Nu.prototype.getMap=Nu.prototype.f;Nu.prototype.setActive=Nu.prototype.Ha;Nu.prototype.get=Nu.prototype.get;Nu.prototype.getKeys=Nu.prototype.O;Nu.prototype.getProperties=Nu.prototype.N;Nu.prototype.set=Nu.prototype.set;Nu.prototype.setProperties=Nu.prototype.H;Nu.prototype.unset=Nu.prototype.P;Nu.prototype.changed=Nu.prototype.s;Nu.prototype.dispatchEvent=Nu.prototype.b;Nu.prototype.getRevision=Nu.prototype.L;Nu.prototype.on=Nu.prototype.J;Nu.prototype.once=Nu.prototype.once;Nu.prototype.un=Nu.prototype.K;Vu.prototype.type=Vu.prototype.type;Vu.prototype.target=Vu.prototype.target;Vu.prototype.preventDefault=Vu.prototype.preventDefault;Vu.prototype.stopPropagation=Vu.prototype.stopPropagation;eh.prototype.getActive=eh.prototype.c;eh.prototype.getMap=eh.prototype.f;eh.prototype.setActive=eh.prototype.Ha;eh.prototype.get=eh.prototype.get;eh.prototype.getKeys=eh.prototype.O;eh.prototype.getProperties=eh.prototype.N;eh.prototype.set=eh.prototype.set;eh.prototype.setProperties=eh.prototype.H;eh.prototype.unset=eh.prototype.P;eh.prototype.changed=eh.prototype.s;eh.prototype.dispatchEvent=eh.prototype.b;eh.prototype.getRevision=eh.prototype.L;eh.prototype.on=eh.prototype.J;eh.prototype.once=eh.prototype.once;eh.prototype.un=eh.prototype.K;ih.prototype.getActive=ih.prototype.c;ih.prototype.getMap=ih.prototype.f;ih.prototype.setActive=ih.prototype.Ha;ih.prototype.get=ih.prototype.get;ih.prototype.getKeys=ih.prototype.O;ih.prototype.getProperties=ih.prototype.N;ih.prototype.set=ih.prototype.set;ih.prototype.setProperties=ih.prototype.H;ih.prototype.unset=ih.prototype.P;ih.prototype.changed=ih.prototype.s;ih.prototype.dispatchEvent=ih.prototype.b;ih.prototype.getRevision=ih.prototype.L;ih.prototype.on=ih.prototype.J;ih.prototype.once=ih.prototype.once;ih.prototype.un=ih.prototype.K;mh.prototype.getActive=mh.prototype.c;mh.prototype.getMap=mh.prototype.f;mh.prototype.setActive=mh.prototype.Ha;mh.prototype.get=mh.prototype.get;mh.prototype.getKeys=mh.prototype.O;mh.prototype.getProperties=mh.prototype.N;mh.prototype.set=mh.prototype.set;mh.prototype.setProperties=mh.prototype.H;mh.prototype.unset=mh.prototype.P;mh.prototype.changed=mh.prototype.s;mh.prototype.dispatchEvent=mh.prototype.b;mh.prototype.getRevision=mh.prototype.L;mh.prototype.on=mh.prototype.J;mh.prototype.once=mh.prototype.once;mh.prototype.un=mh.prototype.K;cv.prototype.getActive=cv.prototype.c;cv.prototype.getMap=cv.prototype.f;cv.prototype.setActive=cv.prototype.Ha;cv.prototype.get=cv.prototype.get;cv.prototype.getKeys=cv.prototype.O;cv.prototype.getProperties=cv.prototype.N;cv.prototype.set=cv.prototype.set;cv.prototype.setProperties=cv.prototype.H;cv.prototype.unset=cv.prototype.P;cv.prototype.changed=cv.prototype.s;cv.prototype.dispatchEvent=cv.prototype.b;cv.prototype.getRevision=cv.prototype.L;cv.prototype.on=cv.prototype.J;cv.prototype.once=cv.prototype.once;cv.prototype.un=cv.prototype.K;fv.prototype.type=fv.prototype.type;fv.prototype.target=fv.prototype.target;fv.prototype.preventDefault=fv.prototype.preventDefault;fv.prototype.stopPropagation=fv.prototype.stopPropagation;hv.prototype.getActive=hv.prototype.c;hv.prototype.getMap=hv.prototype.f;hv.prototype.setActive=hv.prototype.Ha;hv.prototype.get=hv.prototype.get;hv.prototype.getKeys=hv.prototype.O;hv.prototype.getProperties=hv.prototype.N;hv.prototype.set=hv.prototype.set;hv.prototype.setProperties=hv.prototype.H;hv.prototype.unset=hv.prototype.P;hv.prototype.changed=hv.prototype.s;hv.prototype.dispatchEvent=hv.prototype.b;hv.prototype.getRevision=hv.prototype.L;hv.prototype.on=hv.prototype.J;hv.prototype.once=hv.prototype.once;hv.prototype.un=hv.prototype.K;mv.prototype.getActive=mv.prototype.c;mv.prototype.getMap=mv.prototype.f;mv.prototype.setActive=mv.prototype.Ha;mv.prototype.get=mv.prototype.get;mv.prototype.getKeys=mv.prototype.O;mv.prototype.getProperties=mv.prototype.N;mv.prototype.set=mv.prototype.set;mv.prototype.setProperties=mv.prototype.H;mv.prototype.unset=mv.prototype.P;mv.prototype.changed=mv.prototype.s;mv.prototype.dispatchEvent=mv.prototype.b;mv.prototype.getRevision=mv.prototype.L;mv.prototype.on=mv.prototype.J;mv.prototype.once=mv.prototype.once;mv.prototype.un=mv.prototype.K;sv.prototype.type=sv.prototype.type;sv.prototype.target=sv.prototype.target;sv.prototype.preventDefault=sv.prototype.preventDefault;sv.prototype.stopPropagation=sv.prototype.stopPropagation;of.prototype.get=of.prototype.get;of.prototype.getKeys=of.prototype.O;of.prototype.getProperties=of.prototype.N;of.prototype.set=of.prototype.set;of.prototype.setProperties=of.prototype.H;of.prototype.unset=of.prototype.P;of.prototype.changed=of.prototype.s;of.prototype.dispatchEvent=of.prototype.b;of.prototype.getRevision=of.prototype.L;of.prototype.on=of.prototype.J;of.prototype.once=of.prototype.once;of.prototype.un=of.prototype.K;rf.prototype.getClosestPoint=rf.prototype.Ab;rf.prototype.intersectsCoordinate=rf.prototype.sb;rf.prototype.getExtent=rf.prototype.G;rf.prototype.rotate=rf.prototype.rotate;rf.prototype.scale=rf.prototype.scale;rf.prototype.simplify=rf.prototype.Rb;rf.prototype.transform=rf.prototype.tb;rf.prototype.get=rf.prototype.get;rf.prototype.getKeys=rf.prototype.O;rf.prototype.getProperties=rf.prototype.N;rf.prototype.set=rf.prototype.set;rf.prototype.setProperties=rf.prototype.H;rf.prototype.unset=rf.prototype.P;rf.prototype.changed=rf.prototype.s;rf.prototype.dispatchEvent=rf.prototype.b;rf.prototype.getRevision=rf.prototype.L;rf.prototype.on=rf.prototype.J;rf.prototype.once=rf.prototype.once;rf.prototype.un=rf.prototype.K;ys.prototype.getFirstCoordinate=ys.prototype.ac;ys.prototype.getLastCoordinate=ys.prototype.bc;ys.prototype.getLayout=ys.prototype.cc;ys.prototype.rotate=ys.prototype.rotate;ys.prototype.scale=ys.prototype.scale;ys.prototype.getClosestPoint=ys.prototype.Ab;ys.prototype.intersectsCoordinate=ys.prototype.sb;ys.prototype.getExtent=ys.prototype.G;ys.prototype.simplify=ys.prototype.Rb;ys.prototype.get=ys.prototype.get;ys.prototype.getKeys=ys.prototype.O;ys.prototype.getProperties=ys.prototype.N;ys.prototype.set=ys.prototype.set;ys.prototype.setProperties=ys.prototype.H;ys.prototype.unset=ys.prototype.P;ys.prototype.changed=ys.prototype.s;ys.prototype.dispatchEvent=ys.prototype.b;ys.prototype.getRevision=ys.prototype.L;ys.prototype.on=ys.prototype.J;ys.prototype.once=ys.prototype.once;ys.prototype.un=ys.prototype.K;tm.prototype.getClosestPoint=tm.prototype.Ab;tm.prototype.intersectsCoordinate=tm.prototype.sb;tm.prototype.getExtent=tm.prototype.G;tm.prototype.rotate=tm.prototype.rotate;tm.prototype.scale=tm.prototype.scale;tm.prototype.simplify=tm.prototype.Rb;tm.prototype.transform=tm.prototype.tb;tm.prototype.get=tm.prototype.get;tm.prototype.getKeys=tm.prototype.O;tm.prototype.getProperties=tm.prototype.N;tm.prototype.set=tm.prototype.set;tm.prototype.setProperties=tm.prototype.H;tm.prototype.unset=tm.prototype.P;tm.prototype.changed=tm.prototype.s;tm.prototype.dispatchEvent=tm.prototype.b;tm.prototype.getRevision=tm.prototype.L;tm.prototype.on=tm.prototype.J;tm.prototype.once=tm.prototype.once;tm.prototype.un=tm.prototype.K;Jf.prototype.getFirstCoordinate=Jf.prototype.ac;Jf.prototype.getLastCoordinate=Jf.prototype.bc;Jf.prototype.getLayout=Jf.prototype.cc;Jf.prototype.rotate=Jf.prototype.rotate;Jf.prototype.scale=Jf.prototype.scale;Jf.prototype.getClosestPoint=Jf.prototype.Ab;Jf.prototype.intersectsCoordinate=Jf.prototype.sb;Jf.prototype.getExtent=Jf.prototype.G;Jf.prototype.simplify=Jf.prototype.Rb;Jf.prototype.transform=Jf.prototype.tb;Jf.prototype.get=Jf.prototype.get;Jf.prototype.getKeys=Jf.prototype.O;Jf.prototype.getProperties=Jf.prototype.N;Jf.prototype.set=Jf.prototype.set;Jf.prototype.setProperties=Jf.prototype.H;Jf.prototype.unset=Jf.prototype.P;Jf.prototype.changed=Jf.prototype.s;Jf.prototype.dispatchEvent=Jf.prototype.b;Jf.prototype.getRevision=Jf.prototype.L;Jf.prototype.on=Jf.prototype.J;Jf.prototype.once=Jf.prototype.once;Jf.prototype.un=Jf.prototype.K;O.prototype.getFirstCoordinate=O.prototype.ac;O.prototype.getLastCoordinate=O.prototype.bc;O.prototype.getLayout=O.prototype.cc;O.prototype.rotate=O.prototype.rotate;O.prototype.scale=O.prototype.scale;O.prototype.getClosestPoint=O.prototype.Ab;O.prototype.intersectsCoordinate=O.prototype.sb;O.prototype.getExtent=O.prototype.G;O.prototype.simplify=O.prototype.Rb;O.prototype.transform=O.prototype.tb;O.prototype.get=O.prototype.get;O.prototype.getKeys=O.prototype.O;O.prototype.getProperties=O.prototype.N;O.prototype.set=O.prototype.set;O.prototype.setProperties=O.prototype.H;O.prototype.unset=O.prototype.P;O.prototype.changed=O.prototype.s;O.prototype.dispatchEvent=O.prototype.b;O.prototype.getRevision=O.prototype.L;O.prototype.on=O.prototype.J;O.prototype.once=O.prototype.once;O.prototype.un=O.prototype.K;P.prototype.getFirstCoordinate=P.prototype.ac;P.prototype.getLastCoordinate=P.prototype.bc;P.prototype.getLayout=P.prototype.cc;P.prototype.rotate=P.prototype.rotate;P.prototype.scale=P.prototype.scale;P.prototype.getClosestPoint=P.prototype.Ab;P.prototype.intersectsCoordinate=P.prototype.sb;P.prototype.getExtent=P.prototype.G;P.prototype.simplify=P.prototype.Rb;P.prototype.transform=P.prototype.tb;P.prototype.get=P.prototype.get;P.prototype.getKeys=P.prototype.O;P.prototype.getProperties=P.prototype.N;P.prototype.set=P.prototype.set;P.prototype.setProperties=P.prototype.H;P.prototype.unset=P.prototype.P;P.prototype.changed=P.prototype.s;P.prototype.dispatchEvent=P.prototype.b;P.prototype.getRevision=P.prototype.L;P.prototype.on=P.prototype.J;P.prototype.once=P.prototype.once;P.prototype.un=P.prototype.K;Q.prototype.getFirstCoordinate=Q.prototype.ac;Q.prototype.getLastCoordinate=Q.prototype.bc;Q.prototype.getLayout=Q.prototype.cc;Q.prototype.rotate=Q.prototype.rotate;Q.prototype.scale=Q.prototype.scale;Q.prototype.getClosestPoint=Q.prototype.Ab;Q.prototype.intersectsCoordinate=Q.prototype.sb;Q.prototype.getExtent=Q.prototype.G;Q.prototype.simplify=Q.prototype.Rb;Q.prototype.transform=Q.prototype.tb;Q.prototype.get=Q.prototype.get;Q.prototype.getKeys=Q.prototype.O;Q.prototype.getProperties=Q.prototype.N;Q.prototype.set=Q.prototype.set;Q.prototype.setProperties=Q.prototype.H;Q.prototype.unset=Q.prototype.P;Q.prototype.changed=Q.prototype.s;Q.prototype.dispatchEvent=Q.prototype.b;Q.prototype.getRevision=Q.prototype.L;Q.prototype.on=Q.prototype.J;Q.prototype.once=Q.prototype.once;Q.prototype.un=Q.prototype.K;R.prototype.getFirstCoordinate=R.prototype.ac;R.prototype.getLastCoordinate=R.prototype.bc;R.prototype.getLayout=R.prototype.cc;R.prototype.rotate=R.prototype.rotate;R.prototype.scale=R.prototype.scale;R.prototype.getClosestPoint=R.prototype.Ab;R.prototype.intersectsCoordinate=R.prototype.sb;R.prototype.getExtent=R.prototype.G;R.prototype.simplify=R.prototype.Rb;R.prototype.transform=R.prototype.tb;R.prototype.get=R.prototype.get;R.prototype.getKeys=R.prototype.O;R.prototype.getProperties=R.prototype.N;R.prototype.set=R.prototype.set;R.prototype.setProperties=R.prototype.H;R.prototype.unset=R.prototype.P;R.prototype.changed=R.prototype.s;R.prototype.dispatchEvent=R.prototype.b;R.prototype.getRevision=R.prototype.L;R.prototype.on=R.prototype.J;R.prototype.once=R.prototype.once;R.prototype.un=R.prototype.K;C.prototype.getFirstCoordinate=C.prototype.ac;C.prototype.getLastCoordinate=C.prototype.bc;C.prototype.getLayout=C.prototype.cc;C.prototype.rotate=C.prototype.rotate;C.prototype.scale=C.prototype.scale;C.prototype.getClosestPoint=C.prototype.Ab;C.prototype.intersectsCoordinate=C.prototype.sb;C.prototype.getExtent=C.prototype.G;C.prototype.simplify=C.prototype.Rb;C.prototype.transform=C.prototype.tb;C.prototype.get=C.prototype.get;C.prototype.getKeys=C.prototype.O;C.prototype.getProperties=C.prototype.N;C.prototype.set=C.prototype.set;C.prototype.setProperties=C.prototype.H;C.prototype.unset=C.prototype.P;C.prototype.changed=C.prototype.s;C.prototype.dispatchEvent=C.prototype.b;C.prototype.getRevision=C.prototype.L;C.prototype.on=C.prototype.J;C.prototype.once=C.prototype.once;C.prototype.un=C.prototype.K;D.prototype.getFirstCoordinate=D.prototype.ac;D.prototype.getLastCoordinate=D.prototype.bc;D.prototype.getLayout=D.prototype.cc;D.prototype.rotate=D.prototype.rotate;D.prototype.scale=D.prototype.scale;D.prototype.getClosestPoint=D.prototype.Ab;D.prototype.intersectsCoordinate=D.prototype.sb;D.prototype.getExtent=D.prototype.G;D.prototype.simplify=D.prototype.Rb;D.prototype.transform=D.prototype.tb;D.prototype.get=D.prototype.get;D.prototype.getKeys=D.prototype.O;D.prototype.getProperties=D.prototype.N;D.prototype.set=D.prototype.set;D.prototype.setProperties=D.prototype.H;D.prototype.unset=D.prototype.P;D.prototype.changed=D.prototype.s;D.prototype.dispatchEvent=D.prototype.b;D.prototype.getRevision=D.prototype.L;D.prototype.on=D.prototype.J;D.prototype.once=D.prototype.once;D.prototype.un=D.prototype.K;Sm.prototype.readFeatures=Sm.prototype.Oa;an.prototype.readFeatures=an.prototype.Oa;Sm.prototype.readFeatures=Sm.prototype.Oa;md.prototype.get=md.prototype.get;md.prototype.getKeys=md.prototype.O;md.prototype.getProperties=md.prototype.N;md.prototype.set=md.prototype.set;md.prototype.setProperties=md.prototype.H;md.prototype.unset=md.prototype.P;md.prototype.changed=md.prototype.s;md.prototype.dispatchEvent=md.prototype.b;md.prototype.getRevision=md.prototype.L;md.prototype.on=md.prototype.J;md.prototype.once=md.prototype.once;md.prototype.un=md.prototype.K;nd.prototype.getMap=nd.prototype.g;nd.prototype.setMap=nd.prototype.setMap;nd.prototype.setTarget=nd.prototype.f;nd.prototype.get=nd.prototype.get;nd.prototype.getKeys=nd.prototype.O;nd.prototype.getProperties=nd.prototype.N;nd.prototype.set=nd.prototype.set;nd.prototype.setProperties=nd.prototype.H;nd.prototype.unset=nd.prototype.P;nd.prototype.changed=nd.prototype.s;nd.prototype.dispatchEvent=nd.prototype.b;nd.prototype.getRevision=nd.prototype.L;nd.prototype.on=nd.prototype.J;nd.prototype.once=nd.prototype.once;nd.prototype.un=nd.prototype.K;yd.prototype.getMap=yd.prototype.g;yd.prototype.setMap=yd.prototype.setMap;yd.prototype.setTarget=yd.prototype.f;yd.prototype.get=yd.prototype.get;yd.prototype.getKeys=yd.prototype.O;yd.prototype.getProperties=yd.prototype.N;yd.prototype.set=yd.prototype.set;yd.prototype.setProperties=yd.prototype.H;yd.prototype.unset=yd.prototype.P;yd.prototype.changed=yd.prototype.s;yd.prototype.dispatchEvent=yd.prototype.b;yd.prototype.getRevision=yd.prototype.L;yd.prototype.on=yd.prototype.J;yd.prototype.once=yd.prototype.once;yd.prototype.un=yd.prototype.K;Dd.prototype.getMap=Dd.prototype.g;Dd.prototype.setMap=Dd.prototype.setMap;Dd.prototype.setTarget=Dd.prototype.f;Dd.prototype.get=Dd.prototype.get;Dd.prototype.getKeys=Dd.prototype.O;Dd.prototype.getProperties=Dd.prototype.N;Dd.prototype.set=Dd.prototype.set;Dd.prototype.setProperties=Dd.prototype.H;Dd.prototype.unset=Dd.prototype.P;Dd.prototype.changed=Dd.prototype.s;Dd.prototype.dispatchEvent=Dd.prototype.b;Dd.prototype.getRevision=Dd.prototype.L;Dd.prototype.on=Dd.prototype.J;Dd.prototype.once=Dd.prototype.once;Dd.prototype.un=Dd.prototype.K;Bk.prototype.getMap=Bk.prototype.g;Bk.prototype.setMap=Bk.prototype.setMap;Bk.prototype.setTarget=Bk.prototype.f;Bk.prototype.get=Bk.prototype.get;Bk.prototype.getKeys=Bk.prototype.O;Bk.prototype.getProperties=Bk.prototype.N;Bk.prototype.set=Bk.prototype.set;Bk.prototype.setProperties=Bk.prototype.H;Bk.prototype.unset=Bk.prototype.P;Bk.prototype.changed=Bk.prototype.s;Bk.prototype.dispatchEvent=Bk.prototype.b;Bk.prototype.getRevision=Bk.prototype.L;Bk.prototype.on=Bk.prototype.J;Bk.prototype.once=Bk.prototype.once;Bk.prototype.un=Bk.prototype.K;ud.prototype.getMap=ud.prototype.g;ud.prototype.setMap=ud.prototype.setMap;ud.prototype.setTarget=ud.prototype.f;ud.prototype.get=ud.prototype.get;ud.prototype.getKeys=ud.prototype.O;ud.prototype.getProperties=ud.prototype.N;ud.prototype.set=ud.prototype.set;ud.prototype.setProperties=ud.prototype.H;ud.prototype.unset=ud.prototype.P;ud.prototype.changed=ud.prototype.s;ud.prototype.dispatchEvent=ud.prototype.b;ud.prototype.getRevision=ud.prototype.L;ud.prototype.on=ud.prototype.J;ud.prototype.once=ud.prototype.once;ud.prototype.un=ud.prototype.K;Gk.prototype.getMap=Gk.prototype.g;Gk.prototype.setMap=Gk.prototype.setMap;Gk.prototype.setTarget=Gk.prototype.f;Gk.prototype.get=Gk.prototype.get;Gk.prototype.getKeys=Gk.prototype.O;Gk.prototype.getProperties=Gk.prototype.N;Gk.prototype.set=Gk.prototype.set;Gk.prototype.setProperties=Gk.prototype.H;Gk.prototype.unset=Gk.prototype.P;Gk.prototype.changed=Gk.prototype.s;Gk.prototype.dispatchEvent=Gk.prototype.b;Gk.prototype.getRevision=Gk.prototype.L;Gk.prototype.on=Gk.prototype.J;Gk.prototype.once=Gk.prototype.once;Gk.prototype.un=Gk.prototype.K;wd.prototype.getMap=wd.prototype.g;wd.prototype.setMap=wd.prototype.setMap;wd.prototype.setTarget=wd.prototype.f;wd.prototype.get=wd.prototype.get;wd.prototype.getKeys=wd.prototype.O;wd.prototype.getProperties=wd.prototype.N;wd.prototype.set=wd.prototype.set;wd.prototype.setProperties=wd.prototype.H;wd.prototype.unset=wd.prototype.P;wd.prototype.changed=wd.prototype.s;wd.prototype.dispatchEvent=wd.prototype.b;wd.prototype.getRevision=wd.prototype.L;wd.prototype.on=wd.prototype.J;wd.prototype.once=wd.prototype.once;wd.prototype.un=wd.prototype.K;Lk.prototype.getMap=Lk.prototype.g;Lk.prototype.setMap=Lk.prototype.setMap;Lk.prototype.setTarget=Lk.prototype.f;Lk.prototype.get=Lk.prototype.get;Lk.prototype.getKeys=Lk.prototype.O;Lk.prototype.getProperties=Lk.prototype.N;Lk.prototype.set=Lk.prototype.set;Lk.prototype.setProperties=Lk.prototype.H;Lk.prototype.unset=Lk.prototype.P;Lk.prototype.changed=Lk.prototype.s;Lk.prototype.dispatchEvent=Lk.prototype.b;Lk.prototype.getRevision=Lk.prototype.L;Lk.prototype.on=Lk.prototype.J;Lk.prototype.once=Lk.prototype.once;Lk.prototype.un=Lk.prototype.K;Qk.prototype.getMap=Qk.prototype.g;Qk.prototype.setMap=Qk.prototype.setMap;Qk.prototype.setTarget=Qk.prototype.f;Qk.prototype.get=Qk.prototype.get;Qk.prototype.getKeys=Qk.prototype.O;Qk.prototype.getProperties=Qk.prototype.N;Qk.prototype.set=Qk.prototype.set;Qk.prototype.setProperties=Qk.prototype.H;Qk.prototype.unset=Qk.prototype.P;Qk.prototype.changed=Qk.prototype.s;Qk.prototype.dispatchEvent=Qk.prototype.b;Qk.prototype.getRevision=Qk.prototype.L;Qk.prototype.on=Qk.prototype.J;Qk.prototype.once=Qk.prototype.once;Qk.prototype.un=Qk.prototype.K;return OPENLAYERS.ol;}));;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){"use strict";var f="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,Y="undefined"==typeof window?{document:f,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,l=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function L(e,t){var a=[],i=0;if(e&&!t&&e instanceof l)return e;if(e)if("string"==typeof e){var s,r,n=e.trim();if(0<=n.indexOf("<")&&0<=n.indexOf(">")){var o="div";for(0===n.indexOf("<li")&&(o="ul"),0===n.indexOf("<tr")&&(o="tbody"),0!==n.indexOf("<td")&&0!==n.indexOf("<th")||(o="tr"),0===n.indexOf("<tbody")&&(o="table"),0===n.indexOf("<option")&&(o="select"),(r=f.createElement(o)).innerHTML=n,i=0;i<r.childNodes.length;i+=1)a.push(r.childNodes[i])}else for(s=t||"#"!==e[0]||e.match(/[ .<>:~]/)?(t||f).querySelectorAll(e.trim()):[f.getElementById(e.trim().split("#")[1])],i=0;i<s.length;i+=1)s[i]&&a.push(s[i])}else if(e.nodeType||e===Y||e===f)a.push(e);else if(0<e.length&&e[0].nodeType)for(i=0;i<e.length;i+=1)a.push(e[i]);return new l(a)}function r(e){for(var t=[],a=0;a<e.length;a+=1)-1===t.indexOf(e[a])&&t.push(e[a]);return t}L.fn=l.prototype,L.Class=l,L.Dom7=l;var t={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),a=0;a<t.length;a+=1)for(var i=0;i<this.length;i+=1)void 0!==this[i]&&void 0!==this[i].classList&&this[i].classList.add(t[a]);return this},removeClass:function(e){for(var t=e.split(" "),a=0;a<t.length;a+=1)for(var i=0;i<this.length;i+=1)void 0!==this[i]&&void 0!==this[i].classList&&this[i].classList.remove(t[a]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),a=0;a<t.length;a+=1)for(var i=0;i<this.length;i+=1)void 0!==this[i]&&void 0!==this[i].classList&&this[i].classList.toggle(t[a]);return this},attr:function(e,t){var a=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var i=0;i<this.length;i+=1)if(2===a.length)this[i].setAttribute(e,t);else for(var s in e)this[i][s]=e[s],this[i].setAttribute(s,e[s]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var a;if(void 0!==t){for(var i=0;i<this.length;i+=1)(a=this[i]).dom7ElementDataStorage||(a.dom7ElementDataStorage={}),a.dom7ElementDataStorage[e]=t;return this}if(a=this[0]){if(a.dom7ElementDataStorage&&e in a.dom7ElementDataStorage)return a.dom7ElementDataStorage[e];var s=a.getAttribute("data-"+e);return s||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var a=this[t].style;a.webkitTransform=e,a.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var a=this[t].style;a.webkitTransitionDuration=e,a.transitionDuration=e}return this},on:function(){for(var e,t=[],a=arguments.length;a--;)t[a]=arguments[a];var i=t[0],r=t[1],n=t[2],s=t[3];function o(e){var t=e.target;if(t){var a=e.target.dom7EventData||[];if(a.indexOf(e)<0&&a.unshift(e),L(t).is(r))n.apply(t,a);else for(var i=L(t).parents(),s=0;s<i.length;s+=1)L(i[s]).is(r)&&n.apply(i[s],a)}}function l(e){var t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),n.apply(this,t)}"function"==typeof t[1]&&(i=(e=t)[0],n=e[1],s=e[2],r=void 0),s||(s=!1);for(var d,p=i.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(d=0;d<p.length;d+=1){var h=p[d];u.dom7LiveListeners||(u.dom7LiveListeners={}),u.dom7LiveListeners[h]||(u.dom7LiveListeners[h]=[]),u.dom7LiveListeners[h].push({listener:n,proxyListener:o}),u.addEventListener(h,o,s)}else for(d=0;d<p.length;d+=1){var v=p[d];u.dom7Listeners||(u.dom7Listeners={}),u.dom7Listeners[v]||(u.dom7Listeners[v]=[]),u.dom7Listeners[v].push({listener:n,proxyListener:l}),u.addEventListener(v,l,s)}}return this},off:function(){for(var e,t=[],a=arguments.length;a--;)t[a]=arguments[a];var i=t[0],s=t[1],r=t[2],n=t[3];"function"==typeof t[1]&&(i=(e=t)[0],r=e[1],n=e[2],s=void 0),n||(n=!1);for(var o=i.split(" "),l=0;l<o.length;l+=1)for(var d=o[l],p=0;p<this.length;p+=1){var c=this[p],u=void 0;if(!s&&c.dom7Listeners?u=c.dom7Listeners[d]:s&&c.dom7LiveListeners&&(u=c.dom7LiveListeners[d]),u&&u.length)for(var h=u.length-1;0<=h;h-=1){var v=u[h];r&&v.listener===r?(c.removeEventListener(d,v.proxyListener,n),u.splice(h,1)):r||(c.removeEventListener(d,v.proxyListener,n),u.splice(h,1))}}return this},trigger:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var a=e[0].split(" "),i=e[1],s=0;s<a.length;s+=1)for(var r=a[s],n=0;n<this.length;n+=1){var o=this[n],l=void 0;try{l=new Y.CustomEvent(r,{detail:i,bubbles:!0,cancelable:!0})}catch(e){(l=f.createEvent("Event")).initEvent(r,!0,!0),l.detail=i}o.dom7EventData=e.filter(function(e,t){return 0<t}),o.dispatchEvent(l),o.dom7EventData=[],delete o.dom7EventData}return this},transitionEnd:function(t){var a,i=["webkitTransitionEnd","transitionend"],s=this;function r(e){if(e.target===this)for(t.call(this,e),a=0;a<i.length;a+=1)s.off(i[a],r)}if(t)for(a=0;a<i.length;a+=1)s.on(i[a],r);return this},outerWidth:function(e){if(0<this.length){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(0<this.length){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(0<this.length){var e=this[0],t=e.getBoundingClientRect(),a=f.body,i=e.clientTop||a.clientTop||0,s=e.clientLeft||a.clientLeft||0,r=e===Y?Y.scrollY:e.scrollTop,n=e===Y?Y.scrollX:e.scrollLeft;return{top:t.top+r-i,left:t.left+n-s}}return null},css:function(e,t){var a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a<this.length;a+=1)for(var i in e)this[a].style[i]=e[i];return this}if(this[0])return Y.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(a=0;a<this.length;a+=1)this[a].style[e]=t;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){var t,a,i=this[0];if(!i||void 0===e)return!1;if("string"==typeof e){if(i.matches)return i.matches(e);if(i.webkitMatchesSelector)return i.webkitMatchesSelector(e);if(i.msMatchesSelector)return i.msMatchesSelector(e);for(t=L(e),a=0;a<t.length;a+=1)if(t[a]===i)return!0;return!1}if(e===f)return i===f;if(e===Y)return i===Y;if(e.nodeType||e instanceof l){for(t=e.nodeType?[e]:e,a=0;a<t.length;a+=1)if(t[a]===i)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,a=this.length;return new l(a-1<e?[]:e<0?(t=a+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var e,t=[],a=arguments.length;a--;)t[a]=arguments[a];for(var i=0;i<t.length;i+=1){e=t[i];for(var s=0;s<this.length;s+=1)if("string"==typeof e){var r=f.createElement("div");for(r.innerHTML=e;r.firstChild;)this[s].appendChild(r.firstChild)}else if(e instanceof l)for(var n=0;n<e.length;n+=1)this[s].appendChild(e[n]);else this[s].appendChild(e)}return this},prepend:function(e){var t,a;for(t=0;t<this.length;t+=1)if("string"==typeof e){var i=f.createElement("div");for(i.innerHTML=e,a=i.childNodes.length-1;0<=a;a-=1)this[t].insertBefore(i.childNodes[a],this[t].childNodes[0])}else if(e instanceof l)for(a=0;a<e.length;a+=1)this[t].insertBefore(e[a],this[t].childNodes[0]);else this[t].insertBefore(e,this[t].childNodes[0]);return this},next:function(e){return 0<this.length?e?this[0].nextElementSibling&&L(this[0].nextElementSibling).is(e)?new l([this[0].nextElementSibling]):new l([]):this[0].nextElementSibling?new l([this[0].nextElementSibling]):new l([]):new l([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new l([]);for(;a.nextElementSibling;){var i=a.nextElementSibling;e?L(i).is(e)&&t.push(i):t.push(i),a=i}return new l(t)},prev:function(e){if(0<this.length){var t=this[0];return e?t.previousElementSibling&&L(t.previousElementSibling).is(e)?new l([t.previousElementSibling]):new l([]):t.previousElementSibling?new l([t.previousElementSibling]):new l([])}return new l([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new l([]);for(;a.previousElementSibling;){var i=a.previousElementSibling;e?L(i).is(e)&&t.push(i):t.push(i),a=i}return new l(t)},parent:function(e){for(var t=[],a=0;a<this.length;a+=1)null!==this[a].parentNode&&(e?L(this[a].parentNode).is(e)&&t.push(this[a].parentNode):t.push(this[a].parentNode));return L(r(t))},parents:function(e){for(var t=[],a=0;a<this.length;a+=1)for(var i=this[a].parentNode;i;)e?L(i).is(e)&&t.push(i):t.push(i),i=i.parentNode;return L(r(t))},closest:function(e){var t=this;return void 0===e?new l([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],a=0;a<this.length;a+=1)for(var i=this[a].querySelectorAll(e),s=0;s<i.length;s+=1)t.push(i[s]);return new l(t)},children:function(e){for(var t=[],a=0;a<this.length;a+=1)for(var i=this[a].childNodes,s=0;s<i.length;s+=1)e?1===i[s].nodeType&&L(i[s]).is(e)&&t.push(i[s]):1===i[s].nodeType&&t.push(i[s]);return new l(r(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var a,i;for(a=0;a<e.length;a+=1){var s=L(e[a]);for(i=0;i<s.length;i+=1)this[this.length]=s[i],this.length+=1}return this},styles:function(){return this[0]?Y.getComputedStyle(this[0],null):{}}};Object.keys(t).forEach(function(e){L.fn[e]=t[e]});var e,a,i,V={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,t){var a,i,s;void 0===t&&(t="x");var r=Y.getComputedStyle(e,null);return Y.WebKitCSSMatrix?(6<(i=r.transform||r.webkitTransform).split(",").length&&(i=i.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new Y.WebKitCSSMatrix("none"===i?"":i)):a=(s=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===t&&(i=Y.WebKitCSSMatrix?s.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=Y.WebKitCSSMatrix?s.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0},parseUrlQuery:function(e){var t,a,i,s,r={},n=e||Y.location.href;if("string"==typeof n&&n.length)for(s=(a=(n=-1<n.indexOf("?")?n.replace(/\S*\?/,""):"").split("&").filter(function(e){return""!==e})).length,t=0;t<s;t+=1)i=a[t].replace(/#\S+/g,"").split("="),r[decodeURIComponent(i[0])]=void 0===i[1]?void 0:decodeURIComponent(i[1])||"";return r},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var a=Object(e[0]),i=1;i<e.length;i+=1){var s=e[i];if(null!=s)for(var r=Object.keys(Object(s)),n=0,o=r.length;n<o;n+=1){var l=r[n],d=Object.getOwnPropertyDescriptor(s,l);void 0!==d&&d.enumerable&&(V.isObject(a[l])&&V.isObject(s[l])?V.extend(a[l],s[l]):!V.isObject(a[l])&&V.isObject(s[l])?(a[l]={},V.extend(a[l],s[l])):a[l]=s[l])}}return a}},F=(i=f.createElement("div"),{touch:Y.Modernizr&&!0===Y.Modernizr.touch||!!("ontouchstart"in Y||Y.DocumentTouch&&f instanceof Y.DocumentTouch),pointerEvents:!!(Y.navigator.pointerEnabled||Y.PointerEvent||"maxTouchPoints"in Y.navigator),prefixedPointerEvents:!!Y.navigator.msPointerEnabled,transition:(a=i.style,"transition"in a||"webkitTransition"in a||"MozTransition"in a),transforms3d:Y.Modernizr&&!0===Y.Modernizr.csstransforms3d||(e=i.style,"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e),flexbox:function(){for(var e=i.style,t="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),a=0;a<t.length;a+=1)if(t[a]in e)return!0;return!1}(),observer:"MutationObserver"in Y||"WebkitMutationObserver"in Y,passiveListener:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});Y.addEventListener("testPassiveListener",null,t)}catch(e){}return e}(),gestures:"ongesturestart"in Y}),s=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},n={components:{configurable:!0}};s.prototype.on=function(e,t,a){var i=this;if("function"!=typeof t)return i;var s=a?"unshift":"push";return e.split(" ").forEach(function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e][s](t)}),i},s.prototype.once=function(i,s,e){var r=this;if("function"!=typeof s)return r;return r.on(i,function e(){for(var t=[],a=arguments.length;a--;)t[a]=arguments[a];s.apply(r,t),r.off(i,e)},e)},s.prototype.off=function(e,i){var s=this;return s.eventsListeners&&e.split(" ").forEach(function(a){void 0===i?s.eventsListeners[a]=[]:s.eventsListeners[a]&&s.eventsListeners[a].length&&s.eventsListeners[a].forEach(function(e,t){e===i&&s.eventsListeners[a].splice(t,1)})}),s},s.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var a,i,s,r=this;return r.eventsListeners&&("string"==typeof e[0]||Array.isArray(e[0])?(a=e[0],i=e.slice(1,e.length),s=r):(a=e[0].events,i=e[0].data,s=e[0].context||r),(Array.isArray(a)?a:a.split(" ")).forEach(function(e){if(r.eventsListeners&&r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(s,i)})}})),r},s.prototype.useModulesParams=function(a){var i=this;i.modules&&Object.keys(i.modules).forEach(function(e){var t=i.modules[e];t.params&&V.extend(a,t.params)})},s.prototype.useModules=function(i){void 0===i&&(i={});var s=this;s.modules&&Object.keys(s.modules).forEach(function(e){var a=s.modules[e],t=i[e]||{};a.instance&&Object.keys(a.instance).forEach(function(e){var t=a.instance[e];s[e]="function"==typeof t?t.bind(s):t}),a.on&&s.on&&Object.keys(a.on).forEach(function(e){s.on(e,a.on[e])}),a.create&&a.create.bind(s)(t)})},n.components.set=function(e){this.use&&this.use(e)},s.installModule=function(t){for(var e=[],a=arguments.length-1;0<a--;)e[a]=arguments[a+1];var i=this;i.prototype.modules||(i.prototype.modules={});var s=t.name||Object.keys(i.prototype.modules).length+"_"+V.now();return(i.prototype.modules[s]=t).proto&&Object.keys(t.proto).forEach(function(e){i.prototype[e]=t.proto[e]}),t.static&&Object.keys(t.static).forEach(function(e){i[e]=t.static[e]}),t.install&&t.install.apply(i,e),i},s.use=function(e){for(var t=[],a=arguments.length-1;0<a--;)t[a]=arguments[a+1];var i=this;return Array.isArray(e)?(e.forEach(function(e){return i.installModule(e)}),i):i.installModule.apply(i,[e].concat(t))},Object.defineProperties(s,n);var o={updateSize:function(){var e,t,a=this,i=a.$el;e=void 0!==a.params.width?a.params.width:i[0].clientWidth,t=void 0!==a.params.height?a.params.height:i[0].clientHeight,0===e&&a.isHorizontal()||0===t&&a.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),V.extend(a,{width:e,height:t,size:a.isHorizontal()?e:t}))},updateSlides:function(){var e=this,t=e.params,a=e.$wrapperEl,i=e.size,s=e.rtlTranslate,r=e.wrongRTL,n=e.virtual&&t.virtual.enabled,o=n?e.virtual.slides.length:e.slides.length,l=a.children("."+e.params.slideClass),d=n?e.virtual.slides.length:l.length,p=[],c=[],u=[],h=t.slidesOffsetBefore;"function"==typeof h&&(h=t.slidesOffsetBefore.call(e));var v=t.slidesOffsetAfter;"function"==typeof v&&(v=t.slidesOffsetAfter.call(e));var f=e.snapGrid.length,m=e.snapGrid.length,g=t.spaceBetween,b=-h,w=0,y=0;if(void 0!==i){var x,T;"string"==typeof g&&0<=g.indexOf("%")&&(g=parseFloat(g.replace("%",""))/100*i),e.virtualSize=-g,s?l.css({marginLeft:"",marginTop:""}):l.css({marginRight:"",marginBottom:""}),1<t.slidesPerColumn&&(x=Math.floor(d/t.slidesPerColumn)===d/e.params.slidesPerColumn?d:Math.ceil(d/t.slidesPerColumn)*t.slidesPerColumn,"auto"!==t.slidesPerView&&"row"===t.slidesPerColumnFill&&(x=Math.max(x,t.slidesPerView*t.slidesPerColumn)));for(var E,S=t.slidesPerColumn,C=x/S,M=C-(t.slidesPerColumn*C-d),k=0;k<d;k+=1){T=0;var P=l.eq(k);if(1<t.slidesPerColumn){var z=void 0,$=void 0,L=void 0;"column"===t.slidesPerColumnFill?(L=k-($=Math.floor(k/S))*S,(M<$||$===M&&L===S-1)&&S<=(L+=1)&&(L=0,$+=1),z=$+L*x/S,P.css({"-webkit-box-ordinal-group":z,"-moz-box-ordinal-group":z,"-ms-flex-order":z,"-webkit-order":z,order:z})):$=k-(L=Math.floor(k/C))*C,P.css("margin-"+(e.isHorizontal()?"top":"left"),0!==L&&t.spaceBetween&&t.spaceBetween+"px").attr("data-swiper-column",$).attr("data-swiper-row",L)}if("none"!==P.css("display")){if("auto"===t.slidesPerView){var I=Y.getComputedStyle(P[0],null),D=P[0].style.transform,O=P[0].style.webkitTransform;D&&(P[0].style.transform="none"),O&&(P[0].style.webkitTransform="none"),T=t.roundLengths?e.isHorizontal()?P.outerWidth(!0):P.outerHeight(!0):e.isHorizontal()?parseFloat(I.getPropertyValue("width"))+parseFloat(I.getPropertyValue("margin-left"))+parseFloat(I.getPropertyValue("margin-right")):parseFloat(I.getPropertyValue("height"))+parseFloat(I.getPropertyValue("margin-top"))+parseFloat(I.getPropertyValue("margin-bottom")),D&&(P[0].style.transform=D),O&&(P[0].style.webkitTransform=O),t.roundLengths&&(T=Math.floor(T))}else T=(i-(t.slidesPerView-1)*g)/t.slidesPerView,t.roundLengths&&(T=Math.floor(T)),l[k]&&(e.isHorizontal()?l[k].style.width=T+"px":l[k].style.height=T+"px");l[k]&&(l[k].swiperSlideSize=T),u.push(T),t.centeredSlides?(b=b+T/2+w/2+g,0===w&&0!==k&&(b=b-i/2-g),0===k&&(b=b-i/2-g),Math.abs(b)<.001&&(b=0),t.roundLengths&&(b=Math.floor(b)),y%t.slidesPerGroup==0&&p.push(b),c.push(b)):(t.roundLengths&&(b=Math.floor(b)),y%t.slidesPerGroup==0&&p.push(b),c.push(b),b=b+T+g),e.virtualSize+=T+g,w=T,y+=1}}if(e.virtualSize=Math.max(e.virtualSize,i)+v,s&&r&&("slide"===t.effect||"coverflow"===t.effect)&&a.css({width:e.virtualSize+t.spaceBetween+"px"}),F.flexbox&&!t.setWrapperSize||(e.isHorizontal()?a.css({width:e.virtualSize+t.spaceBetween+"px"}):a.css({height:e.virtualSize+t.spaceBetween+"px"})),1<t.slidesPerColumn&&(e.virtualSize=(T+t.spaceBetween)*x,e.virtualSize=Math.ceil(e.virtualSize/t.slidesPerColumn)-t.spaceBetween,e.isHorizontal()?a.css({width:e.virtualSize+t.spaceBetween+"px"}):a.css({height:e.virtualSize+t.spaceBetween+"px"}),t.centeredSlides)){E=[];for(var A=0;A<p.length;A+=1){var N=p[A];t.roundLengths&&(N=Math.floor(N)),p[A]<e.virtualSize+p[0]&&E.push(N)}p=E}if(!t.centeredSlides){E=[];for(var H=0;H<p.length;H+=1){var G=p[H];t.roundLengths&&(G=Math.floor(G)),p[H]<=e.virtualSize-i&&E.push(G)}p=E,1<Math.floor(e.virtualSize-i)-Math.floor(p[p.length-1])&&p.push(e.virtualSize-i)}if(0===p.length&&(p=[0]),0!==t.spaceBetween&&(e.isHorizontal()?s?l.css({marginLeft:g+"px"}):l.css({marginRight:g+"px"}):l.css({marginBottom:g+"px"})),t.centerInsufficientSlides){var B=0;if(u.forEach(function(e){B+=e+(t.spaceBetween?t.spaceBetween:0)}),(B-=t.spaceBetween)<i){var X=(i-B)/2;p.forEach(function(e,t){p[t]=e-X}),c.forEach(function(e,t){c[t]=e+X})}}V.extend(e,{slides:l,snapGrid:p,slidesGrid:c,slidesSizesGrid:u}),d!==o&&e.emit("slidesLengthChange"),p.length!==f&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),c.length!==m&&e.emit("slidesGridLengthChange"),(t.watchSlidesProgress||t.watchSlidesVisibility)&&e.updateSlidesOffset()}},updateAutoHeight:function(e){var t,a=this,i=[],s=0;if("number"==typeof e?a.setTransition(e):!0===e&&a.setTransition(a.params.speed),"auto"!==a.params.slidesPerView&&1<a.params.slidesPerView)for(t=0;t<Math.ceil(a.params.slidesPerView);t+=1){var r=a.activeIndex+t;if(r>a.slides.length)break;i.push(a.slides.eq(r)[0])}else i.push(a.slides.eq(a.activeIndex)[0]);for(t=0;t<i.length;t+=1)if(void 0!==i[t]){var n=i[t].offsetHeight;s=s<n?n:s}s&&a.$wrapperEl.css("height",s+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,a=t.params,i=t.slides,s=t.rtlTranslate;if(0!==i.length){void 0===i[0].swiperSlideOffset&&t.updateSlidesOffset();var r=-e;s&&(r=e),i.removeClass(a.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(var n=0;n<i.length;n+=1){var o=i[n],l=(r+(a.centeredSlides?t.minTranslate():0)-o.swiperSlideOffset)/(o.swiperSlideSize+a.spaceBetween);if(a.watchSlidesVisibility){var d=-(r-o.swiperSlideOffset),p=d+t.slidesSizesGrid[n];(0<=d&&d<t.size||0<p&&p<=t.size||d<=0&&p>=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(n),i.eq(n).addClass(a.slideVisibleClass))}o.progress=s?-l:l}t.visibleSlides=L(t.visibleSlides)}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,a=t.params,i=t.maxTranslate()-t.minTranslate(),s=t.progress,r=t.isBeginning,n=t.isEnd,o=r,l=n;0===i?n=r=!(s=0):(r=(s=(e-t.minTranslate())/i)<=0,n=1<=s),V.extend(t,{progress:s,isBeginning:r,isEnd:n}),(a.watchSlidesProgress||a.watchSlidesVisibility)&&t.updateSlidesProgress(e),r&&!o&&t.emit("reachBeginning toEdge"),n&&!l&&t.emit("reachEnd toEdge"),(o&&!r||l&&!n)&&t.emit("fromEdge"),t.emit("progress",s)},updateSlidesClasses:function(){var e,t=this,a=t.slides,i=t.params,s=t.$wrapperEl,r=t.activeIndex,n=t.realIndex,o=t.virtual&&i.virtual.enabled;a.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=o?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+r+'"]'):a.eq(r)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass));var l=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=a.eq(0)).addClass(i.slideNextClass);var d=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=a.eq(-1)).addClass(i.slidePrevClass),i.loop&&(l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,a=this,i=a.rtlTranslate?a.translate:-a.translate,s=a.slidesGrid,r=a.snapGrid,n=a.params,o=a.activeIndex,l=a.realIndex,d=a.snapIndex,p=e;if(void 0===p){for(var c=0;c<s.length;c+=1)void 0!==s[c+1]?i>=s[c]&&i<s[c+1]-(s[c+1]-s[c])/2?p=c:i>=s[c]&&i<s[c+1]&&(p=c+1):i>=s[c]&&(p=c);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if((t=0<=r.indexOf(i)?r.indexOf(i):Math.floor(p/n.slidesPerGroup))>=r.length&&(t=r.length-1),p!==o){var u=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);V.extend(a,{snapIndex:t,realIndex:u,previousIndex:o,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),l!==u&&a.emit("realIndexChange"),a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this,a=t.params,i=L(e.target).closest("."+a.slideClass)[0],s=!1;if(i)for(var r=0;r<t.slides.length;r+=1)t.slides[r]===i&&(s=!0);if(!i||!s)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=i,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(L(i).attr("data-swiper-slide-index"),10):t.clickedIndex=L(i).index(),a.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}};var d={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,a=this.rtlTranslate,i=this.translate,s=this.$wrapperEl;if(t.virtualTranslate)return a?-i:i;var r=V.getTranslate(s[0],e);return a&&(r=-r),r||0},setTranslate:function(e,t){var a=this,i=a.rtlTranslate,s=a.params,r=a.$wrapperEl,n=a.progress,o=0,l=0;a.isHorizontal()?o=i?-e:e:l=e,s.roundLengths&&(o=Math.floor(o),l=Math.floor(l)),s.virtualTranslate||(F.transforms3d?r.transform("translate3d("+o+"px, "+l+"px, 0px)"):r.transform("translate("+o+"px, "+l+"px)")),a.previousTranslate=a.translate,a.translate=a.isHorizontal()?o:l;var d=a.maxTranslate()-a.minTranslate();(0===d?0:(e-a.minTranslate())/d)!==n&&a.updateProgress(e),a.emit("setTranslate",a.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}};var p={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var a=this,i=a.activeIndex,s=a.params,r=a.previousIndex;s.autoHeight&&a.updateAutoHeight();var n=t;if(n||(n=r<i?"next":i<r?"prev":"reset"),a.emit("transitionStart"),e&&i!==r){if("reset"===n)return void a.emit("slideResetTransitionStart");a.emit("slideChangeTransitionStart"),"next"===n?a.emit("slideNextTransitionStart"):a.emit("slidePrevTransitionStart")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var a=this,i=a.activeIndex,s=a.previousIndex;a.animating=!1,a.setTransition(0);var r=t;if(r||(r=s<i?"next":i<s?"prev":"reset"),a.emit("transitionEnd"),e&&i!==s){if("reset"===r)return void a.emit("slideResetTransitionEnd");a.emit("slideChangeTransitionEnd"),"next"===r?a.emit("slideNextTransitionEnd"):a.emit("slidePrevTransitionEnd")}}};var c={slideTo:function(e,t,a,i){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===a&&(a=!0);var s=this,r=e;r<0&&(r=0);var n=s.params,o=s.snapGrid,l=s.slidesGrid,d=s.previousIndex,p=s.activeIndex,c=s.rtlTranslate;if(s.animating&&n.preventInteractionOnTransition)return!1;var u=Math.floor(r/n.slidesPerGroup);u>=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(d||0)&&a&&s.emit("beforeSlideChangeStart");var h,v=-o[u];if(s.updateProgress(v),n.normalizeSlideIndex)for(var f=0;f<l.length;f+=1)-Math.floor(100*v)>=Math.floor(100*l[f])&&(r=f);if(s.initialized&&r!==p){if(!s.allowSlideNext&&v<s.translate&&v<s.minTranslate())return!1;if(!s.allowSlidePrev&&v>s.translate&&v>s.maxTranslate()&&(p||0)!==r)return!1}return h=p<r?"next":r<p?"prev":"reset",c&&-v===s.translate||!c&&v===s.translate?(s.updateActiveIndex(r),n.autoHeight&&s.updateAutoHeight(),s.updateSlidesClasses(),"slide"!==n.effect&&s.setTranslate(v),"reset"!==h&&(s.transitionStart(a,h),s.transitionEnd(a,h)),!1):(0!==t&&F.transition?(s.setTransition(t),s.setTranslate(v),s.updateActiveIndex(r),s.updateSlidesClasses(),s.emit("beforeTransitionStart",t,i),s.transitionStart(a,h),s.animating||(s.animating=!0,s.onSlideToWrapperTransitionEnd||(s.onSlideToWrapperTransitionEnd=function(e){s&&!s.destroyed&&e.target===this&&(s.$wrapperEl[0].removeEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].removeEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd),s.onSlideToWrapperTransitionEnd=null,delete s.onSlideToWrapperTransitionEnd,s.transitionEnd(a,h))}),s.$wrapperEl[0].addEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].addEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd))):(s.setTransition(0),s.setTranslate(v),s.updateActiveIndex(r),s.updateSlidesClasses(),s.emit("beforeTransitionStart",t,i),s.transitionStart(a,h),s.transitionEnd(a,h)),!0)},slideToLoop:function(e,t,a,i){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===a&&(a=!0);var s=e;return this.params.loop&&(s+=this.loopedSlides),this.slideTo(s,t,a,i)},slideNext:function(e,t,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var i=this,s=i.params,r=i.animating;return s.loop?!r&&(i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft,i.slideTo(i.activeIndex+s.slidesPerGroup,e,t,a)):i.slideTo(i.activeIndex+s.slidesPerGroup,e,t,a)},slidePrev:function(e,t,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var i=this,s=i.params,r=i.animating,n=i.snapGrid,o=i.slidesGrid,l=i.rtlTranslate;if(s.loop){if(r)return!1;i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft}function d(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}var p,c=d(l?i.translate:-i.translate),u=n.map(function(e){return d(e)}),h=(o.map(function(e){return d(e)}),n[u.indexOf(c)],n[u.indexOf(c)-1]);return void 0!==h&&(p=o.indexOf(h))<0&&(p=i.activeIndex-1),i.slideTo(p,e,t,a)},slideReset:function(e,t,a){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,a)},slideToClosest:function(e,t,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var i=this,s=i.activeIndex,r=Math.floor(s/i.params.slidesPerGroup);if(r<i.snapGrid.length-1){var n=i.rtlTranslate?i.translate:-i.translate,o=i.snapGrid[r];(i.snapGrid[r+1]-o)/2<n-o&&(s=i.params.slidesPerGroup)}return i.slideTo(s,e,t,a)},slideToClickedSlide:function(){var e,t=this,a=t.params,i=t.$wrapperEl,s="auto"===a.slidesPerView?t.slidesPerViewDynamic():a.slidesPerView,r=t.clickedIndex;if(a.loop){if(t.animating)return;e=parseInt(L(t.clickedSlide).attr("data-swiper-slide-index"),10),a.centeredSlides?r<t.loopedSlides-s/2||r>t.slides.length-t.loopedSlides+s/2?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),V.nextTick(function(){t.slideTo(r)})):t.slideTo(r):r>t.slides.length-s?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),V.nextTick(function(){t.slideTo(r)})):t.slideTo(r)}else t.slideTo(r)}};var u={loopCreate:function(){var i=this,e=i.params,t=i.$wrapperEl;t.children("."+e.slideClass+"."+e.slideDuplicateClass).remove();var s=t.children("."+e.slideClass);if(e.loopFillGroupWithBlank){var a=e.slidesPerGroup-s.length%e.slidesPerGroup;if(a!==e.slidesPerGroup){for(var r=0;r<a;r+=1){var n=L(f.createElement("div")).addClass(e.slideClass+" "+e.slideBlankClass);t.append(n)}s=t.children("."+e.slideClass)}}"auto"!==e.slidesPerView||e.loopedSlides||(e.loopedSlides=s.length),i.loopedSlides=parseInt(e.loopedSlides||e.slidesPerView,10),i.loopedSlides+=e.loopAdditionalSlides,i.loopedSlides>s.length&&(i.loopedSlides=s.length);var o=[],l=[];s.each(function(e,t){var a=L(t);e<i.loopedSlides&&l.push(t),e<s.length&&e>=s.length-i.loopedSlides&&o.push(t),a.attr("data-swiper-slide-index",e)});for(var d=0;d<l.length;d+=1)t.append(L(l[d].cloneNode(!0)).addClass(e.slideDuplicateClass));for(var p=o.length-1;0<=p;p-=1)t.prepend(L(o[p].cloneNode(!0)).addClass(e.slideDuplicateClass))},loopFix:function(){var e,t=this,a=t.params,i=t.activeIndex,s=t.slides,r=t.loopedSlides,n=t.allowSlidePrev,o=t.allowSlideNext,l=t.snapGrid,d=t.rtlTranslate;t.allowSlidePrev=!0,t.allowSlideNext=!0;var p=-l[i]-t.getTranslate();i<r?(e=s.length-3*r+i,e+=r,t.slideTo(e,0,!1,!0)&&0!==p&&t.setTranslate((d?-t.translate:t.translate)-p)):("auto"===a.slidesPerView&&2*r<=i||i>=s.length-r)&&(e=-s.length+i+r,e+=r,t.slideTo(e,0,!1,!0)&&0!==p&&t.setTranslate((d?-t.translate:t.translate)-p));t.allowSlidePrev=n,t.allowSlideNext=o},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,a=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass).remove(),a.removeAttr("data-swiper-slide-index")}};var h={setGrabCursor:function(e){if(!(F.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){F.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}};var v={appendSlide:function(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&a.append(e[s]);else a.append(e);i.loop&&t.loopCreate(),i.observer&&F.observer||t.update()},prependSlide:function(e){var t=this,a=t.params,i=t.$wrapperEl,s=t.activeIndex;a.loop&&t.loopDestroy();var r=s+1;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)e[n]&&i.prepend(e[n]);r=s+e.length}else i.prepend(e);a.loop&&t.loopCreate(),a.observer&&F.observer||t.update(),t.slideTo(r,0,!1)},addSlide:function(e,t){var a=this,i=a.$wrapperEl,s=a.params,r=a.activeIndex;s.loop&&(r-=a.loopedSlides,a.loopDestroy(),a.slides=i.children("."+s.slideClass));var n=a.slides.length;if(e<=0)a.prependSlide(t);else if(n<=e)a.appendSlide(t);else{for(var o=e<r?r+1:r,l=[],d=n-1;e<=d;d-=1){var p=a.slides.eq(d);p.remove(),l.unshift(p)}if("object"==typeof t&&"length"in t){for(var c=0;c<t.length;c+=1)t[c]&&i.append(t[c]);o=e<r?r+t.length:r}else i.append(t);for(var u=0;u<l.length;u+=1)i.append(l[u]);s.loop&&a.loopCreate(),s.observer&&F.observer||a.update(),s.loop?a.slideTo(o+a.loopedSlides,0,!1):a.slideTo(o,0,!1)}},removeSlide:function(e){var t=this,a=t.params,i=t.$wrapperEl,s=t.activeIndex;a.loop&&(s-=t.loopedSlides,t.loopDestroy(),t.slides=i.children("."+a.slideClass));var r,n=s;if("object"==typeof e&&"length"in e){for(var o=0;o<e.length;o+=1)r=e[o],t.slides[r]&&t.slides.eq(r).remove(),r<n&&(n-=1);n=Math.max(n,0)}else r=e,t.slides[r]&&t.slides.eq(r).remove(),r<n&&(n-=1),n=Math.max(n,0);a.loop&&t.loopCreate(),a.observer&&F.observer||t.update(),a.loop?t.slideTo(n+t.loopedSlides,0,!1):t.slideTo(n,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},m=function(){var e=Y.navigator.userAgent,t={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:Y.cordova||Y.phonegap,phonegap:Y.cordova||Y.phonegap},a=e.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),i=e.match(/(Android);?[\s\/]+([\d.]+)?/),s=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),n=!s&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(a&&(t.os="windows",t.osVersion=a[2],t.windows=!0),i&&!a&&(t.os="android",t.osVersion=i[2],t.android=!0,t.androidChrome=0<=e.toLowerCase().indexOf("chrome")),(s||n||r)&&(t.os="ios",t.ios=!0),n&&!r&&(t.osVersion=n[2].replace(/_/g,"."),t.iphone=!0),s&&(t.osVersion=s[2].replace(/_/g,"."),t.ipad=!0),r&&(t.osVersion=r[3]?r[3].replace(/_/g,"."):null,t.iphone=!0),t.ios&&t.osVersion&&0<=e.indexOf("Version/")&&"10"===t.osVersion.split(".")[0]&&(t.osVersion=e.toLowerCase().split("version/")[1].split(" ")[0]),t.desktop=!(t.os||t.android||t.webView),t.webView=(n||s||r)&&e.match(/.*AppleWebKit(?!.*Safari)/i),t.os&&"ios"===t.os){var o=t.osVersion.split("."),l=f.querySelector('meta[name="viewport"]');t.minimalUi=!t.webView&&(r||n)&&(1*o[0]==7?1<=1*o[1]:7<1*o[0])&&l&&0<=l.getAttribute("content").indexOf("minimal-ui")}return t.pixelRatio=Y.devicePixelRatio||1,t}();function g(){var e=this,t=e.params,a=e.el;if(!a||0!==a.offsetWidth){t.breakpoints&&e.setBreakpoint();var i=e.allowSlideNext,s=e.allowSlidePrev,r=e.snapGrid;if(e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),t.freeMode){var n=Math.min(Math.max(e.translate,e.maxTranslate()),e.minTranslate());e.setTranslate(n),e.updateActiveIndex(),e.updateSlidesClasses(),t.autoHeight&&e.updateAutoHeight()}else e.updateSlidesClasses(),("auto"===t.slidesPerView||1<t.slidesPerView)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0);e.allowSlidePrev=s,e.allowSlideNext=i,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}}var b={attachEvents:function(){var e=this,t=e.params,a=e.touchEvents,i=e.el,s=e.wrapperEl;e.onTouchStart=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches;if(!t.animating||!i.preventInteractionOnTransition){var r=e;if(r.originalEvent&&(r=r.originalEvent),a.isTouchEvent="touchstart"===r.type,(a.isTouchEvent||!("which"in r)||3!==r.which)&&!(!a.isTouchEvent&&"button"in r&&0<r.button||a.isTouched&&a.isMoved))if(i.noSwiping&&L(r.target).closest(i.noSwipingSelector?i.noSwipingSelector:"."+i.noSwipingClass)[0])t.allowClick=!0;else if(!i.swipeHandler||L(r).closest(i.swipeHandler)[0]){s.currentX="touchstart"===r.type?r.targetTouches[0].pageX:r.pageX,s.currentY="touchstart"===r.type?r.targetTouches[0].pageY:r.pageY;var n=s.currentX,o=s.currentY,l=i.edgeSwipeDetection||i.iOSEdgeSwipeDetection,d=i.edgeSwipeThreshold||i.iOSEdgeSwipeThreshold;if(!l||!(n<=d||n>=Y.screen.width-d)){if(V.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),s.startX=n,s.startY=o,a.touchStartTime=V.now(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,0<i.threshold&&(a.allowThresholdMove=!1),"touchstart"!==r.type){var p=!0;L(r.target).is(a.formElements)&&(p=!1),f.activeElement&&L(f.activeElement).is(a.formElements)&&f.activeElement!==r.target&&f.activeElement.blur();var c=p&&t.allowTouchMove&&i.touchStartPreventDefault;(i.touchStartForcePreventDefault||c)&&r.preventDefault()}t.emit("touchStart",r)}}}}.bind(e),e.onTouchMove=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=e;if(n.originalEvent&&(n=n.originalEvent),a.isTouched){if(!a.isTouchEvent||"mousemove"!==n.type){var o="touchmove"===n.type?n.targetTouches[0].pageX:n.pageX,l="touchmove"===n.type?n.targetTouches[0].pageY:n.pageY;if(n.preventedByNestedSwiper)return s.startX=o,void(s.startY=l);if(!t.allowTouchMove)return t.allowClick=!1,void(a.isTouched&&(V.extend(s,{startX:o,startY:l,currentX:o,currentY:l}),a.touchStartTime=V.now()));if(a.isTouchEvent&&i.touchReleaseOnEdges&&!i.loop)if(t.isVertical()){if(l<s.startY&&t.translate<=t.maxTranslate()||l>s.startY&&t.translate>=t.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(o<s.startX&&t.translate<=t.maxTranslate()||o>s.startX&&t.translate>=t.minTranslate())return;if(a.isTouchEvent&&f.activeElement&&n.target===f.activeElement&&L(n.target).is(a.formElements))return a.isMoved=!0,void(t.allowClick=!1);if(a.allowTouchCallbacks&&t.emit("touchMove",n),!(n.targetTouches&&1<n.targetTouches.length)){s.currentX=o,s.currentY=l;var d,p=s.currentX-s.startX,c=s.currentY-s.startY;if(!(t.params.threshold&&Math.sqrt(Math.pow(p,2)+Math.pow(c,2))<t.params.threshold))if(void 0===a.isScrolling&&(t.isHorizontal()&&s.currentY===s.startY||t.isVertical()&&s.currentX===s.startX?a.isScrolling=!1:25<=p*p+c*c&&(d=180*Math.atan2(Math.abs(c),Math.abs(p))/Math.PI,a.isScrolling=t.isHorizontal()?d>i.touchAngle:90-d>i.touchAngle)),a.isScrolling&&t.emit("touchMoveOpposite",n),void 0===a.startMoving&&(s.currentX===s.startX&&s.currentY===s.startY||(a.startMoving=!0)),a.isScrolling)a.isTouched=!1;else if(a.startMoving){t.allowClick=!1,n.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&n.stopPropagation(),a.isMoved||(i.loop&&t.loopFix(),a.startTranslate=t.getTranslate(),t.setTransition(0),t.animating&&t.$wrapperEl.trigger("webkitTransitionEnd transitionend"),a.allowMomentumBounce=!1,!i.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",n)),t.emit("sliderMove",n),a.isMoved=!0;var u=t.isHorizontal()?p:c;s.diff=u,u*=i.touchRatio,r&&(u=-u),t.swipeDirection=0<u?"prev":"next",a.currentTranslate=u+a.startTranslate;var h=!0,v=i.resistanceRatio;if(i.touchReleaseOnEdges&&(v=0),0<u&&a.currentTranslate>t.minTranslate()?(h=!1,i.resistance&&(a.currentTranslate=t.minTranslate()-1+Math.pow(-t.minTranslate()+a.startTranslate+u,v))):u<0&&a.currentTranslate<t.maxTranslate()&&(h=!1,i.resistance&&(a.currentTranslate=t.maxTranslate()+1-Math.pow(t.maxTranslate()-a.startTranslate-u,v))),h&&(n.preventedByNestedSwiper=!0),!t.allowSlideNext&&"next"===t.swipeDirection&&a.currentTranslate<a.startTranslate&&(a.currentTranslate=a.startTranslate),!t.allowSlidePrev&&"prev"===t.swipeDirection&&a.currentTranslate>a.startTranslate&&(a.currentTranslate=a.startTranslate),0<i.threshold){if(!(Math.abs(u)>i.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);if(!a.allowThresholdMove)return a.allowThresholdMove=!0,s.startX=s.currentX,s.startY=s.currentY,a.currentTranslate=a.startTranslate,void(s.diff=t.isHorizontal()?s.currentX-s.startX:s.currentY-s.startY)}i.followFinger&&((i.freeMode||i.watchSlidesProgress||i.watchSlidesVisibility)&&(t.updateActiveIndex(),t.updateSlidesClasses()),i.freeMode&&(0===a.velocities.length&&a.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:a.touchStartTime}),a.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:V.now()})),t.updateProgress(a.currentTranslate),t.setTranslate(a.currentTranslate))}}}}else a.startMoving&&a.isScrolling&&t.emit("touchMoveOpposite",n)}.bind(e),e.onTouchEnd=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,d=e;if(d.originalEvent&&(d=d.originalEvent),a.allowTouchCallbacks&&t.emit("touchEnd",d),a.allowTouchCallbacks=!1,!a.isTouched)return a.isMoved&&i.grabCursor&&t.setGrabCursor(!1),a.isMoved=!1,void(a.startMoving=!1);i.grabCursor&&a.isMoved&&a.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=V.now(),u=c-a.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap",d),u<300&&300<c-a.lastClickTime&&(a.clickTimeout&&clearTimeout(a.clickTimeout),a.clickTimeout=V.nextTick(function(){t&&!t.destroyed&&t.emit("click",d)},300)),u<300&&c-a.lastClickTime<300&&(a.clickTimeout&&clearTimeout(a.clickTimeout),t.emit("doubleTap",d))),a.lastClickTime=V.now(),V.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!a.isTouched||!a.isMoved||!t.swipeDirection||0===s.diff||a.currentTranslate===a.startTranslate)return a.isTouched=!1,a.isMoved=!1,void(a.startMoving=!1);if(a.isTouched=!1,a.isMoved=!1,a.startMoving=!1,p=i.followFinger?r?t.translate:-t.translate:-a.currentTranslate,i.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(i.freeModeMomentum){if(1<a.velocities.length){var h=a.velocities.pop(),v=a.velocities.pop(),f=h.position-v.position,m=h.time-v.time;t.velocity=f/m,t.velocity/=2,Math.abs(t.velocity)<i.freeModeMinimumVelocity&&(t.velocity=0),(150<m||300<V.now()-h.time)&&(t.velocity=0)}else t.velocity=0;t.velocity*=i.freeModeMomentumVelocityRatio,a.velocities.length=0;var g=1e3*i.freeModeMomentumRatio,b=t.velocity*g,w=t.translate+b;r&&(w=-w);var y,x,T=!1,E=20*Math.abs(t.velocity)*i.freeModeMomentumBounceRatio;if(w<t.maxTranslate())i.freeModeMomentumBounce?(w+t.maxTranslate()<-E&&(w=t.maxTranslate()-E),y=t.maxTranslate(),T=!0,a.allowMomentumBounce=!0):w=t.maxTranslate(),i.loop&&i.centeredSlides&&(x=!0);else if(w>t.minTranslate())i.freeModeMomentumBounce?(w-t.minTranslate()>E&&(w=t.minTranslate()+E),y=t.minTranslate(),T=!0,a.allowMomentumBounce=!0):w=t.minTranslate(),i.loop&&i.centeredSlides&&(x=!0);else if(i.freeModeSticky){for(var S,C=0;C<l.length;C+=1)if(l[C]>-w){S=C;break}w=-(w=Math.abs(l[S]-w)<Math.abs(l[S-1]-w)||"next"===t.swipeDirection?l[S]:l[S-1])}if(x&&t.once("transitionEnd",function(){t.loopFix()}),0!==t.velocity)g=r?Math.abs((-w-t.translate)/t.velocity):Math.abs((w-t.translate)/t.velocity);else if(i.freeModeSticky)return void t.slideToClosest();i.freeModeMomentumBounce&&T?(t.updateProgress(y),t.setTransition(g),t.setTranslate(w),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&a.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(i.speed),t.setTranslate(y),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(w),t.setTransition(g),t.setTranslate(w),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(w),t.updateActiveIndex(),t.updateSlidesClasses()}else if(i.freeModeSticky)return void t.slideToClosest();(!i.freeModeMomentum||u>=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,k=t.slidesSizesGrid[0],P=0;P<o.length;P+=i.slidesPerGroup)void 0!==o[P+i.slidesPerGroup]?p>=o[P]&&p<o[P+i.slidesPerGroup]&&(k=o[(M=P)+i.slidesPerGroup]-o[P]):p>=o[P]&&(M=P,k=o[o.length-1]-o[o.length-2]);var z=(p-o[M])/k;if(u>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(z>=i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(z>1-i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+i.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}}.bind(e),e.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(e);var r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(F.touch||!F.pointerEvents&&!F.prefixedPointerEvents){if(F.touch){var o=!("touchstart"!==a.start||!F.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(a.start,e.onTouchStart,o),r.addEventListener(a.move,e.onTouchMove,F.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!m.ios&&!m.android||t.simulateTouch&&!F.touch&&m.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),f.addEventListener("mousemove",e.onTouchMove,n),f.addEventListener("mouseup",e.onTouchEnd,!1))}else r.addEventListener(a.start,e.onTouchStart,!1),f.addEventListener(a.move,e.onTouchMove,n),f.addEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),e.on(m.ios||m.android?"resize orientationchange observerUpdate":"resize observerUpdate",g,!0)},detachEvents:function(){var e=this,t=e.params,a=e.touchEvents,i=e.el,s=e.wrapperEl,r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(F.touch||!F.pointerEvents&&!F.prefixedPointerEvents){if(F.touch){var o=!("onTouchStart"!==a.start||!F.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(a.start,e.onTouchStart,o),r.removeEventListener(a.move,e.onTouchMove,n),r.removeEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!m.ios&&!m.android||t.simulateTouch&&!F.touch&&m.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),f.removeEventListener("mousemove",e.onTouchMove,n),f.removeEventListener("mouseup",e.onTouchEnd,!1))}else r.removeEventListener(a.start,e.onTouchStart,!1),f.removeEventListener(a.move,e.onTouchMove,n),f.removeEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),e.off(m.ios||m.android?"resize orientationchange observerUpdate":"resize observerUpdate",g)}};var w,y={setBreakpoint:function(){var e=this,t=e.activeIndex,a=e.initialized,i=e.loopedSlides;void 0===i&&(i=0);var s=e.params,r=s.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var n=e.getBreakpoint(r);if(n&&e.currentBreakpoint!==n){var o=n in r?r[n]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var l=o||e.originalParams,d=s.loop&&l.slidesPerView!==s.slidesPerView;V.extend(e.params,l),V.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=n,d&&a&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-i+e.loopedSlides,0,!1)),e.emit("breakpoint",l)}}},getBreakpoint:function(e){if(e){var t=!1,a=[];Object.keys(e).forEach(function(e){a.push(e)}),a.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var i=0;i<a.length;i+=1){var s=a[i];this.params.breakpointsInverse?s<=Y.innerWidth&&(t=s):s>=Y.innerWidth&&!t&&(t=s)}return t||"max"}}},I={isIE:!!Y.navigator.userAgent.match(/Trident/g)||!!Y.navigator.userAgent.match(/MSIE/g),isEdge:!!Y.navigator.userAgent.match(/Edge/g),isSafari:(w=Y.navigator.userAgent.toLowerCase(),0<=w.indexOf("safari")&&w.indexOf("chrome")<0&&w.indexOf("android")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(Y.navigator.userAgent)};var x={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventInteractionOnTransition:!1,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsInverse:!1,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},T={update:o,translate:d,transition:p,slide:c,loop:u,grabCursor:h,manipulation:v,events:b,breakpoints:y,checkOverflow:{checkOverflow:function(){var e=this,t=e.isLocked;e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),t&&t!==e.isLocked&&(e.isEnd=!1,e.navigation.update())}},classes:{addClasses:function(){var t=this.classNames,a=this.params,e=this.rtl,i=this.$el,s=[];s.push(a.direction),a.freeMode&&s.push("free-mode"),F.flexbox||s.push("no-flexbox"),a.autoHeight&&s.push("autoheight"),e&&s.push("rtl"),1<a.slidesPerColumn&&s.push("multirow"),m.android&&s.push("android"),m.ios&&s.push("ios"),(I.isIE||I.isEdge)&&(F.pointerEvents||F.prefixedPointerEvents)&&s.push("wp8-"+a.direction),s.forEach(function(e){t.push(a.containerModifierClass+e)}),i.addClass(t.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,t,a,i,s,r){var n;function o(){r&&r()}e.complete&&s?o():t?((n=new Y.Image).onload=o,n.onerror=o,i&&(n.sizes=i),a&&(n.srcset=a),t&&(n.src=t)):o()},preloadImages:function(){var e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var a=0;a<e.imagesToLoad.length;a+=1){var i=e.imagesToLoad[a];e.loadImage(i,i.currentSrc||i.getAttribute("src"),i.srcset||i.getAttribute("srcset"),i.sizes||i.getAttribute("sizes"),!0,t)}}}},E={},S=function(u){function h(){for(var e,t,s,a=[],i=arguments.length;i--;)a[i]=arguments[i];1===a.length&&a[0].constructor&&a[0].constructor===Object?s=a[0]:(t=(e=a)[0],s=e[1]),s||(s={}),s=V.extend({},s),t&&!s.el&&(s.el=t),u.call(this,s),Object.keys(T).forEach(function(t){Object.keys(T[t]).forEach(function(e){h.prototype[e]||(h.prototype[e]=T[t][e])})});var r=this;void 0===r.modules&&(r.modules={}),Object.keys(r.modules).forEach(function(e){var t=r.modules[e];if(t.params){var a=Object.keys(t.params)[0],i=t.params[a];if("object"!=typeof i||null===i)return;if(!(a in s&&"enabled"in i))return;!0===s[a]&&(s[a]={enabled:!0}),"object"!=typeof s[a]||"enabled"in s[a]||(s[a].enabled=!0),s[a]||(s[a]={enabled:!1})}});var n=V.extend({},x);r.useModulesParams(n),r.params=V.extend({},n,E,s),r.originalParams=V.extend({},r.params),r.passedParams=V.extend({},s);var o=(r.$=L)(r.params.el);if(t=o[0]){if(1<o.length){var l=[];return o.each(function(e,t){var a=V.extend({},s,{el:t});l.push(new h(a))}),l}t.swiper=r,o.data("swiper",r);var d,p,c=o.children("."+r.params.wrapperClass);return V.extend(r,{$el:o,el:t,$wrapperEl:c,wrapperEl:c[0],classNames:[],slides:L(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===r.params.direction},isVertical:function(){return"vertical"===r.params.direction},rtl:"rtl"===t.dir.toLowerCase()||"rtl"===o.css("direction"),rtlTranslate:"horizontal"===r.params.direction&&("rtl"===t.dir.toLowerCase()||"rtl"===o.css("direction")),wrongRTL:"-webkit-box"===c.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:(d=["touchstart","touchmove","touchend"],p=["mousedown","mousemove","mouseup"],F.pointerEvents?p=["pointerdown","pointermove","pointerup"]:F.prefixedPointerEvents&&(p=["MSPointerDown","MSPointerMove","MSPointerUp"]),r.touchEventsTouch={start:d[0],move:d[1],end:d[2]},r.touchEventsDesktop={start:p[0],move:p[1],end:p[2]},F.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:V.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.useModules(),r.params.init&&r.init(),r}}u&&(h.__proto__=u);var e={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return((h.prototype=Object.create(u&&u.prototype)).constructor=h).prototype.slidesPerViewDynamic=function(){var e=this,t=e.params,a=e.slides,i=e.slidesGrid,s=e.size,r=e.activeIndex,n=1;if(t.centeredSlides){for(var o,l=a[r].swiperSlideSize,d=r+1;d<a.length;d+=1)a[d]&&!o&&(n+=1,s<(l+=a[d].swiperSlideSize)&&(o=!0));for(var p=r-1;0<=p;p-=1)a[p]&&!o&&(n+=1,s<(l+=a[p].swiperSlideSize)&&(o=!0))}else for(var c=r+1;c<a.length;c+=1)i[c]-i[r]<s&&(n+=1);return n},h.prototype.update=function(){var a=this;if(a&&!a.destroyed){var e=a.snapGrid,t=a.params;t.breakpoints&&a.setBreakpoint(),a.updateSize(),a.updateSlides(),a.updateProgress(),a.updateSlidesClasses(),a.params.freeMode?(i(),a.params.autoHeight&&a.updateAutoHeight()):(("auto"===a.params.slidesPerView||1<a.params.slidesPerView)&&a.isEnd&&!a.params.centeredSlides?a.slideTo(a.slides.length-1,0,!1,!0):a.slideTo(a.activeIndex,0,!1,!0))||i(),t.watchOverflow&&e!==a.snapGrid&&a.checkOverflow(),a.emit("update")}function i(){var e=a.rtlTranslate?-1*a.translate:a.translate,t=Math.min(Math.max(e,a.maxTranslate()),a.minTranslate());a.setTranslate(t),a.updateActiveIndex(),a.updateSlidesClasses()}},h.prototype.init=function(){var e=this;e.initialized||(e.emit("beforeInit"),e.params.breakpoints&&e.setBreakpoint(),e.addClasses(),e.params.loop&&e.loopCreate(),e.updateSize(),e.updateSlides(),e.params.watchOverflow&&e.checkOverflow(),e.params.grabCursor&&e.setGrabCursor(),e.params.preloadImages&&e.preloadImages(),e.params.loop?e.slideTo(e.params.initialSlide+e.loopedSlides,0,e.params.runCallbacksOnInit):e.slideTo(e.params.initialSlide,0,e.params.runCallbacksOnInit),e.attachEvents(),e.initialized=!0,e.emit("init"))},h.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var a=this,i=a.params,s=a.$el,r=a.$wrapperEl,n=a.slides;return void 0===a.params||a.destroyed||(a.emit("beforeDestroy"),a.initialized=!1,a.detachEvents(),i.loop&&a.loopDestroy(),t&&(a.removeClasses(),s.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([i.slideVisibleClass,i.slideActiveClass,i.slideNextClass,i.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),a.emit("destroy"),Object.keys(a.eventsListeners).forEach(function(e){a.off(e)}),!1!==e&&(a.$el[0].swiper=null,a.$el.data("swiper",null),V.deleteProps(a)),a.destroyed=!0),null},h.extendDefaults=function(e){V.extend(E,e)},e.extendedDefaults.get=function(){return E},e.defaults.get=function(){return x},e.Class.get=function(){return u},e.$.get=function(){return L},Object.defineProperties(h,e),h}(s),C={name:"device",proto:{device:m},static:{device:m}},M={name:"support",proto:{support:F},static:{support:F}},k={name:"browser",proto:{browser:I},static:{browser:I}},P={name:"resize",create:function(){var e=this;V.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){Y.addEventListener("resize",this.resize.resizeHandler),Y.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){Y.removeEventListener("resize",this.resize.resizeHandler),Y.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},z={func:Y.MutationObserver||Y.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var a=this,i=new z.func(function(e){if(1!==e.length){var t=function(){a.emit("observerUpdate",e[0])};Y.requestAnimationFrame?Y.requestAnimationFrame(t):Y.setTimeout(t,0)}else a.emit("observerUpdate",e[0])});i.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),a.observer.observers.push(i)},init:function(){var e=this;if(F.observer&&e.params.observer){if(e.params.observeParents)for(var t=e.$el.parents(),a=0;a<t.length;a+=1)e.observer.attach(t[a]);e.observer.attach(e.$el[0],{childList:!1}),e.observer.attach(e.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},$={name:"observer",params:{observer:!1,observeParents:!1},create:function(){V.extend(this,{observer:{init:z.init.bind(this),attach:z.attach.bind(this),destroy:z.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},D={update:function(e){var t=this,a=t.params,i=a.slidesPerView,s=a.slidesPerGroup,r=a.centeredSlides,n=t.params.virtual,o=n.addSlidesBefore,l=n.addSlidesAfter,d=t.virtual,p=d.from,c=d.to,u=d.slides,h=d.slidesGrid,v=d.renderSlide,f=d.offset;t.updateActiveIndex();var m,g,b,w=t.activeIndex||0;m=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",r?(g=Math.floor(i/2)+s+o,b=Math.floor(i/2)+s+l):(g=i+(s-1)+o,b=s+l);var y=Math.max((w||0)-b,0),x=Math.min((w||0)+g,u.length-1),T=(t.slidesGrid[y]||0)-(t.slidesGrid[0]||0);function E(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(V.extend(t.virtual,{from:y,to:x,offset:T,slidesGrid:t.slidesGrid}),p===y&&c===x&&!e)return t.slidesGrid!==h&&T!==f&&t.slides.css(m,T+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:T,from:y,to:x,slides:function(){for(var e=[],t=y;t<=x;t+=1)e.push(u[t]);return e}()}),void E();var S=[],C=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var M=p;M<=c;M+=1)(M<y||x<M)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+M+'"]').remove();for(var k=0;k<u.length;k+=1)y<=k&&k<=x&&(void 0===c||e?C.push(k):(c<k&&C.push(k),k<p&&S.push(k)));C.forEach(function(e){t.$wrapperEl.append(v(u[e],e))}),S.sort(function(e,t){return t-e}).forEach(function(e){t.$wrapperEl.prepend(v(u[e],e))}),t.$wrapperEl.children(".swiper-slide").css(m,T+"px"),E()},renderSlide:function(e,t){var a=this,i=a.params.virtual;if(i.cache&&a.virtual.cache[t])return a.virtual.cache[t];var s=i.renderSlide?L(i.renderSlide.call(a,e,t)):L('<div class="'+a.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){var t=this;if(t.virtual.slides.unshift(e),t.params.virtual.cache){var a=t.virtual.cache,i={};Object.keys(a).forEach(function(e){i[e+1]=a[e]}),t.virtual.cache=i}t.virtual.update(!0),t.slideNext(0)}},O={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,addSlidesBefore:0,addSlidesAfter:0}},create:function(){var e=this;V.extend(e,{virtual:{update:D.update.bind(e),appendSlide:D.appendSlide.bind(e),prependSlide:D.prependSlide.bind(e),renderSlide:D.renderSlide.bind(e),slides:e.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){var e=this;if(e.params.virtual.enabled){e.classNames.push(e.params.containerModifierClass+"virtual");var t={watchSlidesProgress:!0};V.extend(e.params,t),V.extend(e.originalParams,t),e.params.initialSlide||e.virtual.update()}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},A={handle:function(e){var t=this,a=t.rtlTranslate,i=e;i.originalEvent&&(i=i.originalEvent);var s=i.keyCode||i.charCode;if(!t.allowSlideNext&&(t.isHorizontal()&&39===s||t.isVertical()&&40===s))return!1;if(!t.allowSlidePrev&&(t.isHorizontal()&&37===s||t.isVertical()&&38===s))return!1;if(!(i.shiftKey||i.altKey||i.ctrlKey||i.metaKey||f.activeElement&&f.activeElement.nodeName&&("input"===f.activeElement.nodeName.toLowerCase()||"textarea"===f.activeElement.nodeName.toLowerCase()))){if(t.params.keyboard.onlyInViewport&&(37===s||39===s||38===s||40===s)){var r=!1;if(0<t.$el.parents("."+t.params.slideClass).length&&0===t.$el.parents("."+t.params.slideActiveClass).length)return;var n=Y.innerWidth,o=Y.innerHeight,l=t.$el.offset();a&&(l.left-=t.$el[0].scrollLeft);for(var d=[[l.left,l.top],[l.left+t.width,l.top],[l.left,l.top+t.height],[l.left+t.width,l.top+t.height]],p=0;p<d.length;p+=1){var c=d[p];0<=c[0]&&c[0]<=n&&0<=c[1]&&c[1]<=o&&(r=!0)}if(!r)return}t.isHorizontal()?(37!==s&&39!==s||(i.preventDefault?i.preventDefault():i.returnValue=!1),(39===s&&!a||37===s&&a)&&t.slideNext(),(37===s&&!a||39===s&&a)&&t.slidePrev()):(38!==s&&40!==s||(i.preventDefault?i.preventDefault():i.returnValue=!1),40===s&&t.slideNext(),38===s&&t.slidePrev()),t.emit("keyPress",s)}},enable:function(){this.keyboard.enabled||(L(f).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(L(f).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},N={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){V.extend(this,{keyboard:{enabled:!1,enable:A.enable.bind(this),disable:A.disable.bind(this),handle:A.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var H={lastScrollTime:V.now(),event:-1<Y.navigator.userAgent.indexOf("firefox")?"DOMMouseScroll":function(){var e="onwheel",t=e in f;if(!t){var a=f.createElement("div");a.setAttribute(e,"return;"),t="function"==typeof a[e]}return!t&&f.implementation&&f.implementation.hasFeature&&!0!==f.implementation.hasFeature("","")&&(t=f.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel",normalize:function(e){var t=0,a=0,i=0,s=0;return"detail"in e&&(a=e.detail),"wheelDelta"in e&&(a=-e.wheelDelta/120),"wheelDeltaY"in e&&(a=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=a,a=0),i=10*t,s=10*a,"deltaY"in e&&(s=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||s)&&e.deltaMode&&(1===e.deltaMode?(i*=40,s*=40):(i*=800,s*=800)),i&&!t&&(t=i<1?-1:1),s&&!a&&(a=s<1?-1:1),{spinX:t,spinY:a,pixelX:i,pixelY:s}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var t=e,a=this,i=a.params.mousewheel;if(!a.mouseEntered&&!i.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);var s=0,r=a.rtlTranslate?-1:1,n=H.normalize(t);if(i.forceToAxis)if(a.isHorizontal()){if(!(Math.abs(n.pixelX)>Math.abs(n.pixelY)))return!0;s=n.pixelX*r}else{if(!(Math.abs(n.pixelY)>Math.abs(n.pixelX)))return!0;s=n.pixelY}else s=Math.abs(n.pixelX)>Math.abs(n.pixelY)?-n.pixelX*r:-n.pixelY;if(0===s)return!0;if(i.invert&&(s=-s),a.params.freeMode){a.params.loop&&a.loopFix();var o=a.getTranslate()+s*i.sensitivity,l=a.isBeginning,d=a.isEnd;if(o>=a.minTranslate()&&(o=a.minTranslate()),o<=a.maxTranslate()&&(o=a.maxTranslate()),a.setTransition(0),a.setTranslate(o),a.updateProgress(),a.updateActiveIndex(),a.updateSlidesClasses(),(!l&&a.isBeginning||!d&&a.isEnd)&&a.updateSlidesClasses(),a.params.freeModeSticky&&(clearTimeout(a.mousewheel.timeout),a.mousewheel.timeout=V.nextTick(function(){a.slideToClosest()},300)),a.emit("scroll",t),a.params.autoplay&&a.params.autoplayDisableOnInteraction&&a.autoplay.stop(),o===a.minTranslate()||o===a.maxTranslate())return!0}else{if(60<V.now()-a.mousewheel.lastScrollTime)if(s<0)if(a.isEnd&&!a.params.loop||a.animating){if(i.releaseOnEdges)return!0}else a.slideNext(),a.emit("scroll",t);else if(a.isBeginning&&!a.params.loop||a.animating){if(i.releaseOnEdges)return!0}else a.slidePrev(),a.emit("scroll",t);a.mousewheel.lastScrollTime=(new Y.Date).getTime()}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1},enable:function(){var e=this;if(!H.event)return!1;if(e.mousewheel.enabled)return!1;var t=e.$el;return"container"!==e.params.mousewheel.eventsTarged&&(t=L(e.params.mousewheel.eventsTarged)),t.on("mouseenter",e.mousewheel.handleMouseEnter),t.on("mouseleave",e.mousewheel.handleMouseLeave),t.on(H.event,e.mousewheel.handle),e.mousewheel.enabled=!0},disable:function(){var e=this;if(!H.event)return!1;if(!e.mousewheel.enabled)return!1;var t=e.$el;return"container"!==e.params.mousewheel.eventsTarged&&(t=L(e.params.mousewheel.eventsTarged)),t.off(H.event,e.mousewheel.handle),!(e.mousewheel.enabled=!1)}},G={update:function(){var e=this,t=e.params.navigation;if(!e.params.loop){var a=e.navigation,i=a.$nextEl,s=a.$prevEl;s&&0<s.length&&(e.isBeginning?s.addClass(t.disabledClass):s.removeClass(t.disabledClass),s[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass)),i&&0<i.length&&(e.isEnd?i.addClass(t.disabledClass):i.removeClass(t.disabledClass),i[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass))}},onPrevClick:function(e){e.preventDefault(),this.isBeginning&&!this.params.loop||this.slidePrev()},onNextClick:function(e){e.preventDefault(),this.isEnd&&!this.params.loop||this.slideNext()},init:function(){var e,t,a=this,i=a.params.navigation;(i.nextEl||i.prevEl)&&(i.nextEl&&(e=L(i.nextEl),a.params.uniqueNavElements&&"string"==typeof i.nextEl&&1<e.length&&1===a.$el.find(i.nextEl).length&&(e=a.$el.find(i.nextEl))),i.prevEl&&(t=L(i.prevEl),a.params.uniqueNavElements&&"string"==typeof i.prevEl&&1<t.length&&1===a.$el.find(i.prevEl).length&&(t=a.$el.find(i.prevEl))),e&&0<e.length&&e.on("click",a.navigation.onNextClick),t&&0<t.length&&t.on("click",a.navigation.onPrevClick),V.extend(a.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this,t=e.navigation,a=t.$nextEl,i=t.$prevEl;a&&a.length&&(a.off("click",e.navigation.onNextClick),a.removeClass(e.params.navigation.disabledClass)),i&&i.length&&(i.off("click",e.navigation.onPrevClick),i.removeClass(e.params.navigation.disabledClass))}},B={update:function(){var e=this,t=e.rtl,s=e.params.pagination;if(s.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var r,a=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el,n=e.params.loop?Math.ceil((a-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?((r=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup))>a-1-2*e.loopedSlides&&(r-=a-2*e.loopedSlides),n-1<r&&(r-=n),r<0&&"bullets"!==e.params.paginationType&&(r=n+r)):r=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===s.type&&e.pagination.bullets&&0<e.pagination.bullets.length){var o,l,d,p=e.pagination.bullets;if(s.dynamicBullets&&(e.pagination.bulletSize=p.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),i.css(e.isHorizontal()?"width":"height",e.pagination.bulletSize*(s.dynamicMainBullets+4)+"px"),1<s.dynamicMainBullets&&void 0!==e.previousIndex&&(e.pagination.dynamicBulletIndex+=r-e.previousIndex,e.pagination.dynamicBulletIndex>s.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=s.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),o=r-e.pagination.dynamicBulletIndex,d=((l=o+(Math.min(p.length,s.dynamicMainBullets)-1))+o)/2),p.removeClass(s.bulletActiveClass+" "+s.bulletActiveClass+"-next "+s.bulletActiveClass+"-next-next "+s.bulletActiveClass+"-prev "+s.bulletActiveClass+"-prev-prev "+s.bulletActiveClass+"-main"),1<i.length)p.each(function(e,t){var a=L(t),i=a.index();i===r&&a.addClass(s.bulletActiveClass),s.dynamicBullets&&(o<=i&&i<=l&&a.addClass(s.bulletActiveClass+"-main"),i===o&&a.prev().addClass(s.bulletActiveClass+"-prev").prev().addClass(s.bulletActiveClass+"-prev-prev"),i===l&&a.next().addClass(s.bulletActiveClass+"-next").next().addClass(s.bulletActiveClass+"-next-next"))});else if(p.eq(r).addClass(s.bulletActiveClass),s.dynamicBullets){for(var c=p.eq(o),u=p.eq(l),h=o;h<=l;h+=1)p.eq(h).addClass(s.bulletActiveClass+"-main");c.prev().addClass(s.bulletActiveClass+"-prev").prev().addClass(s.bulletActiveClass+"-prev-prev"),u.next().addClass(s.bulletActiveClass+"-next").next().addClass(s.bulletActiveClass+"-next-next")}if(s.dynamicBullets){var v=Math.min(p.length,s.dynamicMainBullets+4),f=(e.pagination.bulletSize*v-e.pagination.bulletSize)/2-d*e.pagination.bulletSize,m=t?"right":"left";p.css(e.isHorizontal()?m:"top",f+"px")}}if("fraction"===s.type&&(i.find("."+s.currentClass).text(s.formatFractionCurrent(r+1)),i.find("."+s.totalClass).text(s.formatFractionTotal(n))),"progressbar"===s.type){var g;g=s.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";var b=(r+1)/n,w=1,y=1;"horizontal"===g?w=b:y=b,i.find("."+s.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+w+") scaleY("+y+")").transition(e.params.speed)}"custom"===s.type&&s.renderCustom?(i.html(s.renderCustom(e,r+1,n)),e.emit("paginationRender",e,i[0])):e.emit("paginationUpdate",e,i[0]),i[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](s.lockClass)}},render:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var a=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el,s="";if("bullets"===t.type){for(var r=e.params.loop?Math.ceil((a-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length,n=0;n<r;n+=1)t.renderBullet?s+=t.renderBullet.call(e,n,t.bulletClass):s+="<"+t.bulletElement+' class="'+t.bulletClass+'"></'+t.bulletElement+">";i.html(s),e.pagination.bullets=i.find("."+t.bulletClass)}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):'<span class="'+t.currentClass+'"></span> / <span class="'+t.totalClass+'"></span>',i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'<span class="'+t.progressbarFillClass+'"></span>',i.html(s)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var a=this,e=a.params.pagination;if(e.el){var t=L(e.el);0!==t.length&&(a.params.uniqueNavElements&&"string"==typeof e.el&&1<t.length&&1===a.$el.find(e.el).length&&(t=a.$el.find(e.el)),"bullets"===e.type&&e.clickable&&t.addClass(e.clickableClass),t.addClass(e.modifierClass+e.type),"bullets"===e.type&&e.dynamicBullets&&(t.addClass(""+e.modifierClass+e.type+"-dynamic"),a.pagination.dynamicBulletIndex=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&t.addClass(e.progressbarOppositeClass),e.clickable&&t.on("click","."+e.bulletClass,function(e){e.preventDefault();var t=L(this).index()*a.params.slidesPerGroup;a.params.loop&&(t+=a.loopedSlides),a.slideTo(t)}),V.extend(a.pagination,{$el:t,el:t[0]}))}},destroy:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var a=e.pagination.$el;a.removeClass(t.hiddenClass),a.removeClass(t.modifierClass+t.type),e.pagination.bullets&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&a.off("click","."+t.bulletClass)}}},X={setTranslate:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,a=e.rtlTranslate,i=e.progress,s=t.dragSize,r=t.trackSize,n=t.$dragEl,o=t.$el,l=e.params.scrollbar,d=s,p=(r-s)*i;a?0<(p=-p)?(d=s-p,p=0):r<-p+s&&(d=r+p):p<0?(d=s+p,p=0):r<p+s&&(d=r-p),e.isHorizontal()?(F.transforms3d?n.transform("translate3d("+p+"px, 0, 0)"):n.transform("translateX("+p+"px)"),n[0].style.width=d+"px"):(F.transforms3d?n.transform("translate3d(0px, "+p+"px, 0)"):n.transform("translateY("+p+"px)"),n[0].style.height=d+"px"),l.hide&&(clearTimeout(e.scrollbar.timeout),o[0].style.opacity=1,e.scrollbar.timeout=setTimeout(function(){o[0].style.opacity=0,o.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,a=t.$dragEl,i=t.$el;a[0].style.width="",a[0].style.height="";var s,r=e.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,n=e.size/e.virtualSize,o=n*(r/e.size);s="auto"===e.params.scrollbar.dragSize?r*n:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?a[0].style.width=s+"px":a[0].style.height=s+"px",i[0].style.display=1<=n?"none":"",e.params.scrollbarHide&&(i[0].style.opacity=0),V.extend(t,{trackSize:r,divider:n,moveDivider:o,dragSize:s}),t.$el[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,a=this,i=a.scrollbar,s=a.rtlTranslate,r=i.$el,n=i.dragSize,o=i.trackSize;t=((a.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-r.offset()[a.isHorizontal()?"left":"top"]-n/2)/(o-n),t=Math.max(Math.min(t,1),0),s&&(t=1-t);var l=a.minTranslate()+(a.maxTranslate()-a.minTranslate())*t;a.updateProgress(l),a.setTranslate(l),a.updateActiveIndex(),a.updateSlidesClasses()},onDragStart:function(e){var t=this,a=t.params.scrollbar,i=t.scrollbar,s=t.$wrapperEl,r=i.$el,n=i.$dragEl;t.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),n.transition(100),i.setDragPosition(e),clearTimeout(t.scrollbar.dragTimeout),r.transition(0),a.hide&&r.css("opacity",1),t.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,a=this.$wrapperEl,i=t.$el,s=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),a.transition(0),i.transition(0),s.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this,a=t.params.scrollbar,i=t.scrollbar.$el;t.scrollbar.isTouched&&(t.scrollbar.isTouched=!1,a.hide&&(clearTimeout(t.scrollbar.dragTimeout),t.scrollbar.dragTimeout=V.nextTick(function(){i.css("opacity",0),i.transition(400)},1e3)),t.emit("scrollbarDragEnd",e),a.snapOnRelease&&t.slideToClosest())},enableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=e.scrollbar,a=e.touchEventsTouch,i=e.touchEventsDesktop,s=e.params,r=t.$el[0],n=!(!F.passiveListener||!s.passiveListeners)&&{passive:!1,capture:!1},o=!(!F.passiveListener||!s.passiveListeners)&&{passive:!0,capture:!1};F.touch?(r.addEventListener(a.start,e.scrollbar.onDragStart,n),r.addEventListener(a.move,e.scrollbar.onDragMove,n),r.addEventListener(a.end,e.scrollbar.onDragEnd,o)):(r.addEventListener(i.start,e.scrollbar.onDragStart,n),f.addEventListener(i.move,e.scrollbar.onDragMove,n),f.addEventListener(i.end,e.scrollbar.onDragEnd,o))}},disableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=e.scrollbar,a=e.touchEventsTouch,i=e.touchEventsDesktop,s=e.params,r=t.$el[0],n=!(!F.passiveListener||!s.passiveListeners)&&{passive:!1,capture:!1},o=!(!F.passiveListener||!s.passiveListeners)&&{passive:!0,capture:!1};F.touch?(r.removeEventListener(a.start,e.scrollbar.onDragStart,n),r.removeEventListener(a.move,e.scrollbar.onDragMove,n),r.removeEventListener(a.end,e.scrollbar.onDragEnd,o)):(r.removeEventListener(i.start,e.scrollbar.onDragStart,n),f.removeEventListener(i.move,e.scrollbar.onDragMove,n),f.removeEventListener(i.end,e.scrollbar.onDragEnd,o))}},init:function(){var e=this;if(e.params.scrollbar.el){var t=e.scrollbar,a=e.$el,i=e.params.scrollbar,s=L(i.el);e.params.uniqueNavElements&&"string"==typeof i.el&&1<s.length&&1===a.find(i.el).length&&(s=a.find(i.el));var r=s.find("."+e.params.scrollbar.dragClass);0===r.length&&(r=L('<div class="'+e.params.scrollbar.dragClass+'"></div>'),s.append(r)),V.extend(t,{$el:s,el:s[0],$dragEl:r,dragEl:r[0]}),i.draggable&&t.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},R={setTransform:function(e,t){var a=this.rtl,i=L(e),s=a?-1:1,r=i.attr("data-swiper-parallax")||"0",n=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y"),l=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(n||o?(n=n||"0",o=o||"0"):this.isHorizontal()?(n=r,o="0"):(o=r,n="0"),n=0<=n.indexOf("%")?parseInt(n,10)*t*s+"%":n*t*s+"px",o=0<=o.indexOf("%")?parseInt(o,10)*t+"%":o*t+"px",null!=d){var p=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=p}if(null==l)i.transform("translate3d("+n+", "+o+", 0px)");else{var c=l-(l-1)*(1-Math.abs(t));i.transform("translate3d("+n+", "+o+", 0px) scale("+c+")")}},setTranslate:function(){var i=this,e=i.$el,t=i.slides,s=i.progress,r=i.snapGrid;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,t){i.parallax.setTransform(t,s)}),t.each(function(e,t){var a=t.progress;1<i.params.slidesPerGroup&&"auto"!==i.params.slidesPerView&&(a+=Math.ceil(e/2)-s*(r.length-1)),a=Math.min(Math.max(a,-1),1),L(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,t){i.parallax.setTransform(t,a)})})},setTransition:function(s){void 0===s&&(s=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,t){var a=L(t),i=parseInt(a.attr("data-swiper-parallax-duration"),10)||s;0===s&&(i=0),a.transition(i)})}},q={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,a=e.targetTouches[0].pageY,i=e.targetTouches[1].pageX,s=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(i-t,2)+Math.pow(s-a,2))},onGestureStart:function(e){var t=this,a=t.params.zoom,i=t.zoom,s=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!F.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,s.scaleStart=q.getDistanceBetweenTouches(e)}s.$slideEl&&s.$slideEl.length||(s.$slideEl=L(e.target).closest(".swiper-slide"),0===s.$slideEl.length&&(s.$slideEl=t.slides.eq(t.activeIndex)),s.$imageEl=s.$slideEl.find("img, svg, canvas"),s.$imageWrapEl=s.$imageEl.parent("."+a.containerClass),s.maxRatio=s.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==s.$imageWrapEl.length)?(s.$imageEl.transition(0),t.zoom.isScaling=!0):s.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,a=this.zoom,i=a.gesture;if(!F.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.fakeGestureMoved=!0,i.scaleMove=q.getDistanceBetweenTouches(e)}i.$imageEl&&0!==i.$imageEl.length&&(F.gestures?this.zoom.scale=e.scale*a.currentScale:a.scale=i.scaleMove/i.scaleStart*a.currentScale,a.scale>i.maxRatio&&(a.scale=i.maxRatio-1+Math.pow(a.scale-i.maxRatio+1,.5)),a.scale<t.minRatio&&(a.scale=t.minRatio+1-Math.pow(t.minRatio-a.scale+1,.5)),i.$imageEl.transform("translate3d(0,0,0) scale("+a.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,a=this.zoom,i=a.gesture;if(!F.gestures){if(!a.fakeGestureTouched||!a.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!m.android)return;a.fakeGestureTouched=!1,a.fakeGestureMoved=!1}i.$imageEl&&0!==i.$imageEl.length&&(a.scale=Math.max(Math.min(a.scale,i.maxRatio),t.minRatio),i.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+a.scale+")"),a.currentScale=a.scale,a.isScaling=!1,1===a.scale&&(i.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,a=t.gesture,i=t.image;a.$imageEl&&0!==a.$imageEl.length&&(i.isTouched||(m.android&&e.preventDefault(),i.isTouched=!0,i.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,i.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this,a=t.zoom,i=a.gesture,s=a.image,r=a.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(t.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=V.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=V.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),t.rtl&&(s.startX=-s.startX,s.startY=-s.startY));var n=s.width*a.scale,o=s.height*a.scale;if(!(n<i.slideWidth&&o<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-n/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-o/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!a.isScaling){if(t.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=s.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=s.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(s.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(s.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(s.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(s.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=s.touchesCurrent.x,r.prevPositionY=s.touchesCurrent.y,r.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,a=e.image,i=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var s=300,r=300,n=i.x*s,o=a.currentX+n,l=i.y*r,d=a.currentY+l;0!==i.x&&(s=Math.abs((o-a.currentX)/i.x)),0!==i.y&&(r=Math.abs((d-a.currentY)/i.y));var p=Math.max(s,r);a.currentX=o,a.currentY=d;var c=a.width*e.scale,u=a.height*e.scale;a.minX=Math.min(t.slideWidth/2-c/2,0),a.maxX=-a.minX,a.minY=Math.min(t.slideHeight/2-u/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),t.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0,e.scale=1,e.currentScale=1)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,a,i,s,r,n,o,l,d,p,c,u,h,v,f,m,g=this,b=g.zoom,w=g.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=g.clickedSlide?L(g.clickedSlide):g.slides.eq(g.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,a="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,a=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(f=y.$slideEl[0].offsetWidth,m=y.$slideEl[0].offsetHeight,i=y.$slideEl.offset().left+f/2-t,s=y.$slideEl.offset().top+m/2-a,o=y.$imageEl[0].offsetWidth,l=y.$imageEl[0].offsetHeight,d=o*b.scale,p=l*b.scale,h=-(c=Math.min(f/2-d/2,0)),v=-(u=Math.min(m/2-p/2,0)),(r=i*b.scale)<c&&(r=c),h<r&&(r=h),(n=s*b.scale)<u&&(n=u),v<n&&(n=v)):n=r=0,y.$imageWrapEl.transition(300).transform("translate3d("+r+"px, "+n+"px,0)"),y.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+b.scale+")"))},out:function(){var e=this,t=e.zoom,a=e.params.zoom,i=t.gesture;i.$slideEl||(i.$slideEl=e.clickedSlide?L(e.clickedSlide):e.slides.eq(e.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+a.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(t.scale=1,t.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+a.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this,t=e.zoom;if(!t.enabled){t.enabled=!0;var a=!("touchstart"!==e.touchEvents.start||!F.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};F.gestures?(e.$wrapperEl.on("gesturestart",".swiper-slide",t.onGestureStart,a),e.$wrapperEl.on("gesturechange",".swiper-slide",t.onGestureChange,a),e.$wrapperEl.on("gestureend",".swiper-slide",t.onGestureEnd,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,".swiper-slide",t.onGestureStart,a),e.$wrapperEl.on(e.touchEvents.move,".swiper-slide",t.onGestureChange,a),e.$wrapperEl.on(e.touchEvents.end,".swiper-slide",t.onGestureEnd,a)),e.$wrapperEl.on(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove)}},disable:function(){var e=this,t=e.zoom;if(t.enabled){e.zoom.enabled=!1;var a=!("touchstart"!==e.touchEvents.start||!F.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};F.gestures?(e.$wrapperEl.off("gesturestart",".swiper-slide",t.onGestureStart,a),e.$wrapperEl.off("gesturechange",".swiper-slide",t.onGestureChange,a),e.$wrapperEl.off("gestureend",".swiper-slide",t.onGestureEnd,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,".swiper-slide",t.onGestureStart,a),e.$wrapperEl.off(e.touchEvents.move,".swiper-slide",t.onGestureChange,a),e.$wrapperEl.off(e.touchEvents.end,".swiper-slide",t.onGestureEnd,a)),e.$wrapperEl.off(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove)}}},W={loadInSlide:function(e,l){void 0===l&&(l=!0);var d=this,p=d.params.lazy;if(void 0!==e&&0!==d.slides.length){var c=d.virtual&&d.params.virtual.enabled?d.$wrapperEl.children("."+d.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):d.slides.eq(e),t=c.find("."+p.elementClass+":not(."+p.loadedClass+"):not(."+p.loadingClass+")");!c.hasClass(p.elementClass)||c.hasClass(p.loadedClass)||c.hasClass(p.loadingClass)||(t=t.add(c[0])),0!==t.length&&t.each(function(e,t){var i=L(t);i.addClass(p.loadingClass);var s=i.attr("data-background"),r=i.attr("data-src"),n=i.attr("data-srcset"),o=i.attr("data-sizes");d.loadImage(i[0],r||s,n,o,!1,function(){if(null!=d&&d&&(!d||d.params)&&!d.destroyed){if(s?(i.css("background-image",'url("'+s+'")'),i.removeAttr("data-background")):(n&&(i.attr("srcset",n),i.removeAttr("data-srcset")),o&&(i.attr("sizes",o),i.removeAttr("data-sizes")),r&&(i.attr("src",r),i.removeAttr("data-src"))),i.addClass(p.loadedClass).removeClass(p.loadingClass),c.find("."+p.preloaderClass).remove(),d.params.loop&&l){var e=c.attr("data-swiper-slide-index");if(c.hasClass(d.params.slideDuplicateClass)){var t=d.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+d.params.slideDuplicateClass+")");d.lazy.loadInSlide(t.index(),!1)}else{var a=d.$wrapperEl.children("."+d.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');d.lazy.loadInSlide(a.index(),!1)}}d.emit("lazyImageReady",c[0],i[0])}}),d.emit("lazyImageLoad",c[0],i[0])})}},load:function(){var i=this,t=i.$wrapperEl,a=i.params,s=i.slides,e=i.activeIndex,r=i.virtual&&a.virtual.enabled,n=a.lazy,o=a.slidesPerView;function l(e){if(r){if(t.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(s[e])return!0;return!1}function d(e){return r?L(e).attr("data-swiper-slide-index"):L(e).index()}if("auto"===o&&(o=0),i.lazy.initialImageLoaded||(i.lazy.initialImageLoaded=!0),i.params.watchSlidesVisibility)t.children("."+a.slideVisibleClass).each(function(e,t){var a=r?L(t).attr("data-swiper-slide-index"):L(t).index();i.lazy.loadInSlide(a)});else if(1<o)for(var p=e;p<e+o;p+=1)l(p)&&i.lazy.loadInSlide(p);else i.lazy.loadInSlide(e);if(n.loadPrevNext)if(1<o||n.loadPrevNextAmount&&1<n.loadPrevNextAmount){for(var c=n.loadPrevNextAmount,u=o,h=Math.min(e+u+Math.max(c,u),s.length),v=Math.max(e-Math.max(u,c),0),f=e+o;f<h;f+=1)l(f)&&i.lazy.loadInSlide(f);for(var m=v;m<e;m+=1)l(m)&&i.lazy.loadInSlide(m)}else{var g=t.children("."+a.slideNextClass);0<g.length&&i.lazy.loadInSlide(d(g));var b=t.children("."+a.slidePrevClass);0<b.length&&i.lazy.loadInSlide(d(b))}}},j={LinearSpline:function(e,t){var a,i,s,r,n,o=function(e,t){for(i=-1,a=e.length;1<a-i;)e[s=a+i>>1]<=t?i=s:a=s;return a};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new j.LinearSpline(t.slidesGrid,e.slidesGrid):new j.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){var a,i,s=this,r=s.controller.control;function n(e){var t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),i=-s.controller.spline.interpolate(-t)),i&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),i=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(i=e.maxTranslate()-i),e.updateProgress(i),e.setTranslate(i,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof S&&n(r[o]);else r instanceof S&&t!==r&&n(r)},setTransition:function(t,e){var a,i=this,s=i.controller.control;function r(e){e.setTransition(t,i),0!==t&&(e.transitionStart(),e.params.autoHeight&&V.nextTick(function(){e.updateAutoHeight()}),e.$wrapperEl.transitionEnd(function(){s&&(e.params.loop&&"slide"===i.params.controller.by&&e.loopFix(),e.transitionEnd())}))}if(Array.isArray(s))for(a=0;a<s.length;a+=1)s[a]!==e&&s[a]instanceof S&&r(s[a]);else s instanceof S&&e!==s&&r(s)}},U={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this,a=t.params.a11y;if(13===e.keyCode){var i=L(e.target);t.navigation&&t.navigation.$nextEl&&i.is(t.navigation.$nextEl)&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?t.a11y.notify(a.lastSlideMessage):t.a11y.notify(a.nextSlideMessage)),t.navigation&&t.navigation.$prevEl&&i.is(t.navigation.$prevEl)&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?t.a11y.notify(a.firstSlideMessage):t.a11y.notify(a.prevSlideMessage)),t.pagination&&i.is("."+t.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){var e=this;if(!e.params.loop){var t=e.navigation,a=t.$nextEl,i=t.$prevEl;i&&0<i.length&&(e.isBeginning?e.a11y.disableEl(i):e.a11y.enableEl(i)),a&&0<a.length&&(e.isEnd?e.a11y.disableEl(a):e.a11y.enableEl(a))}},updatePagination:function(){var i=this,s=i.params.a11y;i.pagination&&i.params.pagination.clickable&&i.pagination.bullets&&i.pagination.bullets.length&&i.pagination.bullets.each(function(e,t){var a=L(t);i.a11y.makeElFocusable(a),i.a11y.addElRole(a,"button"),i.a11y.addElLabel(a,s.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},init:function(){var e=this;e.$el.append(e.a11y.liveRegion);var t,a,i=e.params.a11y;e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(a=e.navigation.$prevEl),t&&(e.a11y.makeElFocusable(t),e.a11y.addElRole(t,"button"),e.a11y.addElLabel(t,i.nextSlideMessage),t.on("keydown",e.a11y.onEnterKey)),a&&(e.a11y.makeElFocusable(a),e.a11y.addElRole(a,"button"),e.a11y.addElLabel(a,i.prevSlideMessage),a.on("keydown",e.a11y.onEnterKey)),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.on("keydown","."+e.params.pagination.bulletClass,e.a11y.onEnterKey)},destroy:function(){var e,t,a=this;a.a11y.liveRegion&&0<a.a11y.liveRegion.length&&a.a11y.liveRegion.remove(),a.navigation&&a.navigation.$nextEl&&(e=a.navigation.$nextEl),a.navigation&&a.navigation.$prevEl&&(t=a.navigation.$prevEl),e&&e.off("keydown",a.a11y.onEnterKey),t&&t.off("keydown",a.a11y.onEnterKey),a.pagination&&a.params.pagination.clickable&&a.pagination.bullets&&a.pagination.bullets.length&&a.pagination.$el.off("keydown","."+a.params.pagination.bulletClass,a.a11y.onEnterKey)}},K={init:function(){var e=this;if(e.params.history){if(!Y.history||!Y.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);var t=e.history;t.initialized=!0,t.paths=K.getPathValues(),(t.paths.key||t.paths.value)&&(t.scrollToSlide(0,t.paths.value,e.params.runCallbacksOnInit),e.params.history.replaceState||Y.addEventListener("popstate",e.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||Y.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=K.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=Y.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),t=e.length;return{key:e[t-2],value:e[t-1]}},setHistory:function(e,t){if(this.history.initialized&&this.params.history.enabled){var a=this.slides.eq(t),i=K.slugify(a.attr("data-history"));Y.location.pathname.includes(e)||(i=e+"/"+i);var s=Y.history.state;s&&s.value===i||(this.params.history.replaceState?Y.history.replaceState({value:i},null,i):Y.history.pushState({value:i},null,i))}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,a){var i=this;if(t)for(var s=0,r=i.slides.length;s<r;s+=1){var n=i.slides.eq(s);if(K.slugify(n.attr("data-history"))===t&&!n.hasClass(i.params.slideDuplicateClass)){var o=n.index();i.slideTo(o,e,a)}}else i.slideTo(0,e,a)}},_={onHashCange:function(){var e=this,t=f.location.hash.replace("#","");if(t!==e.slides.eq(e.activeIndex).attr("data-hash")){var a=e.$wrapperEl.children("."+e.params.slideClass+'[data-hash="'+t+'"]').index();if(void 0===a)return;e.slideTo(a)}},setHash:function(){var e=this;if(e.hashNavigation.initialized&&e.params.hashNavigation.enabled)if(e.params.hashNavigation.replaceState&&Y.history&&Y.history.replaceState)Y.history.replaceState(null,null,"#"+e.slides.eq(e.activeIndex).attr("data-hash")||"");else{var t=e.slides.eq(e.activeIndex),a=t.attr("data-hash")||t.attr("data-history");f.location.hash=a||""}},init:function(){var e=this;if(!(!e.params.hashNavigation.enabled||e.params.history&&e.params.history.enabled)){e.hashNavigation.initialized=!0;var t=f.location.hash.replace("#","");if(t)for(var a=0,i=e.slides.length;a<i;a+=1){var s=e.slides.eq(a);if((s.attr("data-hash")||s.attr("data-history"))===t&&!s.hasClass(e.params.slideDuplicateClass)){var r=s.index();e.slideTo(r,0,e.params.runCallbacksOnInit,!0)}}e.params.hashNavigation.watchState&&L(Y).on("hashchange",e.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&L(Y).off("hashchange",this.hashNavigation.onHashCange)}},Z={run:function(){var e=this,t=e.slides.eq(e.activeIndex),a=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(a=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),e.autoplay.timeout=V.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay"))},a)},start:function(){var e=this;return void 0===e.autoplay.timeout&&(!e.autoplay.running&&(e.autoplay.running=!0,e.emit("autoplayStart"),e.autoplay.run(),!0))},stop:function(){var e=this;return!!e.autoplay.running&&(void 0!==e.autoplay.timeout&&(e.autoplay.timeout&&(clearTimeout(e.autoplay.timeout),e.autoplay.timeout=void 0),e.autoplay.running=!1,e.emit("autoplayStop"),!0))},pause:function(e){var t=this;t.autoplay.running&&(t.autoplay.paused||(t.autoplay.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?(t.$wrapperEl[0].addEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].addEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd)):(t.autoplay.paused=!1,t.autoplay.run())))}},Q={setTranslate:function(){for(var e=this,t=e.slides,a=0;a<t.length;a+=1){var i=e.slides.eq(a),s=-i[0].swiperSlideOffset;e.params.virtualTranslate||(s-=e.translate);var r=0;e.isHorizontal()||(r=s,s=0);var n=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:n}).transform("translate3d("+s+"px, "+r+"px, 0px)")}},setTransition:function(e){var a=this,t=a.slides,i=a.$wrapperEl;if(t.transition(e),a.params.virtualTranslate&&0!==e){var s=!1;t.transitionEnd(function(){if(!s&&a&&!a.destroyed){s=!0,a.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],t=0;t<e.length;t+=1)i.trigger(e[t])}})}}},J={setTranslate:function(){var e,t=this,a=t.$el,i=t.$wrapperEl,s=t.slides,r=t.width,n=t.height,o=t.rtlTranslate,l=t.size,d=t.params.cubeEffect,p=t.isHorizontal(),c=t.virtual&&t.params.virtual.enabled,u=0;d.shadow&&(p?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=L('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:r+"px"})):0===(e=a.find(".swiper-cube-shadow")).length&&(e=L('<div class="swiper-cube-shadow"></div>'),a.append(e)));for(var h=0;h<s.length;h+=1){var v=s.eq(h),f=h;c&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),p||(y=w,w=0);var T="rotateX("+(p?0:-m)+"deg) rotateY("+(p?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&-1<b&&(u=90*f+90*b,o&&(u=90*-f-90*b)),v.transform(T),d.slideShadows){var E=p?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=p?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===E.length&&(E=L('<div class="swiper-slide-shadow-'+(p?"left":"top")+'"></div>'),v.append(E)),0===S.length&&(S=L('<div class="swiper-slide-shadow-'+(p?"right":"bottom")+'"></div>'),v.append(S)),E.length&&(E[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(p)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(u)-90*Math.floor(Math.abs(u)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),k=d.shadowScale,P=d.shadowScale/M,z=d.shadowOffset;e.transform("scale3d("+k+", 1, "+P+") translate3d(0px, "+(n/2+z)+"px, "+-n/2/P+"px) rotateX(-90deg)")}var $=I.isSafari||I.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(t.isHorizontal()?0:u)+"deg) rotateY("+(t.isHorizontal()?-u:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},ee={setTranslate:function(){for(var e=this,t=e.slides,a=e.rtlTranslate,i=0;i<t.length;i+=1){var s=t.eq(i),r=s[0].progress;e.params.flipEffect.limitRotation&&(r=Math.max(Math.min(s[0].progress,1),-1));var n=-180*r,o=0,l=-s[0].swiperSlideOffset,d=0;if(e.isHorizontal()?a&&(n=-n):(d=l,o=-n,n=l=0),s[0].style.zIndex=-Math.abs(Math.round(r))+t.length,e.params.flipEffect.slideShadows){var p=e.isHorizontal()?s.find(".swiper-slide-shadow-left"):s.find(".swiper-slide-shadow-top"),c=e.isHorizontal()?s.find(".swiper-slide-shadow-right"):s.find(".swiper-slide-shadow-bottom");0===p.length&&(p=L('<div class="swiper-slide-shadow-'+(e.isHorizontal()?"left":"top")+'"></div>'),s.append(p)),0===c.length&&(c=L('<div class="swiper-slide-shadow-'+(e.isHorizontal()?"right":"bottom")+'"></div>'),s.append(c)),p.length&&(p[0].style.opacity=Math.max(-r,0)),c.length&&(c[0].style.opacity=Math.max(r,0))}s.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var a=this,t=a.slides,i=a.activeIndex,s=a.$wrapperEl;if(t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),a.params.virtualTranslate&&0!==e){var r=!1;t.eq(i).transitionEnd(function(){if(!r&&a&&!a.destroyed){r=!0,a.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],t=0;t<e.length;t+=1)s.trigger(e[t])}})}}},te={setTranslate:function(){for(var e=this,t=e.width,a=e.height,i=e.slides,s=e.$wrapperEl,r=e.slidesSizesGrid,n=e.params.coverflowEffect,o=e.isHorizontal(),l=e.translate,d=o?t/2-l:a/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,h=i.length;u<h;u+=1){var v=i.eq(u),f=r[u],m=(d-v[0].swiperSlideOffset-f/2)/f*n.modifier,g=o?p*m:0,b=o?0:p*m,w=-c*Math.abs(m),y=o?0:n.stretch*m,x=o?n.stretch*m:0;Math.abs(x)<.001&&(x=0),Math.abs(y)<.001&&(y=0),Math.abs(w)<.001&&(w=0),Math.abs(g)<.001&&(g=0),Math.abs(b)<.001&&(b=0);var T="translate3d("+x+"px,"+y+"px,"+w+"px)  rotateX("+b+"deg) rotateY("+g+"deg)";if(v.transform(T),v[0].style.zIndex=1-Math.abs(Math.round(m)),n.slideShadows){var E=o?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=o?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===E.length&&(E=L('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),v.append(E)),0===S.length&&(S=L('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),v.append(S)),E.length&&(E[0].style.opacity=0<m?m:0),S.length&&(S[0].style.opacity=0<-m?-m:0)}}(F.pointerEvents||F.prefixedPointerEvents)&&(s[0].style.perspectiveOrigin=d+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},ae={init:function(){var e=this,t=e.params.thumbs,a=e.constructor;t.swiper instanceof a?(e.thumbs.swiper=t.swiper,V.extend(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),V.extend(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):V.isObject(t.swiper)&&(e.thumbs.swiper=new a(V.extend({},t.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),e.thumbs.swiperCreated=!0),e.thumbs.swiper.$el.addClass(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",e.thumbs.onThumbClick)},onThumbClick:function(){var e=this,t=e.thumbs.swiper;if(t){var a=t.clickedIndex,i=t.clickedSlide;if(!(i&&L(i).hasClass(e.params.thumbs.slideThumbActiveClass)||null==a)){var s;if(s=t.params.loop?parseInt(L(t.clickedSlide).attr("data-swiper-slide-index"),10):a,e.params.loop){var r=e.activeIndex;e.slides.eq(r).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,r=e.activeIndex);var n=e.slides.eq(r).prevAll('[data-swiper-slide-index="'+s+'"]').eq(0).index(),o=e.slides.eq(r).nextAll('[data-swiper-slide-index="'+s+'"]').eq(0).index();s=void 0===n?o:void 0===o?n:o-r<r-n?o:n}e.slideTo(s)}}},update:function(e){var t=this,a=t.thumbs.swiper;if(a){var i="auto"===a.params.slidesPerView?a.slidesPerViewDynamic():a.params.slidesPerView;if(t.realIndex!==a.realIndex){var s,r=a.activeIndex;if(a.params.loop){a.slides.eq(r).hasClass(a.params.slideDuplicateClass)&&(a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft,r=a.activeIndex);var n=a.slides.eq(r).prevAll('[data-swiper-slide-index="'+t.realIndex+'"]').eq(0).index(),o=a.slides.eq(r).nextAll('[data-swiper-slide-index="'+t.realIndex+'"]').eq(0).index();s=void 0===n?o:void 0===o?n:o-r==r-n?r:o-r<r-n?o:n}else s=t.realIndex;a.visibleSlidesIndexes.indexOf(s)<0&&(a.params.centeredSlides?s=r<s?s-Math.floor(i/2)+1:s+Math.floor(i/2)-1:r<s&&(s=s-i+1),a.slideTo(s,e?0:void 0))}var l=1,d=t.params.thumbs.slideThumbActiveClass;if(1<t.params.slidesPerView&&!t.params.centeredSlides&&(l=t.params.slidesPerView),a.slides.removeClass(d),a.params.loop)for(var p=0;p<l;p+=1)a.$wrapperEl.children('[data-swiper-slide-index="'+(t.realIndex+p)+'"]').addClass(d);else for(var c=0;c<l;c+=1)a.slides.eq(t.realIndex+c).addClass(d)}}},ie=[C,M,k,P,$,O,N,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){var e=this;V.extend(e,{mousewheel:{enabled:!1,enable:H.enable.bind(e),disable:H.disable.bind(e),handle:H.handle.bind(e),handleMouseEnter:H.handleMouseEnter.bind(e),handleMouseLeave:H.handleMouseLeave.bind(e),lastScrollTime:V.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){var e=this;V.extend(e,{navigation:{init:G.init.bind(e),update:G.update.bind(e),destroy:G.destroy.bind(e),onNextClick:G.onNextClick.bind(e),onPrevClick:G.onPrevClick.bind(e)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,a=t.$nextEl,i=t.$prevEl;!this.params.navigation.hideOnClick||L(e.target).is(i)||L(e.target).is(a)||(a&&a.toggleClass(this.params.navigation.hiddenClass),i&&i.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){var e=this;V.extend(e,{pagination:{init:B.init.bind(e),render:B.render.bind(e),update:B.update.bind(e),destroy:B.destroy.bind(e),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){var t=this;t.params.pagination.el&&t.params.pagination.hideOnClick&&0<t.pagination.$el.length&&!L(e.target).hasClass(t.params.pagination.bulletClass)&&t.pagination.$el.toggleClass(t.params.pagination.hiddenClass)}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){var e=this;V.extend(e,{scrollbar:{init:X.init.bind(e),destroy:X.destroy.bind(e),updateSize:X.updateSize.bind(e),setTranslate:X.setTranslate.bind(e),setTransition:X.setTransition.bind(e),enableDraggable:X.enableDraggable.bind(e),disableDraggable:X.disableDraggable.bind(e),setDragPosition:X.setDragPosition.bind(e),onDragStart:X.onDragStart.bind(e),onDragMove:X.onDragMove.bind(e),onDragEnd:X.onDragEnd.bind(e),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){V.extend(this,{parallax:{setTransform:R.setTransform.bind(this),setTranslate:R.setTranslate.bind(this),setTransition:R.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var t=this,a={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(e){a[e]=q[e].bind(t)}),V.extend(t,{zoom:a})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){V.extend(this,{lazy:{initialImageLoaded:!1,load:W.load.bind(this),loadInSlide:W.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){var e=this;e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!e.lazy.initialImageLoaded)&&e.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){var e=this;V.extend(e,{controller:{control:e.params.controller.control,getInterpolateFunction:j.getInterpolateFunction.bind(e),setTranslate:j.setTranslate.bind(e),setTransition:j.setTransition.bind(e)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var t=this;V.extend(t,{a11y:{liveRegion:L('<span class="'+t.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}),Object.keys(U).forEach(function(e){t.a11y[e]=U[e].bind(t)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){var e=this;V.extend(e,{history:{init:K.init.bind(e),setHistory:K.setHistory.bind(e),setHistoryPopState:K.setHistoryPopState.bind(e),scrollToSlide:K.scrollToSlide.bind(e),destroy:K.destroy.bind(e)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){var e=this;V.extend(e,{hashNavigation:{initialized:!1,init:_.init.bind(e),destroy:_.destroy.bind(e),setHash:_.setHash.bind(e),onHashCange:_.onHashCange.bind(e)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var t=this;V.extend(t,{autoplay:{running:!1,paused:!1,run:Z.run.bind(t),start:Z.start.bind(t),stop:Z.stop.bind(t),pause:Z.pause.bind(t),onTransitionEnd:function(e){t&&!t.destroyed&&t.$wrapperEl&&e.target===this&&(t.$wrapperEl[0].removeEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].removeEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd),t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){V.extend(this,{fadeEffect:{setTranslate:Q.setTranslate.bind(this),setTransition:Q.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};V.extend(e.params,t),V.extend(e.originalParams,t)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){V.extend(this,{cubeEffect:{setTranslate:J.setTranslate.bind(this),setTransition:J.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};V.extend(e.params,t),V.extend(e.originalParams,t)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){V.extend(this,{flipEffect:{setTranslate:ee.setTranslate.bind(this),setTransition:ee.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("flip"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"flip"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};V.extend(e.params,t),V.extend(e.originalParams,t)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){V.extend(this,{coverflowEffect:{setTranslate:te.setTranslate.bind(this),setTransition:te.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){V.extend(this,{thumbs:{swiper:null,init:ae.init.bind(this),update:ae.update.bind(this),onThumbClick:ae.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===S.use&&(S.use=S.Class.use,S.installModule=S.Class.installModule),S.use(ie),S});;/*!
* Masonry PACKAGED v4.2.2
* Cascading grid layout library
* https://masonry.desandro.com
* MIT License
* by David DeSandro
*/!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,a){function h(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var d=u[e];if(!d||"_"==e.charAt(0))return void s(r+" is not a valid method");var l=d.apply(u,n);o=void 0===o?l:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(t,r),delete n[r]),r.apply(this,e)}return this}},e.allOff=function(){delete this._events,delete this._onceEvents},t}),function(t,e){"function"==typeof define&&define.amd?define("get-size/get-size",e):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e};var n=Array.prototype.slice;i.makeArray=function(t){if(Array.isArray(t))return t;if(null===t||void 0===t)return[];var e="object"==typeof t&&"number"==typeof t.length;return e?n.call(t):[t]},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t.parentNode&&t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),r=0;r<i.length;r++)o.push(i[r])}}),o},i.debounceMethod=function(t,e,i){i=i||100;var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];clearTimeout(t);var e=arguments,r=this;this[o]=setTimeout(function(){n.apply(r,e),delete r[o]},i)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?setTimeout(t):document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var o=t.console;return i.htmlInit=function(e,n){i.docReady(function(){var r=i.toDashed(n),s="data-"+r,a=document.querySelectorAll("["+s+"]"),h=document.querySelectorAll(".js-"+r),u=i.makeArray(a).concat(i.makeArray(h)),d=s+"-options",l=t.jQuery;u.forEach(function(t){var i,r=t.getAttribute(s)||t.getAttribute(d);try{i=r&&JSON.parse(r)}catch(a){return void(o&&o.error("Error parsing "+s+" on "+t.className+": "+a))}var h=new e(t,i);l&&l.data(t,n,h)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var r=document.documentElement.style,s="string"==typeof r.transition?"transition":"WebkitTransition",a="string"==typeof r.transform?"transform":"WebkitTransform",h={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[s],u={transform:a,transition:s,transitionDuration:s+"Duration",transitionProperty:s+"Property",transitionDelay:s+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=u[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],r=parseFloat(n),s=parseFloat(o),a=this.layout.size;-1!=n.indexOf("%")&&(r=r/100*a.width),-1!=o.indexOf("%")&&(s=s/100*a.height),r=isNaN(r)?0:r,s=isNaN(s)?0:s,r-=e?a.paddingLeft:a.paddingRight,s-=i?a.paddingTop:a.paddingBottom,this.position.x=r,this.position.y=s},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",r=i?"left":"right",s=i?"right":"left",a=this.position.x+t[o];e[r]=this.getXValue(a),e[s]="";var h=n?"paddingTop":"paddingBottom",u=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[h];e[u]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=t==this.position.x&&e==this.position.y;if(this.setPosition(t,e),o&&!this.isTransitioning)return void this.layoutPosition();var r=t-i,s=e-n,a={};a.transform=this.getTranslate(r,s),this.transition({to:a,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseFloat(t),this.position.y=parseFloat(e)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(h,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var c={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=c[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(h,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var f={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(f)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return s&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,r){return e(t,i,n,o,r)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function r(t,e){var i=n.getQueryElement(t);if(!i)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,u&&(this.$element=u(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,c[o]=this,this._create();var r=this._getOption("initLayout");r&&this.layout()}function s(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var h=t.console,u=t.jQuery,d=function(){},l=0,c={};r.namespace="outlayer",r.Item=o,r.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var f=r.prototype;n.extend(f,e.prototype),f.option=function(t){n.extend(this.options,t)},f._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},r.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},f._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},f.reloadItems=function(){this.items=this._itemize(this.element.children)},f._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var r=e[o],s=new i(r,this);n.push(s)}return n},f._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},f.getItemElements=function(){return this.items.map(function(t){return t.element})},f.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},f._init=f.layout,f._resetLayout=function(){this.getSize()},f.getSize=function(){this.size=i(this.element)},f._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},f.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},f._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},f._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},f._getItemLayoutPosition=function(){return{x:0,y:0}},f._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},f.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},f._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},f._postLayout=function(){this.resizeContainer()},f.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},f._getContainerSize=d,f._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},f._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){s++,s==r&&i()}var o=this,r=e.length;if(!e||!r)return void i();var s=0;e.forEach(function(e){e.once(t,n)})},f.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),u)if(this.$element=this.$element||u(this.element),e){var o=u.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},f.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},f.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},f.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},f.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},f._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},f._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},f._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},f._manageStamp=d,f._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),r={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return r},f.handleEvent=n.handleEvent,f.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},f.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},f.onresize=function(){this.resize()},n.debounceMethod(r,"onresize",100),f.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},f.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},f.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},f.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},f.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},f.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},f.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},f.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},f.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},f.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},f.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},f.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},f.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete c[e],delete this.element.outlayerGUID,u&&u.removeData(this.element,this.constructor.namespace)},r.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&c[e]},r.create=function(t,e){var i=s(r);return i.defaults=n.extend({},r.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},r.compatOptions),i.namespace=t,i.data=r.data,i.Item=s(o),n.htmlInit(i,t),u&&u.bridget&&u.bridget(t,i),i};var m={ms:1,s:1e3};return r.Item=o,r}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");i.compatOptions.fitWidth="isFitWidth";var n=i.prototype;return n._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0,this.horizontalColIndex=0},n.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,r=o/n,s=n-o%n,a=s&&1>s?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i});;(function(w){'use strict';function oe(a){if(B(a))u(a.objectMaxDepth)&&(Mc.objectMaxDepth=Wb(a.objectMaxDepth)?a.objectMaxDepth:NaN);else return Mc}function Wb(a){return Y(a)&&0<a}function K(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.6.9/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent,f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function wa(a){if(null==a||Za(a))return!1;if(I(a)||E(a)||z&&a instanceof z)return!0;var b="length"in Object(a)&&a.length;return Y(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"===typeof a.item)}function r(a,b,d){var c,e;if(a)if(C(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(I(a)||wa(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in
a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==r)a.forEach(b,d,a);else if(Nc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ra.call(a,c)&&b.call(d,a[c],c,a);return a}function Oc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function Xb(a){return function(b,d){a(d,b)}}function pe(){return++qb}function Yb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(B(g)||C(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],p=g[m];d&&B(p)?fa(p)?a[m]=new Date(p.valueOf()):$a(p)?a[m]=new RegExp(p):p.nodeName?a[m]=p.cloneNode(!0):Zb(p)?a[m]=p.clone():(B(a[m])||(a[m]=I(p)?[]:{}),Yb(a[m],[p],!0)):a[m]=p}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function O(a){return Yb(a,xa.call(arguments,1),!1)}function qe(a){return Yb(a,xa.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function $b(a,b){return O(Object.create(a),b)}function D(){}
function ab(a){return a}function la(a){return function(){return a}}function ac(a){return C(a.toString)&&a.toString!==ia}function x(a){return"undefined"===typeof a}function u(a){return"undefined"!==typeof a}function B(a){return null!==a&&"object"===typeof a}function Nc(a){return null!==a&&"object"===typeof a&&!Pc(a)}function E(a){return"string"===typeof a}function Y(a){return"number"===typeof a}function fa(a){return"[object Date]"===ia.call(a)}function bc(a){switch(ia.call(a)){case "[object Error]":return!0;case "[object Exception]":return!0;case "[object DOMException]":return!0;default:return a instanceof Error}}function C(a){return"function"===typeof a}function $a(a){return"[object RegExp]"===ia.call(a)}function Za(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function Na(a){return"boolean"===typeof a}function re(a){return a&&Y(a.length)&&se.test(ia.call(a))}function Zb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function te(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ya(a){return L(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function pa(a,b,d){function c(a,b,c){c--;if(0>c)return"...";var d=b.$$hashKey,g;if(I(a)){g=0;for(var f=a.length;g<f;g++)b.push(e(a[g],c))}else if(Nc(a))for(g in a)b[g]=e(a[g],c);else if(a&&"function"===typeof a.hasOwnProperty)for(g in a)a.hasOwnProperty(g)&&(b[g]=e(a[g],c));else for(g in a)ra.call(a,g)&&(b[g]=e(a[g],c));d?b.$$hashKey=d:delete b.$$hashKey;return b}function e(a,b){if(!B(a))return a;var d=g.indexOf(a);if(-1!==d)return h[d];if(Za(a)||bb(a))throw qa("cpws");var d=!1,e=f(a);void 0===e&&(e=I(a)?[]:Object.create(Pc(a)),d=!0);g.push(a);h.push(e);return d?c(a,e,b):e}function f(a){switch(ia.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(e(a.buffer),a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(C(a.cloneNode))return a.cloneNode(!0)}
var g=[],h=[];d=Wb(d)?d:NaN;if(b){if(re(b)||"[object ArrayBuffer]"===ia.call(b))throw qa("cpta");if(a===b)throw qa("cpi");I(b)?b.length=0:r(b,function(a,c){"$$hashKey"!==c&&delete b[c]});g.push(a);h.push(b);return c(a,b,d)}return e(a,d)}function cc(a,b){return a===b||a!==a&&b!==b}function sa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(I(a)){if(!I(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!sa(a[c],b[c]))return!1;return!0}}else{if(fa(a))return fa(b)?cc(a.getTime(),b.getTime()):!1;if($a(a))return $a(b)?a.toString()===b.toString():!1;if(bb(a)||bb(b)||Za(a)||Za(b)||I(b)||fa(b)||$a(b))return!1;d=S();for(c in a)if("$"!==c.charAt(0)&&!C(a[c])){if(!sa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&u(b[c])&&!C(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(xa.call(b,d))}function Ra(a,b){var d=2<arguments.length?xa.call(arguments,2):[];return!C(b)||b instanceof
RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Qc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Za(b)?d="$WINDOW":b&&w.document===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(!x(a))return Y(b)||(b=b?2:null),JSON.stringify(a,Qc,b)}function Rc(a){return E(a)?JSON.parse(a):a}function Sc(a,b){a=a.replace(ue,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+
a)/6E4;return U(d)?b:d}function dc(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=Sc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function za(a){a=z(a).clone().empty();var b=z("<div>").append(a).html();try{return a[0].nodeType===Oa?L(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+L(b)})}catch(d){return L(b)}}function Tc(a){try{return decodeURIComponent(a)}catch(b){}}function ec(a){var b={};r((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=Tc(e),u(e)&&(f=u(f)?Tc(f):!0,ra.call(b,e)?I(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function fc(a){var b=[];r(a,function(a,c){I(a)?r(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}function fb(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ve(a,b){var d,c,e=Ha.length;for(c=0;c<e;++c)if(d=Ha[c]+b,E(d=a.getAttribute(d)))return d;return null}function we(a,b){var d,c,e={};r(Ha,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});r(Ha,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(xe?(e.strictDi=null!==ve(d,"strict-di"),b(d,c?[c]:[],e)):w.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Uc(a,b,d){B(d)||(d={});d=O({strictDi:!1},d);var c=function(){a=z(a);if(a.injector()){var c=a[0]===w.document?"document":za(a);throw qa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=gb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;w&&e.test(w.name)&&(d.debugInfoEnabled=!0,w.name=w.name.replace(e,""));if(w&&!f.test(w.name))return c();w.name=w.name.replace(f,"");$.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};C($.resumeDeferredBootstrap)&&$.resumeDeferredBootstrap()}function ye(){w.name="NG_ENABLE_DEBUG_INFO!"+w.name;w.location.reload()}function ze(a){a=$.element(a).injector();if(!a)throw qa("test");return a.get("$$testability")}function Vc(a,b){b=b||"_";return a.replace(Ae,function(a,c){return(c?b:"")+a.toLowerCase()})}function Be(){var a;if(!Wc){var b=rb();(ma=x(b)?w.jQuery:b?w[b]:void 0)&&ma.fn.on?(z=ma,O(ma.fn,{scope:Sa.scope,isolateScope:Sa.isolateScope,controller:Sa.controller,injector:Sa.injector,inheritedData:Sa.inheritedData}),a=ma.cleanData,ma.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=ma._data(f,"events"))&&c.$destroy&&ma(f).triggerHandler("$destroy");a(b)}):z=V;$.element=z;Wc=!0}}function hb(a,b,d){if(!a)throw qa("areq",b||"?",d||"required");return a}function sb(a,b,d){d&&I(a)&&(a=a[a.length-1]);hb(C(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ia(a,b){if("hasOwnProperty"===a)throw qa("badname",b);}function Xc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&C(a)?Ra(e,a):a}function tb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=z(xa.call(a,0,e))),c.push(b);return c||a}function S(){return Object.create(null)}function gc(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!ac(a)||I(a)||fa(a)?eb(a):a.toString()}return a}function Ce(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=K("$injector"),c=K("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||K;return b(a,"module",function(){var a={};return function(f,g,h){var k={};if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,c,d,g){g||(g=e);return function(){g[d||"push"]([b,c,arguments]);return v}}function b(a,c,d){d||(d=e);return function(b,e){e&&C(e)&&(e.$$moduleName=f);d.push([a,c,arguments]);return v}}if(!g)throw d("nomod",f);var e=[],n=[],F=[],s=a("$injector","invoke","push",n),v={_invokeQueue:e,_configBlocks:n,_runBlocks:F,info:function(a){if(u(a)){if(!B(a))throw c("aobj","value");k=a;return this}return k},requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator",n),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:s,run:function(a){F.push(a);return this}};h&&s(h);return v})}})}function ka(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(B(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function De(a,b){var d=[];Wb(b)&&(a=$.copy(a,null,b));return JSON.stringify(a,function(a,b){b=Qc(a,b);if(B(b)){if(0<=d.indexOf(b))return"...";d.push(b)}return b})}function Ee(a){O(a,{errorHandlingConfig:oe,bootstrap:Uc,copy:pa,extend:O,merge:qe,equals:sa,element:z,forEach:r,injector:gb,noop:D,bind:Ra,toJson:eb,fromJson:Rc,identity:ab,isUndefined:x,isDefined:u,isString:E,isFunction:C,isObject:B,isNumber:Y,isElement:Zb,isArray:I,version:Fe,isDate:fa,lowercase:L,uppercase:ub,callbacks:{$$counter:0},getTestability:ze,reloadWithDebugInfo:ye,$$minErr:K,$$csp:Ja,$$encodeUriSegment:fb,$$encodeUriQuery:ja,$$stringify:gc});ic=Ce(w);ic("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Ge});a.provider("$compile",Yc).directive({a:He,input:Zc,textarea:Zc,form:Ie,script:Je,select:Ke,option:Le,ngBind:Me,ngBindHtml:Ne,ngBindTemplate:Oe,ngClass:Pe,ngClassEven:Qe,ngClassOdd:Re,ngCloak:Se,ngController:Te,ngForm:Ue,ngHide:Ve,ngIf:We,ngInclude:Xe,ngInit:Ye,ngNonBindable:Ze,ngPluralize:$e,ngRepeat:af,ngShow:bf,ngStyle:cf,ngSwitch:df,ngSwitchWhen:ef,ngSwitchDefault:ff,ngOptions:gf,ngTransclude:hf,ngModel:jf,ngList:kf,ngChange:lf,pattern:$c,ngPattern:$c,required:ad,ngRequired:ad,minlength:bd,ngMinlength:bd,maxlength:cd,ngMaxlength:cd,ngValue:mf,ngModelOptions:nf}).directive({ngInclude:of}).directive(vb).directive(dd);a.provider({$anchorScroll:pf,$animate:qf,$animateCss:rf,$$animateJs:sf,$$animateQueue:tf,$$AnimateRunner:uf,$$animateAsyncRun:vf,$browser:wf,$cacheFactory:xf,$controller:yf,$document:zf,$$isDocumentHidden:Af,$exceptionHandler:Bf,$filter:ed,$$forceReflow:Cf,$interpolate:Df,$interval:Ef,$http:Ff,$httpParamSerializer:Gf,$httpParamSerializerJQLike:Hf,$httpBackend:If,$xhrFactory:Jf,$jsonpCallbacks:Kf,$location:Lf,$log:Mf,$parse:Nf,$rootScope:Of,$q:Pf,$$q:Qf,$sce:Rf,$sceDelegate:Sf,$sniffer:Tf,$templateCache:Uf,$templateRequest:Vf,$$testability:Wf,$timeout:Xf,$window:Yf,$$rAF:Zf,$$jqLite:$f,$$Map:ag,$$cookieReader:bg})}]).info({angularVersion:"1.6.9"})}function wb(a,b){return b.toUpperCase()}function xb(a){return a.replace(cg,wb)}function jc(a){a=a.nodeType;return 1===a||!a||9===a}function fd(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(kc.test(a)){d=e.appendChild(b.createElement("div"));c=(dg.exec(a)||["",""])[1].toLowerCase();c=aa[c]||aa._default;d.innerHTML=c[1]+a.replace(eg,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function V(a){if(a instanceof V)return a;var b;E(a)&&(a=Q(a),b=!0);if(!(this instanceof V)){if(b&&"<"!==a.charAt(0))throw lc("nosel");return new V(a)}if(b){b=w.document;var d;a=(d=fg.exec(a))?[b.createElement(d[1])]:(d=fd(a,b))?d.childNodes:[];mc(this,a)}else C(a)?gd(a):mc(this,a)}function nc(a){return a.cloneNode(!0)}function yb(a,b){!b&&jc(a)&&z.cleanData([a]);a.querySelectorAll&&z.cleanData(a.querySelectorAll("*"))}function hd(a,b,d,c){if(u(c))throw lc("offargs");var e=(c=zb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];u(d)&&cb(c||[],d);u(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};r(b.split(" "),function(a){g(a);Ab[a]&&g(Ab[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b]}
function oc(a,b){var d=a.ng339,c=d&&ib[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),hd(a)),delete ib[d],a.ng339=void 0))}function zb(a,b){var d=a.ng339,d=d&&ib[d];b&&!d&&(a.ng339=d=++gg,d=ib[d]={events:{},data:{},handle:void 0});return d}function pc(a,b,d){if(jc(a)){var c,e=u(d),f=!e&&b&&!B(b),g=!b;a=(a=zb(a,!f))&&a.data;if(e)a[xb(b)]=d;else{if(g)return a;if(f)return a&&a[xb(b)];for(c in b)a[xb(c)]=b[c]}}}function Bb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Cb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=Q(a);c=c.replace(" "+a+" "," ")});c!==d&&a.setAttribute("class",Q(c))}}function Db(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=Q(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});c!==d&&a.setAttribute("class",Q(c))}}function mc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function id(a,b){return Eb(a,"$"+(b||"ngController")+"Controller")}function Eb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(u(d=z.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function jd(a){for(yb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Fb(a,b){b||yb(a);var d=a.parentNode;d&&d.removeChild(a)}function hg(a,b){b=b||w;if("complete"===b.document.readyState)b.setTimeout(a);else z(b).on("load",a)}function gd(a){function b(){w.document.removeEventListener("DOMContentLoaded",b);w.removeEventListener("load",b);a()}"complete"===w.document.readyState?w.setTimeout(a):(w.document.addEventListener("DOMContentLoaded",b),w.addEventListener("load",b))}function kd(a,b){var d=Gb[b.toLowerCase()];return d&&ld[ya(a)]&&d}function ig(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(x(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||jg;1<g&&(f=ka(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=a;return d}function jg(a,b,d){d.call(a,b)}function kg(a,b,d){var c=b.relatedTarget;c&&(c===a||lg.call(a,c))||d.call(a,b)}function $f(){this.$get=function(){return O(V,{hasClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Cb(a,b)}})}}function Pa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||pe)():d+":"+
a}function md(){this._keys=[];this._values=[];this._lastKey=NaN;this._lastIndex=-1}function nd(a){a=Function.prototype.toString.call(a).replace(mg,"");return a.match(ng)||a.match(og)}function pg(a){return(a=nd(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function gb(a,b){function d(a){return function(b,c){if(B(b))r(b,Xb(a));else return a(b,c)}}function c(a,b){Ia(a,"service");if(C(b)||I(b))b=n.instantiate(b);if(!b.$get)throw Ba("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=v.invoke(b,this);if(x(c))throw Ba("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){hb(x(a)||I(a),"modulesToLoad","not an array");var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],g=n.get(e[0]);g[e[1]].apply(g,e[2])}}if(!m.get(a)){m.set(a,!0);try{E(a)?(c=ic(a),v.modules[a]=c,b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):C(a)?b.push(n.invoke(a)):I(a)?b.push(n.invoke(a)):sb(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ba("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ba("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e),a[b]}catch(g){throw a[b]===k&&delete a[b],g;}finally{l.shift()}}function e(a,c,g){var f=[];a=gb.$$annotate(a,b,g);for(var k=0,h=a.length;k<h;k++){var l=a[k];if("string"!==typeof l)throw Ba("itkn",l);f.push(c&&c.hasOwnProperty(l)?c[l]:d(l,g))}return f}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);I(a)&&(a=a[a.length-1]);d=a;if(Ca||"function"!==typeof d)d=!1;else{var g=d.$$ngIsClass;Na(g)||(g=d.$$ngIsClass=/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(d)));d=g}return d?(c.unshift(null),new(Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=I(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new(Function.prototype.bind.apply(d,a))},get:d,annotate:gb.$$annotate,has:function(b){return p.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Hb,p={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,la(b),!1)}),constant:d(function(a,b){Ia(a,"constant");p[a]=b;F[a]=b}),decorator:function(a,b){var c=n.get(a+"Provider"),d=c.$get;c.$get=function(){var a=v.invoke(d,c);return v.invoke(b,null,{$delegate:a})}}}},n=p.$injector=h(p,function(a,b){$.isString(b)&&l.push(b);throw Ba("unpr",l.join(" <- "));}),F={},s=h(F,function(a,b){var c=n.get(a+"Provider",b);return v.invoke(c.$get,c,void 0,a)}),v=s;p.$injectorProvider={$get:la(s)};v.modules=n.modules=S();var y=g(a),v=s.get("$injector");v.strictDi=b;r(y,function(a){a&&v.invoke(a)});v.loadNewModules=function(a){r(g(a),function(a){a&&v.invoke(a)})};return v}function pf(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ya(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;C(c)?c=c():Zb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=E(a)?a:Y(a)?a.toString():d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||hg(function(){c.$evalAsync(g)})});return g}]}function jb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function qg(a){E(a)&&(a=a.split(" "));var b=S();r(a,function(a){a.length&&(b[a]=!0)});return b}function Ka(a){return B(a)?a:{}}function rg(a,b,d,c){function e(a){try{a.apply(null,xa.call(arguments,1))}finally{if(s--,0===s)for(;v.length;)try{v.pop()()}catch(b){d.error(b)}}}
function f(){A=null;h()}function g(){y=H();y=x(y)?null:y;sa(y,J)&&(y=J);t=J=y}function h(){var a=t;g();if(Aa!==k.url()||a!==y)Aa=k.url(),t=y,r(G,function(a){a(k.url(),y)})}var k=this,l=a.location,m=a.history,p=a.setTimeout,n=a.clearTimeout,F={};k.isMock=!1;var s=0,v=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){s++};k.notifyWhenNoOutstandingRequests=function(a){0===s?a():v.push(a)};var y,t,Aa=l.href,hc=b.find("base"),A=null,H=c.history?function(){try{return m.state}catch(a){}}:D;g();k.url=function(b,d,e){x(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=t===e;if(Aa===b&&(!c.history||f))return k;var h=Aa&&La(Aa)===La(b);Aa=b;t=e;!c.history||h&&f?(h||(A=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(A=b)):(m[d?"replaceState":"pushState"](e,"",b),g());A&&(A=b);return k}return A||l.href.replace(/%27/g,"'")};k.state=function(){return y};var G=[],ba=!1,J=null;k.onUrlChange=function(b){if(!ba){if(c.history)z(a).on("popstate",f);z(a).on("hashchange",f);ba=!0}G.push(b);return b};k.$$applicationDestroyed=function(){z(a).off("hashchange popstate",f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=hc.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};k.defer=function(a,b){var c;s++;c=p(function(){delete F[c];e(a)},b||0);F[c]=!0;return c};k.defer.cancel=function(a){return F[a]?(delete F[a],n(a),e(D),!0):!1}}function wf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new rg(a,c,b,d)}]}function xf(){this.$get=function(){function a(a,c){function e(a){a!==p&&(n?n===a&&(n=a.n):n=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw K("$cacheFactory")("iid",a);var g=0,h=O({},c,{id:a}),k=S(),l=c&&c.capacity||Number.MAX_VALUE,m=S(),p=null,n=null;return b[a]={put:function(a,b){if(!x(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(n.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===p&&(p=b.p);b===n&&(n=b.n);f(b.n,b.p);delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=S();g=0;m=S();p=n=null},destroy:function(){m=h=k=null;delete b[a]},info:function(){return O({},h,{size:g})}}}var b={};a.info=function(){var a={};r(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function Uf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}
function Yc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*([\w$]*)\s*$/,e=S();r(a,function(a,g){if(a in p)e[g]=p[a];else{var f=a.match(d);if(!f)throw ca("iscp",b,g,a,c?"controller bindings definition":"isolate scope definition");e[g]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||g};f[4]&&(p[a]=e[g])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==L(b))throw ca("baddir",a);if(a!==a.trim())throw ca("baddir",a);}function e(a){var b=a.require||a.controller&&a.name;!I(b)&&B(b)&&r(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,h=/(([\w-]+)(?::([^;]+))?;?)/,k=te("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,p=S();this.directive=function hc(b,d){hb(b,"name");Ia(b,"directive");E(b)?(c(b),hb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];r(f[b],function(g,f){try{var h=a.invoke(g);C(h)?h={compile:la(h)}:!h.compile&&h.link&&(h.compile=la(h.link));h.priority=h.priority||0;h.index=f;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!E(l)||!/[EACM]/.test(l)))throw ca("badrestrict",l,b);k.restrict=l||"EA";h.$$moduleName=g.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):r(b,Xb(hc));return this};this.component=function A(a,b){function c(a){function e(b){return C(b)||I(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var g=b.template||b.templateUrl?b.template:"",f={controller:d,controllerAs:sg(b.controller)||b.controllerAs||"$ctrl",template:e(g),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};r(b,function(a,b){"$"===b.charAt(0)&&(f[b]=a)});return f}if(!E(a))return r(a,Xb(Ra(this,A))),this;var d=b.controller||function(){};r(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,C(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return u(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return u(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var n=!0;this.debugInfoEnabled=function(a){return u(a)?(n=a,this):n};var F=!1;this.preAssignBindingsEnabled=function(a){return u(a)?(F=a,this):F};var s=!1;this.strictComponentBindingsEnabled=function(a){return u(a)?(s=a,this):s};var v=10;this.onChangesTtl=function(a){return arguments.length?(v=a,this):v};var y=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(y=a,this):y};var t=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(t=a,this):t};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,e,p,R,M,T,P,q){function N(){try{if(!--Fa)throw ha=void 0,ca("infchng",v);M.$apply(function(){for(var a=[],b=0,c=ha.length;b<c;++b)try{ha[b]()}catch(d){a.push(d)}ha=void 0;if(a.length)throw a;})}finally{Fa++}}function qc(a,b){if(b){var c=Object.keys(b),d,e,g;d=0;for(e=c.length;d<e;d++)g=c[d],this[g]=b[g]}else this.$attr={};this.$$element=a}function Ta(a,b,c){Ba.innerHTML="<span "+b+">";b=Ba.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function na(a,b){try{a.addClass(b)}catch(c){}}function da(a,b,c,d,e){a instanceof z||(a=z(a));var g=Ua(a,b,a,c,d,e);da.$$addScopeClass(a);var f=null;return function(b,c,d){if(!a)throw ca("multilink");hb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);f||(f=(d=d&&d[0])?"foreignobject"!==ya(d)&&ia.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==f?z(ka(f,z("<div>").append(a).html())):c?Sa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);g&&g(b,d,d,h);c||(a=g=null);return d}}function Ua(a,b,c,d,e,g){function f(a,c,d,e){var g,k,l,m,p,n,G;if(t)for(G=Array(c.length),m=0;m<h.length;m+=3)g=h[m],G[g]=c[g];else G=c;m=0;for(p=h.length;m<p;)k=G[h[m++]],c=h[m++],g=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(z(k),l)):l=a,n=c.transcludeOnThisElement?Ma(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?Ma(a,b):null,c(g,l,k,d,n)):g&&g(a,k.childNodes,void 0,e)}for(var h=[],k=I(a)||a instanceof z,l,m,p,n,t,G=0;G<a.length;G++){l=new qc;11===Ca&&Da(a,G,k);m=K(a[G],[],l,0===G?d:void 0,e);(g=m.length?Y(m,a[G],l,b,c,null,[],[],g):null)&&g.scope&&da.$$addScopeClass(l.$$element);l=g&&g.terminal||!(p=a[G].childNodes)||!p.length?null:Ua(p,g?(g.transcludeOnThisElement||!g.templateOnThisElement)&&g.transclude:b);if(g||l)h.push(G,g,l),n=!0,t=t||g;g=null}return n?f:null}function Da(a,b,c){var d=a[b],e=d.parentNode,g;if(d.nodeType===Oa)for(;;){g=e?d.nextSibling:a[b+1];if(!g||g.nodeType!==Oa)break;d.nodeValue+=g.nodeValue;g.parentNode&&g.parentNode.removeChild(g);c&&g===a[b+1]&&a.splice(b+1,1)}}function Ma(a,b,c){function d(e,g,f,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,g,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:h})}var e=d.$$slots=S(),g;for(g in b.$$slots)e[g]=b.$$slots[g]?Ma(a,b.$$slots[g],c):null;return d}function K(a,b,c,d,e){var g=c.$attr,f;switch(a.nodeType){case 1:f=ya(a);U(b,Ea(f),"E",d,e);for(var k,l,m,p,n=a.attributes,t=0,G=n&&n.length;t<G;t++){var H=!1,F=!1;k=n[t];l=k.name;m=k.value;k=Ea(l);(p=Pa.test(k))&&(l=l.replace(od,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()}));(k=k.match(Qa))&&$(k[1])&&(H=l,F=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=Ea(l.toLowerCase());g[k]=l;if(p||!c.hasOwnProperty(k))c[k]=m,kd(a,k)&&(c[k]=!0);wa(a,b,m,k,p);U(b,k,"A",d,e,H,F)}"input"===f&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!La)break;g=a.className;B(g)&&(g=g.animVal);if(E(g)&&""!==g)for(;a=h.exec(g);)k=Ea(a[2]),U(b,k,"C",d,e)&&(c[k]=Q(a[3])),g=g.substr(a.index+
a[0].length);break;case Oa:oa(b,a.nodeValue);break;case 8:if(!Ka)break;rc(a,b,c,d,e)}b.sort(la);return b}function rc(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Ea(f[1]);U(b,h,"M",d,e)&&(c[h]=Q(f[2]))}}catch(k){}}function pd(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ca("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return z(d)}function V(a,b,c){return function(d,e,g,f,h){e=pd(e[0],b,c);return a(d,e,g,f,h)}}function W(a,b,c,d,e,g){var f;return a?da(b,c,d,e,g):function(){f||(f=da(b,c,d,e,g),b=c=g=null);return f.apply(this,arguments)}}function Y(a,b,d,e,g,f,h,k,l){function m(a,b,c,d){if(a){c&&(a=V(a,c,d));a.require=s.require;a.directiveName=R;if(J===s||s.$$isolateScope)a=ta(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=V(b,c,d));b.require=s.require;b.directiveName=R;if(J===s||s.$$isolateScope)b=ta(b,{isolateScope:!0});k.push(b)}}function p(a,e,g,f,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);T&&(e=M);c||(c=T?ga.parent():ga);if(d){var g=l.$$slots[d];if(g)return g(a,b,e,c,N);if(x(g))throw ca("noslot",d,za(ga));}else return l(a,b,e,c,N)}var n,s,v,y,ba,M,R,ga;b===g?(f=d,ga=d.$$element):(ga=z(g),f=new qc(ga,d));ba=e;J?y=e.$new(!0):t&&(ba=e.$parent);l&&(R=m,R.$$boundTransclude=l,R.isSlotFilled=function(a){return!!l.$$slots[a]});H&&(M=ea(ga,f,R,H,y,e,J));J&&(da.$$addScopeInfo(ga,y,!0,!(A&&(A===J||A===J.$$originalDirective))),da.$$addScopeClass(ga,!0),y.$$isolateBindings=J.$$isolateBindings,s=qa(e,f,y,y.$$isolateBindings,J),s.removeWatches&&y.$on("$destroy",s.removeWatches));for(n in M){s=H[n];v=M[n];var P=s.$$bindings.bindToController;if(F){v.bindingInfo=P?qa(ba,f,v.instance,P,s):{};var q=v();q!==v.instance&&(v.instance=q,ga.data("$"+s.name+"Controller",q),v.bindingInfo.removeWatches&&v.bindingInfo.removeWatches(),v.bindingInfo=qa(ba,f,v.instance,P,s))}else v.instance=v(),ga.data("$"+s.name+"Controller",v.instance),v.bindingInfo=qa(ba,f,v.instance,P,s)}r(H,function(a,b){var c=a.require;a.bindToController&&!I(c)&&B(c)&&O(M[b].instance,X(b,c,ga,M))});r(M,function(a){var b=a.instance;if(C(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(C(b.$onInit))try{b.$onInit()}catch(e){c(e)}C(b.$doCheck)&&(ba.$watch(function(){b.$doCheck()}),b.$doCheck());C(b.$onDestroy)&&ba.$on("$destroy",function(){b.$onDestroy()})});n=0;for(s=h.length;n<s;n++)v=h[n],va(v,v.isolateScope?y:e,ga,f,v.require&&X(v.directiveName,v.require,ga,M),R);var N=e;J&&(J.template||null===J.templateUrl)&&(N=y);a&&a(N,g.childNodes,void 0,l);for(n=k.length-1;0<=n;n--)v=k[n],va(v,v.isolateScope?y:e,ga,f,v.require&&X(v.directiveName,v.require,ga,M),R);r(M,function(a){a=a.instance;C(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE,t=l.newScopeDirective,H=l.controllerDirectives,J=l.newIsolateScopeDirective,A=l.templateDirective,y=l.nonTlbTranscludeDirective,ba=!1,M=!1,T=l.hasElementTranscludeDirective,v=d.$$element=z(b),s,R,P,q=e,N,u=!1,Ib=!1,w,Da=0,D=a.length;Da<D;Da++){s=a[Da];var Ta=s.$$start,E=s.$$end;Ta&&(v=pd(b,Ta,E));P=void 0;if(n>s.priority)break;if(w=s.scope)s.templateUrl||(B(w)?(aa("new/isolated scope",J||t,s,v),J=s):aa("new/isolated scope",J,s,v)),t=t||s;R=s.name;if(!u&&(s.replace&&(s.templateUrl||s.template)||s.transclude&&!s.$$tlb)){for(w=Da+1;u=a[w++];)if(u.transclude&&!u.$$tlb||u.replace&&(u.templateUrl||u.template)){Ib=!0;break}u=!0}!s.templateUrl&&s.controller&&(H=H||S(),aa("'"+R+"' controller",H[R],s,v),H[R]=s);if(w=s.transclude)if(ba=!0,s.$$tlb||(aa("transclusion",y,s,v),y=s),"element"===w)T=!0,n=s.priority,P=v,v=d.$$element=z(da.$$createComment(R,d[R])),b=v[0],ma(g,xa.call(P,0),b),P[0].$$parentNode=P[0].parentNode,q=W(Ib,P,e,n,f&&f.name,{nonTlbTranscludeDirective:y});else{var na=S();if(B(w)){P=[];var Ua=S(),Ma=S();r(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Ua[a]=b;na[b]=null;Ma[b]=c});r(v.contents(),function(a){var b=Ua[Ea(ya(a))];b?(Ma[b]=!0,na[b]=na[b]||[],na[b].push(a)):P.push(a)});r(Ma,function(a,b){if(!a)throw ca("reqslot",b);});for(var L in na)na[L]&&(na[L]=W(Ib,na[L],e))}else P=z(nc(b)).contents();v.empty();q=W(Ib,P,e,void 0,void 0,{needsNewScope:s.$$isolateScope||s.$$newScope});q.$$slots=na}if(s.template)if(M=!0,aa("template",A,s,v),A=s,w=C(s.template)?s.template(v,d):s.template,w=Ia(w),s.replace){f=s;P=kc.test(w)?qd(ka(s.templateNamespace,Q(w))):[];b=P[0];if(1!==P.length||1!==b.nodeType)throw ca("tplrt",R,"");ma(g,v,b);D={$attr:{}};w=K(b,[],D);var rc=a.splice(Da+1,a.length-(Da+1));(J||t)&&Z(w,J,t);a=a.concat(w).concat(rc);fa(d,D);D=a.length}else v.html(w);if(s.templateUrl)M=!0,aa("template",A,s,v),A=s,s.replace&&(f=s),p=ja(a.splice(Da,a.length-Da),v,d,g,ba&&q,h,k,{controllerDirectives:H,newScopeDirective:t!==s&&t,newIsolateScopeDirective:J,templateDirective:A,nonTlbTranscludeDirective:y}),D=a.length;else if(s.compile)try{N=s.compile(v,d,q);var U=s.$$originalDirective||s;C(N)?m(null,Ra(U,N),Ta,E):N&&m(Ra(U,N.pre),Ra(U,N.post),Ta,E)}catch($){c($,za(v))}s.terminal&&(p.terminal=!0,n=Math.max(n,s.priority))}p.scope=t&&!0===t.scope;p.transcludeOnThisElement=ba;p.templateOnThisElement=M;p.transclude=q;l.hasElementTranscludeDirective=T;return p}function X(a,b,c,d){var e;if(E(b)){var g=b.match(l);b=b.substring(g[0].length);var f=g[1]||g[3],g="?"===g[2];"^^"===f?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=f?c.inheritedData(h):c.data(h)}if(!e&&!g)throw ca("ctreq",b,a);}else if(I(b))for(e=[],f=0,g=b.length;f<g;f++)e[f]=X(a,b[f],c,d);else B(b)&&(e={},r(b,function(b,g){e[g]=X(a,b,c,d)}));return e||null}function ea(a,b,c,d,e,g,f){var h=S(),k;for(k in d){var l=d[k],m={$scope:l===f||l.$$isolateScope?e:g,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"===p&&(p=b[l.name]);m=R(p,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function Z(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=$b(a[d],{$$isolateScope:b,$$newScope:c})}function U(b,c,e,g,h,k,l){if(c===h)return null;var m=null;if(f.hasOwnProperty(c)){h=a.get(c+"Directive");for(var p=0,n=h.length;p<n;p++)if(c=h[p],(x(g)||g>c.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=$b(c,{$$start:k,$$end:l}));if(!c.$$bindings){var t=m=c,G=c.name,H={isolateScope:null,bindToController:null};B(t.scope)&&(!0===t.bindToController?(H.bindToController=d(t.scope,G,!0),H.isolateScope={}):H.isolateScope=d(t.scope,G,!1));B(t.bindToController)&&(H.bindToController=d(t.bindToController,G,!0));if(H.bindToController&&!t.controller)throw ca("noctrl",G);m=m.$$bindings=H;B(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function $(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function fa(a,b){var c=b.$attr,d=a.$attr;r(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ja(a,b,d,g,f,h,k,l){var m=[],p,n,t=b[0],H=a.shift(),s=$b(H,{templateUrl:null,transclude:null,replace:null,$$originalDirective:H}),F=C(H.templateUrl)?H.templateUrl(b,d):H.templateUrl,v=H.templateNamespace;b.empty();e(F).then(function(c){var e,G;c=Ia(c);if(H.replace){c=kc.test(c)?qd(ka(v,Q(c))):[];e=c[0];if(1!==c.length||1!==e.nodeType)throw ca("tplrt",H.name,F);c={$attr:{}};ma(g,b,e);var J=K(e,[],c);B(H.scope)&&Z(J,!0);a=J.concat(a);fa(d,c)}else e=t,b.html(c);a.unshift(s);p=Y(a,e,d,f,b,H,h,k,l);r(g,function(a,c){a===e&&(g[c]=b[0])});for(n=Ua(b[0].childNodes,f);m.length;){c=m.shift();G=m.shift();var y=m.shift(),A=m.shift(),J=b[0];if(!c.$$destroyed){if(G!==t){var M=G.className;l.hasElementTranscludeDirective&&H.replace||(J=nc(e));ma(y,z(G),J);na(z(J),M)}G=p.transcludeOnThisElement?Ma(c,p.transclude,A):A;p(n,c,J,g,G)}}m=null}).catch(function(a){bc(a)&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b,c,d,a):(p.transcludeOnThisElement&&(a=Ma(b,p.transclude,e)),p(n,b,c,d,a)))}}function la(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function aa(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ca("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,za(d));}function oa(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&da.$$addBindingClass(a);return function(a,c){var e=c.parent();b||da.$$addBindingClass(e);da.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ka(a,b){a=L(a||"html");switch(a){case "svg":case "math":var c=w.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function ua(a,b){if("srcdoc"===b)return T.HTML;var c=ya(a);if("src"===b||"ngSrc"===b){if(-1===["img","video","audio","source","track"].indexOf(c))return T.RESOURCE_URL}else if("xlinkHref"===b||"form"===c&&"action"===b||"link"===c&&"href"===b)return T.RESOURCE_URL}function wa(a,c,d,e,g){var f=ua(a,e),h=k[e]||g,l=b(d,!g,f,h);if(l){if("multiple"===e&&"select"===ya(a))throw ca("selmulti",za(a));if(m.test(e))throw ca("nodomevents");c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers=S());var k=g[e];k!==d&&(l=k&&b(k,!0,f,h),d=k);l&&(g[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!==b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function ma(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,h;if(a)for(f=0,h=a.length;f<h;f++)if(a[f]===d){a[f++]=c;h=f+e-1;for(var k=a.length;f<k;f++,h++)h<k?a[f]=a[h]:delete a[f];a.length-=e-1;a.context===d&&(a.context=c);break}g&&g.replaceChild(c,d);a=w.document.createDocumentFragment();for(f=0;f<e;f++)a.appendChild(b[f]);z.hasData(d)&&(z.data(c,z.data(d)),z(d).off("$destroy"));z.cleanData(a.querySelectorAll("*"));for(f=1;f<e;f++)delete b[f];b[0]=c;b.length=1}function ta(a,b){return O(function(){return a.apply(null,arguments)},a,b)}function va(a,b,d,e,g,f){try{a(b,d,e,g,f)}catch(h){c(h,za(d))}}function pa(a,b){if(s)throw ca("missingattr",a,b);}function qa(a,c,d,e,g){function f(b,c,e){C(d.$onChanges)&&!cc(c,e)&&(ha||(a.$$postDigest(N),ha=[]),m||(m={},ha.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Jb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;r(e,function(e,h){var m=e.attrName,n=e.optional,t,G,s,F;switch(e.mode){case "@":n||ra.call(c,m)||(pa(m,g.name),d[h]=c[m]=void 0);n=c.$observe(m,function(a){if(E(a)||Na(a))f(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;t=c[m];E(t)?d[h]=b(t)(a):Na(t)&&(d[h]=t);l[h]=new Jb(sc,d[h]);k.push(n);break;case "=":if(!ra.call(c,m)){if(n)break;pa(m,g.name);c[m]=void 0}if(n&&!c[m])break;G=p(c[m]);F=G.literal?sa:cc;s=G.assign||function(){t=d[h]=G(a);throw ca("nonassign",c[m],m,g.name);};t=d[h]=G(a);n=function(b){F(b,d[h])||(F(b,t)?s(a,b=d[h]):d[h]=b);return t=b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(p(c[m],n),null,G.literal);k.push(n);break;case "<":if(!ra.call(c,m)){if(n)break;pa(m,g.name);c[m]=void 0}if(n&&!c[m])break;G=p(c[m]);var v=G.literal,y=d[h]=G(a);l[h]=new Jb(sc,d[h]);n=a.$watch(G,function(a,b){if(b===a){if(b===y||v&&sa(b,y))return;b=y}f(h,a,b);d[h]=a},v);k.push(n);break;case "&":n||ra.call(c,m)||pa(m,g.name);G=c.hasOwnProperty(m)?p(c[m]):D;if(G===D&&n)break;d[h]=function(b){return G(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Ja=/^\w/,Ba=w.document.createElement("div"),Ka=y,La=t,Fa=v,ha;qc.prototype={$normalize:Ea,$addClass:function(a){a&&0<a.length&&P.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&P.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=rd(a,b);c&&c.length&&P.addClass(this.$$element,c);(c=rd(b,a))&&c.length&&P.removeClass(this.$$element,c)},$set:function(a,b,d,e){var g=kd(this.$$element[0],a),f=sd[a],h=a;g?(this.$$element.prop(a,b),e=g):f&&(this[f]=b,h=f);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Vc(a,"-"));g=ya(this.$$element);if("a"===g&&("href"===a||"xlinkHref"===a)||"img"===g&&"src"===a)this[a]=b=q(b,"src"===a);else if("img"===g&&"srcset"===a&&u(b)){for(var g="",f=Q(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(f)?k:/(,)/,f=f.split(k),k=Math.floor(f.length/2),l=0;l<k;l++)var m=2*l,g=g+q(Q(f[m]),!0),g=g+(" "+Q(f[m+1]));f=Q(f[2*l]).split(/\s/);g+=q(Q(f[0]),!0);2===f.length&&(g+=" "+Q(f[1]));this[a]=b=g}!1!==d&&(null===b||x(b)?this.$$element.removeAttr(e):Ja.test(e)?this.$$element.attr(e,b):Ta(this.$$element[0],e,b));(a=this.$$observers)&&r(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=S()),e=d[a]||(d[a]=[]);e.push(b);M.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||x(c[a])||b(c[a])});return function(){cb(e,b)}}};var Ga=b.startSymbol(),Ha=b.endSymbol(),Ia="{{"===Ga&&"}}"===Ha?ab:function(a){return a.replace(/\{\{/g,Ga).replace(/}}/g,Ha)},Pa=/^ngAttr[A-Z]/,Qa=/^(.+)Start$/;da.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:D;da.$$addBindingClass=n?function(a){na(a,"ng-binding")}:D;da.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:D;da.$$addScopeClass=n?function(a,b){na(a,b?"ng-isolate-scope":"ng-scope")}:D;da.$$createComment=function(a,b){var c="";n&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return w.document.createComment(c)};return da}]}function Jb(a,b){this.previousValue=a;this.currentValue=b}function Ea(a){return a.replace(od,"").replace(tg,function(a,d,c){return c?d.toUpperCase():d})}function rd(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g===e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function qd(a){a=z(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Oa&&""===d.nodeValue.trim())&&ug.call(a,b,1)}return a}function sg(a,b){if(b&&E(b))return b;if(E(a)){var d=td.exec(a);if(d)return d[3]}}function yf(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Ia(b,"controller");B(b)?O(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!B(a.$scope))throw K("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,p;h=!0===h;k&&E(k)&&(p=k);if(E(f)){k=f.match(td);if(!k)throw ud("ctrlfmt",f);m=k[1];p=p||k[3];f=a.hasOwnProperty(m)?a[m]:Xc(g.$scope,m,!0)||(b?Xc(c,m,!0):void 0);if(!f)throw ud("ctrlreg",m);sb(f,m,!0)}if(h)return h=(I(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),p&&e(g,p,l,m||f.name),O(function(){var a=d.invoke(f,l,g,m);a!==l&&(B(a)||C(a))&&(l=a,p&&e(g,p,l,m||f.name));return l},{instance:l,identifier:p});l=d.instantiate(f,g,m);p&&e(g,p,l,m||f.name);return l}}]}function zf(){this.$get=["$window",function(a){return z(a.document)}]}function Af(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}
function Bf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function tc(a){return B(a)?fa(a)?a.toISOString():eb(a):a}function Gf(){this.$get=function(){return function(a){if(!a)return"";var b=[];Oc(a,function(a,c){null===a||x(a)||C(a)||(I(a)?r(a,function(a){b.push(ja(c)+"="+ja(tc(a)))}):b.push(ja(c)+"="+ja(tc(a))))});return b.join("&")}}}function Hf(){this.$get=function(){return function(a){function b(a,e,f){null===a||x(a)||(I(a)?r(a,function(a,c){b(a,e+"["+(B(a)?c:"")+"]")}):B(a)&&!fa(a)?Oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+"="+ja(tc(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function uc(a,b){if(E(a)){var d=a.replace(vg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(vd),e;(e=c)||(e=(e=d.match(wg))&&xg[e[0]].test(d));if(e)try{a=Rc(d)}catch(f){if(!c)return a;throw Kb("baddata",a,f);}}}return a}function wd(a){var b=S(),d;E(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=L(Q(a.substr(0,d)));a=Q(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):B(a)&&r(a,function(a,d){var f=L(d),g=Q(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function xd(a){var b;return function(d){b||(b=wd(a));return d?(d=b[L(d)],void 0===d&&(d=null),d):b}}function yd(a,b,d,c){if(C(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Ff(){var a=this.defaults={transformResponse:[uc],transformRequest:[function(a){return B(a)&&"[object File]"!==ia.call(a)&&"[object Blob]"!==ia.call(a)&&"[object FormData]"!==ia.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ka(vc),put:ka(vc),patch:ka(vc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return u(a)?(b=!!a,this):b};var d=this.interceptors=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(c,e,f,g,h,k,l,m){function p(b){function d(a,b){for(var c=0,e=b.length;c<e;){var g=b[c++],f=b[c++];a=a.then(g,f)}b.length=0;return a}function e(a,b){var c,d={};r(a,function(a,e){C(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}function g(a){var b=O({},a);b.data=yd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}if(!B(b))throw K("$http")("badreq",b);if(!E(m.valueOf(b.url)))throw K("$http")("badreq",b.url);var f=O({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);f.headers=function(b){var c=a.headers,d=O({},b.headers),g,f,h,c=O({},c.common,c[L(b.method)]);a:for(g in c){f=L(g);for(h in d)if(L(h)===f)continue a;d[g]=c[g]}return e(d,ka(b))}(b);f.method=ub(f.method);f.paramSerializer=E(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;c.$$incOutstandingRequestCount();var h=[],p=[];b=k.resolve(f);r(y,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&p.push(a.response,a.responseError)});b=d(b,h);b=b.then(function(b){var c=b.headers,d=yd(b.data,xd(c),void 0,b.transformRequest);x(d)&&r(c,function(a,b){"content-type"===L(b)&&delete c[b]});x(b.withCredentials)&&!x(a.withCredentials)&&(b.withCredentials=a.withCredentials);return n(b,d).then(g,g)});b=d(b,p);return b=b.finally(function(){c.$$completeOutstandingRequest(D)})}function n(c,d){function g(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e,g){function f(){n(c,a,d,e,g)}M&&(200<=a&&300>a?M.put(N,[a,c,wd(d),e,g]):M.remove(N));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e,g){b=-1<=b?b:0;(200<=b&&300>b?J.resolve:J.reject)({data:a,status:b,headers:xd(d),config:c,statusText:e,xhrStatus:g})}function G(a){n(a.data,a.status,ka(a.headers()),a.statusText,a.xhrStatus)}function y(){var a=p.pendingRequests.indexOf(c);-1!==a&&p.pendingRequests.splice(a,1)}var J=k.defer(),R=J.promise,M,T,P=c.headers,q="jsonp"===L(c.method),N=c.url;q?N=m.getTrustedResourceUrl(N):E(N)||(N=m.valueOf(N));N=F(N,c.paramSerializer(c.params));q&&(N=s(N,c.jsonpCallbackParam));p.pendingRequests.push(c);R.then(y,y);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(M=B(c.cache)?c.cache:B(a.cache)?a.cache:v);M&&(T=M.get(N),u(T)?T&&C(T.then)?T.then(G,G):I(T)?n(T[1],T[0],ka(T[2]),T[3],T[4]):n(T,200,{},"OK","complete"):M.put(N,R));x(T)&&((T=zd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(P[c.xsrfHeaderName||a.xsrfHeaderName]=T),e(c.method,N,d,l,P,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers)));return R}function F(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function s(a,b){var c=a.split("?");if(2<c.length)throw Kb("badjsonp",a);c=ec(c[1]);r(c,function(c,d){if("JSON_CALLBACK"===c)throw Kb("badjsonp",a);if(d===b)throw Kb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var v=g("$http");a.paramSerializer=E(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var y=[];r(d,function(a){y.unshift(E(a)?l.get(a):l.invoke(a))});p.pendingRequests=[];(function(a){r(arguments,function(a){p[a]=function(b,c){return p(O({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){p[a]=function(b,c,d){return p(O({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");p.defaults=a;return p}]}function Jf(){this.$get=function(){return function(){return new w.XMLHttpRequest}}}
function If(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return yg(a,c,a.defer,b,d[0])}]}function yg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,F="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),F=a.type,g="error"===a.type?404:200);d&&d(g,F)};f.addEventListener("load",m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,h,k,l,m,p,n,F,s,v){function y(){q&&q();A&&A.abort()}function t(a,b,c,e,g,f){u(G)&&d.cancel(G);q=A=null;a(b,c,e,g,f)}h=h||a.url();if("jsonp"===L(e))var Aa=c.createCallback(h),q=f(h,Aa,function(a,b){var d=200===a&&c.getResponse(Aa);t(l,a,d,"",b,"complete");c.removeCallback(Aa)});else{var A=b(e,h);A.open(e,h,!0);r(m,function(a,b){u(a)&&A.setRequestHeader(b,a)});A.onload=function(){var a=A.statusText||"",b="response"in A?A.response:A.responseText,c=1223===A.status?204:A.status;0===c&&(c=b?200:"file"===ta(h).protocol?404:0);t(l,c,b,A.getAllResponseHeaders(),a,"complete")};A.onerror=function(){t(l,-1,null,null,"","error")};A.onabort=function(){t(l,-1,null,null,"","abort")};A.ontimeout=function(){t(l,-1,null,null,"","timeout")};r(s,function(a,b){A.addEventListener(b,a)});r(v,function(a,b){A.upload.addEventListener(b,a)});n&&(A.withCredentials=!0);if(F)try{A.responseType=F}catch(H){if("json"!==F)throw H;}A.send(x(k)?null:k)}if(0<p)var G=d(y,p);else p&&C(p.then)&&p.then(y)}}function Df(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(p,a).replace(n,b)}function h(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function k(f,k,p,n){function t(a){try{var b=a;a=p?e.getTrusted(p,b):e.valueOf(b);return n&&!u(a)?a:gc(a)}catch(d){c(Fa.interr(f,d))}}if(!f.length||-1===f.indexOf(a)){var r;k||(k=g(f),r=la(k),r.exp=f,r.expressions=[],r.$$watchDelegate=h);return r}n=!!n;var q,A,H=0,G=[],ba=[];r=f.length;for(var J=[],R=[];H<r;)if(-1!==(q=f.indexOf(a,H))&&-1!==(A=f.indexOf(b,q+l)))H!==q&&J.push(g(f.substring(H,q))),H=f.substring(q+l,A),G.push(H),ba.push(d(H,t)),H=A+m,R.push(J.length),J.push("");else{H!==r&&J.push(g(f.substring(H)));break}p&&1<J.length&&Fa.throwNoconcat(f);if(!k||G.length){var M=function(a){for(var b=0,c=G.length;b<c;b++){if(n&&x(a[b]))return;J[R[b]]=a[b]}return J.join("")};return O(function(a){var b=0,d=G.length,e=Array(d);try{for(;b<d;b++)e[b]=ba[b](a);return M(e)}catch(g){c(Fa.interr(f,g))}},{exp:f,expressions:G,$$watchDelegate:function(a,b){var c;return a.$watchGroup(ba,function(d,e){var g=M(d);b.call(this,g,d!==e?c:g,a);c=g})}})}}var l=a.length,m=b.length,p=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function Ef(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,m){function p(){n?f.apply(null,F):f(y)}var n=4<arguments.length,F=n?xa.call(arguments,4):[],s=b.setInterval,v=b.clearInterval,y=0,t=u(m)&&!m,r=(t?c:d).defer(),q=r.promise;l=u(l)?l:0;q.$$intervalId=s(function(){t?e.defer(p):a.$evalAsync(p);r.notify(y++);0<l&&y>=l&&(r.resolve(y),v(q.$$intervalId),delete g[q.$$intervalId]);t||a.$apply()},k);g[q.$$intervalId]=r;return q}
var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].promise.$$state.pur=!0,g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function wc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=fb(a[b].replace(/%2F/g,"/"));return a.join("/")}function Ad(a,b){var d=ta(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=Z(d.port)||zg[d.protocol]||null}function Bd(a,b,d){if(Ag.test(a))throw kb("badpath",a);var c="/"!==a.charAt(0);c&&(a="/"+a);a=ta(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=ec(a.search);b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function xc(a,b){return a.slice(0,b.length)===b}function ua(a,b){if(xc(b,a))return b.substr(a.length)}function La(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function lb(a){return a.replace(/(#.+)|#$/,"$1")}function yc(a,b,d){this.$$html5=!0;d=d||"";Ad(a,this);this.$$parse=function(a){var d=ua(b,a);if(!E(d))throw kb("ipthprfx",a,b);Bd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=fc(this.$$search),d=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=wc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1);this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;u(f=ua(a,c))?(g=f,g=d&&u(f=ua(d,f))?b+(ua("/",f)||f):a+g):u(f=ua(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function zc(a,b,d){Ad(a,this);this.$$parse=function(c){var e=ua(a,c)||ua(b,c),f;x(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",x(e)&&(a=c,this.replace())):(f=ua(d,e),x(f)&&(f=e));Bd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;xc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=fc(this.$$search),e=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=wc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"");this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(b,d){return La(a)===La(b)?(this.$$parse(b),!0):!1}}function Cd(a,b,d){this.$$html5=!0;zc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===La(c)?f=c:(g=ua(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=fc(this.$$search),e=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=wc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url;this.$$urlUpdatedByLocation=!0}}function Lb(a){return function(){return this[a]}}function Dd(a,b){return function(d){if(x(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Lf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return u(b)?(a=b,this):a};this.html5Mode=function(a){if(Na(a))return b.enabled=a,this;if(B(a)){Na(a.enabled)&&(b.enabled=a.enabled);Na(a.requireBase)&&(b.requireBase=a.requireBase);if(Na(a.rewriteLinks)||E(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=l.url(),g=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(f){throw l.url(e),l.$$state=g,f;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var p=c.url(),n;if(b.enabled){if(!m&&b.requireBase)throw kb("nobase");n=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(m||"/");m=e.history?yc:Cd}else n=La(p),m=zc;var F=n.substr(0,La(n).lastIndexOf("/")+1);l=new m(n,F,"#"+a);l.$$parseLinkUrl(p,p);l.$$state=c.state();var s=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var h=z(a.target);"a"!==ya(h[0]);)if(h[0]===f[0]||!(h=h.parent())[0])return;if(!E(e)||!x(h.attr(e))){var e=h.prop("href"),k=h.attr("href")||h.attr("xlink:href");B(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ta(e.animVal).href);s.test(e)||!e||h.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(e,k)||(a.preventDefault(),l.absUrl()!==c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}});lb(l.absUrl())!==lb(p)&&c.url(l.absUrl(),!0);var v=!0;c.onUrlChange(function(a,b){xc(a,F)?(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,g;a=lb(a);l.$$parse(a);l.$$state=b;g=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(g?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(v=!1,k(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(v||l.$$urlUpdatedByLocation){l.$$urlUpdatedByLocation=!1;var a=lb(c.url()),b=lb(l.absUrl()),g=c.state(),f=l.$$replace,m=a!==b||l.$$html5&&e.history&&g!==l.$$state;if(v||m)v=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,g).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=g):(m&&h(b,f,g===l.$$state?null:l.$$state),k(a,g)))})}l.$$replace=!1});return l}]}function Mf(){var a=!0,b=this;this.debugEnabled=function(b){return u(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){bc(a)&&(a.stack&&f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||D;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}var f=Ca||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Bg(a){return a+""}function Cg(a,b){return"undefined"!==typeof a?a:b}function Ed(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Dg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!==a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Fd:b}function W(a,b,d){var c,e,f=a.isPure=Dg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){W(a.expression,b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:W(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:W(a.left,b,f);W(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:W(a.left,b,f);W(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:W(a.test,b,f);W(a.alternate,b,f);W(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:W(a.object,b,f);a.computed&&W(a.property,b,f);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){W(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:W(a.left,b,f);W(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){W(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){W(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(W(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e,a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Gd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Hd(a){return a.type===q.Identifier||a.type===q.MemberExpression}function Id(a){if(1===a.body.length&&Hd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function Jd(a){this.$filter=a}function Kd(a){this.$filter=a}function Mb(a,b,d){this.ast=new q(a,d);this.astCompiler=d.csp?new Kd(b):new Jd(b)}function Ac(a){return C(a.valueOf)?a.valueOf():Eg.call(a)}function Nf(){var a=S(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,g;switch(typeof b){case "string":return g=b=b.trim(),d=a[g],d||(d=new Nb(n),d=(new Mb(d,e,n)).parse(b),d.constant?d.$$watchDelegate=m:d.oneTime?d.$$watchDelegate=d.literal?l:k:d.inputs&&(d.$$watchDelegate=h),a[g]=d),p(d,c);case "function":return p(b,c);default:return p(D,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Ac(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function h(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Ac(b));return h},b,c,e)}for(var l=[],m=[],p=0,n=f.length;p<n;p++)l[p]=g,m[p]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&Ac(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function k(a,b,c,d,e){function g(a){return d(a)}function f(a,c,d){l=a;C(b)&&b(a,c,d);u(a)&&d.$$postDigest(function(){u(l)&&k()})}var k,l;return k=d.inputs?h(a,f,c,d,e):a.$watch(g,f,c)}function l(a,b,c,d){function e(a){var b=!0;r(a,function(a){u(a)||(b=!1)});return b}var g,f;return g=a.$watch(function(a){return d(a)},function(a,c,d){f=a;C(b)&&b(a,c,d);e(a)&&d.$$postDigest(function(){e(f)&&g()})},c)}function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,e=c!==l&&c!==k?function(c,e,g,f){g=d&&f?f[0]:a(c,e,g,f);return b(g,c,e)}:function(c,d,e,g){e=a(c,d,e,g);c=b(e,c,d);return u(e)?c:e},d=!a.inputs;c&&c!==h?(e.$$watchDelegate=c,e.inputs=a.inputs):b.$stateful||(e.$$watchDelegate=h,e.inputs=a.inputs?a.inputs:[a]);e.inputs&&(e.inputs=e.inputs.map(function(a){return a.isPure===Fd?function(b){return a(b)}:a}));return e}var n={csp:Ja().noUnsafeEval,literals:pa(b),isIdentifierStart:C(d)&&d,isIdentifierContinue:C(c)&&c};f.$$getAst=function(a){var b=new Nb(n);return(new Mb(b,e,n)).getAst(a).ast};return f}]}function Pf(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Ld(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return u(b)?(a=b,this):a}}function Qf(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Ld(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return u(b)?(a=b,this):a}}function Ld(a,b,d){function c(){return new e}function e(){var a=this.promise=new f;this.resolve=function(b){k(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!u&&w.length;){var a=w.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):x(c)?"undefined":"string"!==typeof c?De(c,void 0):c);bc(a.value)?b(a.value,c):b(c)}}}function h(c){!d||c.pending||2!==c.status||c.pur||(0===u&&0===w.length&&a(g),w.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++u,a(function(){var e,f,h;h=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,p=h.length;l<p;++l){c.pur=!0;f=h[l][0];e=h[l][c.status];try{C(e)?k(f,e(c.value)):1===c.status?k(f,c.value):m(f,c.value)}catch(n){m(f,n),n&&!0===n.$$passToExceptionHandler&&b(n)}}}finally{--u,d&&0===u&&a(g)}}))}function k(a,b){a.$$state.status||(b===a?p(a,t("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||(g=!0,p(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(B(b)||C(b))f=b.then;C(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,h(a.$$state))}catch(k){d(k)}}function m(a,b){a.$$state.status||p(a,b)}function p(a,b){a.$$state.value=b;a.$$state.status=2;h(a.$$state)}function n(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,g=0,f=e.length;g<f;g++){c=e[g][0];a=e[g][3];try{n(c,C(a)?a(d):d)}catch(h){b(h)}}})}function F(a){var b=new f;m(b,a);return b}function s(a,b,c){var d=null;try{C(c)&&(d=c())}catch(e){return F(e)}return d&&C(d.then)?d.then(function(){return b(a)},F):b(a)}function v(a,b,c,d){var e=new f;k(e,a);return e.then(b,c,d)}function q(a){if(!C(a))throw t("norslvr",a);var b=new f;a(function(a){k(b,a)},function(a){m(b,a)});return b}var t=K("$q",TypeError),u=0,w=[];O(f.prototype,{then:function(a,b,c){if(x(a)&&x(b)&&x(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&h(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return s(b,A,a)},function(b){return s(b,F,a)},b)}});var A=v;q.prototype=f.prototype;q.defer=c;q.reject=F;q.when=v;q.resolve=A;q.all=function(a){var b=new f,c=0,d=I(a)?[]:{};r(a,function(a,e){c++;v(a).then(function(a){d[e]=a;--c||k(b,d)},function(a){m(b,a)})});0===c&&k(b,d);return b};q.race=function(a){var b=c();r(a,function(a){v(a).then(b.resolve,b.reject)});return b.promise};return q}function Zf(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function Of(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++qb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=K("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===Ca&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++qb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function p(a){if(t.$$phase)throw d("inprog",t.$$phase);t.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function F(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function v(){for(;A.length;)try{A.shift()()}catch(a){f(a)}e=null}function q(){null===e&&(e=h.defer(function(){t.$apply(v)}))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",k);return d},$watch:function(a,b,d,e){var f=g(a);b=C(b)?b:D;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(B(e))if(wa(e))for(f!==p&&(f=p,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==n&&(f=n={},t=0,l++);a=0;for(b in e)ra.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)ra.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),p=[],n={},s=!0,t=0;return this.$watch(m,function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(B(e))if(wa(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ra.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,m,n,r,F=b,q,A=[],y,x;p("$digest");h.$$checkUrlChange();this===t&&null!==e&&(h.defer.cancel(e),v());c=null;do{r=!1;q=this;for(n=0;n<u.length;n++){try{x=u[n],l=x.fn,l(x.scope,x.locals)}catch(z){f(z)}c=null}u.length=0;a:do{if(n=q.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a=n[n.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(k=a.last)&&!(a.eq?sa(g,k):U(g)&&U(k)))r=!0,c=a,a.last=a.eq?pa(g,null):g,l=a.fn,l(g,k===s?g:k,q),5>F&&(y=4-F,A[y]||(A[y]=[]),A[y].push({msg:C(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:k}));else if(a===c){r=!1;break a}}catch(D){f(D)}if(!(n=q.$$watchersCount&&q.$$childHead||q!==this&&q.$$nextSibling))for(;q!==this&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((r||u.length)&&!F--)throw t.$$phase=null,d("infdig",b,A);}while(r||u.length);for(t.$$phase=null;H<w.length;)try{w[H++]()}catch(B){f(B)}w.length=H=0;h.$$checkUrlChange()},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===t&&h.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)F(this,this.$$listenerCount[b],b);a&&a.$$childHead===this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=D;this.$on=this.$watch=this.$watchGroup=function(){return D};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){t.$$phase||u.length||h.defer(function(){u.length&&t.$digest()});u.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){w.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{t.$$phase=null}}catch(b){f(b)}finally{try{t.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&A.push(b);a=g(a);q()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(delete c[d],F(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var t=new m,u=t.$$asyncQueue=[],w=t.$$postDigestQueue=[],A=t.$$applyAsyncQueue=[],H=0;return t}]}function Ge(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return u(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return u(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=ta(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Fg(a){if("self"===a)return a;if(E(a)){if(-1<a.indexOf("***"))throw va("iwcard",a);a=Md(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if($a(a))return new RegExp("^"+a.source+"$");throw va("imatcher");}function Nd(a){var b=[];u(a)&&r(a,function(a){b.push(Fg(a))});return b}function Sf(){this.SCE_CONTEXTS=oa;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Nd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Nd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?zd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw va("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[oa.HTML]=e(g);h[oa.CSS]=e(g);h[oa.URL]=e(g);h[oa.JS]=e(g);h[oa.RESOURCE_URL]=e(h[oa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw va("icontext",a,b);if(null===b||x(b)||""===b)return b;if("string"!==typeof b)throw va("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||x(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===oa.RESOURCE_URL){var g=ta(e.toString()),p,n,r=!1;p=0;for(n=a.length;p<n;p++)if(c(a[p],g)){r=!0;break}if(r)for(p=0,n=b.length;p<n;p++)if(c(b[p],g)){r=!1;break}if(r)return e;throw va("insecurl",e.toString());}if(d===oa.HTML)return f(e);throw va("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Rf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ca)throw va("iequirks");var c=ka(oa);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=ab);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(oa,function(a,b){var d=L(b);c[("parse_as_"+d).replace(Bc,wb)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Bc,wb)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Bc,wb)]=function(b){return g(a,b)}});return c}]}
function Tf(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=Z((/android (\d+)/.exec(L((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h=g.body&&g.body.style,k=!1,l=!1;h&&(k=!!("transition"in h||"webkitTransition"in h),l=!!("animation"in h||"webkitAnimation"in h));return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===a&&Ca)return!1;if(x(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ja(),transitions:k,animations:l,android:e}}]}function Vf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(h,k){g.totalPendingRequests++;if(!E(h)||x(d.get(h)))h=f.getTrustedResourceUrl(h);var l=c.defaults&&c.defaults.transformResponse;I(l)?l=l.filter(function(a){return a!==uc}):l===uc&&(l=null);return c.get(h,O({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){d.put(h,a.data);return a.data},function(a){k||(a=Gg("tpload",h,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function Wf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var c=$.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+Md(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Xf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,k,l){C(f)||(l=k,k=f,f=D);var m=xa.call(arguments,3),p=u(l)&&!l,n=(p?c:d).defer(),r=n.promise,s;s=b.defer(function(){try{n.resolve(f.apply(null,m))}catch(b){n.reject(b),e(b)}finally{delete g[r.$$timeoutId]}p||a.$apply()},k);r.$$timeoutId=s;g[s]=n;return r}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].promise.$$state.pur=!0,g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function ta(a){Ca&&(X.setAttribute("href",a),a=X.href);X.setAttribute("href",a);return{href:X.href,protocol:X.protocol?X.protocol.replace(/:$/,""):"",host:X.host,search:X.search?X.search.replace(/^\?/,""):"",hash:X.hash?X.hash.replace(/^#/,""):"",hostname:X.hostname,port:X.port,pathname:"/"===X.pathname.charAt(0)?X.pathname:"/"+X.pathname}}function zd(a){a=E(a)?ta(a):a;return a.protocol===Od.protocol&&a.host===Od.host}function Yf(){this.$get=la(w)}function Pd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}
var d=a[0]||{},c={},e="";return function(){var a,g,h,k,l;try{a=d.cookie||""}catch(m){a=""}if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),x(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function bg(){this.$get=Pd}function ed(a){function b(d,c){if(B(d)){var e={};r(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",Qd);b("date",Rd);b("filter",Hg);b("json",Ig);b("limitTo",Jg);b("lowercase",Kg);b("number",Sd);b("orderBy",Td);b("uppercase",Lg)}function Hg(){return function(a,b,d,c){if(!wa(a)){if(null==a)return a;throw K("filter")("notarray",a);}c=c||"$";var e;switch(Cc(b)){case "function":break;case "boolean":case "null":case "number":case "string":e=!0;case "object":b=Mg(b,d,c,e);break;default:return a}return Array.prototype.filter.call(a,b)}}function Mg(a,b,d,c){var e=B(a)&&d in a;!0===b?b=sa:C(b)||(b=function(a,b){if(x(a))return!1;if(null===a||null===b)return a===b;if(B(b)||B(a)&&!ac(a))return!1;a=L(""+a);b=L(""+b);return-1!==a.indexOf(b)});return function(f){return e&&!B(f)?ha(f,a[d],b,d,!1):ha(f,a,b,d,c)}}function ha(a,b,d,c,e,f){var g=Cc(a),h=Cc(b);if("string"===h&&"!"===b.charAt(0))return!ha(a,b.substring(1),d,c,e);if(I(a))return a.some(function(a){return ha(a,b,d,c,e)});switch(g){case "object":var k;if(e){for(k in a)if(k.charAt&&"$"!==k.charAt(0)&&ha(a[k],b,d,c,!0))return!0;return f?!1:ha(a,b,d,c,!1)}if("object"===h){for(k in b)if(f=b[k],!C(f)&&!x(f)&&(g=k===c,!ha(g?a:a[k],f,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function Cc(a){return null===a?"null":typeof a}function Qd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){x(c)&&(c=b.CURRENCY_SYM);x(e)&&(e=b.PATTERNS[1].maxFrac);var f=c?/\u00A4/g:/\s*\u00A4\s*/g;return null==a?a:Ud(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(f,c)}}function Sd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Ud(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Ng(a){var b=0,d,c,e,f,g;-1<(c=a.indexOf(Vd))&&(a=a.replace(Vd,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)===Dc;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Dc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Wd&&(d=d.splice(0,Wd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function Og(a,b,d,c){var e=a.d,f=e.length-a.i;b=x(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Ud(a,b,d,c,e){if(!E(a)&&!Y(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(f)k="\u221e";else{g=Ng(h);Og(g,e,b.minFrac,b.maxFrac);k=g.d;h=g.i;e=g.e;f=[];for(g=k.reduce(function(a,b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?f=k.splice(h,k.length):(f=k,k=[0]);h=[];for(k.length>=b.lgSize&&h.unshift(k.splice(-b.lgSize,k.length).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize,k.length).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Ob(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<b;)a=Dc+a;d&&(a=a.substr(a.length-b));return e+a}function ea(a,b,d,c,e){d=d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12===d&&(f=12);return Ob(f,b,c,e)}}function mb(a,b,d){return function(c,e){var f=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Xd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Yd(a){return function(b){var d=Xd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ob(b,a)}}function Ec(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Rd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=Z(b[9]+b[10]),g=Z(b[9]+b[11]));h.call(a,Z(b[1]),Z(b[2])-1,Z(b[3]));f=Z(b[4]||0)-f;g=Z(b[5]||0)-g;h=Z(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;E(c)&&(c=Pg.test(c)?Z(c):b(c));Y(c)&&(c=new Date(c));if(!fa(c)||!isFinite(c.getTime()))return c;for(;d;)(l=Qg.exec(d))?(h=db(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=Sc(f,m),c=dc(c,f,!0));r(h,function(b){k=Rg[b];g+=k?k(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ig(){return function(a,b){x(b)&&(b=2);return eb(a,b)}}function Jg(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):Z(b);if(U(b))return a;Y(a)&&(a=a.toString());if(!wa(a))return a;d=!d||isNaN(d)?0:Z(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Fc(a,d,d+b):0===d?Fc(a,b,a.length):Fc(a,Math.max(0,d+b),d)}}function Fc(a,b,d){return E(a)?a.slice(b,d):xa.call(a,b,d)}function Td(a){function b(b){return b.map(function(b){var c=1,d=ab;if(C(b))d=b;else if(E(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e=d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,k=b.type;if(d===k){var k=a.value,l=b.value;"string"===d?(k=k.toLowerCase(),l=l.toLowerCase()):"object"===d&&(B(k)&&(k=a.index),B(l)&&(l=b.index));k!==l&&(c=k<l?-1:1)}else c=d<k?-1:1;return c}return function(a,f,g,h){if(null==a)return a;if(!wa(a))throw K("orderBy")("notarray",a);I(f)||(f=[f]);0===f.length&&(f=["+"]);var k=b(f),l=g?-1:1,m=C(h)?h:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:k.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("object"===c)a:{if(C(e.valueOf)&&(e=e.valueOf(),d(e)))break a;ac(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var d=0,e=k.length;d<e;d++){var g=m(a.predicateValues[d],b.predicateValues[d]);if(g)return g*k[d].descending*l}return(m(a.tieBreaker,b.tieBreaker)||c(a.tieBreaker,b.tieBreaker))*l});return a=a.map(function(a){return a.value})}}function Qa(a){C(a)&&(a={link:a});a.restrict=a.restrict||"AC";return la(a)}function Pb(a,b,d,c,e){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=e(b.name||b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=Qb;this.$$element=a;this.$$animate=c;Zd(this)}function Zd(a){a.$$classCache={};a.$$classCache[$d]=!(a.$$classCache[nb]=a.$$element.hasClass(nb))}function ae(a){function b(a,b,c){c&&!a.$$classCache[b]?(a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Vc(c,"-"):"";b(a,nb+c,!0===d);b(a,$d+c,!1===d)}var c=a.set,e=a.unset;a.clazz.prototype.$setValidity=function(a,g,h){x(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,h)):(this.$pending&&e(this.$pending,a,h),be(this.$pending)&&(this.$pending=void 0));Na(g)?g?(e(this.$error,a,h),c(this.$$success,a,h)):(c(this.$error,a,h),e(this.$$success,a,h)):(e(this.$error,a,h),e(this.$$success,a,h));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=be(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,g,this)}}function be(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function Gc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Va(a,b,d,c,e,f){var g=L(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(){h=!0});b.on("compositionend",function(){h=!1;l()})}var k,l=function(a){k&&(f.defer.cancel(k),k=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=Q(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var m=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut drop",m)}b.on("change",l);if(ce[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=f.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Rb(a,b){return function(d,c){var e,f;if(fa(d))return d;if(E(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(Sg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function ob(a,b,d,c){return function(e,f,g,h,k,l,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function n(a){return u(a)&&!fa(a)?d(a)||void 0:a}Hc(e,f,g,h);Va(e,f,g,h,k,l);var r=h&&h.$options.getOption("timezone"),s;h.$$parserName=a;h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a))return a=d(a,s),r&&(a=dc(a,r)),a});h.$formatters.push(function(a){if(a&&!fa(a))throw pb("datefmt",a);if(p(a))return(s=a)&&r&&(s=dc(s,r,!0)),m("date")(a,c,r);s=null;return""});if(u(g.min)||g.ngMin){var q;h.$validators.min=function(a){return!p(a)||x(q)||d(a)>=q};g.$observe("min",function(a){q=n(a);h.$validate()})}if(u(g.max)||g.ngMax){var y;h.$validators.max=function(a){return!p(a)||x(y)||d(a)<=y};g.$observe("max",function(a){y=n(a);h.$validate()})}}}function Hc(a,b,d,c){(c.$$hasNativeValidators=B(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function de(a){a.$$parserName="number";a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(Tg.test(b))return parseFloat(b)});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!Y(b))throw pb("numfmt",b);b=b.toString()}return b})}function Wa(a){u(a)&&!Y(a)&&(a=parseFloat(a));return U(a)?void 0:a}function Ic(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function ee(a,b,d){a=Number(a);var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Ic(a):0,h=e?Ic(b):0,k=f?Ic(d):0,g=Math.max(g,h,k),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function fe(a,b,d,c,e){if(u(c)){a=a(c);if(!a.constant)throw pb("constexpr",d,c);return a(b)}return e}function Jc(a,b){function d(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e===b[f])continue a;c.push(e)}return c}function c(a){var b=a;I(a)?b=a.map(c).join(" "):B(a)&&(b=Object.keys(a).filter(function(b){return a[b]}).join(" "));return b}function e(a){var b=a;if(I(a))b=a.map(e);else if(B(a)){var c=!1,b=Object.keys(a).filter(function(b){b=a[b];!c&&x(b)&&(c=!0);return b});c&&b.push(void 0)}return b}a="ngClass"+a;var f;return["$parse",function(g){return{restrict:"AC",link:function(h,k,l){function m(a,b){var c=[];r(a,function(a){if(0<b||t[a])t[a]=(t[a]||0)+b,t[a]===+(0<b)&&c.push(a)});return c.join(" ")}function p(a){if(a===b){var c=w,c=m(c&&c.split(" "),1);l.$addClass(c)}else c=w,c=m(c&&c.split(" "),-1),l.$removeClass(c);u=a}function n(a){a=c(a);a!==w&&q(a)}function q(a){if(u===b){var c=w&&w.split(" "),e=a&&a.split(" "),g=d(c,e),c=d(e,c),g=m(g,-1),c=m(c,1);l.$addClass(c);l.$removeClass(g)}w=a}var s=l[a].trim(),v=":"===s.charAt(0)&&":"===s.charAt(1),s=g(s,v?e:c),y=v?n:q,t=k.data("$classCounts"),u=!0,w;t||(t=S(),k.data("$classCounts",t));"ngClass"!==a&&(f||(f=g("$index",function(a){return a&1})),h.$watch(f,p));h.$watch(s,y,v)}}}]}function Sb(a,b,d,c,e,f,g,h,k){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=k(d.name||"",!1)(a);this.$$parentForm=Qb;this.$options=Tb;this.$$updateEvents="";this.$$updateEventHandler=this.$$updateEventHandler.bind(this);this.$$parsedNgModel=e(d.ngModel);this.$$parsedNgModelAssign=this.$$parsedNgModel.assign;this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=null;this.$$parserValid=void 0;this.$$currentValidationRunId=0;Object.defineProperty(this,"$$scope",{value:a});this.$$attr=d;this.$$element=c;this.$$animate=f;this.$$timeout=g;this.$$parse=e;this.$$q=h;this.$$exceptionHandler=b;Zd(this);Ug(this)}
function Ug(a){a.$$scope.$watch(function(b){b=a.$$ngModelGet(b);b===a.$modelValue||a.$modelValue!==a.$modelValue&&b!==b||a.$$setModelValue(b);return b})}function Kc(a){this.$$options=a}function ge(a,b){r(b,function(b,c){u(a[c])||(a[c]=b)})}function Ga(a,b){a.prop("selected",b);a.attr("selected",b)}var Mc={objectMaxDepth:5},Vg=/^\/(.+)\/([a-z]*)$/,ra=Object.prototype.hasOwnProperty,L=function(a){return E(a)?a.toLowerCase():a},ub=function(a){return E(a)?a.toUpperCase():a},Ca,z,ma,xa=[].slice,ug=[].splice,Wg=[].push,ia=Object.prototype.toString,Pc=Object.getPrototypeOf,qa=K("ng"),$=w.angular||(w.angular={}),ic,qb=0;Ca=w.document.documentMode;var U=Number.isNaN||function(a){return a!==a};D.$inject=[];ab.$inject=[];var I=Array.isArray,se=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,Q=function(a){return E(a)?a.trim():a},Md=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ja=function(){if(!u(Ja.rules)){var a=w.document.querySelector("[ng-csp]")||w.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ja.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ja;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ja.rules},rb=function(){if(u(rb.name_))return rb.name_;var a,b,d=Ha.length,c,e;for(b=0;b<d;++b)if(c=Ha[b],a=w.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+
"jq");break}return rb.name_=e},ue=/:/g,Ha=["ng-","data-ng-","ng:","x-ng-"],xe=function(a){var b=a.currentScript;if(!b)return!0;if(!(b instanceof w.HTMLScriptElement||b instanceof w.SVGScriptElement))return!1;b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(w.document),Ae=/[A-Z]/g,Wc=!1,Oa=3,Fe={full:"1.6.9",major:1,minor:6,dot:9,codeName:"fiery-basilisk"};V.expando="ng339";var ib=V.cache={},gg=1;V._data=function(a){return this.cache[a[this.expando]]||{}};var cg=/-([a-z])/g,Xg=/^-ms-/,Ab={mouseleave:"mouseout",mouseenter:"mouseover"},lc=K("jqLite"),fg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,kc=/<|&#?\w+;/,dg=/<([\w:-]+)/,eg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,aa={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,"",""]};aa.optgroup=aa.option;aa.tbody=aa.tfoot=aa.colgroup=aa.caption=aa.thead;aa.th=aa.td;var lg=w.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Sa=V.prototype={ready:gd,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?z(this[a]):z(this[this.length+a])},length:0,push:Wg,sort:[].sort,splice:[].splice},Gb={};r("multiple selected checked disabled readOnly required open".split(" "),function(a){Gb[L(a)]=a});var ld={};r("input select option textarea button form details".split(" "),function(a){ld[a]=!0});var sd={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:pc,removeData:oc,hasData:function(a){for(var b in ib[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)oc(a[b])}},function(a,b){V[b]=a});r({data:pc,inheritedData:Eb,scope:function(a){return z.data(a,"$scope")||Eb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return z.data(a,"$isolateScope")||z.data(a,"$isolateScopeNoTemplate")},controller:id,injector:function(a){return Eb(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Bb,css:function(a,b,d){b=xb(b.replace(Xg,"ms-"));if(u(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Oa&&2!==c&&8!==c&&a.getAttribute){var c=L(b),e=Gb[c];if(u(d))null===d||!1===d&&e?a.removeAttribute(b):a.setAttribute(b,e?c:d);else return a=a.getAttribute(b),e&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(u(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(x(d)){var c=a.nodeType;return 1===c||c===Oa?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(x(b)){if(a.multiple&&"select"===ya(a)){var d=[];r(a.options,function(a){a.selected&&d.push(a.value||a.text)});return d}return a.value}a.value=b},html:function(a,b){if(x(b))return a.innerHTML;yb(a,!0);a.innerHTML=b},empty:jd},function(a,b){V.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==jd&&x(2===a.length&&a!==Bb&&a!==id?b:c)){if(B(b)){for(e=0;e<g;e++)if(a===pc)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=x(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});r({removeData:oc,on:function(a,b,d,c){if(u(c))throw lc("onargs");if(jc(a)){c=zb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=ig(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,f));h.push(d)};g--;)b=c[g],Ab[b]?(h(Ab[b],kg),h(b,void 0,!0)):h(b)}},off:hd,one:function(a,b,d){a=z(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;yb(a);r(new V(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];r(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new V(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;r(new V(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){var d=z(b).eq(0).clone()[0],c=a.parentNode;c&&c.replaceChild(d,a);d.appendChild(a)},remove:Fb,detach:function(a){Fb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;if(c){b=new V(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Db,removeClass:Cb,toggleClass:function(a,b,d){b&&r(b.split(" "),function(b){var e=d;x(e)&&(e=!Bb(a,b));(e?Db:Cb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:nc,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=zb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:D,type:f,target:a},b.type&&(c=O(c,b)),b=ka(g),e=d?[c].concat(d):[c],r(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){V.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)x(f)?(f=a(this[g],b,c,e),u(f)&&(f=z(f))):mc(f,a(this[g],b,c,e));return u(f)?f:this}});V.prototype.bind=V.prototype.on;V.prototype.unbind=V.prototype.off;var Yg=Object.create(null);md.prototype={_idx:function(a){if(a===this._lastKey)return this._lastIndex;this._lastKey=a;return this._lastIndex=this._keys.indexOf(a)},_transformKey:function(a){return U(a)?Yg:a},get:function(a){a=this._transformKey(a);a=this._idx(a);if(-1!==a)return this._values[a]},set:function(a,b){a=this._transformKey(a);var d=this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};var Hb=md,ag=[function(){this.$get=[function(){return Hb}]}],ng=/^([^(]+?)=>/,og=/^[^(]*\(\s*([^)]*)\)/m,Zg=/,/,$g=/^\s*(_?)(\S+?)\1\s*$/,mg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ba=K("$injector");gb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw E(d)&&d||(d=a.name||pg(a)),Ba("strictdi",d);b=nd(a);r(b[1].split(Zg),function(a){a.replace($g,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,sb(a[b],"fn"),c=a.slice(0,b)):sb(a,"fn",!0);return c};var he=K("$animate"),sf=function(){this.$get=D},tf=function(){var a=new Hb,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=E(b)?b.split(" "):I(b)?b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=qg(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Db(a,e);f&&Cb(a,f)});a.delete(b)}});b.length=0}return{enabled:D,on:D,off:D,pin:D,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.set(g,k),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},qf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw he("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=g;a.factory(g,d)};this.customFilter=function(a){1===arguments.length&&(c=C(a)?a:null);return c};this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp?a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,he("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){e=f;break a}}e=void 0}!e||e.parentNode||e.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(c,d,k,l){d=d&&z(d);k=k&&z(k);d=d||k.parent();b(c,d,k);return a.push(c,"enter",Ka(l))},move:function(c,d,k,l){d=d&&z(d);k=k&&z(k);d=d||k.parent();b(c,d,k);return a.push(c,"move",Ka(l))},leave:function(b,c){return a.push(b,"leave",Ka(c),function(){b.remove()})},addClass:function(b,c,d){d=Ka(d);d.addClass=jb(d.addclass,c);return a.push(b,"addClass",d)},removeClass:function(b,c,d){d=Ka(d);d.removeClass=jb(d.removeClass,c);return a.push(b,"removeClass",d)},setClass:function(b,c,d,f){f=Ka(f);f.addClass=jb(f.addClass,c);f.removeClass=jb(f.removeClass,d);return a.push(b,"setClass",f)},animate:function(b,c,d,f,m){m=Ka(m);m.from=m.from?O(m.from,c):c;m.to=m.to?O(m.to,d):d;m.tempClasses=jb(m.tempClasses,f||"ng-inline-animate");return a.push(b,"animate",m)}}}]}],vf=function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},uf=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;r(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:D,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(r(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return f}]},rf=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=e||{};g.$$prepared||(g=pa(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:f,end:f}}}]},ca=K("$compile"),sc=new function(){};Yc.$inject=["$provide","$$sanitizeUriProvider"];Jb.prototype.isFirstChange=function(){return this.previousValue===sc};var od=/^((?:x|data)[:\-_])/i,tg=/[:\-_]+(.)/g,ud=K("$controller"),td=/^(\S+)(\s+as\s+([\w$]+))?$/,Cf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof z&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},vd="application/json",vc={"Content-Type":vd+";charset=utf-8"},wg=/^\[|^\{(?!\{)/,xg={"[":/]$/,"{":/}$/},vg=/^\)]\}',?\n/,Kb=K("$http"),Fa=$.$interpolateMinErr=K("$interpolate");Fa.throwNoconcat=function(a){throw Fa("noconcat",a);};Fa.interr=function(a,b){return Fa("interr",a,b.toString())};var Kf=function(){this.$get=function(){function a(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var b=$.callbacks,d={};return{createCallback:function(c){c="_"+(b.$$counter++).toString(36);var e="angular.callbacks."+c,f=a(c);d[e]=b[c]=f;return e},wasCalled:function(a){return d[a].called},getResponse:function(a){return d[a].data},removeCallback:function(a){delete b[d[a].id];delete d[a]}}}},ah=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,zg={http:80,https:443,ftp:21},kb=K("$location"),Ag=/^\s*[\\/]{2,}/,bh={$$absUrl:"",$$html5:!1,$$replace:!1,absUrl:Lb("$$absUrl"),url:function(a){if(x(a))return this.$$url;var b=ah.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Lb("$$protocol"),host:Lb("$$host"),port:Lb("$$port"),path:Dd("$$path",function(a){a=null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(E(a)||Y(a))a=a.toString(),this.$$search=ec(a);else if(B(a))a=pa(a,{}),r(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw kb("isrcharg");break;default:x(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:Dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([Cd,zc,yc],function(a){a.prototype=Object.create(bh);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==yc||!this.$$html5)throw kb("nostate");this.$$state=x(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Xa=K("$parse"),Eg={}.constructor.prototype.valueOf,Ub=S();r("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Ub[a]=!0});var ch={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Ub[b],e=Ub[d];Ub[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=u(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Xa("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=L(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=ch[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var q=function(a,b){this.lexer=a;this.options=b};q.Program="Program";q.ExpressionStatement="ExpressionStatement";q.AssignmentExpression="AssignmentExpression";q.ConditionalExpression="ConditionalExpression";q.LogicalExpression="LogicalExpression";q.BinaryExpression="BinaryExpression";q.UnaryExpression="UnaryExpression";q.CallExpression="CallExpression";q.MemberExpression="MemberExpression";q.Identifier="Identifier";q.Literal="Literal";q.ArrayExpression="ArrayExpression";q.Property="Property";q.ObjectExpression="ObjectExpression";q.ThisExpression="ThisExpression";q.LocalsExpression="LocalsExpression";q.NGValueParameter="NGValueParameter";q.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:q.Program,body:a}},expressionStatement:function(){return{type:q.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Hd(a))throw Xa("lval");a={type:q.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:q.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:q.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:q.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=pa(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:q.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:q.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:q.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}},throwError:function(a,b){throw Xa("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Xa("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Xa("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:q.ThisExpression},$locals:{type:q.LocalsExpression}}};var Fd=2;Jd.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};W(a,b.$filter);var d="",c;this.stage="assign";if(c=Id(a))this.state.computing="assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Gd(a.body);b.stage="inputs";r(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var h=b.nextId();b.recurse(a,h);b.return_(h);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(a);a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,Bg,Cg,Ed);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")});b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;r(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,h,k=this,l,m,p;c=c||D;if(!f&&u(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case q.Program:r(a.body,function(b,c){k.recurse(b.expression,void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case q.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case q.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});m=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,m);c(m);break;case q.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});m="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case q.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case q.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case q.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.isNull(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));c(b);break;case q.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){a.computed?(h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.computedMember(g,h),k.assign(b,m),d&&(d.computed=!0,d.name=h)):(e&&1!==e&&k.if_(k.isNull(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}")),m=k.nonComputedMember(g,a.property.name),k.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){k.assign(b,"undefined")});c(b)},!!e);break;case q.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h=k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){r(a.arguments,function(b){k.recurse(b,a.constant?void 0:k.nextId(),void 0,function(a){l.push(a)})});m=g.name?k.member(g.context,g.name,g.computed)+"("+l.join(",")+")":h+"("+l.join(",")+")";k.assign(b,m)},function(){k.assign(b,"undefined")});c(b)}));break;case q.AssignmentExpression:h=this.nextId();g={};this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);m=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;case q.ArrayExpression:l=[];r(a.elements,function(b){k.recurse(b,a.constant?void 0:k.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case q.ObjectExpression:l=[];p=!1;r(a.properties,function(a){a.computed&&(p=!0)});p?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=k.nextId(),k.recurse(a.key,g)):g=a.key.type===q.Identifier?a.key.name:""+a.key.value;h=k.nextId();k.recurse(a.value,h);k.assign(k.member(b,g,a.computed),h)})):(r(a.properties,function(b){k.recurse(b.value,a.constant?void 0:k.nextId(),void 0,function(a){l.push(k.escape(b.key.type===q.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case q.ThisExpression:this.assign(b,"s");c(b||"s");break;case q.LocalsExpression:this.assign(b,"l");c(b||"l");break;case q.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(E(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Y(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Xa("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Kd.prototype={compile:function(a){var b=this;W(a,b.$filter);var d,c;if(d=Id(a))c=this.recurse(d);d=Gd(a.body);var e;d&&(e=[],r(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];r(a.body,function(a){f.push(b.recurse(a.expression))});a=0===a.body.length?D:1===a.body.length?f[0]:function(a,b){var c;r(f,function(d){c=d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,b);case q.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case q.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case q.Identifier:return f.identifier(a.name,b,d);case q.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d):this.nonComputedMember(c,e,b,d);case q.CallExpression:return g=[],r(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var p=[],n=0;n<g.length;++n)p.push(g[n](a,c,d,f));a=e.apply(void 0,p,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,f){var p=e(a,c,d,f),n;if(null!=p.value){n=[];for(var r=0;r<g.length;++r)n.push(g[r](a,c,d,f));n=p.value.apply(p.context,n)}return b?{value:n}:n};case q.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,f,g){var p=c(a,d,f,g);a=e(a,d,f,g);p.context[p.name]=a;return b?{value:a}:a};case q.ArrayExpression:return g=[],r(a.elements,function(a){g.push(f.recurse(a))}),function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case q.ObjectExpression:return g=[],r(a.properties,function(a){a.computed?g.push({key:f.recurse(a.key),computed:!0,value:f.recurse(a.value)}):g.push({key:a.key.type===q.Identifier?a.key.name:""+a.key.value,computed:!1,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},n=0;n<g.length;++n)g[n].computed?f[g[n].key(a,c,d,e)]=g[n].value(a,c,d,e):f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case q.ThisExpression:return function(a){return b?{value:a}:a};case q.LocalsExpression:return function(a,c){return b?{value:c}:c};case q.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=u(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=u(d)?-d:-0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=Ed(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=(u(h)?h:0)-(u(c)?c:0);return d?{value:h}:h}},"binary*":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}:e}},computedMember:function(a,b,d,c){return function(e,f,g,h){var k=a(e,f,g,h),l,m;null!=k&&(l=b(e,f,g,h),l+="",c&&1!==c&&k&&!k[l]&&(k[l]={}),m=k[l]);return d?{context:k,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};Mb.prototype={constructor:Mb,parse:function(a){a=this.getAst(a);var b=this.astCompiler.compile(a.ast),d=a.ast;b.literal=0===d.body.length||1===d.body.length&&(d.body[0].expression.type===q.Literal||d.body[0].expression.type===q.ArrayExpression||d.body[0].expression.type===q.ObjectExpression);b.constant=a.ast.constant;b.oneTime=a.oneTime;return b},getAst:function(a){var b=!1;a=a.trim();":"===a.charAt(0)&&":"===a.charAt(1)&&(b=!0,a=a.substring(2));return{ast:this.ast.ast(a),oneTime:b}}};var va=K("$sce"),oa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Bc=/_([a-z])/g,Gg=K("$compile"),X=w.document.createElement("a"),Od=ta(w.location.href);Pd.$inject=["$document"];ed.$inject=["$provide"];var Wd=22,Vd=".",Dc="0";Qd.$inject=["$locale"];Sd.$inject=["$locale"];var Rg={yyyy:ea("FullYear",4,0,!1,!0),yy:ea("FullYear",2,0,!0,!0),y:ea("FullYear",1,0,!1,!0),MMMM:mb("Month"),MMM:mb("Month",!0),MM:ea("Month",2,1),M:ea("Month",1,1),LLLL:mb("Month",!1,!0),dd:ea("Date",2),d:ea("Date",1),HH:ea("Hours",2),H:ea("Hours",1),hh:ea("Hours",2,-12),h:ea("Hours",1,-12),mm:ea("Minutes",2),m:ea("Minutes",1),ss:ea("Seconds",2),s:ea("Seconds",1),sss:ea("Milliseconds",3),EEEE:mb("Day"),EEE:mb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Ob(Math[0<a?"floor":"ceil"](a/60),2)+Ob(Math.abs(a%60),2))},ww:Yd(2),w:Yd(1),G:Ec,GG:Ec,GGG:Ec,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},Qg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Pg=/^-?\d+$/;Rd.$inject=["$locale"];var Kg=la(L),Lg=la(ub);Td.$inject=["$parse"];var He=la({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===ia.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),vb={};r(Gb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=Ea("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});vb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(sd,function(a,b){vb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(Vg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=Ea("ng-"+a);vb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===ia.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ca&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Qb={$addControl:D,$$renameControl:function(a,b){a.$name=b},$removeControl:D,$setValidity:D,$setDirty:D,$setPristine:D,$setSubmitted:D};Pb.$inject=["$element","$attrs","$scope","$animate","$interpolate"];Pb.prototype={$rollbackViewValue:function(){r(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){r(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Ia(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name];r(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);r(this.$error,function(b,d){this.$setValidity(d,null,a)},this);r(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=Qb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Ya);this.$$animate.addClass(this.$$element,Vb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Ya,Vb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;r(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){r(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;this.$$parentForm.$setSubmitted()}};ae({clazz:Pb,set:function(a,b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var ie=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||D}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Pb,compile:function(d,f){d.addClass(Ya).addClass(nb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var p=f[0];if(!("action"in e)){var n=function(b){a.$apply(function(){p.$commitViewValue();p.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",n);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",n)},0,!1)})}(f[1]||p.$$parentForm).$addControl(p);var r=g?c(p.$name):D;g&&(r(a,p),e.$observe(g,function(b){p.$name!==b&&(r(a,void 0),p.$$parentForm.$$renameControl(p,b),r=c(p.$name),r(a,p))}));d.on("$destroy",function(){p.$$parentForm.$removeControl(p);r(a,void 0);O(p,Qb)})}}}}}]},Ie=ie(),Ue=ie(!0),Sg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,dh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,eh=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,Tg=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,je=/^(\d{4,})-(\d{2})-(\d{2})$/,ke=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Lc=/^(\d{4,})-W(\d\d)$/,le=/^(\d{4,})-(\d\d)$/,me=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,ce=S();r(["date","datetime-local","month","time","week"],function(a){ce[a]=!0});var ne={text:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Gc(c)},date:ob("date",je,Rb(je,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":ob("datetimelocal",ke,Rb(ke,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:ob("time",me,Rb(me,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:ob("week",Lc,function(a,b){if(fa(a))return a;if(E(a)){Lc.lastIndex=0;var d=Lc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Xd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:ob("month",le,Rb(le,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Hc(a,b,d,c);de(c);Va(a,b,d,c,e,f);var g,h;if(u(d.min)||d.ngMin)c.$validators.min=function(a){return c.$isEmpty(a)||x(g)||a>=g},d.$observe("min",function(a){g=Wa(a);c.$validate()});if(u(d.max)||d.ngMax)c.$validators.max=function(a){return c.$isEmpty(a)||x(h)||a<=h},d.$observe("max",function(a){h=Wa(a);c.$validate()});if(u(d.step)||d.ngStep){var k;c.$validators.step=function(a,b){return c.$isEmpty(b)||x(k)||ee(b,g||0,k)};d.$observe("step",function(a){k=Wa(a);c.$validate()})}},url:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Gc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||dh.test(d)}},email:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Gc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||eh.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==Q(d.ngTrim);x(d.name)&&b.attr("name",++qb);b.on("click",function(a){var g;b[0].checked&&(g=d.value,e&&(g=Q(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=Q(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a,c){b.attr(a,d[a]);d.$observe(a,c)}function h(a){p=Wa(a);U(c.$modelValue)||(m?(a=b.val(),p>a&&(a=p,b.val(a)),c.$setViewValue(a)):c.$validate())}function k(a){n=Wa(a);U(c.$modelValue)||(m?(a=b.val(),n<a&&(b.val(n),a=n<p?p:n),c.$setViewValue(a)):c.$validate())}
function l(a){r=Wa(a);U(c.$modelValue)||(m&&c.$viewValue!==b.val()?c.$setViewValue(b.val()):c.$validate())}Hc(a,b,d,c);de(c);Va(a,b,d,c,e,f);var m=c.$$hasNativeValidators&&"range"===b[0].type,p=m?0:void 0,n=m?100:void 0,r=m?1:void 0,q=b[0].validity;a=u(d.min);e=u(d.max);f=u(d.step);var v=c.$render;c.$render=m&&u(q.rangeUnderflow)&&u(q.rangeOverflow)?function(){v();c.$setViewValue(b.val())}:v;a&&(c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(p)||b>=p},g("min",h));e&&(c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(n)||b<=n},g("max",k));f&&(c.$validators.step=m?function(){return!q.stepMismatch}:function(a,b){return c.$isEmpty(b)||x(r)||ee(b,p||0,r)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,h){var k=fe(h,a,"ngTrueValue",d.ngTrueValue,!0),l=fe(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return sa(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:D,button:D,submit:D,reset:D,file:D},Zc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(ne[L(g.type)]||ne.text)(e,f,g,h[0],b,a,d,c)}}}}],fh=/^(true|false|\d+)$/,mf=function(){function a(a,d,c){var e=u(c)?c:9===Ca?"":null;a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return fh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,function(b){a(d,f,b)})}}}},Me=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=gc(a)})}}}}],Oe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=x(a)?"":a})}}}}],Ne=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],lf=la({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Pe=Jc("",!0),Re=Jc("Odd",0),Qe=Jc("Even",1),Se=Qa({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Te=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],dd={},gh={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=Ea("ng-"+a);dd[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b]);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};gh[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var We=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var h,k,l;d.$watch(e.ngIf,function(d){d?k||g(function(d,f){k=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=tb(h.clone),a.leave(l).done(function(a){!1!==a&&(l=null)}),h=null))})}}}],Xe=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:$.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,m,p,n){var r=0,q,v,y,t=function(){v&&(v.remove(),v=null);q&&(q.$destroy(),q=null);y&&(d.leave(y).done(function(a){!1!==a&&(v=null)}),v=y,y=null)};c.$watch(f,function(f){var m=function(a){!1===a||!u(h)||h&&!c.$eval(h)||b()},v=++r;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&v===r){var b=c.$new();p.template=a;a=n(b,function(a){t();d.enter(a,null,e).done(m)});q=b;y=a;q.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||v!==r||(t(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(t(),p.template=null)})}}}}],of=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){ia.call(d[0]).match(/SVG/)?(d.empty(),a(fd(e.template,w.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],Ye=Qa({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),kf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?Q(e):e;c.$parsers.push(function(a){if(!x(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?Q(a):a)});return b}});c.$formatters.push(function(a){if(I(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},nb="ng-valid",$d="ng-invalid",Ya="ng-pristine",Vb="ng-dirty",pb=K("ngModel");Sb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");Sb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);C(c)&&(c=a(b));return c};this.$$ngModelSet=function(a,c){C(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw pb("nonassign",this.$$attr.ngModel,za(this.$$element));},$render:D,$isEmpty:function(a){return x(a)||""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Vb);this.$$animate.addClass(this.$$element,Ya)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,Ya);this.$$animate.addClass(this.$$element,Vb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!U(this.$modelValue)){var a=this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!==c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;r(k.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(r(k.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(k.$asyncValidators,function(e,g){var k=e(a,b);if(!k||!C(k.then))throw pb("nopromise",k);f(g,void 0);c.push(k.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?k.$$q.all(c).then(function(){g(d)},D):g(!0)}function f(a,b){h===k.$$currentValidationRunId&&k.$setValidity(a,b)}function g(a){h===k.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var h=this.$$currentValidationRunId,k=this;(function(){var a=k.$$parserName||"parse";if(x(k.$$parserValid))f(a,null);else return k.$$parserValid||(r(k.$validators,function(a,b){f(b,null)}),r(k.$asyncValidators,function(a,b){f(b,null)})),f(a,k.$$parserValid),k.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!==a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;if(this.$$parserValid=x(a)?void 0:!0)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),x(a)){this.$$parserValid=!1;break}U(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));var c=this.$modelValue,e=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;e&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){e||(b.$modelValue=d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue);r(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},this)},$setViewValue:function(a,b){this.$viewValue=a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");Y(b[a])?b=b[a]:Y(b["default"])&&(b=b["default"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$scope.$root.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})},$overrideModelOptions:function(a){this.$options=this.$options.createChild(a);this.$$setUpdateOnEvents()},$processModelValue:function(){var a=this.$$format();this.$viewValue!==a&&(this.$$updateEmptyClasses(a),this.$viewValue=this.$$lastCommittedViewValue=a,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,D))},$$format:function(){for(var a=this.$formatters,b=a.length,d=this.$modelValue;b--;)d=a[b](d);return d},$$setModelValue:function(a){this.$modelValue=this.$$rawModelValue=a;this.$$parserValid=void 0;this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler);if(this.$$updateEvents=this.$options.getOption("updateOn"))this.$$element.on(this.$$updateEvents,this.$$updateEventHandler)},$$updateEventHandler:function(a){this.$$debounceViewValueCommit(a&&a.type)}};ae({clazz:Sb,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var jf=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Sb,priority:1,compile:function(b){b.addClass(Ya).addClass("ng-untouched").addClass(nb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;if(f=f[2])g.$options=f.$options;g.$$initGetterSetters();b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){function g(){h.$setTouched()}var h=f[0];h.$$setUpdateOnEvents();c.on("blur",function(){h.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Tb,hh=/(\s+|^)default(\s+|$)/;Kc.prototype={getOption:function(a){return this.$$options[a]},createChild:function(a){var b=!1;a=O({},a);r(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=Q(d.replace(hh,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],ge(a,this.$$options));ge(a,Tb.$$options);return new Kc(a)}};Tb=new Kc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var nf=function(){function a(a,d){this.$$attrs=a;this.$$scope=d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Tb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},Ze=Qa({terminal:!0,priority:1E3}),ih=K("ngOptions"),jh=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,gf=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!r&&wa(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var p=a.match(jh);if(!p)throw ih("iexp",a,za(b));var n=p[5]||p[7],r=p[6];a=/ as /.test(p[0])&&p[1];var q=p[9];b=d(p[2]?p[1]:n);var v=a&&d(a)||b,u=q&&d(q),t=q?function(a,b){return u(c,b)}:function(a){return Pa(a)},w=function(a,b){return t(a,C(a,b))},x=d(p[2]||p[1]),A=d(p[3]||""),H=d(p[4]||""),G=d(p[8]),z={},C=r?function(a,b){z[r]=b;z[n]=a;return z}:function(a){z[n]=a;return z};return{trackBy:q,getTrackByValue:w,getWatchables:d(G,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var h=a===d?g:d[g],l=a[h],h=C(l,h),l=t(l,h);b.push(l);if(p[2]||p[1])l=x(c,h),b.push(l);p[4]&&(h=H(c,h),b.push(h))}return b}),getOptions:function(){for(var a=[],b={},d=G(c)||[],g=f(d),h=g.length,n=0;n<h;n++){var p=d===g?n:g[n],r=C(d[p],p),u=v(c,r),p=t(u,r),y=x(c,r),F=A(c,r),r=H(c,r),u=new e(p,u,y,F,r);a.push(u);b[p]=u}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[w(a)]},getViewValueFromOption:function(a){return q?pa(a.viewValue):a.viewValue}}}}}var e=w.document.createElement("option"),f=w.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=D},post:function(d,h,k,l){function m(a){var b=(a=t.getOptionFromViewValue(a))&&a.element;b&&!b.selected&&(b.selected=!0);return a}function p(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}var n=l[0],q=l[1],s=k.multiple;l=0;for(var v=h.children(),y=v.length;l<y;l++)if(""===v[l].value){n.hasEmptyOption=!0;n.emptyOption=v.eq(l);break}h.empty();l=!!n.emptyOption;z(e.cloneNode(!1)).val("?");var t,w=c(k.ngOptions,h,d),x=b[0].createDocumentFragment();n.generateUnknownOptionValue=function(a){return"?"};s?(n.writeValue=function(a){if(t){var b=a&&a.map(m)||[];t.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})}},n.readValue=function(){var a=h.val()||[],b=[];r(a,function(a){(a=t.selectValueMap[a])&&!a.disabled&&b.push(t.getViewValueFromOption(a))});return b},w.trackBy&&d.$watchCollection(function(){if(I(q.$viewValue))return q.$viewValue.map(function(a){return w.getTrackByValue(a)})},function(){q.$render()})):(n.writeValue=function(a){if(t){var b=h[0].options[h[0].selectedIndex],c=t.getOptionFromViewValue(a);b&&b.removeAttribute("selected");c?(h[0].value!==c.selectValue&&(n.removeUnknownOption(),h[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):n.selectUnknownOrEmptyOption(a)}},n.readValue=function(){var a=t.selectValueMap[h.val()];return a&&!a.disabled?(n.unselectEmptyOption(),n.removeUnknownOption(),t.getViewValueFromOption(a)):null},w.trackBy&&d.$watch(function(){return w.getTrackByValue(q.$viewValue)},function(){q.$render()}));l&&(a(n.emptyOption)(d),h.prepend(n.emptyOption),8===n.emptyOption[0].nodeType?(n.hasEmptyOption=!1,n.registerOption=function(a,b){""===b.val()&&(n.hasEmptyOption=!0,n.emptyOption=b,n.emptyOption.removeClass("ng-scope"),q.$render(),b.on("$destroy",function(){var a=n.$isEmptyOptionSelected();n.hasEmptyOption=!1;n.emptyOption=void 0;a&&q.$render()}))}):n.emptyOption.removeClass("ng-scope"));d.$watchCollection(w.getWatchables,function(){var a=t&&n.readValue();if(t)for(var b=t.items.length-1;0<=b;b--){var c=t.items[b];u(c.group)?Fb(c.element.parentNode):Fb(c.element)}t=w.getOptions();var d={};t.items.forEach(function(a){var b;if(u(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),x.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b);var c=e.cloneNode(!1);b.appendChild(c);p(a,c)}else b=e.cloneNode(!1),x.appendChild(b),p(a,b)});h[0].appendChild(x);q.$render();q.$isEmpty(a)||(b=n.readValue(),(w.trackBy||s?sa(a,b):a===b)||(q.$setViewValue(b),q.$render()))})}}}}],$e=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,h){function k(a){g.text(a||"")}var l=h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,n=f.$eval(m)||{},q={},s=b.startSymbol(),v=b.endSymbol(),u=s+l+"-"+p+v,t=$.noop,w;r(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+L(c[2]),n[c]=g.attr(h.$attr[b]))});r(n,function(a,d){q[d]=b(a.replace(c,u))});f.$watch(l,function(b){var c=parseFloat(b),e=U(c);e||c in n||(c=a.pluralCat(c-p));c===w||e&&U(w)||(t(),e=q[c],x(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),t=D,k()):t=f.$watch(e,k),w=c)})}}}],af=["$parse","$animate","$compile",function(a,b,d){var c=K("ngRepeat"),e=function(a,b,c,d,e,m,p){a[c]=d;e&&(a[e]=m);a.$index=b;a.$first=0===b;a.$last=b===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=d.$$createComment("end ngRepeat",h),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",h);var m=l[1],p=l[2],n=l[3],q=l[4],l=m.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!l)throw c("iidexp",m);var s=l[3]||l[1],v=l[2];if(n&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(n)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(n)))throw c("badident",n);var u,t,w,x,z={$id:Pa};q?u=a(q):(w=function(a,b){return Pa(b)},x=function(a){return a});return function(a,d,f,g,l){u&&(t=function(b,c,d){v&&(z[v]=b);z[s]=c;z.$index=d;return u(a,z)});var m=S();a.$watchCollection(p,function(f){var g,p,q=d[0],u,y=S(),z,F,C,A,D,B,E;n&&(a[n]=f);if(wa(f))D=f,p=t||w;else for(E in p=t||x,D=[],f)ra.call(f,E)&&"$"!==E.charAt(0)&&D.push(E);z=D.length;E=Array(z);for(g=0;g<z;g++)if(F=f===D?g:D[g],C=f[F],A=p(F,C,g),m[A])B=m[A],delete m[A],y[A]=B,E[g]=B;else{if(y[A])throw r(E,function(a){a&&a.scope&&(m[a.id]=a)}),c("dupes",h,A,C);E[g]={id:A,scope:void 0,clone:void 0};y[A]=!0}for(u in m){B=m[u];A=tb(B.clone);b.leave(A);if(A[0].parentNode)for(g=0,p=A.length;g<p;g++)A[g].$$NG_REMOVED=!0;B.scope.$destroy()}for(g=0;g<z;g++)if(F=f===D?g:D[g],C=f[F],B=E[g],B.scope){u=q;do u=u.nextSibling;while(u&&u.$$NG_REMOVED);B.clone[0]!==u&&b.move(tb(B.clone),null,q);q=B.clone[B.clone.length-1];e(B.scope,g,s,C,v,F,z)}else l(function(a,c){B.scope=c;var d=k.cloneNode(!1);a[a.length++]=d;b.enter(a,null,q);q=d;B.clone=a;y[B.id]=B;e(B.scope,g,s,C,v,F,z)});m=y})}}}}],bf=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ve=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],cf=Qa(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),df=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],h=[],k=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){for(var d,e;k.length;)a.cancel(k.pop());d=0;for(e=l.length;d<e;++d){var q=tb(h[d].clone);l[d].$destroy();(k[d]=a.leave(q)).done(m(k,d))}h.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],ef=Qa({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a});r(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:e,element:b})})}}),ff=Qa({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),kh=K("ngTransclude"),hf=["$compile",function(a){return{restrict:"EAC",compile:function(b){var d=a(b.contents());b.empty();return function(a,b,f,g,h){function k(){d(a,function(a){b.append(a)})}if(!h)throw kh("orphan",za(b));f.ngTransclude===f.$attr.ngTransclude&&(f.ngTransclude="");f=f.ngTransclude||f.ngTranscludeSlot;h(function(a,c){var d;if(d=a.length)a:{d=0;for(var f=a.length;d<f;d++){var g=a[d];if(g.nodeType!==Oa||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(k(),c.$destroy())},null,f);f&&!h.isSlotFilled(f)&&k()}}}}],Je=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],lh={$setViewValue:D,$render:D},mh=["$element","$scope",function(a,b){function d(){g||(g=!0,b.$$postDigest(function(){g=!1;e.ngModelCtrl.$render()}))}function c(a){h||(h=!0,b.$$postDigest(function(){b.$$destroyed||(h=!1,e.ngModelCtrl.$setViewValue(e.readValue()),a&&e.ngModelCtrl.$render())}))}var e=this,f=new Hb;e.selectValueMap={};e.ngModelCtrl=lh;e.multiple=!1;e.unknownOption=z(w.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);a.prepend(e.unknownOption);Ga(e.unknownOption,!0);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);Ga(e.unknownOption,!0);a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+Pa(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),Ga(e.emptyOption,!0))};e.unselectEmptyOption=function(){e.hasEmptyOption&&Ga(e.emptyOption,!1)};b.$on("$destroy",function(){e.renderUnknownOption=D});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=function(b){var c=a[0].options[a[0].selectedIndex];c&&Ga(z(c),!1);e.hasOption(b)?(e.removeUnknownOption(),c=Pa(b),a.val(c in e.selectValueMap?c:b),Ga(z(a[0].options[a[0].selectedIndex]),!0)):e.selectUnknownOrEmptyOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){Ia(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption=b);var c=f.get(a)||0;f.set(a,c+1);d()}};e.removeOption=function(a){var b=f.get(a);b&&(1===b?(f.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):f.set(a,b-1))};e.hasOption=function(a){return!!f.get(a)};e.$hasEmptyOption=function(){return e.hasEmptyOption};e.$isUnknownOptionSelected=function(){return a[0].options[0]===e.unknownOption[0]};e.$isEmptyOptionSelected=function(){return e.hasEmptyOption&&a[0].options[a[0].selectedIndex]===e.emptyOption[0]};e.selectUnknownOrEmptyOption=function(a){null==a&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(a):e.renderUnknownOption(a)};var g=!1,h=!1;e.registerOption=function(a,b,f,g,h){if(f.$attr.ngValue){var q,r=NaN;f.$observe("value",function(a){var d,f=b.prop("selected");u(r)&&(e.removeOption(q),delete e.selectValueMap[r],d=!0);r=Pa(a);q=a;e.selectValueMap[r]=a;e.addOption(a,b);b.attr("value",r);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();var d,f=b.prop("selected");u(q)&&(e.removeOption(q),d=!0);q=a;e.addOption(a,b);d&&f&&c()}):h?a.$watch(h,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||a===b)&&c(!0)})}}],Ke=function(){return{restrict:"E",require:["select","?ngModel"],controller:mh,priority:1,link:{pre:function(a,b,d,c){var e=c[0],f=c[1];if(f){if(e.ngModelCtrl=f,b.on("change",function(){e.removeUnknownOption();a.$apply(function(){f.$setViewValue(e.readValue())})}),d.multiple){e.multiple=!0;e.readValue=function(){var a=[];r(b.find("option"),function(b){b.selected&&!b.disabled&&(b=b.value,a.push(b in e.selectValueMap?e.selectValueMap[b]:b))});return a};e.writeValue=function(a){r(b.find("option"),function(b){var c=!!a&&(-1!==Array.prototype.indexOf.call(a,b.value)||-1!==Array.prototype.indexOf.call(a,e.selectValueMap[b.value]));c!==b.selected&&Ga(z(b),c)})};var g,h=NaN;a.$watch(function(){h!==f.$viewValue||sa(g,f.$viewValue)||(g=ka(f.$viewValue),f.$render());h=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}else e.registerOption=D},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},Le=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,e;u(d.ngValue)||(u(d.value)?c=a(d.value,!0):(e=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,e)}}}}],ad=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},$c=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){E(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw K("ngPattern")("noregexp",f,a,za(b));e=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||x(e)||e.test(b)}}}}},cd=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=Z(a);e=U(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},bd=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=Z(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};w.angular.bootstrap?w.console&&console.log("WARNING: Tried to load AngularJS more than once."):(Be(),Ee($),$.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),z(function(){we(w.document,Uc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');(function(S,q){'use strict';function Ea(a,b,c){if(!a)throw Pa("areq",b||"?",c||"required");return a}function Fa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;V(a)&&(a=a.join(" "));V(b)&&(b=b.join(" "));return a+" "+b}function Qa(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function W(a,b,c){var d="";a=V(a)?a:a&&C(a)&&a.length?a.split(/\s+/):[];t(a,function(a,f){a&&0<a.length&&(d+=0<f?" ":"",d+=c?b+a:a+b)});return d}function Ga(a){if(a instanceof A)switch(a.length){case 0:return a;case 1:if(1===a[0].nodeType)return a;break;default:return A(ua(a))}if(1===a.nodeType)return A(a)}function ua(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1===c.nodeType)return c}}function Ra(a,b,c){t(b,function(b){a.addClass(b,c)})}function Sa(a,b,c){t(b,function(b){a.removeClass(b,c)})}function X(a){return function(b,c){c.addClass&&(Ra(a,b,c.addClass),c.addClass=null);c.removeClass&&(Sa(a,b,c.removeClass),c.removeClass=null)}}function oa(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||O;a.domOperation=function(){a.$$domOperationFired=!0;b();b=O};a.$$prepared=!0}return a}function ha(a,b){Ha(a,b);Ia(a,b)}function Ha(a,b){b.from&&(a.css(b.from),b.from=null)}function Ia(a,b){b.to&&(a.css(b.to),b.to=null)}function T(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),f=(d.removeClass||"")+" "+(c.removeClass||"");a=Ta(a.attr("class"),e,f);c.preparationClasses&&(d.preparationClasses=ca(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);e=d.domOperation!==O?d.domOperation:null;va(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Ta(a,b,c){function d(a){C(a)&&(a=a.split(" "));var b={};t(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);t(b,function(a,b){e[b]=1});c=d(c);t(c,function(a,b){e[b]=1===e[b]?null:-1});var f={addClass:"",removeClass:""};t(e,function(b,c){var d,e;1===b?(d="addClass",e=!a[c]||a[c+"-remove"]):-1===b&&(d="removeClass",e=a[c]||a[c+"-add"]);e&&(f[d].length&&(f[d]+=" "),f[d]+=c)});return f}function J(a){return a instanceof A?a[0]:a}function Ua(a,b,c){var d="";b&&(d=W(b,"ng-",!0));c.addClass&&(d=ca(d,W(c.addClass,"-add")));c.removeClass&&(d=ca(d,W(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function pa(a,b){var c=b?"-"+b+"s":"";ka(a,[la,c]);return[la,c]}function wa(a,b){var c=b?"paused":"",d=Y+"PlayState";ka(a,[d,c]);return[d,c]}function ka(a,b){a.style[b[0]]=b[1]}function ca(a,b){return a?b?a+" "+b:a:b}function Ja(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};t(c,function(a,b){var c=e[a];if(c){var l=c.charAt(0);if("-"===l||"+"===l||0<=l)c=Va(c);0===c&&(c=null);d[b]=c}});return d}function Va(a){var b=0;a=a.split(/\s*,\s*/);t(a,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function xa(a){return 0===a||null!=a}function Ka(a,b){var c=Q,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function La(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ma(a,b,c){t(c,function(c){a[c]=ya(a[c])?a[c]:b.style.getPropertyValue(c)})}var Q,za,Y,Aa;void 0===S.ontransitionend&&void 0!==S.onwebkittransitionend?(Q="WebkitTransition",za="webkitTransitionEnd transitionend"):(Q="transition",za="transitionend");void 0===S.onanimationend&&void 0!==S.onwebkitanimationend?(Y="WebkitAnimation",Aa="webkitAnimationEnd animationend"):(Y="animation",Aa="animationend");var qa=Y+"Delay",Ba=Y+"Duration",la=Q+"Delay",Na=Q+"Duration",Pa=q.$$minErr("ng"),Wa={transitionDuration:Na,transitionDelay:la,transitionProperty:Q+"Property",animationDuration:Ba,animationDelay:qa,animationIterationCount:Y+"IterationCount"},Xa={transitionDuration:Na,transitionDelay:la,animationDuration:Ba,animationDelay:qa},Ca,va,t,V,ya,Z,Da,ra,C,P,A,O;q.module("ngAnimate",[],function(){O=q.noop;Ca=q.copy;va=q.extend;A=q.element;t=q.forEach;V=q.isArray;C=q.isString;ra=q.isObject;P=q.isUndefined;ya=q.isDefined;Da=q.isFunction;Z=q.isElement}).info({angularVersion:"1.6.9"}).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,e,f,n){var G,l;b.$watchCollection(e.ngAnimateSwap||e["for"],function(e){G&&a.leave(G);l&&(l.$destroy(),l=null);if(e||0===e)l=b.$new(),n(l,function(b){G=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var f=d.ngAnimateChildren;C(f)&&0===f.length?c.data("$$ngAnimateChildren",!0):(e(a(f)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),n=0;n<b.length;n++)b[n]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);t(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c){return f[a].some(function(a){return a(b,c)})}function e(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var f=this.rules={skip:[],cancel:[],join:[]};f.join.push(function(a,b){return!a.structural&&e(a)});f.skip.push(function(a,b){return!a.structural&&!e(a)});f.skip.push(function(a,b){return"leave"===b.event&&a.structural});f.skip.push(function(a,b){return b.structural&&2===b.state&&!a.structural});f.cancel.push(function(a,b){return b.structural&&a.structural});f.cancel.push(function(a,b){return 2===b.state&&a.structural});f.cancel.push(function(a,b){if(b.structural)return!1;var d=a.addClass,e=a.removeClass,f=b.addClass,sa=b.removeClass;return P(d)&&P(e)||P(f)&&P(sa)?!1:c(d,sa)||c(e,f)});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow","$$isDocumentHidden",function(b,c,f,s,y,sa,da,v,E,g,M){function x(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function H(a,b,c){var h=[],d=k[c];d&&t(d,function(d){u.call(d.node,b)?h.push(d.callback):"leave"===c&&u.call(d.node,a)&&h.push(d.callback)});return h}function I(a,b,c){var h=ua(b);return a.filter(function(a){return!(a.node===h&&(!c||a.callback===c))})}function K(a,k,w){function K(a,c,h,k){s(function(){var a=H(na,p,c);a.length?b(function(){t(a,function(a){a(f,h,k)});"close"!==h||p.parentNode||ba.off(p)}):"close"!==h||p.parentNode||ba.off(p)});a.progress(c,h,k)}function I(a){var b=f,c=g;c.preparationClasses&&(b.removeClass(c.preparationClasses),c.preparationClasses=null);c.activeClasses&&(b.removeClass(c.activeClasses),c.activeClasses=null);Oa(f,g);ha(f,g);g.domOperation();l.complete(!a)}var g=Ca(w),f=Ga(a),p=J(f),na=p&&p.parentNode,g=oa(g),l=new da,s=x();V(g.addClass)&&(g.addClass=g.addClass.join(" "));g.addClass&&!C(g.addClass)&&(g.addClass=null);V(g.removeClass)&&(g.removeClass=g.removeClass.join(" "));g.removeClass&&!C(g.removeClass)&&(g.removeClass=null);g.from&&!ra(g.from)&&(g.from=null);g.to&&!ra(g.to)&&(g.to=null);if(!(h&&p&&Ya(p,k,w)&&D(p,g)))return I(),l;var v=0<=["enter","move","leave"].indexOf(k),u=M(),y=u||ga.get(p);w=!y&&z.get(p)||{};var E=!!w.state;y||E&&1===w.state||(y=!L(p,na,k));if(y)return u&&K(l,k,"start"),I(),u&&K(l,k,"close"),l;v&&ta(p);u={structural:v,element:f,event:k,addClass:g.addClass,removeClass:g.removeClass,close:I,options:g,runner:l};if(E){if(d("skip",u,w)){if(2===w.state)return I(),l;T(f,w,u);return w.runner}if(d("cancel",u,w))if(2===w.state)w.runner.end();else if(w.structural)w.close();else return T(f,w,u),w.runner;else if(d("join",u,w))if(2===w.state)T(f,u,{});else return Ua(f,v?k:null,g),k=u.event=w.event,g=T(f,w,u),w.runner}else T(f,u,{});(E=u.structural)||(E="animate"===u.event&&0<Object.keys(u.options.to||{}).length||e(u));if(!E)return I(),m(p),l;var q=(w.counter||0)+1;u.counter=q;F(p,1,u);c.$$postDigest(function(){f=Ga(a);var b=z.get(p),c=!b,b=b||{},h=0<(f.parent()||[]).length&&("animate"===b.event||b.structural||e(b));if(c||b.counter!==q||!h){c&&(Oa(f,g),ha(f,g));if(c||v&&b.event!==k)g.domOperation(),l.end();h||m(p)}else k=!b.structural&&e(b,!0)?"setClass":b.event,F(p,2),b=sa(f,k,b.options),l.setHost(b),K(l,k,"start",{}),b.done(function(a){I(!a);(a=z.get(p))&&a.counter===q&&m(p);K(l,k,"close",{})})});return l}function ta(a){a=a.querySelectorAll("[data-ng-animate]");t(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate"),10),c=z.get(a);if(c)switch(b){case 2:c.runner.end();case 1:z.delete(a)}})}function m(a){a.removeAttribute("data-ng-animate");z.delete(a)}function L(a,b,c){c=s[0].body;var h=J(f),k=a===c||"HTML"===a.nodeName,d=a===h,g=!1,e=ga.get(a),p;for((a=A.data(a,"$ngAnimatePin"))&&(b=J(a));b;){d||(d=b===h);if(1!==b.nodeType)break;a=z.get(b)||{};if(!g){var H=ga.get(b);if(!0===H&&!1!==e){e=!0;break}else!1===H&&(e=!1);g=a.structural}if(P(p)||!0===p)a=A.data(b,"$$ngAnimateChildren"),ya(a)&&(p=a);if(g&&!1===p)break;k||(k=b===c);if(k&&d)break;if(!d&&(a=A.data(b,"$ngAnimatePin"))){b=J(a);continue}b=b.parentNode}return(!g||p)&&!0!==e&&d&&k}function F(a,b,c){c=c||{};c.state=b;a.setAttribute("data-ng-animate",b);c=(b=z.get(a))?va(b,c):c;z.set(a,c)}
var z=new y,ga=new y,h=null,p=c.$watch(function(){return 0===v.totalPendingRequests},function(a){a&&(p(),c.$$postDigest(function(){c.$$postDigest(function(){null===h&&(h=!0)})}))}),k=Object.create(null);y=a.customFilter();var na=a.classNameFilter();g=function(){return!0};var Ya=y||g,D=na?function(a,b){var c=[a.getAttribute("class"),b.addClass,b.removeClass].join(" ");return na.test(c)}:g,Oa=X(E),u=S.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)},ba={on:function(a,b,c){var h=ua(b);k[a]=k[a]||[];k[a].push({node:h,callback:c});A(b).on("$destroy",function(){z.get(h)||ba.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||C(arguments[0])){var h=k[a];h&&(k[a]=1===arguments.length?null:I(h,b,c))}else for(h in b=arguments[0],k)k[h]=I(k[h],b)},pin:function(a,b){Ea(Z(a),"element","not an element");Ea(Z(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,h){c=c||{};c.domOperation=h;return K(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!h;else if(Z(a)){var k=J(a);1===c?b=!ga.get(k):ga.set(k,!b)}else b=h=!!a;return b}};return ba}]}]).provider("$$animation",["$animateProvider",function(a){var b=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$Map","$$rAFScheduler",function(a,d,e,f,n,G){function l(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,e=d.parentNode;g.set(d,a);for(var f;e;){if(f=g.get(e)){f.processed||(f=b(f));break}e=e.parentNode}(f||c).children.push(a);return a}var c={children:[]},d,g=new n;for(d=0;d<a.length;d++){var e=a[d];g.set(e.domNode,a[d]={domNode:e.domNode,fn:e.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var g=0,e=[];for(d=0;d<c.length;d++){var f=c[d];0>=a&&(a=g,g=0,b.push(e),e=[]);e.push(f.fn);f.children.forEach(function(a){g++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var s=[],y=X(a);return function(n,q,v){function E(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];t(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function g(a){var b=[],c={};t(a,function(a,d){var k=J(a.element),g=0<=["enter","move"].indexOf(a.event),k=a.structural?E(k):[];if(k.length){var e=g?"to":"from";t(k,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][e]={animationID:d,element:A(a)}})}else b.push(a)});var d={},g={};t(c,function(c,e){var f=c.from,p=c.to;if(f&&p){var H=a[f.animationID],z=a[p.animationID],m=f.animationID.toString();if(!g[m]){var l=g[m]={structural:!0,beforeStart:function(){H.beforeStart();z.beforeStart()},close:function(){H.close();z.close()},classes:M(H.classes,z.classes),from:H,to:z,anchors:[]};l.classes.length?b.push(l):(b.push(H),b.push(z))}g[m].anchors.push({out:f.element,"in":p.element})}else f=f?f.animationID:p.animationID,p=f.toString(),d[p]||(d[p]=!0,b.push(a[f]))});return b}function M(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var g=a[d];if("ng-"!==g.substring(0,3))for(var e=0;e<b.length;e++)if(g===b[e]){c.push(g);break}}return c.join(" ")}function x(a){for(var c=b.length-1;0<=c;c--){var d=e.get(b[c])(a);if(d)return d}}function H(a,b){function c(a){(a=a.data("$$animationRunner"))&&a.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function I(){var a=n.data("$$animationRunner");!a||"leave"===q&&v.$$domOperationFired||a.end()}function K(b){n.off("$destroy",I);n.removeData("$$animationRunner");y(n,v);ha(n,v);v.domOperation();F&&a.removeClass(n,F);n.removeClass("ng-animate");m.complete(!b)}v=oa(v);var ta=0<=["enter","move","leave"].indexOf(q),m=new f({end:function(){K()},cancel:function(){K(!0)}});if(!b.length)return K(),m;n.data("$$animationRunner",m);var L=Fa(n.attr("class"),Fa(v.addClass,v.removeClass)),F=v.tempClasses;F&&(L+=" "+F,v.tempClasses=null);var z;ta&&(z="ng-"+q+"-prepare",a.addClass(n,z));s.push({element:n,classes:L,event:q,structural:ta,options:v,beforeStart:function(){n.addClass("ng-animate");F&&a.addClass(n,F);z&&(a.removeClass(n,z),z=null)},close:K});n.on("$destroy",I);if(1<s.length)return m;d.$$postDigest(function(){var a=[];t(s,function(b){b.element.data("$$animationRunner")?a.push(b):b.close()});s.length=0;var b=g(a),c=[];t(b,function(a){c.push({domNode:J(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if((a.anchors?a.from.element||a.to.element:a.element).data("$$animationRunner")){var d=x(a);d&&(b=d.start)}b?(b=b(),b.done(function(a){c(!a)}),H(a,b)):c()}})});G(l(c))});return m}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=La(),c=La();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,e,f,n,G,l,s,y){function q(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++M))+"-"+a.getAttribute("class")+"-"+b}function da(g,f,l,n){var m;0<b.count(l)&&(m=c.get(l),m||(f=W(f,"-stagger"),e.addClass(g,f),m=Ja(a,g,n),m.animationDuration=Math.max(m.animationDuration,0),m.transitionDuration=Math.max(m.transitionDuration,0),e.removeClass(g,f),c.put(l,m)));return m||{}}function v(a){x.push(a);s.waitUntilQuiet(function(){b.flush();c.flush();for(var a=G(),d=0;d<x.length;d++)x[d](a);x.length=0})}function E(c,g,e){g=b.get(e);g||(g=Ja(a,c,Wa),"infinite"===g.animationIterationCount&&(g.animationIterationCount=1));b.put(e,g);c=g;e=c.animationDelay;g=c.transitionDelay;c.maxDelay=e&&g?Math.max(e,g):e||g;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var g=X(e),M=0,x=[];return function(a,c){function d(){m()}function s(){m(!0)}function m(b){if(!(M||ba&&u)){M=!0;u=!1;h.$$skipPreparationClasses||e.removeClass(a,fa);e.removeClass(a,ca);wa(k,!1);pa(k,!1);t(x,function(a){k.style[a[0]]=""});g(a,h);ha(a,h);Object.keys(p).length&&t(p,function(a,b){a?k.style.setProperty(b,a):k.style.removeProperty(b)});if(h.onDone)h.onDone();ea&&ea.length&&a.off(ea.join(" "),z);var c=a.data("$$animateCss");c&&(n.cancel(c[0].timer),a.removeData("$$animateCss"));A&&A.complete(!b)}}function L(a){r.blockTransition&&pa(k,a);r.blockKeyframeAnimation&&wa(k,!!a)}function F(){A=new f({end:d,cancel:s});v(O);m();return{$$willAnimate:!1,start:function(){return A},end:d}}function z(a){a.stopPropagation();var b=a.originalEvent||a;b.target===k&&(a=b.$manualTimeStamp||Date.now(),b=parseFloat(b.elapsedTime.toFixed(3)),Math.max(a-T,0)>=P&&b>=N&&(ba=!0,m()))}function ga(){function b(){if(!M){L(!1);t(x,function(a){k.style[a[0]]=a[1]});g(a,h);e.addClass(a,ca);if(r.recalculateTimingStyles){ma=k.getAttribute("class")+" "+fa;ja=q(k,ma);B=E(k,ma,ja);$=B.maxDelay;w=Math.max($,0);N=B.maxDuration;if(0===N){m();return}r.hasTransitions=0<B.transitionDuration;r.hasAnimations=0<B.animationDuration}r.applyAnimationDelay&&($="boolean"!==typeof h.delay&&xa(h.delay)?parseFloat(h.delay):$,w=Math.max($,0),B.animationDelay=$,aa=[qa,$+"s"],x.push(aa),k.style[aa[0]]=aa[1]);P=1E3*w;S=1E3*N;if(h.easing){var d,f=h.easing;r.hasTransitions&&(d=Q+"TimingFunction",x.push([d,f]),k.style[d]=f);r.hasAnimations&&(d=Y+"TimingFunction",x.push([d,f]),k.style[d]=f)}B.transitionDuration&&ea.push(za);B.animationDuration&&ea.push(Aa);T=Date.now();var l=P+1.5*S;d=T+l;var f=a.data("$$animateCss")||[],F=!0;if(f.length){var s=f[0];(F=d>s.expectedEndTime)?n.cancel(s.timer):f.push(m)}F&&(l=n(c,l,!1),f[0]={timer:l,expectedEndTime:d},f.push(m),a.data("$$animateCss",f));if(ea.length)a.on(ea.join(" "),z);h.to&&(h.cleanupStyles&&Ma(p,k,Object.keys(h.to)),Ia(a,h))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!M)if(k.parentNode){var d=function(a){if(ba)u&&a&&(u=!1,m());else if(u=!a,B.animationDuration)if(a=wa(k,u),u)x.push(a);else{var b=x,c=b.indexOf(a);0<=a&&b.splice(c,1)}},f=0<Z&&(B.transitionDuration&&0===U.transitionDuration||B.animationDuration&&0===U.animationDuration)&&Math.max(U.animationDelay,U.transitionDelay);f?n(b,Math.floor(f*Z*1E3),!1):b();C.resume=function(){d(!0)};C.pause=function(){d(!1)}}else m()}
var h=c||{};h.$$prepared||(h=oa(Ca(h)));var p={},k=J(a);if(!k||!k.parentNode||!y.enabled())return F();var x=[],G=a.attr("class"),D=Qa(h),M,u,ba,A,C,w,P,N,S,T,ea=[];if(0===h.duration||!l.animations&&!l.transitions)return F();var ia=h.event&&V(h.event)?h.event.join(" "):h.event,X="",R="";ia&&h.structural?X=W(ia,"ng-",!0):ia&&(X=ia);h.addClass&&(R+=W(h.addClass,"-add"));h.removeClass&&(R.length&&(R+=" "),R+=W(h.removeClass,"-remove"));h.applyClassesEarly&&R.length&&g(a,h);var fa=[X,R].join(" ").trim(),ma=G+" "+fa,ca=W(fa,"-active"),G=D.to&&0<Object.keys(D.to).length;if(!(0<(h.keyframeStyle||"").length||G||fa))return F();var ja,U;0<h.stagger?(D=parseFloat(h.stagger),U={transitionDelay:D,animationDelay:D,transitionDuration:0,animationDuration:0}):(ja=q(k,ma),U=da(k,fa,ja,Xa));h.$$skipPreparationClasses||e.addClass(a,fa);h.transitionStyle&&(D=[Q,h.transitionStyle],ka(k,D),x.push(D));0<=h.duration&&(D=0<k.style[Q].length,D=Ka(h.duration,D),ka(k,D),x.push(D));h.keyframeStyle&&(D=[Y,h.keyframeStyle],ka(k,D),x.push(D));var Z=U?0<=h.staggerIndex?h.staggerIndex:b.count(ja):0;(ia=0===Z)&&!h.skipBlocking&&pa(k,9999);var B=E(k,ma,ja),$=B.maxDelay;w=Math.max($,0);N=B.maxDuration;var r={};r.hasTransitions=0<B.transitionDuration;r.hasAnimations=0<B.animationDuration;r.hasTransitionAll=r.hasTransitions&&"all"===B.transitionProperty;r.applyTransitionDuration=G&&(r.hasTransitions&&!r.hasTransitionAll||r.hasAnimations&&!r.hasTransitions);r.applyAnimationDuration=h.duration&&r.hasAnimations;r.applyTransitionDelay=xa(h.delay)&&(r.applyTransitionDuration||r.hasTransitions);r.applyAnimationDelay=xa(h.delay)&&r.hasAnimations;r.recalculateTimingStyles=0<R.length;if(r.applyTransitionDuration||r.applyAnimationDuration)N=h.duration?parseFloat(h.duration):N,r.applyTransitionDuration&&(r.hasTransitions=!0,B.transitionDuration=N,D=0<k.style[Q+"Property"].length,x.push(Ka(N,D))),r.applyAnimationDuration&&(r.hasAnimations=!0,B.animationDuration=N,x.push([Ba,N+"s"]));if(0===N&&!r.recalculateTimingStyles)return F();if(null!=h.delay){var aa;"boolean"!==typeof h.delay&&(aa=parseFloat(h.delay),w=Math.max(aa,0));r.applyTransitionDelay&&x.push([la,aa+"s"]);r.applyAnimationDelay&&x.push([qa,aa+"s"])}null==h.duration&&0<B.transitionDuration&&(r.recalculateTimingStyles=r.recalculateTimingStyles||ia);P=1E3*w;S=1E3*N;h.skipBlocking||(r.blockTransition=0<B.transitionDuration,r.blockKeyframeAnimation=0<B.animationDuration&&0<U.animationDelay&&0===U.animationDuration);h.from&&(h.cleanupStyles&&Ma(p,k,Object.keys(h.from)),Ha(a,h));r.blockTransition||r.blockKeyframeAnimation?L(N):h.skipBlocking||pa(k,!1);return{$$willAnimate:!0,end:d,start:function(){if(!M)return C={end:d,cancel:s,resume:null,pause:null},A=new f(C),v(ga),A}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,f,n,G){function l(a){return a.replace(/\bng-\S+\b/g,"")}function s(a,b){C(a)&&(a=a.split(" "));C(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function y(c,f,e){function n(a){var b={},c=J(a).getBoundingClientRect();t(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=v.scrollTop;break;case "left":d+=v.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function G(){var c=l(e.attr("class")||""),d=s(c,m),c=s(m,c),d=a(y,{to:n(e),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function q(){y.remove();f.removeClass("ng-animate-shim");e.removeClass("ng-animate-shim")}var y=A(J(f).cloneNode(!0)),m=l(y.attr("class")||"");f.addClass("ng-animate-shim");e.addClass("ng-animate-shim");y.addClass("ng-anchor");E.append(y);var L;c=function(){var c=a(y,{addClass:"ng-anchor-out",delay:!0,from:n(f)});return c.$$willAnimate?c:null}();if(!c&&(L=G(),!L))return q();var F=c||L;return{start:function(){function a(){c&&c.end()}var b,c=F.start();c.done(function(){c=null;if(!L&&(L=G()))return c=L.start(),c.done(function(){c=null;q();b.complete()}),c;q();b.complete()});return b=new d({end:a,cancel:a})}}}function q(a,b,c,f){var e=da(a,O),l=da(b,O),n=[];t(f,function(a){(a=y(c,a.out,a["in"]))&&n.push(a)});if(e||l||0!==n.length)return{start:function(){function a(){t(b,function(a){a.end()})}var b=[];e&&b.push(e.start());l&&b.push(l.start());t(n,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function da(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=ca(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!f.animations&&!f.transitions)return O;var v=G[0].body;c=J(e);var E=A(c.parentNode&&11===c.parentNode.nodeType||v.contains(c)?c:v);return function(a){return a.from&&a.to?q(a.from,a.to,a.classes,a.anchors):da(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=V(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var y=c[f],q=a.$$registeredAnimations[y];q&&!e[y]&&(d.push(b.get(q)),e[y]=!0)}return d}var f=X(d);return function(a,b,d,s){function q(){s.domOperation();f(a,s)}function A(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,g,M,f];break;case "addClass":b=[b,g,f];break;case "removeClass":b=[b,M,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Da(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Da(a))return a;return O}function C(a,b,d,e,f){var g=[];t(e,function(e){var l=e[f];l&&g.push(function(){var e,f,h=!1,g=function(a){h||(h=!0,(f||O)(a),e.complete(!a))};e=new c({end:function(){g()},cancel:function(){g(!0)}});f=A(l,a,b,d,function(a){g(!1===a)});return e})});return g}function v(a,b,d,e,f){var g=C(a,b,d,e,f);if(0===g.length){var k,l;"beforeSetClass"===f?(k=C(a,"removeClass",d,e,"beforeRemoveClass"),l=C(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(k=C(a,"removeClass",d,e,"removeClass"),l=C(a,"addClass",d,e,"addClass"));k&&(g=g.concat(k));l&&(g=g.concat(l))}if(0!==g.length)return function(a){var b=[];g.length&&t(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){t(b,function(b){a?b.cancel():b.end()})}}}var E=!1;3===arguments.length&&ra(d)&&(s=d,d=null);s=oa(s);d||(d=a.attr("class")||"",s.addClass&&(d+=" "+s.addClass),s.removeClass&&(d+=" "+s.removeClass));var g=s.addClass,M=s.removeClass,x=e(d),H,I;if(x.length){var K,J;"leave"===b?(J="leave",K="afterLeave"):(J="before"+b.charAt(0).toUpperCase()+b.substr(1),K=b);"enter"!==b&&"move"!==b&&(H=v(a,b,s,x,J));I=v(a,b,s,x,K)}if(H||I){var m;return{$$willAnimate:!0,end:function(){m?m.end():(E=!0,q(),ha(a,s),m=new c,m.complete(!0));return m},start:function(){function b(c){E=!0;q();ha(a,s);m.complete(c)}if(m)return m;m=new c;var d,e=[];H&&e.push(function(a){d=H(a)});e.length?e.push(function(a){q();a(!0)}):q();I&&e.push(function(a){d=I(a)});m.setHost({end:function(){E||((d||O)(void 0),b(void 0))},cancel:function(){E||((d||O)(!0),b(!0))}});c.chain(e,b);return m}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),n=d(a.to);if(b||n)return{start:function(){function a(){return function(){t(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());n&&d.push(n.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);(function(s,p){'use strict';var c="BUTTON A INPUT TEXTAREA SELECT DETAILS SUMMARY".split(" "),h=function(a,b){if(-1!==b.indexOf(a[0].nodeName))return!0};p.module("ngAria",["ng"]).info({angularVersion:"1.6.9"}).provider("$aria",function(){function a(a,c,n,k){return function(d,f,e){var g=e.$normalize(c);!b[g]||h(f,n)||e[g]||d.$watch(e[a],function(a){a=k?!a:!!a;f.attr(c,a)})}}var b={ariaHidden:!0,ariaChecked:!0,ariaReadonly:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaValue:!0,tabindex:!0,bindKeydown:!0,bindRoleForClick:!0};this.config=function(a){b=p.extend(b,a)};this.$get=function(){return{config:function(a){return b[a]},$$watchExpr:a}}}).directive("ngShow",["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",[],!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",[],!1)}]).directive("ngValue",["$aria",function(a){return a.$$watchExpr("ngValue","aria-checked",c,!1)}]).directive("ngChecked",["$aria",function(a){return a.$$watchExpr("ngChecked","aria-checked",c,!1)}]).directive("ngReadonly",["$aria",function(a){return a.$$watchExpr("ngReadonly","aria-readonly",c,!1)}]).directive("ngRequired",["$aria",function(a){return a.$$watchExpr("ngRequired","aria-required",c,!1)}]).directive("ngModel",["$aria",function(a){function b(b,k,d,f){return a.config(k)&&!d.attr(b)&&(f||!h(d,c))}function l(a,b){return!b.attr("role")&&b.attr("type")===a&&!h(b,c)}function m(a,b){var d=a.type,f=a.role;return"checkbox"===(d||f)||"menuitemcheckbox"===f?"checkbox":"radio"===(d||f)||"menuitemradio"===f?"radio":"range"===d||"progressbar"===f||"slider"===f?"range":""}return{restrict:"A",require:"ngModel",priority:200,compile:function(c,k){var d=m(k,c);return{post:function(f,e,g,c){function k(){return c.$modelValue}function h(a){e.attr("aria-checked",g.value==c.$viewValue)}function m(){e.attr("aria-checked",!c.$isEmpty(c.$viewValue))}var n=b("tabindex","tabindex",e,!1);switch(d){case "radio":case "checkbox":l(d,e)&&e.attr("role",d);b("aria-checked","ariaChecked",e,!1)&&f.$watch(k,"radio"===d?h:m);n&&e.attr("tabindex",0);break;case "range":l(d,e)&&e.attr("role","slider");if(a.config("ariaValue")){var p=!e.attr("aria-valuemin")&&(g.hasOwnProperty("min")||g.hasOwnProperty("ngMin")),q=!e.attr("aria-valuemax")&&(g.hasOwnProperty("max")||g.hasOwnProperty("ngMax")),r=!e.attr("aria-valuenow");p&&g.$observe("min",function(a){e.attr("aria-valuemin",a)});q&&g.$observe("max",function(a){e.attr("aria-valuemax",a)});r&&f.$watch(k,function(a){e.attr("aria-valuenow",a)})}n&&e.attr("tabindex",0)}!g.hasOwnProperty("ngRequired")&&c.$validators.required&&b("aria-required","ariaRequired",e,!1)&&g.$observe("required",function(){e.attr("aria-required",!!g.required)});b("aria-invalid","ariaInvalid",e,!0)&&f.$watch(function(){return c.$invalid},function(a){e.attr("aria-invalid",!!a)})}}}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled",c,!1)}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,b,c,h){b.attr("aria-live")||b.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse",function(a,b){return{restrict:"A",compile:function(l,m){var n=b(m.ngClick);return function(b,d,f){if(!h(d,c)&&(a.config("bindRoleForClick")&&!d.attr("role")&&d.attr("role","button"),a.config("tabindex")&&!d.attr("tabindex")&&d.attr("tabindex",0),a.config("bindKeydown")&&!f.ngKeydown&&!f.ngKeypress&&!f.ngKeyup))d.on("keydown",function(a){function c(){n(b,{$event:a})}var d=a.which||a.keyCode;32!==d&&13!==d||b.$apply(c)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(b,l,m){!a.config("tabindex")||l.attr("tabindex")||h(l,c)||l.attr("tabindex",0)}}])})(window,window.angular);(function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).info({angularVersion:"1.6.3"}).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);;(function(t,p){'use strict';function q(g,h,s){n.directive(g,["$parse","$swipe",function(a,b){return function(c,e,f){function k(a){if(!d)return!1;var b=Math.abs(a.y-d.y);a=(a.x-d.x)*h;return l&&75>b&&0<a&&30<a&&.3>b/a}var m=a(f[g]),d,l,r=["touch"];p.isDefined(f.ngSwipeDisableMouse)||r.push("mouse");b.bind(e,{start:function(a,b){d=a;l=!0},cancel:function(a){l=!1},end:function(a,b){k(a)&&c.$apply(function(){e.triggerHandler(s);m(c,{$event:b})})}},r)}}])}var n=p.module("ngTouch",[]);n.info({angularVersion:"1.7.5"});n.factory("$swipe",[function(){function g(a){a=a.originalEvent||a;var b=a.touches&&a.touches.length?a.touches:[a];a=a.changedTouches&&a.changedTouches[0]||b[0];return{x:a.clientX,y:a.clientY}}function h(a,b){var c=[];p.forEach(a,function(a){(a=n[a][b])&&c.push(a)});return c.join(" ")}var n={mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},touch:{start:"touchstart",move:"touchmove",end:"touchend",cancel:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",cancel:"pointercancel"}};return{bind:function(a,b,c){var e,f,k,m,d=!1;c=c||["mouse","touch","pointer"];a.on(h(c,"start"),function(a){k=g(a);d=!0;f=e=0;m=k;b.start&&b.start(k,a)});var l=h(c,"cancel");if(l)a.on(l,function(a){d=!1;b.cancel&&b.cancel(a)});a.on(h(c,"move"),function(a){if(d&&k){var c=g(a);e+=Math.abs(c.x-m.x);f+=Math.abs(c.y-m.y);m=c;10>e&&10>f||(f>e?(d=!1,b.cancel&&b.cancel(a)):(a.preventDefault(),b.move&&b.move(c,a)))}});a.on(h(c,"end"),function(a){d&&(d=!1,b.end&&b.end(g(a),a))})}}}]);q("ngSwipeLeft",-1,"swipeleft");q("ngSwipeRight",1,"swiperight")})(window,window.angular);;"format amd";!function(){"use strict";function a(a){return angular.isUndefined(a)||null===a}function b(){try{return require("moment")}catch(a){throw new Error("Please install moment via npm. Please reference to: https://github.com/urish/angular-moment")}}function c(c,d){if("undefined"==typeof d){if("function"!=typeof require)throw new Error("Moment cannot be found by angular-moment! Please reference to: https://github.com/urish/angular-moment");d=b()}return c.module("angularMoment",[]).constant("angularMomentConfig",{preprocess:null,timezone:null,format:null,statefulFilters:!0}).constant("moment",d).constant("amTimeAgoConfig",{withoutSuffix:!1,serverTime:null,titleFormat:null,fullDateThreshold:null,fullDateFormat:null,fullDateThresholdUnit:"day"}).directive("amTimeAgo",["$window","moment","amMoment","amTimeAgoConfig",function(b,d,e,f){return function(g,h,i){function j(){var a;if(p)a=p;else if(f.serverTime){var b=(new Date).getTime(),c=b-w+f.serverTime;a=d(c)}else a=d();return a}function k(){q&&(b.clearTimeout(q),q=null)}function l(a){var c=j().diff(a,v),d=t&&c>=t;if(d?h.text(a.format(u)):h.text(a.from(j(),r)),s&&z&&h.attr("title",a.format(s)),!d){var e=Math.abs(j().diff(a,"minute")),f=3600;e<1?f=1:e<60?f=30:e<180&&(f=300),q=b.setTimeout(function(){l(a)},1e3*f)}}function m(a){y&&h.attr("datetime",a)}function n(){if(k(),o){var a=e.preprocessDate(o);l(a),m(a.toISOString())}}var o,p,q=null,r=f.withoutSuffix,s=f.titleFormat,t=f.fullDateThreshold,u=f.fullDateFormat,v=f.fullDateThresholdUnit,w=(new Date).getTime(),x=i.amTimeAgo,y="TIME"===h[0].nodeName.toUpperCase(),z=!h.attr("title");g.$watch(x,function(b){return a(b)||""===b?(k(),void(o&&(h.text(""),m(""),o=null))):(o=b,void n())}),c.isDefined(i.amFrom)&&g.$watch(i.amFrom,function(b){p=a(b)||""===b?null:d(b),n()}),c.isDefined(i.amWithoutSuffix)&&g.$watch(i.amWithoutSuffix,function(a){"boolean"==typeof a?(r=a,n()):r=f.withoutSuffix}),i.$observe("amFullDateThreshold",function(a){t=a,n()}),i.$observe("amFullDateFormat",function(a){u=a,n()}),i.$observe("amFullDateThresholdUnit",function(a){v=a,n()}),g.$on("$destroy",function(){k()}),g.$on("amMoment:localeChanged",function(){n()})}}]).service("amMoment",["moment","$rootScope","$log","angularMomentConfig",function(a,b,d,e){var f=null;this.changeLocale=function(d,e){var f=a.locale(d,e);return c.isDefined(d)&&b.$broadcast("amMoment:localeChanged"),f},this.changeTimezone=function(c){a.tz&&a.tz.setDefault?(a.tz.setDefault(c),b.$broadcast("amMoment:timezoneChanged")):d.warn("angular-moment: changeTimezone() works only with moment-timezone.js v0.3.0 or greater."),e.timezone=c,f=c},this.preprocessDate=function(b){return f!==e.timezone&&this.changeTimezone(e.timezone),e.preprocess?e.preprocess(b):a(!isNaN(parseFloat(b))&&isFinite(b)?parseInt(b,10):b)}}]).filter("amParse",["moment",function(a){return function(b,c){return a(b,c)}}]).filter("amFromUnix",["moment",function(a){return function(b){return a.unix(b)}}]).filter("amUtc",["moment",function(a){return function(b){return a.utc(b)}}]).filter("amUtcOffset",["amMoment",function(a){function b(b,c){return a.preprocessDate(b).utcOffset(c)}return b}]).filter("amLocal",["moment",function(a){return function(b){return a.isMoment(b)?b.local():null}}]).filter("amTimezone",["amMoment","angularMomentConfig","$log",function(a,b,c){function d(b,d){var e=a.preprocessDate(b);return d?e.tz?e.tz(d):(c.warn("angular-moment: named timezone specified but moment.tz() is undefined. Did you forget to include moment-timezone.js ?"),e):e}return d}]).filter("amCalendar",["moment","amMoment","angularMomentConfig",function(b,c,d){function e(b,d,e){if(a(b))return"";var f=c.preprocessDate(b);return f.isValid()?f.calendar(d,e):""}return e.$stateful=d.statefulFilters,e}]).filter("amDifference",["moment","amMoment","angularMomentConfig",function(b,c,d){function e(d,e,f,g){if(a(d))return"";var h=c.preprocessDate(d),i=a(e)?b():c.preprocessDate(e);return h.isValid()&&i.isValid()?h.diff(i,f,g):""}return e.$stateful=d.statefulFilters,e}]).filter("amDateFormat",["moment","amMoment","angularMomentConfig",function(b,c,d){function e(b,d){if(a(b))return"";var e=c.preprocessDate(b);return e.isValid()?e.format(d):""}return e.$stateful=d.statefulFilters,e}]).filter("amDurationFormat",["moment","angularMomentConfig",function(b,c){function d(c,d,e){return a(c)?"":b.duration(c,d).humanize(e)}return d.$stateful=c.statefulFilters,d}]).filter("amTimeAgo",["moment","amMoment","angularMomentConfig",function(b,c,d){function e(d,e,f){var g,h;return a(d)?"":(d=c.preprocessDate(d),g=b(d),g.isValid()?(h=b(f),!a(f)&&h.isValid()?g.from(h,e):g.fromNow(e)):"")}return e.$stateful=d.statefulFilters,e}]).filter("amSubtract",["moment","angularMomentConfig",function(b,c){function d(c,d,e){return a(c)?"":b(c).subtract(parseInt(d,10),e)}return d.$stateful=c.statefulFilters,d}]).filter("amAdd",["moment","angularMomentConfig",function(b,c){function d(c,d,e){return a(c)?"":b(c).add(parseInt(d,10),e)}return d.$stateful=c.statefulFilters,d}]).filter("amStartOf",["moment","angularMomentConfig",function(b,c){function d(c,d){return a(c)?"":b(c).startOf(d)}return d.$stateful=c.statefulFilters,d}]).filter("amEndOf",["moment","angularMomentConfig",function(b,c){function d(c,d){return a(c)?"":b(c).endOf(d)}return d.$stateful=c.statefulFilters,d}]),"angularMoment"}var d=window&&window.process&&window.process.type;"function"==typeof define&&define.amd?define(["angular","moment"],c):"undefined"!=typeof module&&module&&module.exports&&"function"==typeof require&&!d?module.exports=c(require("angular"),require("moment")):c(angular,("undefined"!=typeof global&&"undefined"!=typeof global.moment?global:window).moment)}();!function(){"use strict";angular.module("as.sortable",[]).constant("sortableConfig",{itemClass:"as-sortable-item",handleClass:"as-sortable-item-handle",placeHolderClass:"as-sortable-placeholder",dragClass:"as-sortable-drag",hiddenClass:"as-sortable-hidden",dragging:"as-sortable-dragging"})}(),function(){"use strict";var mainModule=angular.module("as.sortable");mainModule.factory("$helper",["$document","$window",function($document,$window){return{height:function(element){return element[0].getBoundingClientRect().height},width:function(element){return element[0].getBoundingClientRect().width},offset:function(element,scrollableContainer){var boundingClientRect=element[0].getBoundingClientRect();return scrollableContainer||(scrollableContainer=$document[0].documentElement),{width:boundingClientRect.width||element.prop("offsetWidth"),height:boundingClientRect.height||element.prop("offsetHeight"),top:boundingClientRect.top+($window.pageYOffset||scrollableContainer.scrollTop-scrollableContainer.offsetTop),left:boundingClientRect.left+($window.pageXOffset||scrollableContainer.scrollLeft-scrollableContainer.offsetLeft)}},eventObj:function(event){var obj=event;return void 0!==event.targetTouches?obj=event.targetTouches.item(0):void 0!==event.originalEvent&&void 0!==event.originalEvent.targetTouches&&(obj=event.originalEvent.targetTouches.item(0)),obj},isTouchInvalid:function(event){var touchInvalid=!1;return void 0!==event.touches&&event.touches.length>1?touchInvalid=!0:void 0!==event.originalEvent&&void 0!==event.originalEvent.touches&&event.originalEvent.touches.length>1&&(touchInvalid=!0),touchInvalid},positionStarted:function(event,target,scrollableContainer){var pos={};return pos.offsetX=event.pageX-this.offset(target,scrollableContainer).left,pos.offsetY=event.pageY-this.offset(target,scrollableContainer).top,pos.startX=pos.lastX=event.pageX,pos.startY=pos.lastY=event.pageY,pos.nowX=pos.nowY=pos.distX=pos.distY=pos.dirAx=0,pos.dirX=pos.dirY=pos.lastDirX=pos.lastDirY=pos.distAxX=pos.distAxY=0,pos},calculatePosition:function(pos,event){pos.lastX=pos.nowX,pos.lastY=pos.nowY,pos.nowX=event.pageX,pos.nowY=event.pageY,pos.distX=pos.nowX-pos.lastX,pos.distY=pos.nowY-pos.lastY,pos.lastDirX=pos.dirX,pos.lastDirY=pos.dirY,pos.dirX=0===pos.distX?0:pos.distX>0?1:-1,pos.dirY=0===pos.distY?0:pos.distY>0?1:-1;var newAx=Math.abs(pos.distX)>Math.abs(pos.distY)?1:0;pos.dirAx!==newAx?(pos.distAxX=0,pos.distAxY=0):(pos.distAxX+=Math.abs(pos.distX),0!==pos.dirX&&pos.dirX!==pos.lastDirX&&(pos.distAxX=0),pos.distAxY+=Math.abs(pos.distY),0!==pos.dirY&&pos.dirY!==pos.lastDirY&&(pos.distAxY=0)),pos.dirAx=newAx},movePosition:function(event,element,pos,container,containerPositioning,scrollableContainer){var bounds,useRelative="relative"===containerPositioning;element.x=event.pageX-pos.offsetX,element.y=event.pageY-pos.offsetY,container&&(bounds=this.offset(container,scrollableContainer),useRelative&&(element.x-=bounds.left,element.y-=bounds.top,bounds.left=0,bounds.top=0),element.x<bounds.left?element.x=bounds.left:element.x>=bounds.width+bounds.left-this.offset(element).width&&(element.x=bounds.width+bounds.left-this.offset(element).width),element.y<bounds.top?element.y=bounds.top:element.y>=bounds.height+bounds.top-this.offset(element).height&&(element.y=bounds.height+bounds.top-this.offset(element).height)),element.css({left:element.x+"px",top:element.y+"px"}),this.calculatePosition(pos,event)},dragItem:function(item){return{index:item.index(),parent:item.sortableScope,source:item,targetElement:null,targetElementOffset:null,sourceInfo:{index:item.index(),itemScope:item.itemScope,sortableScope:item.sortableScope},canMove:function(itemPosition,targetElement,targetElementOffset){return this.targetElement!==targetElement?(this.targetElement=targetElement,this.targetElementOffset=targetElementOffset,!0):itemPosition.dirX*(targetElementOffset.left-this.targetElementOffset.left)>0||itemPosition.dirY*(targetElementOffset.top-this.targetElementOffset.top)>0?(this.targetElementOffset=targetElementOffset,!0):!1},moveTo:function(parent,index){this.parent=parent,this.isSameParent()&&this.source.index()<index&&!this.sourceInfo.sortableScope.cloning&&(index-=1),this.index=index},isSameParent:function(){return this.parent.element===this.sourceInfo.sortableScope.element},isOrderChanged:function(){return this.index!==this.sourceInfo.index},eventArgs:function(){return{source:this.sourceInfo,dest:{index:this.index,sortableScope:this.parent}}},apply:function(){this.sourceInfo.sortableScope.cloning?this.parent.options.clone||this.parent.insertItem(this.index,angular.copy(this.source.modelValue)):(this.sourceInfo.sortableScope.removeItem(this.sourceInfo.index),(this.parent.options.allowDuplicates||this.parent.modelValue.indexOf(this.source.modelValue)<0)&&this.parent.insertItem(this.index,this.source.modelValue))}}},noDrag:function(element){return void 0!==element.attr("no-drag")||void 0!==element.attr("data-no-drag")},findAncestor:function(el,selector){el=el[0];for(var matches=Element.matches||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector;(el=el.parentElement)&&!matches.call(el,selector););return el?angular.element(el):angular.element(document.body)}}}])}(),function(){"use strict";var mainModule=angular.module("as.sortable");mainModule.controller("as.sortable.sortableController",["$scope",function($scope){this.scope=$scope,$scope.modelValue=null,$scope.callbacks=null,$scope.type="sortable",$scope.options={longTouch:!1},$scope.isDisabled=!1,$scope.insertItem=function(index,itemData){$scope.options.allowDuplicates?$scope.modelValue.splice(index,0,angular.copy(itemData)):$scope.modelValue.splice(index,0,itemData)},$scope.removeItem=function(index){var removedItem=null;return index>-1&&(removedItem=$scope.modelValue.splice(index,1)[0]),removedItem},$scope.isEmpty=function(){return $scope.modelValue&&0===$scope.modelValue.length},$scope.accept=function(sourceItemHandleScope,destScope,destItemScope){return $scope.callbacks.accept(sourceItemHandleScope,destScope,destItemScope)}}]),mainModule.directive("asSortable",function(){return{require:"ngModel",restrict:"A",scope:!0,controller:"as.sortable.sortableController",link:function(scope,element,attrs,ngModelController){var ngModel,callbacks;ngModel=ngModelController,ngModel&&(ngModel.$render=function(){scope.modelValue=ngModel.$modelValue},scope.element=element,element.data("_scope",scope),callbacks={accept:null,orderChanged:null,itemMoved:null,dragStart:null,dragMove:null,dragCancel:null,dragEnd:null},callbacks.accept=function(sourceItemHandleScope,destSortableScope,destItemScope){return!0},callbacks.orderChanged=function(event){},callbacks.itemMoved=function(event){},callbacks.dragStart=function(event){},callbacks.dragMove=angular.noop,callbacks.dragCancel=function(event){},callbacks.dragEnd=function(event){},scope.$watch(attrs.asSortable,function(newVal,oldVal){angular.forEach(newVal,function(value,key){callbacks[key]?"function"==typeof value&&(callbacks[key]=value):scope.options[key]=value}),scope.callbacks=callbacks},!0),angular.isDefined(attrs.isDisabled)&&scope.$watch(attrs.isDisabled,function(newVal,oldVal){angular.isUndefined(newVal)||(scope.isDisabled=newVal)},!0))}}})}(),function(){"use strict";function isParent(possibleParent,elem){return elem&&"HTML"!==elem.nodeName?elem.parentNode===possibleParent?!0:isParent(possibleParent,elem.parentNode):!1}var mainModule=angular.module("as.sortable");mainModule.controller("as.sortable.sortableItemHandleController",["$scope",function($scope){this.scope=$scope,$scope.itemScope=null,$scope.type="handle"}]),mainModule.directive("asSortableItemHandle",["sortableConfig","$helper","$window","$document","$timeout",function(sortableConfig,$helper,$window,$document,$timeout){return{require:"^asSortableItem",scope:!0,restrict:"A",controller:"as.sortable.sortableItemHandleController",link:function(scope,element,attrs,itemController){function insertBefore(targetElement,targetScope){"table-row"!==placeHolder.css("display")&&placeHolder.css("display","block"),targetScope.sortableScope.options.clone||(targetElement[0].parentNode.insertBefore(placeHolder[0],targetElement[0]),dragItemInfo.moveTo(targetScope.sortableScope,targetScope.index()))}function insertAfter(targetElement,targetScope){"table-row"!==placeHolder.css("display")&&placeHolder.css("display","block"),targetScope.sortableScope.options.clone||(targetElement.after(placeHolder),dragItemInfo.moveTo(targetScope.sortableScope,targetScope.index()+1))}function fetchScope(element){for(var scope;!scope&&element.length;)scope=element.data("_scope"),scope||(element=element.parent());return scope}function rollbackDragChanges(){scope.itemScope.sortableScope.cloning||placeElement.replaceWith(scope.itemScope.element),placeHolder.remove(),dragElement.remove(),dragElement=null,dragHandled=!1,containment.css("cursor",""),containment.removeClass("as-sortable-un-selectable")}var dragElement,placeHolder,placeElement,itemPosition,dragItemInfo,containment,containerPositioning,dragListen,scrollableContainer,dragStart,dragMove,dragEnd,dragCancel,isDraggable,placeHolderIndex,bindDrag,unbindDrag,bindEvents,unBindEvents,hasTouch,isIOS,longTouchStart,longTouchCancel,longTouchTimer,dragHandled,createPlaceholder,isPlaceHolderPresent,escapeListen,isDisabled=!1,isLongTouch=!1;hasTouch="ontouchstart"in $window,isIOS=/iPad|iPhone|iPod/.test($window.navigator.userAgent)&&!$window.MSStream,sortableConfig.handleClass&&element.addClass(sortableConfig.handleClass),scope.itemScope=itemController.scope,element.data("_scope",scope),scope.$watchGroup(["sortableScope.isDisabled","sortableScope.options.longTouch"],function(newValues){isDisabled!==newValues[0]?(isDisabled=newValues[0],isDisabled?unbindDrag():bindDrag()):isLongTouch!==newValues[1]?(isLongTouch=newValues[1],unbindDrag(),bindDrag()):bindDrag()}),scope.$on("$destroy",function(){angular.element($document[0].body).unbind("keydown",escapeListen)}),createPlaceholder=function(itemScope){return"function"==typeof scope.sortableScope.options.placeholder?angular.element(scope.sortableScope.options.placeholder(itemScope)):"string"==typeof scope.sortableScope.options.placeholder?angular.element(scope.sortableScope.options.placeholder):angular.element($document[0].createElement(itemScope.element.prop("tagName")))},dragListen=function(event){var startPosition,unbindMoveListen=function(){angular.element($document).unbind("mousemove",moveListen),angular.element($document).unbind("touchmove",moveListen),element.unbind("mouseup",unbindMoveListen),element.unbind("touchend",unbindMoveListen),element.unbind("touchcancel",unbindMoveListen)},moveListen=function(e){e.preventDefault();var eventObj=$helper.eventObj(e);startPosition||(startPosition={clientX:eventObj.clientX,clientY:eventObj.clientY}),Math.abs(eventObj.clientX-startPosition.clientX)+Math.abs(eventObj.clientY-startPosition.clientY)>10&&(unbindMoveListen(),dragStart(event))};angular.element($document).bind("mousemove",moveListen),angular.element($document).bind("touchmove",moveListen),element.bind("mouseup",unbindMoveListen),element.bind("touchend",unbindMoveListen),element.bind("touchcancel",unbindMoveListen),event.stopPropagation()},dragStart=function(event){var eventObj,tagName;(hasTouch||2!==event.button&&3!==event.which)&&(hasTouch&&$helper.isTouchInvalid(event)||!dragHandled&&isDraggable(event)&&(dragHandled=!0,event.preventDefault(),eventObj=$helper.eventObj(event),scope.sortableScope=scope.sortableScope||scope.itemScope.sortableScope,scope.callbacks=scope.callbacks||scope.itemScope.callbacks,scope.itemScope.sortableScope.options.clone||scope.itemScope.sortableScope.options.ctrlClone&&event.ctrlKey?scope.itemScope.sortableScope.cloning=!0:scope.itemScope.sortableScope.cloning=!1,scrollableContainer=angular.element($document[0].querySelector(scope.sortableScope.options.scrollableContainer)).length>0?$document[0].querySelector(scope.sortableScope.options.scrollableContainer):$document[0].documentElement,containment=scope.sortableScope.options.containment?$helper.findAncestor(element,scope.sortableScope.options.containment):angular.element($document[0].body),containment.css("cursor","move"),containment.css("cursor","-webkit-grabbing"),containment.css("cursor","-moz-grabbing"),containment.addClass("as-sortable-un-selectable"),containerPositioning=scope.sortableScope.options.containerPositioning||"absolute",dragItemInfo=$helper.dragItem(scope),tagName=scope.itemScope.element.prop("tagName"),dragElement=angular.element($document[0].createElement(scope.sortableScope.element.prop("tagName"))).addClass(scope.sortableScope.element.attr("class")).addClass(sortableConfig.dragClass),dragElement.css("width",$helper.width(scope.itemScope.element)+"px"),dragElement.css("height",$helper.height(scope.itemScope.element)+"px"),placeHolder=createPlaceholder(scope.itemScope).addClass(sortableConfig.placeHolderClass).addClass(scope.sortableScope.options.additionalPlaceholderClass),placeHolder.css("width",$helper.width(scope.itemScope.element)+"px"),placeHolder.css("height",$helper.height(scope.itemScope.element)+"px"),placeElement=angular.element($document[0].createElement(tagName)),sortableConfig.hiddenClass&&placeElement.addClass(sortableConfig.hiddenClass),itemPosition=$helper.positionStarted(eventObj,scope.itemScope.element,scrollableContainer),scope.itemScope.sortableScope.options.clone||scope.itemScope.element.after(placeHolder),scope.itemScope.sortableScope.cloning?dragElement.append(scope.itemScope.element.clone()):(scope.itemScope.element.after(placeElement),dragElement.append(scope.itemScope.element)),containment.append(dragElement),$helper.movePosition(eventObj,dragElement,itemPosition,containment,containerPositioning,scrollableContainer),scope.sortableScope.$apply(function(){scope.callbacks.dragStart(dragItemInfo.eventArgs())}),bindEvents()))},isDraggable=function(event){var elementClicked,sourceScope,isDraggable;for(elementClicked=angular.element(event.target),sourceScope=fetchScope(elementClicked),isDraggable=sourceScope&&"handle"===sourceScope.type;isDraggable&&elementClicked[0]!==element[0];)$helper.noDrag(elementClicked)&&(isDraggable=!1),elementClicked=elementClicked.parent();return isDraggable},dragMove=function(event){var eventObj,targetX,targetY,targetScope,targetElement;if((!hasTouch||!$helper.isTouchInvalid(event))&&dragHandled&&dragElement){if(event.preventDefault(),eventObj=$helper.eventObj(event),scope.callbacks.dragMove!==angular.noop&&scope.sortableScope.$apply(function(){scope.callbacks.dragMove(itemPosition,containment,eventObj)}),targetX=eventObj.pageX-$document[0].documentElement.scrollLeft,targetY=eventObj.pageY-($window.pageYOffset||$document[0].documentElement.scrollTop),dragElement.addClass(sortableConfig.hiddenClass),targetElement=angular.element($document[0].elementFromPoint(targetX,targetY)),dragElement.removeClass(sortableConfig.hiddenClass),$helper.movePosition(eventObj,dragElement,itemPosition,containment,containerPositioning,scrollableContainer),dragElement.addClass(sortableConfig.dragging),targetScope=fetchScope(targetElement),!targetScope||!targetScope.type)return;if("handle"===targetScope.type&&(targetScope=targetScope.itemScope),"item"!==targetScope.type&&"sortable"!==targetScope.type)return;if("item"===targetScope.type&&targetScope.accept(scope,targetScope.sortableScope,targetScope)){targetElement=targetScope.element;var targetElementOffset=$helper.offset(targetElement,scrollableContainer);if(!dragItemInfo.canMove(itemPosition,targetElement,targetElementOffset))return;var placeholderIndex=placeHolderIndex(targetScope.sortableScope.element);0>placeholderIndex?insertBefore(targetElement,targetScope):placeholderIndex<=targetScope.index()?insertAfter(targetElement,targetScope):insertBefore(targetElement,targetScope)}"sortable"===targetScope.type&&targetScope.accept(scope,targetScope)&&!isParent(targetScope.element[0],targetElement[0])&&(isPlaceHolderPresent(targetElement)||targetScope.options.clone||(targetElement[0].appendChild(placeHolder[0]),dragItemInfo.moveTo(targetScope,targetScope.modelValue.length)))}},placeHolderIndex=function(targetElement){var itemElements,i;if(targetElement.hasClass(sortableConfig.placeHolderClass))return 0;for(itemElements=targetElement.children(),i=0;i<itemElements.length;i+=1)if(angular.element(itemElements[i]).hasClass(sortableConfig.placeHolderClass))return i;return-1},isPlaceHolderPresent=function(targetElement){return placeHolderIndex(targetElement)>=0},dragEnd=function(event){dragHandled&&(event.preventDefault(),dragElement&&(rollbackDragChanges(),dragItemInfo.apply(),scope.sortableScope.$apply(function(){dragItemInfo.isSameParent()?dragItemInfo.isOrderChanged()&&scope.callbacks.orderChanged(dragItemInfo.eventArgs()):scope.callbacks.itemMoved(dragItemInfo.eventArgs())}),scope.sortableScope.$apply(function(){scope.callbacks.dragEnd(dragItemInfo.eventArgs())}),dragItemInfo=null),unBindEvents())},dragCancel=function(event){dragHandled&&(event.preventDefault(),dragElement&&(rollbackDragChanges(),scope.sortableScope.$apply(function(){scope.callbacks.dragCancel(dragItemInfo.eventArgs())}),dragItemInfo=null),unBindEvents())},bindDrag=function(){hasTouch&&(isLongTouch?isIOS?(element.bind("touchstart",longTouchStart),element.bind("touchend",longTouchCancel),element.bind("touchmove",longTouchCancel)):element.bind("contextmenu",dragListen):element.bind("touchstart",dragListen)),element.bind("mousedown",dragListen)},unbindDrag=function(){element.unbind("touchstart",longTouchStart),element.unbind("touchend",longTouchCancel),element.unbind("touchmove",longTouchCancel),element.unbind("contextmenu",dragListen),element.unbind("touchstart",dragListen),element.unbind("mousedown",dragListen)},longTouchStart=function(event){longTouchTimer=$timeout(function(){dragListen(event)},500)},longTouchCancel=function(){$timeout.cancel(longTouchTimer)},escapeListen=function(event){27===event.keyCode&&dragCancel(event)},angular.element($document[0].body).bind("keydown",escapeListen),bindEvents=function(){angular.element($document).bind("touchmove",dragMove),angular.element($document).bind("touchend",dragEnd),angular.element($document).bind("touchcancel",dragCancel),angular.element($document).bind("mousemove",dragMove),angular.element($document).bind("mouseup",dragEnd)},unBindEvents=function(){angular.element($document).unbind("touchend",dragEnd),angular.element($document).unbind("touchcancel",dragCancel),angular.element($document).unbind("touchmove",dragMove),angular.element($document).unbind("mouseup",dragEnd),angular.element($document).unbind("mousemove",dragMove)}}}}])}(),function(){"use strict";var mainModule=angular.module("as.sortable");mainModule.controller("as.sortable.sortableItemController",["$scope",function($scope){this.scope=$scope,$scope.sortableScope=null,$scope.modelValue=null,$scope.type="item",$scope.index=function(){return $scope.$index},$scope.itemData=function(){return $scope.sortableScope.modelValue[$scope.$index]}}]),mainModule.directive("asSortableItem",["sortableConfig",function(sortableConfig){return{require:["^asSortable","?ngModel"],restrict:"A",controller:"as.sortable.sortableItemController",link:function(scope,element,attrs,ctrl){var sortableController=ctrl[0],ngModelController=ctrl[1];sortableConfig.itemClass&&element.addClass(sortableConfig.itemClass),scope.sortableScope=sortableController.scope,ngModelController?ngModelController.$render=function(){scope.modelValue=ngModelController.$modelValue}:scope.modelValue=sortableController.scope.modelValue[scope.$index],scope.element=element,element.data("_scope",scope)}}}])}();;var env={};if(window&&window.__env){Object.assign(env,window.__env);}
else{env.enableDebug=true;}
angular.module('tasteatlas',['angularMoment','ngAnimate','ngCookies','ngTouch','as.sortable']).constant('__env',env).config(['$locationProvider','$compileProvider','__env',function($locationProvider,$compileProvider,__env){$locationProvider.html5Mode({enabled:true,requireBase:false,rewriteLinks:false});var enableDebug=__env?__env.enableDebug:true;$compileProvider.debugInfoEnabled(true);$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|app):|data:image\//);if(enableDebug){console.log("%cRUNNING IN DEV MODE: run gulp watchers for css and template cache","color:yellow; font-weight:bold; font-size:20px");}}]).run(['TokenFactory','$rootScope','GoogleAd','UserCacheService','UserLocationFactory','ta2ServicesEntityCommentHandler','CompileComponentService','taServicesEntityModalHandler','LoginService',function(TokenFactory,$rootScope,GoogleAd,UserCacheService,UserLocationFactory,ta2ServicesEntityCommentHandler,CompileComponentService,taServicesEntityModalHandler,LoginService){$rootScope.userCacheServiceInitialized=false;$rootScope.userTokenInitalized=false;GoogleAd.init();new Promise(function(resolve,reject){resolve(TokenFactory.initTokenFactory());}).then(function(success){$rootScope.userTokenInitalized=true;new Promise(function(resolve,reject){resolve(UserLocationFactory.initUserLocationFactory());}).then(function(success){return UserCacheService.initUserCacheService();}).then(function(success){CompileComponentService.listenForNewComponents();});}).catch(function(error){console.log('App start failed.');});window.angularServices=window.angularServices||{};window.angularServices.ratingPopup=ta2ServicesEntityCommentHandler
window.angularServices.sharedPopup=taServicesEntityModalHandler
window.angularServices.loginService=LoginService}]);;angular.module('tasteatlas').run(['$templateCache',function($templateCache){$templateCache.put('/content/scripts/app/directives/ta-home-map-button.html','<div class="search-results-map-button" ng-class="{ \'search-results-map-button--opened\' : pendingAction === \'close\' }"><button ng-if="pendingAction === \'open\'" class="btn btn--center btn--round btn--lowercase btn--white-background" ng-click="mapAction(\'open\')"><i class="icon icon--pin"></i> <span>View map</span></button> <button ng-if="pendingAction === \'close\'" class="btn btn--center btn--round btn--lowercase btn--white-background" ng-click="mapAction(\'close\')"><i class="icon icon__grid icon__grid-regular icon__grid--deselected"></i> <span>View list</span></button></div>');$templateCache.put('/content/scripts/app/directives/ta-show-nav-layer.html','<div class="about-food"><div class="about-food__menu" style="padding-bottom: 0px;"><div class="sticky-nav-element-container"><div class="left-item"><img ta-lazy-load lazy-source="{{details.previewImage}}?width=37&height=25"></div><div class="middle-item"><div class="nav-place">{{details.regionName}}, {{details.countryName}}</div><div class="nav-name" style="text-transform:capitalize">{{details.title}}</div></div><div class="right-item"><img ta-lazy-load lazy-source="{{details.countryImage}}?width=37&height=25"></div></div><div style="padding-top: 10px; padding-bottom:12px;"><div class="back-link" style="margin:0px;" ng-click="changePage()"><i class="icon__arrow icon__arrow--left"></i>Back</div></div></div></div>');$templateCache.put('/content/scripts/app/directives/ta-show-nav-left-arrow.html','<div><div id="right-arrow-mask" class="right-arrow-mask"></div></div>');$templateCache.put('/content/scripts/app/directives/ta-show-nav-right-arrow.html','<div><div id="right-arrow-sticky-mask" class="right-arrow-sticky-mask"></div></div>');$templateCache.put('/content/scripts/app/directives/ta-show-nav.html','<div class="about-food__menu about-food__menu-fix" ng-class="smallerMenu"><div class="sticky-nav-element-container"><div class="middle-item"><div class="nav-place">{{details.regionName}}, {{details.countryName}}</div><div class="nav-name">{{details.title}}</div></div></div><nav id="about-food__nav-sticky" class="about-food__nav-fix"><ul class="about-food__nav__list"><li class="about-food__nav__item" ng-repeat="url in urlLinks" ng-class="{\'about-food__nav__item--selected\' : activePage === url.link}" ng-if="url.isVisible"><a ng-href="{{details.urlLink}}/{{url.link}}" target="_self">{{url.preview}}</a></li></ul></nav></div>');$templateCache.put('/content/scripts/app/v2/ta2-consumer.html','<div><h1>CONSUMER</h1><h3>{{$ctrl.layout}}</h3><button ng-click="$ctrl.openRatingPopup(98, 1, { layout: \'desktop\'})">Load bolognese desktop</button> <button ng-click="$ctrl.openRatingPopup(98, 1, { layout: \'mobile\'})">Load bolognese mobile</button> <button ng-click="$ctrl.openRatingPopup(7569, 1, { layout: \'desktop\'})">Banitsa desktop</button> <button ng-click="$ctrl.openRatingPopup(1595, 1, { onSuccess: $ctrl.nextFunction, layout : \'mobile-middle\'})">Load pesto mobile-middle</button><hr><button ng-click="$ctrl.openRatingPopup(1, 14, { layout : \'desktop\'})">Load Oktoberfest desktop</button> <button ng-click="$ctrl.openRatingPopup(1, 14, { layout: \'mobile\'})">Load Oktoberfest mobile</button> <button ng-click="$ctrl.openRatingPopup(1, 14, { layout : \'mobile-middle\'})">Load Oktoberfest mobile-middle</button><hr><button ng-click="$ctrl.openRatingPopup(7548 , 18, { layout : \'desktop\'})">Load Cardinal\'s Rag\xF9 (bolognese) desktop</button> <button ng-click="$ctrl.openRatingPopup(7548 , 18, { layout: \'mobile\'})">Load Cardinal\'s Rag\xF9 (bolognese) mobile</button> <button ng-click="$ctrl.openRatingPopup(7548 , 18, { layout : \'mobile-middle\'})">Load Cardinal\'s Rag\xF9 (bolognese) mobile-middle</button><hr><button ng-click="$ctrl.openRatingPopup(1744, 2, { layout : \'desktop\'})">Load Li\u010Dka janjetina desktop</button> <button ng-click="$ctrl.openRatingPopup(1744, 2, { layout: \'mobile\'})">Load Li\u010Dka janjetina mobile</button> <button ng-click="$ctrl.openRatingPopup(1744, 2, { layout : \'mobile-middle\'})">Load Li\u010Dka janjetina mobile-middle</button><hr><hr></div>');$templateCache.put('/content/scripts/app/components/card-game/ta-card-game.html','<section style="max-width:800px;margin:auto;padding:10px;"><h1>Card Game</h1><div><input style="width:100%" type="text" id="cg_search" ng-model="$ctrl.query" ng-keyup="$ctrl.searchItems($event)" placeholder="Po\u010Dni upisivati ime sastojka"><div ng-show="$ctrl.submitResult.length > 0"><p><span style="font-size:11px;">Tapni na odabrani sastojak za obrisati ga</span></p><br><div><span class="cg_span_result" ng-repeat="item in $ctrl.submitResult" ng-click="$ctrl.removeSelected(item.EntityId, item.EntityTypeEnum)">{{item.DisplayName}}</span></div><div style="margin-top:15px;"><button ng-click="$ctrl.submitSearch()" class="btn">Prona\u0111i jela s ovim sastojcima</button></div></div><hr><div class="cg_autocomplete_wrapper" ng-show="$ctrl.autoCompleteResult.length > 0"><h2 style="width:100%">Autocomplete wannabe</h2><div ng-repeat="item in $ctrl.autoCompleteResult" class="cg_autocomplete-cube" ng-click="$ctrl.selectItem(item.EntityId, item.EntityTypeEnum)">{{item.DisplayName}}<div style="text-align:center;" ng-if="item.PreviewImage && item.PreviewImage.Image"><img width="80" ng-src="https://cdn.tasteatlas.com{{item.PreviewImage.Image}}?mw=150"></div><p style="text-align:center;">{{item.EntityTypeEnumString}}</p></div></div><div class="cg_autocomplete_wrapper" ng-show="$ctrl.foodResult.length > 0"><h2 style="width:100%">Jela s odabranim sastojcima</h2><br><div ng-repeat="item in $ctrl.foodResult" class="cg_autocomplete-cube" ng-click="$ctrl.selectItem(item.EntityId, item.EntityTypeEnum)">{{item.DisplayName}}<div style="text-align:center;" ng-if="item.PreviewImage && item.PreviewImage.Image"><img width="80" ng-src="https://cdn.tasteatlas.com{{item.PreviewImage.Image}}?mw=150"></div><p style="text-align:center;">{{item.EntityTypeEnumString}}</p></div></div></div></section><style>\r\n\r\n    .cg_autocomplete_wrapper {\r\n        display: flex;\r\n        flex-flow: wrap;\r\n        \r\n    }\r\n    \r\n    .cg_autocomplete-cube {\r\n        flex-basis: 33%;\r\n        border: 1px solid black;\r\n        cursor:pointer;\r\n       \r\n    }\r\n\r\n    .cg_span_result {\r\n        margin-right: 10px;\r\n        margin-bottom: 5px;\r\n        border: 1px dotted blue;\r\n        padding: 2px;\r\n        display: inline-block;\r\n        cursor:pointer;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/certificates/ta-certificates-filter-desktop.html','<div class="certificates-filters-wrapper"><div class="certificates-top-filter"><div class="search-results__navigation-menu"><nav class="search-results__nav"><ul><li class="about-food__nav__item" ng-repeat="topFilterItem in $ctrl.topFilterItems" ng-click="$ctrl.changeTopFilter(topFilterItem.code)" ng-class="{ \'selected\' : $ctrl.selectedTopFilter === topFilterItem.code }">{{topFilterItem.name}}</li></ul></nav></div></div><div class="search-results__filter search-results__filter--certificate"><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-class="{\'search-results-wrapper--closed\' : !$ctrl.filtersExpanded}"><span class="search-results__round-filter" ng-class="{\'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === \'All\'}" ng-click="$ctrl.changeBottomFilter(\'All\')">All <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === \'All\'}">{{$ctrl.totalItemCounter}}</span></span><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.displayedMainFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-show="$ctrl.filtersExpanded"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.expandedFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span></div></div><div ng-if="$ctrl.foodGroups.length > 9" class="search-results__round-filter search-results__round-filter--circle" ng-click="$ctrl.toggleFoodTypeFilters()"><span class="icon-wrapper"><i ng-show="!$ctrl.filtersExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.filtersExpanded" class="icon icon--arrow--up-light-gray"></i></span></div></div></div><div class="certificates-result-list" id="certificates-list-wrapper"><div class="certificates-result-list__container"><div ng-repeat="filterItem in $ctrl.filterItemList track by $index" class="certificates-result-list__item" id="item-{{$index + 1}}"><div class="image-wrapper"><a ng-href="{{filterItem.UrlLink}}" target="_blank"><img ng-if="filterItem.Image" class="certificate-list-img" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{filterItem.Image}}?mw=390&h=230" alt="{{::filterItem.Name}}"></a></div><div class="details-wrapper"><div class="details-heading"><div class="details-heading__text"><a ng-if="filterItem.Group" ng-href="{{filterItem.GroupUrlLink}}" target="_blank"><span class="category">{{filterItem.Group}}</span></a> <a class="dish-name--link" ng-if="filterItem.Name" ng-href="{{filterItem.UrlLink}}" target="_blank"><h3 class="dish-name">{{filterItem.Name}}</h3></a><div class="category category-rating"><img ng-if="filterItem.Region.DisplayEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{filterItem.Region.DisplayEmblemImage}}?w=16&h=10"> <span ng-if="filterItem.Region.DisplayText"><a class="category-rating__link" href="{{filterItem.Region.DisplayUrlLink}}" target="_blank">{{filterItem.Region.DisplayText}}</a></span></div></div><div class="certificate-wrapper" ng-class="{\'certificate-wrapper__three-items\' : filterItem.Certificates.length == 3, \'certificate-wrapper__two-items\' : filterItem.Certificates.length == 2}"><div class="certificate-wrapper__logo" ng-class="{\'certificate-wrapper__logo--first\' : $index == 0, \'certificate-wrapper__logo--other\' : $index > 0, \'certificate-wrapper__logo--second\' : $index == 1, \'certificate-wrapper__logo--third\' : $index == 2}" ng-repeat="certificates in filterItem.Certificates track by $index"><a ng-if="$index == 0" ng-href="{{certificates.CertificateUrlLink}}" target="_blank"><img ng-if="certificates.CertificateImage" class="certificate-img certificate-img__main" ng-src="{{certificates.CertificateImage}}?mw=80" alt="certificate"></a></div></div></div><div class="details-main-txt" ng-bind-html="filterItem.Description | html"></div><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr dish-rating" entity-id="filterItem.EntityId" entity-type="filterItem.EntityType" rating-data-card="filterItem.Score.DividedScore" valid-score-count="filterItem.Score.ValidScoreCount" template="rate-redesign-v2"></ta2-rating-actions-ssr></div></div></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="$ctrl.loadingItems"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.loadingItems && $ctrl.filterItemList.length < $ctrl.selectedCategoryLength" class="certificates-load-more-wrapper"><button ng-click="$ctrl.loadMoreCertificatesItems()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">LOAD MORE</button></div></div>');$templateCache.put('/content/scripts/app/components/certificates/ta-certificates-filter-mobile.html','<div class="certificates-filters-wrapper"><div class="about-food__menu"><nav class="about-food__nav-fix"><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--scrollable"><li class="about-food__nav__item" ng-repeat="topFilterItem in $ctrl.topFilterItems" ng-click="$ctrl.changeTopFilter(topFilterItem.code)" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedTopFilter === topFilterItem.code }">{{::topFilterItem.name}}</li></ul></nav></div><div class="search-results__filter search-results__filter--certificate"><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-class="{\'search-results-wrapper--closed\' : !$ctrl.filtersExpanded}"><span class="search-results__round-filter" ng-class="{\'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === \'All\'}" ng-click="$ctrl.changeBottomFilter(\'All\')">All <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === \'All\'}">{{$ctrl.totalItemCounter}}</span></span><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.displayedMainFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-show="$ctrl.filtersExpanded"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.expandedFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span></div></div><div ng-if="$ctrl.foodGroups.length > 2" class="search-results__round-filter search-results__round-filter--circle" ng-click="$ctrl.toggleFoodTypeFilters()"><span class="icon-wrapper"><i ng-show="!$ctrl.filtersExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.filtersExpanded" class="icon icon--arrow--up-light-gray"></i></span></div></div></div><div class="certificates-result-list"><div class="certificates-result-list__container"><div ng-repeat="filterItem in $ctrl.filterItemList track by $index" class="certificates-result-list__item" id="item-{{$index + 1}}"><div class="image-wrapper"><a ng-href="{{filterItem.UrlLink}}" target="_blank"><img ng-if="filterItem.Image" class="dish-img" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{filterItem.Image}}?w=310&h=200" alt="{{::filterItem.Name}}"></a></div><div class="details-wrapper"><div class="details-heading"><div class="details-heading__text"><a ng-if="filterItem.Group" ng-href="{{filterItem.GroupUrlLink}}" target="_blank"><span class="category">{{filterItem.Group}}</span></a><div class="dish-name"><a class="dish-name--link" ng-if="filterItem.Name" ng-href="{{filterItem.UrlLink}}" target="_blank"><h3>{{filterItem.Name}}</h3></a><div class="certificate-wrapper" ng-class="{\'certificate-wrapper__three-items\' : filterItem.Certificates.length == 3, \'certificate-wrapper__two-items\' : filterItem.Certificates.length == 2}"><div class="certificate-wrapper__logo" ng-class="{\'certificate-wrapper__logo--first\' : $index == 0, \'certificate-wrapper__logo--other\' : $index > 0, \'certificate-wrapper__logo--second\' : $index == 1, \'certificate-wrapper__logo--third\' : $index == 2}" ng-repeat="certificates in filterItem.Certificates track by $index"><a ng-if="$index == 0" ng-href="{{certificates.CertificateUrlLink}}" target="_blank"><img ng-if="certificates.CertificateImage" class="certificate-img certificate-img__main" ng-src="{{certificates.CertificateImage}}?mw=36" alt="certificate"></a></div></div></div><div class="category category-rating"><img ng-if="filterItem.Region.DisplayEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{filterItem.Region.DisplayEmblemImage}}?w=14&h=9"> <span ng-if="filterItem.Region.DisplayText"><a class="category-rating__link" href="{{filterItem.Region.DisplayUrlLink}}" target="_blank">{{filterItem.Region.DisplayText}}</a></span></div></div></div><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr dish-rating" entity-id="filterItem.EntityId" entity-type="filterItem.EntityType" rating-data-card="filterItem.Score.DividedScore" valid-score-count="filterItem.Score.ValidScoreCount" template="rate-redesign-v2" is-mobile="true"></ta2-rating-actions-ssr></div></div></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="$ctrl.loadingItems"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.loadingItems && $ctrl.filterItemList.length < $ctrl.selectedCategoryLength" id="certificates-load-more-wrapper--mobile" class="certificates-load-more-wrapper" ng-class="{ \'certificates-load-more-wrapper--no-ads\' : $ctrl.lastGoogleAdsEnabled}"><button ng-click="$ctrl.loadMoreCertificatesItems()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">LOAD MORE</button></div></div>');$templateCache.put('/content/scripts/app/components/certificates/ta-certificates-search-desktop.html','<form class="circle-search-bar" id="searchForm"><div class="dropdown-wrapper" click-outside="$ctrl.closeSertificateDropdown()"><button class="selected-dropdown-item" ng-click="$ctrl.toggleDropdownOpen()">{{$ctrl.selectedDropdownItem.Name ? $ctrl.selectedDropdownItem.Name : \'All Certificates\'}}</button><ul id="certificate-dropdown" ng-show="$ctrl.isDropdownOpen"><li ng-repeat="item in $ctrl.certificatesDropdownItems" ng-click="$ctrl.getSelectedItem(item)" class="dropdown-item">{{item.Name}}</li></ul><i class="ta ta-arrow-slim"></i></div><div class="region-autocomplete-wrapper" click-outside="$ctrl.closeAutocompleteAutocomplete()"><input class="search-input" type="text" placeholder="Everywhere" ng-disabled="$ctrl.selectedDropdownItem == null" ng-change="$ctrl.searchRegionCertificates()" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.regionsQuery" autofocus> <i ng-if="$ctrl.regionsQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery()"></i><div class="autocomplete__list autocomplete__list--regions" ng-if="$ctrl.regionsAutocomplete.length > 0 && $ctrl.regionsQuery.length > 1"><div class="autocomplete__list--regions-item" ng-repeat="regionsItem in $ctrl.regionsAutocomplete track by $index" ng-click="$ctrl.getSelectedRegion(regionsItem.Name, regionsItem.UrlLink)"><div class="region-name" ng-bind-html="regionsItem.Name | accentSearchQuery: $ctrl.regionsQuery"></div></div></div></div><button type="submit" id="search-button" ng-click="$ctrl.goToSingleCertificatesPage($ctrl.selectedDropdownItem)"><i class="ta ta-magnifier magnifier"></i></button><p id="error-msg"></p></form>');$templateCache.put('/content/scripts/app/components/certificates/ta-certificates-search-mobile.html','<form class="search-bar-wrapper" id="searchForm"><div class="dropdown-wrapper" click-outside="$ctrl.closeSertificateDropdown()"><button class="selected-dropdown-item" ng-click="$ctrl.toggleDropdownOpen()">{{$ctrl.selectedDropdownItem.Name ? $ctrl.selectedDropdownItem.Name : \'All Certificates\'}}</button><ul id="certificate-dropdown" ng-show="$ctrl.isDropdownOpen"><li ng-repeat="item in $ctrl.certificatesDropdownItems" ng-click="$ctrl.getSelectedItem(item)" class="dropdown-item">{{item.Name}}</li></ul><i class="ta ta-arrow-slim"></i></div><div class="region-autocomplete-wrapper" click-outside="$ctrl.closeAutocompleteAutocomplete()"><input class="search-input" type="text" placeholder="Everywhere" ng-disabled="$ctrl.selectedDropdownItem == null" ng-change="$ctrl.searchRegionCertificates()" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.regionsQuery" autofocus> <i ng-if="$ctrl.regionsQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery()"></i><div class="autocomplete__list autocomplete__list--regions" ng-if="$ctrl.regionsAutocomplete.length > 0 && $ctrl.regionsQuery.length > 1"><div class="autocomplete__list--regions-item" ng-repeat="regionsItem in $ctrl.regionsAutocomplete track by $index" ng-click="$ctrl.getSelectedRegion(regionsItem.Name, regionsItem.UrlLink)"><div class="region-name" ng-bind-html="regionsItem.Name | accentSearchQuery: $ctrl.regionsQuery"></div></div></div></div><button id="search-button" type="submit" ng-click="$ctrl.goToSingleCertificatesPage($ctrl.selectedDropdownItem)">search</button><p id="error-msg"></p></form>');$templateCache.put('/content/scripts/app/components/critic-details/ta-critic-desktop.html','<section class="critic page" ng-class="{\'have-page__background\' : $ctrl.details.BackgroundImage, \'have-card__hero\' : $ctrl.details.PreviewImage || $ctrl.details.Images.length > 0}"><div ng-if="$ctrl.isLoaded"><div class="page__background-container"><div class="page__background" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.BackgroundImage}}?mw=2000\')"></div><div class="card card--alt"><div class="card__header"><img class="card__thumb" ng-if="$ctrl.details.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.Image}}?h=132&w=132" lazy-alt="{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}"><h1 class="h1 h1--center">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</h1><div class="card__bio">{{$ctrl.details.Description}}</div><div class="card__link" ng-if="$ctrl.details.Web"><a ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">{{$ctrl.details.Web}}</a></div></div></div></div></div><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count > 0" class="critic__recommendations-container"><div class="critic__recommendations"><div class="reviews"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}} recommendations</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="reviews__list"><div class="grid"><div class="grid-sizer"></div><div class="gutter-sizer"></div><div ng-repeat="review in $ctrl.reviews.Data" class="review grid-item"><div class="review__body"><div class="review__header"><div class="review__thumb"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::review.Image}}?height=66&width=66"></div><div class="review__author"><h3 class="h3 h3--large"><a ng-href="{{review.DishUrlLink}}">{{review.DishName}}</a> <span>at</span> <a ng-href="{{review.RestaurantUrlLink}}">{{review.RestaurantName}}</a></h3><span class="region">{{review.RegionName}}<span ng-if="review.CountryName">, {{review.CountryName}}</span></span></div></div><blockquote cite="{{review.SourceLink}}"><div class="review__content"><div read-more number-of-letters="500" read-more-txt="{{review.Content}}"></div></div></blockquote><div class="review__footer"><div class="handy handy--review"><ta-comment-like-mobile review="review"></ta-comment-like-mobile></div><div class="review__source"><div class="caption">source</div><a class="thumb" href="{{review.SourceLink}}" target="_blank" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::review.SourceImage}}?h=158&w=108\');"></a></div></div></div></div></div></div><div class="reviews__view-all"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count === 0">No reviews.</section><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop></section>');$templateCache.put('/content/scripts/app/components/critic-details/ta-critic-mobile.html','<div class="critic"><section ng-if="$ctrl.isLoaded"><div class="critic__header"><div class="thumb"><img ng-if="$ctrl.details.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.Image}}?mv=100"></div><h2 class="h2 h2--lowercase h2--center h2--bold h2--muli">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</h2><div class="description">{{$ctrl.details.Description}}</div><div class="web">{{$ctrl.details.Web}}</div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count > 0"><div class="critic__recommendationss"><div class="reviews"><div class="review__title"><h1 class="h1 h1--center">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}} recommendations</h1><i class="plate-lines plate-lines--center"></i></div><div class="reviews__list"><div ng-repeat="review in $ctrl.reviews.Data" class="review"><div class="review__dish-thumb" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::review.Image}}?h=213&w=335\');"></div><div class="left"><div class="review__header"><a ng-href="{{review.DishUrlLink}}"><h3 class="h3">{{review.DishName}}</h3></a> <a ng-href="{{review.RestaurantUrlLink}}"><h3 class="h3 h3--regular">at {{review.RestaurantName}}</h3></a><div class="review__location"><span>{{review.RegionName}}</span> <span ng-if="review.CountryName">, {{review.CountryName}}</span></div></div><blockquote cite="{{review.SourceLink}}"><div class="review__content" read-more number-of-letters="200" read-more-txt="{{review.Content}}"></div></blockquote></div><div class="right"><div class="review__source"><a href="{{review.SourceLink}}" class="thumb"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::review.SourceImage}}?h=158&w=108"></a><div class="caption">source</div></div></div><div class="review__footer"><div class="handy handy--review"><ta-comment-like-mobile review="review"></ta-comment-like-mobile></div></div></div></div><div class="reviews__view-more"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count === 0">No reviews.</section><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile></div>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-list.html','<section class="search-details js-show--full" id="search-details-main" ng-if="!$ctrl.isMapOpen"><div><div ng-if="$ctrl.current === \'Loading\'"></div><div ng-if="$ctrl.current === \'RegionRegular\' && $ctrl.isLoaded"><div ng-if="!$ctrl.viewAllWhereToEat"><div class="hero-container" ng-class="{ \'hero-container--noimage\' : !$ctrl.results.Image.Image }"><div class="hero-container__map" ng-if="$ctrl.results.Image && $ctrl.results.Image.Image != null"><div ng-if="$ctrl.imageData"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></div><div class="hero-container__region-image"><img class="hero-img" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.results.Image.Image}}?mw=1900" alt="{{::$ctrl.results.Name}}"></div></div><div class="hero-container__title" ng-class="{ \'hero-container__title--noimage\' : !$ctrl.results.Image.Image }"><h1 ng-if="$ctrl.results.Name" class="h1 h1--bold h1--center">{{$ctrl.results.Prefix ? $ctrl.results.Prefix + \' \' + $ctrl.results.Name : $ctrl.results.Name}}</h1><h2 ng-if="$ctrl.results.Country.Name" class="h2 h2--muli h2--bold h2--center"><a ng-href="{{$ctrl.results.Country.UrlLink}}" target="_blank">{{$ctrl.results.Country.Prefix ? $ctrl.results.Country.Prefix + \' \' + $ctrl.results.Country.Name : $ctrl.results.Country.Name}}</a></h2></div><div class="hero-container__button"><ta-home-map-button></ta-home-map-button></div></div><ta-home-region-regular-desktop-new results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-region-regular-desktop-new></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="desktop" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'DishCategory\'"><div ng-if="!$ctrl.viewAllWhereToEat"><div class="hero-container hero-container--noimage"><div class="hero-container__title hero-container__title--noimage"><h1 ng-if="$ctrl.results.Plural" class="h1 h1--bold h1--center">{{$ctrl.results.Plural}}</h1></div><div class="hero-container__button"><ta-home-map-button></ta-home-map-button></div></div><ta-home-dish-category-new template="desktop" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-dish-category-new></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="desktop" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'DishRegion\'"><div ng-if="!$ctrl.viewAllWhereToEat"><div class="hero-container" ng-class="{ \'hero-container--noimage\' : !$ctrl.results.Image.Image }"><div class="hero-container__map" ng-if="$ctrl.results.Image && $ctrl.results.Image.Image != null"><div ng-if="$ctrl.imageData"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></div><div class="hero-container__region-image"><img class="hero-img" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.results.Region.Image.Image}}?mw=1900" alt="{{::$ctrl.results.Region.Name}}"></div></div><div class="hero-container__title" ng-class="{ \'hero-container__title--noimage\' : !$ctrl.results.Image.Image }"><h1 ng-if="$ctrl.title" class="h1 h1--bold h1--center">{{$ctrl.title}}</h1></div><div class="hero-container__button"><ta-home-map-button></ta-home-map-button></div></div><ta-home-category-region template="desktop-dish" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-category-region></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="desktop" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'IngredientCategory\'"><div class="hero-container hero-container--noimage"><div class="hero-container__title hero-container__title--noimage"><h1 ng-if="$ctrl.results.Plural" class="h1 h1--bold h1--center">{{$ctrl.results.Plural}}</h1></div><div class="hero-container__button"><ta-home-map-button></ta-home-map-button></div></div><ta-home-ingredient-category-new template="desktop" results="$ctrl.results"></ta-home-ingredient-category-new></div><div ng-if="$ctrl.current === \'IngredientRegion\'"><div class="hero-container" ng-class="{ \'hero-container--noimage\' : !$ctrl.results.Image.Image }"><div class="hero-container__map" ng-if="$ctrl.results.Image && $ctrl.results.Image.Image != null"><div ng-if="$ctrl.imageData"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></div><div class="hero-container__region-image"><img class="hero-img" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.results.Region.Image.Image}}?mw=1900" alt="{{::$ctrl.results.Region.Name}}"></div></div><div class="hero-container__title" ng-class="{ \'hero-container__title--noimage\' : !$ctrl.results.Image.Image }"><h1 ng-if="$ctrl.title" class="h1 h1--bold h1--center">{{$ctrl.title}}</h1></div><div class="hero-container__button"><ta-home-map-button></ta-home-map-button></div></div><ta-home-category-region template="desktop-ingredient" results="$ctrl.results"></ta-home-category-region></div><div ng-if="$ctrl.current === \'Tags\'"><ta-home-tags template="desktop" results="$ctrl.results"></ta-home-tags></div></div></section><style>\r\n    .popular-dish.ng-move,\r\n    .popular-dish.ng-enter,\r\n    .popular-dish.ng-leave {\r\n        -webkit-transition: opacity ease-in-out 0.5s;\r\n        -moz-transition: opacity ease-in-out 0.5s;\r\n        -ms-transition: opacity ease-in-out 0.5s;\r\n        -o-transition: opacity ease-in-out 0.5s;\r\n        transition: opacity ease-in-out 0.5s;\r\n    }\r\n\r\n        .popular-dish.ng-leave.ng-leave-active,\r\n        .popular-dish.ng-move,\r\n        .popular-dish.ng-enter {\r\n            opacity: 0;\r\n        }\r\n\r\n            .popular-dish.ng-leave,\r\n            .popular-dish.ng-move.ng-move-active,\r\n            .popular-dish.ng-enter.ng-enter-active {\r\n                opacity: 1;\r\n            }\r\n</style>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-login-button.html','<div ng-if="$ctrl.isInAnonymousRole() && !$ctrl.isLoginProcess" ng-click="$ctrl.openLogin()" class="log-in"><span>Log in</span><i class="ta ta-clarity_user-line"></i></div><div ng-if="$ctrl.isSignedIn && !$ctrl.isLoginProcess" class="log-in log-in--logged" click-outside="$ctrl.toggleDropdown()"><div id="dropdown-btn" class="dropdown-btn" ng-click="$ctrl.toggleDropdown($event)"><span title="{{$ctrl.me.firstname}}">{{$ctrl.me.firstname}}</span><div class="author-profile-wrapper" ng-if="$ctrl.me.image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.me.image}}?mw=40&mh=40" class="author-profile-image"></div><div ng-if="!$ctrl.me.image" class="author-first-letter">{{$ctrl.userFirstLetter}}</div></div><div class="dropdown-box" ng-if="$ctrl.isDropdownOpen"><ul class="dropdown__list"><li class="dropdown__list-item"><a href="profile/{{$ctrl.me.urlLink}}">MY PROFILE</a></li><li class="dropdown__list-item dropdown__list-item--sign-out" ng-click="$ctrl.signOut()">LOG OUT</li></ul></div></div><div ng-show="$ctrl.isLoginProcess" class="modal login-process-modal"><div class="modal__canvas" ng-click="$ctrl.closeLogin(); $ctrl.closeModal()"></div><div class="modal__container modal__container--small"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeLogin(); $ctrl.closeModal()"></i></div><div class="modal__body"><div class="login-block" ng-show="$ctrl.isLoginView"><ta-social-login-desktop></ta-social-login-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-desktop></ta-regular-login-desktop><div class="login-help"><div ng-click="$ctrl.openRegister()" class="btn btn--red-border btn--red-border-alt">CREATE ACCOUNT</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div><div class="register-block" ng-show="$ctrl.isRegisterView"><ta-social-register-desktop></ta-social-register-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-register-desktop></ta-regular-register-desktop><div class="login-help"><div ng-click="$ctrl.closeRegister()" class="btn btn--red-border btn--red-border-alt">RETURN TO LOG IN</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div></div><div class="modal__footer"></div></div></div>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-login.html','<div class="desktop-popup-box login-box"><div class="social-btn"><form id="fb_login_form_home_login" action="account/ExternalLogin" method="post" style="padding:0;border:0;"><input type="hidden" name="provider" value="Facebook"> <input type="hidden" name="returnUrl" value="{{returnUrl}}"><div class="btn btn--blue-background" ng-click="submitFbLogin()"><i class="fa fa-facebook"></i> <span>Log in with Facebook</span></div></form><form id="fb_google_form_home_login" action="account/ExternalLogin" method="post" style="padding:0;border:0;"><input type="hidden" name="provider" value="Google"><div class="btn btn--gray-border" ng-click="submitGoogleLogin()"><i class="social-icons social-icons--google"></i> <span>Log in with Google</span></div></form></div><div class="or-box">OR</div><form action="account/LoginAjax" method="post"><input type="text" autocomplete="off" name="email" ng-model="$ctrl.email" placeholder="email address" value="{{$ctrl.email}}"><div ng-if="$ctrl.notValidEmail" class="email_validation">You can\'t leave this empty.</div><input type="password" autocomplete="off" name="password" ng-model="$ctrl.password" placeholder="Password"><div ng-if="$ctrl.notValidPassword" class="password_validation">You can\'t leave this empty.</div><div class="checkbox"><div class="left flex"><div class="checkbox__wrap"><input type="checkbox" ng-model="$ctrl.remember" id="remember_home_login"> <label for="remember_home_login"></label></div><span>Remember me</span></div><span class="right">Forgot password?</span></div><div class="btn btn--red-background" type="submit" ng-disabled="$ctrl.isSubmitting" ng-click="loginRegular()">{{ $ctrl.isSubmitting ? \'Logging in...\' : \'Login\' }}</div><div>{{$ctrl.errorMessage}}</div></form></div>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-main.html','<ta-home-desktop-map ng-show="$ctrl.isMapOpen" ng-if="$ctrl.isMapOpenedOnce" id="main-map-component"></ta-home-desktop-map><ta-home-desktop-list page="$ctrl.page" ng-if="$ctrl.page !== \'map\'"></ta-home-desktop-list>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-registration.html','<div class="desktop-popup-box registration-box"><div class="social-btn"><div class="btn btn--blue-background"><i class="fa fa-facebook"></i> <span>Log in with Facebook</span></div><div class="btn btn--gray-background"><i class="social-icons social-icons--google"></i> <span>Log in with Google</span></div></div><div class="or-box">OR</div><form autocomplete="off"><input type="text" autocomplete="off" name="email" ng-model="$ctrl.email" placeholder="email address" value="{{$ctrl.email}}"><div ng-if="$ctrl.notValidEmail" class="email_validation">You can\'t leave this empty.</div><input type="text" autocomplete="off" name="firstName" ng-model="$ctrl.firstName" placeholder="First name" value="{{$ctrl.name}}/"><div ng-if="$ctrl.notValidName" class="name_validation">You can\'t leave this empty.</div><input type="text" autocomplete="off" name="lastName" ng-model="$ctrl.lastName" placeholder="Last name"><div ng-if="$ctrl.notValidSurname" class="surname_validation">You can\'t leave this empty.</div><input type="password" autocomplete="new-password" name="password" ng-model="$ctrl.password" placeholder="Create a password"><div ng-if="$ctrl.notValidPassword" class="password_validation">You can\'t leave this empty.</div><div class="btn btn--red-background" ng-click="register()">{{ $ctrl.isSubmitting ? \'Sign in...\' : \'Sign up\' }}</div><div>{{$ctrl.errorMessage}}</div></form><div class="login-help">Already have an account? <span class="login-btn">Log in</span></div></div>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-search-button.html','<div class="icon icon--search-header"></div><span>{{placeholder}}</span>');$templateCache.put('/content/scripts/app/components/home-desktop/ta-home-desktop-search.html','<div id="global-search"><div class="input-container"><div class="input-wrap" ng-class="{ \'input-wrap--bordered\' : $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length }"><i class="icon icon--search-header"></i> <input type="text" autocomplete="off" name="restaurantname" placeholder="{{$ctrl.placeholder}}" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="[$ctrl.onInputEnter($event), $ctrl.onKeyDown($event)]" class="input input--big input--noborder" value="John"> <i ng-click="$ctrl.onInputDelete()" class="icon icon--close-cross icon--close-cross--black icon--close-cross--black--search"></i></div></div><div class="search-list"><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div ng-if="!$ctrl.isJohnSnow && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" style="padding:30px 0 0 30px" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);" class="suggestion-text">Did you mean <strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div ng-if="$ctrl.query.length > 1 && $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><svg ng-show="$ctrl.onlyRecipes" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewbox="-305 390.5 13 13" style="enable-background:new -305 390.5 13 13;" xml:space="preserve"><style type="text/css">\r\n                    .st0 {\r\n                        fill: #F5533D;\r\n                    }\r\n                </style><path class="st0" d="M-299.4,399l-2.3-2.3l0.7-0.7l1.7,1.7l3.6-3.6l0.7,0.7L-299.4,399z"></path></svg></div><p>search only recipes</p></div><div class="search-section" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index" ng-if="$ctrl.autocompleteItems.CustomItems.length"><div class="search-item search-item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.search-item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div><div class="search-section__title search-section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="search-section" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index" ng-if="$ctrl.autocompleteItems.Items.length"><div class="search-item search-item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.search-item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-loader.html','<div id="loader"><div class="bar"><div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-main.html','<ta-home-mobile-map ng-show="$ctrl.isMapOpen" ng-if="$ctrl.isMapOpenedOnce" id="main-map-component"></ta-home-mobile-map><ta-home-search-list page="$ctrl.page" ng-if="$ctrl.page !== \'map\'"></ta-home-search-list><style>\r\n    .turn-on-location {\r\n        text-align: center;\r\n        padding-bottom: 20px;\r\n        color: #828282;\r\n        font-weight: 400;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-search-list.html','<section class="search-details" ng-class="{ \'js-open\' : $ctrl.page !== \'map\' }" id="search_details"><div ng-hide="$ctrl.isSearchPage()"><ta-home-map-button></ta-home-map-button></div><div class="search-details__content" ng-if="!$ctrl.isMapOpen"><div ng-if="$ctrl.current === \'Loading\'"></div><div ng-if="$ctrl.current === \'RegionRegular\' && $ctrl.isLoaded"><div ng-if="!$ctrl.viewAllWhereToEat"><div class="hero-container" ng-if="$ctrl.results.Image && $ctrl.results.Image.Image != null"><div class="hero-container__map"><div ng-if="$ctrl.imageData"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></div><div class="hero-container__region-image"><img class="hero-img" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.results.Image.Image}}?mw=500" alt="{{::$ctrl.results.Name}}"></div></div><div class="hero-container__title"><h1 ng-if="$ctrl.results.Name" class="h1 h1--bold h1--center">{{$ctrl.results.Prefix ? $ctrl.results.Prefix + \' \' + $ctrl.results.Name : $ctrl.results.Name}}</h1><h2 ng-if="$ctrl.results.Country.Name" class="h2 h2--muli h2--bold h2--center">{{$ctrl.results.Country.Prefix ? $ctrl.results.Country.Prefix + \' \' + $ctrl.results.Country.Name : $ctrl.results.Country.Name}}</h2></div></div><ta-home-region-regular results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-region-regular></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="mobile" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'DishCategory\' && $ctrl.isLoaded"><div ng-if="!$ctrl.viewAllWhereToEat"><ta-home-dish-category-new template="mobile" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-dish-category-new></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="mobile" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'DishRegion\' && $ctrl.isLoaded"><div ng-if="!$ctrl.viewAllWhereToEat"><ta-home-category-region template="mobile-dish" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)"></ta-home-category-region></div><div ng-if="$ctrl.viewAllWhereToEat"><ta-home-view-all template="mobile" results="$ctrl.results" switch-view="$ctrl.switchView(switchTo)" page="$ctrl.page"></ta-home-view-all></div></div><div ng-if="$ctrl.current === \'IngredientCategory\' && $ctrl.isLoaded"><div ng-if="!$ctrl.viewAllWhereToEat"><ta-home-ingredient-category-new template="mobile" results="$ctrl.results"></ta-home-ingredient-category-new></div></div><div ng-if="$ctrl.current === \'IngredientRegion\' && $ctrl.isLoaded"><ta-home-category-region template="mobile-ingredient" results="$ctrl.results"></ta-home-category-region></div><div ng-if="$ctrl.current === \'Tags\' && $ctrl.isLoaded"><div class="search-detail search-detail--map" ng-click="$ctrl.onSearchDetailClick(); $ctrl.toggleDrawer();"><img class="search-detail__mapcover" src="/Content/layout/images/cover_map.jpg"><div class="results-toggler results-toggler--bot btn btn--white-background" id="results_toggler"><i class="icon icon--pin"></i> <span>Show Map</span></div></div><ta-home-tags template="mobile" results="$ctrl.results"></ta-home-tags></div></div></section><style>\r\n    .popular-dish.ng-move,\r\n    .popular-dish.ng-enter,\r\n    .popular-dish.ng-leave {\r\n        -webkit-transition: opacity ease-in-out 0.5s;\r\n        -moz-transition: opacity ease-in-out 0.5s;\r\n        -ms-transition: opacity ease-in-out 0.5s;\r\n        -o-transition: opacity ease-in-out 0.5s;\r\n        transition: opacity ease-in-out 0.5s;\r\n    }\r\n\r\n        .popular-dish.ng-leave.ng-leave-active,\r\n        .popular-dish.ng-move,\r\n        .popular-dish.ng-enter {\r\n            opacity: 0;\r\n        }\r\n\r\n            .popular-dish.ng-leave,\r\n            .popular-dish.ng-move.ng-move-active,\r\n            .popular-dish.ng-enter.ng-enter-active {\r\n                opacity: 1;\r\n            }\r\n\r\n    .map__toggler {\r\n        display: -webkit-box;\r\n        display: -moz-box;\r\n        display: box;\r\n        display: -webkit-flex;\r\n        display: -moz-flex;\r\n        display: -ms-flexbox;\r\n        display: flex;\r\n        -webkit-box-align: center;\r\n        -moz-box-align: center;\r\n        box-align: center;\r\n        -webkit-align-items: center;\r\n        -moz-align-items: center;\r\n        -ms-align-items: center;\r\n        -o-align-items: center;\r\n        align-items: center;\r\n        -ms-flex-align: center;\r\n        font-size: 11px;\r\n        line-height: normal;\r\n        font-weight: 700;\r\n        position: absolute;\r\n        left: 50%;\r\n        bottom: 20px;\r\n        transform: translateY(-50%) translateX(-50%);\r\n        width: auto;\r\n        text-align: center;\r\n        -webkit-border-radius: 25px;\r\n        border-radius: 25px;\r\n        -moz-border-radius: 25px;\r\n        -khtml-border-radius: 25px;\r\n        color: #828282;\r\n        box-shadow: 0 0 6px 0 rgba(134,134,134,.21);\r\n        cursor: pointer;\r\n        padding: 10px 18px;\r\n        text-transform: none;\r\n    }\r\n\r\n        .map__toggler > .icon {\r\n            width: 18px;\r\n            height: 18px;\r\n            background-size: 14px;\r\n            margin-right: 8px;\r\n        }\r\n</style>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-search-recipe-desktop.html','<div class="autocomplete autocomplete--large"><div class="autocomplete__container"><div class="autocomplete__input" ng-class="{ \'autocomplete__input--open\' : $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length }"><i ng-if="!$ctrl.showSearchResults" class="ta ta-magnifier"></i> <input type="text" autocomplete="off" placeholder="Search locations or food" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="$ctrl.onKeyDown($event)" class="input input--biggest input--noborder input--shadow-large"> <i class="ta ta-close-sharp" ng-click="$ctrl.onInputDelete()" ng-if="$ctrl.showSearchResults"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.showSearchResults"><div ng-if="$ctrl.query.length > 1" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><i ng-show="$ctrl.onlyRecipes" class="ta ta-recipe-search"></i></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom: none; overflow: hidden;"><div class="section__title">CURRENT LOCATION</div><a href="{{$ctrl.currentRegion.UrlLink}}" class="item" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-click="$ctrl.onCurrentRegionClick($ctrl.currentRegion)"><div class="left"><div class="emblem"><img ng-if="$ctrl.currentRegion.Emblem" ng-class="$ctrl.currentRegion.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.currentRegion.Emblem}}?mw=40"> <i ng-if="!$ctrl.currentRegion.Emblem" class="icon icon--location"></i></div></div><div class="right"><div class="place">{{$ctrl.currentRegion.Name}}</div><div class="address">{{$ctrl.currentRegion.ParentFullName}}</div></div></a><div class="item" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.turnOnLocation()"><div class="left"><div class="emblem"><i class="icon icon__location-circle--gray icon_location-service"></i></div></div><div class="right location-service-text">Turn on location services</div></div></div><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div class="not-found-state" ng-show="$ctrl.showNotFound && $ctrl.query.length > 1"><p>Not found.</p></div><div ng-if="!$ctrl.isJohnSnow && !$ctrl.showNotFound && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);" class="item">Did you mean &nbsp;<strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="section" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index" ng-if="$ctrl.autocompleteItems.CustomItems.length"><div class="item item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div><div class="section__title section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="section" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index" ng-if="$ctrl.autocompleteItems.Items.length"><div class="item item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-search-recipe-mobile -fullscreen.html','<div id="global-search"><div class="input-container"><button ng-click="$ctrl.onInputClose()" class="btn-back"><i class="ta ta-left-arrow"></i></button> <input type="text" autocomplete="off" name="restaurantname" placeholder="{{$ctrl.placeholder}}" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="$ctrl.onInputEnter($event)" class="input input--big input--expanded"> <button ng-click="$ctrl.onInputDelete()" ng-if="!$ctrl.toggle" class="btn-close js-hide" id="search-close-icon-mobile"><i class="ta ta-close-sharp-bold"></i></button></div><ta-hamburger-mobile style="display: none;"></ta-hamburger-mobile><div class="search-list"><div ng-if="$ctrl.query.length > 1" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><i ng-show="$ctrl.onlyRecipes" class="ta ta-recipe-search"></i></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom:none;"><div class="search-item search-item__nearme" ng-click="$ctrl.goToNearMe()" ng-if="$ctrl.geolocationState === \'GRANTED\'"><div class="search-item__thumb search-item__thumb--nearme"><i class="icon icon__location-circle--gray icon_location-service"></i></div><div class="search-item__desc__line search-item__desc__line--place">Authentic restaurants near me</div></div><div class="search-section__title">CURRENT LOCATION</div><div class="search-item search-item__current-location" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-repeat="region in $ctrl.nearbyRegions" ng-click="$ctrl.onCurrentRegionClick(region)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--mt5\' : region.Emblem }"><img ng-if="region.Emblem" ng-class="region.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Emblem}}?mw=40"> <i ng-if="!region.Emblem" class="icon ta ta-location"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place">{{region.Name}}</div><div class="search-item__desc__line search-item__desc__line--address">{{region.ParentFullName}}</div></div></div><div class="search-item search-item__start" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.handleGeolocationState()"><div class="search-item__thumb location-service"><i class="ta ta-location"></i></div><div class="search-item__desc__line search-item__desc__line--place">Turn on location services</div></div><div class="search-section__title" ng-if="$ctrl.recentSearches.length > 0">RECENT SEARCHES</div><div class="search-item" ng-repeat="recent in $ctrl.recentSearches track by $index" ng-click="$ctrl.onItemSelect(recent)"><div class="search-item__thumb"><img ng-if="recent.image" ng-class="recent.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recent.image}}?mw=40"><div ng-if="(recent.type === $ctrl.itemTypes.Region || recent.type === $ctrl.itemTypes.RegionPlace) && !recent.image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="recent.type === $ctrl.itemTypes.Restaurant && !recent.image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place" ng-if="recent.name">{{recent.name}}</div><div class="search-item__desc__line search-item__desc__line--address" ng-if="recent.label">{{recent.label}}</div><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="recent.type !== $ctrl.itemTypes.Restaurant" ng-show="recent.category">{{recent.category}}</div></div></div></div><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div class="not-found-state" ng-show="$ctrl.showNotFound && $ctrl.query.length > 1"><p>Not found.</p></div><div ng-if="!$ctrl.isJohnSnow && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" style="padding:30px 0 0 30px" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);">Did you mean <strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="search-section" ng-if="$ctrl.autocompleteItems.CustomItems.length" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image }"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc" ng-class="{ \'search-item__desc--primary\' : $index === 0 }"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div><div class="search-section__title search-section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="search-section" ng-if="$ctrl.autocompleteItems.Items.length" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image}"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-search-recipe-mobile.html','<div class="autocomplete autocomplete--large" ng-if="$ctrl.showSearchBar"><div class="autocomplete__container"><div class="autocomplete__input" ng-class="{ \'autocomplete__input--open\' : $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length }" ng-click="$ctrl.toggleFullScreenSearch()"><i ng-if="!$ctrl.showSearchResults" class="ta ta-magnifier"></i> <input type="text" class="input input--biggest input--noborder input--shadow-large" autocomplete="off" placeholder="Search locations or food" ng-trim="false" ng-model-options="{ debounce: 300 }"></div></div></div><div class="autocomplete-fullscreen-mobile" ng-show="!$ctrl.showSearchBar"><div class="input-container"><button ng-click="$ctrl.toggleFullScreenSearch()" class="btn-back"><i class="ta ta-left-arrow"></i></button> <input type="text" autocomplete="off" name="restaurantname" placeholder="{{$ctrl.placeholder}}" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="$ctrl.onInputEnter($event)" ng-focus="!$ctrl.showSearchBar" class="input input--big input--expanded" id="mobile-input-focused"> <button ng-click="$ctrl.onInputDelete()" ng-show="!$ctrl.showSearchBar && $ctrl.query.length > 1" class="btn-close" id="search-close-icon-mobile"><i class="ta ta-close-sharp-bold"></i></button></div><ta-hamburger-mobile style="display: none;"></ta-hamburger-mobile><div class="search-list"><div ng-if="$ctrl.query.length > 1" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><i ng-show="$ctrl.onlyRecipes" class="ta ta-recipe-search"></i></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom:none;"><div class="search-item search-item__nearme" ng-click="$ctrl.goToNearMe()" ng-if="$ctrl.geolocationState === \'GRANTED\'"><div class="search-item__thumb search-item__thumb--nearme"><i class="icon icon__location-circle--gray icon_location-service"></i></div><div class="search-item__desc__line search-item__desc__line--place">Authentic restaurants near me</div></div><div class="search-section__title">CURRENT LOCATION</div><div class="search-item search-item__current-location" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-repeat="region in $ctrl.nearbyRegions" ng-click="$ctrl.onCurrentRegionClick(region)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--mt5\' : region.Emblem }"><img ng-if="region.Emblem" ng-class="region.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Emblem}}?mw=40"> <i ng-if="!region.Emblem" class="icon ta ta-location"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place">{{region.Name}}</div><div class="search-item__desc__line search-item__desc__line--address">{{region.ParentFullName}}</div></div></div><div class="search-item search-item__start" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.handleGeolocationState()"><div class="search-item__thumb location-service"><i class="ta ta-location"></i></div><div class="search-item__desc__line search-item__desc__line--place">Turn on location services</div></div><div class="search-section__title" ng-if="$ctrl.recentSearches.length > 0">RECENT SEARCHES</div><div class="search-item" ng-repeat="recent in $ctrl.recentSearches track by $index" ng-click="$ctrl.onItemSelect(recent)"><div class="search-item__thumb"><img ng-if="recent.image" ng-class="recent.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recent.image}}?mw=40"><div ng-if="(recent.type === $ctrl.itemTypes.Region || recent.type === $ctrl.itemTypes.RegionPlace) && !recent.image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="recent.type === $ctrl.itemTypes.Restaurant && !recent.image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place" ng-if="recent.name">{{recent.name}}</div><div class="search-item__desc__line search-item__desc__line--address" ng-if="recent.label">{{recent.label}}</div><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="recent.type !== $ctrl.itemTypes.Restaurant" ng-show="recent.category">{{recent.category}}</div></div></div></div><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div class="not-found-state" ng-show="$ctrl.showNotFound && $ctrl.query.length > 1"><p>Not found.</p></div><div ng-if="!$ctrl.isJohnSnow && !$ctrl.showNotFound && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" style="padding:30px 0 0 30px" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);">Did you mean <strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="search-section" ng-if="$ctrl.autocompleteItems.CustomItems.length" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image }"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc" ng-class="{ \'search-item__desc--primary\' : $index === 0 }"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div><div class="search-section__title search-section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="search-section" ng-if="$ctrl.autocompleteItems.Items.length" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image}"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/ta-home-search.html','<div id="global-search"><div class="input-container"><button ng-click="$ctrl.onInputClose()" class="btn-back"><i class="ta ta-left-arrow"></i></button> <input type="text" autocomplete="off" name="restaurantname" placeholder="{{$ctrl.placeholder}}" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="$ctrl.onInputEnter($event)" class="input input--big input--expanded"> <button ng-click="$ctrl.onInputDelete()" ng-if="!$ctrl.toggle" class="btn-close js-hide" id="search-close-icon-mobile"><i class="ta ta-close-sharp-bold"></i></button></div><ta-hamburger-mobile style="display: none;"></ta-hamburger-mobile><div class="search-list"><div ng-if="$ctrl.query.length > 1" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><i ng-show="$ctrl.onlyRecipes" class="ta ta-recipe-search"></i></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom:none;"><div class="search-item search-item__nearme" ng-click="$ctrl.goToNearMe()" ng-if="$ctrl.geolocationState === \'GRANTED\'"><div class="search-item__thumb search-item__thumb--nearme"><i class="icon icon__location-circle--gray icon_location-service"></i></div><div class="search-item__desc__line search-item__desc__line--place">Authentic restaurants near me</div></div><div class="search-section__title">CURRENT LOCATION</div><div class="search-item search-item__current-location" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-repeat="region in $ctrl.nearbyRegions" ng-click="$ctrl.onCurrentRegionClick(region)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--mt5\' : region.Emblem }"><img ng-if="region.Emblem" ng-class="region.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Emblem}}?mw=40"> <i ng-if="!region.Emblem" class="icon ta ta-location"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place">{{region.Name}}</div><div class="search-item__desc__line search-item__desc__line--address">{{region.ParentFullName}}</div></div></div><div class="search-item search-item__start" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.handleGeolocationState()"><div class="search-item__thumb location-service"><i class="ta ta-location"></i></div><div class="search-item__desc__line search-item__desc__line--place">Turn on location services</div></div><div class="search-section__title" ng-if="$ctrl.recentSearches.length > 0">RECENT SEARCHES</div><div class="search-item" ng-repeat="recent in $ctrl.recentSearches track by $index" ng-click="$ctrl.onItemSelect(recent)"><div class="search-item__thumb"><img ng-if="recent.image" ng-class="recent.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recent.image}}?mw=40"><div ng-if="(recent.type === $ctrl.itemTypes.Region || recent.type === $ctrl.itemTypes.RegionPlace) && !recent.image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="recent.type === $ctrl.itemTypes.Restaurant && !recent.image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place" ng-if="recent.name">{{recent.name}}</div><div class="search-item__desc__line search-item__desc__line--address" ng-if="recent.label">{{recent.label}}</div><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="recent.type !== $ctrl.itemTypes.Restaurant" ng-show="recent.category">{{recent.category}}</div></div></div></div><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div class="not-found-state" ng-show="$ctrl.showNotFound && $ctrl.query.length > 1"><p>Not found.</p></div><div ng-if="!$ctrl.isJohnSnow && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" style="padding:30px 0 0 30px" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);">Did you mean <strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="search-section" ng-if="$ctrl.autocompleteItems.CustomItems.length" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image }"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc" ng-class="{ \'search-item__desc--primary\' : $index === 0 }"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div><div class="search-section__title search-section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="search-section" ng-if="$ctrl.autocompleteItems.Items.length" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && !$ctrl.isEmblem(item.EntityType) && !item.PreviewImage.Image, \'search-item__thumb--mt5\' : $ctrl.isEmblem(item.EntityType) || item.TypeOverride || item.PreviewImage.Image}"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"><div ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon-location-wrapper"><i class="ta ta-location"></i></div><i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/maps/ta-desktop-seo-map.html','<div id="main-map-container"><div id="main-map"><div id="popup"><div id="popup-content-map-id"><div id="popup-container-map-id"></div></div></div><div id="popup-opacity"></div><div id="region-list"><div id="region-list-content"></div></div><div id="region-list-map-pin"><div id="region-list-map-pin-content"></div></div></div></div><style>\r\n    #main-map-container .ol-zoom {\r\n        display: none;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/maps/ta-home-desktop-map.html','<div id="main-map-container" ng-click="onMapClick()"><div class="search-results-map-button search-results-map-button--opened" ng-if="$ctrl.viewListBtn"><button class="btn btn--center btn--round btn--lowercase btn--white-background" ng-click="$ctrl.viewList()"><i class="icon icon__grid icon__grid-regular icon__grid--deselected"></i> <span>View list</span></button></div><div id="main-map"><div id="popup"><div id="popup-content-map-id"><div id="popup-container-map-id"></div></div></div><div id="popup-opacity"></div><div id="region-list"><div id="region-list-content"></div></div><div id="region-list-map-pin"><div id="region-list-map-pin-content"></div></div></div><div class="map-copyright">&copy; <a href="http://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> Contributors, &copy; <a href="https://www.mapbox.com/" target="_blank">Mapbox</a>, Improve this map</div><div class="map-options"><div ng-if="$ctrl.isCheckMyLocationShown" ng-click="$ctrl.checkMyLocation()" class="check-my-location"><i class="icon icon__location-circle--gray"></i></div></div></div>');$templateCache.put('/content/scripts/app/components/maps/ta-home-mobile-map.html','<div id="main-map-container" class="main-map__container"><div class="search-results-map-button search-results-map-button--opened" ng-if="$ctrl.viewListBtn"><button class="btn btn--center btn--round btn--lowercase btn--white-background" ng-click="$ctrl.viewList()"><i class="icon icon__grid icon__grid-regular icon__grid--deselected"></i> <span>View list</span></button></div><div id="main-map" class="main-map"><div id="popup"><div id="popup-content-map-id"><div id="popup-container-map-id"></div></div></div><div id="popup-opacity"></div><div id="region-list"><div id="region-list-content"></div></div><div id="region-list-map-pin"><div id="region-list-map-pin-content"></div></div></div><div class="map-copyright">&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> &copy; <a href="https://www.mapbox.com/">Mapbox</a>, Improve this map</div><div class="map-options"><div ng-if="$ctrl.isCheckMyLocationShown" ng-click="$ctrl.checkMyLocation()" class="check-my-location"><i class="icon icon__location-circle--gray"></i></div></div></div>');$templateCache.put('/content/scripts/app/components/maps/ta-mini-map-region.html','<div id="{{::$ctrl.mapId}}" style="display:block; height: 100%; width: 100%;"></div>');$templateCache.put('/content/scripts/app/components/miscellaneous/ta-miscellaneous-desktop.html','<div class="static-nav-desktop-container"><div class="static-nav-desktop"><div class="static-nav-desktop__title"><h1>{{$ctrl.title}}</h1><i class="plate-lines plate-lines--center"></i></div><ul><li ng-class="{\'selected\' : $ctrl.activePage === $ctrl.about }" ng-click="$ctrl.changePage($ctrl.about)">About us</li><li ng-class="{\'selected\' : $ctrl.activePage === $ctrl.sitemap }" ng-click="$ctrl.changePage($ctrl.sitemap)">Site map</li><li ng-class="{\'selected\' : $ctrl.activePage === $ctrl.terms }" ng-click="$ctrl.changePage($ctrl.terms)">Terms & Conditions</li><li ng-class="{\'selected\' : $ctrl.activePage === $ctrl.privacy }" ng-click="$ctrl.changePage($ctrl.privacy)">Privacy</li></ul></div><div><ta-about-desktop ng-if="$ctrl.activePage === $ctrl.about" )"></ta-about-desktop><ta-site-map-desktop ng-if="$ctrl.activePage === $ctrl.sitemap"></ta-site-map-desktop><ta-terms-desktop ng-if="$ctrl.activePage === $ctrl.terms" on-change-page="$ctrl.changePage($event.page)"></ta-terms-desktop><ta-privacy-desktop ng-if="$ctrl.activePage === $ctrl.privacy"></ta-privacy-desktop></div></div>');$templateCache.put('/content/scripts/app/components/miscellaneous/ta-miscellaneous-mobile.html','<br><br><br><div class="static-pages-navbar"><h1></h1><ul><li ng-class="{\'selected\' : $ctrl.activePage ===\'about\'}" ng-click="$ctrl.changePage(\'about\')">About us</li><li ng-class="{\'selected\' : $ctrl.activePage ===\'sitemap\'}" ng-click="$ctrl.changePage(\'sitemap\')">Site map</li><li ng-class="{\'selected\' : $ctrl.activePage ===\'terms\'}" ng-click="$ctrl.changePage(\'terms\')">Terms & Conditions</li><li ng-class="{\'selected\' : $ctrl.activePage ===\'privacy\'}" ng-click="$ctrl.changePage(\'privacy\')">Privacy</li></ul></div><div><ta-about-mobile ng-if="$ctrl.activePage === \'about\'" )"></ta-about-mobile><ta-site-map ng-if="$ctrl.activePage === \'sitemap\'"></ta-site-map><ta-terms-mobile ng-if="$ctrl.activePage === \'terms\'" on-change-page="$ctrl.changePage($event.page)"></ta-terms-mobile><ta-privacy-mobile ng-if="$ctrl.activePage === \'privacy\'"></ta-privacy-mobile></div><style>\r\n    .selected {\r\n        color: red;\r\n        \r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/quiz/ta-quiz-wrapper.html','<div class="game-quiz" no-animate ng-class="{\'main-page\' : $ctrl.model.currentState == \'start\', \'quiz-start\' : $ctrl.model.currentState == \'question\', \'result\' : $ctrl.model.currentState == \'gamefinished\', \'result--anonymous\' : !$ctrl.data.results.lastGame && !$ctrl.data.results.total && $ctrl.model.currentState == \'gamefinished\', \'game-over\' : $ctrl.model.currentState == \'gameover\', \'game-quiz__loading\' : $ctrl.model.isLoading, \'quiz-start__answer\' : $ctrl.model.currentState == \'question\' && $ctrl.model.goToNextQuestion == true}"><ta-quiz-start-screen data="$ctrl.model" ng-if="$ctrl.model.currentState == \'start\'"></ta-quiz-start-screen><ta-quiz-question-screen data="$ctrl.model" ng-if="$ctrl.model.currentState == \'question\'"></ta-quiz-question-screen><ta-quiz-result-screen data="$ctrl.model" ng-if="$ctrl.model.currentState == \'gamefinished\'"></ta-quiz-result-screen></div>');$templateCache.put('/content/scripts/app/components/profile/ta-profile-map.html','<div class="profile__map" id="profile-map-container"><div id="profile-map" class="profile__map__map"></div><div class="map-copyright">&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> Contributors, &copy; <a href="https://www.mapbox.com/">Mapbox</a></div><button class="btn btn--white-background profile__map__toggle" ng-click="$ctrl.toggleMap()"><i class="icon icon--pin-blue"></i> <span ng-if="!$ctrl.isMapOpen">Show Map</span> <span ng-if="$ctrl.isMapOpen">Hide Map</span></button></div>');$templateCache.put('/content/scripts/app/components/recipes/ta-recipes-filter-desktop.html','<div class="recipes-filters-wrapper"><div ng-if="!$ctrl.isGroupType" class="recipes-top-filter"><div class="certificates-top-filter"><div class="search-results__navigation-menu"><nav class="search-results__nav"><ul><li class="about-food__nav__item" ng-repeat="topFilterItem in $ctrl.topFilterItems" ng-click="$ctrl.changeTopFilter(topFilterItem.code)" ng-class="{ \'selected\' : $ctrl.API_DATA.order === topFilterItem.code }">{{topFilterItem.name}}</li></ul></nav></div></div><div class="search-results__filter search-results__filter--certificate"><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-class="{\'search-results-wrapper--closed\' : !$ctrl.filtersExpanded}"><span class="search-results__round-filter" ng-class="{\'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === \'All\'}" ng-click="$ctrl.changeBottomFilter(\'All\')">All <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === \'All\'}">{{$ctrl.totalItemCounter}}</span></span><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.displayedMainFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-show="$ctrl.filtersExpanded"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.expandedFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span></div></div><div ng-if="$ctrl.foodGroups.length > 9" class="search-results__round-filter search-results__round-filter--circle" ng-click="$ctrl.toggleFoodTypeFilters()"><span class="icon-wrapper"><i ng-show="!$ctrl.filtersExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.filtersExpanded" class="icon icon--arrow--up-light-gray"></i></span></div></div></div><div class="recipes-bottom-filter"><div class="recipes-bottom-filter__heading-part"><p class="accordion-name">COOKING TIME</p><span class="accordion-toggle-icon" ng-click="$ctrl.toggleIngredientTimeAccordion()"><span ng-show="!$ctrl.ingredientTimeAccordionExpanded">Expand</span> <i ng-show="!$ctrl.ingredientTimeAccordionExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.ingredientTimeAccordionExpanded" class="icon icon--arrow--up-light-gray"></i></span></div><div class="recipes-bottom-filter--wrapper" ng-show="$ctrl.ingredientTimeAccordionExpanded"><div ng-repeat="item in $ctrl.ingredientFilterItemsList"><p>{{item.itemIndex}}</p></div><div class="recipes-bottom-filter__bottom-part"><div class="recipes-bottom-filter__bottom-part-left"><ta-range-slider range-slider-name="Max cooking time" unique-class="recipe-range-slider--left" max-steps="8" labels="$ctrl.RANGE_SLIDER_VALUES"></ta-range-slider></div><div class="recipes-bottom-filter__bottom-part-right"><ta-range-slider range-slider-name="Max total time" unique-class="recipe-range-slider--right" max-steps="8" labels="$ctrl.RANGE_SLIDER_VALUES"></ta-range-slider></div></div></div></div></div><div class="recipe-result-list" id="recipe-list-wrapper"><div ng-if="!$ctrl.loadingItems" class="recipe-result-list__container"><div class="recipe-result-list__item" ng-repeat="filterItem in $ctrl.filterItemList track by $index" id="item-{{$index + 1}}"><div class="image-wrapper"><a ng-href="{{filterItem.UrlLink}}/recipe" target="_blank"><img ng-if="filterItem.Image" class="certificate-list-img" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{filterItem.Image}}?mw=660" alt="{{::filterItem.Name}}"></a></div><div class="details-wrapper"><div class="details-wrapper__container"><div class="details-heading"><div class="details-heading__text"><a href="{{filterItem.UrlLink}}/recipe" target="_blank"><h3 class="recipe-name">{{filterItem.Name}}</h3></a><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr recipe-rating" entity-id="filterItem.EntityId" entity-type="filterItem.EntityType" rating-data-card="filterItem.Score.DividedScore" valid-score-count="filterItem.Score.ValidScoreCount" template="rate-redesign-v2"></ta2-rating-actions-ssr><div class="preparation-wrapper preparation-wrapper__main selected-variation-time"><div ng-if="filterItem.PrepTime" class="preparation-item preparation-item__main"><p>PREP <span>{{$ctrl.getRecipeTimeV2(filterItem.PrepTime)}}</span></p></div><div ng-if="filterItem.CookTime" class="preparation-item preparation-item__main"><p>COOK <span>{{$ctrl.getRecipeTimeV2(filterItem.CookTime)}}</span></p></div><div ng-if="filterItem.TotalTime" class="preparation-item preparation-item__main"><p>READY IN <span>{{$ctrl.getRecipeTimeV2(filterItem.TotalTime)}}</span></p></div></div></div></div><div class="details-main-txt" ng-bind-html="filterItem.Description | html"></div><div class="ingredient-items-wrapper"><div class="slider feed-slider swiper-container"><div class="ingredient-slider-wrapper"><div class="ingredient-item" ng-repeat="ing in filterItem.FoodIngredients"><a data-tag="authentic_recipe" ng-href="{{ing.UrlLink}}" target="_blank"><img ng-if="ing.Image" class="ingredient-img" ng-src="{{::$ctrl.constants.cdnHost}}/{{ing.Image}}?w=25"> <span>{{ing.Name}}</span></a></div></div></div></div></div><div class="recipe-details-slider" ng-if="filterItem.RecipeVariations.length > 1"><p class="items-count"><span class="semibold">variations</span></p><div class="recipe-details-slider__slider swiper-container"><div class="recipe-details-slider-wrapper swiper-wrapper"><div class="swiper-slide" ng-repeat="recipeVariation in filterItem.RecipeVariations" id="variation-item-{{$index + 1}}" ng-class="{\'variation-item--single\' : filterItem.RecipeVariations.length == 1}"><div class="recipe-details-slider--item"><div class="slider-img-wrapper"><a href="{{filterItem.UrlLink}}/recipe/{{recipeVariation.UrlLink}}" target="_blank"><img ng-if="recipeVariation.Image" class="slider-img" ng-src="{{::$ctrl.constants.cdnHost}}/{{recipeVariation.Image}}?w=150&h=75"></a></div><div class="slider-txt"><a href="{{filterItem.UrlLink}}/recipe/{{recipeVariation.UrlLink}}" target="_blank"><p class="slider-txt--heading">{{recipeVariation.Name}}</p></a><p ng-if="recipeVariation.TotalTime" class="slider-txt--ready-in">Ready in <span>{{$ctrl.getRecipeTimeV2(recipeVariation.TotalTime)}}</span></p><div ng-if="recipeVariation.Score.ValidScoreCount > 4" class="country-in-spotlight--rating recipe-variation-rating"><span class="rating-star" style="--rating: {{recipeVariation.Score.DividedScore}}"></span><p>{{recipeVariation.Score.DividedScore | number : 1}}</p></div></div></div></div></div></div><div class="recipe-item-variation-button-prev slider__scroll-circle slider__scroll-circle--left"><i class="icon icon__big-arrow icon__big-arrow-left--redesign"></i></div><div class="recipe-item-variation-button-next slider__scroll-circle slider__scroll-circle--right"><i class="icon icon__big-arrow icon__big-arrow-right--redesign"></i></div></div></div></div></div><div ng-if="$ctrl.filterItemList.length == 0" class="recipe-no-results">No results match your search criteria.</div><div ng-if="$ctrl.filterItemList.length < $ctrl.selectedCategoryLength"><div class="profile-list--loader wanna-try--loader__desktop" ng-if="$ctrl.loadingItems || $ctrl.isContentLoaded"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.loadingItems && !$ctrl.isContentLoaded && $ctrl.filterItemList.length > 0" class="recipes-load-more-wrapper"><button ng-click="$ctrl.loadMoreRecipesItems()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">LOAD MORE</button></div></div></div>');$templateCache.put('/content/scripts/app/components/recipes/ta-recipes-filter-mobile.html','<div class="recipes-filters-wrapper"><div ng-if="!$ctrl.isGroupType" class="recipes-top-filter"><div class="about-food__menu"><nav class="about-food__nav-fix"><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--scrollable"><li class="about-food__nav__item" ng-repeat="topFilterItem in $ctrl.topFilterItems" ng-click="$ctrl.changeTopFilter(topFilterItem.code)" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.API_DATA.order === topFilterItem.code }">{{::topFilterItem.name}}</li></ul></nav></div><div class="search-results__filter search-results__filter--certificate"><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-class="{\'search-results-wrapper--closed\' : !$ctrl.filtersExpanded}"><span class="search-results__round-filter" ng-class="{\'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === \'All\'}" ng-click="$ctrl.changeBottomFilter(\'All\')">All <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === \'All\'}">{{$ctrl.totalItemCounter}}</span></span><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.displayedMainFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span><div class="search-results__whattoeat-bottom-filter search-results-wrapper" ng-show="$ctrl.filtersExpanded"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-repeat="filter in $ctrl.expandedFoodTypeFilters track by $index" ng-click="$ctrl.changeBottomFilter(filter)">{{filter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedBottomFilter === filter.Name }" ng-if="filter.SuitableDishes !== undefined">{{filter.SuitableDishes}}</span></span></div></div><div ng-if="$ctrl.foodGroups.length > 2" class="search-results__round-filter search-results__round-filter--circle" ng-click="$ctrl.toggleFoodTypeFilters()"><span class="icon-wrapper"><i ng-show="!$ctrl.filtersExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.filtersExpanded" class="icon icon--arrow--up-light-gray"></i></span></div></div></div><div class="recipes-bottom-filter"><div class="recipes-bottom-filter__heading-part"><p class="accordion-name">COOKING TIME</p><span class="accordion-toggle-icon" ng-click="$ctrl.toggleIngredientTimeAccordion()"><span ng-show="!$ctrl.ingredientTimeAccordionExpanded">Expand</span> <i ng-show="!$ctrl.ingredientTimeAccordionExpanded" class="icon icon--arrow--down-light-gray"></i> <i ng-show="$ctrl.ingredientTimeAccordionExpanded" class="icon icon--arrow--up-light-gray"></i></span></div><div class="recipes-bottom-filter--wrapper" ng-show="$ctrl.ingredientTimeAccordionExpanded"><div class="recipes-bottom-filter__bottom-part"><div class="recipes-bottom-filter__bottom-part-left"><ta-range-slider range-slider-name="Max cooking time" unique-class="recipe-range-slider--left" max-steps="8" labels="$ctrl.RANGE_SLIDER_VALUES"></ta-range-slider></div><div class="recipes-bottom-filter__bottom-part-right"><ta-range-slider range-slider-name="Max total time" unique-class="recipe-range-slider--right" max-steps="8" labels="$ctrl.RANGE_SLIDER_VALUES"></ta-range-slider></div></div></div></div></div><div class="result-list" id="recipe-list-wrapper"><div ng-if="!$ctrl.loadingItems" class="result-list__container"><div class="result-list__item" ng-repeat="filterItem in $ctrl.filterItemList track by $index" id="item-{{$index + 1}}"><div class="image-wrapper"><a ng-href="{{filterItem.UrlLink}}/recipe" target="_blank"><img ng-if="filterItem.Image" class="dish-img" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{filterItem.Image}}?mw=660" alt="{{::filterItem.Name}}"></a></div><div class="details-wrapper"><div class="details-wrapper__container"><div class="details-heading"><div class="details-heading__text"><a href="{{filterItem.UrlLink}}/recipe" target="_blank"><h3 class="recipe-name">{{filterItem.Name}}</h3></a><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr recipe-rating" entity-id="filterItem.EntityId" entity-type="filterItem.EntityType" rating-data-card="filterItem.Score.DividedScore" valid-score-count="filterItem.Score.ValidScoreCount" is-mobile="true" template="rate-redesign-v2"></ta2-rating-actions-ssr><div class="preparation-wrapper preparation-wrapper__main selected-variation-time"><div ng-if="filterItem.CookTime" class="preparation-item preparation-item__main"><p>COOK <span>{{$ctrl.getRecipeTimeV2(filterItem.CookTime)}}</span></p></div><div ng-if="filterItem.TotalTime" class="preparation-item preparation-item__main"><p>READY IN <span>{{$ctrl.getRecipeTimeV2(filterItem.TotalTime)}}</span></p></div></div></div></div><div class="details-main-txt" ng-bind-html="filterItem.Description | html"></div><div class="ingredient-items-wrapper"><div class="mini-ingredients"><ul class="mini-ingredients__list"><li class="mini-ingredients__item" ng-repeat="foodIngredient in filterItem.FoodIngredients track by $index" ng-if="foodIngredient.Image && $index < 4"><a class="mini-ingredients__link" ng-href="{{::foodIngredient.UrlLink}}" title="{{::foodIngredient.Name}}" target="_blank"><div class="mini-ingredients__image-wrapper"><img class="mini-ingredients__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{foodIngredient.Image}}?h=120&w=120" lazy-alt="{{::foodIngredient.Name}}"></div><span ng-if="$ctrl.includeName" class="mini-ingredients__name">{{::foodIngredient.Name}}</span></a></li></ul></div></div></div></div></div></div></div><div ng-if="$ctrl.filterItemList.length == 0" class="recipe-no-results">No results match your search criteria.</div><div ng-if="$ctrl.filterItemList.length < $ctrl.selectedCategoryLength"><div class="profile-list--loader wanna-try--loader__desktop" ng-if="$ctrl.loadingItems || $ctrl.isContentLoaded"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.loadingItems && !$ctrl.isContentLoaded && $ctrl.filterItemList.length > 0" id="recipes-load-more-wrapper--mobile" class="recipes-load-more-wrapper" ng-class="{ \'recipe-load-more-wrapper--no-ads\' : $ctrl.lastGoogleAdsEnabled}"><button ng-click="$ctrl.loadMoreRecipesItems()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">LOAD MORE</button></div></div>');$templateCache.put('/content/scripts/app/components/recipes/ta-recipes-search-desktop.html','<div class="authentic-recipe-search" click-outside="$ctrl.closeRecipeseAutocomplete()"><form class="circle-search-bar" id="searchForm" action="/search" method="GET"><input class="search-input" type="text" placeholder="Search recipes" ng-change="$ctrl.searchRecipes()" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.recipeQuery" autofocus> <button id="search-button" type="button"><i ng-if="$ctrl.recipeQuery.length == 0" class="ta ta-magnifier magnifier"></i> <i ng-if="$ctrl.recipeQuery.length > 0" class="ta ta-close-sharp" ng-click="$ctrl.onDeleteAutocompleteQuery()"></i></button></form><div class="autocomplete__list autocomplete__list--recipes" ng-if="$ctrl.recipesAutocomplete.length > 0 && $ctrl.recipeQuery.length > 1"><div class="autocomplete__list--recipes-item" ng-repeat="recipeItem in $ctrl.recipesAutocomplete track by $index" ng-click="$ctrl.getSelectedRecipe(recipeItem.UrlLink)"><div class="recipe-name" ng-bind-html="recipeItem.Name | accentSearchQuery: $ctrl.recipeQuery"></div></div></div></div>');$templateCache.put('/content/scripts/app/components/recipes/ta-recipes-search-mobile.html','<div class="authentic-recipe-search" click-outside="$ctrl.closeRecipeseAutocomplete()"><form class="search-bar-wrapper" id="searchForm"><input class="search-input" type="text" placeholder="Search recipes" ng-change="$ctrl.searchRecipes()" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.recipeQuery" autofocus> <button id="search-button" type="button"><i ng-if="$ctrl.recipeQuery.length == 0" class="ta ta-magnifier magnifier"></i> <i ng-if="$ctrl.recipeQuery.length > 0" class="ta ta-close-sharp" ng-click="$ctrl.onDeleteAutocompleteQuery()"></i></button></form><div class="autocomplete__list autocomplete__list--recipes" ng-if="$ctrl.recipesAutocomplete.length > 0 && $ctrl.recipeQuery.length > 1"><div class="autocomplete__list--recipes-item" ng-repeat="recipeItem in $ctrl.recipesAutocomplete track by $index" ng-click="$ctrl.getSelectedRecipe(recipeItem.UrlLink)"><div class="recipe-name" ng-bind-html="recipeItem.Name | accentSearchQuery: $ctrl.recipeQuery"></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-dish-details/ta-restaurant-dish-desktop.html','<section class="restaurant restaurant--alt page" ng-class="{\'have-page__background\' : $ctrl.details.BackgroundImage, \'have-card__hero\' : $ctrl.details.PreviewImage || $ctrl.details.Images.length > 0}"><div ng-if="$ctrl.isLoaded"><div class="page__background-container"><div class="page__background" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.BackgroundImage}}?mw=2000\')"><div class="page__background-copyright"><a href="{{$ctrl.details.CoverImageAuthorUrl}}" target="_blank">{{$ctrl.details.CoverImageAuthor}}</a></div></div><div class="card card--alt"><div class="card__header"><div class="group">{{$ctrl.details.DishCategory}}</div><a ng-href="{{$ctrl.details.DishUrlLink}}"><h1 class="h1 h1--center">{{$ctrl.details.DishName}}</h1></a> <a ng-href="{{$ctrl.details.UrlLink}}"><h1 class="h1 h1--center h1--small"><span>at</span> {{$ctrl.details.Name}}</h1></a><h4 class="h4 h4--center"><span ng-if="$ctrl.details.DistrictName">{{$ctrl.details.DistrictName}},</span> {{$ctrl.details.RegionName}}<span ng-if="$ctrl.details.CountryName">, {{$ctrl.details.CountryName}}</span></h4><i class="plate-lines plate-lines--center plate-lines--big"></i><div class="recommended" ng-bind-html="$ctrl.parseCriticsInfo($ctrl.details) | html"></div></div><div class="card__hero" ng-if="$ctrl.details.PreviewImage || $ctrl.details.Images.length > 0"><ta-image-gallery-desktop preview="$ctrl.details.PreviewImage" photos="$ctrl.details.Images"></ta-image-gallery-desktop></div><div class="card__hero card__hero--none" ng-if="!$ctrl.details.PreviewImage || $ctrl.details.Images.length === 0"></div><div class="card__main"><div class="card__text"><span>{{$ctrl.details.Address}}</span> <span>{{$ctrl.details.PhoneNumber}}</span></div><div class="card__links"><a target="_blank" ng-href="{{$ctrl.details.Web}}"><i class="icon icon--home"></i> <span>Visit website</span></a> <a ng-click="$ctrl.redirectToGoogleMaps($ctrl.details.Longitude, $ctrl.details.Latitude)"><i class="icon icon--direction"></i> <span>Directions</span></a></div><ta-restaurant-error-desktop id="$ctrl.details.Id" entity-type="$ctrl.details.EntityType"></ta-restaurant-error-desktop></div></div></div></div></section><div class="section-divider"><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count > 0" class="restaurant__recommendations-container"><div class="restaurant__recommendations"><div class="reviews"><h1 class="h1 h1--medium h1--center">Recommendations</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><ta-review-desktop-list reviews="$ctrl.reviews"></ta-review-desktop-list><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></div></section><section ng-if="$ctrl.isLoaded && ($ctrl.comments.Count > 0 || $ctrl.comment)" class="restaurant__comments-container"><div class="restaurant__comments"><div class="opinions"><h1 class="h1 h1--medium h1--center">User comments</h1><i class="plate-lines plate-lines-big plate-lines--center"></i><ta-opinion-list-desktop opinions="$ctrl.comments" opinion="$ctrl.comment"></ta-opinion-list-desktop><ta-view-more-button items="$ctrl.comments" button-class="\'btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.commentsLoading" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></section><section><div class="miss-text miss-text--nobgcolor"><h2 class="h2 h2--large h2--lowercase h2--bold h2--center">Have you eaten {{$ctrl.details.DishName}} at {{$ctrl.details.Name}} recently?</h2><button class="btn btn--red-background btn--center" ng-click="$ctrl.tellUsWhere()">HOW DID YOU LIKE IT?</button></div><div ng-if="$ctrl.isTellUs" class="comment comment--vote"><ta-restaurant-and-dish-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.tellUsWhere()"></ta-restaurant-and-dish-comment-desktop></div></section><section class="explore-more__container" ng-if="$ctrl.isLoaded && $ctrl.restaurants.Count > 0"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishName}} is also served at these restaurants</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="explore-more explore-more--3cols"><div class="explore-more__list"><div class="item" ng-repeat="restaurant in $ctrl.restaurants.Data track by $index"><div class="item__body"><a ng-href="{{restaurant.UrlLink}}"><div class="item__thumb" style="background-image: url(\'{{restaurant.Image}}?h=160&w=280\');"></div><div class="item__main"><h3 class="h3 h3--large">{{restaurant.Name}}</h3><div class="item-location"><i class="icon icon--pin"></i><div>{{restaurant.CountryName ? restaurant.RegionName + \', \' + restaurant.CountryName : restaurant.RegionName}}</div></div></div></a></div></div><div class="grid-filler"></div></div><ta-view-more-button items="$ctrl.restaurants" button-class="\'btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.restaurantsLoading" on-view-more="$ctrl.loadMoreRestaurants()"></ta-view-more-button></div></section><section class="explore-more__container" ng-if="$ctrl.isLoaded && $ctrl.dishes.Count > 0"><h1 class="h1 h1--medium h1--center">More from {{$ctrl.details.Name}}</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="explore-more explore-more--3cols"><div class="explore-more__list"><div class="item" ng-repeat="dish in $ctrl.dishes.Data track by $index"><div class="item__body"><a ng-href="{{dish.UrlLink}}"><div class="item__thumb" style="background-image: url(\'{{dish.Image}}?h=160&w=280\');"></div><div class="item__main"><h3 class="h3 h3--large" ng-if="!dish.Certificate">{{dish.Name}}</h3><div class="certificate__container certificate__container--single" ng-if="dish.Certificate"><h3 class="h3 h3--large"><span class="certificate certificate--single"><i class="certificate__item certificate__item--h3-large" style="background-image:url(\'{{item.CertificateImage}}?mw=20\');"></i></span> <span>{{dish.Name}}</span></h3></div></div></a></div></div><div class="grid-filler"></div></div><ta-view-more-button items="$ctrl.dishes" button-class="\'btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.dishesLoading" on-view-more="$ctrl.loadMoreDishes()"></ta-view-more-button></div></section></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/restaurant-dish-details/ta-restaurant-dish-mobile.html','<section ng-if="$ctrl.isLoaded"><div class="restaurant-detail"><ta-image-gallery-mobile preview="$ctrl.details.PreviewImage" photos="$ctrl.details.Images"></ta-image-gallery-mobile><div class="restaurant-detail__header"><span class="restaurant-detail__type">{{$ctrl.details.DishCategory}}</span> <a ng-href="{{$ctrl.details.DishUrlLink}}"><h1 class="h1 h1--center">{{$ctrl.details.DishName}}</h1></a> <a ng-href="{{$ctrl.details.UrlLink}}"><h1 class="h1 h1--small h1--center"><span>at</span> {{$ctrl.details.Name}}</h1></a> <a ng-href="{{$ctrl.details.UrlLink}}"></a><h4 class="h4 h4--center h4--regular">{{::$ctrl.getRegionLabel()}}</h4><i class="plate-lines plate-lines--center"></i></div><div class="restaurant-detail__recommended" ng-if="$ctrl.details.Critic" ng-bind-html="$ctrl.parseCriticsInfo($ctrl.details) | html"></div><div class="restaurant-detail__location"><div class="left"><a ng-click="$ctrl.redirectToGoogleMaps($ctrl.details.Longitude, $ctrl.details.Latitude)"><i class="icon icon--direction"></i><div class="adress">{{$ctrl.details.Address}}</div><div class="distance" ng-if="$ctrl.details.Distance"><span>{{$ctrl.getDistance($ctrl.details)}}</span> away</div></a></div><div class="right"><a ng-href="tel: {{$ctrl.details.PhoneNumber}}"><i class="icon icon--phone"></i></a> <a target="_blank" ng-href="{{$ctrl.details.Web}}"><i class="icon icon--home"></i></a></div></div></div></section><section class="reviews" ng-if="$ctrl.isLoaded && $ctrl.reviews.Count > 0"><h1 class="h2 h2--center">Recommendations</h1><ta-review-list reviews="$ctrl.reviews"></ta-review-list><div class="reviews__view-more"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></section><section ng-if="$ctrl.isLoaded && ($ctrl.comments.Count > 0 || $ctrl.comment)"><h1 class="h1 h1--small h1--center">User comments</h1><i class="plate-lines plate-lines--center"></i><div class="opinions"><ta-opinion-list-mobile opinions="$ctrl.comments" opinion="$ctrl.comment"></ta-opinion-list-mobile><div class="reviews__view-more"><ta-view-more-button items="$ctrl.comments" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.commentsLoading" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></section><section class="restaurant-detail__tell-us" ng-if="!$ctrl.comment && $ctrl.isLoaded"><div ng-if="!$ctrl.isTellUs"><div class="miss-text">Have you eaten {{$ctrl.details.DishName}} at {{$ctrl.details.Name}} recently? <button class="btn btn--center btn--red-border" ng-click="$ctrl.tellUsWhere()">TELL US</button></div></div><div ng-if="$ctrl.isTellUs && !$ctrl.isAnonymous" class="comment comment--vote"><ta-restaurant-and-dish-comment-mobile details="$ctrl.details"></ta-restaurant-and-dish-comment-mobile></div><div ng-if="$ctrl.isTellUs && $ctrl.isAnonymous" class="comment comment--login"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder">OTHER LOG IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.restaurants.Count > 0" class="explore-more explore-more--extended"><h2 class="h2 h2--center">{{$ctrl.details.DishName}} is also served at these restaurants</h2><div class="explore-more__container" ta-horizontal-load-more handler="$ctrl.loadMoreRestaurants()"><div ng-repeat="restaurant in $ctrl.restaurants.Data track by $index" class="explore-more__item"><a href="{{restaurant.UrlLink}}"><div class="explore-more__thumb"><img ta-lazy-load lazy-source="{{restaurant.Image}}?h=100&w=100"><div class="explore-more__thumb-overlay"></div><div class="explore-more__name">{{restaurant.Name}}</div></div><div class="group">{{restaurant.RegionName}}<span ng-if="restaurant.CountryName">, {{restaurant.CountryName}}</span></div></a></div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.dishes.Count > 0" class="explore-more"><h2 class="h2 h2--center">More from {{$ctrl.details.Name}}</h2><div class="explore-more__container" ta-horizontal-load-more handler="$ctrl.loadMoreDishes()"><div ng-repeat="dish in $ctrl.dishes.Data track by $index" class="explore-more__item"><a href="{{dish.UrlLink}}"><div class="explore-more__thumb"><img ta-lazy-load lazy-source="{{dish.Image}}?h=100&w=100"><div class="explore-more__thumb-overlay"></div><div class="explore-more__name"><p ng-if="!dish.Certificate">{{dish.Name}}</p><div class="certificate__container certificate__container--single" ng-if="dish.Certificate"><p><span class="certificate certificate--single"><i class="certificate__item certificate__item--p" style="background-image: url(\'{{dish.Certificate.Image}}?mw=50\');"></i></span> <span>{{dish.Name}}</span></p></div></div></div></a></div></div></section><div class="promotion"><div ta-google-ad id="TA_MR_RESTAURANT_DISH" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/shared/map-image-component.html','<img class="icon icon--country" style="width:{{width}}px;height:{{height}}px" ta-lazy-load lazy-source="{{$ctrl.image}}">');$templateCache.put('/content/scripts/app/components/shared/star-rating-preview-component.html','<div ng-if="!isSelectable" class="star-icon-list"><span ng-repeat="i in [1,2,3,4,5,6,7,8,9,10]"><i ng-class="{\'star-icon star-icon--white\' : $ctrl.rating < i, \'star-icon star-icon--red\' : $ctrl.rating >= i}"></i></span></div><div ng-if="isSelectable" class="star-icon-list"><span ng-repeat="i in [1,2,3,4,5,6,7,8,9,10]" ng-click="$ctrl.selectStar(i)"><i ng-class="{\'star-icon star-icon--white\' : $ctrl.rating < i, \'star-icon star-icon--red\' : $ctrl.rating >= i}"></i></span></div>');$templateCache.put('/content/scripts/app/components/shared/ta-comment-like-mobile.html','<div class="handy__label" ng-if="!$ctrl.hideLabel">Useful recommendation?</div><div class="handy__review"><div class="handy__like"><div ng-if="$ctrl.review.CountHelpful === 0" ng-click="$ctrl.like($ctrl.review.CommentId)"><i class="icon icon--handy icon--handy-like"></i> <span>{{$ctrl.review.CountHelpful}}</span></div><div ng-if="$ctrl.review.CountHelpful > 0" ng-click="$ctrl.like($ctrl.review.CommentId)"><i ng-class="{\'icon icon--handy icon--handy-like\' : !$ctrl.IVote($ctrl.review.Likes), \'icon icon--handy icon--handy-liked\': $ctrl.IVote($ctrl.review.Likes)}"></i> <span>{{$ctrl.review.CountHelpful}}</span></div></div><div class="handy__dislike"><div ng-if="$ctrl.review.CountNotHelpful === 0" ng-click="$ctrl.dislike($ctrl.review.CommentId)"><i class="icon icon--handy icon--handy-dislike"></i> <span>{{$ctrl.review.CountNotHelpful}}</span></div><div ng-if="$ctrl.review.CountNotHelpful > 0" ng-click="$ctrl.dislike($ctrl.review.CommentId)"><i ng-class="{\'icon icon--handy icon--handy-dislike\' : !$ctrl.IVote($ctrl.review.Dislikes), \'icon icon--handy icon--handy-disliked\': $ctrl.IVote($ctrl.review.Dislikes)}"></i> <span>{{$ctrl.review.CountNotHelpful}}</span></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/ta-item-location-desktop.html','<div class="right__row"><div class="region"><a href="{{$ctrl.region.RegionUrl}}"><span>{{$ctrl.region.RegionName}}</span></a> <a ng-if="$ctrl.region.CountryName != $ctrl.region.RegionName" href="{{$ctrl.region.CountryUrl}}"><span>{{$ctrl.region.CountryName}}</span></a></div><div class="emblem" ng-if="$ctrl.region.RegionEmblem"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.region.RegionEmblem}}"></div></div><div class="right__row" ng-if="$ctrl.image"><div class="map"><ta-map-image image-filter="$ctrl.image"></ta-map-image></div></div>');$templateCache.put('/content/scripts/app/components/shared/ta-rating-control.html','<div><div class="rating-control rating-control--chip rating-control--rated" ng-class="{ \'rating-control--outline\' : $ctrl.gray, \'rating-control--shadow\' : !$ctrl.gray }" ng-click="$ctrl.openRating(item)" ng-if="$ctrl.isRated(item)"><span class="rating-control__text" ng-if="$ctrl.getUserRating()">{{$ctrl.getUserRating() | number:1}}</span> <i class="icon icon__rate-checked"></i></div><div class="rating-control" ng-class="{\'rating-control--extra-opacity\' : $ctrl.gray, \'rating-control--background\' : !$ctrl.gray }" ng-click="$ctrl.openRating(item)" ng-if="!$ctrl.isRated(item) && !$ctrl.label"><i class="icon icon__rate-check" ng-class="{ \'icon__rate-check--gray\' : $ctrl.gray }"></i></div><div class="rating-control rating-control--chip rating-control--border" ng-class="{ \'rating-control--background rating-control--label\' : !$ctrl.gray, \'rating-control--border-gray\' : $ctrl.gray }" ng-click="$ctrl.openRating(item)" ng-if="!$ctrl.isRated(item) && $ctrl.label"><span class="rating-control__label" ng-class="{ \'rating-control__label--dark\' : $ctrl.gray }">{{::$ctrl.label}}</span> <i class="icon icon__rate-check icon__rate-check--solo" ng-class="{ \'icon__rate-check--solo-gray\' : $ctrl.gray }"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/ta-star-score-lg.html','<i ng-repeat="i in $ctrl.starRange" ng-class="$ctrl.checkRating(i)" aria-hidden="true"></i>');$templateCache.put('/content/scripts/app/components/shared/ta-star-score-mobile.html','<i ng-repeat="i in $ctrl.starRange" ng-class="$ctrl.checkRating(i)" aria-hidden="true"></i>');$templateCache.put('/content/scripts/app/components/shared/ta-star-vote-desktop.html','<div class="comment__message">{{$ctrl.viewText}}</div><div class="comment__stars comment__stars--big"><div class="ratingControl" ng-mouseleave="$ctrl.onMouseLeaveRating()"><input type="radio" id="rating-5" name="rating" value="10"> <label class="ratingControl-stars ratingControl-stars--5" for="rating-5" ng-mouseleave="$ctrl.mouseLeave(9)" ng-mouseenter="$ctrl.mouseEnter(9)" ng-click="$ctrl.vote(9)"></label><input type="radio" id="rating-45" name="rating" value="9"> <label class="ratingControl-stars ratingControl-stars--45 ratingControl-stars--half" for="rating-45" ng-mouseleave="$ctrl.mouseLeave(8)" ng-mouseenter="$ctrl.mouseEnter(8)" ng-click="$ctrl.vote(8)"></label><input type="radio" id="rating-4" name="rating" value="8"> <label class="ratingControl-stars ratingControl-stars--4" for="rating-4" ng-mouseleave="$ctrl.mouseLeave(7)" ng-mouseenter="$ctrl.mouseEnter(7)" ng-click="$ctrl.vote(7)"></label><input type="radio" id="rating-35" name="rating" value="7"> <label class="ratingControl-stars ratingControl-stars--35 ratingControl-stars--half" for="rating-35" ng-mouseleave="$ctrl.mouseLeave(6)" ng-mouseenter="$ctrl.mouseEnter(6)" ng-click="$ctrl.vote(6)"></label><input type="radio" id="rating-3" name="rating" value="6"> <label class="ratingControl-stars ratingControl-stars--3" for="rating-3" ng-mouseleave="$ctrl.mouseLeave(5)" ng-mouseenter="$ctrl.mouseEnter(5)" ng-click="$ctrl.vote(5)"></label><input type="radio" id="rating-25" name="rating" value="5"> <label class="ratingControl-stars ratingControl-stars--25 ratingControl-stars--half" for="rating-25" ng-mouseleave="$ctrl.mouseLeave(4)" ng-mouseenter="$ctrl.mouseEnter(4)" ng-click="$ctrl.vote(4)"></label><input type="radio" id="rating-2" name="rating" value="4"> <label class="ratingControl-stars ratingControl-stars--2" for="rating-2" ng-mouseleave="$ctrl.mouseLeave(3)" ng-mouseenter="$ctrl.mouseEnter(3)" ng-click="$ctrl.vote(3)"></label><input type="radio" id="rating-15" name="rating" value="3"> <label class="ratingControl-stars ratingControl-stars--15 ratingControl-stars--half" for="rating-15" ng-mouseleave="$ctrl.mouseLeave(2)" ng-mouseenter="$ctrl.mouseEnter(2)" ng-click="$ctrl.vote(2)"></label><input type="radio" id="rating-1" name="rating" value="2"> <label class="ratingControl-stars ratingControl-stars--1" ng-show="!$ctrl.aboutToDelete()" for="rating-1" ng-mouseleave="$ctrl.mouseLeave(1)" ng-mouseenter="$ctrl.mouseEnter(1)" ng-click="$ctrl.vote(1)"></label><input type="radio" id="rating-05" name="rating" value="1"> <label class="ratingControl-stars ratingControl-stars--05 ratingControl-stars--half" ng-show="!$ctrl.aboutToDelete()" for="rating-05" ng-mouseleave="$ctrl.mouseLeave(0)" ng-mouseenter="$ctrl.mouseEnter(0)" ng-click="$ctrl.vote(0)"></label> <label class="ratingControl-delete" ng-show="$ctrl.aboutToDelete()" for="rating-1" ng-mouseleave="$ctrl.mouseLeave(0)" ng-mouseenter="$ctrl.mouseEnter(0)" ng-click="$ctrl.vote(1)"></label></div></div>');$templateCache.put('/content/scripts/app/components/shared/ta-star-vote-mobile.html','<div class="comment__stars-desc">{{$ctrl.viewText}}</div><div class="comment__stars comment__stars--big"><span ng-repeat="i in $ctrl.starRange"><i class="icon icon--close-cross--red" ng-click="$ctrl.vote(2)" ng-show="$ctrl.aboutToDelete($index)"></i> <i ng-hide="$ctrl.aboutToDelete($index)" ng-click="$ctrl.vote(i)" ng-class="$ctrl.starInfo[$index].currentClass" aria-hidden="true"></i></span></div><div class="comment__validate comment__validate--center">{{$ctrl.halfStarText}}</div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-entity-comment_desktop.html','<div ng-if="$ctrl.data.renderOptions.shouldDisplay" class="modal"><div class="modal__container" click-outside="$ctrl.closePopup()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closePopup()"></i></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.data.model.Entity.Name}}</h2><div class="comment__info-not-rated"><ta2-stars layout="desktop" current-score="$ctrl.data.model.UserComment.Score" on-star-score-selected="$ctrl.starScoreSelected(selectedScore)"></ta2-stars></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-model="$ctrl.data.model.UserComment.CommentText" placeholder="OPTIONAL COMMENT">{{$ctrl.data.model.UserComment.CommentText}}\r\n                    </textarea><ta2-photo existing-photos="$ctrl.data.model.UserComment.Images" added-photos="$ctrl.data.model.UserComment.AddedImages"></ta2-photo></div><div ng-if="$ctrl.data.model.UserComment.Images.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div></div><div class="modal__footer" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><div ng-if="$ctrl.data.renderOptions.canSubmit()" ng-click="$ctrl.submitComment()" class="btn btn--red-background btn--right"><span ng-show="!$ctrl.data.renderOptions.saveInProgress">{{$ctrl.data.model.UserComment && $ctrl.data.model.UserComment.Score === 1 ? \'Cancel rating\' : \'Submit\'}}</span> <i ng-show="$ctrl.data.renderOptions.saveInProgress" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.data.renderOptions.canSubmit()" class="btn btn--disabled-background btn--right"><span>Submit</span></div></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayThankYouBox"><div class="comment__thanks-box"><div class="comment comment--thanks"><i class="icon icon--check-success"></i><h2 class="h2 h2--bold h2--lowercase h2--center h2--muli">Thank you for your input.</h2></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-entity-comment_inner-entity.html','<div ng-if="$ctrl.data.renderOptions.shouldDisplay" class="entity-rating" click-outside="$ctrl.closePopup()"><div class="entity-rating__container"><div class="entity-rating__body" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><div class="comment__info-not-rated"><ta2-stars layout="desktop" current-score="$ctrl.data.model.UserComment.Score" on-star-score-selected="$ctrl.starScoreSelected(selectedScore)" entity-modal="true"></ta2-stars></div><div ng-if="$ctrl.data.renderOptions.canSubmit()" ng-click="$ctrl.submitComment()" class="btn entity-rating__btn"><span ng-show="!$ctrl.data.renderOptions.saveInProgress">{{$ctrl.data.model.UserComment && $ctrl.data.model.UserComment.Score === 1 ? \'Cancel\' : \'Submit\'}}</span> <i ng-show="$ctrl.data.renderOptions.saveInProgress" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.data.renderOptions.canSubmit()" class="btn entity-rating__btn--disabled entity-rating__btn"><span>Submit</span></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-entity-comment_mobile-middle.html','<div ng-if="$ctrl.data.renderOptions.shouldDisplay" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closePopup()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closePopup()"></i></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.data.model.Entity.Name}}</h2><div class="comment__info-not-rated"><ta2-stars layout="mobile" current-score="$ctrl.data.model.UserComment.Score" on-star-score-selected="$ctrl.starScoreSelected(selectedScore)"></ta2-stars></div><div class="comment__fieldgroup"><textarea class="textarea" ng-class="{ \'textarea--writing\' : $ctrl.data.model.UserComment.CommentText }" ng-model="$ctrl.data.model.UserComment.CommentText" placeholder="OPTIONAL COMMENT">{{$ctrl.data.model.UserComment.CommentText}}\r\n                    </textarea><ta2-photo existing-photos="$ctrl.data.model.UserComment.Images" added-photos="$ctrl.data.model.UserComment.AddedImages"></ta2-photo></div><div ng-if="$ctrl.data.model.UserComment.Images.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div></div><div class="modal__footer" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><div ng-if="$ctrl.data.renderOptions.canSubmit()" ng-click="$ctrl.submitComment()" class="btn btn--red-background"><span ng-show="!$ctrl.data.renderOptions.saveInProgress">{{$ctrl.data.model.UserComment && $ctrl.data.model.UserComment.Score === 1 ? \'Cancel rating\' : \'Submit\'}}</span> <i ng-show="$ctrl.data.renderOptions.saveInProgress" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.data.renderOptions.canSubmit()" class="btn btn--disabled-background btn--right"><span>Submit</span></div></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayThankYouBox"><div class="comment__thanks-box"><div class="comment comment--thanks"><i class="icon icon--check-success"></i><h2 class="h2 h2--bold h2--lowercase h2--center h2--muli">Thank you for your input.</h2></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-entity-comment_mobile.html','<div ng-if="$ctrl.data.renderOptions.shouldDisplay" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closePopup()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closePopup()"></i></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.data.model.Entity.Name}}</h2><div class="comment__info-not-rated"><ta2-stars layout="mobile" current-score="$ctrl.data.model.UserComment.Score" on-star-score-selected="$ctrl.starScoreSelected(selectedScore)"></ta2-stars></div></div><div class="modal__footer" ng-if="$ctrl.data.renderOptions.shouldDisplayCommentBody"><div ng-if="$ctrl.data.renderOptions.canSubmit()" ng-click="$ctrl.submitComment()" class="btn btn--right btn--red-background submit-btn"><span ng-show="!$ctrl.data.renderOptions.saveInProgress">{{$ctrl.data.model.UserComment && $ctrl.data.model.UserComment.Score === 1 ? \'Cancel rating\' : \'Submit\'}}</span> <i ng-show="$ctrl.data.renderOptions.saveInProgress" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.data.renderOptions.canSubmit()" class="btn btn--disabled-background btn--right"><span>Submit</span></div></div><div class="modal__body" ng-if="$ctrl.data.renderOptions.shouldDisplayThankYouBox"><div class="comment__thanks-box"><div class="comment comment--thanks"><i class="icon icon--check-success"></i><h2 class="h2 h2--bold h2--lowercase h2--center h2--muli">Thank you for your input.</h2></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-photo.html','<div class="add-photo__container"><div class="add-photos" ng-if="$ctrl.getDisplayPhotos().length > 0"><div class="add-photos__item" ng-repeat="p in $ctrl.getDisplayPhotos() track by $index"><i class="icon icon--close-cross icon--close-cross--white" ng-click="$ctrl.clickRemovePhoto($event, p)"></i> <img ng-if="!p.startsWith(\'data:\')" ta-lazy-load lazy-source="{{$ctrl.constants.cdnHost + p}}?w=200"><img ng-if="p.startsWith(\'data:\')" ta-lazy-load lazy-source="{{p}}"></div></div><input type="file" multiple class="ta-file-upload" ta-file-change handler="$ctrl.onFilePickerSelect(files)" accept="image/png,image/jpeg" style="display:none"><div class="btn btn--gray-border btn--noborder" ng-if="$ctrl.getDisplayPhotos().length < 5" ng-click="$ctrl.clickAddPhotos($event)"><div class="icon-add-photos"><i class="icon icon--photo"></i> <span>ADD PHOTOS</span></div><span>{{$ctrl.getDisplayPhotos().length}}/5</span></div><div class="btn btn--gray-border btn--noborder" ng-if="$ctrl.existingPhotos.length >= 5"><span></span><span>PHOTOS</span><span>{{$ctrl.existingPhotos.length}}/5</span></div></div>');$templateCache.put('/content/scripts/app/v2/comments/ta2-stars.html','<div ng-if="!$ctrl.entityModal" class="rating-stars-desc">{{$ctrl.viewText}}</div><div ng-class="[\'rating-stars\', { \'rating-stars--big\' : $ctrl.layout === \'desktop\', \'rating-stars--small\' : $ctrl.layout !== \'desktop\', \'rating-stars--small-entity\' : $ctrl.entityModal }]" ng-mouseleave="$ctrl.onMouseLeaveComponent()"><i class="icon icon--close-cross--red" ng-if="$ctrl.currentScore === 1" ng-click="$ctrl.vote(1)"></i> <i ng-if="$ctrl.currentScore !== 1 || ($ctrl.currentScore === 1 && $index !== 0 && $index !== 1)" ng-repeat="item in $ctrl.starInfo" ng-click="$ctrl.vote(item.value)" ng-mouseleave="$ctrl.mouseLeaveStar(item.value)" ng-mouseenter="$ctrl.mouseEnterStar(item.value)" ng-class="[\'icon\', { \'icon--star-full\' : $index % 2 === 1, \'icon--star-half\' : $index % 2 !== 1, \'active\' : $ctrl.starInfo[$index].active}]" aria-hidden="true"></i></div><div ng-if="!$ctrl.halfScoreHoverMode && !$ctrl.entityModal" class="rating-stars-validate">{{ $ctrl.halfStarText}}</div>');$templateCache.put('/content/scripts/app/components/account/external-login/ta-external-login-failure-desktop.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box"><h2>External login failure!</h2></div><form class="reset-password-form"><a href="/map" class="btn btn--red-background">Back to homepage</a></form></div></section>');$templateCache.put('/content/scripts/app/components/account/external-login/ta-external-login-failure-mobile.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box"><h2>External login failure!</h2></div><form class="reset-password-form"><a href="/map" class="btn btn--red-background">Back to homepage</a></form></div></section>');$templateCache.put('/content/scripts/app/components/account/external-login/ta-external-login-missing-email-desktop.html','<div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="modal missing-email"><div class="modal__container"><div class="modal__body"><h2 class="missing-email__title h2--center h2--muli h2--lowercase h2--bold">Connect your account</h2><div class="missing-email__description">When you create your account, it will automatically be connected to your Facebook login.</div><form class="missing-email__email" ng-submit="$ctrl.submitEmail()" name="emailForm"><input type="email" ng-pattern="$ctrl.emailPattern" ng-model="$ctrl.email" required class="input" autocomplete="off" placeholder="YOUR E-MAIL"></form><div ng-if="$ctrl.showErrorMessage" class="missing-email__error">E-mail is already connected to another account</div></div><div class="modal__footer"><button ng-click="$ctrl.submitEmail()" ng-disabled="emailForm.$invalid" ng-class="{ \'btn--disabled-background\' : emailForm.$invalid }" class="missing-email__button missing-email__button--right btn btn--red-background btn--center">CONNECT</button> <button ng-click="$ctrl.cancelEmailInput()" class="missing-email__button missing-email__button--left btn btn--gray-background btn--center">CANCEL</button></div></div></div><ta-footer-desktop></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/account/external-login/ta-external-login-missing-email-mobile.html','<div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="modal missing-email"><div class="modal__container missing-email__container"><div class="modal__body"><h2 class="missing-email__title h2--center h2--muli h2--lowercase h2--bold">Connect your account</h2><div class="missing-email__description">When you create your account, it will automatically be connected to your Facebook login.</div><form class="missing-email__email" ng-submit="$ctrl.submitEmail()" name="emailForm"><input type="email" ng-pattern="$ctrl.emailPattern" ng-model="$ctrl.email" required class="input" autocomplete="off" placeholder="YOUR E-MAIL"></form><div ng-if="$ctrl.showErrorMessage" class="missing-email__error">E-mail is already connected to another account</div></div><div class="modal__footer"><button ng-click="$ctrl.submitEmail()" ng-disabled="emailForm.$invalid" ng-class="{ \'btn--disabled-background\' : emailForm.$invalid }" class="missing-email__button missing-email__button--right btn btn--red-background btn--center">CONNECT</button> <button ng-click="$ctrl.cancelEmailInput()" class="missing-email__button missing-email__button--left btn btn--gray-background btn--center">CANCEL</button></div></div></div><ta-footer-mobile></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/dish-details/dish-desktop-comments/ta-dish-desktop-comments.html','<div class="section-divider" ng-if="$ctrl.reviews.Count === 0 && !$ctrl.comment"><section class="opinions"><div class="miss-text miss-text--nobgcolor miss-text--no-padding"><h2 class="h2 h2--lowercase h2--bold h2--center h2--muli">There are no comments yet.</h2>Be the first person in the history of TasteAtlas to comment on {{$ctrl.details.Name}}</div><div class="opinions__options"><div class="component_inline-block"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt></div></div></section><section ng-if="$ctrl.showMissTxt"><div class="miss-text">Have you tried good {{$ctrl.details.Name}} recently? <button class="btn btn--red-background btn--center" ng-click="$ctrl.tellUsWhere()">TELL US WHERE</button></div><div ng-if="$ctrl.isTellUs"><ta-dish-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.tellUsWhere()"></ta-dish-restaurant-comment-desktop></div></section></div><div class="section-divider" ng-if="$ctrl.reviews.Count > 0 || $ctrl.comment"><section class="opinions"><div class="opinions__content"><div class="left"><ta-rating-card ng-if="$ctrl.rating && $ctrl.overviewDetails.Badges" template="basic" platform="desktop" details="$ctrl.rating" badges="$ctrl.overviewDetails.Badges" actions="$ctrl.ratingCardActions"></ta-rating-card></div><div class="right"><ta-comments-list comments="$ctrl.reviews" template="desktop"></ta-comments-list></div></div><div class="opinions__options" ng-if="$ctrl.reviews.Count !== $ctrl.reviews.Data.length"><ta-view-more-button items="$ctrl.reviews" button-class="\'view-more btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()" class="component-inline-block"></ta-view-more-button></div></section><section ng-if="$ctrl.showMissTxt"><div class="miss-text">Have you tried good {{$ctrl.details.Name}} recently? <button class="btn btn--red-background btn--center" ng-click="$ctrl.tellUsWhere()">TELL US WHERE</button></div><div ng-if="$ctrl.isTellUs"><ta-dish-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.tellUsWhere()"></ta-dish-restaurant-comment-desktop></div></section></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-desktop-shared/ta-dish-desktop-types.html','<div class="types"><h2 class="h1 h1--center h1--medium">Types of {{$ctrl.name}}</h2><i class="plate-lines plate-lines--biggest plate-lines--center"></i><div class="types__list--top"><div ng-repeat="type in $ctrl.data" class="type type--top"><div class="inner"><a ng-href="{{type.UrlLink}}"><div class="type__thumb"><img ng-if="type.Image" ng-src="{{::$ctrl.constants.cdnHost}}/{{::type.Image}}?h=100&w=100"></div><div class="type__name type__name--top">{{type.Name}}</div></a></div></div></div><div class="grid__container" ng-if="$ctrl.hasChildren"><div class="grid"><div class="grid-sizer"></div><div class="gutter-sizer"></div><div ng-repeat="child in $ctrl.data" ng-if="child.Children.length > 0" class="types__list types__list--parent grid-item"><div class="type type--parent"><a ng-href="{{child.UrlLink}}"><div class="left"><div class="type__thumb type__thumb--parent"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::child.Image}}?h=130&w=130"></div></div><div class="right"><h3 class="h3 h3--large">{{child.Name}}</h3><div class="type__desc" ng-bind-html="child.Description | html"></div></div></a></div><div class="types__list types__list--child"><span ng-repeat="firstChild in child.Children"><div class="type type--child" ng-class="{\'type--child--have-child\': firstChild.Children.length > 0}"><a ng-href="{{firstChild.UrlLink}}"><div class="type__thumb"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::firstChild.Image}}?h=50&w=50" ng-if="firstChild.Image"></div><div class="type__name type__name--child">{{firstChild.Name}}</div></a></div><span><div ng-repeat="secondChild in firstChild.Children" class="type type--child type type--child--2" ng-class="{\'type--child--2--first\': $index < 0}"><a ng-href="{{secondChild.UrlLink}}"><div class="type__thumb"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::secondChild.Image}}?h=60&w=60" ng-if="secondChild.Image"></div><div class="type__name type__name--parent">{{firstChild.Name}}</div><div class="type__name type__name--child-2">{{secondChild.Name}}</div></a></div></span></span></div></div><div class="clearfix"></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-desktop-overview/ta-dish-desktop-main.html','<section class="dish page" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div><div class="page__background-container page__background-container--food"><div class="card card--food"><div class="card__hero card__hero--food" ng-if="$ctrl.preloadedDetails.PreviewImage.Image || $ctrl.preloadedDetails.Images.length > 0"><ta-image-gallery-desktop preview="$ctrl.preloadedDetails.PreviewImage" photos="$ctrl.preloadedDetails.Images"></ta-image-gallery-desktop></div><div class="card__main"><div class="left"><div class="group"><ta-entity-categories-desktop category-name="$ctrl.preloadedDetails.Group.Name" category-url-link="$ctrl.preloadedDetails.Group.UrlLink" additional-categories="$ctrl.preloadedDetails.AdditionalGroups"></ta-entity-categories-desktop></div><h1 class="h1" ng-if="$ctrl.preloadedDetails.Certificates.length === 0">{{$ctrl.preloadedDetails.Name}}</h1><div class="certificate__container certificate__container--multiple" ng-if="$ctrl.preloadedDetails.Certificates.length > 0"><h1 class="h1"><span>{{$ctrl.preloadedDetails.Name}}</span> <span class="certificate certificate--multiple"><a ng-repeat="c in $ctrl.preloadedDetails.Certificates" ng-href="{{c.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h1" title="{{c.Name}}" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::c.Image}}?mw=35\');"></i></a></span></h1></div><h4 class="h4" ng-if="$ctrl.preloadedDetails.OtherNames && $ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.EnglishName}}, {{$ctrl.preloadedDetails.OtherNames}})</h4><h4 class="h4" ng-if="$ctrl.preloadedDetails.OtherNames && !$ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.OtherNames}})</h4><h4 class="h4" ng-if="!$ctrl.preloadedDetails.OtherNames && $ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.EnglishName}})</h4><i class="plate-lines plate-lines--biggest"></i><div class="text" ng-if="$ctrl.preloadedDetails.Description" read-more-by-sentence read-more-txt="{{$ctrl.preloadedDetails.Description}}"></div></div><div class="right" ng-if="!$ctrl.moreRegionsVisible"><div class="right__row"><div class="regions-wrapper"><div class="region"><a ng-if="$ctrl.preloadedDetails.Region.Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Current.Name}}<span ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent">,</span></span></a> <a ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent" href="{{$ctrl.preloadedDetails.Region.Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Parent.Name}}</span></a></div><div class="region" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length === 1"><a ng-if="$ctrl.preloadedDetails.AdditionalRegions[0].Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.AdditionalRegions[0].Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.AdditionalRegions[0].Current.Name}}</span></a> <a ng-if="!$ctrl.preloadedDetails.AdditionalRegions[0].Parent.IsContinent" href="{{$ctrl.preloadedDetails.AdditionalRegions[0].Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.AdditionalRegions[0].Parent.Name}}</span></a></div><div ng-if="$ctrl.preloadedDetails.AdditionalRegions.length > 1" class="region"><span style="font-size: 14px">and&nbsp;</span> <span ng-click="$ctrl.showMoreRegions()" class="additional-regions">{{$ctrl.preloadedDetails.AdditionalRegionText}}</span></div></div><div class="emblem"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded && $ctrl.preloadedDetails.AdditionalRegions.length < 1" image-filter="$ctrl.imageData"></ta-map-image></div></div></div><div class="right right--additional" ng-if="$ctrl.moreRegionsVisible"><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()"></i><div><div class="right__row"><div class="region"><a ng-if="$ctrl.preloadedDetails.Region.Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Current.Name}}</span></a> <a ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent" href="{{$ctrl.preloadedDetails.Region.Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Parent.Name}}</span></a></div><div class="emblem"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length < $ctrl.maxDetailedAdditionalRegions"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded" image-filter="$ctrl.imageData"></ta-map-image></div></div></div><div ng-repeat="region in $ctrl.preloadedDetails.AdditionalRegions"><div class="right__row"><div class="region"><a ng-if="region.Current.Name" class="region-name" href="{{region.Current.UrlLink}}"><span ng-if="region.Parent.IsContinent">{{region.Current.Name}}</span> <span ng-if="!region.Parent.IsContinent">{{region.Current.Name}},</span></a> <a ng-if="!region.Parent.IsContinent" href="{{region.Parent.UrlLink}}"><span>{{region.Parent.Name}}</span></a></div><div class="emblem"><img ng-class="{ \'img--highlight\' :region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="region.Current.EmblemImage" class="flag flag-fix" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!region.Current.EmblemImage" class="flag" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length < $ctrl.maxDetailedAdditionalRegions"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image></div></div></div></div></div><div class="card__footer" ng-class="{ \'card__footer--food\' : $ctrl.preloadedDetails.PreviewImage || $ctrl.preloadedDetails.Images.length > 0 }"><div class="horizontal-list" ng-if="$ctrl.foodIngredients.isValid"><ta-food-ingredients items="$ctrl.foodIngredients.cutData" template="desktop"></ta-food-ingredients></div><div class="options-left"><ta-comment-label user-comment-status="$ctrl.userCommentStatus"></ta-comment-label><ta-rating-actions template="desktop-row" actions="$ctrl.ratingActions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions></div></div></div></div></div></section><div><ta-dish-desktop-section-image ng-if="$ctrl.pageStatus.page !== \'\' && $ctrl.previewTitleData" title-data="$ctrl.previewTitleData"></ta-dish-desktop-section-image><div class="dish__tabs" ng-if="$ctrl.pageStatus.isLoaded"><nav class="tab__nav" id="tabs_main"><ul><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}" target="_self">Overview</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'recipe\'}" ng-if="$ctrl.preloadedDetails.HasRecipes"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/recipe" target="_self">Recipe</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'wheretoeat\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/wheretoeat" target="_self">Where to eat</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'comments\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/comments" target="_self">Comments</a></li></ul></nav><div><ta-dish-desktop-overview ng-if="$ctrl.pageStatus.page === \'\'" id="$ctrl.id" details="$ctrl.preloadedDetails" rating="$ctrl.dishRating" where-to-eat-region-id="$ctrl.whereToEatRegionId" name="$ctrl.name" additional-region-id="$ctrl.additionalRegionId"></ta-dish-desktop-overview><ta-dish-desktop-where-to-eat ng-if="$ctrl.pageStatus.page === \'wheretoeat\'" id="$ctrl.id" where-to-eat-region-id="$ctrl.whereToEatRegionId" name="$ctrl.name" details="$ctrl.preloadedDetails" on-location-change="$ctrl.onPreviewTitleChange(data)" view-more="load-more-items"></ta-dish-desktop-where-to-eat><ta-recipe ng-if="$ctrl.pageStatus.page ===\'recipe\'" template="desktop" entity="DISH" variation-id="$ctrl.recipeVariationId"></ta-recipe><ta-dish-desktop-comments ng-if="$ctrl.pageStatus.page === \'comments\'" details="$ctrl.preloadedDetails" rating="$ctrl.dishRating" preview-title-init="$ctrl.onPreviewTitleChange(data)"></ta-dish-desktop-comments></div></div><ta-comment-process ng-if="$ctrl.userCommentStatus.isCommentProcess && $ctrl.pageStatus.page !== \'recipe\'" details="$ctrl.preloadedDetails" rating-callback="$ctrl.refreshRatingData()"></ta-comment-process><ta-footer-desktop ng-if="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded"></ta-footer-desktop></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-desktop-overview/ta-dish-desktop-overview.html','<section class="section-divider tab tab-overview" ng-if="$ctrl.isOverviewLoaded"><section ng-if="$ctrl.details.InfographicImage && $ctrl.details.InfographicImage.Image"><div class="infographic__container ta-border--top"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.InfographicImage.Image}}?w=1200" alt="{{$ctrl.details.Name}}-infographic"></div></section><section ng-if="$ctrl.types.length > 0"><ta-food-types-desktop data="$ctrl.types" name="$ctrl.details.Name" on-order-change="$ctrl.onFoodTypesOrderChange(orderBy)"></ta-food-types-desktop></section><section ng-if="$ctrl.partOf.Data.length > 0"><ta-pairing-desktop-dynamic title="\'Part of\'" items="$ctrl.partOf" load-more="$ctrl.loadMorePartOf()"></ta-pairing-desktop-dynamic></section><section ng-if="$ctrl.pairingTips.BeveragePairs.length > 0"><ta-pairing-desktop title="\'Pairing tips\'" pairings="$ctrl.pairingTips.BeveragePairs"></ta-pairing-desktop></section><section ng-if="$ctrl.pairingTips.ToServeWith.length > 0"><ta-pairing-desktop title="\'Serve with\'" pairings="$ctrl.pairingTips.ToServeWith"></ta-pairing-desktop></section><section ng-if="$ctrl.details.HasRecipes" class="authentic-recipe__container"><div class="recipe__variations-list" ng-if="$ctrl.recipeVariations && $ctrl.recipeVariations.length > 1"><div class="recipe__variations-list-title recipe__variations-list-title--overview"><h4 class="h4 h4--muli h4--extrabold h4--uppercase">Recipe variations</h4></div><ta-variations-list template="desktop" food="$ctrl.details" items="$ctrl.recipeVariations" selected-variation-id="$ctrl.recipeVariations[0].RecipeVariationId"></ta-variations-list></div><div class="authentic-recipe authentic-recipe--overview"><h1 class="h1 h1--center h1--medium"><span class="food">{{$ctrl.details.Name}}</span> <span>Authentic recipe</span></h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="authentic-recipe__preparation authentic-recipe__preparation--overview" ng-if="$ctrl.mainRecipeVariation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CustomTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.mainRecipeVariation.Time.CustomTime.CustomLabel}}</span> <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.CustomTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">RESTING <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.TotalTime)}}</strong></div></div></div><div class="authentic-recipe__text" ng-if="$ctrl.mainRecipeVariation.Description" read-more number-of-letters="500" read-more-txt="{{$ctrl.mainRecipeVariation.Description}}"></div><div class="authentic-recipe__link"><a ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self" class="btn btn--red-background btn--inline-flex">VIEW RECIPE</a></div></div></section><section class="where-to-eat__section"><div class="desktopmaxwidth font-lining-figures"><h1 class="h1 h1--center section-preview__title section-preview__title--noimage"><span class="upper">{{$ctrl.whereToEatTitleData.upper}}</span> <span class="main">{{$ctrl.whereToEatTitleData.main.upper}}</span> <span class="main">{{$ctrl.whereToEatTitleData.main.lower}}</span> <span class="subtitle">{{$ctrl.whereToEatTitleData.sub}}</span></h1><i class="plate-lines plate-lines--center plate-lines--biggest"></i></div><ta-dish-desktop-where-to-eat id="$ctrl.id" where-to-eat-region-id="$ctrl.whereToEatRegionId" name="$ctrl.name" details="$ctrl.details" on-location-change="$ctrl.onPreviewTitleChange(data)" view-more="navigate"></ta-dish-desktop-where-to-eat></section><section ng-if="$ctrl.events.Data.length > 0"><div class="event-small-card"><div class="desktopmaxwidth desktopmaxwidth--small"><h1 class="h1 h1--medium h1--center"><span>{{$ctrl.details.Name}} festivals</span></h1><i class="plate-lines plate-lines--center plate-lines--big"></i></div><div class="event-small-card__list"><div ng-repeat="event in $ctrl.events.Data track by $index" class="item"><ta-event-card-desktop event="event"></ta-event-card-desktop></div></div><div ng-if="$ctrl.events.Data.length !== $ctrl.events.Count" class="event-small-card__view-more"><button class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.onLoadMoreEvents()">VIEW MORE</button></div></div></section><section ng-if="$ctrl.overviewDetails && $ctrl.overviewDetails.Videos.length" class="related-videos"><ta-related-videos template="desktop" videos="$ctrl.overviewDetails.Videos"></ta-related-videos></section><section class="similar-list" ng-if="$ctrl.otherVarieties.Items.Data.length > 0 && !$ctrl.details.IsGroup"><div class="similar-list__title"><div><h2 class="h1 h1--center h1--medium h1--lowercase">Other {{::$ctrl.otherVarieties.ParentName}} varieties</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></div></div><ta-similar-list-desktop items="$ctrl.otherVarieties.Items.Data" is-region="false"></ta-similar-list-desktop></section><section class="similar-list" ng-if="$ctrl.similarFoodData.SimilarFoodEntities.length > 0"><div class="similar-list__title"><a ng-href="{{::$ctrl.details.Group.UrlLink}}"><h2 class="h1 h1--center h1--medium h1--lowercase">{{::$ctrl.similarFoodData.SectionTitle}} {{::$ctrl.details.Group.PluralName}}</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></a></div><ta-similar-list-desktop items="$ctrl.similarFoodData.SimilarFoodEntities" is-region="false"></ta-similar-list-desktop></section><section ng-if="$ctrl.moreFromRegion && $ctrl.moreFromRegion.SimilarFoodEntities.length > 0" class="similar-list"><div class="similar-list__title"><a ng-href="{{::$ctrl.details.Region.Current.UrlLink}}"><h2 class="h1 h1--center h1--medium h1--lowercase">{{$ctrl.getMoreFromRegionTitle()}}</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></a></div><ta-similar-list-desktop items="$ctrl.moreFromRegion.SimilarFoodEntities" is-region="true"></ta-similar-list-desktop></section><section ng-if="$ctrl.overviewDetails.Links && $ctrl.overviewDetails.Links.length" class="related-news"><ta-related-news template="desktop" news-articles="$ctrl.overviewDetails.Links"></ta-related-news></section><section class="rating-section" ng-if="$ctrl.rating && $ctrl.overviewDetails.Badges"><h4 class="rating-section__title h4 h4--muli h4--extrabold h4--uppercase">Ratings</h4><div class="rating-section__container"><div class="rating-section__card"><ta-rating-card template="expanded" platform="desktop" details="$ctrl.rating" badges="$ctrl.overviewDetails.Badges" actions="$ctrl.ratingCardActions"></ta-rating-card></div><div class="rating-section__promotion"><div class="promotion promotion--nopadding" ta-google-ad id="TA_MR_DISH_OVERVIEW-RATING" name="/21703950087/D_TA_300x250" platform="desktop"></div></div></div></section></section>');$templateCache.put('/content/scripts/app/components/dish-details/dish-desktop-where-to-eat/ta-dish-desktop-where-to-eat.html','<div class="where-to-eat__container where-to-eat__container--load-more"><div class="where-to-eat"><div class="where-to-eat__search" ng-if="$ctrl.selectedLocation === \'search\'"><div class="autocomplete__container"><i class="icon icon--search-header"></i> <input class="input input--nobackground input--big input--noborder" type="text" name="restaurantname" placeholder="Search eg. {{$ctrl.details.Region.Current.Name}}" ng-change="$ctrl.autocompleteCities($ctrl.query)" ng-model-options="{ debounce: 100 }" ng-model="$ctrl.query"> <i ng-if="$ctrl.query" class="icon icon--close-cross--black" ng-click="$ctrl.deleteQuery()"></i><div ng-if="$ctrl.isAutoCompleteVisible" class="autocomplete__list"><div ng-if="$ctrl.isAutoCompleteVisible" ng-repeat="c in $ctrl.cities track by $index" ng-click="$ctrl.filterRestaurants(c.EntityId, c.Label, c.UrlLink)" class="item"><div class="left"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{$ctrl.constants.cdnHost}}/{{c.Image}}?hw=25"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="c.Label | accentSearchQuery: $ctrl.query : c.SecondaryLabel"></div><div ng-if="c.Description" class="region-country">{{c.Description}}</div><div class="type">{{c.Group}}</div></div></div></div><div class="autocomplete__message">Type the name of the city or region where you want to eat {{$ctrl.details.Name}}</div></div></div><nav class="tab__nav tab__nav--modern"><ul><li class="about-food__nav__item" ng-class="{ \'selected--modern\' : $ctrl.selectedLocation === \'nearme\' }" ng-click="$ctrl.changeLocation(\'nearme\')">Near me</li><li class="about-food__nav__item" ng-class="{ \'selected--modern\' : $ctrl.selectedLocation === \'world\' }" ng-click="$ctrl.changeLocation(\'world\')">In the world</li><li class="about-food__nav__item" ng-class="{ \'selected--modern\' : $ctrl.selectedLocation === \'region\' }" ng-click="$ctrl.changeLocation(\'region\')">In&nbsp;{{::$ctrl.details.Region.Current.Name}}</li><li class="about-food__nav__item" ng-class="{ \'selected--modern\' : $ctrl.selectedLocation === \'search\' }" ng-click="$ctrl.changeLocation(\'search\')">Search location</li></ul></nav><div ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-desktop details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-desktop></div><div class="loader loader--desktop" ng-show="$ctrl.restaurantsLoading"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.restaurants.Data.length === 0 && !$ctrl.restaurantsLoading" class="where-to-eat__empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div><div class="where-to-eat__container"><div class="where-to-eat__list-wrapper" ng-show="$ctrl.restaurants.Data.length && !$ctrl.restaurantsLoading"><div class="where-to-eat__recommendation"><button class="btn btn--gray-border btn--lightest-gray-background" ng-click="$ctrl.tellUsWhere()"><i class="icon icon__chat-cloud-star"></i> <span>Recommend a restaurant with good {{$ctrl.details.Name}}</span></button></div><div ng-if="$ctrl.isTellUs"><ta-dish-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.tellUsWhere()"></ta-dish-restaurant-comment-desktop></div><div class="where-to-eat__column-list" ng-if="$ctrl.restaurants.Data.length > 0"><div class="item" ng-repeat="restaurant in $ctrl.restaurants.Data track by $index"><div class="item__image"><div class="restaurant-position font-lining-figures" ng-if="$ctrl.selectedLocation === \'nearme\' || $ctrl.selectedLocation === \'world\'"><span>{{$index + 1}}</span></div><a href="{{restaurant.UrlLink}}" ng-if="restaurant.Image"><img class="thumb" ng-src="{{$ctrl.constants.cdnHost}}{{restaurant.Image}}?w=600&h=400"></a> <a href="{{restaurant.UrlLink}}" ng-if="!restaurant.Image"><img class="thumb" ta-lazy-load lazy-source="random"></a><div class="rating-star rating-star--absolute"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(restaurant)" is-rated="$ctrl.isRestaurantRated(restaurant.Id)" avg-rating="$ctrl.getRestaurantAvgRating(restaurant.Id)"></ta-restaurant-rating-control></div></div><div class="item__content"><div class="item__header"><a href="{{restaurant.UrlLink}}" class="name"><h2 class="h2 h2--lowercase h2--bold">{{restaurant.Name}}</h2></a><div class="region"><div class="region-name"><a href="{{restaurant.RegionUrl}}" ng-if="restaurant.RegionName">{{restaurant.RegionName}}</a>,&nbsp <a href="{{restaurant.CountryUrl}}">{{restaurant.CountryName}}</a><div ng-if="restaurant.RegionName">{{$ctrl.getRestaurantAddress(restaurant)}}</div></div><div class="emblem" ng-if="restaurant.RegionEmblemImage"><img ta-lazy-load lazy-source="{{$ctrl.constants.cdnHost}}/{{restaurant.RegionEmblemImage}}?h=30&w=30"></div></div></div><div class="item__information" ng-if="restaurant.Critic"><div class="recommendations" ta-recommended-by name="restaurant.Critic.Name" url="restaurant.Critic.ProfileUrl" source="restaurant.Critic.Source" count="restaurant.CriticCount"></div><blockquote cite="{{restaurant.Critic.Source}}" class="recommendation">{{restaurant.Critic.Content}}</blockquote></div></div></div></div><div class="loader loader--desktop" ng-show="$ctrl.loadMoreRestaurantsData"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.restaurants.Data.length > 5 && showLoadMoreBtn" class="similar-list__view-more similar-list__load-more food-types__load-more"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">LOAD MORE</button></div><div class="where-to-eat__recommendation" ng-if="$ctrl.restaurants.Data.length > 5"><button class="btn btn--gray-border btn--lightest-gray-background" ng-click="$ctrl.tellUsWhere()"><i class="icon icon__chat-cloud-star"></i> <span>Recommend a restaurant with good {{$ctrl.details.Name}}</span></button></div></div><div class="where-to-eat__promotion-wrapper" ng-if="$ctrl.restaurants.Data.length > 3"><div class="promotion promotion--sticky" ta-google-ad id="TA_MR_DISH_WTE_" name="/21703950087/D_TA_600x300" platform="desktop"></div></div></div><div ng-if="$ctrl.restaurants.length === 0 && !$ctrl.isLocationOn() && $ctrl.selectedLocation === \'nearme\'" class="location-prompt location-prompt--page"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div class="where-to-eat__view-all" ng-show="$ctrl.restaurants.Data.length && !$ctrl.restaurantsLoading && $ctrl.viewMore === \'load-more-items\'"><ta-view-more-button items="$ctrl.restaurants" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.loadMoreRestaurantsLoading" on-view-more="$ctrl.loadMoreRestaurants()" next-page-size="$ctrl.nextPageSize"></ta-view-more-button></div><div class="where-to-eat__view-all" ng-if="$ctrl.viewMore === \'navigate\'"><div class="where_to_eat__view-more"><a class="btn btn--nopadding btn--inline-flex btn--underscore btn--no-bgcolor btn--black-text btn--extrabold" ng-href="{{::$ctrl.details.EntityUrlLink}}/wheretoeat" target="_self">VIEW MORE</a></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-mobile-comments/ta-dish-mobile-comments.html','<div class="food-detail__comment"><ta-food-mobile-comments ng-if="$ctrl.promises.length" details="$ctrl.details" rating="$ctrl.rating" promises="$ctrl.promises" get-reviews="$ctrl.getReviews"></ta-food-mobile-comments></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-country-certificate-slider.html','<ul class="search-results__wheretoeat-list search-results__wheretoeat-list--scrollable certificate-list" id="certificate-list-country-{{$ctrl.id}}" ta-horizontal-scroll-drag active-class="search-results__wheretoeat-list--scrolling"><li class="certificate-list__item flex"><a href="#" target="_blank"><img class="slider-img" src="https://cdn.tasteatlas.com//images/toplistarticles/63d12ccd485c41899b82014ab0915d48.jpg?w=150&h=75" alt="slider-img"></a><div class="details-slider__slider-text"><div class="details-slider__slider-text-heading flex"><p class="heading">Lorem ipsum</p><img class="certificate-img" src="/Content/Image/badge.png?w=18" alt="img"></div><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr dish-rating--country" entity-id="8205" entity-type="1" rating-data-card="4.2" template="rate-redesign-v2"></ta2-rating-actions-ssr></div></li><li class="certificate-list__item flex"><a href="#" target="_blank"><img class="slider-img" src="https://cdn.tasteatlas.com//images/toplistarticles/63d12ccd485c41899b82014ab0915d48.jpg?w=150&h=75" alt="slider-img"></a><div class="details-slider__slider-text"><div class="details-slider__slider-text-heading flex"><p class="heading">Lorem ipsum</p><img class="certificate-img" src="/Content/Image/badge.png?w=18" alt="img"></div><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr dish-rating--country" entity-id="8205" entity-type="1" rating-data-card="4.2" template="rate-redesign-v2"></ta2-rating-actions-ssr></div></li><li class="certificate-list__item flex"><a href="#" target="_blank"><img class="slider-img" src="https://cdn.tasteatlas.com//images/toplistarticles/63d12ccd485c41899b82014ab0915d48.jpg?w=150&h=75" alt="slider-img"></a><div class="details-slider__slider-text"><div class="details-slider__slider-text-heading flex"><p class="heading">Lorem ipsum</p><img class="certificate-img" src="/Content/Image/badge.png?w=18" alt="img"></div><ta2-rating-actions-ssr class="ta-rating-actions-ssr-append ta2-rating-actions-ssr dish-rating--country" entity-id="8205" entity-type="1" rating-data-card="4.2" template="rate-redesign-v2"></ta2-rating-actions-ssr></div></li></ul><div class="slider__scroll-circle slider__scroll-circle--right" ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'right\')"><i class="icon icon__big-arrow icon__big-arrow-right--redesign"></i></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-dish-desktop-section-image.html','<div class="section-preview" ng-class="{ \'section-preview--noimage\' : !$ctrl.showImage() }"><div class="section-preview__image-wrap"><div class="section-preview__image-img swiper-slide"><img ng-if="$ctrl.showImage()" ta-lazy-load ta-lazy-alt="preview-image" lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.titleData.image.Image}}?mw=2000"><div class="swiper-copyright" ng-if="$ctrl.titleData.image.ImageSource"><a ng-if="$ctrl.titleData.image.ImageAuthorUrl" href="{{$ctrl.titleData.image.ImageAuthorUrl}}" target="_blank" rel="nofollow">{{$ctrl.titleData.image.ImageSource}}</a> <span ng-if="!$ctrl.titleData.image.ImageAuthorUrl">{{$ctrl.titleData.image.ImageSource}}</span></div></div></div><div class="section-preview__title" ng-class="{ \'section-preview__title--noimage\' : !$ctrl.showImage() }"><h1 class="h1 h1--center"><span ng-if="$ctrl.titleData.upper" class="upper">{{$ctrl.titleData.upper}}</span> <span ng-if="$ctrl.titleData.main.upper" class="main">{{$ctrl.titleData.main.upper}}</span> <span ng-if="$ctrl.titleData.main.lower" class="main">{{$ctrl.titleData.main.lower}}</span> <span class="subtitle" ng-class="{ \'subtitle--location\' : $ctrl.titleData.type === \'recipe\' }">{{$ctrl.titleData.sub}}</span></h1></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-dish-mobile-types.html','<div div class="about-food__types"><div><h2 class="h2 h2--center">Types of {{$ctrl.name}}</h2><div class="types__list"><div ng-repeat="type in $ctrl.data" class="type"><a ng-href="{{type.UrlLink}}"><div class="type__thumb"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::type.Image}}?h=70&w=70" ng-if="type.Image"></div><div class="type__name">{{type.Name}}</div></a></div></div><div ng-repeat="child in $ctrl.data" ng-if="child.Children.length > 0" class="type type--parent"><a ng-href="{{child.UrlLink}}"><h3 class="h3 h3-small">{{child.Name}}</h3></a><div ng-if="child.Children.length > 0" class="types__list types__list--child"><div ng-repeat="childType in child.Children" class="type type--child"><a ng-href="{{childType.UrlLink}}"><div class="type__thumb"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::childType.Image}}?h=70&w=70" ng-if="childType.Image"></div><div class="type__name">{{childType.Name}}</div></a></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-dish-restaurant-comment-desktop.html','<div ng-switch="$ctrl.phase" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Vote"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Have you tried good {{$ctrl.details.Name}} recently?</h2><div class="comment__autocomplete"><input type="text" class="input" autocomplete="off" name="restaurantname" placeholder="RESTAURANT" ng-model="$ctrl.query" ng-model-options="{ debounce: 200 }" ng-change="$ctrl.onInputRestaurant($ctrl.query)"> <i ng-if="$ctrl.query.length > 0" ng-click="$ctrl.onRestaurantDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.restaurants.length === 0 && $ctrl.query && !$ctrl.isRestaurantManuallySelected && !$ctrl.isRestaurantSelected" click-outside="$ctrl.onClickOutsideRestaurant()"><div class="item item--recommend" ng-click="$ctrl.onManualRestaurantSelect($ctrl.query)"><div class="left"><i class="icon icon--plus icon--plus--red"></i></div><div class="right"><strong>Not on the list? Recommend "{{$ctrl.query}}"</strong></div></div></div><div class="list" ng-if="$ctrl.restaurants.length > 0" click-outside="$ctrl.onClickOutsideRestaurant()"><div class="item item--recommend" ng-if="$ctrl.query.toLowerCase() !== $ctrl.restaurants[0].Label.toLowerCase()" ng-click="$ctrl.onManualRestaurantSelect($ctrl.query)"><div class="left"><i class="icon icon--plus icon--plus--red"></i></div><div class="right"><strong>Not on the list? Recommend "{{$ctrl.query}}"</strong></div></div><div ng-repeat="restaurant in $ctrl.restaurants" class="item" ng-click="$ctrl.onRestaurantSelect(restaurant)"><div class="left" ng-if="restaurant.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.Image}}?h=20&w=20"></div><div class="right">{{$ctrl.getRestaurantDescription(restaurant)}}</div></div></div></div><div class="comment__autocomplete"><input ng-disabled="$ctrl.isRestaurantSelected" class="input" placeholder="CITY" ng-model="$ctrl.city" ng-change="$ctrl.onInputCity($ctrl.city)"> <i ng-if="$ctrl.city.length > 0" ng-click="$ctrl.onCityDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.cities.length > 0" click-outside="$ctrl.onClickOutsideCity()"><div ng-repeat="city in $ctrl.cities" class="item" ng-click="$ctrl.onCitySelect(city)"><div class="left" ng-if="city.EmblemImage"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::city.EmblemImage }}?h=20&w=20"></div><div class="right"><strong>{{city.Name}},</strong> <span>{{city.ParentFullName}}</span></div></div></div></div><div class="comment__stars comment__stars--big"><ta-star-vote-desktop on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-desktop></div><div class="comment__fieldgroup"><div class="comment__textarea-info-box"><textarea class="input input--nopadding" id="textarea-info-box" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="Tell us why you like it">{{$ctrl.data.content}}\r\n                        </textarea><div class="info-box-restaurant-modal"><span>Please make sure that:</span><ul><li>Your comment is in English</li><li>Your comment is grammatically correct</li><li>Your comment has an explanation for why this particular dish is recommended in this particular restaurant</li></ul></div></div><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo><div><ta-horizontal-loader percentage="$ctrl.uploadPercentageCompleted"></ta-horizontal-loader></div></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidRestaurant && $ctrl.isValidCity && $ctrl.isValidPhotoNumber && $ctrl.isRateValid && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--right btn--red-background">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidRestaurant || !$ctrl.isValidCity || !$ctrl.isValidPhotoNumber || !$ctrl.isRateValid) && !$ctrl.canDelete()" class="btn btn--right btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidRestaurant && $ctrl.isValidCity && $ctrl.isValidPhotoNumber && $ctrl.isRateValid" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.isValidRestaurant && $ctrl.isValidCity && $ctrl.isValidPhotoNumber && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background btn--right">CANCEL YOUR RATING</div></div></div></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-dish-restaurant-comment.html','<div ng-switch="$ctrl.phase" modal-directive close-modal="$ctrl.closeModal()"><div class="modal mobile-modal" ng-switch-when="Vote"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Have you tried good {{$ctrl.details.Name}} recently?</h2><div class="comment__autocomplete--wrapper"><div class="comment__autocomplete comment__autocomplete--first"><input class="input" type="text" ng-class="{ \'input--writing\' : $ctrl.query }" autocomplete="off" name="restaurantname" placeholder="RESTAURANT" ng-model="$ctrl.query" ng-model-options="{ debounce: 200 }" ng-change="$ctrl.onInputRestaurant($ctrl.query)"> <i ng-if="$ctrl.query.length > 0" ng-click="$ctrl.onRestaurantDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.restaurants.length === 0 && $ctrl.query && !$ctrl.isRestaurantManuallySelected && !$ctrl.isRestaurantSelected" click-outside="$ctrl.onClickOutsideRestaurant()"><div class="item item--recommend" ng-click="$ctrl.onManualRestaurantSelect($ctrl.query)"><div class="left"><i class="icon icon--plus icon--plus--red"></i></div><div class="right"><strong>Not on the list? Recommend "{{$ctrl.query}}"</strong></div></div></div><div class="list" ng-if="$ctrl.restaurants.length > 0" click-outside="$ctrl.onClickOutsideRestaurant()"><div class="item item--recommend" ng-if="$ctrl.query.toLowerCase() !== $ctrl.restaurants[0].Label.toLowerCase()" ng-click="$ctrl.onManualRestaurantSelect($ctrl.query)"><div class="left"><i class="icon icon--plus icon--plus--red"></i></div><div class="right"><strong>Not on the list? Recommend "{{$ctrl.query}}"</strong></div></div><div ng-repeat="restaurant in $ctrl.restaurants" class="item" ng-click="$ctrl.onRestaurantSelect(restaurant)"><div class="left" ng-if="restaurant.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.Image}}?h=20&w=20"></div><div class="right">{{$ctrl.getRestaurantDescription(restaurant)}}</div></div></div></div><div class="comment__autocomplete"><input class="input" ng-disabled="$ctrl.isRestaurantSelected" ng-class="{ \'input--writing\' : $ctrl.city }" placeholder="CITY" ng-model="$ctrl.city" ng-change="$ctrl.onInputCity($ctrl.city)"> <i ng-if="$ctrl.city.length > 0" ng-click="$ctrl.onCityDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.cities.length > 0" click-outside="$ctrl.onClickOutsideCity()"><div ng-repeat="city in $ctrl.cities" class="item" ng-click="$ctrl.onCitySelect(city)"><div class="left" ng-if="city.EmblemImage"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::city.EmblemImage}}?h=20&w=20"></div><div class="right"><strong>{{city.Name}},</strong> <span>{{city.ParentFullName}}</span></div></div></div></div></div><div class="comment__info-not-rated"><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)"></ta-star-vote-mobile></div><div class="comment__fieldgroup"><div class="comment__textarea-info-box"><textarea class="textarea" id="textarea-info-box" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="Tell us why you like it">{{$ctrl.data.content}}\r\n                        </textarea><div class="info-box-restaurant-modal"><span>Please make sure that:</span><ul><li>Your comment is in English</li><li>Your comment is grammatically correct</li><li>Your comment has an explanation for why this particular dish is recommended in this particular restaurant</li></ul></div></div><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo><div><ta-horizontal-loader percentage="$ctrl.uploadPercentageCompleted"></ta-horizontal-loader></div></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidRestaurant && $ctrl.isValidCity && $ctrl.isValidPhotoNumber && $ctrl.isRateValid" ng-click="$ctrl.submit()" class="btn btn--red-background">SUBMIT</div><div ng-if="$ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidRestaurant || !$ctrl.isValidCity || !$ctrl.isValidPhotoNumber || !$ctrl.isRateValid" class="btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidRestaurant && $ctrl.isValidCity && $ctrl.isValidPhotoNumber && $ctrl.isRateValid" class="fa fa-spinner fa-spin"></i></div></div></div></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container modal__container--fixed-bottom"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div><div class="footer"></div></div></div><div class="modal" ng-switch-when="Login"><div class="modal__container"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="login-block" ng-if="$ctrl.isLoginView"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Please log in to vote</h2><ta-social-login-desktop></ta-social-login-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-desktop></ta-regular-login-desktop><div class="login-help"><div ng-click="$ctrl.openRegister()" class="btn btn--red-border btn--red-border-alt">CREATE ACCOUNT</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div><div class="register-block" ng-if="$ctrl.isRegisterView"><ta-social-register-desktop></ta-social-register-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-register-desktop></ta-regular-register-desktop><div class="login-help"><div ng-click="$ctrl.closeRegister()" class="btn btn--red-border btn--red-border-alt">RETURN TO LOG IN</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div></div><div class="modal__footer"></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-shared/ta-mobile-region-search.html','<div><div ng-if="!$ctrl.isAutocompleteActive" ng-click="$ctrl.toggleAutocomplete()" class="autocomplete autocomplete--narrow"><i class="icon icon--search"></i> <input type="text" class="input input--big input--noborder input--underline" ng-model="$ctrl.query" placeholder="Search eg. {{$ctrl.details.RegionName}}"> <span class="input__tutorial">Type the name of the city or region where you want to eat {{$ctrl.details.Name}}</span></div><div ng-if="$ctrl.isAutocompleteActive" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.toggleAutocomplete()"></i> <i class="icon icon--search"></i> <input type="text" id="autocomplete-region-id" ng-keydown="$event.keyCode === 13 && doSelection()" ng-model="$ctrl.query" ng-model-options="{ debounce: 100 }" ng-change="$ctrl.autoCompleteRegions($ctrl.query)" class="input input--big input--noborder input--shadow-large" placeholder="Search eg. {{$ctrl.details.RegionName}}"> <i ng-if="$ctrl.query" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.deleteQuery()"></i> <span ng-if="$ctrl.regions.length === 0" class="input__tutorial">Type the name of the city or region where you want to eat &nbsp;{{$ctrl.details.Name}}</span><div class="autocomplete__list autocomplete__list--fullpadding"><div ng-if="$ctrl.regions.length > 0" ng-repeat="c in $ctrl.regions track by $index" ng-click="$ctrl.doSelection(c.EntityId, c.Label, c.UrlLink)" class="item"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::c.Image}}"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::c.Label | accentSearchQuery: $ctrl.query : c.SecondaryLabel"></div><div class="description" ng-if="c.Description">{{c.Description}}</div><div class="type">{{c.Group}}</div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-mobile-where-to-eat/ta-dish-mobile-where-to-eat.html','<div ta-background-sections to="\'.ta-parent-section\'"><section class="where-to-eat ta-parent-section"><div class="about-food__preview"><div class="about-food__preview-image-wrap"><div class="about-food__preview-image-img swiper-slide"><img src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.PreviewImage.Image}}?w=600&h=450"><div class="swiper-copyright" ng-if="$ctrl.details.PreviewImage.ImageSource"><a ng-if="$ctrl.details.PreviewImage.ImageSourceUrl" href="{{$ctrl.details.PreviewImage.ImageSourceUrl}}" target="_blank" rel="nofollow">{{$ctrl.details.PreviewImage.ImageSource}}</a> <span ng-if="!$ctrl.details.PreviewImage.ImageSourceUrl">{{$ctrl.details.PreviewImage.ImageSource}}</span></div></div></div><div class="about-food__preview-title"><h1 class="h1 h1--center h1--bold"><span class="h5 h5--center h5--uppercase">Where to eat</span> <span>The best {{::$ctrl.details.Name}}</span> <span>{{$ctrl.getWhereToEatLocation()}}</span> <span class="h6 h6--center">(According to food experts)</span></h1></div></div><div class="food-navigation"><div class="about-food"><div class="about-food__menu"><nav id="about-food__nav-regular" class="about-food__nav-fix"><div ta-show-nav-arrow></div><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--scrollable"><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'nearme\' }" ng-click="$ctrl.changeLocation(\'nearme\')">Near me</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'world\' }" ng-click="$ctrl.changeLocation(\'world\')">In the world</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'region\' }" ng-click="$ctrl.changeLocation(\'region\')">In&nbsp;{{::$ctrl.details.Region.Current.Name}}</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'search\' }" ng-click="$ctrl.changeLocation(\'search\')">Search location</li></ul></nav></div></div></div><div class="where-to-eat__tell-us" ng-if="!$ctrl.isTellUs && !$ctrl.restaurantsLoading && $ctrl.restaurants.Data.length > 0"><div class="recommend"><button class="btn btn--center btn--gray-border btn--lightest-gray-background" ng-click="$ctrl.tellUsWhere()"><i class="icon icon__chat-cloud-star"></i> <span>Recommend a restaurant with good {{$ctrl.details.Name}}</span></button></div></div><div ng-if="$ctrl.selectedLocation === \'search\'" class="where-to-eat__autocomplete"><ta-mobile-region-search on-selection="$ctrl.onSelection(regionData)"></ta-mobile-region-search></div><div ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-modal details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-modal></div><div class="food-summary" ng-if="$ctrl.restaurants.Data.length > 0"><div class="item" ng-repeat="restaurant in $ctrl.restaurants.Data"><div><div class="item__header"><div class="item__header__right"><span ng-if="$ctrl.selectedLocation !== \'nearme\'" class="item__header__left">{{$index + 1}}.</span><h3 ng-click="$ctrl.redirect(restaurant.UrlLink)" class="h3">{{restaurant.Name}}</h3><div class="distance" ng-if="restaurant.Distance && $ctrl.selectedLocation === \'nearme\'"><i class="icon icon--pin"></i> <span>{{$ctrl.getDistance(restaurant)}}</span></div><div class="region-country" ng-if="$ctrl.selectedLocation !== \'nearme\'"><i class="icon icon--pin" ng-if="$ctrl.selectedLocation === \'region\'"></i> <img ng-if="restaurant.RegionEmblemImage && ($ctrl.selectedLocation === \'world\' || $ctrl.selectedLocation === \'search\')" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{restaurant.RegionEmblemImage}}"> <a href="{{restaurant.RegionUrl}}" ng-if="restaurant.RegionName">{{restaurant.RegionName}}</a>,&nbsp <a href="{{restaurant.CountryUrl}}">{{restaurant.CountryName}}</a></div><div class="location-info"><span class="address" ng-bind-html="$ctrl.splitAddress(restaurant.Address) | html"></span> <span class="directions" ng-click="$ctrl.redirectToGoogleMaps(restaurant.Address)">Directions</span></div></div></div><div ng-if="restaurant.Image" class="item__main"><div class="item__image-wrap"><a href="{{restaurant.UrlLink}}/{{restaurant.DishUrl}}"><img class="thumb" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.Image +\'?width=800&height=513\' }}"></a><div class="similar-list__item-rating"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(restaurant)" is-rated="$ctrl.isRestaurantRated(restaurant.Id)" avg-rating="$ctrl.getRestaurantAvgRating(restaurant.Id)"></ta-restaurant-rating-control></div></div></div><div class="item__footer" ng-if="restaurant.Critic"><div class="recommendations" ta-recommended-by name="restaurant.Critic.Name" url="restaurant.Critic.ProfileUrl" source="restaurant.Critic.Source" count="restaurant.CriticCount"></div><blockquote cite="{{restaurant.Critic.Source}}" class="recommendation">{{restaurant.Critic.Content}}</blockquote><div class="critic"><a ng-if="restaurant.Critic.ProfileUrl" class="critic-link" ng-href="{{restaurant.Critic.ProfileUrl}}" target="_blank"><div class="critic-profile-image" ng-if="restaurant.Critic.ProfilePicture"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{restaurant.Critic.ProfilePicture}}"></div><div><strong>{{restaurant.Critic.Name}}</strong> <span>{{restaurant.Critic.Description}}</span></div></a> <a ng-if="!restaurant.Critic.ProfileUrl && restaurant.Critic.Source" class="critic-link" ng-href="{{restaurant.Critic.Source | acceptLink}}"><div class="critic-profile-image" ng-if="restaurant.Critic.ProfilePicture"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{restaurant.Critic.ProfilePicture}}"></div><div><strong>{{restaurant.Critic.Name}}</strong> <span>{{restaurant.Critic.Description}}</span></div></a></div></div><div ng-if="restaurant.Critics && restaurant.Critics.length" class="view-more" ng-click="$ctrl.openMoreRecommendations(restaurant)"><span>VIEW MORE RECOMMENDATIONS</span> <i class="icon icon--arrow icon--arrow--right"></i></div></div></div><div ng-show="$ctrl.loadMoreRestaurantsData" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.showLoadMoreBtn" class="food-types__view-more food-types__load-more similar-list__view-more"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">LOAD MORE</button></div><div class="where-to-eat__view-more where-to-eat__view-more-btn"><ta-view-more-button items="$ctrl.restaurants" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.restaurantsLoading" on-view-more="$ctrl.loadMoreRestaurants()"></ta-view-more-button></div></div><div ng-if="$ctrl.restaurants.Data.length === 0 && !$ctrl.restaurantsLoading" class="where-to-eat__no-results"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">We\'re still collecting the most relevant info.</h2></div><div ng-show="$ctrl.restaurantsLoading" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="!$ctrl.restaurants && !$ctrl.isLocationOn() && $ctrl.selectedLocation === \'nearme\'" class="location-prompt location-prompt--page"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div class="where-to-eat__tell-us"><div class="recommend"><button class="btn btn--center btn--gray-border btn--lightest-gray-background" ng-click="$ctrl.tellUsWhere()"><i class="icon icon__chat-cloud-star"></i> <span>Recommend a restaurant with good {{$ctrl.details.Name}}</span></button></div><div ng-if="$ctrl.isTellUs" class="comment comment--vote"><ta-dish-restaurant-comment details="$ctrl.details" close-modal="$ctrl.closeTellUsWhere()"></ta-dish-restaurant-comment></div></div></section></div><div class="modal where-to-eat__modal" modal-directive close-modal="$ctrl.closeModal()" ng-if="$ctrl.isMoreRecommendationsOpen"><div class="modal__container"><div class="modal__header"><span class="where-to-eat__modal-header">RECOMMENDATIONS</span> <i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body" ng-repeat="critic in $ctrl.selectedRestaurant.Critics"><div class="where-to-eat__modal-recommendations"><blockquote cite="{{critic.Source}}" class="recommendation">{{::critic.Content}}</blockquote><div class="critic"><a ng-if="critic.ProfileUrl" class="critic-link" ng-href="{{critic.ProfileUrl}}"><div class="critic-profile-image" ng-if="critic.ProfilePicture"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{critic.ProfilePicture}}"></div><div><strong>{{critic.Name}}</strong> <span>{{critic.Description}}</span></div></a> <a ng-if="!critic.ProfileUrl && critic.Source" class="critic-link" ng-href="{{critic.Source | acceptLink}}" target="_blank"><div class="critic-profile-image" ng-if="critic.ProfilePicture"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{critic.ProfilePicture}}"></div><div><strong>{{critic.Name}}</strong> <span>{{critic.Description}}</span></div></a></div></div></div><div class="footer"></div></div></div>');$templateCache.put('/content/scripts/app/components/dish-details/dish-mobile-overview/ta-dish-mobile-main.html','<div class="mobile-dish-container" ta-background-sections to="\'.ta-parent-section\'"><section class="food-detail" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div class="food-detail__image-gallery" ng-if="$ctrl.preloadedDetails.PreviewImage.Image || $ctrl.preloadedDetails.Images.length || $ctrl.preloadedDetails.MobileImages"><ta-image-gallery-mobile preview="$ctrl.preloadedDetails.PreviewImage" photos="$ctrl.preloadedDetails.Images" mobile-photos="$ctrl.preloadedDetails.MobileImages"></ta-image-gallery-mobile></div><div class="food-detail__header"><div class="group"><a ng-href="{{$ctrl.preloadedDetails.Group.UrlLink}}">{{$ctrl.preloadedDetails.Group.Name}}</a></div><div class="food-detail__header-title"><h1 class="h1 h1--bold h1--lowercase" ng-if="$ctrl.preloadedDetails.Certificates.length === 0"><span>{{$ctrl.preloadedDetails.Name}}</span></h1><div class="certificate__container certificate__container--multiple" ng-if="$ctrl.preloadedDetails.Certificates.length > 0"><h1 class="h1 h1--bold h1--lowercase"><span>{{$ctrl.preloadedDetails.Name}}</span> <span class="certificate certificate--multiple"><a ng-repeat="c in $ctrl.preloadedDetails.Certificates" ng-href="{{c.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h1" ng-repeat="c in $ctrl.preloadedDetails.Certificates" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::c.Image}}?mw=35\');"></i></a></span></h1></div><div class="food-detail__header-map" ng-if="$ctrl.imageData && $ctrl.preloadedDetails.AdditionalRegions.length < 1"><a ng-href="{{::$ctrl.preloadedDetails.Region.Current.UrlLink}}" target="_blank"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></a></div><div class="food-detail__header-map" ng-if="$ctrl.imageData && $ctrl.moreRegionsVisible && $ctrl.preloadedDetails.AdditionalRegions.length > 1"><a ng-href="{{::$ctrl.preloadedDetails.Region.Current.UrlLink}}" target="_blank"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></a></div></div><div class="location" ng-if="!$ctrl.preloadedDetails.AdditionalRegions.length"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.preloadedDetails.Region.Current.EmblemImage || $ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=40"> <a class="region" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}">{{::$ctrl.getRegionName()}}</a></div><div class="location" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length"><img ng-if="$ctrl.preloadedDetails.Region.Current.EmblemImage" ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=40"><div><a class="region" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}">{{::$ctrl.getRegionName()}} and</a> <span ng-click="$ctrl.showMoreRegions()">{{$ctrl.preloadedDetails.AdditionalRegionText}}</span></div></div><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()" ng-if="$ctrl.moreRegionsVisible"></i><div class="location location--additional" ng-if="$ctrl.moreRegionsVisible" ng-repeat="additionalRegion in $ctrl.preloadedDetails.AdditionalRegions"><img ng-class="{ \'img--highlight\' : additionalRegion.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{additionalRegion.Current.EmblemImage || additionalRegion.Parent.EmblemImage}}?mw=40"> <a class="region" href="{{additionalRegion.Current.UrlLink}}">{{::$ctrl.getRegionName(additionalRegion)}}</a><div class="food-detail__header-map"><ta-map-image ng-if="$ctrl.regionsImageData[$index]" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image></div></div><div class="score"><ta-comment-button include-rating-control="true"></ta-comment-button></div></div></section><div class="food-navigation food-navigation--food-item" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div class="about-food ta-border--top"><div class="about-food__menu"><nav id="about-food__nav-regular" class="about-food__nav-fix"><div ta-show-nav-arrow></div><ul class="about-food__nav__list about-food__nav__list--tall"><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page === \'\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}" target="_self">Overview</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'recipe\'}" ng-if="$ctrl.preloadedDetails.HasRecipes"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/recipe" target="_self">Recipe</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'wheretoeat\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/wheretoeat" target="_self">Where to eat</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'comments\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/comments" target="_self">Comments</a></li></ul></nav></div></div></div><div class="sticky-nav__top" ng-if="$ctrl.preloadedDetails" id="nav-stick" style="margin-top: 0px; display:none;" ta-show-nav offset="$ctrl.getStickyNavOffset()" details="$ctrl.details" url-links="$ctrl.urlLinks" active-page="$ctrl.pageStatus.page"></div><div id="pg_content_holder" class="content-holder" ng-class="{ \'content-holder--subpage\' : $ctrl.pageStatus.page !== \'\' }"><ta-dish-mobile-overview ng-if="$ctrl.pageStatus.page ===\'\'" preloaded-details="$ctrl.preloadedDetails" rating="$ctrl.dishRating" additional-region-id="$ctrl.additionalRegionId"></ta-dish-mobile-overview><ta-dish-mobile-where-to-eat ng-if="$ctrl.pageStatus.page ===\'wheretoeat\'" where-to-eat-region-id="$ctrl.whereToEatRegionId" name="$ctrl.name" details="$ctrl.preloadedDetails"></ta-dish-mobile-where-to-eat><ta-recipe ng-if="$ctrl.pageStatus.page ===\'recipe\'" template="mobile" entity="DISH" variation-id="$ctrl.recipeVariationId"></ta-recipe><ta-dish-mobile-comments ng-if="$ctrl.pageStatus.page ===\'comments\'" details="$ctrl.preloadedDetails" rating="$ctrl.dishRating"></ta-dish-mobile-comments><section ng-show="!$ctrl.pageStatus.isSectionLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></section></div><div class="promotion" ng-show="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded"><div ta-google-ad id="TA_MR_DISH_EXPLORE" name="/21703950087/M_TA_test" platform="mobile"></div></div></div><ta-comment-process-mobile ng-if="$ctrl.userCommentStatus.isCommentProcess && $ctrl.pageStatus.page !==\'recipe\'" details="$ctrl.preloadedDetails" rating-callback="$ctrl.refreshRatingData(comment)"></ta-comment-process-mobile><ta-footer-mobile ng-show="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/dish-details/dish-mobile-overview/ta-dish-mobile-overview.html','<section class="food-ingredients-section ta-border--top" ng-class="{ \'food-ingredients-section--border-bottom ta-border--bottom\' : $ctrl.preloadedDetails.InfographicImage && $ctrl.preloadedDetails.InfographicImage.Image }" ng-if="$ctrl.preloadedDetails.foodIngredients.isValid"><ta-food-ingredients items="$ctrl.preloadedDetails.foodIngredients.data" template="mobile"></ta-food-ingredients></section><section class="infographic-section ta-border--bottom" ng-if="$ctrl.preloadedDetails.InfographicImage && $ctrl.preloadedDetails.InfographicImage.Image"><div class="infographic__container"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.InfographicImage.Image}}?mw=900" alt="{{$ctrl.preloadedDetails.Name}}-infographic"></div></section><section ng-if="$ctrl.preloadedDetails" class="about-food__body"><div class="about-food__text" ng-if="$ctrl.preloadedDetails.Description" read-more-by-sentence read-more-txt="{{$ctrl.preloadedDetails.Description}}"></div></section><div class="promotion"><div ta-google-ad id="TA_MR_DISH_EXPLORE_RATING" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-food-types-mobile ng-if="$ctrl.types.length > 0" data="$ctrl.types" name="$ctrl.preloadedDetails.Name" on-order-change="$ctrl.onFoodTypesOrderChange(orderBy)"></ta-food-types-mobile><div class="ta-parent-section" ng-if="$ctrl.partOf.Data.length"><ta-pairing-mobile title="\'Part of\'" pairings="$ctrl.partOf.Data"></ta-pairing-mobile></div><div class="ta-parent-section" ng-if="$ctrl.pairingTips.BeveragePairs.length > 0 || $ctrl.pairingTips.ToServeWith.length > 0"><ta-pairing-mobile ng-if="$ctrl.pairingTips.BeveragePairs.length > 0" title="\'Pair with\'" pairings="$ctrl.pairingTips.BeveragePairs"></ta-pairing-mobile><div class="pairing-tips__separator" ng-if="$ctrl.pairingTips.ToServeWith.length > 0"></div><ta-pairing-mobile ng-if="$ctrl.pairingTips.ToServeWith.length > 0" title="\'Serve with\'" pairings="$ctrl.pairingTips.ToServeWith"></ta-pairing-mobile></div><section ng-if="$ctrl.preloadedDetails.HasRecipes" class="authentic-recipe authentic-recipe--noborder authentic-recipe--overview ta-parent-section"><div class="recipe__variations-list recipe__variations-list--horizontal" ng-if="$ctrl.recipeVariations && $ctrl.recipeVariations.length > 1"><div class="recipe__variations-list-title"><h2 class="h2 h2--bold h2--capitalize">Recipe variations</h2></div><ta-variations-list template="mobile" items="$ctrl.recipeVariations" selected-variation-id="$ctrl.recipeVariations[0].RecipeVariationId"></ta-variations-list></div><h1 class="h1 h1--center"><span class="top">{{$ctrl.preloadedDetails.Name}}&nbsp;</span> <span class="bottom">Authentic recipe</span></h1><div class="authentic-recipe__content" ng-if="$ctrl.mainRecipeVariation"><div class="authentic-recipe__preparation" ng-if="$ctrl.mainRecipeVariation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CustomTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.mainRecipeVariation.Time.CustomTime.CustomLabel}}</span> <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.CustomTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">RESTING <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.mainRecipeVariation.Time.TotalTime)}}</strong></div></div></div><div class="authentic-recipe__summary" ng-if="$ctrl.mainRecipeVariation.Description" read-more number-of-letters="200" read-more-txt="{{$ctrl.mainRecipeVariation.Description}}"></div><div class="authentic-recipe__ingredients" ng-if="$ctrl.recipeIngredientsPreview.length"><div class="authentic-recipe__ingredients-title"><h3 class="h3 h3--capitalize authentic-recipe__ingredients-title-left">Ingredients</h3><div class="authentic-recipe__ingredients-title-right" ng-if="$ctrl.mainRecipeVariation.Servings"><span>{{::$ctrl.mainRecipeVariation.Servings}} {{$ctrl.mainRecipeVariation.Servings === 1 ? \'serving\' : \'servings\'}}</span></div></div><div class="authentic-recipe__ingredients-list"><ul class="recipe__ingredients"><li ng-repeat="ingredientElement in $ctrl.recipeIngredientsPreview track by $index" ng-class="{ \'recipe__ingredients-item\' : ingredientElement.Description, \'authentic-recipe__ingredients-list-item--ultimo\' : $ctrl.recipeIngredientsPreview.length > 7 && $index === 6, \'authentic-recipe__ingredients-list-item--penultimo\' : $ctrl.recipeIngredientsPreview.length > 7 && $index === 5, \'recipe__ingredients-label\' : !ingredientElement.Description }" ng-if="$index < 7"><h4 class="recipe__ingredients-title h4 h4--extrabold h4--muli h4--uppercase" ng-if="ingredientElement.name">{{::ingredientElement.name}}</h4><div ng-if="ingredientElement.Description">{{ingredientElement.Description}}</div></li><li class="recipe__ingredients-view-more"><a class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self">VIEW RECIPE</a></li></ul></div></div><div class="recipe__ingredients-view-more" ng-if="!$ctrl.recipeIngredientsPreview.length"><a class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self">VIEW RECIPE</a></div></div></section><div class="where_to_eat ta-parent-section"><section><h1 class="h1 h1--center"><span class="top">Where to eat&nbsp;</span> <span class="bottom">the best {{$ctrl.preloadedDetails.Name}}?</span></h1><div class="food-navigation"><div class="about-food"><div class="about-food__menu"><nav id="about-food__nav-regular" class="about-food__nav-fix"><div ta-show-nav-arrow></div><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--scrollable"><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'nearme\' }" ng-click="$ctrl.changeLocation(\'nearme\')">Near me</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'world\' }" ng-click="$ctrl.changeLocation(\'world\')">In the world</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'region\' }" ng-click="$ctrl.changeLocation(\'region\')">In&nbsp;{{::$ctrl.preloadedDetails.Region.Current.Name}}</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedLocation === \'search\' }" ng-click="$ctrl.changeLocation(\'search\')">Search location</li></ul></nav></div></div></div><div class="where-to-eat" ng-if="$ctrl.selectedLocation === \'search\'"><ta-mobile-region-search on-selection="$ctrl.onSelection(regionData)"></ta-mobile-region-search></div><div ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-modal details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-modal></div><div class="popular-dishes popular-dishes--restaurant" ng-if="$ctrl.displayedRestaurants && $ctrl.displayedRestaurants.Count > 0"><div class="popular-dishes-list" ng-if="$ctrl.displayedRestaurants.Data.length !== 0"><div class="popular-dish" ng-repeat="restaurant in $ctrl.displayedRestaurants.Data" target="_blank"><div class="popular-dish__position" ng-if="$ctrl.selectedLocation !== \'nearme\' && $ctrl.selectedLocation !== \'search\'"><span>{{$index + 1}}</span></div><div class="thumb"><a href="{{restaurant.UrlLink}}" ng-if="restaurant.Image != null"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::restaurant.Image}}?w=236&h=164"></a> <a href="{{restaurant.UrlLink}}" ng-if="restaurant.Image == null" ng-style="{\'background-image\': \'url(\\\'{{$ctrl.randomImageUrl}}\\\')\'}"></a><div class="similar-list__item-rating"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(restaurant)" is-rated="$ctrl.isRestaurantRated(restaurant.Id)" avg-rating="$ctrl.getRestaurantAvgRating(restaurant.Id)"></ta-restaurant-rating-control></div></div><div class="desc"><a href="{{restaurant.UrlLink}}"><h3 class="h3 h3--large">{{restaurant.Name}}</h3></a><div class="item-location"><i class="icon icon--pin"></i> <span ng-if="$ctrl.selectedLocation !== \'nearme\'">{{restaurant.RegionName}}</span> <span class="distance" ng-if="$ctrl.selectedLocation === \'nearme\'">{{$ctrl.getDistance(restaurant)}}</span> <span class="dot-divide">\xB7</span> <a ng-click="$ctrl.redirectToGoogleMaps(restaurant.Address)">Directions</a></div><div class="top-dish recommendation" ng-if="restaurant.Critic" ta-recommended-by name="restaurant.Critic.Name" url="restaurant.Critic.ProfileUrl" source="restaurant.Critic.Source" count="restaurant.CriticCount"></div></div></div></div></div><div ng-if="$ctrl.displayedRestaurants.Data.length === 0" class="where-to-eat__no-results"><div class="h2 h2--center h2--muli h2--bold h2--lowercase">We\'re still collecting the most relevant info.</div></div><div ng-if="!$ctrl.displayedRestaurants && !$ctrl.isLocationOn() && $ctrl.selectedLocation === \'nearme\'" class="where-to-eat__no-results location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div class="where-to-eat__tell-us"><div class="recommend"><button class="btn btn--center btn--gray-border btn--lightest-gray-background" ng-click="$ctrl.tellUsWhere()"><i class="icon icon__chat-cloud-star"></i> <span>Recommend a restaurant with good {{$ctrl.preloadedDetails.Name}}</span></button></div><div ng-if="$ctrl.isTellUs" class="comment comment--vote"><ta-dish-restaurant-comment details="$ctrl.preloadedDetails" close-modal="$ctrl.closeTellUsWhere()"></ta-dish-restaurant-comment></div></div><div ng-if="$ctrl.displayedRestaurants.Count - $ctrl.displayedRestaurants.Data.length > 0" class="where_to_eat__view-more"><a class="btn btn--nopadding btn--underscore btn--no-bgcolor btn--black-text btn--extrabold btn--inline" ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/wheretoeat" target="_self">VIEW MORE</a></div></section></div><section ng-if="$ctrl.events.Data.length > 0" class="ta-parent-section festivals-dish"><div class="festivals"><section><h1 class="h1 h1--center"><span>{{$ctrl.preloadedDetails.Name}} festivals</span></h1><ta-mobile-food-order on-order-change="$ctrl.onEventsOrderChange(orderBy)" options="$ctrl.eventOrderOptions"></ta-mobile-food-order><div class="event-horizontal-card"><ul class="event-horizontal-card__list"><li ng-repeat="event in $ctrl.events.Data track by $index" class="event-horizontal-card__list-item" ng-class="{ \'event-horizontal-card__list-item--single\' : $ctrl.events.Data.length < 2 }"><ta-event-horizontal-mobile event="event"></ta-event-horizontal-mobile></li></ul></div></section></div></section><section ng-if="$ctrl.overviewDetails && $ctrl.overviewDetails.Videos.length" class="related-videos ta-parent-section"><ta-related-videos template="mobile" videos="$ctrl.overviewDetails.Videos"></ta-related-videos></section><section class="similar-list ta-parent-section" ng-if="$ctrl.otherVarieties.Items.Data.length > 0 && !$ctrl.preloadedDetails.IsGroup"><div class="similar-list__title"><h2 class="h1 h1--center h1--lowercase">Other {{::$ctrl.otherVarieties.ParentName}} varieties</h2></div><ta-similar-list-mobile items="$ctrl.otherVarieties.Items.Data" is-region="false"></ta-similar-list-mobile></section><section class="similar-list ta-parent-section" ng-if="$ctrl.similarDishesData.SimilarFoodEntities.length > 0"><a ng-href="{{::$ctrl.preloadedDetails.Group.UrlLink}}" class="similar-list__title"><h2 class="h1 h1--center h1--lowercase">{{::$ctrl.similarDishesData.SectionTitle}} {{::$ctrl.preloadedDetails.Group.PluralName}}</h2></a><ta-similar-list-mobile items="$ctrl.similarDishesData.SimilarFoodEntities" is-region="false"></ta-similar-list-mobile></section><section ng-if="$ctrl.moreFromRegion && $ctrl.moreFromRegion.SimilarFoodEntities.length > 0" class="similar-list ta-parent-section"><a ng-href="{{::$ctrl.preloadedDetails.Region.Current.UrlLink}}" class="similar-list__preview"><div class="similar-list__preview-image" ng-if="$ctrl.preloadedDetails.Region.Current.CoverImage.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.preloadedDetails.Region.Current.CoverImage.Image}}?mw=600"></div><div class="similar-list__preview-image similar-list__preview-image--random" ng-if="!$ctrl.preloadedDetails.Region.Current.CoverImage.Image"><img ta-lazy-load lazy-source="random"></div><h2 class="h1 h1--center h1--lowercase">{{$ctrl.getMoreFromRegionTitle()}}</h2></a><ta-similar-list-mobile items="$ctrl.moreFromRegion.SimilarFoodEntities" is-region="true"></ta-similar-list-mobile></section><section ng-if="$ctrl.overviewDetails.Links && $ctrl.overviewDetails.Links.length" class="related-news ta-parent-section"><ta-related-news template="mobile" news-articles="$ctrl.overviewDetails.Links"></ta-related-news></section><section class="ta-parent-section" ng-if="$ctrl.rating && $ctrl.ratingCardActions && $ctrl.overviewDetails.Badges"><h4 class="rating-card__title h4 h4--bold h4--muli h4--uppercase">RATINGS</h4><ta-rating-card template="basic" platform="mobile" details="$ctrl.rating" badges="$ctrl.overviewDetails.Badges" actions="$ctrl.ratingCardActions"></ta-rating-card></section>');$templateCache.put('/content/scripts/app/components/general/back-to-top/ta-back-to-top.html','<span class="js-back-to-top ta-back-to-top ta-back-to-top--hide ta ta-arrow-slim" ng-class="{\'back-to-top--mobile\' : $ctrl.isMobile}"></span>');$templateCache.put('/content/scripts/app/components/general/cookies/ta-cookies.html','<div class="cookies" ng-if="!$ctrl.hasCookie"><div class="btn btn--small btn--white-border" ng-click="$ctrl.putCookie()">Got it</div><div>This website uses cookies to enhance your browsing experience. <a href="#">Learn more</a></div></div>');$templateCache.put('/content/scripts/app/components/general/footer/ta-footer-desktop.html','<footer id="footer" class="footer footer"><div class="footer__wrap"><div class="footer__logo"><a href="/"><i class="ta-logo"></i></a> <span>WORLD FOOD ATLAS</span></div><div class="footer__statistics"><ul><li><span>{{$ctrl.information.DishCount}}</span>traditional dishes</li><li><span>{{$ctrl.information.IngredientCount}}</span>local ingredients</li><li><span>{{$ctrl.information.RestaurantCount}}</span>authentic restaurants</li><li><span>{{$ctrl.information.CriticCount}}</span>food experts</li></ul></div><div class="footer__contact"><div class="left"><span>Contact us</span><a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="right"><button ng-click="$ctrl.toggleSubmitInformation()" class="btn btn--gray-border btn--light-border btn--regular">Submit info or photo</button></div></div><ta-submit-information-desktop on-close-modal="$ctrl.toggleSubmitInformation()" ng-if="$ctrl.isSubmitInformationShown"></ta-submit-information-desktop><div class="footer__wrap footer__wrap--border-top"><div class="footer__navigation"><div class="nav nav--footer nav--footer--desktop"><nav><ul><li><a href="/about">About us</a></li><li><a href="/sitemap">Site map</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/terms">Terms & conditions</a></li></ul></nav></div></div><small class="footer__copyright">\xA9 {{::$ctrl.currentYear}} AtlasMedia Ltd. (EU) - All Rights Reserved</small><div class="footer__social"><ul><li>Follow us</li><li><a href="https://www.facebook.com/TasteAtlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--desktop icon--social--facebook--desktop"></i> <i class="icon icon--social icon--tablet icon--social--facebook"></i></a></li><li><a href="https://twitter.com/TasteAtlas" target="_blank" rel="nofollow"><i class="icon icon--social icon--desktop icon--social--twitter--desktop"></i> <i class="icon icon--social icon--tablet icon--social--twitter"></i></a></li><li><a href="https://www.pinterest.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--desktop icon--social--pinterest--desktop"></i> <i class="icon icon--social icon--tablet icon--social--pinterest"></i></a></li><li><a href="https://www.instagram.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--desktop icon--social--instagram--desktop"></i> <i class="icon icon--social icon--tablet icon--social--instagram"></i></a></li><li><a href="https://www.tiktok.com/@tasteatlas?lang=en" target="_blank" rel="nofollow"><i class="icon icon--social icon--desktop icon--social--tiktok--desktop"></i> <i class="icon icon--social icon--tablet icon--social--tiktok--mobile"></i></a></li><li><div class="fb-like" data-href="https://www.facebook.com/TasteAtlas/" data-layout="button_count" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div></li></ul><div id="fb-root"></div><script>\r\n                    (function (d, s, id) {\r\n                        var js, fjs = d.getElementsByTagName(s)[0];\r\n                        if (d.getElementById(id)) return;\r\n                        js = d.createElement(s); js.id = id;\r\n                        js.src = \'https://connect.facebook.net/hr_HR/sdk.js#xfbml=1&version=v2.11\';\r\n                        fjs.parentNode.insertBefore(js, fjs);\r\n                    }(document, \'script\', \'facebook-jssdk\'));\r\n                </script></div></div></div></footer><ta-cookies></ta-cookies>');$templateCache.put('/content/scripts/app/components/general/footer/ta-footer-mobile.html','<footer id="footer" class="footer"><div class="footer__logo"><a href="/"><i class="ta-logo ta-logo--white"></i></a> <span>WORLD FOOD ATLAS</span></div><div class="footer__statistics"><ul><li><span>{{$ctrl.information.DishCount}}</span>traditional dishes</li><li><span>{{$ctrl.information.IngredientCount}}</span>local ingredients</li><li><span>{{$ctrl.information.RestaurantCount}}</span>authentic restaurants</li><li><span>{{$ctrl.information.CriticCount}}</span>food experts</li></ul></div><div class="footer__contact"><ta-submit-information-mobile></ta-submit-information-mobile><a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="footer__social"><ul><li>Follow us</li><li><a href="https://www.pinterest.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--pinterest"></i></a></li><li><a href="https://twitter.com/TasteAtlas" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--twitter"></i></a></li><li><a href="https://www.instagram.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--instagram"></i></a></li><li><a href="https://www.facebook.com/TasteAtlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--facebook"></i></a></li><li><a href="https://www.tiktok.com/@tasteatlas?lang=en" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--tiktok--mobile"></i></a></li><li><div class="fb-like" data-href="https://www.facebook.com/TasteAtlas/" data-layout="button_count" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div></li></ul><div id="fb-root"></div><script>\r\n                    (function (d, s, id) {\r\n                        var js, fjs = d.getElementsByTagName(s)[0];\r\n                        if (d.getElementById(id)) return;\r\n                        js = d.createElement(s); js.id = id;\r\n                        js.src = \'https://connect.facebook.net/hr_HR/sdk.js#xfbml=1&version=v2.11\';\r\n                        fjs.parentNode.insertBefore(js, fjs);\r\n                    }(document, \'script\', \'facebook-jssdk\'));\r\n        </script></div><div class="footer__navigation"><div class="nav nav--footer"><nav><ul><li><a href="/about">About us</a></li><li><a href="/sitemap">Site map</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/terms">Terms & conditions</a></li></ul></nav></div></div><small class="footer__copyright">\xA9 {{::$ctrl.currentYear}} AtlasMedia Ltd. (EU) - All Rights Reserved</small></footer><ta-cookies></ta-cookies>');$templateCache.put('/content/scripts/app/components/general/hamburger/ta-hamburger-mobile.html','<i class="icon icon--hamburger" ng-click="$ctrl.openHamburger()"></i><div id="mobile-hamburger-id" ng-if="$ctrl.isHamburgerShown" ng-swipe-left="$ctrl.close()" class="offcanvas"><div id="hamburger-overlay" class="offcanvas__overlay" ng-click="$ctrl.closeHamburger()"></div><div class="offcanvas__container"><section class="offcanvas__header"><a class="logo logo--hamburger" href="/"><img class="ta-logo-redesign" src="/Content/layout-shared/layout/icons/TA-main-logo-header.svg" alt="TasteAtlas logo"></a></section><section class="offcanvas__main"><div class="statistics"><ul><li><span>{{$ctrl.information.DishCount}}</span>Dishes</li><li><span>{{$ctrl.information.IngredientCount}}</span>Ingredients</li><li><span>{{$ctrl.information.RestaurantCount}}</span>Restaurants</li><li><span>{{$ctrl.information.CriticCount}}</span>Food critics</li></ul></div><div class="pages"><nav><ul><li><a href="/about">About us</a></li><li><a href="/sitemap">Site map</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/terms">Terms & conditions</a></li></ul></nav></div></section><section class="offcanvas__footer"><div class="contact"><ta-submit-information-mobile></ta-submit-information-mobile><a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="social"><span>Follow us</span><ul><li><a href="https://www.pinterest.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--pinterest--white"></i></a></li><li><a href="https://twitter.com/TasteAtlas" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--twitter--white"></i></a></li><li><a href="https://www.instagram.com/tasteatlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--instagram--white"></i></a></li><li><a href="https://www.facebook.com/TasteAtlas/" target="_blank" rel="nofollow"><i class="icon icon--social icon--social--facebook--white"></i></a></li><li><div class="fb-like" data-href="https://www.facebook.com/TasteAtlas/" data-layout="button_count" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div></li></ul><div id="fb-root"></div><script>\r\n                    (function (d, s, id) {\r\n                        var js, fjs = d.getElementsByTagName(s)[0];\r\n                        if (d.getElementById(id)) return;\r\n                        js = d.createElement(s); js.id = id;\r\n                        js.src = \'https://connect.facebook.net/hr_HR/sdk.js#xfbml=1&version=v2.11\';\r\n                        fjs.parentNode.insertBefore(js, fjs);\r\n                    }(document, \'script\', \'facebook-jssdk\'));\r\n                </script></div></section></div></div>');$templateCache.put('/content/scripts/app/components/general/header/ta-header-bottom-desktop.html','<div class="header-bottom" click-outside="$ctrl.resetAllMenus()"><div class="header-bottom--wrapper header-bottom__main-menu flex"><div class="menu-item menu-item--l js-ga-nav" data-tag="nav_near_me"><a id="near-me-item" ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 1}" ng-click="$ctrl.openNearMe()" data-width="Near Me&nbsp;&nbsp;&nbsp;&nbsp;">Near Me <i ng-if="$ctrl.selectedMenuItem.id != 1 || ($ctrl.selectedMenuItem.id == 1 && !$ctrl.showSubmenu)" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedMenuItem.id == 1 && $ctrl.showSubmenu" class="ta ta-arrow_up_light_black"></i></a></div><div class="menu-item menu-item--l js-ga-nav" data-tag="nav_destinations"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 2}" ng-click="$ctrl.toggleMenuRoot(2)" data-width="Destinations&nbsp;&nbsp;&nbsp;&nbsp;">Destinations <i ng-if="$ctrl.selectedMenuItem.id != 2 || ($ctrl.selectedMenuItem.id == 2 && !$ctrl.showSubmenu)" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedMenuItem.id == 2 && $ctrl.showSubmenu" class="ta ta-arrow_up_light_black"></i></a></div><div class="menu-item js-ga-nav" data-tag="nav_best_food"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 3}" href="/best/dishes?ref=main-menu" data-width="Best Food">Best Food</a></div><div class="menu-item js-ga-nav" data-tag="nav_maps"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 4}" href="/map?ref=main-menu" data-width="Maps">Maps</a></div><div class="menu-item js-ga-nav" data-tag="nav_recipes"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 5}" href="/recipes?ref=main-menu" data-width="Recipes">Recipes</a></div><div class="menu-item js-ga-nav" data-tag="nav_origin_labels"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 6}" href="/certificates?ref=main-menu" data-width="Origin Labels">Origin Labels</a></div><div class="menu-item js-ga-nav" data-tag="nav_quiz"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 7}" href="/quiz?ref=main-menu" data-width="Quiz">Quiz</a></div><div class="menu-item menu-item--l js-ga-nav" data-tag="nav_food_categories"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 8 }" ng-click="$ctrl.toggleMenuRoot(8)" data-width="Food Categories&nbsp;&nbsp;&nbsp;&nbsp;">Food Categories <i ng-if="$ctrl.selectedMenuItem.id != 8 || ($ctrl.selectedMenuItem.id == 8 && !$ctrl.showSubmenu)" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedMenuItem.id == 8 && $ctrl.showSubmenu" class="ta ta-arrow_up_light_black"></i></a></div></div><div class="header-bottom--wrapper" ng-if="$ctrl.selectedMenuItem.id == 1 && $ctrl.showSubmenu"><div class="header-bottom__submenu header-bottom__submenu--near-me"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)" ng-if="$ctrl.nearMeRegionData.length === 0 && !$ctrl.isLocationOn()"></ta-location-prompt-mobile><div class="header-bottom__submenu--second-near-me" ng-if="!$ctrl.nearMeLayersLoader && $ctrl.userClicked"><div class="region-holder"><a ng-if="$ctrl.nearMeRegionData.RegionName" class="submenu-item" ng-href="{{$ctrl.nearMeRegionData.RegionUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeRegionData.RegionName}}</a> <a ng-if="$ctrl.nearMeParentRegionData.ParentRegionName" class="submenu-item" ng-href="{{$ctrl.nearMeParentRegionData.ParentRegionUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeParentRegionData.ParentRegionName}}</a> <a ng-if="$ctrl.nearMeCountryData.CountryName" class="submenu-item" ng-href="{{$ctrl.nearMeCountryData.CountryUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeCountryData.CountryName}}</a></div><a class="submenu-item" href="/nearme?ref=main-menu">Restaurants Near me</a></div><div class="null-or-500-state" ng-if="$ctrl.locationEnabled && $ctrl.nullOr500ServerError"><p>Something went wrong. Please <span ng-click="$ctrl.openNearMe()">try again.</span></p></div><div class="profile-list--loader" ng-if="$ctrl.nearMeLayersLoader" style="max-height: 160px; width: 300px;"><i class="fa fa-spinner fa-spin"></i></div></div></div><div class="header-bottom--wrapper" ng-if="$ctrl.selectedMenuItem.id == 2 && $ctrl.showSubmenu"><div class="header-bottom__submenu header-bottom__submenu--destinations header-bottom__submenu--centered"><div class="header-bottom__submenu--root"><div ng-repeat="continent in $ctrl.continents" class="submenu-item submenu-item--root flex" ng-click="$ctrl.toggleContinentItems(continent)" ng-class="{\'submenu-item__active\': $ctrl.selectedContinent == continent}"><span>{{continent.name}}</span> <i ng-if="$ctrl.selectedContinent != continent" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedContinent == continent" class="ta ta-arrow_up_light_black"></i></div></div><div class="header-bottom__submenu--items" ng-if="$ctrl.selectedContinent != null && !$ctrl.destinationsLayersLoader"><div class="list-holder flex"><div ng-repeat="country in $ctrl.destinationsData" class="submenu-item flex" ng-attr-title="{{country.Name}}"><a class="submenu-item--name" ng-href="{{country.UrlLink + \'?ref=main-menu\'}}">{{country.Name}}</a></div></div></div><div class="loader" ng-if="$ctrl.destinationsLayersLoader"><i class="fa fa-spinner fa-spin"></i></div></div></div><div class="header-bottom--wrapper" ng-if="$ctrl.selectedMenuItem.id == 8 && $ctrl.showSubmenu"><div class="header-bottom__submenu header-bottom__submenu--food-categories"><div class="header-bottom__submenu--root"><div ng-repeat="foodCategory in $ctrl.foodCategories" class="submenu-item submenu-item--root flex" ng-click="$ctrl.toggleFoodCategoryItems(foodCategory)" ng-class="{\'submenu-item__active\': $ctrl.selectedFoodCategory == foodCategory}"><span>{{foodCategory.name}}</span> <i ng-if="$ctrl.selectedFoodCategory != foodCategory" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedFoodCategory == foodCategory" class="ta ta-arrow_up_light_black"></i></div></div><div class="header-bottom__submenu--items" ng-if="$ctrl.selectedFoodCategory != null && !$ctrl.foodCategoriesLayersLoader"><div ng-if="$ctrl.selectedFoodItem != null" class="list-heading flex" ng-click="$ctrl.toggleFoodItemDetails($ctrl.selectedFoodItem)"><span>{{$ctrl.selectedFoodItem.Name}}</span> <i class="icon icon--close close-modal"></i></div><div ng-class="[\'list-holder\', \'flex\', {\'list-holder--sub\': $ctrl.selectedFoodItem != null}]"><div ng-repeat="foodItem in $ctrl.foodCategoriesData" class="submenu-item flex"><a ng-href="{{foodItem.UrlLink + \'?ref=main-menu\'}}" ng-attr-title="{{foodItem.Name}}">{{foodItem.Name}}</a> <i ng-if="foodItem.HasChildren" ng-click="$ctrl.toggleFoodItemDetails(foodItem)" class="ta ta-icon-plus"></i></div></div></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="$ctrl.foodCategoriesLayersLoader"><i class="fa fa-spinner fa-spin"></i></div></div></div></div>');$templateCache.put('/content/scripts/app/components/general/header/ta-header-bottom-mobile.html','<div class="header-bottom--container" click-outside="$ctrl.resetAllMenus()"><nav class="header-bottom__main-menu header-bottom--scrollable flex"><div class="menu-item js-ga-nav" data-tag="nav_near_me"><a id="near-me-item" ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 1 }" ng-click="$ctrl.openNearMe()">Near Me <i class="ta ta-arrow-down-black"></i></a></div><div class="menu-item js-ga-nav" data-tag="nav_destinations"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 2}" ng-click="$ctrl.toggleMenuRoot(2)">Destinations <i class="ta ta-arrow-down-black"></i></a></div><div class="menu-item js-ga-nav" data-tag="nav_best_food"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 3}" href="/best/dishes?ref=main-menu">Best Food</a></div><div class="menu-item js-ga-nav" data-tag="nav_maps"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 4}" href="/map?ref=main-menu">Maps</a></div><div class="menu-item js-ga-nav" data-tag="nav_recipes"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 5}" href="/recipes?ref=main-menu">Recipes</a></div><div class="menu-item js-ga-nav" data-tag="nav_origin_labels"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 6}" href="/certificates?ref=main-menu">Origin Labels</a></div><div class="menu-item js-ga-nav" data-tag="nav_quiz"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 7}" href="/quiz?ref=main-menu">Quiz</a></div><div class="menu-item js-ga-nav" data-tag="nav_food_categories"><a ng-class="{\'menu-item__active\': $ctrl.selectedMenuItem.id == 8}" ng-click="$ctrl.toggleMenuRoot(8)">Food Categories <i class="ta ta-arrow-down-black"></i></a></div></nav><div class="header-bottom__submenu--close-submenu" ng-if="($ctrl.selectedMenuItem.id == 1 || $ctrl.selectedMenuItem.id == 2 || $ctrl.selectedMenuItem.id == 8) && $ctrl.showSubmenu" ng-click="$ctrl.resetAllMenus()"><i class="icon icon--close close-modal"></i></div><div class="header-bottom__submenu header-bottom__submenu--near-me" ng-class="{\'header-bottom__submenu--loading-and-location-off\' : $ctrl.nearMeRegionData.length === 0 && !$ctrl.isLocationOn() || $ctrl.nearMeLayersLoader}" ng-if="$ctrl.selectedMenuItem.id == 1 && $ctrl.showSubmenu"><div ng-if="$ctrl.nearMeRegionData.length === 0 && !$ctrl.isLocationOn()"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div ng-if="!$ctrl.nearMeLayersLoader && $ctrl.userClicked"><div class="submenu-heading--wrapper flex"><h3 class="submenu-heading" ng-click="$ctrl.resetAllMenus()">Near Me</h3></div><div class="header-bottom__submenu--menu"><a class="submenu-item submenu-item__near-me flex" href="/nearme?ref=main-menu">Restaurants Near me</a> <a ng-if="$ctrl.nearMeRegionData.RegionName" class="submenu-item flex" ng-href="{{$ctrl.nearMeRegionData.RegionUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeRegionData.RegionName}}</a> <a ng-if="$ctrl.nearMeParentRegionData.ParentRegionName" class="submenu-item flex" ng-href="{{$ctrl.nearMeParentRegionData.ParentRegionUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeParentRegionData.ParentRegionName}}</a> <a ng-if="$ctrl.nearMeCountryData.CountryName" class="submenu-item flex" ng-href="{{$ctrl.nearMeCountryData.CountryUrlLink + \'?ref=main-menu\'}}">{{$ctrl.nearMeCountryData.CountryName}}</a></div></div><div class="null-or-500-state" ng-if="$ctrl.locationEnabled && $ctrl.nullOr500ServerError"><p>Something went wrong. Please <span ng-click="$ctrl.openNearMe()">try again.</span></p></div><div class="profile-list--loader" ng-if="$ctrl.nearMeLayersLoader"><i class="fa fa-spinner fa-spin"></i></div></div><div class="header-bottom__submenu header-bottom__submenu--destinations" ng-if="$ctrl.selectedMenuItem.id == 2 && $ctrl.showSubmenu"><div class="header-bottom__submenu--root" ng-if="$ctrl.selectedContinent == null"><div class="submenu-heading--wrapper flex"><h3 class="submenu-heading" ng-click="$ctrl.resetAllMenus()">Destinations</h3></div><ul class="header-bottom__submenu--menu"><li ng-repeat="continent in $ctrl.continents" class="submenu-item flex submenu-item--bold" ng-click="$ctrl.toggleContinentItems(continent)"><span>{{continent.name}}</span> <i ng-if="$ctrl.selectedContinent != continent" class="ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedContinent == continent" class="icon icon--arrow--up-light-gray"></i></li></ul></div><div class="header-bottom__submenu--items" ng-if="$ctrl.selectedContinent != null && !$ctrl.destinationsLayersLoader"><div class="submenu-heading--wrapper flex" ng-click="$ctrl.selectedCountry != null ? $ctrl.toggleCountryDetails($ctrl.selectedCountry) : $ctrl.toggleContinentItems($ctrl.selectedContinent)"><h3 class="submenu-heading">{{$ctrl.selectedCountry == null ? $ctrl.selectedContinent.name : $ctrl.selectedCountry.Name}}</h3><i ng-if="$ctrl.selectedCountry == null" class="ta ta-arrow_up_light_black"></i> <i ng-if="$ctrl.selectedCountry != null" class="icon icon--close close-modal"></i></div><ul class="header-bottom__submenu--menu"><li ng-if="$ctrl.selectedCountry == null" ng-repeat="country in $ctrl.destinationsData" class="submenu-item flex"><a class="submenu-item--name" ng-href="{{country.UrlLink + \'?ref=main-menu\'}}">{{country.Name}}</a><div class="submenu-item--icon-holder" ng-click="$ctrl.toggleCountryDetails(country)"><i ng-if="country.HasChildren" class="ta ta-icon-plus"></i></div></li><li ng-if="$ctrl.selectedCountry != null" ng-repeat="region in $ctrl.destinationsData"><a ng-href="{{region.UrlLink + \'?ref=main-menu\'}}" class="submenu-item flex submenu-item--bold">{{region.Name}}</a> <a ng-href="{{city.UrlLink + \'?ref=main-menu\'}}" ng-repeat="city in region.Cities" class="submenu-item flex submenu-item--indent">{{city.Name}}</a></li></ul></div><div class="loader" ng-if="$ctrl.destinationsLayersLoader"><i class="fa fa-spinner fa-spin"></i></div></div><div class="header-bottom__submenu header-bottom__submenu--food-categories header-bottom__submenu--centered" ng-if="$ctrl.selectedMenuItem.id == 8 && $ctrl.showSubmenu"><div class="header-bottom__submenu--root" ng-if="$ctrl.selectedFoodCategory == null"><div class="submenu-heading--wrapper"><h3 class="submenu-heading" ng-click="$ctrl.resetAllMenus()">Food Categories</h3></div><ul class="header-bottom__submenu--menu"><li ng-repeat="foodCategory in $ctrl.foodCategories" class="submenu-item submenu-item--bold flex" ng-click="$ctrl.toggleFoodCategoryItems(foodCategory)"><span>{{foodCategory.name}}</span> <i ng-if="$ctrl.selectedFoodCategory != foodCategory" class="icon ta ta-arrow-down-black"></i> <i ng-if="$ctrl.selectedFoodCategory == foodCategory" class="icon icon--arrow--up-light-gray"></i></li></ul></div><div class="header-bottom__submenu--items" ng-if="$ctrl.selectedFoodCategory != null && !$ctrl.foodCategoriesLayersLoader"><div class="submenu-heading--wrapper flex" ng-click="$ctrl.selectedFoodItem != null ? $ctrl.toggleFoodItemDetails($ctrl.selectedFoodItem) : $ctrl.toggleFoodCategoryItems($ctrl.selectedFoodCategory)"><h3 class="submenu-heading">{{$ctrl.selectedFoodItem != null ? $ctrl.selectedFoodItem.Name : $ctrl.selectedFoodCategory.name}}</h3><i ng-if="$ctrl.selectedFoodItem == null" class="ta ta-arrow_up_light_black"></i> <i ng-if="$ctrl.selectedFoodItem != null" class="icon icon--close close-modal"></i></div><ul class="header-bottom__submenu--menu"><li ng-repeat="foodItem in $ctrl.foodCategoriesData" class="submenu-item flex"><a class="submenu-item--name" ng-href="{{foodItem.UrlLink + \'?ref=main-menu\'}}">{{foodItem.Name}}</a><div class="submenu-item--icon-holder" ng-click="$ctrl.toggleFoodItemDetails(foodItem)"><i ng-if="foodItem.HasChildren" class="ta ta-icon-plus"></i></div></li></ul></div></div><div class="loader" ng-if="$ctrl.foodCategoriesLayersLoader"><i class="fa fa-spinner fa-spin"></i></div></div>');$templateCache.put('/content/scripts/app/components/general/header/ta-header-desktop.html','<header class="redesign"><div class="header" id="header-id"><div class="header-top"><div ng-if="!$ctrl.isErrorPage" ta-home-desktop-search-button class="search-wrap"></div><ta-home-desktop-search></ta-home-desktop-search><a class="logo logo--redesign" href="/"><img ng-if="!$ctrl.isErrorPage" class="logo--redesign-header" src="/Content/layout-shared/layout/icons/TA-main-logo-header.svg" alt="TasteAtlas logo"> <img ng-if="$ctrl.isErrorPage" class="logo--error-header" src="/Content/layout-shared/layout/icons/ta-logo-bijeli.svg" alt="TasteAtlas logo"></a><div ng-if="!$ctrl.isErrorPage" class="home-desktop-login-button-wrap"><ta-home-desktop-login-button></ta-home-desktop-login-button></div></div><ta-header-bottom ng-if="!$ctrl.isErrorPage" template="desktop"></ta-header-bottom></div><ta-home-desktop-registration></ta-home-desktop-registration><ta-home-desktop-login ng-if="!$ctrl.isErrorPage"></ta-home-desktop-login></header>');$templateCache.put('/content/scripts/app/components/general/header/ta-header-mobile-redesign.html','<div class="header-wrap"><header class="header header--redesign" ng-class="{\'error-header-redesign\' : $ctrl.isErrorPage}" id="header-id"><div class="header-top-wrapper"><ta-hamburger-mobile ng-class="{\'error-hamburger-mobile\' : $ctrl.isErrorPage}"></ta-hamburger-mobile><a class="logo logo--redesign" href="/"><img ng-if="!$ctrl.isErrorPage" class="ta-logo-redesign" src="/Content/layout-shared/layout/icons/TA-main-logo-header.svg" alt="TasteAtlas logo"> <img ng-if="$ctrl.isErrorPage" class="logo--error-header" src="/Content/layout-shared/layout/icons/ta-logo-bijeli.svg" alt="TasteAtlas logo"></a><div class="flex login-wrapper" ng-if="$root.userTokenInitalized && !$ctrl.isErrorPage"><i ng-if="!$ctrl.isHomePage" ta-trigger-search class="icon icon--search-header"></i><div ng-if="!$ctrl.isInAnonymousRole()" click-outside="$ctrl.toggleDropdown()"><button ng-click="$ctrl.toggleDropdown($event)" class="dropdown--btn"><div class="author-profile-wrapper"><img ng-if="$ctrl.me.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.me.Image}}?mw=40&mh=40" class="author-profile-image"></div><div ng-if="!$ctrl.me.Image" class="author-first-letter">{{$ctrl.userFirstLetter}}</div></button><div ng-if="$ctrl.isDropdownOpen" class="dropdown--menu"><a class="dropdown-item" href="profile/{{$ctrl.me.UrlLink}}">MY PROFILE</a> <button ng-click="$ctrl.openUserDashPopup()" class="dropdown-item">MY STATS</button> <button ng-click="$ctrl.signOut()" class="dropdown-item">LOG OUT</button></div></div><div ng-if="$ctrl.isInAnonymousRole() && !$ctrl.isErrorPage" click-outside="$ctrl.toggleDropdown()"><button ng-click="$ctrl.toggleDropdown($event)" class="dropdown--btn"><i class="ta ta-clarity_user-line"></i></button><div ng-if="$ctrl.isDropdownOpen" class="dropdown--menu"><a ng-click="$ctrl.openLogin()" class="dropdown-item">LOG IN</a></div></div></div></div><ta-header-bottom ng-if="!$ctrl.isErrorPage" template="mobile" is-mobile="true"></ta-header-bottom></header><ta-home-search></ta-home-search></div><ta-profile-panel ng-if="$ctrl.isItOpen" template="mobile" is-mobile="true"></ta-profile-panel><div ng-if="$ctrl.isLoginProcess" modal-directive close-modal="$ctrl.closeLogin()" class="modal mobile-login-modal"><div class="modal__canvas" ng-click="$ctrl.closeLogin()"></div><div class="modal__container modal__container--full-screen"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeLogin()"></i></div><div class="modal__body"><div class="login-block" ng-if="$ctrl.isLoginView"><ta-social-login-mobile></ta-social-login-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-mobile></ta-regular-login-mobile><div class="login-help"><div ng-click="$ctrl.openRegister()" class="btn btn--red-border btn--red-border-alt">CREATE ACCOUNT</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div><div class="register-block" ng-if="$ctrl.isRegisterView"><ta-social-register-mobile></ta-social-register-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-register-mobile></ta-regular-register-mobile><div class="login-help"><div ng-click="$ctrl.closeRegister()" class="btn btn--red-border btn--red-border-alt">RETURN TO LOG IN</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div></div><div class="modal__footer"></div></div></div>');$templateCache.put('/content/scripts/app/components/general/header/ta-header-mobile.html','<header ng-if="$ctrl.displayHeader"><div id="header-id" class="header" ng-class="{\'header--home\': $ctrl.isHomePage}"><i ta-trigger-search class="icon icon--search-header" ng-if="!$ctrl.isHomePage"></i> <i class="ta-logo ta-logo--header"><a href="/"></a></i><ta-hamburger-mobile></ta-hamburger-mobile></div><ta-home-search ng-if="!$ctrl.isHomePage"></ta-home-search><div ng-if="$ctrl.isLoginProcess" modal-directive close-modal="$ctrl.closeLogin()" class="modal mobile-login-modal"><div class="modal__canvas" ng-click="$ctrl.closeLogin()"></div><div class="modal__container modal__container--full-screen"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeLogin()"></i></div><div class="modal__body"><div class="login-block" ng-if="$ctrl.isLoginView"><ta-social-login-mobile></ta-social-login-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-mobile></ta-regular-login-mobile><div class="login-help"><div ng-click="$ctrl.openRegister()" class="btn btn--red-border btn--red-border-alt">CREATE ACCOUNT</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div><div class="register-block" ng-if="$ctrl.isRegisterView"><ta-social-register-mobile></ta-social-register-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-register-mobile></ta-regular-register-mobile><div class="login-help"><div ng-click="$ctrl.closeRegister()" class="btn btn--red-border btn--red-border-alt">RETURN TO LOG IN</div><span class="login-help__desc">By creating or logging into an account,<br>you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></span></div></div></div><div class="modal__footer"></div></div></div></header>');$templateCache.put('/content/scripts/app/components/general/login-desktop/ta-regular-login-desktop.html','<div class="login login--regular"><form action="account/LoginAjax" method="post"><input type="text" class="input input--uppercase" autocomplete="off" name="email" ng-model="$ctrl.email" placeholder="email address" value="{{$ctrl.email}}"><div ng-if="$ctrl.notValidEmail" class="email_validation">You can\'t leave this empty.</div><div class="input-password-wrapper"><input type="{{$ctrl.isPasswordVisible ? \'text\' : \'password\'}}" class="input input--uppercase input--password" autocomplete="off" name="password" ng-model="$ctrl.password" placeholder="Password" id="password-field"><div class="eye-toggle-wrapper" ng-click="$ctrl.passwordVisibilityHandler()"><img class="eye-toggle eye-toggle--show" src="/Content/layout-shared/layout/icons/eye-show.svg" ng-if="!$ctrl.isPasswordVisible"> <img class="eye-toggle eye-toggle--hide" src="/Content/layout-shared/layout/icons/eye-hide.svg" ng-if="$ctrl.isPasswordVisible"></div></div><div ng-if="$ctrl.notValidPassword" class="input password_validation">You can\'t leave this empty.</div><div class="login-error-msg">{{$ctrl.errorMessage}}</div><div class="login__footer"><div class="login__footer--left"><input type="checkbox" ng-model="$ctrl.remember" id="remember_regular_login" class="checkbox"> <span>Remember me</span></div><a style="color: #828282;" href="account/resetpassword" class="login__footer--right">Forgot password?</a></div><div class="btn btn--red-background" type="submit" ng-disabled="$ctrl.isSubmitting" ng-click="$ctrl.login($event)">{{ $ctrl.isSubmitting ? \'Logging in...\' : \'Log in\' }}</div></form></div>');$templateCache.put('/content/scripts/app/components/general/login-desktop/ta-regular-register-desktop.html','<div class="login login--regular"><form name="registerForm" ng-submit="$ctrl.register(registerForm)" method="POST" novalidate><div class="form-box"><label class="hidden" for="email"></label> <input type="email" class="input input--uppercase" autocomplete="off" name="email" ng-required="true" ng-model="$ctrl.email" placeholder="email address"><div ng-if="!registerForm.email.$valid && registerForm.$submitted"><p ng-if="registerForm.email.$error.required" class="form-box__error">Email is required.</p></div></div><div class="form-box"><label class="hidden" for="name"></label> <input type="text" class="input" autocomplete="off" name="firstName" ng-required="true" ng-model="$ctrl.firstName" placeholder="name"><div ng-show="!registerForm.firstName.$valid && registerForm.$submitted"><p ng-show="registerForm.firstName.$error.required" class="form-box__error">First name is required.</p></div></div><div class="form-box"><label class="hidden" for="lastName"></label> <input type="text" class="input" autocomplete="off" name="lastName" ng-required="true" ng-model="$ctrl.lastName" placeholder="Last Name"><div ng-show="!registerForm.lastName.$valid && registerForm.$submitted"><p ng-show="registerForm.lastName.$error.required" class="form-box__error">Last name is required.</p></div></div><div class="form-box input-password-wrapper"><label class="hidden" for="password"></label> <input type="{{$ctrl.isPasswordVisible ? \'text\' : \'password\'}}" class="input input--uppercase input--password" autocomplete="off" name="password" ng-required="true" ng-minlength="6" ng-maxlength="20" ng-model="$ctrl.password" placeholder="Password" id="password-field"><div class="eye-toggle-wrapper" ng-click="$ctrl.passwordVisibilityHandler()"><img class="eye-toggle eye-toggle--show" src="/Content/layout-shared/layout/icons/eye-show.svg" ng-if="!$ctrl.isPasswordVisible"> <img class="eye-toggle eye-toggle--hide" src="/Content/layout-shared/layout/icons/eye-hide.svg" ng-if="$ctrl.isPasswordVisible"></div><div ng-show="!registerForm.password.$valid && registerForm.$submitted"><p ng-show="registerForm.password.$error.required || registerForm.password.$error.minlength || registerForm.password.$error.maxlength" class="form-box__error">Invalid password length.</p></div></div><div class="form-box form-box--turnstile"><div id="turnstileWidget"></div></div><div class="form-box" ng-show="$ctrl.serverError"><p ng-if="!$ctrl.serverErrorMessage" class="form-box__error">An error occured.</p><p ng-if="$ctrl.serverErrorMessage" class="form-box__error">{{$ctrl.serverErrorMessage}}</p></div><button class="btn btn-block btn--red-background" style="width: 100%" ng-disabled="registerForm.$invalid || !$ctrl.tokenIsReady" type="submit">{{ $ctrl.isSubmitting ? \'Signing up...\' : \'Sign up\' }}</button></form></div><style>\r\n    button[disabled] {\r\n        background-color: #f2f2f2;\r\n        border: 1px solid #f2f2f2;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/general/login-desktop/ta-social-login-desktop.html','<div class="login login--social"><form id="fb_login_form_social_login" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Facebook"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--blue-background btn--large btn--bold" ng-click="$ctrl.submitFbLogin()"><i class="icon icon--facebook-login"></i> <span>Log in with Facebook</span></div></form><form id="fb_google_form_social_login" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Google"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--gray-border btn--large btn--bold" ng-click="$ctrl.submitGoogleLogin()"><i class="icon icon--google-login"></i> <span>Log in with Google</span></div></form></div>');$templateCache.put('/content/scripts/app/components/general/login-desktop/ta-social-register-desktop.html','<div class="login login--social"><form id="fb_login_form_social_register" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Facebook"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--blue-background btn--large btn--bold" ng-click="$ctrl.submitFbLogin()"><i class="icon icon--facebook-login"></i> <span>Log in with Facebook</span></div></form><form id="fb_google_form_social_register" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Google"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--gray-border btn--large btn--bold" ng-click="$ctrl.submitGoogleLogin()"><i class="icon icon--google-login"></i> <span>Log in with Google</span></div></form></div>');$templateCache.put('/content/scripts/app/components/general/login-mobile/ta-register-mobile-button.html','<div class="login login--register"><div ng-if="!$ctrl.isSignedIn" ng-click="$ctrl.openRegister()" class="btn btn--red-border btn--red-border-alt">CREATE ACCOUNT</div><div class="login__terms">By creating or logging into an account, you agree to our <a href="/terms">Conditions of Use</a> and <a href="/privacy">Privacy Policy</a></div></div><div ng-if="$ctrl.isRegisterOpened" class="modal"><div class="modal__container modal__container--small"><div class="modal__header"><i class="icon close-modal icon--close-slim" ng-click="$ctrl.closeRegister()"></i></div><div class="modal__body"><ta-social-register-mobile></ta-social-register-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-register-mobile></ta-regular-register-mobile><div class="btn btn--red-border btn--red-border-alt ng-scope" ng-click="$ctrl.closeRegister()">BACK TO LOG IN</div></div><div class="modal__footer"></div></div></div>');$templateCache.put('/content/scripts/app/components/general/login-mobile/ta-regular-login-mobile.html','<div class="login login--regular"><form action="account/LoginAjax" method="post"><input type="text" class="input input--uppercase" autocomplete="off" name="email" ng-model="$ctrl.email" placeholder="email address" value="{{$ctrl.email}}"><div ng-if="$ctrl.notValidEmail" class="email_validation">You can\'t leave this empty.</div><div class="input-password-wrapper"><input type="{{$ctrl.isPasswordVisible ? \'text\' : \'password\'}}" class="input input--uppercase input--password" autocomplete="off" name="password" ng-model="$ctrl.password" placeholder="Password" id="password-field"><div class="eye-toggle-wrapper" ng-click="$ctrl.passwordVisibilityHandler()"><img class="eye-toggle eye-toggle--show" src="/Content/layout-shared/layout/icons/eye-show.svg" ng-if="!$ctrl.isPasswordVisible"> <img class="eye-toggle eye-toggle--hide" src="/Content/layout-shared/layout/icons/eye-hide.svg" ng-if="$ctrl.isPasswordVisible"></div></div><div ng-if="$ctrl.notValidPassword" class="input password_validation">You can\'t leave this empty.</div><div class="login__footer"><div class="login__footer--left"><input type="checkbox" ng-model="$ctrl.remember" id="remember_regular_login" class="checkbox"> <span>Remember me</span></div><a style="color: #828282; font-size: 12px;" href="/account/resetpassword" class="login__footer--right">Forgot password?</a></div><div class="btn btn--red-background" type="submit" ng-disabled="$ctrl.isSubmitting" ng-click="$ctrl.login()">{{ $ctrl.isSubmitting ? \'Logging in...\' : \'Log in\' }}</div><div class="login__error">{{$ctrl.errorMessage}}</div></form></div>');$templateCache.put('/content/scripts/app/components/general/login-mobile/ta-regular-register-mobile.html','<div class="login login--regular"><form name="registerForm" ng-submit="$ctrl.register(registerForm)" novalidate><div class="form-box"><label class="hidden" for="email"></label> <input type="email" class="input input--uppercase" autocomplete="off" name="email" ng-required="true" ng-model="$ctrl.email" placeholder="email address"><div ng-if="!registerForm.email.$valid && registerForm.$submitted"><p ng-if="registerForm.email.$error.required" class="form-box__error">Email is required.</p></div></div><div class="form-box"><label class="hidden" for="name"></label> <input type="text" class="input" autocomplete="off" name="firstName" ng-required="true" ng-model="$ctrl.firstName" placeholder="name"><div ng-show="!registerForm.firstName.$valid && registerForm.$submitted"><p ng-show="registerForm.firstName.$error.required" class="form-box__error">First name is required.</p></div></div><div class="form-box"><label class="hidden" for="lastName"></label> <input type="text" class="input" autocomplete="off" name="lastName" ng-required="true" ng-model="$ctrl.lastName" placeholder="Last Name"><div ng-show="!registerForm.lastName.$valid && registerForm.$submitted"><p ng-show="registerForm.lastName.$error.required" class="form-box__error">Last name is required.</p></div></div><div class="form-box input-password-wrapper"><label class="hidden" for="password"></label> <input type="{{$ctrl.isPasswordVisible ? \'text\' : \'password\'}}" class="input input--uppercase input--password" autocomplete="off" name="password" ng-required="true" ng-minlength="6" ng-maxlength="20" ng-model="$ctrl.password" placeholder="Password" id="password-field"><div class="eye-toggle-wrapper" ng-click="$ctrl.passwordVisibilityHandler()"><img class="eye-toggle eye-toggle--show" src="/Content/layout-shared/layout/icons/eye-show.svg" ng-if="!$ctrl.isPasswordVisible"> <img class="eye-toggle eye-toggle--hide" src="/Content/layout-shared/layout/icons/eye-hide.svg" ng-if="$ctrl.isPasswordVisible"></div><div ng-show="!registerForm.password.$valid && registerForm.$submitted"><p ng-show="registerForm.password.$error.required || registerForm.password.$error.minlength || registerForm.password.$error.maxlength" class="form-box__error">Invalid password length.</p></div></div><div class="form-box form-box--turnstile"><div id="turnstileWidgetMobile"></div></div><div class="form-box" ng-show="$ctrl.serverError"><p ng-if="!$ctrl.serverErrorMessage" class="form-box__error">An error occured.</p><p ng-if="$ctrl.serverErrorMessage" class="form-box__error">{{$ctrl.serverErrorMessage}}</p></div><button class="btn btn-block btn--red-background" style="width: 100%" ng-disabled="registerForm.$invalid || !$ctrl.tokenIsReady" type="submit">{{ $ctrl.isSubmitting ? \'Signing up...\' : \'Sign up\' }}</button></form></div><style>\r\n    button[disabled] {\r\n        background-color: #f2f2f2;\r\n        border: 1px solid #f2f2f2;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/general/login-mobile/ta-social-login-mobile.html','<div class="login login--social"><form id="fb_login_form_social_login" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Facebook"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--blue-background btn--large btn--bold" ng-click="$ctrl.submitFbLogin()"><i class="icon icon--facebook-login"></i> <span>Log in with Facebook</span></div></form><form id="fb_google_form_social_login" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Google"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--gray-border btn--large btn--bold" ng-click="$ctrl.submitGoogleLogin()"><i class="icon icon--google-login"></i> <span>Log in with Google</span></div></form></div>');$templateCache.put('/content/scripts/app/components/general/login-mobile/ta-social-register-mobile.html','<div class="login login--social"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Please log in to vote</h2><form id="fb_login_form_social_register" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Facebook"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--blue-background btn--large btn--bold" ng-click="$ctrl.submitFbRegister()"><i class="icon icon--facebook-login"></i> <span>Sign up with Facebook</span></div></form><form id="fb_google_form_social_register" action="account/ExternalLogin" method="post"><input type="hidden" name="provider" value="Google"> <input type="hidden" name="returnUrl" value="{{$ctrl.redirect}}"><div class="btn btn--lowercase btn--gray-border btn--large btn--bold" ng-click="$ctrl.submitGoogleRegister()"><i class="icon icon--google-login"></i> <span>Sign up with Google</span></div></form></div>');$templateCache.put('/content/scripts/app/components/general/sharing/ta-sharing-box-desktop.html','<div class="socialbox"><div class="share-btn" ng-click="$ctrl.fbShare()"><i class="icon icon--social--facebook--gray"></i></div><div class="share-btn" ng-click="$ctrl.twitterShare()"><i class="icon icon--social--twitter--gray"></i></div><div class="share-btn share-btn--round share-more" ng-if="$ctrl.isShareBtnVisible" ng-click="$ctrl.openShareMore()"><i class="icon icon--social--share-more"></i></div><div class="share-more__options" ng-if="$ctrl.isShareMoreOpened"><div class="share-btn" ng-click="$ctrl.mailShare()"><i class="icon icon--social--mail--gray"></i></div><div class="share-btn" ng-click="$ctrl.pinterestShare()"><i class="icon icon--social--pinterest"></i></div><div class="share-btn" ng-click="$ctrl.linkedInShare()"><i class="icon icon--social--linkedin--gray"></i></div><div class="share-btn" ng-click="$ctrl.closeShareMore()"><i class="icon icon--close-cross--gray"></i></div></div></div>');$templateCache.put('/content/scripts/app/components/general/sharing/ta-sharing-box-mobile.html','<div class="socialbox"><div class="share-btn share-btn--round twitter" ng-click="$ctrl.twitterShare()"><i class="icon icon--social--twitter--blue"></i></div><div class="share-btn share-btn--round share-more" ng-click="$ctrl.openShareMore()"><i class="icon icon--social--share-more"></i></div></div><div class="modal" modal-directive ng-if="$ctrl.isShareMoreOpened" close-modal="$ctrl.closeShareMore()"><div class="modal__canvas" ng-click="$ctrl.closeShareMore()"></div><div class="modal__container modal__container--fixed-bottom"><div class="modal__header"><p class="header-title">Share this link</p><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeShareMore()"></i></div><div class="modal__body"><div class="socialbox socialbox--more"><div class="socialbox--more__share-links"><div class="icon icon--social--facebook--square" ng-click="$ctrl.fbShare()"></div><div class="icon icon--social--twitter--square" ng-click="$ctrl.twitterShare()"></div><div class="icon icon--social--whatsapp--square" ng-click="$ctrl.whatsappShare()"></div><div class="icon icon--social--pinterest--square" ng-click="$ctrl.pinterestShare()"></div><div class="icon icon--social--viber--square" ng-click="$ctrl.viberShare()"></div><div class="icon icon--social--google--square" ng-click="$ctrl.gplusShare()"></div><div class="icon icon--social--linkedin--square" ng-click="$ctrl.linkedInShare()"></div><div class="icon icon--social--messenger--square" ng-click="$ctrl.fbMessengerShare()"></div><div class="icon icon--social--mail--square" ng-click="$ctrl.mailShare()"></div><div class="icon icon--social--link--square copy-link-share" ng-click="$ctrl.copyLink($event)"></div></div></div></div></div></div><ta-notification-dialog ng-if="$ctrl.isDialogVisible">{{$ctrl.notificationMessage}}</ta-notification-dialog>');$templateCache.put('/content/scripts/app/components/general/tutorial/ta-tutorial-desktop.html','<div ng-if="$ctrl.toggle"><div class="tutorial"><div>You can search like this:</div><div><div ng-click="$ctrl.selectItem($ctrl.items[0])"><div>eg. {{$ctrl.items[0].name}}</div><div>Search location.</div></div></div><div><div ng-click="$ctrl.selectItem($ctrl.items[1])"><div>eg. {{$ctrl.items[1].name}}</div><div>Search category.</div></div></div><div><div ng-click="$ctrl.selectItem($ctrl.items[2])"><div>eg. {{$ctrl.items[2].name}}</div><div>Search category in specific location.</div></div></div><div><div ng-click="$ctrl.selectItem($ctrl.items[3])"><div>eg. {{$ctrl.items[3].name}}</div><div>Find specific dish or ingredient.</div></div></div></div><div><button ng-click="$ctrl.endTutorial()">Close tutorial</button></div></div>');$templateCache.put('/content/scripts/app/components/general/tutorial/ta-tutorial-mobile.html','<div ng-if="$ctrl.toggle"><div class="tutorial"><div class="tutorial__title">You can search like this:</div><div class="tutorial__item"><div ng-click="$ctrl.selectItem($ctrl.items[0])"><div class="eg">eg. <b>{{$ctrl.items[0].name}}</b></div><div class="desc">Search location.</div></div></div><div class="tutorial__item"><div ng-click="$ctrl.selectItem($ctrl.items[1])"><div class="eg">eg. <b>{{$ctrl.items[1].name}}</b></div><div class="desc">Search category.</div></div></div><div class="tutorial__item"><div ng-click="$ctrl.selectItem($ctrl.items[2])"><div class="eg">eg. <b>{{$ctrl.items[2].name}}</b></div><div class="desc">Search category in specific location.</div></div></div><div class="tutorial__item"><div ng-click="$ctrl.selectItem($ctrl.items[3])"><div class="eg">eg. <b>{{$ctrl.items[3].name}}</b></div><div class="desc">Find specific dish or ingredient.</div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/event-details/event-desktop-overview/ta-event-desktop-main.html','<section class="dish page" ng-class="{\'have-page__background\' : $ctrl.details.CoverImage && $ctrl.details.CoverImage.Image}"><div ng-if="$ctrl.isLoaded"><div class="page__background-container"><div class="page__background" ng-if="$ctrl.details.CoverImage && $ctrl.details.CoverImage.Image" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.CoverImage.Image}}?mw=2000\')"><div class="page__background-copyright"><a href="{{$ctrl.details.CoverImage.ImageAuthorUrl}}" target="_blank">{{$ctrl.details.CoverImage.ImageAuthor}}</a></div></div><div class="event-card"><div class="event-card__header" ng-class="{ \'event-card__header--no-image\' : !$ctrl.details.PreviewImage || $ctrl.details.Images.length === 0}"><div class="sub-header" ng-if="$ctrl.details.MainType">{{$ctrl.details.MainType}}</div><h1 class="h1">{{$ctrl.details.Name}}</h1><span class="event-card__header--other-name" ng-if="$ctrl.details.OtherNames">({{$ctrl.details.OtherNames}})</span> <i class="plate-lines plate-lines--biggest"></i><div class="event-card__location"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.Region.CountryEmblem}}?mh=16"> <span>{{$ctrl.details.Region.RegionName}}, {{$ctrl.details.Region.CountryName}}</span> <i class="dot"></i> <i class="icon icon--calendar"></i> <span class="event-card__date" ng-class="$ctrl.getDateClass()" ng-if="$ctrl.details.Date && $ctrl.details.Date.DisplayDate">{{::$ctrl.getExactDisplayDate($ctrl.details)}}</span><div class="event-card__date-description" ng-if="$ctrl.details.Date.IsNow || $ctrl.details.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime()}}</span></div></div><div class="rating"><ta-comment-button details="$ctrl.details"></ta-comment-button><ta-comment-process ng-if="$ctrl.userCommentStatus.isCommentProcess" details="$ctrl.details"></ta-comment-process></div></div><div class="event-card__hero" ng-if="$ctrl.details.PreviewImage || $ctrl.details.Images.length > 0"><ta-image-gallery-desktop preview="null" photos="$ctrl.details.Images"></ta-image-gallery-desktop></div><div class="event-card__main"><div class="left"><div class="about" ng-if="$ctrl.details.Description"><div read-more-by-sentence read-more-txt="{{$ctrl.details.Description}}"></div></div><div class="details"><div class="group" ng-if="$ctrl.details.Venue"><div class="title">Venue</div><div class="content content--address">{{$ctrl.details.Venue}}</div></div><div class="group" ng-if="$ctrl.details.Address"><div class="title">Address</div><div class="content content--address">{{$ctrl.details.Address}}</div></div><div class="group" ng-if="$ctrl.details.Type"><div class="title">Type</div><div class="content">{{$ctrl.details.Type}}</div></div><div class="group" ng-if="$ctrl.details.DedicatedItems && $ctrl.details.DedicatedItems.length"><div class="title">Dedicated to</div><div class="content"><span class="dedicated-items" ng-repeat="item in $ctrl.details.DedicatedItems"><a ng-if="item.UrlLink" href="{{item.UrlLink}}">{{item.Name}}</a> <span ng-if="!item.UrlLink">{{item.Name}}</span></span></div></div><div class="group" ng-if="$ctrl.details.Serving"><div class="title">Serving</div><div class="content">{{$ctrl.details.Serving}}</div></div><div class="group" ng-if="$ctrl.details.Highlight"><div class="title">Highlight</div><div class="content">{{$ctrl.details.Highlight}}</div></div><div class="group" ng-if="$ctrl.details.Date.Duration"><div class="title">Duration</div><div class="content">{{$ctrl.details.Date.Duration}} {{$ctrl.details.Date.Duration === 1 ? \'day\' : \'days\'}}</div></div><div class="group" ng-if="$ctrl.details.Frequency"><div class="title">Frequency</div><div class="content content--capitalized">{{$ctrl.details.Frequency}}</div></div><div class="group" ng-if="$ctrl.details.Since"><div class="title">Since</div><div class="content">{{$ctrl.details.Since}}</div></div></div><div class="visit" ng-if="$ctrl.details.Web"><a class="btn btn--center btn--lightest-gray-border" ng-if="$ctrl.details.Web" ng-href="{{$ctrl.details.Web}}" target="_blank"><i class="icon icon--home"></i> <span>VISIT WEBSITE</span></a><div class="clearfix"></div></div></div><div class="right" ng-if="$ctrl.isLoaded && $ctrl.details.Region"><ta-item-location-desktop region="$ctrl.details.Region"></ta-item-location-desktop></div></div></div></div></div></section><div class="section-divider"><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count === 0 && !$ctrl.comment"><div class="opinions"><h1 class="h1 h1--medium h1--center">User comments</h1><i class="plate-lines plate-lines--center plate-lines--big"></i><div class="miss-text miss-text--nobgcolor miss-text--no-bottom-padding"><h2 class="h2 h2--lowercase h2--bold h2--center h2--muli">There are no comments yet.</h2>Be the first person in the history of TasteAtlas to comment on {{$ctrl.details.Name}}</div><div class="opinions__options"><div class="component_inline-block"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt></div></div></div></section><section ng-if="$ctrl.isLoaded && ($ctrl.reviews.Count > 0 || $ctrl.comment)"><div class="opinions"><h1 class="h1 h1--medium h1--center">User comments</h1><i class="plate-lines plate-lines--center plate-lines--big"></i><ta-opinion-list-desktop opinions="$ctrl.reviews" opinion="$ctrl.comment"></ta-opinion-list-desktop><div class="opinions__options"><div class="component_inline-block"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt></div><ta-view-more-button items="$ctrl.reviews" button-class="\'view-more btn btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold btn--center\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()" class="component-inline-block"></ta-view-more-button></div></div></section></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/event-details/event-mobile-overview/ta-event-mobile-main.html','<section ng-if="$ctrl.isLoaded"><div class="event-detail"><ta-image-gallery-mobile preview="null" photos="$ctrl.details.Images"></ta-image-gallery-mobile><div class="event-detail__header"><div class="event-detail__type" ng-if="$ctrl.details.MainType">{{$ctrl.details.MainType}}</div><h1 class="h1 h1--center">{{$ctrl.details.Name}}</h1><span class="event-detail__other-name" ng-if="$ctrl.details.OtherNames">{{$ctrl.details.OtherNames}}</span> <i class="plate-lines plate-lines--center"></i></div><div class="event-detail__sub-header"><div class="row" ng-if="$ctrl.details.Venue"><img ng-if="$ctrl.details.Region && $ctrl.details.Region.CountryEmblem" ng-src="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.Region.CountryEmblem}}?mh=16"><div><div>{{$ctrl.getEventLocationInfo()}}</div><div class="item-location"><div>{{$ctrl.getEventLocationAddress()}}</div><div class="directions" ng-if="$ctrl.details.Address"><a ng-click="$ctrl.redirectToGoogleMaps($ctrl.details.Address)">Directions</a></div></div></div></div><div class="row" ng-if="$ctrl.details.Date && $ctrl.details.Date.DisplayDate"><i class="icon icon--calendar"></i><div class="event-detail__date" ng-class="$ctrl.getDateClass()">{{::$ctrl.getDisplayDate()}}</div><div class="event-detail__date-description" ng-if="$ctrl.details.Date.IsNow || $ctrl.details.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime()}}</span></div></div></div><div class="event-detail__rating"><ta-comment-button details="$ctrl.details"></ta-comment-button><ta-comment-process-mobile ng-if="$ctrl.userCommentStatus.isCommentProcess" details="$ctrl.details"></ta-comment-process-mobile></div><div class="event-detail__description"><div ng-if="$ctrl.details.Description" class="event-detail__description-text" read-more-by-sentence read-more-txt="{{$ctrl.details.Description}}"></div><div class="info"><div class="row" ng-if="$ctrl.details.Type"><div class="title">Type</div><div class="content">{{$ctrl.details.Type}}</div></div><div class="row" ng-if="$ctrl.details.DedicatedItems && $ctrl.details.DedicatedItems.length"><div class="title">Dedicated to</div><div class="content"><span class="dedicated-items" ng-repeat="item in $ctrl.details.DedicatedItems"><a ng-if="item.UrlLink" href="{{item.UrlLink}}">{{item.Name}}</a> <span ng-if="!item.UrlLink">{{item.Name}}</span></span></div></div><div class="row" ng-if="$ctrl.details.Serving"><div class="title">Serving</div><div class="content">{{$ctrl.details.Serving}}</div></div><div class="row" ng-if="$ctrl.details.Highlight"><div class="title">Highlight</div><div class="content">{{$ctrl.details.Highlight}}</div></div><div class="row" ng-if="$ctrl.details.Date && $ctrl.details.Date.Duration"><div class="title">Duration</div><div class="content">{{$ctrl.details.Date.Duration}} {{$ctrl.details.Date.Duration === 1 ? \'day\' : \'days\'}}</div></div><div class="row" ng-if="$ctrl.details.Frequency"><div class="title">Frequency</div><div class="content content--capitalized">{{$ctrl.details.Frequency}}</div></div><div class="row" ng-if="$ctrl.details.Since"><div class="title">Since</div><div class="content">{{$ctrl.details.Since}}</div></div></div><div ng-if="$ctrl.details.Web" class="event-detail__website"><a class="btn btn--gray-border btn--inline" ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">VISIT WEBSITE</a></div></div></div></section><div><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count === 0 && !$ctrl.comment"><div class="opinions"><h1 class="h1 h1--small h1--center">User comments</h1><i class="plate-lines plate-lines--center"></i><div class="miss-text miss-text--nobgcolor miss-text--no-bottom-padding"><h2 class="h2 h2--lowercase h2--bold h2--center h2--muli">There are no comments yet.</h2>Be the first person in the history of TasteAtlas to comment on {{$ctrl.details.Name}}</div><div class="opinions__options"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt></div></div></section><section ng-if="$ctrl.isLoaded && ($ctrl.reviews.Count > 0 || $ctrl.comment)"><div class="opinions"><h1 class="h1 h1--medium h1--center">User comments</h1><i class="plate-lines plate-lines--center"></i><ta-opinion-list-mobile opinions="$ctrl.reviews" opinion="$ctrl.comment"></ta-opinion-list-mobile><div class="opinions__options"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold view-more\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()" class="component-inline-block"></ta-view-more-button></div></div></section></div><div class="promotion" ng-if="$ctrl.isLoaded"><div ta-google-ad id="TA_MR_EVENT" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-desktop-comments/ta-ingredient-desktop-comments.html','<section class="section-divider" ng-if="$ctrl.reviews.Count === 0 && !$ctrl.comment"><section class="opinions"><div class="miss-text miss-text--nobgcolor miss-text--no-padding"><h2 class="h2 h2--lowercase h2--bold h2--center h2--muli">There are no comments yet.</h2>Be the first person in the history of TasteAtlas to comment on {{$ctrl.details.Name}}</div><div class="opinions__options"><div class="component_inline-block"><ta-comment-button-alt details="$ctrl.details"></ta-comment-button-alt></div></div></section><section><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section></section><div class="section-divider" ng-if="$ctrl.reviews.Count > 0 || $ctrl.comment"><section class="opinions"><div class="opinions__content"><div class="left"><ta-rating-card ng-if="$ctrl.rating" template="basic" platform="desktop" details="$ctrl.rating" badges="[]" actions="$ctrl.ratingCardActions"></ta-rating-card></div><div class="right"><ta-opinion-list-desktop opinions="$ctrl.reviews" opinion="$ctrl.comment"></ta-opinion-list-desktop></div></div><div class="opinions__options" ng-if="$ctrl.reviews.Count !== $ctrl.reviews.Data.length"><ta-view-more-button items="$ctrl.reviews" button-class="\'view-more btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></section><section><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section></div>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-desktop-overview/ta-ingredient-desktop-main.html','<div><section class="ingredient page" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div><div class="page__background-container page__background-container--food"><div class="card card--food"><div class="card__hero card__hero--food" ng-if="$ctrl.preloadedDetails.PreviewImage.Image || $ctrl.preloadedDetails.Images.length > 0"><ta-image-gallery-desktop preview="$ctrl.preloadedDetails.PreviewImage" photos="$ctrl.preloadedDetails.Images"></ta-image-gallery-desktop></div><div class="card__main"><div class="left"><div class="group"><ta-entity-categories-desktop category-name="$ctrl.preloadedDetails.Group.Name" category-url-link="$ctrl.preloadedDetails.Group.UrlLink" additional-categories="$ctrl.preloadedDetails.AdditionalGroups"></ta-entity-categories-desktop></div><h1 class="h1" ng-if="$ctrl.preloadedDetails.Certificates.length === 0">{{$ctrl.preloadedDetails.Name}}</h1><div class="certificate__container certificate__container--multiple" ng-if="$ctrl.preloadedDetails.Certificates.length > 0"><h1 class="h1"><span>{{$ctrl.preloadedDetails.Name}}</span> <span class="certificate certificate--multiple"><a ng-repeat="c in $ctrl.preloadedDetails.Certificates" ng-href="{{c.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h1" title="{{c.Name}}" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::c.Image}}?mw=35\');"></i></a></span></h1></div><h4 class="h4" ng-if="$ctrl.preloadedDetails.OtherNames && $ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.EnglishName}}, {{$ctrl.preloadedDetails.OtherNames}})</h4><h4 class="h4" ng-if="$ctrl.preloadedDetails.OtherNames && !$ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.OtherNames}})</h4><h4 class="h4" ng-if="!$ctrl.preloadedDetails.OtherNames && $ctrl.preloadedDetails.EnglishName">({{$ctrl.preloadedDetails.EnglishName}})</h4><i class="plate-lines plate-lines--biggest"></i><div class="text" ng-if="$ctrl.preloadedDetails.Description" read-more-by-sentence read-more-txt="{{$ctrl.preloadedDetails.Description}}"></div></div><div class="right" ng-if="!$ctrl.moreRegionsVisible"><div class="right__row"><div class="regions-wrapper"><div class="region"><a ng-if="$ctrl.preloadedDetails.Region.Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Current.Name}}<span ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent">,</span></span></a> <a ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent" href="{{$ctrl.preloadedDetails.Region.Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Parent.Name}}</span></a></div><div class="region" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length === 1"><a ng-if="$ctrl.preloadedDetails.AdditionalRegions[0].Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.AdditionalRegions[0].Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.AdditionalRegions[0].Current.Name}}</span></a> <a ng-if="!$ctrl.preloadedDetails.AdditionalRegions[0].Parent.IsContinent" href="{{$ctrl.preloadedDetails.AdditionalRegions[0].Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.AdditionalRegions[0].Parent.Name}}</span></a></div><div ng-if="$ctrl.preloadedDetails.AdditionalRegions.length > 1" class="region"><span style="font-size: 14px">and&nbsp;</span> <span ng-click="$ctrl.showMoreRegions()" class="additional-regions">{{$ctrl.preloadedDetails.AdditionalRegionText}}</span></div></div><div class="emblem"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded" image-filter="$ctrl.imageData"></ta-map-image></div></div></div><div class="right right--additional" ng-if="$ctrl.moreRegionsVisible"><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()"></i><div><div class="right__row"><div class="region"><a ng-if="$ctrl.preloadedDetails.Region.Current.Name" class="region-name" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Current.Name}}</span></a> <a ng-if="!$ctrl.preloadedDetails.Region.Parent.IsContinent" href="{{$ctrl.preloadedDetails.Region.Parent.UrlLink}}"><span>{{$ctrl.preloadedDetails.Region.Parent.Name}}</span></a></div><div class="emblem"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!$ctrl.preloadedDetails.Region.Current.EmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length < $ctrl.maxDetailedAdditionalRegions"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded" image-filter="$ctrl.imageData"></ta-map-image></div></div></div><div ng-repeat="region in $ctrl.preloadedDetails.AdditionalRegions"><div class="right__row"><div class="region"><a ng-if="region.Current.Name" class="region-name" href="{{region.Current.UrlLink}}"><span ng-if="region.Parent.IsContinent">{{region.Current.Name}}</span> <span ng-if="!region.Parent.IsContinent">{{region.Current.Name}},</span></a> <a ng-if="!region.Parent.IsContinent" href="{{region.Parent.UrlLink}}"><span>{{region.Parent.Name}}</span></a></div><div class="emblem"><img ng-class="{ \'img--highlight\' :region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="region.Current.EmblemImage" class="flag flag-fix" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Current.EmblemImage}}?mw=80"> <img ng-class="{ \'img--highlight\' : region.Parent.RegionLevel >= $ctrl.regionLevels.Country }" ng-if="!region.Current.EmblemImage" class="flag" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Parent.EmblemImage}}?mw=80"></div></div><div class="right__row" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length < $ctrl.maxDetailedAdditionalRegions"><div class="map"><ta-map-image ng-if="$ctrl.pageStatus.isLoaded" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image></div></div></div></div></div><div class="card__footer" ng-class="{ \'card__footer--food\' : $ctrl.preloadedDetails.PreviewImage || $ctrl.preloadedDetails.Images.length > 0 }"><div class="horizontal-list" ng-if="$ctrl.foodIngredients.isValid"><ta-food-ingredients items="$ctrl.foodIngredients.cutData" disable-scroll="true" template="desktop"></ta-food-ingredients></div><div class="options-left"><ta-comment-label user-comment-status="$ctrl.userCommentStatus"></ta-comment-label><ta-rating-actions ng-if="$ctrl.userCommentStatus" template="desktop-row" actions="$ctrl.ratingActions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions></div></div></div></div></div></section><div><ta-dish-desktop-section-image ng-if="$ctrl.pageStatus.page !== \'\' && $ctrl.previewTitleData" title-data="$ctrl.previewTitleData"></ta-dish-desktop-section-image><div class="ingredient__tabs" ng-if="$ctrl.pageStatus.isLoaded"><nav class="tab__nav" id="tabs_main"><ul><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}" target="_self">Overview</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'recipe\'}" ng-if="$ctrl.preloadedDetails.HasRecipes"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/recipe" target="_self">Recipe</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'wheretobuy\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/wheretobuy" target="_self">Where to buy</a></li><li ng-class="{\'selected\' : $ctrl.pageStatus.page === \'comments\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/comments" target="_self">Comments</a></li></ul></nav><div><ta-ingredient-desktop-overview ng-if="$ctrl.pageStatus.page === \'\'" details="$ctrl.preloadedDetails" rating="$ctrl.ingredientRating" additional-region-id="$ctrl.additionalRegionId"></ta-ingredient-desktop-overview><ta-recipe ng-if="$ctrl.pageStatus.page ===\'recipe\'" template="desktop" entity="INGREDIENT" variation-id="$ctrl.recipeVariationId"></ta-recipe><ta-ingredient-desktop-where-to-buy ng-if="$ctrl.pageStatus.page === \'wheretobuy\'" details="$ctrl.preloadedDetails" preview-title-init="$ctrl.onPreviewTitleChange(data)"></ta-ingredient-desktop-where-to-buy><ta-ingredient-desktop-comments ng-if="$ctrl.pageStatus.page === \'comments\'" details="$ctrl.preloadedDetails" rating="$ctrl.ingredientRating" preview-title-init="$ctrl.onPreviewTitleChange(data)"></ta-ingredient-desktop-comments><ta-comment-process ng-if="$ctrl.userCommentStatus.isCommentProcess && $ctrl.pageStatus.page !== \'recipe\'" details="$ctrl.preloadedDetails" rating-callback="$ctrl.refreshRatingData()"></ta-comment-process></div></div></div><ta-footer-desktop ng-if="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded"></ta-footer-desktop></div>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-desktop-overview/ta-ingredient-desktop-overview.html','<div class="section-divider"><section ng-if="$ctrl.details.InfographicImage && $ctrl.details.InfographicImage.Image"><div class="infographic__container"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.InfographicImage.Image}}" alt="{{$ctrl.details.Name}}-infographic"></div></section><section ng-if="$ctrl.types.length > 0"><ta-food-types-desktop data="$ctrl.types" name="$ctrl.details.Name" on-order-change="$ctrl.onFoodTypesOrderChange(orderBy)"></ta-food-types-desktop></section><section ng-if="$ctrl.partOf.Data.length > 0"><ta-pairing-desktop-dynamic title="\'Part of\'" items="$ctrl.partOf" load-more="$ctrl.loadMorePartOf()"></ta-pairing-desktop-dynamic></section><section ng-if="$ctrl.pairingTips.BeveragePairs.length > 0"><ta-pairing-desktop title="\'Pairing tips\'" pairings="$ctrl.pairingTips.BeveragePairs"></ta-pairing-desktop></section><section ng-if="$ctrl.pairingTips.ToServeWith.length > 0"><ta-pairing-desktop title="\'Serve with\'" pairings="$ctrl.pairingTips.ToServeWith"></ta-pairing-desktop></section><section ng-if="$ctrl.details.HasRecipes" class="authentic-recipe__container"><div class="recipe__variations-list" ng-if="$ctrl.recipeVariations && $ctrl.recipeVariations.length > 1"><div class="recipe__variations-list-title recipe__variations-list-title--overview"><h4 class="h4 h4--muli h4--extrabold h4--uppercase">Recipe variations</h4></div><ta-variations-list template="desktop" food="$ctrl.details" items="$ctrl.recipeVariations" selected-variation-id="$ctrl.recipeVariations[0].RecipeVariationId"></ta-variations-list></div><div class="authentic-recipe authentic-recipe--overview"><h1 class="h1 h1--center h1--medium"><span class="food">{{$ctrl.details.Name}}</span> <span>Authentic recipe</span></h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="authentic-recipe__preparation authentic-recipe__preparation--overview" ng-if="$ctrl.mainRecipeVariation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.mainRecipeVariation.Time.RestingTime.CustomLabel}}</span> <strong>{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.TotalTime)}}</strong></div></div></div><div class="authentic-recipe__text" ng-if="$ctrl.mainRecipeVariation.Description" read-more number-of-letters="500" read-more-txt="{{$ctrl.mainRecipeVariation.Description}}"></div><div class="authentic-recipe__link"><a class="btn btn--red-background btn--inline-flex" ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self">VIEW RECIPE</a></div></div></section><section ng-if="$ctrl.shops.Count > 0"><div class="where_to_buy"><h1 class="h1 h1--medium h1--center"><span>Where to {{$ctrl.details.IsDrink ? \'drink\' : \'taste\'}} and buy&nbsp;</span><span>{{$ctrl.details.Name}}</span></h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="where_to_buy__list"><div class="item" ng-repeat-start="shop in $ctrl.shops.Data track by $index" ng-if="$index === 1"><div class="item__body item__body--promotion" ta-google-ad id="TA_MR_INGREDIENT_OVERVIEW-WTB" name="/21703950087/D_TA_300x250" platform="desktop"></div></div><div class="item" ng-repeat-end><div class="item__body"><div class="item__main"><h2 class="h2 h2--medium h2--bold h2--lowercase">{{shop.Name}}</h2><div class="type">{{shop.Description}}</div><span>{{shop.Address}}</span> <span><a ng-href="tel:{{shop.PhoneNumber}}">{{shop.PhoneNumber}}</a></span></div><div class="item__footer"><a ng-if="shop.Web" ng-href="{{shop.Web | acceptLink}}" target="_blank" rel="nofollow"><i class="icon icon--home"></i> <span>Visit website</span></a> <a ng-click="$ctrl.redirectToGoogleMaps(shop.Longitude, shop.Latitude)"><i class="icon icon--direction"></i> <span>Directions</span></a></div></div></div></div><div class="where-to-buy__link"><a ng-if="$ctrl.shops.Count - $ctrl.shops.Data.length > 0" ng-href="{{::$ctrl.details.EntityUrlLink}}/wheretobuy" target="_self" class="btn btn--red-background btn--inline-flex"><span>CHECK THE WHOLE LIST</span></a></div></div></section><section ng-if="$ctrl.events.Data.length > 0"><div class="event-small-card"><div class="desktopmaxwidth desktopmaxwidth--small"><h1 class="h1 h1--medium h1--center"><span>{{$ctrl.details.Name}} festivals</span></h1><i class="plate-lines plate-lines--center plate-lines--big"></i></div><div class="event-small-card__list"><div ng-repeat="event in $ctrl.events.Data track by $index" class="item"><ta-event-card-desktop event="event"></ta-event-card-desktop></div></div><div ng-if="$ctrl.events.Data.length !== $ctrl.events.Count" class="event-small-card__view-more"><button class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.onLoadMoreEvents()">VIEW MORE</button></div></div></section><section ng-if="$ctrl.overviewDetails && $ctrl.overviewDetails.Videos.length" class="related-videos"><ta-related-videos template="desktop" videos="$ctrl.overviewDetails.Videos"></ta-related-videos></section><section ng-if="$ctrl.shops.Data.length > 0"><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section><section class="similar-list" ng-if="$ctrl.otherVarieties.Items.Data.length > 0 && !$ctrl.details.IsGroup"><div class="similar-list__title"><div><h2 class="h1 h1--center h1--medium h1--lowercase">Other {{::$ctrl.otherVarieties.ParentName}} varieties</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></div></div><ta-similar-list-desktop items="$ctrl.otherVarieties.Items.Data" is-region="false"></ta-similar-list-desktop></section><section class="similar-list" ng-if="$ctrl.similarFoodData.SimilarFoodEntities.length > 0"><div class="similar-list__title"><a ng-href="{{::$ctrl.details.Group.UrlLink}}"><h2 class="h1 h1--center h1--medium h1--lowercase">{{::$ctrl.similarFoodData.SectionTitle}} {{::$ctrl.details.Group.PluralName}}</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></a></div><ta-similar-list-desktop items="$ctrl.similarFoodData.SimilarFoodEntities" is-region="false"></ta-similar-list-desktop></section><section ng-if="$ctrl.moreFromRegion && $ctrl.moreFromRegion.SimilarFoodEntities.length > 0" class="similar-list"><div class="similar-list__title"><a ng-href="{{::$ctrl.details.Region.Current.UrlLink}}"><h2 class="h1 h1--center h1--medium h1--lowercase">{{$ctrl.getMoreFromRegionTitle()}}</h2><i class="plate-lines plate-lines--big plate-lines--center"></i></a></div><ta-similar-list-desktop items="$ctrl.moreFromRegion.SimilarFoodEntities" is-region="true"></ta-similar-list-desktop></section><section ng-if="$ctrl.overviewDetails.Links && $ctrl.overviewDetails.Links.length" class="related-news"><ta-related-news template="desktop" news-articles="$ctrl.overviewDetails.Links"></ta-related-news></section><section class="rating-section" ng-if="$ctrl.rating && $ctrl.overviewDetails.Badges"><h4 class="rating-section__title h4 h4--muli h4--extrabold h4--uppercase">Ratings</h4><div class="rating-section__container"><div class="rating-section__card"><ta-rating-card template="expanded" platform="desktop" details="$ctrl.rating" badges="$ctrl.overviewDetails.Badges" actions="$ctrl.ratingCardActions"></ta-rating-card></div><div class="rating-section__promotion"><div class="promotion promotion--nopadding" ta-google-ad id="TA_MR_INGREDIENT_OVERVIEW-RATING" name="/21703950087/D_TA_300x250" platform="desktop"></div></div></div></section></div>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-desktop-where-to-buy/ta-ingredient-desktop-where-to-buy.html','<div class="section-divider" ng-if="$ctrl.shops.Data.length === 0"><section class="where-to-buy"><div class="miss-text miss-text--nobgcolor"><h2 class="h2 h2--center h2--lowercase h2--muli h2--bold">We\'re still collecting the most relevant info.</h2></div></section><section><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section></div><div ng-if="$ctrl.shops.Data.length > 0" class="section-divider where-to-buy__container"><section class="where-to-buy"><div class="where-to-buy__main"><div class="where-to-buy__list"><div class="where-to-buy__list-body" ta-vertical-load-more handler="$ctrl.loadMoreShops()"><div ng-repeat="shop in $ctrl.shops.Data track by $index" class="item" ng-click="$ctrl.openMarker(shop.Id)" ng-class="{\'item--active\': $ctrl.activeShopId === shop.Id}"><div class="item__body"><div class="item__main"><h2 class="h2 h2--medium h2--bold h2--lowercase">{{shop.Name}}</h2><div class="type">{{shop.Description}}</div><span>{{shop.Address}}</span> <span><a ng-href="tel:{{shop.PhoneNumber}}">{{shop.PhoneNumber}}</a></span></div><div class="item__footer"><a ng-if="shop.Web" ng-href="{{shop.Web | acceptLink}}" target="_blank" rel="nofollow"><i class="icon icon--home"></i> <span>Visit website</span></a> <a ng-click="$ctrl.redirectToGoogleMaps(shop.Longitude, shop.Latitude)"><i class="icon icon--direction"></i> <span>Directions</span></a></div></div></div></div></div><div class="where-to-buy__map"><ta-google-map id="map" class="where-to-buy__map-body" establishment-data="$ctrl.shopsLocation" user-location="$ctrl.location"></ta-google-map></div></div></section><section><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section></div>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-mobile-comments/ta-ingredient-mobile-comments.html','<ta-food-mobile-comments ng-if="$ctrl.promises.length" details="$ctrl.details" rating="$ctrl.rating" promises="$ctrl.promises" get-reviews="$ctrl.getReviews"></ta-food-mobile-comments>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-mobile-overview/ta-ingredient-mobile-main.html','<div class="mobile-dish-container" ta-background-sections to="\'.ta-parent-section\'"><section class="food-detail" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div class="food-detail__image-gallery" ng-if="$ctrl.preloadedDetails.PreviewImage.Image || $ctrl.preloadedDetails.Images.length || $ctrl.preloadedDetails.MobileImages"><ta-image-gallery-mobile preview="$ctrl.preloadedDetails.PreviewImage" photos="$ctrl.preloadedDetails.Images" mobile-photos="$ctrl.preloadedDetails.MobileImages"></ta-image-gallery-mobile></div><div class="food-detail__header"><div class="group"><a ng-href="{{$ctrl.preloadedDetails.Group.UrlLink}}">{{$ctrl.preloadedDetails.Group.Name}}</a></div><div class="food-detail__header-title"><h1 class="h1 h1--bold h1--lowercase" ng-if="$ctrl.preloadedDetails.Certificates.length === 0"><span>{{$ctrl.preloadedDetails.Name}}</span></h1><div class="certificate__container certificate__container--multiple" ng-if="$ctrl.preloadedDetails.Certificates.length > 0"><h1 class="h1 h1--bold h1--lowercase"><span>{{$ctrl.preloadedDetails.Name}}</span> <span class="certificate certificate--multiple"><a ng-repeat="c in $ctrl.preloadedDetails.Certificates" ng-href="{{c.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h1" ng-repeat="c in $ctrl.preloadedDetails.Certificates" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::c.Image}}?mw=35\');"></i></a></span></h1></div><div class="food-detail__header-map" ng-if="$ctrl.imageData"><a ng-href="{{::$ctrl.preloadedDetails.Region.Current.UrlLink}}" target="_blank"><ta-map-image image-filter="$ctrl.imageData"></ta-map-image></a></div></div><div class="location" ng-if="!$ctrl.preloadedDetails.AdditionalRegions.length"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.preloadedDetails.Region.Current.EmblemImage || $ctrl.preloadedDetails.Region.Parent.EmblemImage}}?mw=40"> <a class="region" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}">{{::$ctrl.getRegionName()}}</a></div><div class="location" ng-if="$ctrl.preloadedDetails.AdditionalRegions.length"><img ng-class="{ \'img--highlight\' : $ctrl.preloadedDetails.Region.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.preloadedDetails.Region.Current.EmblemImage}}?mw=40"><div><a class="region" href="{{$ctrl.preloadedDetails.Region.Current.UrlLink}}">{{::$ctrl.getRegionName()}} and</a> <span ng-click="$ctrl.showMoreRegions()">{{$ctrl.preloadedDetails.AdditionalRegionText}}</span></div></div><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()" ng-if="$ctrl.moreRegionsVisible"></i><div class="location location--additional" ng-if="$ctrl.moreRegionsVisible" ng-repeat="additionalRegion in $ctrl.preloadedDetails.AdditionalRegions"><img ng-class="{ \'img--highlight\' : additionalRegion.Current.RegionLevel >= $ctrl.regionLevels.Country }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{additionalRegion.Current.EmblemImage || additionalRegion.Parent.EmblemImage}}?mw=40"> <a class="region" href="{{additionalRegion.RegionUrl}}">{{::$ctrl.getRegionName(additionalRegion)}}</a><div class="food-detail__header-map"><ta-map-image ng-if="$ctrl.regionsImageData[$index]" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image></div></div><div class="score"><ta-comment-button details="$ctrl.preloadedDetails" include-rating-control="true"></ta-comment-button></div></div></section><div class="food-navigation food-navigation--food-item" ng-if="$ctrl.preloadedDetails && $ctrl.pageStatus.page === \'\'"><div class="about-food"><div class="about-food__menu"><div class="nav-fix"><nav id="about-food__nav-regular" class="about-food__nav-fix"><div ta-show-nav-arrow></div><ul class="about-food__nav__list about-food__nav__list--tall"><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}" target="_self">Overview</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'wheretobuy\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/wheretobuy" target="_self">Where to buy</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'recipe\'}" ng-if="$ctrl.preloadedDetails.HasRecipes"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/recipe" target="_self">Recipe</a></li><li class="about-food__nav__item" ng-class="{\'about-food__nav__item--selected\' : $ctrl.pageStatus.page ===\'comments\'}"><a ng-href="{{::$ctrl.preloadedDetails.EntityUrlLink}}/comments" target="_self">Comments</a></li></ul></nav></div></div></div></div><div ng-if="$ctrl.preloadedDetails" id="nav-stick" style="margin-top: 0px; display:none;" ta-show-nav offset="$ctrl.getStickyNavOffset()" details="$ctrl.details" url-links="$ctrl.urlLinks" active-page="$ctrl.pageStatus.page"></div><div id="pg_content_holder" class="content-holder" ng-class="{ \'content-holder--subpage\' : $ctrl.pageStatus.page !== \'\' }" ng-if="$ctrl.pageStatus.isLoaded"><ta-ingredient-mobile-overview ng-if="$ctrl.pageStatus.page === \'\'" details="$ctrl.preloadedDetails" rating="$ctrl.ingredientRating" additional-region-id="$ctrl.additionalRegionId"></ta-ingredient-mobile-overview><ta-ingredient-mobile-where-to-buy ng-if="$ctrl.pageStatus.page === \'wheretobuy\'" details="$ctrl.preloadedDetails"></ta-ingredient-mobile-where-to-buy><ta-recipe ng-if="$ctrl.pageStatus.page === \'recipe\'" template="mobile" entity="INGREDIENT" details="$ctrl.preloadedDetails" variation-id="$ctrl.recipeVariationId"></ta-recipe><ta-ingredient-mobile-comments ng-if="$ctrl.pageStatus.page === \'comments\'" details="$ctrl.preloadedDetails" rating="$ctrl.ingredientRating"></ta-ingredient-mobile-comments><section ng-show="!$ctrl.pageStatus.isSectionLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></section></div><div class="promotion" ng-show="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded" ta-google-ad id="TA_MR_INGREDIENT_EXPLORE" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-comment-process-mobile ng-if="$ctrl.userCommentStatus.isCommentProcess && $ctrl.pageStatus.page !==\'recipe\'" details="$ctrl.preloadedDetails" rating-callback="$ctrl.refreshRatingData(comment)"></ta-comment-process-mobile><ta-footer-mobile ng-show="$ctrl.pageStatus.isLoaded && $ctrl.pageStatus.isSectionLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-mobile-overview/ta-ingredient-mobile-overview.html','<section class="food-ingredients-section" ng-class="{ \'food-ingredients-section--border-bottom\' : $ctrl.details.InfographicImage && $ctrl.details.InfographicImage.Image }" ng-if="$ctrl.details.foodIngredients.isValid"><ta-food-ingredients items="$ctrl.details.foodIngredients.data" template="mobile"></ta-food-ingredients></section><section class="infographic-section" ng-if="$ctrl.details.InfographicImage && $ctrl.details.InfographicImage.Image"><div class="infographic__container"><img ng-src="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.InfographicImage.Image}}?mw=900" alt="{{$ctrl.details.Name}}-infographic"></div></section><section ng-if="$ctrl.details" class="about-food__body basic-margin"><div class="about-food__text" ng-if="$ctrl.details.Description" read-more-by-sentence read-more-txt="{{$ctrl.details.Description}}"></div></section><div class="promotion"><div ta-google-ad id="TA_MR_INGREDIENT_EXPLORE_RATING" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-food-types-mobile ng-if="$ctrl.types.length > 0" data="$ctrl.types" name="$ctrl.details.Name" on-order-change="$ctrl.onFoodTypesOrderChange(orderBy)"></ta-food-types-mobile><div class="ta-parent-section" ng-if="$ctrl.partOf.Data.length"><ta-pairing-mobile title="\'Part of\'" pairings="$ctrl.partOf.Data"></ta-pairing-mobile></div><div class="ta-parent-section" ng-if="$ctrl.pairingTips.BeveragePairs.length > 0 || $ctrl.pairingTips.ToServeWith.length > 0"><ta-pairing-mobile ng-if="$ctrl.pairingTips.BeveragePairs.length > 0" title="\'Pair with\'" pairings="$ctrl.pairingTips.BeveragePairs"></ta-pairing-mobile><div class="pairing-tips__separator" ng-if="$ctrl.pairingTips.ToServeWith.length > 0"></div><ta-pairing-mobile ng-if="$ctrl.pairingTips.ToServeWith.length > 0" title="\'Serve with\'" pairings="$ctrl.pairingTips.ToServeWith"></ta-pairing-mobile></div><section ng-if="$ctrl.details.HasRecipes" class="authentic-recipe authentic-recipe--noborder authentic-recipe--overview ta-parent-section"><div class="recipe__variations-list recipe__variations-list--horizontal" ng-if="$ctrl.recipeVariations && $ctrl.recipeVariations.length > 1"><div class="recipe__variations-list-title"><h2 class="h2 h2--bold h2--capitalize">Recipe variations</h2></div><ta-variations-list items="$ctrl.recipeVariations" template="mobile" food="$ctrl.details" selected-variation-id="$ctrl.recipeVariations[0].RecipeVariationId"></ta-variations-list></div><h1 class="h1 h1--center"><span class="top">{{$ctrl.details.Name}}&nbsp;</span> <span class="bottom">Authentic recipe</span></h1><div class="authentic-recipe__content"><div class="authentic-recipe__preparation" ng-if="$ctrl.mainRecipeVariation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.mainRecipeVariation.Time.RestingTime.CustomLabel}}</span> <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.mainRecipeVariation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.mainRecipeVariation.Time.TotalTime)}}</strong></div></div></div><div class="authentic-recipe__summary" ng-if="$ctrl.mainRecipeVariation.Description" read-more number-of-letters="200" read-more-txt="{{$ctrl.mainRecipeVariation.Description}}"></div><div class="authentic-recipe__ingredients" ng-if="$ctrl.recipeIngredientsPreview.length"><div class="authentic-recipe__ingredients-title"><h3 class="h3 h3--capitalize authentic-recipe__ingredients-title-left">Ingredients</h3><div class="authentic-recipe__ingredients-title-right" ng-if="$ctrl.mainRecipeVariation.Servings"><span>{{::$ctrl.mainRecipeVariation.Servings}} {{$ctrl.mainRecipeVariation.Servings === 1 ? \'serving\' : \'servings\'}}</span></div></div><div class="authentic-recipe__ingredients-list"><ul class="recipe__ingredients"><li ng-repeat="ingredientElement in $ctrl.recipeIngredientsPreview track by $index" ng-class="{ \'recipe__ingredients-item\' : ingredientElement.Description, \'authentic-recipe__ingredients-list-item--ultimo\' : $ctrl.recipeIngredientsPreview.length > 7 && $index === 6, \'authentic-recipe__ingredients-list-item--penultimo\' : $ctrl.recipeIngredientsPreview.length > 7 && $index === 5, \'recipe__ingredients-label\' : !ingredientElement.Description }" ng-if="$index < 7"><h4 class="recipe__ingredients-title h4 h4--extrabold h4--muli h4--uppercase" ng-if="ingredientElement.name">{{::ingredientElement.name}}</h4><div ng-if="ingredientElement.Description">{{ingredientElement.Description}}</div></li><li class="recipe__ingredients-view-more"><a class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self">VIEW RECIPE</a></li></ul></div></div><div class="recipe__ingredients-view-more" ng-if="!$ctrl.recipeIngredientsPreview.length"><a class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-href="{{::$ctrl.mainRecipeVariation.EntityUrlLink}}/recipe" target="_self">VIEW RECIPE</a></div></div></section><section ng-if="$ctrl.shops.Count > 0" class="where_to_buy ta-parent-section"><div class="where_to_buy__header"><h1 class="h1 h1--small h1--center"><span class="top">Where to {{$ctrl.details.IsDrink ? \'drink\' : \'taste\'}} and buy</span> <span class="bottom">{{$ctrl.details.Name}}?</span></h1></div><div class="food-navigation" ng-if="$ctrl.location.hasLocation"><div class="about-food"><div class="about-food__menu"><nav id="about-food__nav-regular" class="about-food__nav-fix"><div ta-show-nav-arrow></div><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--even"><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedShopsLocation === \'nearme\' }" ng-click="$ctrl.changeShopsLocation(\'nearme\')">Near me</li><li class="about-food__nav__item" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedShopsLocation === \'all\' }" ng-click="$ctrl.changeShopsLocation(\'all\')">All</li></ul></nav></div></div></div><div class="where_to_buy__list"><div class="where_to_buy__item" ng-repeat="shop in $ctrl.displayedShops.Data track by $index"><div class="description">{{shop.Description}}</div><h1 class="h3 h3--large">{{shop.Name}}</h1><div class="where_to_buy__info"><div class="where_to_buy__location" ng-click="$ctrl.redirectToGoogleMaps(shop.Longitude, shop.Latitude)"><div class="address"><i class="icon icon--pin"></i> <span>{{shop.Address}}</span></div><div class="distance" ng-if="shop.Distance"><span>{{$ctrl.getDistance(shop)}}</span> <span class="dot-divide">\xB7</span> <span class="directions">DIRECTIONS</span></div></div><div ng-if="shop.PhoneNumber || shop.Web" class="where_to_buy__contact"><a ng-if="shop.PhoneNumber" ng-href="tel:{{shop.PhoneNumber}}"><i class="icon icon--phone"></i> <span>{{shop.PhoneNumber}}</span></a> <a ng-if="shop.Web" ng-href="{{shop.Web | acceptLink}}" target="_blank" rel="nofollow"><span class="dot-divide">\xB7</span> <i class="icon icon__grid-world icon__grid-world--gray"></i> <span>{{shop.Web}}</span></a></div></div></div></div><div class="where_to_eat__view-more" ng-if="$ctrl.shops.Count - $ctrl.shops.Data.length > 0"><a class="btn btn--nopadding btn--underscore btn--inline btn--black-text btn--no-bgcolor btn--extrabold hide-span-element" ng-href="{{::$ctrl.details.EntityUrlLink}}/wheretobuy" target="_self">VIEW MORE</a></div><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section><section ng-if="$ctrl.events.Data.length > 0" class="ta-parent-section festivals-dish"><div class="festivals"><section><h1 class="h1 h1--center"><span>{{$ctrl.details.Name}} festivals</span></h1><ta-mobile-food-order on-order-change="$ctrl.onEventsOrderChange(orderBy)" options="$ctrl.eventOrderOptions"></ta-mobile-food-order><div class="event-horizontal-card"><ul class="event-horizontal-card__list"><li ng-repeat="event in $ctrl.events.Data track by $index" class="event-horizontal-card__list-item" ng-class="{ \'event-horizontal-card__list-item--single\' : $ctrl.events.Data.length < 2 }"><ta-event-horizontal-mobile event="event"></ta-event-horizontal-mobile></li></ul></div></section></div></section><section ng-if="$ctrl.overviewDetails && $ctrl.overviewDetails.Videos.length" class="related-videos ta-parent-section"><ta-related-videos template="mobile" videos="$ctrl.overviewDetails.Videos"></ta-related-videos></section><section class="similar-list ta-parent-section" ng-if="$ctrl.otherVarieties.Items.Data.length > 0 && !$ctrl.details.IsGroup"><div class="similar-list__title"><h2 class="h1 h1--center h1--lowercase">Other {{::$ctrl.otherVarieties.ParentName}} varieties</h2></div><ta-similar-list-mobile items="$ctrl.otherVarieties.Items.Data" is-region="false"></ta-similar-list-mobile></section><section class="similar-list ta-parent-section" ng-if="$ctrl.similarIngredients.length > 0"><a ng-href="{{::$ctrl.details.Group.UrlLink}}" class="similar-list__title"><h2 class="h1 h1--center h1--lowercase">Similar {{::$ctrl.details.Group.PluralName}}</h2></a><ta-similar-list-mobile items="$ctrl.similarIngredients" is-region="false"></ta-similar-list-mobile></section><section ng-if="$ctrl.moreFromRegion && $ctrl.moreFromRegion.SimilarFoodEntities.length > 0" class="similar-list ta-parent-section"><a ng-href="{{::$ctrl.details.Region.Current.UrlLink}}" class="similar-list__preview"><div class="similar-list__preview-image" ng-if="$ctrl.details.Region.Current.CoverImage.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.Region.Current.CoverImage.Image}}?mw=600"></div><div class="similar-list__preview-image similar-list__preview-image--random" ng-if="!$ctrl.details.Region.Current.CoverImage.Image"><img ta-lazy-load lazy-source="random"></div><h2 class="h1 h1--center h1--lowercase">{{$ctrl.getMoreFromRegionTitle()}}</h2></a><ta-similar-list-mobile items="$ctrl.moreFromRegion.SimilarFoodEntities" is-region="true"></ta-similar-list-mobile></section><section ng-if="$ctrl.overviewDetails.Links && $ctrl.overviewDetails.Links.length" class="related-news ta-parent-section"><ta-related-news template="mobile" news-articles="$ctrl.overviewDetails.Links"></ta-related-news></section><section class="ta-parent-section" ng-if="$ctrl.rating && $ctrl.ratingCardActions && $ctrl.overviewDetails.Badges"><h4 class="rating-card__title h4 h4--bold h4--muli h4--uppercase">RATINGS</h4><ta-rating-card template="basic" platform="mobile" details="$ctrl.rating" badges="$ctrl.overviewDetails.Badges" actions="$ctrl.ratingCardActions"></ta-rating-card></section>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-mobile-where-to-buy/ta-ingredient-mobile-where-to-buy.html','<section ng-if="$ctrl.shops.Data.length === 0"><div class="where-to-buy"><div class="where-to-buy__header"><h1 class="h1 h1--small h1--center"><span>Where to {{$ctrl.details.IsDrink ? \'drink\' : \'taste\'}} and buy&nbsp;</span><span>{{$ctrl.details.Name}}</span></h1><i class="plate-lines plate-lines--center"></i></div><h2 class="h2 h2--center h2--lowercase h2--muli h2--bold">We\'re still collecting the most relevant info.</h2><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></div></section><section ng-if="$ctrl.shops.Data.length > 0" class="where-to-buy"><div class="where-to-buy__header"><ta-google-map id="map-canvas" establishment-data="$ctrl.shopsLocation" user-location="$ctrl.location"></ta-google-map><h2 class="h1 h1--small h1--center"><span>Where to {{$ctrl.details.IsDrink ? \'drink\' : \'taste\'}} and buy&nbsp;</span><span>{{$ctrl.details.Name}}</span></h2><i class="plate-lines plate-lines--center"></i></div><div class="where-to-buy__list"><div class="where-to-buy__item" ng-repeat="shop in $ctrl.shops.Data track by $index"><h1 class="h3">{{shop.Name}}</h1><div class="description">{{shop.Description}}</div><div class="where-to-buy__info"><div class="left"><a ng-click="$ctrl.redirectToGoogleMaps(shop.Longitude, shop.Latitude)"><i class="icon icon--direction"></i><div class="adress">{{shop.Address}}</div><div class="distance" ng-if="shop.Distance"><span>{{$ctrl.getDistance(shop)}}</span> away</div></a></div><div class="right"><a ng-href="tel:{{shop.PhoneNumber}}"><i class="icon icon--phone"></i></a> <a ng-if="shop.Web" ng-href="{{shop.Web | acceptLink}}" target="_blank" rel="nofollow"><i class="icon icon--home"></i></a></div></div><ta-ingredient-error-mobile shop="shop"></ta-ingredient-error-mobile><div ng-if="($index + 1) % 5 == 0"><div ta-google-ad id="TA_MR_INGREDIENT_WTB_INFINITE-{{$index}}" name="/21703950087/M_TA_test" platform="mobile"></div></div></div></div><div class="btn--padding-vertical"><ta-view-more-button items="$ctrl.shops" button-class="\'btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isShopsLoading" on-view-more="$ctrl.loadMoreShops()"></ta-view-more-button></div><ta-know-more-ingredient-establishment name="$ctrl.details.Name"></ta-know-more-ingredient-establishment></section><style>\r\n    .info-container {\r\n    }\r\n\r\n    .info-container__title {\r\n        margin-bottom: 5px;\r\n        font-family: Muli;\r\n        font-size: 14px;\r\n        font-weight: bold;\r\n        font-style: normal;\r\n        font-stretch: normal;\r\n        line-height: 1.93;\r\n        letter-spacing: normal;\r\n        text-align: left;\r\n        color: #40403f;\r\n    }\r\n\r\n    .info-container__content {\r\n        color: #40403f;\r\n        display: flex;\r\n    }\r\n\r\n    .info-container__directions {\r\n        margin-left: 5px;\r\n        color: #828282;\r\n        color: var(--greytext);\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/ingredient-details/ingredient-shared/ta-ingredient-error-mobile.html','<section class="see-any-errors"><div class="btn btn--smallest btn--dark-gray-border btn--noborder" ng-click="$ctrl.onErrorFormShow()">See any errors?</div><div ng-if="$ctrl.isErrorFormShown"><form name="$ctrl.errorForm" ng-submit="$ctrl.submit()" novalidate><div class="see-any-errors__fieldgroup"><textarea class="input" ng-model="$ctrl.data.content" ng-change="$ctrl.resetError()" placeholder="COMMENT" required>\r\n                    {{$ctrl.data.content}}\r\n                </textarea> <input class="input" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" placeholder="EMAIL (optional)"></div><div class="see-any-errors__validate" ng-show="$ctrl.errorForm.email.$error.email">Email not valid!</div><div class="see-any-errors__validate" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div><div ng-class="{\'btn btn--disabled-background\': $ctrl.errorForm.$invalid, \'btn btn--red-background\': !$ctrl.errorForm.$invalid }" ng-disabled="$ctrl.errorForm.$invalid" ng-click="$ctrl.submit()"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></form></div></section>');$templateCache.put('/content/scripts/app/components/landing/landing-desktop/ta-landing-desktop.html','<div class="landing-page"><div class="landing-page__main"><h1 class="h1 h1--medium h1--center" ng-if="!$ctrl.isError">Discover local ingredients,<br>traditional dishes & authentic restaurants</h1><div class="landing-page__notfound" ng-if="$ctrl.isError"><h1 class="h1 h1--medium h1--center">Sorry, page not found</h1><p class="landing-page__suggestion">Take a look at <a ng-repeat="suggestion in $ctrl.suggestions" class="landing-page__suggestion-item" ng-href="/{{suggestion.UrlLink}}">{{suggestion.Name}}</a> instead, or search for something else.</p></div><div class="autocomplete autocomplete--large"><div class="autocomplete__container"><div class="autocomplete__input" ng-class="{ \'autocomplete__input--open\' : $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length }"><i ng-if="!$ctrl.showSearchResults" class="icon icon--search"></i> <input type="text" autocomplete="off" placeholder="Search locations or food" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-keydown="$ctrl.onKeyDown($event)" class="input input--biggest input--noborder input--shadow-large"> <i class="icon icon--close-cross--black icon--close-cross--black--search" ng-click="$ctrl.onInputDelete()" ng-if="$ctrl.showSearchResults"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.showSearchResults"><div ng-if="$ctrl.query.length > 1 && $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><i ng-show="$ctrl.onlyRecipes" class="ta ta-recipe-search"></i></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom: none; overflow: hidden;"><div class="section__title">CURRENT LOCATION</div><a href="{{$ctrl.currentRegion.UrlLink}}" class="item" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-click="$ctrl.onCurrentRegionClick($ctrl.currentRegion)"><div class="left"><div class="emblem"><img ng-if="$ctrl.currentRegion.Emblem" ng-class="$ctrl.currentRegion.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.currentRegion.Emblem}}?mw=40"> <i ng-if="!$ctrl.currentRegion.Emblem" class="icon icon--location"></i></div></div><div class="right"><div class="place">{{$ctrl.currentRegion.Name}}</div><div class="address">{{$ctrl.currentRegion.ParentFullName}}</div></div></a><div class="item" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.turnOnLocation()"><div class="left"><div class="emblem"><i class="icon icon__location-circle--gray icon_location-service"></i></div></div><div class="right location-service-text">Turn on location services</div></div></div><div class="knows-nothing" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div ng-if="!$ctrl.isJohnSnow && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);" class="item">Did you mean &nbsp;<strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="section" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index" ng-if="$ctrl.autocompleteItems.CustomItems.length"><div class="item item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div><div class="section__title section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="section" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index" ng-if="$ctrl.autocompleteItems.Items.length"><div class="item item--column" ng-style="focused && { \'background-color\':\'#f2f2f2\' }" tabindex="0" ng-click="$ctrl.onItemSelect(item)" ng-focus="focused=true" ng-blur="focused=false" autocomplete-keyboard-nav item="item" input-container="\'.autocomplete__container\'" item-class="\'.item\'" nav-action="$ctrl.onItemSelect(item)"><div ng-if="item.Subtitle" class="top-row address" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="bottom-row"><div class="image"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.PreviewImage.Image}}?mw=150"> <img class="icon-image" ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" src="/Content/layout-shared/layout/icons/pin.svg"></div><div class="text"><div class="place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div><div class="group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div></div></div></div></div></div></div></div><div class="map__container"><div class="overlay"><div class="explore-map"><a href="/map" class="btn btn--black-special btn--lowercase btn--semibold btn--inline btn--round">Explore map</a></div></div><div class="map"></div></div><div class="social-media flex"><a href="https://www.facebook.com/TasteAtlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_facebook"></i></a> <a href="https://twitter.com/TasteAtlas" target="_blank" class="social-media__icon"><i class="ta ta-bxl_twitter"></i></a> <a href="https://www.instagram.com/tasteatlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_instagram"></i></a> <a href="https://www.pinterest.com/tasteatlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_pinterest"></i></a></div></div></div>');$templateCache.put('/content/scripts/app/components/landing/landing-desktop/ta-notfound-desktop.html','<ta-landing-desktop is-error="true" suggestions="$ctrl.suggestions"></ta-landing-desktop>');$templateCache.put('/content/scripts/app/components/landing/landing-mobile/ta-landing-mobile.html','<div class="landing-page"><div class="landing-page__main" id="landing_main"><div class="map__container"><h1 class="h1 h1--medium h1--center" ng-if="!$ctrl.isError">Discover local ingredients,<br>traditional dishes &<br>authentic restaurants</h1><div class="landing-page__notfound" ng-if="$ctrl.isError"><h1 class="h1 h1--medium h1--center">Sorry, page not found</h1><p class="landing-page__suggestion">Take a look at <a ng-repeat="suggestion in $ctrl.suggestions" class="landing-page__suggestion-item" ng-href="/{{suggestion.UrlLink}}">{{suggestion.Name}}</a> instead, or search for something else.</p></div><div class="autocomplete"><div class="autocomplete__container"><div class="autocomplete__input"><i ng-if="!$ctrl.showSearchResults" class="icon icon--search"></i> <input type="text" autocomplete="off" placeholder="Search locations or food" ng-model="$ctrl.query" ng-trim="false" ng-model-options="{ debounce: 300 }" ng-change="$ctrl.onInputSearch($ctrl.query)" ng-click="$ctrl.onInputClick()" ng-focus="$ctrl.openSearch()" ng-keydown="$ctrl.onInputEnter($event)" class="input input--noborder input--shadow" id="autocomplete_input"> <i class="icon icon--close-cross--black icon--close-cross--black--search" ng-click="$ctrl.onInputDelete()" ng-if="$ctrl.showSearchResults"></i></div><div class="autocomplete__list" ng-if="$ctrl.showSearchResults"><div ng-if="$ctrl.query.length > 1 && $ctrl.autocompleteItems.CustomItems.length || $ctrl.autocompleteItems.Items.length" class="search-only-recipes search-only-recipes--section" ng-click="toggleSearchOnlyRecipes($ctrl.query)"><div class="search-only-recipes--toggle-btn" ng-class="{\'search-only-recipes--toggle-btn__active\' : $ctrl.onlyRecipes}"><svg ng-show="$ctrl.onlyRecipes" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewbox="-305 390.5 13 13" style="enable-background:new -305 390.5 13 13;" xml:space="preserve"><style type="text/css">\r\n                                    .st0 {\r\n                                        fill: #F5533D;\r\n                                    }\r\n                                </style><path class="st0" d="M-299.4,399l-2.3-2.3l0.7-0.7l1.7,1.7l3.6-3.6l0.7,0.7L-299.4,399z"></path></svg></div><p>search only recipes</p></div><div class="search-section" ng-if="$ctrl.query.length === 0 && $ctrl.geolocationState !== \'DENIED\'" style="border-bottom:none;"><div class="search-section__title">CURRENT LOCATION</div><a class="search-item" ng-if="$ctrl.geolocationState === \'GRANTED\'" ng-repeat="region in $ctrl.regions" href="{{region.UrlLink}}" ng-click="$ctrl.onCurrentRegionClick(region)"><div class="search-item__thumb search-item__thumb--baseline" ng-class="{ \'search-item__thumb--mt5\' : !region.Emblem }"><img ng-if="region.Emblem" ng-class="region.category == \'Country\' ? \'borderized\' :\'\'" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Emblem}}?mw=40"> <i ng-if="!region.Emblem" class="icon icon--location"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--place">{{region.Name}}</div><div class="search-item__desc__line search-item__desc__line--address">{{region.ParentFullName}}</div></div></a><div class="search-item search-item--location-services" ng-if="$ctrl.geolocationState === \'PROMPT\'" ng-click="$ctrl.turnOnLocation()"><div class="search-item__thumb"><i class="icon icon__location-circle--gray icon_location-service"></i></div><div class="search-item__desc__line location-service-text">Turn on location services</div></div></div><div class="knows-nothing knows-nothing--small" ng-if="$ctrl.isJohnSnow && $ctrl.query.length > 1 && $ctrl.autocompleteItems.length === 0"><ta-knows-nothing name="$ctrl.query"></ta-knows-nothing></div><div ng-if="!$ctrl.isJohnSnow && $ctrl.autocompleteItems.length === 0" ng-show="$ctrl.showSuggestion" ng-click="$ctrl.query=$ctrl.suggestionItem.Name;$ctrl.onInputSearch($ctrl.suggestionItem.Name);" class="item">Did you mean &nbsp;<strong>{{$ctrl.suggestionItem.Name}}</strong>?</div><div class="search-section" ng-if="$ctrl.autocompleteItems.CustomItems.length" ng-repeat="item in $ctrl.autocompleteItems.CustomItems track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && item.PreviewImage.Image, \'search-item__thumb--mt5\' : !$ctrl.isEmblem(item.EntityType) || item.TypeOverride }"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"> <i ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon icon--location"></i> <i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc" ng-class="{ \'search-item__desc--primary\' : $index === 0 }"><div class="search-item__desc__line search-item__desc__line--address" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div></div></div></div><div class="search-section__title search-section__title--separator" ng-if="$ctrl.autocompleteItems.CustomItems.length && $ctrl.autocompleteItems.Items.length"></div><div class="search-section" ng-if="$ctrl.autocompleteItems.Items.length" ng-repeat="item in $ctrl.autocompleteItems.Items track by $index"><div class="search-item" ng-click="$ctrl.onItemSelect(item)"><div class="search-item__thumb" ng-class="{ \'search-item__thumb--baseline\' : !item.Subtitle && item.PreviewImage.Image, \'search-item__thumb--mt5\' : !$ctrl.isEmblem(item.EntityType) || item.TypeOverride }"><img class="food-image" ng-class="{ \'emblem-image\' : $ctrl.isEmblem(item.EntityType) }" ng-if="item.PreviewImage && item.PreviewImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.PreviewImage.Image}}?mw=150"> <i ng-if="(item.EntityType === $ctrl.itemTypes.Region || item.EntityType === $ctrl.itemTypes.RegionPlace) && !item.PreviewImage.Image" class="icon icon--location"></i> <i ng-if="item.EntityType === $ctrl.itemTypes.Restaurant && !item.PreviewImage.Image" class="icon icon--dish"></i></div><div class="search-item__desc"><div class="search-item__desc__line search-item__desc__line--group-type" ng-if="item.Subtitle" ng-bind-html="item.Subtitle | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--place" ng-if="item.Name" ng-bind-html="$ctrl.getItemName(item) | accentSearchQuery: $ctrl.query"></div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.TypeOverride">{{item.TypeOverride}}</div><div class="search-item__desc__line search-item__desc__line--uppercase search-item__desc__line--group-type" ng-if="item.EntityType && !item.TypeOverride">{{$ctrl.itemTypeLabels[item.EntityType]}}</div></div></div></div></div></div></div><a href="/nearme" class="location"><i class="icon icon--location icon--location--white"></i><p class="location__text">View authentic restaurants near me</p></a><div class="overlay"><div class="explore-map"><a href="/map" class="btn btn--black-special btn--lowercase btn--semibold btn--inline btn--round">Explore map</a></div></div><div class="map"></div><div class="social-media flex"><a href="https://www.facebook.com/TasteAtlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_facebook"></i></a> <a href="https://twitter.com/TasteAtlas" target="_blank" class="social-media__icon"><i class="ta ta-bxl_twitter"></i></a> <a href="https://www.instagram.com/tasteatlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_instagram"></i></a> <a href="https://www.pinterest.com/tasteatlas/" target="_blank" class="social-media__icon"><i class="ta ta-bxl_pinterest"></i></a></div></div></div></div>');$templateCache.put('/content/scripts/app/components/landing/landing-mobile/ta-notfound-mobile.html','');$templateCache.put('/content/scripts/app/components/miscellaneous/about/ta-about-desktop.html','<section><div class="static-page-desktop__main"><div class="static-page-desktop__main__image"><img src="content/layout/images/about_us.png" alt="about_us" border="0"></div><div class="static-page-desktop__main__desc"><p>TasteAtlas is an encyclopedia of flavors, a world atlas of traditional dishes, local ingredients, and authentic restaurants.</p><p>We have cataloged over 10,000 foods and drinks, and there are dozens of thousands yet to be researched and mapped. The popular ones, as well as the forgotten tastes and aromas of every city, region, and village in the world.</p><p>Travel, explore, eat, and drink. Discover and appreciate local foods, respect the people making it.</p><p>Share your impressions with us. Save your grandmothers\' recipes from being forgotten, and present the dishes of your childhood to the world gourmet map.</p><p>Join us in this exciting adventure through the authentic tastes of the world.</p><p>TasteAtlas Team<br><a class="static-page-desktop__link" href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></p><small class="static-page-desktop__copyright">\xA9 {{::$ctrl.currentYear}} AtlasMedia Ltd. (EU) - All Rights Reserved</small></div></div></section>');$templateCache.put('/content/scripts/app/components/miscellaneous/about/ta-about-mobile.html','<section><div class="static-page-container"><div class="static-page-wrapper"><div class="static-page-wrapper__title"><h1>About TasteAtlas</h1><i class="plate-lines plate-lines--center"></i></div><div class="static-page-wrapper__main"><p>TasteAtlas is an encyclopedia of flavors, a world atlas of traditional dishes, local ingredients, and authentic restaurants.</p><p>We have cataloged over 10,000 foods and drinks, and there are dozens of thousands yet to be researched and mapped. The popular ones, as well as the forgotten tastes and aromas of every city, region, and village in the world.</p><p>Travel, explore, eat, and drink. Discover and appreciate local foods, respect the people making it.</p><p>Share your impressions with us. Save your grandmothers\' recipes from being forgotten, and present the dishes of your childhood to the world gourmet map.</p><p>Join us in this exciting adventure through the authentic tastes of the world.</p><p>TasteAtlas Team<br><a class="static-page-wrapper__link" href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></p><small class="static-page-wrapper__copyright">\xA9 {{::$ctrl.currentYear}} AtlasMedia Ltd. (EU) - All Rights Reserved</small></div></div></div></section>');$templateCache.put('/content/scripts/app/components/miscellaneous/privacy/ta-privacy-desktop.html','<section><div class="static-page-desktop"><div class="static-page-desktop__main privacy-and-policy terms-and-conditions"><div><p>At TasteAtlas, your privacy is very important to us. Therefore, we designed this Privacy and Cookies Policy which governs the manner in which we collect, use, maintain, and disclose information collected from users (each, a "User") of the <a href="http://www.tasteatlas.com">website</a> ("Website"). By using this website, you signify your acceptance of this policy. If you do not agree to this policy, please do not use our website. Your continued use of the website following the posting of changes to this policy will be deemed your acceptance of those changes.</p></div><div><h1 class="h1--medium">Personal identification information</h1><p>We may collect personal identification information from users in a variety of ways, including, but not limited to, when users visit our site, register on the website, and in connection with other activities, services, features, or resources we make available on our website. Users may be asked for, as appropriate, name, email address, and mailing address. Users may, however, visit our website anonymously. We will collect personal identification information from users only if they voluntarily submit such information to us. Users can always refuse to supply personally identification information, except that it may prevent them from engaging in certain website related activities.</p><h1 class="h1--medium">Non-personal identification information</h1><p>We may collect non-personal identification information about users whenever they interact with our website. Non-personal identification information may include the browser name, the type of computer, and technical information about users means of connection to our website, such as the operating system and the Internet service providers utilized and other similar information.</p></div><div><h1 class="h1--medium">Cookies</h1><p>Our Site may use "cookies" to enhance user experience. User\'s web browser places cookies on their hard drive for record-keeping purposes and sometimes to track information about them. User may choose to set their web browser to refuse cookies, or to alert you when cookies are being sent. If they do so, note that some parts of the website may not function properly.</p></div><div><h1 class="h1--medium">How we use collected information</h1><p>TasteAtlas may collect and use user\u2019s personal information for the following purposes:<ul><li>(1) To run and operate our website</li><li>(2) We may need your information display content on the website correctly.</li><li>(3) Information you provide helps us respond to your customer service requests and support needs more efficiently.</li><li>(4) To improve customer service</li><li>(5) To personalize user experience</li><li>(6) We may use information in the aggregate to understand how our users as a group use the services and resources provided on our website.</li><li>(7) To improve our website</li><li>(8) We may use feedback you provide to improve our products and services.</li><li>(9) To run a promotion, contest, survey or other website feature</li><li>(10) To send users information they agreed to receive about topics we think will be of interest to them.</li><li>(11) To send periodic emails</li></ul>We may use the email address to send User information and updates pertaining to their order. It may also be used to respond to their inquiries, questions, and/or other requests.</p></div><div><h1 class="h1--medium">How we protect your information</h1><p>We adopt appropriate data collection, storage, and processing practices and security measures to protect against unauthorized access, alteration, disclosure, or destruction of your personal information, username, password, transaction information, and data stored on our website.</p></div><div><h1 class="h1--medium">Sharing your personal information</h1><p>We do not sell, trade, or rent Users personal identification information to others. We may share generic aggregated demographic information not linked to any personal identification information regarding visitors and users with our business partners, trusted affiliates and advertisers for the purposes outlined above.</p></div><div><h1 class="h1--medium">Information and Deletion Requests</h1><p>You may correct or delete any or all of the personal information you have provided to us at any time. To request deletion or inquire about personally identifiable information that TasteAtlas has collected about you, or about other ways to correct factual errors in that information, please e-mail us at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a>.</p></div><div><h1 class="h1--medium">Electronic newsletters</h1><p>If a user decides to opt-in to our mailing list, they will receive emails that may include company news, updates, related product, service information, etc. If at any time the user would like to unsubscribe from receiving future emails, we include detailed unsubscribe instructions at the bottom of each email or user may contact us via our website.</p></div><div><h1 class="h1--medium">Third party websites</h1><p>Users may find advertising or other content on our website that link to the sites and services of our partners, suppliers, advertisers, sponsors, licensors, and other third parties. We do not control the content or links that appear on these sites and are not responsible for the practices employed by websites linked to or from our website. In addition, these sites or services, including their content and links, may be constantly changing. These sites and services may have their own privacy policies and customer service policies. Browsing and interaction on any other website, including websites which have a link to our website, is subject to that website\'s own terms and policies.</p></div><div><h1 class="h1--medium">Advertising</h1><p>Ads appearing on our site may be delivered to users by advertising partners, who may set cookies. These cookies allow the ad server to recognize your computer each time they send you an online advertisement to compile non-personal identification information about you or others who use your computer. This information allows ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you. This privacy policy does not cover the use of cookies by any advertisers.</p></div><div><h1 class="h1--medium">Google Adsense</h1><p>Some of the ads may be served by Google. Google\'s use of the DART cookie enables it to serve ads to users based on their visit to our website and other sites on the Internet. DART uses "non-personally identifiable information" and does NOT track personal information about you, such as your name, email address, physical address, etc.</p></div><div><h1 class="h1--medium">Compliance with children\'s online privacy protection act</h1><p>Protecting the privacy of the very young is especially important. For that reason, we never collect or maintain information at our website from those we actually know are under 13, and no part of our website is structured to attract anyone under 13.</p></div><div><h1 class="h1--medium">Changes to this privacy policy</h1><p>TasteAtlas has the discretion to update this privacy policy at any time. When we do, we will post a notification on the main page of our website, revise the updated date at the bottom of this page, and notify you via an email. We encourage users to frequently check this page for any changes to stay informed about how we are helping to protect the personal information we collect. You acknowledge and agree that it is your responsibility to review this privacy policy periodically and become aware of modifications.</p></div><div><h1 class="h1--medium">Contacting us</h1><p>If you have any questions about this Privacy Policy, the practices of this site, or your dealings with this site, please <a href="mailto:editorial@tasteatlas.com">contact us</a>.</p></div><div><p>The data processing manager is the company AtlasMedia, 66 Vitosha Blvd, Sofia, Bulgaria.</p><p>last updated: March 2020</p></div></div></div></section>');$templateCache.put('/content/scripts/app/components/miscellaneous/privacy/ta-privacy-mobile.html','<section><div class="static-page-container terms-and-conditions"><div class="static-page-wrapper"><div class="static-page-wrapper__title"><h1>Privacy and Cookies Policy</h1><i class="plate-lines plate-lines--center"></i></div><div class="static-page-wrapper__main"><p>At TasteAtlas, your privacy is very important to us. Therefore, we designed this Privacy and Cookies Policy which governs the manner in which we collect, use, maintain, and disclose information collected from users (each, a "User") of the <a href="http://www.tasteatlas.com">website</a> ("Website"). By using this website, you signify your acceptance of this policy. If you do not agree to this policy, please do not use our website. Your continued use of the website following the posting of changes to this policy will be deemed your acceptance of those changes.</p></div><div class="static-page-wrapper__main"><h2>Personal identification information</h2><p>We may collect personal identification information from users in a variety of ways, including, but not limited to, when users visit our site, register on the website, and in connection with other activities, services, features, or resources we make available on our website. Users may be asked for, as appropriate, name, email address, and mailing address. Users may, however, visit our website anonymously. We will collect personal identification information from users only if they voluntarily submit such information to us. Users can always refuse to supply personally identification information, except that it may prevent them from engaging in certain website related activities.</p><h2>Non-personal identification information</h2><p>We may collect non-personal identification information about users whenever they interact with our website. Non-personal identification information may include the browser name, the type of computer, and technical information about users means of connection to our website, such as the operating system and the Internet service providers utilized and other similar information.</p></div><div class="static-page-wrapper__main"><h2>Cookies</h2><p>Our Site may use "cookies" to enhance user experience. User\'s web browser places cookies on their hard drive for record-keeping purposes and sometimes to track information about them. User may choose to set their web browser to refuse cookies, or to alert you when cookies are being sent. If they do so, note that some parts of the website may not function properly.</p></div><div class="static-page-wrapper__main"><h2>How we use collected information</h2><p>TasteAtlas may collect and use user\u2019s personal information for the following purposes:<ul><li>(1) To run and operate our website</li><li>(2) We may need your information display content on the website correctly.</li><li>(3) Information you provide helps us respond to your customer service requests and support needs more efficiently.</li><li>(4) To improve customer service</li><li>(5) To personalize user experience</li><li>(6) We may use information in the aggregate to understand how our users as a group use the services and resources provided on our website.</li><li>(7) To improve our website</li><li>(8) We may use feedback you provide to improve our products and services.</li><li>(9) To run a promotion, contest, survey or other website feature</li><li>(10) To send users information they agreed to receive about topics we think will be of interest to them.</li><li>(11) To send periodic emails</li></ul>We may use the email address to send User information and updates pertaining to their order. It may also be used to respond to their inquiries, questions, and/or other requests.</p></div><div class="static-page-wrapper__main"><h2>How we protect your information</h2><p>We adopt appropriate data collection, storage, and processing practices and security measures to protect against unauthorized access, alteration, disclosure, or destruction of your personal information, username, password, transaction information, and data stored on our website.</p></div><div class="static-page-wrapper__main"><h2>Information and Deletion Requests</h2><p>You may correct or delete any or all of the personal information you have provided to us at any time. To request deletion or inquire about personally identifiable information that TasteAtlas has collected about you, or about other ways to correct factual errors in that information, please e-mail us at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a>.</p></div><div class="static-page-wrapper__main"><h2>Sharing your personal information</h2><p>We do not sell, trade, or rent Users personal identification information to others. We may share generic aggregated demographic information not linked to any personal identification information regarding visitors and users with our business partners, trusted affiliates and advertisers for the purposes outlined above.</p></div><div class="static-page-wrapper__main"><h2>Electronic newsletters</h2><p>If a user decides to opt-in to our mailing list, they will receive emails that may include company news, updates, related product, service information, etc. If at any time the user would like to unsubscribe from receiving future emails, we include detailed unsubscribe instructions at the bottom of each email or user may contact us via our website.</p></div><div class="static-page-wrapper__main"><h2>Third party websites</h2><p>Users may find advertising or other content on our website that link to the sites and services of our partners, suppliers, advertisers, sponsors, licensors, and other third parties. We do not control the content or links that appear on these sites and are not responsible for the practices employed by websites linked to or from our website. In addition, these sites or services, including their content and links, may be constantly changing. These sites and services may have their own privacy policies and customer service policies. Browsing and interaction on any other website, including websites which have a link to our website, is subject to that website\'s own terms and policies.</p></div><div class="static-page-wrapper__main"><h2>Advertising</h2><p>Ads appearing on our site may be delivered to users by advertising partners, who may set cookies. These cookies allow the ad server to recognize your computer each time they send you an online advertisement to compile non-personal identification information about you or others who use your computer. This information allows ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you. This privacy policy does not cover the use of cookies by any advertisers.</p></div><div class="static-page-wrapper__main"><h2>Google Adsense</h2><p>Some of the ads may be served by Google. Google\'s use of the DART cookie enables it to serve ads to users based on their visit to our website and other sites on the Internet. DART uses "non-personally identifiable information" and does NOT track personal information about you, such as your name, email address, physical address, etc.</p></div><div class="static-page-wrapper__main"><h2>Compliance with children\'s online privacy protection act</h2><p>Protecting the privacy of the very young is especially important. For that reason, we never collect or maintain information at our website from those we actually know are under 13, and no part of our website is structured to attract anyone under 13.</p></div><div class="static-page-wrapper__main"><h2>Changes to this privacy policy</h2><p>TasteAtlas has the discretion to update this privacy policy at any time. When we do, we will post a notification on the main page of our website, revise the updated date at the bottom of this page, and notify you via an email. We encourage users to frequently check this page for any changes to stay informed about how we are helping to protect the personal information we collect. You acknowledge and agree that it is your responsibility to review this privacy policy periodically and become aware of modifications.</p></div><div class="static-page-wrapper__main"><h2>Contacting us</h2><p>If you have any questions about this Privacy Policy, the practices of this site, or your dealings with this site, please <a href="mailto:editorial@tasteatlas.com">contact us</a>.</p></div><div class="static-page-wrapper__main"><p>The data processing manager is the company AtlasMedia, 66 Vitosha Blvd, Sofia, Bulgaria.</p><p>last updated: March 2020</p></div></div></div></section>');$templateCache.put('/content/scripts/app/components/miscellaneous/site-map/ta-site-map-desktop.html','<div class="static-page-desktop__main site-map"><div class="site-map__wrapper"><div class="site-map__countries site-map__wrapper__inner"><div class="sub-header">Countries</div><ta-site-map-region regions="$ctrl.regions"></ta-site-map-region></div><div class="site-map__dishes site-map__wrapper__inner"><h1 class="h1 h1--medium">Dishes</h1><ta-site-map-dish dishes="$ctrl.dishes"></ta-site-map-dish><button ng-if="!$ctrl.areDishesVisible" ng-click="$ctrl.viewDishes()" class="btn btn--center btn--small view-all">View all</button></div><div class="site-map__ingredients site-map__wrapper__inner"><h1 class="h1 h1--medium">Ingredients</h1><ta-site-map-ingredient ingredients="$ctrl.ingredients"></ta-site-map-ingredient><button ng-if="!$ctrl.areIngredientsVisible" ng-click="$ctrl.viewIngredients()" class="btn btn--center btn--small view-all">View all</button></div></div></div>');$templateCache.put('/content/scripts/app/components/miscellaneous/site-map/ta-site-map-main.html','<div class="static-page-container site-map"><div class="static-page-wrapper"><div class="static-page-wrapper__title"><h1>SiteMap</h1><i class="plate-lines plate-lines--center"></i></div><div class="static-page-wrapper__countries site-map__countries"><h2>Countries</h2><ta-site-map-region regions="$ctrl.regions"></ta-site-map-region></div><div class="static-page-wrapper__dishes site-map__dishes"><h2>Dishes</h2><ta-site-map-dish dishes="$ctrl.dishes"></ta-site-map-dish><button ng-if="!$ctrl.areDishesVisible" ng-click="$ctrl.viewDishes()" class="btn">View all</button></div><div class="static-page-wrapper__ingredients site-map__ingredients"><h2>Ingredients</h2><ta-site-map-ingredient ingredients="$ctrl.ingredients"></ta-site-map-ingredient><button ng-if="!$ctrl.areIngredientsVisible" ng-click="$ctrl.viewIngredients()" class="btn last">View all</button></div></div></div>');$templateCache.put('/content/scripts/app/components/miscellaneous/terms/ta-terms-desktop.html','<section><div id="terms-scroll-id" class="static-page-desktop terms-and-conditions"><div class="static-page-desktop__main terms-and-conditions--desktop"><div ng-if="$ctrl.isDataSet" class="terms-and-conditions__side-nav"><ul><li ng-repeat="d in $ctrl.data" ng-class="{\'anchor-style\': $ctrl.position === d.name}" ng-click="$ctrl.goToAnchor(d.value, d.name, d.id)">{{d.name}}</li></ul></div><div id="text-wrapper" on-scroll handler="$ctrl.updateAnchor()" class="terms-and-conditions__content-wrapper"><div id="anchor-introduction"><h1 class="h1--medium">Introduction</h1><p>Welcome to TasteAtlas! These terms and conditions outline the rules and regulations of use of our website.</p><p>By using our website, you accept these terms and conditions in full. If you disagree with any part of these terms and conditions, you must not use our website. Should you register with our website, submit any material to our website, or use any of our website services, we will explicitly ask you to agree to these terms and conditions. You must be at least 18 years of age to use our website. By using our website or agreeing to these terms and conditions, you warrant and represent to us that you are at least 18 years of age.</p><p>We employ the use of cookies. By using our website or agreeing to these terms and conditions, you consent to our use of cookies in accordance with the terms of our <span ng-click="$ctrl.changePage(\'privacy\')">Privacy and Cookies Policy</span> (link).</p></div><div id="anchor-copyright"><h1 class="h1--medium">Copyright notice</h1><p>Unless otherwise stated, TasteAtlas and/or its licensors own the intellectual property rights for all material on this website. All intellectual property rights are reserved. You are granted limited license only for purposes of viewing the material contained on this website and only for your own personal use subjected to restrictions set in these terms and conditions.</p><p>TasteAtlas does not hold the copyright ownership on all content whose authors are referenced/mentioned; such content belongs exclusively to the respective authors. The content in question includes, but is not limited to, all reviews of dishes and restaurants, images of dishes and restaurants, as well as all recipes that don\'t mention an author or a source.</p></div><div id="anchor-licence"><h1 class="h1--medium">License to use website</h1><p>By using our website, you are allowed to:<ul><li>(1) view pages from our website in a web browser;</li><li>(2) download pages from our website for caching in a web browser;</li><li>(3) print pages from our website;</li><li>(4) stream audio and video files from our website;</li><li>(5) use our website services by means of a web browser, subject to the other provisions of these terms and conditions.</li></ul></p></div><div id="anchor-use"><h1 class="h1--medium">Acceptable use</h1><p>You are not allowed to:<ul><li>(1) use our website in any way or take any action that causes, or may cause, damage to the website or impairment of the performance, availability or accessibility of the website;</li><li>(2) use our website in any way that is unlawful, illegal, fraudulent or harmful, or in connection with any unlawful, illegal, fraudulent or harmful purpose or activity;</li><li>(3) use our website to copy, store, host, transmit, send, use, publish or distribute any material which consists of (or is linked to) any spyware, computer virus, Trojan horse, worm, keystroke logger, rootkit or other maliciouscomputer software;</li><li>(4) conduct any systematic or automated data collection activities (including without limitation scraping, data mining, data extraction and data harvesting) on or in relation to our website without our express written consent;</li><li>(5) access or otherwise interact with our website using any robot, spider or other automated means without our express written consent;.</li></ul></p></div><div id="anchor-registration-and-accounts"><h1 class="h1--medium">Registration and accounts</h1><p>To be eligible for an account on our website, you must 18 years of age. You may register for an account with our website by completing and submitting the account registration form on our website, and clicking on the verification link in the email that will be sent to you. You are not allowed to use any other person\'s account to access the website without that person\'s express permission to do so. You must notify us in writing immediately if you become aware of any unauthorized use of your account or if you believe that your account might be in any way compromised.</p><p>By registering for an account with our website, you will be asked to choose a username and password. Your username must not be liable to mislead and must comply with the content rules set out under the section \u201CYour content: rules\u201D. You are not allowed to use your account or your username for or in connection with the impersonation of any person. You must keep your password confidential.</p><p>You are responsible for any activity on our website arising out of any failure to keep your password confidential, and may be held liable for any losses arising out of such a failure.</p></div><div id="anchor-cancellation-and-suspension-of-account"><h1 class="h1--medium">Cancellation and suspension of account</h1><p>We may suspend your account, cancel your account, and/or edit your account details at any time in our sole discretion without notice or explanation. You may also cancel your account on our website by accessing your account settings on the website.</p></div><div id="anchor-your-content-licence"><h1 class="h1--medium">Your content: license</h1><p>In these terms and conditions, "your content" means all works and materials (including without limitation text, graphics, images, audio material, video material, audio-visual material, scripts, software and files) that you submit to us or through our website for storage or publication on, processing by, or transmission via, our website. You grant to us a worldwide, irrevocable, non-exclusive, royalty-free license to use, reproduce, sub-license, store, adapt, publish, translate and distribute your content in any existing or future media. You also grant to us the right to bring an action for infringement of the rights licensed under. You hereby waive all your moral rights in your content to the maximum extent permitted by applicable law. You warrant and represent that all other moral rights in your content have been waived to the maximum extent permitted by applicable law. You may edit your content to the extent permitted using the editing functionality made available on our website. Without prejudice to our other rights under these terms and conditions, if you breach any provision of these terms and conditions in any way, or if we reasonably suspect that you have breached these terms and conditions in any way, we may delete, unpublish or edit any or all of your content.</p></div><div id="anchor-your-content-rules"><h1 class="h1--medium">Your content: rules</h1><p>You warrant and represent that your content will comply with these terms and conditions. Your content must not be illegal or unlawful, must not infringe any person\'s legal rights, and must not be capable of giving rise to legal action against any person, in each case in any jurisdiction and under any applicable law.</p><p>Your content, and the use of your content by us in accordance with these terms and conditions, must not:<ul><li>(1) be libelous or maliciously false;</li><li>(2) be obscene or indecent;</li><li>(3) infringe any copyright, moral right, database right, trade mark right, design right, right in passing off, or other intellectual property right;</li><li>(4) infringe any right of confidence, right of privacy or right under data protection legislation;</li><li>(5) constitute negligent advice or contain any negligent statement;</li><li>(6) constitute an incitement to commit a crime, instructions for the commission of a crime or the promotion of criminal activity</li><li>(7) be in contempt of any court, or in breach of any court order;</li><li>(8) be in breach of racial or religious hatred or discrimination legislation;</li><li>(9) be blasphemous;</li><li>(10) be in breach of official secrets legislation;</li><li>(11) be in breach of any contractual obligation owed to any person;</li><li>(12) depict violence in an explicit, graphic or gratuitous manner;</li><li>(13) be pornographic, lewd, suggestive or sexually explicit;</li><li>(14) be untrue, false, inaccurate or misleading;</li><li>(15) consist of or contain any instructions, advice or other information which may be acted upon and could, if acted upon, cause illness, injury or death, or any other loss or damage;</li><li>(16) constitute spam;</li><li>(17) be offensive, deceptive, fraudulent, threatening, abusive, harassing, anti-social, menacing, hateful, discriminatory or inflammatory;</li></ul></p></div><div id="anchor-limited-warranties"><h1 class="h1--medium">Limited warranties</h1><p>We do not warrant or represent:<ul><li>(1) the completeness or accuracy of the information published on our website;</li><li>(2) that the material on the website is up to date; or</li><li>(3) that the website or any service on the website will remain available.</li></ul></p><p>We reserve the right to discontinue or alter any or all of our website services, and to stop publishing our website, at any time in our sole discretion without notice or explanation; and save to the extent expressly provided otherwise in these terms and conditions, you will not be entitled to any compensation or other payment upon the discontinuance or alteration of any website services, or if we stop publishing the website. To the maximum extent permitted by applicable, we exclude all representations and warranties relating to the subject matter of these terms and conditions, our website, and the use of our website.</p></div><div id="anchor-your-limitations-and-exclusions-of-liability"><h1 class="h1--medium">Limitations and exclusions of liability</h1><p>Nothing in these terms and conditions will:<ul><li>(1) limit or exclude any liability for death or personal injury resulting from negligence;</li><li>(2) limit or exclude any liability for fraud or fraudulent misrepresentation;</li><li>(3) limit any liabilities in any way that is not permitted under applicable law;</li><li>(4) exclude any liabilities that may not be excluded under applicable law.</li></ul></p><p>The limitations and exclusions of liability set out in this section and elsewhere in these terms and conditions:<ul><li>(1) are subject to the previous statements;</li><li>(2) govern all liabilities arising under these terms and conditions or relating to the subject matter of these terms and conditions, including liabilities arising in contract, in tort (including negligence) and for breach of statutory duty, except to the extent expressly provided otherwise in these terms and conditions.</li></ul></p><p>To the extent that our website and the information and services on our website are provided free of charge, we will not be liable for any loss or damage of any nature. We will not be liable to you in respect of any losses arising out of any event or events beyond our reasonable control. We will not be liable to you in respect of any business losses, including (without limitation) loss of or damage to profits, income, revenue, use, production, anticipated savings, business, contracts, commercial opportunities or goodwill. We will not be liable to you in respect of any loss or corruption of any data, database or software. We will not be liable to you in respect of any special, indirect or consequential loss or damage. You accept that we have an interest in limiting the personal liability of our officers and employees and, having regard to that interest, you acknowledge that we are a limited liability entity; you agree that you will not bring any claim personally against our officers or employees in respect of any losses you suffer in connection with the website or these terms and conditions (this will not, of course, limit or exclude the liability of the limited liability entity itself for the acts and omissions of our officers and employees).</p></div><div id="anchor-breaches-of-these-terms-and-conditions"><h1 class="h1--medium">Breaches of these terms and conditions</h1><p>Without prejudice to our other rights under these terms and conditions, if you breach these terms and conditions in any way, or if we reasonably suspect that you have breached these terms and conditions in any way, we may:<ul><li>(1) send you one or more formal warnings;</li><li>(2) temporarily suspend your access to our website;</li><li>(3) permanently prohibit you from accessing our website;</li><li>(4) block computers using your IP address from accessing our website;</li><li>(5) contact any or all of your internet service providers and request that they block your access to our website;</li><li>(6) commence legal action against you, whether for breach of contract or otherwise; and/or</li><li>(7) suspend or delete your account on our website.</li></ul></p><p>Should we suspend or prohibit or block your access to our website or a part of our website, you are not allowed to take any action to circumvent such suspension or prohibition or blocking (including without limitation creating and/or using a different account).</p></div><div id="anchor-variation"><h1 class="h1--medium">Variation</h1><p>We may periodically revise these terms and conditions. We will give you written notice of any revision of these terms and conditions, and the revised terms and conditions will apply to the use of our website from the date that we give you such notice; if you do not agree to the revised terms and conditions, you must stop using our website. If you have given your express agreement to these terms and conditions, we will ask for your express agreement to any revision of these terms and conditions. If you do not give your express agreement to the revised terms and conditions within such period as we may specify, we will disable or delete your account on the website, and you must stop using the website.</p></div><div id="anchor-assignment"><h1 class="h1--medium">Assignment</h1><p>You hereby agree that we may assign, transfer, sub-contract, or otherwise deal with our rights and/or obligations under these terms and conditions. You may not without our prior written consent assign, transfer, sub-contract, or otherwise deal with any of your rights and/or obligations under these terms and conditions.</p></div><div id="anchor-severability"><h1 class="h1--medium">Severability</h1><p>If a provision of these terms and conditions is determined by any court or other competent authority to be unlawful and/or unenforceable, the other provisions will continue in effect. If any unlawful and/or unenforceable provision of these terms and conditions would be lawful or enforceable if part of it were deleted, that part will be deemed to be deleted, and the rest of the provision will continue in effect.</p></div><div id="anchor-third-party-rights"><h1 class="h1--medium">Third party rights</h1><p>A contract under these terms and conditions is for our benefit and your benefit, and is not intended to benefit or be enforceable by any third party. The exercise of the parties\' rights under a contract under these terms and conditions is not subject to the consent of any third party.</p></div><div id="anchor-entire-aggrement"><h1 class="h1--medium">Entire agreement</h1><p>Subject to the section \u201CLimitations and exclusions of liability\u201D, these terms and conditions, together with our privacy and cookies policy, shall constitute the entire agreement between you and us in relation to your use of our website and shall supersede all previous agreements between you and us in relation to your use of our website.</p></div><div><p>last modified: November 2017</p></div></div></div></div></section>');$templateCache.put('/content/scripts/app/components/miscellaneous/terms/ta-terms-mobile.html','<section><div class="static-page-container terms-and-conditions"><div class="static-page-wrapper"><div class="static-page-wrapper__title"><h1>Terms and Conditions of use</h1><i class="plate-lines plate-lines--center"></i></div><div class="static-page-wrapper__main"><h2>Introduction</h2><p>Welcome to TasteAtlas! These terms and conditions outline the rules and regulations of use of our website.</p><p>By using our website, you accept these terms and conditions in full. If you disagree with any part of these terms and conditions, you must not use our website. Should you register with our website, submit any material to our website, or use any of our website services, we will explicitly ask you to agree to these terms and conditions. You must be at least 18 years of age to use our website. By using our website or agreeing to these terms and conditions, you warrant and represent to us that you are at least 18 years of age.</p><p>We employ the use of cookies. By using our website or agreeing to these terms and conditions, you consent to our use of cookies in accordance with the terms of our <span ng-click="$ctrl.changePage(\'privacy\')">Privacy and Cookies Policy</span> (link).</p></div><div class="static-page-wrapper__main"><h2>Copyright notice</h2><p>Unless otherwise stated, TasteAtlas and/or its licensors own the intellectual property rights for all material on this website. All intellectual property rights are reserved. You are granted limited license only for purposes of viewing the material contained on this website and only for your own personal use subjected to restrictions set in these terms and conditions.</p><p>TasteAtlas does not hold the copyright ownership on all content whose authors are referenced/mentioned; such content belongs exclusively to the respective authors. The content in question includes, but is not limited to, all reviews of dishes and restaurants, images of dishes and restaurants, as well as all recipes that don\'t mention an author or a source.</p></div><div class="static-page-wrapper__main"><h2>License to use website</h2><p><span class="static-page-wrapper__main__subtitle">By using our website, you are allowed to:</span><ul><li>(1) view pages from our website in a web browser;</li><li>(2) download pages from our website for caching in a web browser;</li><li>(3) print pages from our website;</li><li>(4) stream audio and video files from our website;</li><li>(5) use our website services by means of a web browser, subject to the other provisions of these terms and conditions.</li></ul></p><p>Apart from the actions listed above or the other provisions of these terms and conditions, you are not allowed to download any material from our website or save any such material to your device. You are only allowed to use our website for your own personal and business purposes. You are not allowed to use our website for any other purposes. Likewise, you are not allowed to edit or otherwise modify any material on our website.</p><p><span class="static-page-wrapper__main__subtitle">Unless you own or control the relevant rights in the material, you are not allowed to:</span><ul><li>(1) republish material from our website (including republication on another website);</li><li>(2) sell, rent or sub-license material from our website;</li><li>(3) show any material from our website in public;</li><li>(4) exploit material from our website for a commercial purpose; or</li><li>(5) redistribute material from our website.</li></ul>You are allowed to, however, redistribute our newsletter in print and electronic form.</p><p>We reserve the right to restrict access to areas of our website, or indeed our whole website, at our discretion. You are not allowed to circumvent or bypass, or attempt to circumvent or bypass, any access restriction measures on our website.</p></div><div class="static-page-wrapper__main"><h2>Acceptable use</h2><p><span class="static-page-wrapper__main__subtitle">You are not allowed to:</span><ul><li>(1) use our website in any way or take any action that causes, or may cause, damage to the website or impairment of the performance, availability or accessibility of the website;</li><li>(2) use our website in any way that is unlawful, illegal, fraudulent or harmful, or in connection with any unlawful, illegal, fraudulent or harmful purpose or activity;</li><li>(3) use our website to copy, store, host, transmit, send, use, publish or distribute any material which consists of (or is linked to) any spyware, computer virus, Trojan horse, worm, keystroke logger, rootkit or other maliciouscomputer software;</li><li>(4) conduct any systematic or automated data collection activities (including without limitation scraping, data mining, data extraction and data harvesting) on or in relation to our website without our express written consent;</li><li>(5) access or otherwise interact with our website using any robot, spider or other automated means without our express written consent;.</li></ul></p><p>You are not allowed to use data collected from our website to contact individuals, companies or other persons or entities. You must ensure that all the information you supply to us through our website, or in relation to our website, is true, accurate, current, complete and non-misleading.</p></div><div class="static-page-wrapper__main"><h2>Registration and accounts</h2><p>To be eligible for an account on our website, you must 18 years of age. You may register for an account with our website by completing and submitting the account registration form on our website, and clicking on the verification link in the email that will be sent to you. You are not allowed to use any other person\'s account to access the website without that person\'s express permission to do so. You must notify us in writing immediately if you become aware of any unauthorized use of your account or if you believe that your account might be in any way compromised.</p><p>By registering for an account with our website, you will be asked to choose a username and password. Your username must not be liable to mislead and must comply with the content rules set out under the section \u201CYour content: rules\u201D. You are not allowed to use your account or your username for or in connection with the impersonation of any person. You must keep your password confidential.</p><p>You are responsible for any activity on our website arising out of any failure to keep your password confidential, and may be held liable for any losses arising out of such a failure.</p></div><div class="static-page-wrapper__main"><h2>Cancellation and suspension of account</h2><p>We may suspend your account, cancel your account, and/or edit your account details at any time in our sole discretion without notice or explanation. You may also cancel your account on our website by accessing your account settings on the website.</p></div><div class="static-page-wrapper__main"><h2>Your content: license</h2><p>In these terms and conditions, "your content" means all works and materials (including without limitation text, graphics, images, audio material, video material, audio-visual material, scripts, software and files) that you submit to us or through our website for storage or publication on, processing by, or transmission via, our website. You grant to us a worldwide, irrevocable, non-exclusive, royalty-free license to use, reproduce, sub-license, store, adapt, publish, translate and distribute your content in any existing or future media. You also grant to us the right to bring an action for infringement of the rights licensed under. You hereby waive all your moral rights in your content to the maximum extent permitted by applicable law. You warrant and represent that all other moral rights in your content have been waived to the maximum extent permitted by applicable law. You may edit your content to the extent permitted using the editing functionality made available on our website. Without prejudice to our other rights under these terms and conditions, if you breach any provision of these terms and conditions in any way, or if we reasonably suspect that you have breached these terms and conditions in any way, we may delete, unpublish or edit any or all of your content.</p></div><div class="static-page-wrapper__main"><h2>Your content: rules</h2><p>You warrant and represent that your content will comply with these terms and conditions. Your content must not be illegal or unlawful, must not infringe any person\'s legal rights, and must not be capable of giving rise to legal action against any person, in each case in any jurisdiction and under any applicable law.</p><p><span class="static-page-wrapper__main__subtitle">Your content, and the use of your content by us in accordance with these terms and conditions, must not:</span><ul><li>(1) be libelous or maliciously false;</li><li>(2) be obscene or indecent;</li><li>(3) infringe any copyright, moral right, database right, trade mark right, design right, right in passing off, or other intellectual property right;</li><li>(4) infringe any right of confidence, right of privacy or right under data protection legislation;</li><li>(5) constitute negligent advice or contain any negligent statement;</li><li>(6) constitute an incitement to commit a crime, instructions for the commission of a crime or the promotion of criminal activity</li><li>(7) be in contempt of any court, or in breach of any court order;</li><li>(8) be in breach of racial or religious hatred or discrimination legislation;</li><li>(9) be blasphemous;</li><li>(10) be in breach of official secrets legislation;</li><li>(11) be in breach of any contractual obligation owed to any person;</li><li>(12) depict violence in an explicit, graphic or gratuitous manner;</li><li>(13) be pornographic, lewd, suggestive or sexually explicit;</li><li>(14) be untrue, false, inaccurate or misleading;</li><li>(15) consist of or contain any instructions, advice or other information which may be acted upon and could, if acted upon, cause illness, injury or death, or any other loss or damage;</li><li>(16) constitute spam;</li><li>(17) be offensive, deceptive, fraudulent, threatening, abusive, harassing, anti-social, menacing, hateful, discriminatory or inflammatory;</li></ul></p></div><div class="static-page-wrapper__main"><h2>Limited warranties</h2><p><span class="static-page-wrapper__main__subtitle">We do not warrant or represent:</span><ul><li>(1) the completeness or accuracy of the information published on our website;</li><li>(2) that the material on the website is up to date; or</li><li>(3) that the website or any service on the website will remain available.</li></ul></p><p>We reserve the right to discontinue or alter any or all of our website services, and to stop publishing our website, at any time in our sole discretion without notice or explanation; and save to the extent expressly provided otherwise in these terms and conditions, you will not be entitled to any compensation or other payment upon the discontinuance or alteration of any website services, or if we stop publishing the website. To the maximum extent permitted by applicable, we exclude all representations and warranties relating to the subject matter of these terms and conditions, our website, and the use of our website.</p></div><div class="static-page-wrapper__main"><h2>Limitations and exclusions of liability</h2><p><span class="static-page-wrapper__main__subtitle">Nothing in these terms and conditions will:</span><ul><li>(1) limit or exclude any liability for death or personal injury resulting from negligence;</li><li>(2) limit or exclude any liability for fraud or fraudulent misrepresentation;</li><li>(3) limit any liabilities in any way that is not permitted under applicable law;</li><li>(4) exclude any liabilities that may not be excluded under applicable law.</li></ul></p><p><span class="static-page-wrapper__main__subtitle">The limitations and exclusions of liability set out in this section and elsewhere in these terms and conditions:</span><ul><li>(1) are subject to the previous statements;</li><li>(2) govern all liabilities arising under these terms and conditions or relating to the subject matter of these terms and conditions, including liabilities arising in contract, in tort (including negligence) and for breach of statutory duty, except to the extent expressly provided otherwise in these terms and conditions.</li></ul></p><p>To the extent that our website and the information and services on our website are provided free of charge, we will not be liable for any loss or damage of any nature. We will not be liable to you in respect of any losses arising out of any event or events beyond our reasonable control. We will not be liable to you in respect of any business losses, including (without limitation) loss of or damage to profits, income, revenue, use, production, anticipated savings, business, contracts, commercial opportunities or goodwill. We will not be liable to you in respect of any loss or corruption of any data, database or software. We will not be liable to you in respect of any special, indirect or consequential loss or damage. You accept that we have an interest in limiting the personal liability of our officers and employees and, having regard to that interest, you acknowledge that we are a limited liability entity; you agree that you will not bring any claim personally against our officers or employees in respect of any losses you suffer in connection with the website or these terms and conditions (this will not, of course, limit or exclude the liability of the limited liability entity itself for the acts and omissions of our officers and employees).</p></div><div class="static-page-wrapper__main"><h2>Breaches of these terms and conditions</h2><p><span class="static-page-wrapper__main__subtitle">Without prejudice to our other rights under these terms and conditions, if you breach these terms and conditions in any way, or if we reasonably suspect that you have breached these terms and conditions in any way, we may:</span><ul><li>(1) send you one or more formal warnings;</li><li>(2) temporarily suspend your access to our website;</li><li>(3) permanently prohibit you from accessing our website;</li><li>(4) block computers using your IP address from accessing our website;</li><li>(5) contact any or all of your internet service providers and request that they block your access to our website;</li><li>(6) commence legal action against you, whether for breach of contract or otherwise; and/or</li><li>(7) suspend or delete your account on our website.</li></ul></p><p>Should we suspend or prohibit or block your access to our website or a part of our website, you are not allowed to take any action to circumvent such suspension or prohibition or blocking (including without limitation creating and/or using a different account).</p></div><div class="static-page-wrapper__main"><h2>Variation</h2><p>We may periodically revise these terms and conditions. We will give you written notice of any revision of these terms and conditions, and the revised terms and conditions will apply to the use of our website from the date that we give you such notice; if you do not agree to the revised terms and conditions, you must stop using our website. If you have given your express agreement to these terms and conditions, we will ask for your express agreement to any revision of these terms and conditions. If you do not give your express agreement to the revised terms and conditions within such period as we may specify, we will disable or delete your account on the website, and you must stop using the website.</p></div><div class="static-page-wrapper__main"><h2>Assignment</h2><p>You hereby agree that we may assign, transfer, sub-contract, or otherwise deal with our rights and/or obligations under these terms and conditions. You may not without our prior written consent assign, transfer, sub-contract, or otherwise deal with any of your rights and/or obligations under these terms and conditions.</p></div><div class="static-page-wrapper__main"><h2>Severability</h2><p>If a provision of these terms and conditions is determined by any court or other competent authority to be unlawful and/or unenforceable, the other provisions will continue in effect. If any unlawful and/or unenforceable provision of these terms and conditions would be lawful or enforceable if part of it were deleted, that part will be deemed to be deleted, and the rest of the provision will continue in effect.</p></div><div class="static-page-wrapper__main"><h2>Third party rights</h2><p>A contract under these terms and conditions is for our benefit and your benefit, and is not intended to benefit or be enforceable by any third party. The exercise of the parties\' rights under a contract under these terms and conditions is not subject to the consent of any third party.</p></div><div class="static-page-wrapper__main"><h2>Entire agreement</h2><p>Subject to the section \u201CLimitations and exclusions of liability\u201D, these terms and conditions, together with our privacy and cookies policy, shall constitute the entire agreement between you and us in relation to your use of our website and shall supersede all previous agreements between you and us in relation to your use of our website.</p></div><div class="static-page-wrapper__main"><p>last modified: November 2017</p></div></div></div></section>');$templateCache.put('/content/scripts/app/components/near-me/home-near-me/ta-home-near-me.html','<div id="near-me" class="home-page-container near-me-container" ng-class="{\'near-me--mobile\' : $ctrl.isMobile, \'near-me--mobile-slider\' : $ctrl.userClicked && $ctrl.isMobile}"><button id="myButton" class="near-me__button" no-animate ng-click="$ctrl.onUserClick()" ng-show="!$ctrl.userClicked">SHOW ME LOCAL FOOD NEAR ME <i class="ta ta-arrow-slim-rounded"></i></button><div class="feed__near-me near-me near-me--collage" ng-class="$ctrl.isMobile ? \'near-me__mobile\' : \'near-me__desktop\'" ng-show="$ctrl.userClicked && $ctrl.locationEnabled && $ctrl.isLoaded && !$ctrl.nullOr500ServerError"><a href="/nearme" target="_blank"><h3 class="near-me--heading feed-common--heading feed-common--subheading">Local food near me</h3></a><div class="near-me-slider collage slider swiper-container"><div class="near-me--wrapper flex slider-wrapper swiper-wrapper" ng-class="$ctrl.isMobile ? \'near-me--wrapper__mobile\' : \'near-me--wrapper__desktop\'"><div class="near-me--collage-item collage-item slider-item swiper-slide"><div class="near-me--collage-item__small" ng-repeat="restaurant in $ctrl.localFood.Restaurants" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small small-tablecloth-badge" id="{{restaurant.RestaurantId}}"><ta2-restaurant-tablecloths type="home-restaurants" layout="{{$ctrl.isMobile ? \'mobile\' : \'desktop\'}}" item="restaurant.Badge"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="small-only" item="restaurant.Badge" layout="{{$ctrl.isMobile ? \'mobile\' : \'desktop\'}}" items-per-column="3" max-columns="1"></ta2-restaurant-badges><div ng-click="$ctrl.openEntityRestaurantModal(restaurant.RestaurantId, null, \'restaurant\')" class="near-me-modal-link"><img class="near-me-image" loading="lazy" ng-if="restaurant.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{restaurant.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{restaurant.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{restaurant.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!restaurant.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!restaurant.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p ng-if="$index == 0" class="near-me--category">NEAREST <span class="location"><i class="ta ta-location-small"></i> <span ng-if="restaurant.DistanceUnitString == \'Kilometers\'">{{restaurant.Location.Distance | number : 2}} KM</span><span ng-if="restaurant.DistanceUnitString != \'Kilometers\'">{{restaurant.Location.DistanceMiles | number : 2}} MILES</span></span></p><p ng-if="$index == 1 && (restaurant.Badge.IsLegendary || restaurant.Badge.NumberOfTableclothAwards > 0)" class="near-me--category">{{restaurant.Badge.IsLegendary ? "LEGENDARY" : ""}}{{ !restaurant.Badge.IsLegendary && restaurant.Badge.NumberOfTableclothAwards > 0 ? "RECOMMENDED" : ""}} <span class="location"><i class="ta ta-location-small"></i> <span ng-if="restaurant.DistanceUnitString == \'Kilometers\'">{{restaurant.Location.Distance | number : 2}} KM</span><span ng-if="restaurant.DistanceUnitString != \'Kilometers\'">{{restaurant.Location.DistanceMiles | number : 2}} MILES</span></span></p><a ng-if="restaurant.Name" ng-click="$ctrl.openEntityRestaurantModal(restaurant.RestaurantId, null, \'restaurant\')"><h4>{{restaurant.Name}}</h4></a><p ng-if="restaurant.FamousFor.Title" class="near-me--info">Famous for <a href="{{restaurant.FamousFor.LinkUrl}}"><span>{{restaurant.FamousFor.Title}}</span></a></p></div></div><div class="near-me--collage-item__small" ng-repeat="event in $ctrl.localFood.SoonestEvents" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><a href="{{event.UrlLink}}" target="_blank"><img class="near-me-image" loading="lazy" ng-if="event.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!event.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!event.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"></a> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p class="near-me--category">Event</p><a ng-if="event.Name" href="{{event.UrlLink}}" target="_blank"><h4>{{event.Name}}</h4></a><p ng-if="event.Period" class="near-me--info">{{event.Period}}</p></div></div></div><div class="near-me--collage-item near-me--collage-item__large collage-item slider-item swiper-slide"><a href="{{$ctrl.localFood.Info.UrlLink}}" target="_blank"><div class="near-me-img-wrapper near-me-img-wrapper__large" id="{{$ctrl.localFood.Info.RegionId}}"><img class="near-me-image" loading="lazy" ng-if="$ctrl.localFood.Info.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.Info.Image.Image}}?w=377&h=447 377w, {{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.Info.Image.Image}}?w=270&h=287 270w" src="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.Info.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!$ctrl.localFood.Info.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="450" class="near-me-image"> <img ng-if="!$ctrl.localFood.Info.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="300" height="290" class="near-me-image"> <span class="near-me--bottom-shadow"></span></div><div class="near-me-info-wrapper near-me-info-wrapper__large"><div class="near-me-info-wrapper__top-part"><img ng-if="$ctrl.localFood.Info.EmblemImage" src="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.Info.EmblemImage}}?w=34" alt="{{$ctrl.localFood.Info.Name}}"></div><div class="near-me-info-wrapper__bottom-part"><h4>Discover {{$ctrl.localFood.Info.Name}}</h4><p ng-if="$ctrl.localFood.Info.CountDishes || $ctrl.localFood.Info.CountIngredient" class="near-me--info">{{$ctrl.localFood.Info.CountDishes + $ctrl.localFood.Info.CountIngredients}} local foods</p><p ng-if="$ctrl.localFood.Info.CountRestaurants > 1" class="near-me--info">{{$ctrl.localFood.Info.CountRestaurants}} good local {{$ctrl.localFood.Info.CountIngredients > 1 ? \'restaurants\' : \'restaurant\'}}</p><p ng-if="$ctrl.localFood.Info.CountEvents && $ctrl.localFood.CountEvents.length > 1" class="near-me--info">{{$ctrl.localFood.Info.CountEvents}} food events</p><div class="near-me--rating"><span class="rating-star" style="--rating: {{$ctrl.localFood.Info.DividedAverageFoodRating}}"></span><p>Rating: {{$ctrl.localFood.Info.DividedAverageFoodRating | number : 1}}</p></div></div></div></a></div><div class="near-me--collage-item collage-item slider-item swiper-slide"><div class="near-me--collage-item__small" ng-repeat="randomFood in $ctrl.localFood.RandomFoods | limitTo: 2 : 0" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><div ng-click="$ctrl.openEntityRestaurantModal(randomFood.EntityId, randomFood.EntityType)" class="near-me-modal-link"><img class="near-me-image" loading="lazy" ng-if="randomFood.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!bestRated.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!bestRated.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p ng-if="randomFood.EntityType == 1" class="near-me--category">{{randomFood.LocationDescriptiveName}} Dish</p><p ng-if="randomFood.EntityType != 1" class="near-me--category">Food Product</p><a ng-if="randomFood.Name" ng-click="$ctrl.openEntityRestaurantModal(randomFood.EntityId, randomFood.EntityType)"><h4>{{randomFood.Name}}</h4></a><p ng-if="randomFood.BestIn.Title" class="near-me--info">Best in <a href="{{randomFood.BestIn.LinkUrl}}"><span>{{randomFood.BestIn.Title}}</span></a></p></div></div><div class="near-me--collage-item__small" ng-repeat="additionalRandomFood in $ctrl.localFood.AdditionalRandomFoods" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><div ng-click="$ctrl.openEntityRestaurantModal(additionalRandomFood.EntityId, additionalRandomFood.EntityType)" class="near-me-modal-link"><img class="near-me-image" loading="lazy" ng-if="bestRatedIngredient.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!additionalRandomFood.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!additionalRandomFood.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><a ng-if="additionalRandomFood.Name" ng-click="$ctrl.openEntityRestaurantModal(additionalRandomFood.EntityId, additionalRandomFood.EntityType)"><h4>{{additionalRandomFood.Name}}</h4></a><p ng-if="additionalRandomFood.Period" class="near-me--info">{{additionalRandomFood.Period}}</p></div></div></div><div class="near-me--collage-item collage-item slider-item swiper-slide" ng-if="$ctrl.localFood.RandomFoods.length > 3"><div class="near-me--collage-item__small" ng-repeat="randomFood in $ctrl.localFood.RandomFoods | limitTo: 2 : 2" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><div ng-click="$ctrl.openEntityRestaurantModal(randomFood.EntityId, randomFood.EntityType)" class="near-me-modal-link"><img class="near-me-image" loading="lazy" ng-if="randomFood.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{randomFood.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!randomFood.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!randomFood.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p ng-if="randomFood.EntityType == 1" class="near-me--category">{{randomFood.LocationDescriptiveName}} Dish</p><p ng-if="randomFood.EntityType != 1" class="near-me--category">Food Product</p><a ng-if="randomFood.Name" ng-click="$ctrl.openEntityRestaurantModal(randomFood.EntityId, randomFood.EntityType)"><h4>{{randomFood.Name}}</h4></a><p ng-if="randomFood.BestIn" class="near-me--info">Best in <a href="{{randomFood.BestIn.LinkUrl}}"><span>{{randomFood.BestIn.Title}}</span></a></p></div></div></div><div class="near-me--collage-item collage-item slider-item swiper-slide slider-item--optional" ng-if="$ctrl.localFood.SoonestEvents.length > 1"><div class="near-me--collage-item__small" ng-repeat="event in $ctrl.localFood.SoonestEvents" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><a href="{{event.UrlLink}}" target="_blank"><img class="near-me-image" loading="lazy" ng-if="event.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{event.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!event.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!event.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></a></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p class="near-me--category">Event</p><a ng-if="event.Name" href="{{event.UrlLink}}" target="_blank"><h4>{{event.Name}}</h4></a><p ng-if="event.Period" class="near-me--info">{{event.Period}}</p></div></div></div><div class="near-me--collage-item collage-item near-me--collage-item-last slider-item swiper-slide slider-item--optional" ng-if="$ctrl.localFood.AdditionalRandomFoods.length > 1"><div class="near-me--collage-item__small" ng-repeat="additionalRandomFood in $ctrl.localFood.AdditionalRandomFoods" ng-class="$first ? \'near-me--collage-item__small-first\' : \'near-me--collage-item__small-second\'"><div class="near-me-img-wrapper near-me-img-wrapper__small"><div ng-click="$ctrl.openEntityRestaurantModal(additionalRandomFood.EntityId, additionalRandomFood.EntityType)" class="near-me-modal-link"><img class="near-me-image" loading="lazy" ng-if="additionalRandomFood.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}?w=377&h=222 377w, {{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}?w=270&h=142 270w" src="{{::$ctrl.constants.cdnHost}}/{{additionalRandomFood.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!additionalRandomFood.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="225" class="near-me-image"> <img ng-if="!additionalRandomFood.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="145" class="near-me-image"> <span class="near-me--bottom-shadow near-me--bottom-shadow--small"></span></div></div><div class="near-me-info-wrapper near-me-info-wrapper__small"><p ng-if="additionalRandomFood.EntityType == 1" class="near-me--category">{{additionalRandomFood.LocationDescriptiveName}} Dish</p><p ng-if="additionalRandomFood.EntityType != 1" class="near-me--category">Food Product</p><a ng-if="additionalRandomFood.Name" ng-click="$ctrl.openEntityRestaurantModal(additionalRandomFood.EntityId, additionalRandomFood.EntityType)"><h4>{{additionalRandomFood.Name}}</h4></a><p ng-if="additionalRandomFood.Period" class="near-me--info">{{additionalRandomFood.Period}}</p></div></div></div><div class="near-me--collage-item collage-item near-me--collage-item-last slider-item swiper-slide near-me--collage-item__large collage-item slider-item slider-item--optional"><a href="{{$ctrl.localFood.ParentRegionInfo.UrlLink}}" target="_blank"><div class="near-me-img-wrapper near-me-img-wrapper__large" id="{{$ctrl.localFood.ParentRegionInfo.RegionId}}"><img class="near-me-image" loading="lazy" ng-if="$ctrl.localFood.ParentRegionInfo.Image.Image" srcset="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.ParentRegionInfo.Image.Image}}?w=377&h=447 377w, {{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.ParentRegionInfo.Image.Image}}?w=270&h=287 270w" src="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.ParentRegionInfo.Image.Image}}" sizes="(max-width: 768px) 270px, 377px"> <img ng-if="!$ctrl.localFood.ParentRegionInfo.Image.Image && !$ctrl.isMobile" ta-lazy-load lazy-source="random" width="380" height="450" class="near-me-image"> <img ng-if="!$ctrl.localFood.ParentRegionInfo.Image.Image && $ctrl.isMobile" ta-lazy-load lazy-source="random" width="275" height="290" class="near-me-image"> <span class="near-me--bottom-shadow"></span></div><div class="near-me-info-wrapper near-me-info-wrapper__large"><div class="near-me-info-wrapper__top-part"><img ng-if="$ctrl.localFood.ParentRegionInfo.EmblemImage" src="{{::$ctrl.constants.cdnHost}}/{{$ctrl.localFood.ParentRegionInfo.EmblemImage}}?w=34" alt="{{$ctrl.localFood.ParentRegionInfo.Name}}"></div><div class="near-me-info-wrapper__bottom-part"><h4>Discover {{$ctrl.localFood.ParentRegionInfo.Name}}</h4><p ng-if="$ctrl.localFood.ParentRegionInfo.CountDishes || $ctrl.localFood.ParentRegionInfo.CountIngredient" class="near-me--info">{{$ctrl.localFood.ParentRegionInfo.CountDishes + $ctrl.localFood.ParentRegionInfo.CountIngredients}} local foods</p><p ng-if="$ctrl.localFood.ParentRegionInfo.CountRestaurants > 1" class="near-me--info">{{$ctrl.localFood.ParentRegionInfo.CountRestaurants}} good local {{$ctrl.localFood.ParentRegionInfo.CountIngredients > 1 ? \'restaurants\' : \'restaurant\'}}</p><p ng-if="$ctrl.localFood.ParentRegionInfo.CountEvents && $ctrl.localFood.CountEvents.length > 1" class="near-me--info">{{$ctrl.localFood.Info.CountEvents}} food events</p><div class="near-me--rating"><span class="rating-star" style="--rating: {{$ctrl.localFood.ParentRegionInfo.DividedAverageFoodRating}}"></span><p>Rating: {{$ctrl.localFood.ParentRegionInfo.DividedAverageFoodRating | number : 1}}</p></div></div></div></a></div></div></div><div ng-if="!$ctrl.isMobile" class="near-me-button-prev feed__slider--scroll-circle--left slider__scroll-circle slider__scroll-circle--left"><i class="icon icon__big-arrow icon__big-arrow-left--redesign"></i></div><div ng-if="!$ctrl.isMobile" class="near-me-button-next feed__slider--scroll-circle--right slider__scroll-circle slider__scroll-circle--right"><i class="icon icon__big-arrow icon__big-arrow-right--redesign"></i></div></div><div class="null-or-500-state" ng-show="$ctrl.userClicked && $ctrl.locationEnabled && $ctrl.nullOr500ServerError"><p>Something went wrong. Please <span ng-click="$ctrl.onUserClick()">try again.</span></p></div><div ng-show="$ctrl.userClicked && !$ctrl.locationEnabled" class="location-service-info" ng-class="{\'location-service-info-mobile\' : $ctrl.isMobile}"><ta-location-prompt-mobile on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div ng-show="$ctrl.userClicked && $ctrl.locationEnabled && !$ctrl.isLoaded" class="loader" ng-class="{\'loader--mobile\' : $ctrl.isMobile, \'loader--desktop\' : !$ctrl.isMobile, \'near-me--mobile-slider\' : $scope.userClicked && $ctrl.isMobile}"><img src="/Content/Image/loader.gif"></div></div>');$templateCache.put('/content/scripts/app/components/near-me/near-me-desktop/ta-near-me-desktop.html','<div ng-hide="$ctrl.isLoaded"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isLoaded && $ctrl.locationState !== \'GRANTED\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div ng-if="$ctrl.isLoaded && $ctrl.locationState === \'GRANTED\'" class="near-me__container search-results" ta-background-sections to="\'.ta-parent-section\'"><div class="ta-parent-section"></div><div class="near-me__section near-me__section--nobottompadding ta-parent-section" ng-if="$ctrl.food && $ctrl.food.Data && $ctrl.food.Data.length"><div class="search-results__desktop-width"><div class="near-me__title near-me__title--cut"><h1 class="h1 h1--small">Local foods in this area</h1><span class="near-me__view-all"><a ng-href="{{$ctrl.viewAllLink}}" target="_blank" class="btn btn--noborder btn--nopadding btn--no-bgcolor btn--bold">VIEW ALL</a></span></div><ta-home-food-list template="desktop" items="$ctrl.food" details="{ currentRegionId : $ctrl.currentRegionId, UrlLink: $ctrl.viewAllLink, viewAllLabel: \'View all local foods\' }"></ta-home-food-list></div></div><div class="near-me__section ta-parent-section" ng-if="$ctrl.restaurants.Data && $ctrl.restaurants.Data.length"><div class="search-results__desktop-width"><div class="near-me__title"><h2 class="h1 h1--small h2--bold h2--lowercase">Recommended authentic restaurants near me</h2></div><div class="search-results__whattoeat-recommended search-results__whattoeat-restaurants"><div ng-show="!$ctrl.isLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div class="similar-list" ng-if="$ctrl.isLoaded"><div class="similar-list__container"><ta-home-view-all-restaurants template="desktop"></ta-home-view-all-restaurants><div ng-if="$ctrl.restaurants.Data.length < $ctrl.restaurants.Count" class="search-results__view-more"><button ng-click="$ctrl.loadMoreRestaurants()" class="btn btn--nopadding btn--center btn--underscore btn--no-bgcolor btn--extrabold btn--black-text">View more</button></div></div></div></div></div><div class="promotion promotion--fullwidth promotion--nobottompadding"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-nearme\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div></div></div><div ng-if="$ctrl.isLoaded"><div ng-if="$ctrl.restaurants.Data && $ctrl.restaurants.Data.length === 0" class="h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon--pin"></i></div></div><div class="no-results__content--no-location"><p class="info-text">There are no recommended restaurants near you.</p><p class="no-results__text no-results__text--divided">Try <a class="no-results__button no-results__button--black" target="_blank" href="http://www.google.com/search?q={{$ctrl.regions[0].Name}}+top+restaurants">google</a> or <a class="no-results__button no-results__button--black" target="_blank" href="http://www.google.com/search?q={{$ctrl.regions[0].Name}}+tripadvisor+restaurants">tripadvisor</a> for many other restaurants.</p></div></div></div></div></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/near-me/near-me-mobile/ta-near-me-mobile.html','<div ng-hide="$ctrl.isLoaded"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isLoaded && $ctrl.locationState !== \'GRANTED\'" class="location-prompt location-prompt--near"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div><div ng-if="$ctrl.isLoaded && $ctrl.locationState === \'GRANTED\'" class="near-me__container" ta-background-sections to="\'.near-me__section\'"><div class="near-me__section"></div><div class="near-me__section" ng-if="$ctrl.food && $ctrl.food.Data && $ctrl.food.Data.length"><div class="near-me__title near-me__title--cut"><h1 class="h1 h1--small">Local foods in this area</h1><span class="near-me__view-all"><a ng-href="{{$ctrl.viewAllLink}}" target="_blank" class="btn btn--noborder btn--nopadding btn--no-bgcolor btn--bold">VIEW ALL</a></span></div><ta-home-food-list template="mobile" items="$ctrl.food" details="{ currentRegionId : $ctrl.currentRegionId, UrlLink: $ctrl.viewAllLink, viewAllLabel: \'View all local foods\' }"></ta-home-food-list></div><div class="near-me__section" ng-if="$ctrl.restaurants.Data && $ctrl.restaurants.Data.length"><div class="near-me__title"><h2 class="h1 h1--small h2--bold h2--lowercase">Recommended authentic restaurants near me</h2></div><div><div ng-show="!$ctrl.isLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div class="similar-list" ng-if="$ctrl.isLoaded"><div><ta-home-view-all-restaurants template="mobile"></ta-home-view-all-restaurants><div ng-if="$ctrl.restaurants.Data.length < $ctrl.restaurants.Count" class="where_to_eat__view-more"><button ng-click="$ctrl.loadMoreRestaurants()" class="btn btn--nopadding btn--underscore btn--center btn--no-bgcolor btn--extrabold btn--black-text">View more</button></div><div class="near-me__promotion"><div class="promotion promotion--fullwidth promotion--nobottompadding"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-near-me-restaurant-end\'}}" name="/21703950087/M_TA_test" platform="mobile"></div></div></div></div></div></div></div></div><div ng-if="$ctrl.isLoaded"><div ng-if="$ctrl.restaurants.Data && $ctrl.restaurants.Data.length === 0" class="h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon--pin"></i></div></div><div class="no-results__content--no-location"><p class="info-text">There are no recommended restaurants near you.</p><p class="no-results__text no-results__text--divided">Try <a class="no-results__button no-results__button--black" target="_blank" href="http://www.google.com/search?q={{$ctrl.regions[0].Name}}+top+restaurants">google</a> or <a class="no-results__button no-results__button--black" target="_blank" href="http://www.google.com/search?q={{$ctrl.regions[0].Name}}+tripadvisor+restaurants">tripadvisor</a> for many other restaurants.</p></div></div></div></div></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/quiz/progress-bar/ta-quiz-progress-bar.html','<div class="progress-bar--wrapper" ng-class="$ctrl.type == \'small\' ? \'progress-bar--wrapper__small\' : \'progress-bar--wrapper__big\'"><div class="progress-bar--value" ng-class="{\'hundred-wrong-ratio\' : $ctrl.ratio == 0 && $ctrl.answered > 0, \'hundred-right-ratio\' : $ctrl.ratio == 100}" style="--progress-width: {{$ctrl.ratio == 0 && $ctrl.answered == 0 ? 50 : $ctrl.ratio}}"><span ng-show="$ctrl.answered == 0" class="right-answers" ng-class="$ctrl.type == \'small\' ? \'small-percent\' : \'big-percent\'">{{$ctrl.ratio == 0 && $ctrl.answered == 0 ? 0 : $ctrl.ratio}}%</span> <span ng-show="$ctrl.answered == 0" class="wrong-answers" ng-class="$ctrl.type == \'small\' ? \'small-percent\' : \'big-percent\'">{{$ctrl.ratio == 0 && $ctrl.answered == 0 ? 0 : (100 - $ctrl.ratio)}}%</span><span ng-show="$ctrl.type != \'big-results\' && $ctrl.ratio > 0 && $ctrl.answered > 0" class="right-answers" ng-class="$ctrl.type == \'small\' ? \'small-percent\' : \'big-percent\'">{{$ctrl.ratio}}%</span> <span ng-show="$ctrl.type != \'big-results\' && $ctrl.ratio != 100 && $ctrl.answered > 0" class="wrong-answers" ng-class="$ctrl.type == \'small\' ? \'small-percent\' : \'big-percent\'">{{$ctrl.ratio != 0 && (100 - $ctrl.ratio) > 0 ? (100 - $ctrl.ratio) : 100}}%</span><span ng-show="$ctrl.type == \'big-results\' && $ctrl.ratio > 0 || $ctrl.type == \'big-results\' && $ctrl.answered > 0" class="right-answers big-percent">{{$ctrl.ratio}}%</span> <span ng-show="$ctrl.type == \'big-results\' && $ctrl.ratio != 100 || $ctrl.type == \'big-results\' && $ctrl.answered > 0" class="wrong-answers" ng-class="$ctrl.type == \'small\' ? \'small-percent\' : \'big-percent\'">{{$ctrl.ratio != 0 && (100 - $ctrl.ratio) > 0 ? (100 - $ctrl.ratio) : 100}}%</span></div></div>');$templateCache.put('/content/scripts/app/components/quiz/question-screen/ta-quiz-question-answers.html','<div class="choose-option-start" no-animate ng-class="$ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp ? \'choose-option-start__time-is-up\' : \'\'" ng-show="!$ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString && !$ctrl.data.goToNextQuestion || $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' && !$ctrl.data.goToNextQuestion"><div class="choose-option-start__buttons flex"><button ng-repeat="answer in $ctrl.data.currentQuestionInfo.Answers" ng-click="$ctrl.validateAnswer($ctrl.data.currentQuestionInfo.PublicQuestionId, answer.AnswerId)" class="quiz-options-button flex align-center" data-id="{{answer.AnswerId}}" ng-disabled="$ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp || $ctrl.answerClicked"><img ng-show="answer.EmblemImage" ng-src="{{$ctrl.constants.cdnHost}}/{{answer.EmblemImage}}?w=24&h=16"><p>{{answer.Name}}</p></button></div><button class="use-joker-btn flex" ng-disabled="$ctrl.data.currentQuestionHeaderData.RemainingFiftyFiftyJokers == 0 || $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp || $ctrl.jokerClicked" ng-class="{\'disabled clicked\' : $ctrl.data.currentQuestionHeaderData.RemainingFiftyFiftyJokers == 0 || $ctrl.jokerClicked}" ng-click="$ctrl.useJoker($ctrl.data.currentQuestionInfo.PublicQuestionId)"><span class="use-joker-btn-txt">Help me</span><div class="quiz-lightbulb-wrapper" style="--lightbulb-progress-height: {{$ctrl.data.currentQuestionHeaderData.ConsecutiveCorrectAnswers}}"><div class="quiz-lightbulb"><i class="quiz-lightbulb--life"></i></div><div class="quiz-lightbulb"><i class="quiz-lightbulb--life"></i></div><div class="quiz-lightbulb"><i class="quiz-lightbulb--life"></i></div><div class="quiz-lightbulb"><i class="quiz-lightbulb--life"></i></div><div class="quiz-lightbulb"><i class="quiz-lightbulb--life"></i></div></div></button></div><div class="correct-answer-box-holder" no-animate ng-show="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'Correct\'"><h3>Correct!</h3><div class="answer-box correct-answer-box flex"><img ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].EmblemImage" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].EmblemImage}}?w=24&h=16"><p ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].Name">{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].Name}}</p><i class="ta ta-rate-it-black answer-icon answer-icon--correct"></i></div></div><div class="wrong-answer-box-holder" no-animate ng-show="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'Wrong\'"><h3 ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer - 1].Name"><span>Wrong!</span> It\u2019s {{$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer - 1].Name}}</h3><div class="answers-wrapper flex" ng-if="$ctrl.data.currentQuestionInfo"><div class="answer-box correct-answer-box flex"><img ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer-1].EmblemImage" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer-1].EmblemImage}}?w=24&h=16"><p ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer-1].Name">{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.data.currentQuestionValidationInfo.CorrectAnswer - 1].Name}}</p><i class="ta ta-rate-it-black answer-icon answer-icon--correct"></i></div><div class="answer-box wrong-answer-box flex"><img ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].EmblemImage" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].EmblemImage}}?w=24&h=16"><p ng-if="$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].Name">{{$ctrl.data.currentQuestionInfo.Answers[$ctrl.selectedAnswerId].Name}}</p><i class="ta ta-close answer-icon answer-icon--wrong"></i></div></div></div><div class="revealed-answer" no-animate ng-show="$ctrl.data.goToNextQuestion"><div class="description-wrapper"><a class="description-wrapper__description-link" href="{{$ctrl.data.currentQuestionDetails.QuestionEntityData.UrlLink}}" target="_blank"><p>{{$ctrl.data.currentQuestionDetails.QuestionEntityData.Description}}</p></a> <a class="description-wrapper-link" href="{{$ctrl.data.currentQuestionDetails.QuestionEntityData.UrlLink}}" target="_blank"><span>LEARN MORE ABOUT {{$ctrl.data.currentQuestionDetails.QuestionEntityData.Name}}</span> <i class="ta ta-quiz-link"></i></a></div><a ng-if="$ctrl.data.currentQuestionDetails.NextStepString == \'SameLevel\' || $ctrl.data.currentQuestionDetails.NextStepString == \'NextLevel\'" class="revealed-answer__btn" ng-click="$ctrl.data.nextQuestion()"><span>Next question</span></a> <a ng-if="$ctrl.data.currentQuestionDetails.NextStepString == \'GameOver\'" class="revealed-answer__btn" ng-click="$ctrl.goToGameOverOrGameFinishedScreen(\'gamefinished\')"><span>Game over</span></a> <a ng-if="$ctrl.data.currentQuestionDetails.NextStepString == \'GameFinishedSuccessfully\'" class="revealed-answer__btn" ng-click="$ctrl.goToGameOverOrGameFinishedScreen(\'gamefinished\')"><span>Congratulations!<br>Game completed successfully!</span></a></div><div no-animate ng-show="!$ctrl.data.goToNextQuestion" class="progress-bar-container"><ta-quiz-progress-bar ratio="$ctrl.data.currentQuestionHeaderData.RightWrongRatioRounded" answered="$ctrl.data.currentQuestionHeaderData.UserAnswered" type="big"></ta-quiz-progress-bar></div>');$templateCache.put('/content/scripts/app/components/quiz/question-screen/ta-quiz-question-details.html','<div class="quiz-start__wrapper"><div class="heading-data"><div class="quiz-start__progress-details flex"><div class="circle-and-countdown-wrapper"><p class="time-left" no-animate ng-class="{\'time-left__time-is-up\' : $ctrl.data.timeIsUp.timer && !$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp || $ctrl.data.timeIsUp.restTime < 4, \'time-left__time-is-stopped\' : !$ctrl.data.timeIsUp.timer || $ctrl.data.goToNextQuestion, \'time-left__reload-state\' : $ctrl.data.timeIsUp.restTime === \'null\' && $ctrl.data.goToNextQuestion && !_self.data.showQuestion}">0:<span ng-show="$ctrl.data.timeIsUp.restTime < 10">0</span>{{$ctrl.data.timeIsUp.restTime}}</p></div><div no-animate ng-show="$ctrl.data.currentQuestionHeaderData" class="chart-number" style="--progress-height: {{$ctrl.data.currentQuestionHeaderData.ConsecutiveCorrectAnswers}}"><div class="quiz-icon js-life"><i class="life"></i></div><div class="quiz-icon js-life"><i class="life"></i></div><div class="quiz-icon js-life"><i class="life"></i></div><div class="quiz-icon js-life"><i class="life"></i></div><div class="quiz-icon js-life"><i class="life"></i></div></div><div class="players-current-stats"><div class="players-current-stats__details flex"><p class="points points--score">SCORE: {{($ctrl.data.currentQuestionHeaderData.AnsweredCorrectly == null) ? \'0\' : $ctrl.data.currentQuestionHeaderData.AnsweredCorrectly}}</p><p class="points points--best" ng-if="$ctrl.data.results.best.AnsweredCorrectly != null && $ctrl.data.currentQuestionHeaderData.AnsweredCorrectly < $ctrl.data.results.best.AnsweredCorrectly">BEST: {{($ctrl.data.results.best.AnsweredCorrectly == null) ? \'0\' : $ctrl.data.results.best.AnsweredCorrectly}}</p><p class="points points--best points--best__first-game-or-larger" ng-if="$ctrl.data.results.best.AnsweredCorrectly == null || $ctrl.data.currentQuestionHeaderData.AnsweredCorrectly >= $ctrl.data.results.best.AnsweredCorrectly">BEST: {{($ctrl.data.currentQuestionHeaderData.AnsweredCorrectly == null) ? \'0\' : $ctrl.data.currentQuestionHeaderData.AnsweredCorrectly}}</p></div></div></div></div><div no-animate ng-show="$ctrl.data.goToNextQuestion" class="revealed-answer"><a class="quiz-heading__title" href="{{$ctrl.data.currentQuestionDetails.QuestionEntityData.UrlLink}}" target="_blank"><h1>{{$ctrl.data.currentQuestionDetails.QuestionEntityData.Name}}!</h1></a><div class="quiz-heading-subdivision"><a class="quiz-heading-subdivision__country-wrapper" href="{{$ctrl.data.currentQuestionDetails.QuestionEntityData.CountryUrlLink}}" target="_blank"><img ng-if="$ctrl.data.currentQuestionDetails.QuestionEntityData.CountryEmblem" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionDetails.QuestionEntityData.CountryEmblem}}"><p>{{$ctrl.data.currentQuestionDetails.QuestionEntityData.CountryName}}</p></a><div class="quiz-heading-subdivision__rating-wrapper"><span class="rating-star" style="--rating: {{ $ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore }}" aria-label="Rating of this product is {{ $ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore }} out of 5."></span><p ng-if="$ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore == 0 && $ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore < 0.5" class="rating-not-a-number">n/a</p><p ng-if="$ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore != 0 && $ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore > 0.5" class="rating-num">{{ $ctrl.data.currentQuestionDetails.QuestionEntityData.Score.DividedScore | number:1 }}</p></div></div></div></div><div class="image-wrapper" no-animate ng-class="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp ? \'image-wrapper__time-is-up\' : \'\'" ng-hide="$ctrl.model.currentState == \'gamefinished\' || $ctrl.model.currentState == \'start\'"><a link-state-changes="$ctrl.data.goToNextQuestion" href="{{$ctrl.data.currentQuestionDetails.QuestionEntityData.UrlLink}}" target="_blank"><img class="dish-img" ng-show="$ctrl.data.currentQuestionInfo.PreviewImage.Image" id="js-dish-img" loading="lazy" ng-class="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' && !$ctrl.data.goToNextQuestion || $ctrl.data.timeIsUp.areTimeIsUp ? \'dish-img__time-is-up\' : \'\'" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionInfo.PreviewImage.Image}}?w=550&h=300"> <img class="dish-img" ng-show="!$ctrl.data.currentQuestionInfo.PreviewImage.Image && $ctrl.data.currentQuestionDetails.QuestionEntityData.Image.Image" id="js-dish-img" loading="lazy" ng-class="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' && !$ctrl.data.goToNextQuestion || $ctrl.data.timeIsUp.areTimeIsUp ? \'dish-img__time-is-up\' : \'\'" ng-src="{{$ctrl.constants.cdnHost}}/{{$ctrl.data.currentQuestionDetails.QuestionEntityData.Image.Image}}?w=550&h=300"></a><p class="info-text time-text" ng-class="$ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp ? \'time-text__time-is-up\' : \'\'" ng-show="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp">Oops...<br>The time is up!</p></div><div no-animate ng-show="!$ctrl.data.goToNextQuestion && $ctrl.data.showQuestion"><p class="header-text" ng-class="!$ctrl.data.goToNextQuestion && $ctrl.data.currentQuestionValidationInfo.CurrentQuestionStateString == \'TimeRunOut\' || $ctrl.data.timeIsUp.areTimeIsUp ? \'header-text__time-is-up\' : \'\'">{{$ctrl.data.currentQuestionInfo.Question}}</p></div>');$templateCache.put('/content/scripts/app/components/quiz/question-screen/ta-quiz-question-screen.html','<div class="game-question"><div ng-if="$ctrl.data.isLoading" class="loader loader--feed" id="home-feed-loader"><img src="Content/Image/loader.gif"></div><div ng-if="!$ctrl.data.isLoading"><ta-quiz-question-details data="$ctrl.data"></ta-quiz-question-details><ta-quiz-question-answers data="$ctrl.data"></ta-quiz-question-answers></div></div>');$templateCache.put('/content/scripts/app/components/quiz/result-screen/ta-quiz-result-screen.html','<div class="result-wrapper" no-animate ng-class="{\'result-wrapper__anonymous\' : !$ctrl.data.results.lastGame && !$ctrl.data.results.total}"><div class="your-result" no-animate ng-show="$ctrl.data.results.lastGame !== null"><h1 class="main-heading">This game</h1><div class="overall-score flex"><div class="overall-score__achievement flex"><p class="overall-subheading">{{$ctrl.data.results.lastGame.AnsweredCorrectly}} {{$ctrl.data.results.lastGame.AnsweredCorrectly == 1 ? \'CORRECT ANSWER\' : \'CORRECT ANSWERS\'}}</p></div><span ng-show="$ctrl.data.results.lastGame.Rank > 0" class="best-result overall-best-result">#{{$ctrl.data.results.lastGame.Rank}} best result today</span></div></div><div class="your-total" no-animate ng-show="$ctrl.data.results.total !== null && $ctrl.data.results.total.WrongAnswers && $ctrl.data.results.total.RightAnswers"><h2 class="main-heading">Your total</h2><ta-quiz-progress-bar ratio="$ctrl.data.results.total.RightWrongRatioRounded" answered="$ctrl.data.currentQuestionHeaderData.UserAnswered" type="big-results"></ta-quiz-progress-bar><p class="overall-subheading">{{$ctrl.data.results.total.RightAnswers}} correct / {{$ctrl.data.results.total.WrongAnswers}} incorrect</p><span ng-show="$ctrl.data.results.total.GameRank" class="best-result total-best-result">#{{$ctrl.data.results.total.GameRank}} best in the world</span></div><div class="your-login" no-animate ng-show="$ctrl.data.results.loginInfo !== null"><p ng-show="$ctrl.data.results.loginInfo.RemainingGames > 0" class="available-note">You have {{$ctrl.data.results.loginInfo.RemainingGamesString}} more {{$ctrl.data.results.loginInfo.RemainingGamesString == \'one\' ? \'game\' : \'games\'}} available today.</p><p ng-show="$ctrl.data.results.loginInfo.RemainingGames <= 0 && $ctrl.hoursAndMinutes && $ctrl.tempSecondHolder > 0" class="available-note available-note--time-left">{{$ctrl.hoursAndMinutes}}<br>until you can play again</p><p class="login-note" ng-if="$ctrl.isInAnonymousRole"><a ng-click="$ctrl.openLogin()">Log in</a> to track your progress and write your name in the rankings.</p></div><div no-animate class="leaderboard"><h3 class="leaderboard-heading">Ranking</h3><div class="leaderboard__scores-timeline flex"><button ng-disabled="!$ctrl.AllTimeScore" ng-click="$ctrl.changeResultTabs(\'Today\')" ng-class="{\'active\' : !$ctrl.AllTimeScore}">Today</button> <button ng-disabled="$ctrl.AllTimeScore" ng-click="$ctrl.changeResultTabs(\'AllTime\')" ng-class="{\'active\' : $ctrl.AllTimeScore}">All time</button></div><div class="leaderboard-info-txt" no-animate ng-show="$ctrl.data.results.todayAllTime.length == 0"><p>There are no results currently, please check back later.</p></div><div ng-show="$ctrl.data.isLoading" class="loader loader--feed loader--quiz-results" id="home-feed-loader"><img src="/Content/Image/loader.gif"></div><table no-animate ng-show="$ctrl.data.results.todayAllTime.length > 0 && !$ctrl.data.isLoading" class="result-table result-table__today-score"><thead><tr class="div-table-head flex"><th class="div-table-head-cell div-table-head-cell--rank">Rank</th><th class="div-table-head-cell div-table-head-cell--name">Name</th><th class="div-table-head-cell div-table-head-cell--total div-table-head-cell--last">{{$ctrl.AllTimeScore ? \'Total\': \'\'}}</th><th class="div-table-head-cell div-table-head-cell--high-score align-right" ng-class="{\'div-table-head-cell--last\' : !$ctrl.AllTimeScore}">High Score</th></tr></thead><tbody ng-class="$ctrl.AllTimeScore ? \'all-time-tbody\' : \'today-tbody\'" ng-repeat="result in $ctrl.data.results.todayAllTime track by $index"><tr class="table-divider" ng-class="{\'table-divider--highlight\' : $index == 5 && result.Rank > 6}" ng-show="$index == 5 && result.Rank > 6"><td class="table-divider-wrapper flex"><div class="table-divider__left flex"><span></span> <span></span> <span></span></div><div class="table-divider__right flex"><span></span> <span></span> <span></span></div></td></tr><tr class="div-table-row flex" ng-class="{\'row-highlight\' : result.IsUsersScore && $ctrl.AllTimeScore || result.IsBestScore && !$ctrl.AllTimeScore }"><td class="div-table-cell current-placement">{{result.Rank}}</td><td class="div-table-cell user-name"><img ng-if="result.CountryEmblem" class="emblem" ng-src="{{$ctrl.constants.cdnHost}}/{{result.CountryEmblem}}?w=19&h=13"> <img ng-if="!result.CountryEmblem" class="emblem" ng-src="{{$ctrl.constants.cdnHost}}/images/emblems/1e2394c7ea784e6883c4f7ec30a9584b.png?w=19&h=13"><a href="/profile/{{result.UrlLink}}" target="_blank"><span>{{result.Name}}</span></a></td><td class="progress-bar div-table-cell"><ta-quiz-progress-bar ng-if="$ctrl.AllTimeScore" ratio="result.RightWrongRatioRounded" answered="result.AnsweredCorrectly" type="small"></ta-quiz-progress-bar></td><td class="div-table-cell div-table-cell--last answered-correctly">{{result.AnsweredCorrectly}}</td><td class="progress-bar-mobile div-table-cell div-table-cell--last"><ta-quiz-progress-bar ng-if="$ctrl.AllTimeScore" ratio="result.RightWrongRatioRounded" answered="result.AnsweredCorrectly" type="small"></ta-quiz-progress-bar></td></tr></tbody></table></div><div class="user-actions flex"><a class="user-actions-button fb-share-button" ng-click="$ctrl.shareResults()" id="fb-share-btn"><i class="ta ta-share"></i> <span class="desktop-txt">Share</span><span class="mobile-txt">Share</span></a> <a class="user-actions-button new-game-button" ng-click="$ctrl.goToStartScreen()"><i class="ta ta-play-button-black play-button"></i> New game</a></div></div>');$templateCache.put('/content/scripts/app/components/quiz/start-screen/ta-quiz-start-screen.html','<div class="started-screen-quiz" no-animate ng-if="!$ctrl.data.continueGame"><div class="start-quiz-slider swiper-container"><div class="swiper-wrapper"><div class="swiper-slide" ng-repeat="item in $ctrl.data.transitionImage track by $index"><img loading="lazy" ng-src="{{$ctrl.constants.cdnHost}}/{{item.Image}}?w=180&h180"></div></div></div><div class="start-quiz-content"><h1 class="main-title">How many world dishes can you recognize?</h1><a class="login-btn" ng-click="$ctrl.openLogin()" ng-if="$ctrl.isInAnonymousRole">LOG IN TO TRACK YOUR PROGRESS</a><div ng-if="$ctrl.data.userInformation.AllowedToStartNewGame && $ctrl.data.loadingUserInformation"><a class="start-btn" ng-disabled="!$ctrl.isLoading" ng-click="$ctrl.startQuiz()"><i class="ta ta-play-button-black"></i>Start Quiz</a> <span class="view-rankings-btn" ng-click="$ctrl.viewRankings()">VIEW RANKINGS</span></div><div ng-if="!$ctrl.data.userInformation.AllowedToStartNewGame && $ctrl.data.loadingUserInformation"><div class="try-again"><p>You have already played {{$ctrl.data.userInformation.DailyGameLimitString}} times today.</p><p>See you tomorrow!</p></div><a class="start-btn start-btn__view-ranking" ng-click="$ctrl.viewRankings()">View Rankings</a></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-private-popup.html','<div class="modal" modal-directive close-modal="$ctrl.closePopup()"><div class="modal__container modal__container--small" click-outside="$ctrl.closePopup()"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><div ng-click="$ctrl.closePopup()"><i class="icon icon--close-slim close-modal"></i></div></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="$ctrl.item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.item.Image}}?w=80&h=80"></div></div><div class="right"><div class="category">{{$ctrl.item.DishCategory}}</div><h3 class="h3 h3--large">{{$ctrl.item.Name}}</h3><div class="region"><span>{{$ctrl.item.RegionName}}</span> <span ng-if="$ctrl.item.CountryName">, {{$ctrl.item.CountryName}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="$ctrl.newIndex" type="number"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.orderChange($ctrl.item)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.deleteItem($ctrl.item)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-private.html','<div class="profile-lists__container-slider profile-lists__container-lists"><div class="profile-lists__lists-slider profile-lists__slider swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.details.FavoriteFood.length}} Favorite food</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.details.FavoriteFood.length > 0" type="favorite-food" list-items-counter="$ctrl.details.FavoriteFood.length" button-text="Share my list" is-mobile="false" show-arrow="true"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteFood.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-food-id" ng-if="$ctrl.details.FavoriteFood.length > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TYPES[\'FavoriteFood\'] > 5}" data-as-sortable="$ctrl.favoriteFoodDragControl" data-ng-model="$ctrl.details.FavoriteFood"><li ng-repeat="food in $ctrl.details.FavoriteFood | limitTo: $ctrl.LIST_TYPES[\'FavoriteFood\']" data-as-sortable-item ng-mouseenter="$ctrl.onFoodEnter(food.Id)" ng-mouseleave="$ctrl.onFoodLeave(food.Id)" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::food.Image}}?w=80&h=80"> <img class="list-item__no-image" ng-if="!food.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category">{{food.Category}}</div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3">{{food.Name}}</h3></a><div class="region"><img class="flag" loading="lazy" src="https://cdn.tasteatlas.com/images/emblems/77b0256fa7154a3dadbaec079ca4ac3c.png?w=13&h=8"> <span>{{food.RegionName}}</span> <span ng-if="food.CountryName">, {{food.CountryName}}</span></div><div class="rating-box"><ta-home-item-rating-desktop item="food"></ta-home-item-rating-desktop></div></div></div><div class="list-item__right"><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.onDeleteFavoriteFood(food.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul><button ng-show="$ctrl.details.FavoriteFood.length > 0 && $ctrl.LOAD_MORE_BTN_TYPES[\'FavoriteFood\']" type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreListItems(\'FavoriteFood\')">Load more dishes</button></div><div class="profile-list__footer"><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isFavoriteFoodFormOpened" ng-click="$ctrl.onOpenFavoriteFoodForm()"><i class="icon icon--plus"></i> Add favorite food to your list</div><div class="autocomplete autocomplete--bordered" ng-if="$ctrl.isFavoriteFoodFormOpened"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchFavoriteFood($ctrl.favoriteFoodQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.favoriteFoodQuery"> <i ng-if="$ctrl.favoriteFoodQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteFavoriteFoodAutocompleteQuery()"></i><div class="autocomplete__list" ng-if="$ctrl.favoriteFoodAutocomplete.length > 0"><div ng-repeat="fd in $ctrl.favoriteFoodAutocomplete track by $index" class="item" ng-click="$ctrl.onFavoriteFoodAutocompleteClick(fd)"><div class="left"><div class="emblem"><img ng-if="fd.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::fd.Image}}?hw=25"> <img ng-if="!fd.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::fd.Label | accentSearchQuery: $ctrl.favoriteFoodQuery"></div><div ng-if="fd.Group" class="region-country">{{fd.Group}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.details.FavoriteCouisines.length}} Favorite cuisines</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.details.FavoriteCouisines.length > 0" type="favorite-cuisines" list-items-counter="$ctrl.details.FavoriteCouisines.length" button-text="Share my list" is-mobile="false" show-arrow="true"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteCouisines.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-couisine-id" ng-if="$ctrl.details.FavoriteCouisines.length > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TYPES[\'FavoriteCouisines\'] > 5}" data-as-sortable="$ctrl.favoriteCouisinesDragControl" data-ng-model="$ctrl.details.FavoriteCouisines"><li data-ng-repeat="item in $ctrl.details.FavoriteCouisines | limitTo: $ctrl.LIST_TYPES[\'FavoriteCouisines\']" data-as-sortable-item ng-mouseenter="$ctrl.onCouisineEnter(item.Id)" ng-mouseleave="$ctrl.onCouisineLeave(item.Id)" class="list-item"><div class="list-item__body" data-as-sortable-item-handle><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image}}?w=80&h=80"></a></div><div class="list-item__description"><a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3">{{item.Name}}</h3></a><div class="region"><span>{{item.RegionName}}</span> <span ng-if="item.CountryName">, {{item.CountryName}}</span></div></div></div><div class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.onDeleteFavoriteFood(item.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul><button ng-if="$ctrl.details.FavoriteCouisines.length > 0 && $ctrl.LOAD_MORE_BTN_TYPES[\'FavoriteCouisines\']" type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreListItems(\'FavoriteCouisines\')">Load more dishes</button></div><div class="profile-list__footer"><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isCouisineFormOpened" ng-click="$ctrl.onOpenCouisineForm()"><i class="icon icon--plus"></i> Add favorite cuisine to your list</div><div class="autocomplete autocomplete--bordered" ng-if="$ctrl.isCouisineFormOpened"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchRegionByCouisine($ctrl.couisineQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.couisineQuery"> <i ng-if="$ctrl.couisineQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteCouisineQuery()"></i><div class="autocomplete__list" ng-if="$ctrl.couisines.length > 0"><div ng-repeat="c in $ctrl.couisines track by $index" class="item" ng-click="$ctrl.onCouisineClick(c)"><div class="left"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::c.Image}}?hw=25"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::c.Label | accentSearchQuery: $ctrl.couisineQuery"></div><div ng-if="c.SecondaryLabel" class="region-country">{{c.SecondaryLabel}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.details.FavoriteDishRestaurants.lengt}} Favorite dishes in restaurants</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0" type="favorite-dishes" list-items-counter="$ctrl.details.FavoriteDishRestaurants.length" button-text="Share my list" is-mobile="false" show-arrow="true"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteDishRestaurants.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-dish-restaurant-id" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TYPES[\'FavoriteDishRestaurants\'] > 5}" data-as-sortable="$ctrl.favoriteDishRestaurantsDragControl" data-ng-model="$ctrl.details.FavoriteDishRestaurants"><li data-ng-repeat="dr in $ctrl.details.FavoriteDishRestaurants | limitTo: $ctrl.LIST_TYPES[\'FavoriteDishRestaurants\']" data-as-sortable-item ng-mouseenter="$ctrl.onDishRestaurantEnter(dr.Id)" ng-mouseleave="$ctrl.onDishRestaurantLeave(dr.Id)" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center" ng-class="{ \'list-item__center--disabled\' : !dr.IsInDatabase }"><div class="list-item__image"><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{dr.DishCategory}}</div><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><h3 class="h3">{{dr.DishName}} in {{dr.RestaurantName}}</h3></a><div class="region"><span>{{dr.RestaurantCity}}</span> <span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div><div class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.onDeleteFavoriteFood(dr.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul><button ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0 && $ctrl.LOAD_MORE_BTN_TYPES[\'FavoriteDishRestaurants\']" type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreListItems(\'FavoriteDishRestaurants\')">Load more dishes</button></div><div class="profile-list__footer"><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isFavoriteDishRestaurantFormOpened" ng-click="$ctrl.onOpenFavoriteDishRestaurantForm()"><i class="icon icon--plus"></i> Add favorite dishes to your list</div><form name="$ctrl.favoriteDishRestaurants" ng-if="$ctrl.isFavoriteDishRestaurantFormOpened"><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="dish" required placeholder="Dish" ng-change="$ctrl.onSearchDishes($ctrl.dishQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishQuery" autofocus> <i ng-if="$ctrl.dishQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteDishQuery()"></i><div class="autocomplete__list" ng-if="$ctrl.dishesAutocomplete.length > 0"><div ng-repeat="d in $ctrl.dishesAutocomplete track by $index" class="item" ng-click="$ctrl.onDishAutocompleteClick(d)"><div class="left"><div class="emblem"><img ng-if="d.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::d.Image}}?hw=25"> <img ng-if="!d.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::d.Label | accentSearchQuery: $ctrl.dishQuery"></div><div ng-if="d.Group" class="region-country">{{d.Group}}</div></div></div></div><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.dish.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.dish.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" autocomplete="off" type="text" name="restaurant" required placeholder="Restaurant" ng-change="$ctrl.onSearchRestaurants($ctrl.addFavoriteDishRestaurantForm.RestaurantName)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantName"> <i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantName.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteRestaurantQuery()"></i><div class="autocomplete__list" ng-if="$ctrl.restaurantAutocomplete.length > 0"><div ng-repeat="r in $ctrl.restaurantAutocomplete track by $index" class="item" ng-click="$ctrl.onRestaurantAutocompleteClick(r)"><div class="left"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::r.Label | accentSearchQuery: $ctrl.addFavoriteDishRestaurantForm.RestaurantName"></div><div ng-if="r.SecondaryLabel" class="region-country">{{r.SecondaryLabel}}</div></div></div></div><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.restaurant.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.restaurant.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="city" required placeholder="City" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantCity"> <i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantCity.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteCityQuery()"></i><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.city.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.city.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="country" required placeholder="Country" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantCountry"> <i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantCountry.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteCountryQuery()"></i><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.country.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.country.$error.required"></div></div></div></div><div><button class="btn btn--disabled-background" ng-if="$ctrl.favoriteDishRestaurants.$invalid" ng-click="$ctrl.addFavoriteDishRestaurant()">Add</button> <button class="btn btn--red-background" ng-if="!$ctrl.favoriteDishRestaurants.$invalid" ng-click="$ctrl.addFavoriteDishRestaurant()">Add</button></div></form></div></div></div></div></div><div ng-if="$ctrl.openShareListModal" class="share-list-modal-wrapper"><div class="share-list-modal modal" modal-directive close-modal="$ctrl.closeShareListModal()"><div class="modal__container modal__container--share-list" click-outside="$ctrl.closeShareListModal()"><div class="modal__header--share-list"><div class="ta ta-share-arrow"></div></div><div class="modal__body--share-list"><p class="share-list-heading">Add minimum 5 items to share!</p><button type="button" class="add-to-list-btn" ng-click="$ctrl.addToList()">Add to list</button> <button type="button" class="cancel-share-list-modal-btn" ng-click="$ctrl.closeShareListModal()">Cancel</button></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-public.html','<div class="profile-lists__container"><div class="profile-lists"><div class="profile-list__container"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">Favorite food</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteFood.length === 0"><div class="list-item list-item--none list-item--none-public">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteFood.length > 0"><ul><li ng-repeat="food in $ctrl.details.FavoriteFood" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::food.Image}}?w=80&h=80"> <img class="list-item__no-image" ng-if="!food.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category">{{food.Category}}</div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3">{{food.Name}}</h3></a><div class="region"><span>{{food.RegionName}}</span> <span ng-if="food.CountryName">, {{food.CountryName}}</span></div><div class="rating-box"><ta-home-item-rating-desktop item="food"></ta-home-item-rating-desktop></div></div></div></div></li></ul></div><div class="list-item__footer"></div></div></div><div class="profile-list__container"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">Favorite cuisines</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteCouisines.length === 0"><div class="list-item list-item--none list-item--none-public">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteCouisines.length > 0"><ul><li ng-repeat="item in $ctrl.details.FavoriteCouisines" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image}}?w=80&h=80"></a></div><div class="list-item__description"><a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3">{{item.Name}}</h3></a><div class="region"><span>{{item.RegionName}}</span> <span ng-if="item.CountryName">, {{item.CountryName}}</span></div></div></div></div></li></ul></div><div class="list-item__footer"></div></div></div><div class="profile-list__container"><div class="profile-list"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">Favorite dishes in restaurants</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteDishRestaurants.length === 0"><div class="list-item list-item--none list-item--none-public">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0"><ul><li ng-repeat="dr in $ctrl.details.FavoriteDishRestaurants" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center" ng-class="{ \'list-item__center--disabled\' : !dr.IsInDatabase }"><div class="list-item__image"><a ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{dr.DishCategory}}</div><a ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><h3 class="h3">{{dr.DishName}} in {{dr.RestaurantName}}</h3></a><div class="region"><span>{{dr.RestaurantCity}}</span> <span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div></div></li></ul></div><div class="list-item__footer"></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-main-private.html','<section class="profile-page-redesign"><div class="page__background-container"><div class="profile-header-wrapper"><div class="profile-header-col profile-header--left-col"><div class="profile__edit"><div class="btn" ng-click="$ctrl.openEditPage()"><i class="icon icon--edit"></i></div><div ng-if="$ctrl.isEditPageOpened"><div class="modal" modal-directive close-modal="$ctrl.openEditPage()"><div class="modal__container" click-outside="$ctrl.openEditPage()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.openEditPage()"></i><div ng-if="$ctrl.editProfile.ProfilePicture && !$ctrl.isUploadingPhoto" class="card__thumb card__thumb--small" style="background-image: url({{::$ctrl.constants.cdnHost}}{{::$ctrl.editProfile.ProfilePicture}})"><button class="btn btn--lightest-gray-background" ng-click="$ctrl.addProfilePhoto()"><i class="icon icon--photo"></i></button></div><div ng-if="!$ctrl.editProfile.ProfilePicture || $ctrl.isUploadingPhoto" class="card__thumb card__thumb--small" style="background-image: url(/Content/layout-shared/layout/icons/no_profile_image.svg?h=132&w=132)"><button class="btn btn--lightest-gray-background" ng-click="$ctrl.addProfilePhoto()"><i class="icon icon--photo"></i></button></div><input type="file" class="ta-file-upload" ta-file-change handler="$ctrl.onUploadImageClick(files)" accept="image/png,image/jpeg" style="display:none"></div><form name="$ctrl.editForm" novalidate ng-submit="$ctrl.onEdit()"><div class="modal__body"><div class="modal__form-control"><label>First name <span class="required">*</span></label> <input type="text" class="input input--large" autocomplete="off" required name="firstName" ng-model="$ctrl.editProfile.FirstName"><div ng-show="$ctrl.editForm.$submitted || $ctrl.editForm.firstName.$touched"><div ng-show="$ctrl.editForm.firstName.$error.required"></div></div><label>Last name <span class="required">*</span></label> <input type="text" class="input input--large" autocomplete="off" required name="lastName" ng-model="$ctrl.editProfile.LastName"><div ng-show="$ctrl.editForm.$submitted || $ctrl.editForm.lastName.$touched"><div ng-show="$ctrl.editForm.lastName.$error.required"></div></div><label>Title</label><div class="select"><select name="title" class="input input--large select--background-icon" ng-model="$ctrl.editProfile.Title"><option>{{$ctrl.editProfile.Title}}</option><option>FOODIE</option><option>BLOGGER</option><option>CHEF</option><option>RESTAURANT OWNER</option><option>FOOD CRITIC</option><option>WINE CRITIC</option><option>WINEMAKER</option><option>TOURIST BOARD REPRESENTATIVE</option><option>DELICATESSEN OWNER</option><option>FISHMONGER</option><option>CHEESEMAKER</option><option>CHEESEMONGER</option><option>BUTCHER</option><option>TRAVEL BLOGGER</option><option>JOURNALIST</option><option>TOURIST AGENT</option></select></div><label>Location</label><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--nobackground input--big" type="text" autocomplete="off" ng-change="$ctrl.onAutocompleteRegions($ctrl.regionQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.regionQuery"> <i ng-if="$ctrl.regionQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteRegionQuery()"></i><div class="autocomplete__list" ng-if="$ctrl.regions.length > 0"><div ng-repeat="r in $ctrl.regions track by $index" class="item" ng-click="$ctrl.onRegionAutocompleteClick(r)"><div class="left"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::r.Label | accentSearchQuery: $ctrl.regionQuery"></div><div ng-if="r.SecondaryLabel" class="region-country">{{r.SecondaryLabel}}</div></div></div></div></div><label>About me</label> <textarea rows="5" type="text" class="input input--large input--noheight user-profile-textarea" autocomplete="off" name="description" ng-model="$ctrl.editProfile.Description">\r\n                                            </textarea> <label>Link</label> <input type="text" class="input input--large" autocomplete="off" name="web" ng-model="$ctrl.editProfile.CriticWebsite"></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row"><button class="btn btn--light-gray-background" ng-click="$ctrl.openEditPage()" ng-if="!$ctrl.isUploadingPhoto && !$ctrl.isSubmitting">CANCEL</button> <button class="btn btn--disabled-background" ng-click="$ctrl.openEditPage()" ng-if="$ctrl.isUploadingPhoto || $ctrl.isSubmitting" disabled>CANCEL</button> <button class="btn btn--red-background" type="submit" ng-if="$ctrl.editForm.$valid && !$ctrl.isUploadingPhoto && !$ctrl.isSubmitting">SAVE</button> <button class="btn btn--disabled-background" type="submit" ng-if="!$ctrl.editForm.$valid || $ctrl.isUploadingPhoto || $ctrl.isSubmitting" disabled>SAVE</button></div></div></form></div></div></div></div><div class="profile-header--image-wrapper"><img class="profile-header--avatar profile-header--avatar__img" ng-if="$ctrl.details.ProfilePicture" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.ProfilePicture}}?h=112&w=112" alt="{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}"><div class="profile-header--avatar profile-header--avatar__no-img" ng-if="!$ctrl.details.ProfilePicture">{{$ctrl.details.FirstName.charAt(0)}}</div></div><h1 class="profile-header--name-surname">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</h1><div class="card__link card__link--noborder" ng-if="$ctrl.details.Web"><a ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">{{$ctrl.details.Web}}</a></div></div><div class="profile-header-col profile-header--right-col"><h3 class="profile-header--right-col__heading">TASTED & REVIEWED</h3><div class="profile-header--statistics"><ul><li><span>{{$ctrl.details.DishCommentCount ? $ctrl.details.DishCommentCount : \'0\'}}</span> {{$ctrl.details.DishCommentCount != 1 ? \'DISHES\' : \'DISH\'}}</li><li><span>{{$ctrl.details.IngredientCommentCount ? $ctrl.details.IngredientCommentCount : \'0\'}}</span> {{$ctrl.details.IngredientCommentCount != 1 ? \'INGREDIENTS\' : \'INGREDIENT\'}}</li><li><span>{{$ctrl.details.RecipeVariationCommentCount ? $ctrl.details.RecipeVariationCommentCount : \'0\'}}</span> {{$ctrl.details.RecipeVariationCommentCount != 1 ? \'RECIPES\' : \'RECIPE\'}}</li><li><span>{{$ctrl.details.DishRestaurantCommentCount ? $ctrl.details.DishRestaurantCommentCount : \'0\'}}</span><p ng-show="$ctrl.details.DishRestaurantCommentCount != 1">DISHES IN<br>RESTAURANTS</p><p ng-hide="$ctrl.details.DishRestaurantCommentCount != 1">DISH IN<br>RESTAURANT</p></li></ul></div></div></div></div></section><div class="profile__tabs"><nav class="tab__nav tab__nav--redesign"><ul><li ng-class="{\'selected\' : $ctrl.activePage== \'wanna-try\'}" ng-click="$ctrl.changePage(\'wanna-try\')">Wanna try / visit</li><li ng-class="{\'selected\' : $ctrl.activePage== \'lists\'}" ng-click="$ctrl.changePage(\'lists\')">Lists</li><li ng-class="{\'selected\' : $ctrl.activePage== \'reviews\'}" ng-click="$ctrl.changePage(\'reviews\')">Reviews</li></ul></nav><div ng-if="$ctrl.isLoaded"><ta-profile-wanna-try ng-if="$ctrl.activePage === \'wanna-try\'" user-id="$ctrl.details.UserId" is-private="true" template="desktop"></ta-profile-wanna-try><ta-profile-list-redesign ng-if="$ctrl.activePage === \'lists\'" user-id="$ctrl.details.UserId" is-private="true" template="desktop"></ta-profile-list-redesign><ta-profile-desktop-reviews-private ng-if="$ctrl.activePage === \'reviews\'" details="$ctrl.details"></ta-profile-desktop-reviews-private></div></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-main-public.html','<section class="profile-page-redesign"><div class="page__background-container"><div class="profile-header-wrapper"><div class="profile-header-col profile-header--left-col"><div class="profile-header--image-wrapper"><img class="profile-header--avatar profile-header--avatar__img" ng-if="$ctrl.details.ProfilePicture" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.ProfilePicture}}?h=112&w=112" alt="{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}"><div class="profile-header--avatar profile-header--avatar__no-img" ng-if="!$ctrl.details.ProfilePicture">{{$ctrl.details.FirstName.charAt(0)}}</div></div><h1 class="profile-header--name-surname">{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</h1><div class="card__link card__link--noborder" ng-if="$ctrl.details.Web"><a ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">{{$ctrl.details.Web}}</a></div></div><div class="profile-header-col profile-header--right-col"><h3 class="profile-header--right-col__heading">TASTED & REVIEWED</h3><div class="profile-header--statistics"><ul><li><span>{{$ctrl.details.DishCommentCount ? $ctrl.details.DishCommentCount : \'0\'}}</span> {{$ctrl.details.DishCommentCount != 1 ? \'DISHES\' : \'DISH\'}}</li><li><span>{{$ctrl.details.IngredientCommentCount ? $ctrl.details.IngredientCommentCount : \'0\'}}</span> {{$ctrl.details.IngredientCommentCount != 1 ? \'INGREDIENTS\' : \'INGREDIENT\'}}</li><li><span>{{$ctrl.details.RecipeVariationCommentCount ? $ctrl.details.RecipeVariationCommentCount : \'0\'}}</span> {{$ctrl.details.RecipeVariationCommentCount != 1 ? \'RECIPES\' : \'RECIPE\'}}</li><li><span>{{$ctrl.details.DishRestaurantCommentCount ? $ctrl.details.DishRestaurantCommentCount : \'0\'}}</span><p ng-show="$ctrl.details.DishRestaurantCommentCount != 1">DISHES IN<br>RESTAURANTS</p><p ng-hide="$ctrl.details.DishRestaurantCommentCount != 1">DISH IN<br>RESTAURANT</p></li></ul></div></div></div></div></section><div class="profile__tabs"><nav class="tab__nav"><ul><li ng-class="{\'selected\' : $ctrl.activePage== \'wanna-try\'}" ng-click="$ctrl.changePage(\'wanna-try\')">Wanna try / visit</li><li ng-class="{\'selected\' : $ctrl.activePage== \'lists\'}" ng-click="$ctrl.changePage(\'lists\')">Lists</li><li ng-class="{\'selected\' : $ctrl.activePage== \'reviews\'}" ng-click="$ctrl.changePage(\'reviews\')">Reviews</li></ul></nav><div ng-if="$ctrl.isLoaded"><ta-profile-list-redesign ng-if="$ctrl.activePage === \'lists\'" user-id="$ctrl.details.UserId" template="desktop"></ta-profile-list-redesign><ta-profile-wanna-try ng-if="$ctrl.activePage === \'wanna-try\'" user-id="$ctrl.details.UserId" template="desktop"></ta-profile-wanna-try><ta-profile-desktop-reviews-public ng-if="$ctrl.activePage === \'reviews\'" details="$ctrl.details"></ta-profile-desktop-reviews-public></div></div><div ng-if="$ctrl.isLoaded" class="profile-list__create-your-lists"><p class="profile-list__create-your-lists--txt">What are your favorite dishes, drinks, and cuisines from around the world? Make your own lists.</p><button type="button" class="profile-list__create-your-lists--btn" ng-click="$ctrl.createYourList()">CREATE YOUR LISTS</button></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-reviews-private.html','<div class="profile-reviews"><div class="profile-reviews__statistics"><div ng-if="$ctrl.currentReviewPage === \'dishes\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.IngredientCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishRestaurantCommentCount}} reviews</h1></div><i class="plate-lines plate-lines--big plate-lines--center"></i></div><nav class="tab__nav tab__nav--simple"><ul><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishes\'}" ng-disabled="!$ctrl.details.DishCommentCount || $ctrl.details.DishCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishes\')">Dishes</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'ingredients\'}" ng-disabled="!$ctrl.details.IngredientCommentCount || $ctrl.details.IngredientCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'ingredients\')">Ingredients</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishrestaurants\'}" ng-disabled="!$ctrl.details.DishRestaurantCommentCount || $ctrl.details.DishRestaurantCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishrestaurants\')">Dish in restaurants</li></ul></nav><div><div ng-if="$ctrl.currentReviewPage === \'dishes\'" class="profile-reviews__list"><div ng-repeat="dComment in $ctrl.details.Dishes.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="dComment.Image" href="{{dComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{dComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!dComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{dComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{dComment.Title}}</h3></a><div class="location">{{dComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="dComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{dComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{dComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="dComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishComments && $ctrl.showLoadMoreDishBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'" class="profile-reviews__list"><div ng-repeat="iComment in $ctrl.details.Ingredients.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="iComment.Image" href="{{iComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{iComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!iComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{iComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{iComment.Title}}</h3></a><div class="location">{{iComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="iComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{iComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{iComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="iComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreIngredientComments && $ctrl.showLoadMoreIngredientsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreIngredientComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'" class="profile-reviews__list"><div ng-repeat="drComment in $ctrl.details.DishRestaurants.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="drComment.Image" href="{{drComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{drComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!drComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{drComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{drComment.Title}}</h3></a><div class="location">{{drComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="drComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{drComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{drComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="drComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishRestaurantComments && $ctrl.showLoadMoreDishRestaurantsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishRestaurantComments()">View more</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-reviews-public.html','<div class="profile-reviews"><div class="profile-reviews__statistics"><div ng-if="$ctrl.currentReviewPage === \'dishes\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.IngredientCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishRestaurantCommentCount}} reviews</h1></div><i class="plate-lines plate-lines--big plate-lines--center"></i></div><nav class="tab__nav tab__nav--simple"><ul><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishes\'}" ng-disabled="!$ctrl.details.DishCommentCount || $ctrl.details.DishCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishes\')">Dishes</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'ingredients\'}" ng-disabled="!$ctrl.details.IngredientCommentCount || $ctrl.details.IngredientCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'ingredients\')">Ingredients</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishrestaurants\'}" ng-disabled="!$ctrl.details.DishRestaurantCommentCount || $ctrl.details.DishRestaurantCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishrestaurants\')">Dish in restaurants</li></ul></nav><div><div ng-if="$ctrl.currentReviewPage === \'dishes\'" class="profile-reviews__list"><div ng-repeat="dComment in $ctrl.details.Dishes.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="dComment.Image" href="{{dComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{dComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!dComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{dComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{dComment.Title}}</h3></a><div class="location">{{dComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="dComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{dComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{dComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="dComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishComments && $ctrl.showLoadMoreDishBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'" class="profile-reviews__list"><div ng-repeat="iComment in $ctrl.details.Ingredients.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="iComment.Image" href="{{iComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{iComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!iComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{iComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{iComment.Title}}</h3></a><div class="location">{{iComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="iComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{iComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{iComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="iComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreIngredientComments && $ctrl.showLoadMoreIngredientsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreIngredientComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'" class="profile-reviews__list"><div ng-repeat="drComment in $ctrl.details.DishRestaurants.Data" class="item"><div class="item__body"><div class="item__header"><a ng-if="drComment.Image" href="{{drComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{drComment.Image}}?mw=376);" class="item__thumb thumb"></div></a><div ng-if="!drComment.Image" style="background-image: url(/Content/Image/no_image.svg?mw=200);" class="thumb thumb--none"></div></div><div class="item__main"><a href="{{drComment.UrlLink}}" target="_blank" class="item__link"><h3 class="h3">{{drComment.Title}}</h3></a><div class="location">{{drComment.SubTitle}}</div><div class="info"><div class="left"><div class="stars"><ta-star-score-mobile rating="drComment.Score"></ta-star-score-mobile></div></div><div class="right"><div class="date">{{drComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="content">{{drComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="drComment"></ta-comment-like-mobile></div></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishRestaurantComments && $ctrl.showLoadMoreDishRestaurantsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishRestaurantComments()">View more</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-list/ta-profile-list-redesign-desktop.html','<div class="profile-lists__container-slider profile-lists__container-lists"><div class="profile-lists__lists-slider profile-lists__slider swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] != 1 ? \'foods\' : \'food\'}}</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 0 && $ctrl.isPrivate" type="Foods" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food]" button-text="Share my list" list-type="$ctrl.userListTypeEnum.Food" is-mobile="false" show-arrow="true"></ta-shared-button></div><div class="profile-list--loader user-list--loader__desktop" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-food-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 3}" data-as-sortable="$ctrl.listFoodsItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Food]" id="foods-list"><li ng-repeat="food in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Food]" data-as-sortable-item class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::food.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!food.EntityInfo.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category"><a ng-href="{{food.EntityInfo.GroupUrl}}" target="_blank">{{food.EntityInfo.GroupName}}</a></div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3">{{food.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="food.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{food.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{food.EntityInfo.CountryUrlLink}}"><span>{{food.EntityInfo.RegionName}}</span><span ng-if="food.EntityInfo.CountryName && food.EntityInfo.CountryName !== food.EntityInfo.RegionName"><em ng-if="food.EntityInfo.RegionName">,</em> {{food.EntityInfo.CountryName}}</span></a></div><div class="rating-box"><ta-home-item-rating-desktop item="food"></ta-home-item-rating-desktop></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right"><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.Food, food.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 10 && $ctrl.LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.Food]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.Food)">Load more foods</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isFavoriteFoodFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenFavoriteFoodForm()"><i class="icon icon--plus"></i> Add favorite food to your list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isFavoriteFoodFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.favoriteFoodQuery.length == 0 || !$ctrl.favoriteFoodQuery" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.favoriteFoodQuery, $ctrl.userListAutocompleteTypeEnum.Food)" ng-model-options="{ debounce: 200 }" ng-model="$ctrl.favoriteFoodQuery" autofocus> <i ng-if="$ctrl.favoriteFoodQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.Food)"></i><div class="autocomplete__list" ng-if="$ctrl.favoriteFoodQuery.length > 0 && $ctrl.favoriteFoodAutocomplete.length > 0"><div ng-repeat="fd in $ctrl.favoriteFoodAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(fd, $ctrl.userListTypeEnum.Food)"><div class="left"><div class="emblem"><img ng-if="fd.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::fd.Image}}?hw=25"> <img ng-if="!fd.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::fd.Name | accentSearchQuery: $ctrl.favoriteFoodQuery"></div><div ng-if="fd.GroupName" class="region-country">{{fd.GroupName}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] != 1 ? \'cuisines\' : \'cuisine\'}}</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 0 && $ctrl.isPrivate" type="Cuisines" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines]" button-text="Share my list" is-mobile="false" list-type="2" show-arrow="true"></ta-shared-button></div><div class="profile-list--loader user-list--loader__desktop" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-couisine-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 3}" data-as-sortable="$ctrl.listCuisinesItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Cuisines]" id="cuisines-list"><li data-ng-repeat="item in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Cuisines]" data-as-sortable-item class="list-item"><div class="list-item__body" data-as-sortable-item-handle><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.EntityInfo.Image}}?w=160&h=160"></a></div><div class="list-item__description list-item__description--cuisines"><img ng-if="item.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{item.EntityInfo.CountryEmblemImage}}?w=44&h=28"> <a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3">{{item.EntityInfo.Name}}</h3></a></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.Cuisines, item.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 10 && $ctrl.LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.Cuisines]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.Cuisines)">Load more cuisines</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isFavoriteCuisinesFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenFavoriteCuisinesForm()"><i class="icon icon--plus"></i> Add favorite cuisine to your list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isFavoriteCuisinesFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.favoriteCuisinesQuery.length == 0 || !$ctrl.favoriteCuisinesQuery.length" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.favoriteCuisinesQuery, $ctrl.userListAutocompleteTypeEnum.Cuisines)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.favoriteCuisinesQuery" autofocus> <i ng-if="$ctrl.favoriteCuisinesQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.Cuisines)"></i><div class="autocomplete__list" ng-if="$ctrl.favoriteCuisinesQuery.length > 0 && $ctrl.favoriteCuisinesAutocomplete.length > 0"><div ng-repeat="c in $ctrl.favoriteCuisinesAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(c, $ctrl.userListTypeEnum.Cuisines)"><div class="left"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{c.Image}}?hw=25"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::c.Name | accentSearchQuery: $ctrl.favoriteCuisinesQuery"></div><div ng-if="c.GroupName" class="region-country">{{c.GroupName}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] != 1 ? \'dishes in restaurants\' : \'dish in restaurant\'}}</h2><i class="plate-lines plate-lines--center"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 0 && $ctrl.isPrivate" type="DishesInRestaurants" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants]" button-text="Share my list" list-type="$ctrl.userListTypeEnum.DishesInRestaurants" is-mobile="false" show-arrow="true"></ta-shared-button></div><div class="profile-list--loader user-list--loader__desktop" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-restaurants-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 0"><ul ng-class="{\'redesign-of-unordered-list\' : $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 3}" data-as-sortable="$ctrl.listRestaurantsItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.DishesInRestaurants]" id="dishes-in-restaurants-list"><li data-ng-repeat="dr in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.DishesInRestaurants]" data-as-sortable-item ng-mouseenter="$ctrl.onDishRestaurantEnter(dr.EntityInfo.EntityId)" ng-mouseleave="$ctrl.onDishRestaurantLeave(dr.EntityInfo.EntityId)" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{dr.UrlLink}}" target="_blank"><img ng-if="dr.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{dr.EntityInfo.Image}}?w=160&h=160"></a></div><div class="list-item__description"><div class="category"><a href="{{dr.EntityInfo.GroupUrl}}" target="_blank">{{dr.EntityInfo.GroupName}}</a></div><a ng-href="{{dr.UrlLink}}" target="_blank"><h3 class="h3">{{dr.EntityInfo.Name}} <span ng-if="dr.EntityInfo2.Name">in</span> {{dr.EntityInfo2.Name}}</h3></a><div class="region"><img ng-if="dr.EntityInfo2.CountryEmblemImage" class="flag" loading="lazy" src="{{::$ctrl.constants.cdnHost}}{{dr.EntityInfo2.CountryEmblemImage}}?w=13&h=8"> <a href="{{dr.EntityInfo2.CountryUrlLink}}" ng-class="dr.EntityInfo2.CountryUrlLink == null ? \'disabled-link\' : \'\'"><span>{{dr.EntityInfo2.RegionName}}</span><span ng-if="dr.EntityInfo2.CountryName && dr.EntityInfo2.CountryName !== dr.EntityInfo2.RegionName"><em ng-if="dr.EntityInfo2.RegionName">,</em> {{dr.EntityInfo2.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.DishesInRestaurants, dr.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="!$ctrl.isDishesInRestaurantsFormOpened"><button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 10 && $ctrl.LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.DishesInRestaurants]" type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.DishesInRestaurants)">Load more favorite dishes</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isDishesInRestaurantsFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenDishesInRestaurantsForm()"><i class="icon icon--plus"></i> Add favorite dishes to your list</div><form name="$ctrl.dishesInRestaurantsForm" ng-if="$ctrl.isDishesInRestaurantsFormOpened" ng-submit="addDishInRestaurant()"><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i ng-show="$ctrl.dishInRestaurant.dish.length == 0 || !$ctrl.dishInRestaurant.dish" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="dish" required placeholder="Dish" ng-change="$ctrl.onSearchItems($ctrl.dishInRestaurant.dish, $ctrl.userListAutocompleteTypeEnum.Dishes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishInRestaurant.dish" autofocus> <i ng-if="$ctrl.dishInRestaurant.dish.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Dishes\')"></i><div class="autocomplete__list autocomplete__list--dishes-in-restaurants" ng-if="$ctrl.dishInRestaurant.dish.length > 0 && $ctrl.dishesInRestaurantsAutocomplete.length > 0"><div ng-repeat="d in $ctrl.dishesInRestaurantsAutocomplete track by $index" class="item" ng-click="$ctrl.onDishInRestaurantsAutocompleteClick(d, $ctrl.userListAutocompleteTypeEnum.Dishes)"><div class="left"><div class="emblem"><img ng-if="d.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::d.Image}}?hw=25"> <img ng-if="!d.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::d.Name | accentSearchQuery: $ctrl.dishInRestaurant.dish"></div><div ng-if="d.GroupName" class="region-country">{{d.GroupName}}</div></div></div></div><div ng-show="$ctrl.dishesInRestaurantsForm.$submitted || $ctrl.dishesInRestaurantsForm.dish.$touched"><div ng-show="$ctrl.dishesInRestaurantsForm.dish.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i ng-show="$ctrl.dishInRestaurant.restaurantName.length == 0 || !$ctrl.dishInRestaurant.restaurantName" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" autocomplete="off" type="text" name="restaurant" required placeholder="Restaurant" ng-change="$ctrl.onSearchItems($ctrl.dishInRestaurant.restaurantName, $ctrl.userListAutocompleteTypeEnum.Restaurants)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishInRestaurant.restaurantName"> <i ng-if="$ctrl.dishInRestaurant.restaurantName.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Restaurants\')"></i><div class="autocomplete__list" ng-if="$ctrl.dishInRestaurant.restaurantName.length > 0 && $ctrl.restaurantsAutocomplete.length > 0"><div ng-repeat="r in $ctrl.restaurantsAutocomplete track by $index" class="item" ng-click="$ctrl.onDishInRestaurantsAutocompleteClick(r, $ctrl.userListAutocompleteTypeEnum.Restaurants)"><div class="left"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::r.Name | accentSearchQuery: $ctrl.dishInRestaurant.restaurantName"></div><div ng-if="r.RestaurantCity || r.RestaurantCountry" class="region-country">{{r.RestaurantCity}}<em ng-if="r.RestaurantCity && r.RestaurantCountry">,</em> {{r.RestaurantCountry}}</div></div></div></div><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.restaurant.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.restaurant.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="city" required placeholder="City" ng-model="$ctrl.dishInRestaurant.city"> <i ng-if="$ctrl.dishInRestaurant.city.length > 0 && !$ctrl.autoPopulateRestaurantFields" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'City\')"></i><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.city.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.city.$error.required"></div></div></div></div><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--nobackground input--big input--noborder" type="text" autocomplete="off" name="country" required placeholder="Country" ng-value="$ctrl.dishInRestaurant.country" ng-model="$ctrl.dishInRestaurant.country"> <i ng-if="$ctrl.dishInRestaurant.country.length > 0 && !$ctrl.autoPopulateRestaurantFields" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Country\')"></i><div ng-show="$ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.country.$touched"><div ng-show="$ctrl.favoriteDishRestaurants.country.$error.required"></div></div></div></div><div><button class="btn" ng-class="!$ctrl.selectedDishForRestaurant || $ctrl.dishesInRestaurantsForm.$invalid ? \'btn--disabled-background\' : \'btn--red-background\'" ng-click="$ctrl.selectedDishForRestaurant && $ctrl.dishesInRestaurantsForm.$valid && $ctrl.addFavoriteDishRestaurant()">Add</button></div></form></div></div></div></div></div><div class="swiper-button-next slider__scroll-circle slider__scroll-circle--right"><i class="icon icon__big-arrow icon__big-arrow-right--redesign"></i></div><div class="swiper-button-prev slider__scroll-circle slider__scroll-circle--left"><i class="icon icon__big-arrow icon__big-arrow-left--redesign"></i></div></div><div ng-if="$ctrl.openShareListModal" class="share-list-modal-wrapper"><div class="share-list-modal modal" modal-directive close-modal="$ctrl.closeShareListModal()"><div class="modal__container modal__container--share-list" click-outside="$ctrl.closeShareListModal()"><div class="modal__header--share-list"><div class="ta ta-share-arrow"></div></div><div class="modal__body--share-list"><p class="share-list-heading">Add minimum 5 items to share!</p><button type="button" class="add-to-list-btn" ng-click="$ctrl.addToList(\'Desktop\')">Add to list</button> <button type="button" class="cancel-share-list-modal-btn" ng-click="$ctrl.closeShareListModal()">Cancel</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-list/ta-profile-list-redesign-mobile.html','<div class="profile-lists profile-lists--redesign"><div class="profile-list" id="profile_list_food"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] != 1 ? \'foods\' : \'food\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_food\')"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 0 && $ctrl.isPrivate" type="Foods" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food]" button-text="SHARE MY LIST" list-type="$ctrl.userListTypeEnum.Food" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list--loader user-list--loader__mobile" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Food]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-food-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-as-sortable="$ctrl.listFoodsItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Food]"><li data-ng-repeat="food in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Food]" data-as-sortable-item class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.EntityInfo.Image" ng-src="{{::$ctrl.constants.cdnHost}}{{food.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!food.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category"><a ng-href="{{food.EntityInfo.GroupUrl}}" target="_blank">{{food.EntityInfo.GroupName}}</a></div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{food.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="food.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" src="{{::$ctrl.constants.cdnHost}}{{food.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{food.EntityInfo.CountryUrlLink}}"><span>{{food.EntityInfo.RegionName}}</span><span ng-if="food.EntityInfo.CountryName">, {{food.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.Food, food.Id, \'profile_list_food\')"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onFoodAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite food to your list</div><div class="btn-wrapper"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_food\')" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Food] > 10">View all dishes</button></div><div ng-show="$ctrl.isFoodAutocompleteVisible" class="autocomplete autocomplete--active" id="add_food_autocomplete"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onFoodAutocompleteOpen()"></i> <input class="input input--big input--noborder input--underline" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.favoriteFoodQuery, $ctrl.userListAutocompleteTypeEnum.Food)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.favoriteFoodQuery" ng-keydown="$event.keyCode === 13" input-auto-focus> <i ng-if="$ctrl.favoriteFoodQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.Food)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.favoriteFoodAutocomplete.length > 0"><div ng-repeat="foodAutocomplete in $ctrl.favoriteFoodAutocomplete track by $index" ng-click="$ctrl.addListItem(foodAutocomplete, $ctrl.userListTypeEnum.Food, \'profile_list_food\')" class="item"><div class="emblem"><img ng-if="foodAutocomplete.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::foodAutocomplete.Image}}"> <img ng-if="!foodAutocomplete.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::foodAutocomplete.Name | accentSearchQuery: $ctrl.favoriteFoodQuery"></div><div class="description" ng-if="foodAutocomplete.Description">{{foodAutocomplete.Description}}</div><div class="type">{{foodAutocomplete.GroupName}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_cuisine"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] != 1 ? \'cuisines\' : \'cuisine\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 0 && $ctrl.isPrivate" type="Cuisines" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines]" button-text="SHARE MY LIST" list-type="$ctrl.userListTypeEnum.Cuisines" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list--loader user-list--loader__mobile" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.Cuisines]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-couisine-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-as-sortable="$ctrl.listCuisinesItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Cuisines]"><li data-ng-repeat="item in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.Cuisines]" data-as-sortable-item class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{item.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!item.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description list-item__description--cuisines"><img ng-if="item.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{item.EntityInfo.CountryEmblemImage}}?w=44&h=28"> <a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3">{{item.EntityInfo.Name}}</h3></a></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.Cuisines, item.Id, \'profile_list_cuisine\')"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onCouisineAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite cuisine to your list</div><div class="btn-wrapper"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.Cuisines] > 10">View all cuisines</button></div><div ng-if="$ctrl.isCouisineAutocompleteVisible" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onCouisineAutocompleteOpen()"></i> <input class="input input--big input--noborder input--underline" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.favoriteCuisinesQuery, $ctrl.userListAutocompleteTypeEnum.Cuisines)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.favoriteCuisinesQuery" ng-keydown="$event.keyCode === 13" input-auto-focus> <i ng-if="$ctrl.favoriteCuisinesQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.Cuisines)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.favoriteCuisinesQuery.length > 0 && $ctrl.favoriteCuisinesAutocomplete.length > 0"><div ng-repeat="c in $ctrl.favoriteCuisinesAutocomplete track by $index" ng-click="$ctrl.addListItem(c, $ctrl.userListTypeEnum.Cuisines, \'profile_list_cuisine\')" class="item"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::c.Image}}"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::c.Name | accentSearchQuery: $ctrl.favoriteCuisinesQuery"></div><div class="description" ng-if="c.Description">{{c.Description}}</div><div ng-if="c.GroupName" class="type">{{c.GroupName}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_dishes"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants] ? $ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] : \'\'}} Favorite {{$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] != 1 ? \'dishes in restaurants\' : \'dish in restaurant\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')"></i><ta-shared-button ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 0 && $ctrl.isPrivate" type="DishesInRestaurants" list-items-counter="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants]" button-text="SHARE MY LIST" list-type="$ctrl.userListTypeEnum.DishesInRestaurants" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list--loader user-list--loader__mobile" ng-if="!$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.LIST_LOADER[$ctrl.userListTypeEnum.DishesInRestaurants]"><div class="profile-list__body" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-dish-restaurant-id" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-as-sortable="$ctrl.listRestaurantsItemDragControl" data-ng-model="$ctrl.LIST_TYPES[$ctrl.userListTypeEnum.DishesInRestaurants]"><li data-ng-repeat="dr in $ctrl.LIST_TYPES[$ctrl.userListTypeEnum.DishesInRestaurants]" data-as-sortable-item ng-mouseenter="$ctrl.onDishRestaurantEnter(dr.EntityInfo.EntityId)" ng-mouseleave="$ctrl.onDishRestaurantLeave(dr.EntityInfo.EntityId)" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{dr.UrlLink}}" target="_blank"><img ng-if="dr.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{dr.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!dr.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category"><a href="{{dr.EntityInfo.GroupUrl}}" target="_blank">{{dr.EntityInfo.GroupName}}</a></div><a ng-href="{{dr.UrlLink}}" target="_blank"><h3 class="h3">{{dr.EntityInfo.Name}} <span ng-if="dr.EntityInfo2.Name">in</span> {{dr.EntityInfo2.Name}}</h3></a><div class="region"><img ng-if="dr.EntityInfo2.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{dr.EntityInfo2.CountryEmblemImage}}?w=13&h=8"> <a href="{{dr.EntityInfo2.CountryUrlLink}}" ng-class="dr.EntityInfo2.CountryUrlLink == null ? \'disabled-link\' : \'\'"><span>{{dr.EntityInfo2.RegionName}}</span><span ng-if="dr.EntityInfo2.CountryName && dr.EntityInfo2.CountryName !== dr.EntityInfo2.RegionName"><em ng-if="dr.EntityInfo2.RegionName">,</em> {{dr.EntityInfo2.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a> <a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.DishesInRestaurants, dr.Id, \'profile_list_dishes\')"><i class="icon icon--trash"></i></a></div><div class="modal" modal-directive close-modal="$ctrl.onCloseFavoriteRestaurantPopup()" ng-if="$ctrl.favoriteRestaurantPopup === (\'favorite-restaurant-popup-\' + dr.EntityInfo.EntityId)"><div class="modal__container modal__container--fixed-bottom"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onCloseFavoriteRestaurantPopup()"></i></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=160&h=160"></div></div><div class="right"><div class="category">{{dr.DishCategory}}</div><h3 class="h3 h3--large">{{dr.DishName}} at {{dr.RestaurantName}}</h3><div class="region"><span>{{dr.RestaurantCity}}</span><span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="dr.Order"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.onFavoriteDishRestaurantsOrderChange($index, dr.Order)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.onDeleteFavoriteDishRestaurant(dr.Id)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onDishRestaurantAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite dishes to your list</div><div class="btn-wrapper"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')" ng-if="$ctrl.LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.DishesInRestaurants] > 3">View full list</button></div><form name="$ctrl.favoriteDishRestaurants" ng-if="$ctrl.isDishRestaurantVisible" class="modal"><div class="modal__container modal__container--full-screen"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onDishRestaurantAutocompleteOpen()"></i><div class="modal__footer"></div><div class="modal__body"><div class="modal__main"><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusDish || $ctrl.dishInRestaurant.dish.length > 0 }">Search dishes</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input type="text" autocomplete="off" required name="dish" ng-focus="focusDish=true" ng-blur="focusDish=false" ng-change="$ctrl.onSearchItems($ctrl.dishInRestaurant.dish, $ctrl.userListAutocompleteTypeEnum.Dishes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishInRestaurant.dish" input-auto-focus class="input input--large" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.dish.$valid && $ctrl.favoriteDishRestaurants.dish.$touched && !focusDish, \'input--blueborder\': focusDish }"><div class="autocomplete-input-error" ng-show="!focusDish && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.dish.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.dish.$error.required"></div></div><i ng-if="$ctrl.dishInRestaurant.dish.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Dishes\')"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.dishInRestaurant.dish.length > 0 && $ctrl.dishesInRestaurantsAutocomplete.length > 0"><div ng-repeat="d in $ctrl.dishesInRestaurantsAutocomplete track by $index" class="item" ng-click="$ctrl.onDishInRestaurantsAutocompleteClick(d, $ctrl.userListAutocompleteTypeEnum.Dishes)"><div class="left"><div class="emblem"><img ng-if="d.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::d.Image}}?hw=25"> <img ng-if="!d.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::d.Name | accentSearchQuery: $ctrl.dishInRestaurant.dish"></div><div ng-if="d.GroupName" class="region-country">{{d.GroupName}}</div></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusRestaurant || $ctrl.dishInRestaurant.restaurantName.length > 0 }">Search restaurants</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--large" autocomplete="off" type="text" required name="restaurant" ng-focus="focusRestaurant=true" ng-blur="focusRestaurant=false" ng-change="$ctrl.onSearchItems($ctrl.dishInRestaurant.restaurantName, $ctrl.userListAutocompleteTypeEnum.Restaurants)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishInRestaurant.restaurantName" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.restaurant.$valid && $ctrl.favoriteDishRestaurants.restaurant.$touched && !focusRestaurant, \'input--blueborder\': focusRestaurant }"><div class="autocomplete-input-error" ng-show="!focusRestaurant && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.restaurant.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.restaurant.$error.required"></div></div><i ng-if="$ctrl.dishInRestaurant.restaurantName.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Restaurants\')"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.restaurantsAutocomplete.length > 0"><div ng-repeat="r in $ctrl.restaurantsAutocomplete track by $index" class="item" ng-click="$ctrl.onDishInRestaurantsAutocompleteClick(r, $ctrl.userListAutocompleteTypeEnum.Restaurants)"><div class="left"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::r.Name | accentSearchQuery: $ctrl.dishInRestaurant.restaurantName"></div><div ng-if="r.RestaurantCity || r.RestaurantCountry" class="region-country">{{r.RestaurantCity}}<em ng-if="r.RestaurantCity && r.RestaurantCountry">,</em> {{r.RestaurantCountry}}</div></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusCity || $ctrl.dishInRestaurant.city.length > 0 }">City</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--large" type="text" autocomplete="off" name="city" required ng-focus="focusCity=true" ng-blur="focusCity=false" ng-model="$ctrl.dishInRestaurant.city" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.city.$valid && $ctrl.favoriteDishRestaurants.city.$touched && !focusCity, \'input--blueborder\': focusCity }"> <i ng-if="$ctrl.dishInRestaurant.city.length > 0 && !$ctrl.autoPopulateRestaurantFields" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'City\')"></i><div class="autocomplete-input-error" ng-show="!focusCity && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.city.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.city.$error.required"></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusCountry || $ctrl.dishInRestaurant.country.length > 0 }">Country</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--large" type="text" autocomplete="off" name="country" required ng-focus="focusCountry=true" ng-blur="focusCountry=false" ng-model="$ctrl.dishInRestaurant.country" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.country.$valid && $ctrl.favoriteDishRestaurants.country.$touched && !focusCountry, \'input--blueborder\': focusCountry }"> <i ng-if="$ctrl.dishInRestaurant.country.length > 0 && !$ctrl.autoPopulateRestaurantFields" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery(\'Country\')"></i><div class="autocomplete-input-error" ng-show="!focusCountry && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.country.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.country.$error.required"></div></div></div></div></div></div><div class="modal__footer"><button class="btn" ng-class="!$ctrl.selectedDishForRestaurant || $ctrl.favoriteDishRestaurants.$invalid ? \'btn--disabled-background\' : \'btn--red-background\'" ng-click="$ctrl.selectedDishForRestaurant && $ctrl.favoriteDishRestaurants.$valid && $ctrl.addFavoriteDishRestaurant()">Add</button></div></div></form></div></div></div><div ng-if="$ctrl.openShareListModal" class="share-list-modal-wrapper"><div class="share-list-modal modal" modal-directive close-modal="$ctrl.closeShareListModal()"><div class="modal__container modal__container--share-list" click-outside="$ctrl.closeShareListModal()"><div class="modal__header--share-list"><div class="ta ta-share-arrow"></div></div><div class="modal__body--share-list"><p class="share-list-heading">Add minimum 5 items to share!</p><button type="button" class="add-to-list-btn" ng-click="$ctrl.addToList(\'Mobile\')">Add to list</button> <button type="button" class="cancel-share-list-modal-btn" ng-click="$ctrl.closeShareListModal()">Cancel</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-list/ta-profile-list.html','<div class="page__background-container"><div class="profile-list--shared-list" ng-class="{\'profile-list--shared-list-mobile\' : $ctrl.isMobile}"><a href="/profile/{{$ctrl.details.UserInfo.UrlLink | lowercase}}"><div class="shared-profile-list--header"><div class="shared-profile-list--header__left"><div class="shared-profile-list--header--profile-link"><div class="shared-profile-list--avatar-wrapper"><img ng-if="$ctrl.details.UserInfo.Image" class="profile-header--avatar profile-header--avatar__img shared-profile-list--header--img" src="{{$ctrl.details.UserInfo.Image}}?w=113&h=113" alt="profile image"><div ng-if="!$ctrl.details.UserInfo.Image" class="profile-header--avatar shared-profile-list--avatar-wrapper__avatar-no-img">{{$ctrl.details.UserInfo.FirstName.charAt(0)}}</div></div><div class="shared-profile-list--header--name shared-profile-list--header__right"><span>{{$ctrl.details.UserInfo.FirstName}}</span> <span>{{$ctrl.details.UserInfo.LastName}}</span></div></div></div><i class="icon shared-profile-list--header--arrow icon__big-arrow-right--redesign"></i></div></a><div class="shared-profile-list--content"><a href="/profile/{{$ctrl.details.UserInfo.UrlLink | lowercase}}"><img loading="lazy" ng-src="{{$ctrl.details.ShareImagePath}}"></a></div></div></div><div class="profile-list__create-your-lists ng-scope"><p class="profile-list__create-your-lists--txt">What are your favorite dishes, drinks, and cuisines from around the world?<br>Make your own lists.</p><a class="profile-list__create-your-lists--btn" ng-click="$ctrl.createYourList()">CREATE YOUR LISTS</a></div>');$templateCache.put('/content/scripts/app/components/profile/profile-list/ta-profile-wanna-try-desktop.html','<div class="profile-lists__container-slider profile-lists__container-wanna-try"><div class="profile-lists__wanna-try profile-lists__slider swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes] ? $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] : \' \'}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] != 1 ? \'Dishes\' : \'Dish\'}}</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] === 0"><div class="redesign-of-unordered-list list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] > 0"><ul ng-class="{\'redesign-of-unordered-list redesign-of-unordered-list--wanna-try\' : $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] > 3}" id="dishes-list"><li data-ng-repeat="food in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryDishes]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::food.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!food.EntityInfo.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category"><a ng-href="{{food.EntityInfo.GroupUrl}}" target="_blank">{{food.EntityInfo.GroupName}}</a></div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3">{{food.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="food.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{::food.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{food.EntityInfo.CountryUrlLink}}"><span>{{food.EntityInfo.RegionName}}</span><span ng-if="food.EntityInfo.CountryName && food.EntityInfo.CountryName !== food.EntityInfo.RegionName"><em ng-if="food.EntityInfo.RegionName">,</em> {{food.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryDishes, food.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] > 10 && $ctrl.WANNA_TRY_LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.WannaTryDishes]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.WannaTryDishes)">Load more dishes</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isDishesFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenDishesForm()"><i class="icon icon--plus"></i> Add dishes on your "wanna try" list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isDishesFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.dishesQuery.length == 0" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.dishesQuery, $ctrl.userListAutocompleteTypeEnum.Dishes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishesQuery" autofocus> <i ng-if="$ctrl.dishesQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryDishes)"></i><div class="autocomplete__list" ng-if="$ctrl.dishesAutocomplete.length > 0 && $ctrl.dishesQuery.length > 0"><div ng-repeat="fd in $ctrl.dishesAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(fd, $ctrl.userListTypeEnum.WannaTryDishes)"><div class="left"><div class="emblem"><img ng-if="fd.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::fd.Image}}?hw=25"> <img ng-if="!fd.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::fd.Name | accentSearchQuery: $ctrl.dishesQuery"></div><div ng-if="fd.GroupName" class="region-country">{{fd.GroupName}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryIngredients] ? $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] : \' \'}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] != 1 ? \'Ingredients\' : \'Ingredient\'}}</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryIngredients]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryIngredients]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] === 0"><div class="redesign-of-unordered-list list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] > 0"><ul ng-class="{\'redesign-of-unordered-list redesign-of-unordered-list--wanna-try\' : $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] > 3}" id="ingredients-list"><li data-ng-repeat="ing in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryIngredients]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{ing.UrlLink}}" target="_blank"><img ng-if="ing.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::ing.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!ing.EntityInfo.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category"><a ng-href="{{ing.EntityInfo.GroupUrl}}" target="_blank">{{ing.EntityInfo.GroupName}}</a></div><a ng-href="{{ing.UrlLink}}" target="_blank"><h3 class="h3">{{ing.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="ing.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{::ing.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{ing.EntityInfo.CountryUrlLink}}"><span>{{ing.EntityInfo.RegionName}}</span><span ng-if="ing.EntityInfo.CountryName && ing.EntityInfo.CountryName !== ing.EntityInfo.RegionName"><em ng-if="ing.EntityInfo.RegionName">,</em> {{ing.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryIngredients, ing.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] > 10 && $ctrl.WANNA_TRY_LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.WannaTryIngredients]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.WannaTryIngredients)">Load more ingredients</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isIngredientsFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenIngredientsForm()"><i class="icon icon--plus"></i> Add ingredients on your "wanna try" list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isIngredientsFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.ingredientsQuery.length == 0" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.ingredientsQuery, $ctrl.userListAutocompleteTypeEnum.Ingredients)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.ingredientsQuery" autofocus> <i ng-if="$ctrl.ingredientsQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryIngredients)"></i><div class="autocomplete__list" ng-if="$ctrl.ingredientsAutocomplete.length > 0 && $ctrl.ingredientsQuery.length > 0"><div ng-repeat="ing in $ctrl.ingredientsAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(ing, 5)"><div class="left"><div class="emblem"><img ng-if="ing.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::ing.Image}}?hw=25"> <img ng-if="!ing.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::ing.Name | accentSearchQuery: $ctrl.ingredientsQuery"></div><div ng-if="ing.GroupName" class="region-country">{{ing.GroupName}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryRecipes] ? $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] : \' \'}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] != 1 ? \'Recipes\' : \'Recipe\'}}</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryRecipes]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryRecipes]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] === 0"><div class="redesign-of-unordered-list list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] > 0"><ul ng-class="{\'redesign-of-unordered-list redesign-of-unordered-list--wanna-try\' : $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] > 3}" id="recipes-list"><li data-ng-repeat="recipe in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryRecipes]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{recipe.UrlLink}}" target="_blank"><img ng-if="recipe.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recipe.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!recipe.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category"><a ng-href="{{recipe.EntityInfo.GroupUrl}}" target="_blank">{{recipe.EntityInfo.GroupName}}</a></div><a ng-href="{{recipe.UrlLink}}" target="_blank"><h3 class="h3">{{recipe.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="recipe.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{::recipe.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a ng-if="recipe.EntityInfo.RegionName || recipe.EntityInfo.CountryName" href="{{recipe.EntityInfo.CountryUrlLink}}"><span>{{recipe.EntityInfo.RegionName}}</span><span ng-if="recipe.EntityInfo.CountryName && recipe.EntityInfo.CountryName !== recipe.EntityInfo.RegionName"><em ng-if="recipe.EntityInfo.RegionName">,</em> {{recipe.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryRecipes, recipe.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] > 10 && $ctrl.WANNA_TRY_LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.WannaTryRecipes]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.WannaTryRecipes)">Load more recipes</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isRecipesFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenRecipesForm()"><i class="icon icon--plus"></i> Add recipes on your "wanna try" list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isRecipesFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.recipesQuery.length == 0" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.recipesQuery, $ctrl.userListAutocompleteTypeEnum.Recipes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.recipesQuery" autofocus> <i ng-if="$ctrl.recipesQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryRecipes)"></i><div class="autocomplete__list" ng-if="$ctrl.recipesAutocomplete.length > 0 && $ctrl.recipesQuery.length > 0"><div ng-repeat="recipe in $ctrl.recipesAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(recipe, $ctrl.userListTypeEnum.WannaTryRecipes)"><div class="left"><div class="emblem"><img ng-if="recipe.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recipe.Image}}?hw=25"> <img ng-if="!recipe.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::recipe.Name | accentSearchQuery: $ctrl.recipesQuery"></div><div ng-if="recipe.GroupName" class="region-country">{{recipe.GroupName}}</div></div></div></div></div></div></div></div></div><div class="swiper-slide"><div class="profile-list" ng-class="{\'profile-list__private\' : $ctrl.isPrivate}"><div class="profile-list__header"><h2 class="h2 h2--small h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaVisitRestaurants] ? $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] : \' \'}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] != 1 ? \'Restaurants\' : \'Restaurant\'}}</h2><i class="plate-lines plate-lines--center"></i></div><div class="profile-list--loader wanna-try--loader__desktop" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaVisitRestaurants]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaVisitRestaurants]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] === 0"><div class="redesign-of-unordered-list list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] > 0"><ul ng-class="{\'redesign-of-unordered-list redesign-of-unordered-list--wanna-try\' : $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] > 3}" id="dishes-list"><li data-ng-repeat="restaurant in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaVisitRestaurants]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{restaurant.UrlLink}}" target="_blank"><img ng-if="restaurant.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!restaurant.EntityInfo.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div ng-if="restaurant.EntityInfo.RestaurantServingTypeLabel" class="category">{{restaurant.EntityInfo.RestaurantServingTypeLabel}}</div><a ng-href="{{restaurant.UrlLink}}" target="_blank"><h3 class="h3">{{restaurant.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="restaurant.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{::restaurant.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{restaurant.EntityInfo.CountryUrlLink}}"><span>{{restaurant.EntityInfo.RegionName}}</span><span ng-if="restaurant.EntityInfo.CountryName && restaurant.EntityInfo.CountryName !== restaurant.EntityInfo.RegionName"><em ng-if="restaurant.EntityInfo.RegionName">,</em> {{restaurant.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaVisitRestaurants, restaurant.Id)"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer"><div class="load-more-list-wrapper" ng-class="{\'load-more-list-wrapper__private\' : $ctrl.isPrivate}" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] > 10 && $ctrl.WANNA_TRY_LOAD_MORE_BTN_TYPES[$ctrl.userListTypeEnum.WannaVisitRestaurants]"><button type="button" class="load-more-list-items" ng-click="$ctrl.loadMoreItemsOnClick($ctrl.userListTypeEnum.WannaVisitRestaurants)">Load more restaurants</button></div><div class="btn btn--lightest-gray-background btn--lowercase btn--semibold" ng-if="!$ctrl.isRestaurantsFormOpened && $ctrl.isPrivate" ng-click="$ctrl.onOpenRestaurantForm()"><i class="icon icon--plus"></i> Add restaurants on your "wanna try" list</div><div class="autocomplete autocomplete--small autocomplete--bordered" ng-if="$ctrl.isRestaurantsFormOpened"><div class="autocomplete__container"><i ng-show="$ctrl.restaurantsQuery.length == 0" class="icon icon--search"></i> <input class="input input--nobackground input--big input--noborder" type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.restaurantsQuery, $ctrl.userListAutocompleteTypeEnum.Restaurants)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.restaurantsQuery" autofocus> <i ng-if="$ctrl.restaurantsQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaVisitRestaurants)"></i><div class="autocomplete__list" ng-if="$ctrl.restaurantsAutocomplete.length > 0 && $ctrl.restaurantsQuery.length > 0"><div ng-repeat="restaurant in $ctrl.restaurantsAutocomplete track by $index" class="item" ng-click="$ctrl.addListItem(restaurant, $ctrl.userListTypeEnum.WannaVisitRestaurants)"><div class="left"><div class="emblem"><img ng-if="restaurant.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.Image}}?hw=25"> <img ng-if="!restaurant.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::restaurant.Name | accentSearchQuery: $ctrl.restaurantsQuery"></div><div ng-if="restaurant.GroupName" class="region-country">{{restaurant.GroupName}}</div></div></div></div></div></div></div></div></div></div></div><div class="swiper-button-next slider__scroll-circle slider__scroll-circle--right"><i class="icon icon__big-arrow icon__big-arrow-right--redesign"></i></div><div class="swiper-button-prev slider__scroll-circle slider__scroll-circle--left"><i class="icon icon__big-arrow icon__big-arrow-left--redesign"></i></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-list/ta-profile-wanna-try-mobile.html','<div class="profile-lists profile-lists--redesign profile-lists--redesign__wanna-try"><div class="profile-list" id="profile_list_dishes"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes] ? $ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] : \'\'}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] != 1 ? \'Dishes\' : \'Dish\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')"></i></div><div class="profile-list--loader wanna-try--loader__mobile" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryDishes]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-food-id" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-ng-model="$ctrl.dishesData"><li data-ng-repeat="food in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryDishes]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.EntityInfo.Image" ng-src="{{::$ctrl.constants.cdnHost}}/{{::food.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!food.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category"><a href="{{food.EntityInfo.GroupUrl}}" target="_blank">{{food.EntityInfo.GroupName}}</a></div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{food.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="food.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" src="{{::$ctrl.constants.cdnHost}}{{::food.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{food.EntityInfo.CountryUrlLink}}"><span>{{food.EntityInfo.RegionName}}</span><span ng-if="food.EntityInfo.CountryName && food.EntityInfo.CountryName !== food.EntityInfo.RegionName"><em ng-if="food.EntityInfo.RegionName">,</em> {{food.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryDishes, food.Id, \'profile_list_dishes\')"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onDishesAutocompleteOpen()"><i class="icon icon--plus"></i> Add dishes on your "wanna try" list</div><div class="btn-wrapper" ng-class="{\'btn-wrapper--private\' : $ctrl.isPrivate}"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryDishes] > 10">View full list</button></div><div ng-if="$ctrl.isDishesAutocompleteVisible" class="autocomplete autocomplete--active" id="add_food_autocomplete"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onDishesAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.dishesQuery, $ctrl.userListAutocompleteTypeEnum.Dishes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishesQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.dishesQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryDishes)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.dishesAutocomplete.length > 0 && $ctrl.dishesQuery.length > 0"><div ng-repeat="dish in $ctrl.dishesAutocomplete track by $index" ng-click="$ctrl.addListItem(dish, $ctrl.userListTypeEnum.WannaTryDishes, \'profile_list_dishes\')" class="item"><div class="emblem"><img ng-if="dish.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dish.Image}}"> <img ng-if="!dish.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::dish.Name | accentSearchQuery: $ctrl.dishesQuery"></div><div class="description" ng-if="dish.Description">{{dish.Description}}</div><div class="type">{{dish.GroupName}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_ingredients"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients]}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] != 1 ? \'Ingredients\' : \'Ingredient\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_ingredients\')"></i></div><div class="profile-list--loader wanna-try--loader__mobile" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryIngredients]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryIngredients]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-couisine-id" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-ng-model="$ctrl.ingredientsData"><li data-ng-repeat="ing in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryIngredients]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{ing.UrlLink}}" target="_blank"><img ng-if="ing.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{ing.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!ing.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{ing.EntityInfo.GroupName}}</div><a ng-href="{{ing.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{ing.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="ing.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{ing.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a href="{{ing.EntityInfo.CountryUrlLink}}"><span>{{ing.EntityInfo.RegionName}}</span><span ng-if="ing.EntityInfo.CountryName && ing.EntityInfo.CountryName !== ing.EntityInfo.RegionName"><em ng-if="ing.EntityInfo.RegionName">,</em> {{ing.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryIngredients, ing.Id, \'profile_list_ingredients\')"><i class="icon icon--trash"></i></a></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onIngredientsAutocompleteOpen()"><i class="icon icon--plus"></i> Add ingredients on your "wanna try" list</div><div class="btn-wrapper" ng-class="{\'btn-wrapper--private\' : $ctrl.isPrivate}"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_ingredients\')" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryIngredients] > 10">View full list</button></div><div ng-if="$ctrl.isIngredientsAutocompleteVisible" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onIngredientsAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.ingredientsQuery, $ctrl.userListAutocompleteTypeEnum.Ingredients)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.ingredientsQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.ingredientsQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryIngredients)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.ingredientsAutocomplete.length > 0 && $ctrl.ingredientsQuery.length > 0"><div ng-repeat="ing in $ctrl.ingredientsAutocomplete track by $index" ng-click="$ctrl.addListItem(ing, $ctrl.userListTypeEnum.WannaTryIngredients, \'profile_list_ingredients\')" class="item"><div class="emblem"><img ng-if="ing.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::ing.Image}}"> <img ng-if="!ing.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::ing.Name | accentSearchQuery: $ctrl.ingredientsQuery"></div><div class="description" ng-if="ing.Description">{{ing.Description}}</div><div class="type">{{ing.GroupName}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_recipes"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes]}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] != 1 ? \'Recipes\' : \'Recipe\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_recipes\')"></i></div><div class="profile-list--loader wanna-try--loader__mobile" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryRecipes]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaTryRecipes]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-dish-restaurant-id" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-ng-model="$ctrl.recipesData"><li data-ng-repeat="recipe in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaTryRecipes]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{recipe.UrlLink}}" target="_blank"><img ng-if="recipe.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{recipe.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!recipe.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{recipe.EntityInfo.GroupName}}</div><a ng-href="{{recipe.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{recipe.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="recipe.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{recipe.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a ng-if="recipe.EntityInfo.RegionName || recipe.EntityInfo.CountryName" href="{{recipe.EntityInfo.CountryUrlLink}}"><span>{{recipe.EntityInfo.RegionName}}</span><span ng-if="recipe.EntityInfo.CountryName && recipe.EntityInfo.CountryName !== recipe.EntityInfo.RegionName"><em ng-if="recipe.EntityInfo.RegionName">,</em> {{recipe.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaTryRecipes, recipe.Id, \'profile_list_recipes\')"><i class="icon icon--trash"></i></a></div><div class="modal" modal-directive close-modal="$ctrl.onCloseFavoriteRestaurantPopup()" ng-if="$ctrl.favoriteRestaurantPopup === (\'favorite-restaurant-popup-\' + dr.Id)"><div class="modal__container modal__container--fixed-bottom"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onCloseFavoriteRestaurantPopup()"></i></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=160&h=160"></div></div><div class="right"><div class="category">{{dr.DishCategory}}</div><h3 class="h3 h3--large">{{dr.DishName}} at {{dr.RestaurantName}}</h3><div class="region"><span>{{dr.RestaurantCity}}</span><span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="dr.Order"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.onFavoriteDishRestaurantsOrderChange($index, dr.Order)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.onDeleteFavoriteDishRestaurant(dr.Id)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onRecipesAutocompleteOpen()"><i class="icon icon--plus"></i> Add recipes on your "wanna try" list</div><div class="btn-wrapper" ng-class="{\'btn-wrapper--private\' : $ctrl.isPrivate}"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_recipes\')" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaTryRecipes] > 10">View full list</button></div><div ng-if="$ctrl.isRecipesAutocompleteVisible" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onRecipesAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.recipesQuery, $ctrl.userListAutocompleteTypeEnum.Recipes)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.recipesQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.recipesQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaTryRecipes)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.recipesAutocomplete.length > 0 && $ctrl.recipesQuery.length > 0"><div ng-repeat="recipe in $ctrl.recipesAutocomplete track by $index" ng-click="$ctrl.addListItem(recipe, $ctrl.userListTypeEnum.WannaTryRecipes, \'profile_list_recipes\')" class="item"><div class="emblem"><img ng-if="recipe.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::recipe.Image}}"> <img ng-if="!recipe.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::recipe.Name | accentSearchQuery: $ctrl.recipesQuery"></div><div class="description" ng-if="recipe.Description">{{recipe.Description}}</div><div class="type">{{recipe.GroupName}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_restaurants"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">{{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants]}} {{$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] != 1 ? \'Restaurants\' : \'Restaurant\'}}</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_restaurants\')"></i></div><div class="profile-list--loader wanna-try--loader__mobile" ng-if="!$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaVisitRestaurants]"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="$ctrl.WANNA_TRY_LOADER[$ctrl.userListTypeEnum.WannaVisitRestaurants]"><div class="profile-list__body" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] == 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body profile-list__body--redesign" ng-class="$ctrl.isPrivate ? \'profile-list__body--redesign__private\' : \'profile-list__body--redesign__public\'" id="favorite-dish-restaurant-id" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] > 0"><ul ng-class="{\'full-list__public\' : !$ctrl.isPrivate}" data-ng-model="$ctrl.recipesData"><li data-ng-repeat="restaurant in $ctrl.WANNA_TRY_LIST_TYPES[$ctrl.userListTypeEnum.WannaVisitRestaurants]" class="list-item"><div class="list-item__body"><div class="list-item__center"><div class="list-item__image"><a ng-href="{{restaurant.UrlLink}}" target="_blank"><img ng-if="restaurant.EntityInfo.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{restaurant.EntityInfo.Image}}?w=160&h=160"> <img class="list-item__no-image" ng-if="!restaurant.EntityInfo.Image" src="/Content/Image/no_image.svg?w=80&h=80"></a></div><div class="list-item__description"><div ng-if="restaurant.EntityInfo.RestaurantServingTypeLabel" class="category">{{restaurant.EntityInfo.RestaurantServingTypeLabel}}</div><a ng-href="{{restaurant.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{restaurant.EntityInfo.Name}}</h3></a><div class="region"><img ng-if="restaurant.EntityInfo.CountryEmblemImage" class="flag" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}{{restaurant.EntityInfo.CountryEmblemImage}}?w=13&h=8"> <a ng-if="restaurant.EntityInfo.RegionName || restaurant.EntityInfo.CountryName" href="{{restaurant.EntityInfo.CountryUrlLink}}"><span>{{restaurant.EntityInfo.RegionName}}</span><span ng-if="restaurant.EntityInfo.CountryName && restaurant.EntityInfo.CountryName !== restaurant.EntityInfo.RegionName"><em ng-if="restaurant.EntityInfo.RegionName">,</em> {{restaurant.EntityInfo.CountryName}}</span></a></div></div></div><div ng-if="$ctrl.isPrivate" class="list-item__right" data-no-drag><a ng-click="$ctrl.deleteListItem($ctrl.userListTypeEnum.WannaVisitRestaurants, restaurant.Id, \'profile_list_restaurants\')"><i class="icon icon--trash"></i></a></div><div class="modal" modal-directive close-modal="$ctrl.onCloseFavoriteRestaurantPopup()" ng-if="$ctrl.favoriteRestaurantPopup === (\'favorite-restaurant-popup-\' + dr.Id)"><div class="modal__container modal__container--fixed-bottom"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onCloseFavoriteRestaurantPopup()"></i></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=160&h=160"></div></div><div class="right"><div class="category">{{dr.DishCategory}}</div><h3 class="h3 h3--large">{{dr.DishName}} at {{dr.RestaurantName}}</h3><div class="region"><span>{{dr.RestaurantCity}}</span><span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="dr.Order"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.onFavoriteDishRestaurantsOrderChange($index, dr.Order)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.onDeleteFavoriteDishRestaurant(dr.Id)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div></div></li></ul></div></div><div class="profile-list__footer" ng-class="{\'profile-list__footer--public\' : !$ctrl.isPrivate}"><div ng-if="$ctrl.isPrivate" class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onRestaurantsAutocompleteOpen()"><i class="icon icon--plus"></i> Add restaurants on your "wanna try" list</div><div class="btn-wrapper" ng-class="{\'btn-wrapper--private\' : $ctrl.isPrivate}"><button class="btn btn--noborder btn--no-bgcolor view-list" ng-click="$ctrl.toggleFullList(\'profile_list_restaurants\')" ng-if="$ctrl.WANNA_TRY_LIST_TOTAL_COUNT[$ctrl.userListTypeEnum.WannaVisitRestaurants] > 10">View full list</button></div><div ng-if="$ctrl.isRestaurantsAutocompleteVisible" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onRestaurantsAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchItems($ctrl.restaurantsQuery, $ctrl.userListAutocompleteTypeEnum.Restaurants)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.restaurantsQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.restaurantsQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteAutocompleteQuery($ctrl.userListTypeEnum.WannaVisitRestaurants)"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.restaurantsAutocomplete.length > 0 && $ctrl.restaurantsQuery.length > 0"><div ng-repeat="restaurant in $ctrl.restaurantsAutocomplete track by $index" ng-click="$ctrl.addListItem(restaurant, $ctrl.userListTypeEnum.WannaVisitRestaurants, \'profile_list_restaurants\')" class="item"><div class="emblem"><img ng-if="restaurant.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::restaurant.Image}}"> <img ng-if="!restaurant.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::restaurant.Name | accentSearchQuery: $ctrl.restaurantsQuery"></div><div class="description" ng-if="restaurant.Description">{{restaurant.Description}}</div><div class="type">{{restaurant.GroupName}}</div></div></div></div></div></div></div><div ng-if="$ctrl.openShareListModal" class="share-list-modal-wrapper"><div class="share-list-modal modal" modal-directive close-modal="$ctrl.closeShareListModal()"><div class="modal__container modal__container--share-list" click-outside="$ctrl.closeShareListModal()"><div class="modal__header--share-list"><div class="ta ta-share-arrow"></div></div><div class="modal__body--share-list"><p class="share-list-heading">Add minimum 5 items to share!</p><button type="button" class="add-to-list-btn">Add to list</button> <button type="button" class="cancel-share-list-modal-btn" ng-click="$ctrl.closeShareListModal()">Cancel</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-private-popup.html','<div class="modal" modal-directive close-modal="$ctrl.closePopup()"><div class="modal__container modal__container--fixed-bottom"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><div ng-click="$ctrl.closePopup()"><i class="icon icon--close-slim close-modal"></i></div></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="$ctrl.item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.item.Image}}?w=80&h=80"></div></div><div class="right"><div class="category">{{$ctrl.item.DishCategory}}</div><h3 class="h3 h3--large">{{$ctrl.item.Name}}</h3><div class="region"><span>{{$ctrl.item.RegionName}}</span> <span ng-if="$ctrl.item.CountryName">, {{$ctrl.item.CountryName}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="$ctrl.newIndex" type="number"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.orderChange($ctrl.item)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.deleteItem($ctrl.item)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-private.html','<div class="profile-lists"><div class="profile-list" id="profile_list_food"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite food</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_food\')"></i><ta-shared-button ng-if="$ctrl.details.FavoriteFood.length > 0" type="Foods" list-items-counter="$ctrl.details.FavoriteFood.length" button-text="SHARE MY LIST" list-type="1" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteFood.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-food-id" ng-if="$ctrl.details.FavoriteFood.length > 0"><ul data-as-sortable="$ctrl.favoriteFoodDragControl" data-ng-model="$ctrl.details.FavoriteFood"><li data-ng-repeat="food in $ctrl.details.FavoriteFood | limitTo: $ctrl.limitList" data-as-sortable-item class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.Image" ng-src="{{::$ctrl.constants.cdnHost}}/{{::food.Image}}?w=80&h=80"> <img class="list-item__no-image" ng-if="!food.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category">{{food.Category}}</div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{food.Name}}</h3></a><div class="region"><span>{{food.RegionName}}</span><span ng-if="food.CountryName">, {{food.CountryName}}</span></div><div class="rating-box"><ta-home-item-rating item="food"></ta-home-item-rating></div></div></div><div class="list-item__right" data-no-drag><a ng-click="$ctrl.onOpenFavoriteFoodPopup(food.Id)"><i class="icon icon--move"></i></a> <a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a></div><ta-profile-mobile-list-private-popup ng-if="$ctrl.favoriteFoodPopup === (\'favorite-food-popup-\' + food.Id)" item="food" on-close-popup="$ctrl.onCloseFavoriteFoodPopup();" on-delete-item="$ctrl.onDeleteFavoriteFood(id);" on-order-change="$ctrl.onFavoriteFoodOrderChange(item, lastIndex, newIndex)"></ta-profile-mobile-list-private-popup></div></li></ul></div><div class="profile-list__footer"><div class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onFoodAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite food to your list</div><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_food\')" ng-if="$ctrl.details.FavoriteFood.length > 5">View full list</button><div ng-if="$ctrl.isFoodAutocompleteVisible" class="autocomplete autocomplete--active" id="add_food_autocomplete"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onFoodAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchFavoriteFood($ctrl.favoriteFoodQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.favoriteFoodQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.favoriteFoodQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteFavoriteFoodAutocompleteQuery()"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.favoriteFoodAutocomplete.length > 0"><div ng-repeat="foodAutocomplete in $ctrl.favoriteFoodAutocomplete track by $index" ng-click="$ctrl.onFavoriteFoodAutocompleteClick(foodAutocomplete)" class="item"><div class="emblem"><img ng-if="foodAutocomplete.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::foodAutocomplete.Image}}"> <img ng-if="!foodAutocomplete.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::foodAutocomplete.Label | accentSearchQuery: $ctrl.favoriteFoodQuery"></div><div class="description" ng-if="foodAutocomplete.Description">{{foodAutocomplete.Description}}</div><div class="type">{{foodAutocomplete.Group}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_cuisine"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite cuisines</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')"></i><ta-shared-button ng-if="$ctrl.details.FavoriteCouisines.length > 0" type="Cuisines" list-items-counter="$ctrl.details.FavoriteCouisines.length" button-text="SHARE MY LIST" list-type="2" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteCouisines.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-couisine-id" ng-if="$ctrl.details.FavoriteCouisines.length > 0"><ul data-as-sortable="$ctrl.favoriteCouisinesDragControl" data-ng-model="$ctrl.details.FavoriteCouisines"><li data-ng-repeat="item in $ctrl.details.FavoriteCouisines | limitTo: $ctrl.limitList" data-as-sortable-item class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image}}?w=80&h=80"></a></div><div class="list-item__description"><a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{item.Name}}</h3></a><div class="region"><span>{{item.RegionName}}</span> <span ng-if="item.CountryName">, {{item.CountryName}}</span></div></div></div><div class="list-item__right" data-no-drag><a ng-click="$ctrl.onOpenFavoriteCouisinePopup(item.Id)"><i class="icon icon--move"></i></a> <a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a></div><ta-profile-mobile-list-private-popup ng-if="$ctrl.favoriteCouisinePopup === (\'favorite-couisine-popup-\' + item.Id)" item="item" on-close-popup="$ctrl.onCloseFavoriteCouisinePopup()" on-delete-item="$ctrl.onDeleteFavoriteCouisine(id)" on-order-change="$ctrl.onFavoriteCouisineOrderChange(item, lastIndex, newIndex)"></ta-profile-mobile-list-private-popup></div></li></ul></div><div class="profile-list__footer"><div class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onCouisineAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite cuisine to your list</div><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')" ng-if="$ctrl.details.FavoriteCouisines.length > 5">View full list</button><div ng-if="$ctrl.isCouisineAutocompleteVisible" class="autocomplete autocomplete--active"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onCouisineAutocompleteOpen()"></i> <input type="text" placeholder="Search" ng-change="$ctrl.onSearchRegionByCouisine($ctrl.couisineQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.couisineQuery" ng-keydown="$event.keyCode === 13" input-auto-focus class="input input--big input--noborder input--underline"> <i ng-if="$ctrl.couisineQuery.length > 0" class="icon icon--close icon--close-cross--black--search" ng-click="$ctrl.onDeleteCouisineQuery()"></i><div class="autocomplete__list autocomplete__list--fullpadding" ng-if="$ctrl.couisines.length > 0"><div ng-repeat="c in $ctrl.couisines track by $index" ng-click="$ctrl.onCouisineClick(c)" class="item"><div class="emblem"><img ng-if="c.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::c.Image}}"> <img ng-if="!c.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::c.Label | accentSearchQuery: $ctrl.couisineQuery"></div><div class="description" ng-if="c.Description">{{c.Description}}</div><div class="type">{{c.Group}}</div></div></div></div></div></div><div class="profile-list" id="profile_list_dishes"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite dishes in restaurants</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')"></i><ta-shared-button ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0" type="DishesInRestaurants" list-items-counter="$ctrl.details.FavoriteDishRestaurants.length" button-text="SHARE MY LIST" list-type="3" is-mobile="true" show-arrow="false"></ta-shared-button></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteDishRestaurants.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-dish-restaurant-id" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0"><ul data-as-sortable="$ctrl.favoriteDishRestaurantsDragControl" data-ng-model="$ctrl.details.FavoriteDishRestaurants"><li data-ng-repeat="dr in $ctrl.details.FavoriteDishRestaurants | limitTo: $ctrl.limitList" data-as-sortable-item ng-mouseenter="$ctrl.onDishRestaurantEnter(dr.Id)" ng-mouseleave="$ctrl.onDishRestaurantLeave(dr.Id)" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center" ng-class="{ \'list-item__center--disabled\' : !dr.IsInDatabase }"><div class="list-item__image"><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></a> <a ng-if="!dr.IsInDatabase"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{dr.DishCategory}}</div><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><h3 class="h3">{{dr.DishName}} in {{dr.RestaurantName}}</h3></a><div class="region"><span>{{dr.RestaurantCity}}</span><span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div><div class="list-item__stars"><ta-star-score-mobile rating="dr.Score"></ta-star-score-mobile></div></div></div><div class="list-item__right" data-no-drag><a ng-click="$ctrl.onOpenFavoriteRestaurantPopup(dr.Id)"><i class="icon icon--move"></i></a> <a data-as-sortable-item-handle class="item-anchor as-handle-item"><i class="icon icon__reorder"></i></a></div><div class="modal" modal-directive close-modal="$ctrl.onCloseFavoriteRestaurantPopup()" ng-if="$ctrl.favoriteRestaurantPopup === (\'favorite-restaurant-popup-\' + dr.Id)"><div class="modal__container modal__container--fixed-bottom"><div class="profile-list__options"><div class="modal__header"><div class="title">List options</div><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onCloseFavoriteRestaurantPopup()"></i></div><div class="modal__body"><div class="item"><div class="left"><div class="popup-item-image"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></div></div><div class="right"><div class="category">{{dr.DishCategory}}</div><h3 class="h3 h3--large">{{dr.DishName}} at {{dr.RestaurantName}}</h3><div class="region"><span>{{dr.RestaurantCity}}</span><span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div></div></div><div class="order"><input class="input input--nobackground" ng-model="dr.Order"> <button class="btn btn--medium btn--semibold btn--red-background btn--lowercase" ng-click="$ctrl.onFavoriteDishRestaurantsOrderChange($index, dr.Order)">Apply</button></div></div><div class="modal__footer"><button class="btn btn--medium btn--semibold btn--white-background btn--lowercase" ng-click="$ctrl.onDeleteFavoriteDishRestaurant(dr.Id)"><i class="icon icon--trash"></i>Delete item</button></div></div></div></div></div></li></ul></div><div class="profile-list__footer"><div class="btn btn--medium btn--lightest-gray-background btn--lowercase btn--semibold" ng-click="$ctrl.onDishRestaurantAutocompleteOpen()"><i class="icon icon--plus"></i> Add favorite dishes to your list</div><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 5">View full list</button><form name="$ctrl.favoriteDishRestaurants" ng-if="$ctrl.isDishRestaurantVisible" class="modal"><div class="modal__container modal__container--full-screen"><i class="icon icon--arrow icon--arrow--left--alt" ng-click="$ctrl.onDishRestaurantAutocompleteOpen()"></i><div class="modal__footer"></div><div class="modal__body"><div class="modal__main"><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusDish || $ctrl.dishQuery.length > 0 }">Search dishes</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input type="text" autocomplete="off" required name="dish" ng-focus="focusDish=true" ng-blur="focusDish=false" ng-change="$ctrl.onSearchDishes($ctrl.dishQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.dishQuery" input-auto-focus class="input input--large" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.dish.$valid && $ctrl.favoriteDishRestaurants.dish.$touched && !focusDish, \'input--blueborder\': focusDish }"><div class="autocomplete-input-error" ng-show="!focusDish && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.dish.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.dish.$error.required"></div></div><i ng-if="$ctrl.dishQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteDishQuery()"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.dishesAutocomplete.length > 0"><div ng-repeat="d in $ctrl.dishesAutocomplete track by $index" class="item" ng-click="$ctrl.onDishAutocompleteClick(d)"><div class="left"><div class="emblem"><img ng-if="d.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::d.Image}}?hw=25"> <img ng-if="!d.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::d.Label | accentSearchQuery: $ctrl.dishQuery"></div><div ng-if="d.Group" class="region-country">{{d.Group}}</div></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusRestaurant || $ctrl.addFavoriteDishRestaurantForm.RestaurantName.length > 0 }">Search restaurants</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--search"></i> <input class="input input--large" autocomplete="off" type="text" required name="restaurant" ng-focus="focusRestaurant=true" ng-blur="focusRestaurant=false" ng-change="$ctrl.onSearchRestaurants($ctrl.addFavoriteDishRestaurantForm.RestaurantName)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantName" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.restaurant.$valid && $ctrl.favoriteDishRestaurants.restaurant.$touched && !focusRestaurant, \'input--blueborder\': focusRestaurant }"><div class="autocomplete-input-error" ng-show="!focusRestaurant && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.restaurant.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.restaurant.$error.required"></div></div><i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantName.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteRestaurantQuery()"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.restaurantAutocomplete.length > 0"><div ng-repeat="r in $ctrl.restaurantAutocomplete track by $index" class="item" ng-click="$ctrl.onRestaurantAutocompleteClick(r)"><div class="left"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div></div><div class="right"><div class="city" ng-bind-html="::r.Label | accentSearchQuery: $ctrl.addFavoriteDishRestaurantForm.RestaurantName"></div><div ng-if="r.SecondaryLabel" class="region-country">{{r.SecondaryLabel}}</div></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusCity || $ctrl.addFavoriteDishRestaurantForm.RestaurantCity.length > 0 }">City</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--large" type="text" autocomplete="off" name="city" required ng-focus="focusCity=true" ng-blur="focusCity=false" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantCity" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.city.$valid && $ctrl.favoriteDishRestaurants.city.$touched && !focusCity, \'input--blueborder\': focusCity }"> <i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantCity.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteCityQuery()"></i><div class="autocomplete-input-error" ng-show="!focusCity && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.city.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.city.$error.required"></div></div></div></div><label class="autocomplete-input-label" ng-class="{\'autocomplete-input-label--min\' : focusCountry || $ctrl.addFavoriteDishRestaurantForm.RestaurantCountry.length > 0 }">Country</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--large" type="text" autocomplete="off" name="country" required ng-focus="focusCountry=true" ng-blur="focusCountry=false" ng-model="$ctrl.addFavoriteDishRestaurantForm.RestaurantCountry" ng-class="{\'input--redborder\': !$ctrl.favoriteDishRestaurants.country.$valid && $ctrl.favoriteDishRestaurants.country.$touched && !focusCountry, \'input--blueborder\': focusCountry }"> <i ng-if="$ctrl.addFavoriteDishRestaurantForm.RestaurantCountry.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteCountryQuery()"></i><div class="autocomplete-input-error" ng-show="!focusCountry && ($ctrl.favoriteDishRestaurants.$submitted || $ctrl.favoriteDishRestaurants.country.$touched)"><div ng-show="$ctrl.favoriteDishRestaurants.country.$error.required"></div></div></div></div></div></div><div class="modal__footer"><button class="btn btn--disabled-background" ng-if="$ctrl.favoriteDishRestaurants.$invalid" disabled>Add</button> <button class="btn btn--red-background" ng-if="!$ctrl.favoriteDishRestaurants.$invalid" ng-click="$ctrl.addFavoriteDishRestaurant()">Add</button></div></div></form></div></div></div><div ng-if="$ctrl.openShareListModal" class="share-list-modal-wrapper"><div class="share-list-modal modal" modal-directive close-modal="$ctrl.closeShareListModal()"><div class="modal__container modal__container--share-list" click-outside="$ctrl.closeShareListModal()"><div class="modal__header--share-list"><div class="ta ta-share-arrow"></div></div><div class="modal__body--share-list"><p class="share-list-heading">Add minimum 5 items to share!</p><button type="button" class="add-to-list-btn" ng-click="$ctrl.addToList()">Add to list</button> <button type="button" class="cancel-share-list-modal-btn" ng-click="$ctrl.closeShareListModal()">Cancel</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-public.html','<div class="profile-lists"><div class="profile-list" id="profile_list_food"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite food</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_food\')"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteFood.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-food-id" ng-if="$ctrl.details.FavoriteFood.length > 0"><ul><li data-ng-repeat="food in $ctrl.details.FavoriteFood | limitTo: $ctrl.limitList" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{food.UrlLink}}" target="_blank"><img ng-if="food.Image" ng-src="{{::$ctrl.constants.cdnHost}}/{{::food.Image}}?w=80&h=80"> <img class="list-item__no-image" ng-if="!food.Image" src="/Content/Image/no_image.svg"></a></div><div class="list-item__description"><div class="category">{{food.Category}}</div><a ng-href="{{food.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{food.Name}}</h3></a><div class="region"><span>{{food.RegionName}}</span> <span ng-if="food.CountryName">, {{food.CountryName}}</span></div><div class="list-item__stars"><ta-star-score-mobile rating="food.Score"></ta-star-score-mobile></div></div></div><div class="list-item__right"></div></div></li></ul></div><div class="profile-list__footer"><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_food\')" ng-if="$ctrl.details.FavoriteFood.length > 5">View full list</button></div></div><div class="profile-list" id="profile_list_cuisine"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite cuisines</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteCouisines.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-couisine-id" ng-if="$ctrl.details.FavoriteCouisines.length > 0"><ul><li data-ng-repeat="item in $ctrl.details.FavoriteCouisines | limitTo: $ctrl.limitList" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image}}?w=80&h=80"></a></div><div class="list-item__description"><a ng-href="{{item.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{item.Name}}</h3></a><div class="region"><span>{{item.RegionName}}</span> <span ng-if="item.CountryName">, {{item.CountryName}}</span></div></div></div><div class="list-item__right"></div></div></li></ul></div><div class="profile-list__footer"><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_cuisine\')" ng-if="$ctrl.details.FavoriteCouisines.length > 5">View full list</button></div></div><div class="profile-list" id="profile_list_dishes"><div class="profile-list__header"><h2 class="h2 h2--large h2--center h2--lowercase h2--bold">Favorite dishes in restaurants</h2><i class="plate-lines plate-lines--center"></i> <i class="icon icon--close-slim close-list-alt" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')"></i></div><div class="profile-list__body" ng-if="$ctrl.details.FavoriteDishRestaurants.length === 0"><div class="list-item list-item--none">No favorites yet.</div></div><div class="profile-list__body" id="favorite-dish-restaurant-id" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 0"><ul><li data-ng-repeat="dr in $ctrl.details.FavoriteDishRestaurants | limitTo: $ctrl.limitList" class="list-item"><div class="list-item__body"><div class="list-item__left">{{$index + 1}}</div><div class="list-item__center" ng-class="{ \'list-item__center--disabled\' : !dr.IsInDatabase }"><div class="list-item__image"><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><img ng-if="dr.DishImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dr.DishImage}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{dr.DishCategory}}</div><a ng-if="dr.IsInDatabase" ng-href="{{dr.RestaurantUrlLink/dr.DishUrlLink}}" target="_blank"><h3 class="h3">{{dr.DishName}} in {{dr.RestaurantName}}</h3></a><div class="region"><span>{{dr.RestaurantCity}}</span> <span ng-if="dr.RestaurantCountry">, {{dr.RestaurantCountry}}</span></div><div class="list-item__stars"><ta-star-score-mobile rating="dr.Score"></ta-star-score-mobile></div></div></div><div class="list-item__right"></div></div></li></ul></div><div class="profile-list__footer"><button class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom view-list" ng-click="$ctrl.toggleFullList(\'profile_list_dishes\')" ng-if="$ctrl.details.FavoriteDishRestaurants.length > 5">View full list</button></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-main-private.html','<div class="profile__edit"><div ng-if="$ctrl.isEditPageOpened"><div class="modal" modal-directive close-modal="$ctrl.openEditPage()"><div class="modal__container"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.openEditPage()"></i><div ng-if="$ctrl.editProfile.ProfilePicture && !$ctrl.isUploadingPhoto" class="thumb thumb--small" style="background-image: url({{::$ctrl.constants.cdnHost}}{{::$ctrl.editProfile.ProfilePicture}})"><button class="btn btn--lightest-gray-background" ng-click="$ctrl.addProfilePhoto()"><i class="icon icon--photo"></i></button></div><div ng-if="!$ctrl.editProfile.ProfilePicture || $ctrl.isUploadingPhoto" class="thumb thumb--small" style="background-image: url(/Content/layout-shared/layout/icons/no_profile_image.svg?h=132&w=132)"><button class="btn btn--lightest-gray-background" ng-click="$ctrl.addProfilePhoto()"><i class="icon icon--photo"></i></button></div><input type="file" class="ta-file-upload" ta-file-change handler="$ctrl.onUploadImageClick(files)" accept="image/png,image/jpeg" style="display:none"></div><form name="$ctrl.editForm" novalidate ng-submit="$ctrl.onEdit()"><div class="modal__body"><label>First name <span class="required">*</span></label> <input type="text" class="input input--large" autocomplete="off" required name="firstName" ng-model="$ctrl.editProfile.FirstName"><div ng-show="$ctrl.editForm.$submitted || $ctrl.editForm.firstName.$touched"><div ng-show="$ctrl.editForm.firstName.$error.required"></div></div><label>Last name <span class="required">*</span></label> <input type="text" class="input input--large" autocomplete="off" required name="lastName" ng-model="$ctrl.editProfile.LastName"><div ng-show="$ctrl.editForm.$submitted || $ctrl.editForm.lastName.$touched"><div ng-show="$ctrl.editForm.lastName.$error.required"></div></div><label>Title</label><div class="select"><select name="title" class="input input--large select--background-icon" ng-model="$ctrl.editProfile.Title"><option>{{$ctrl.editProfile.Title}}</option><option>FOODIE</option><option>BLOGGER</option><option>CHEF</option><option>RESTAURANT OWNER</option><option>FOOD CRITIC</option><option>WINE CRITIC</option><option>WINEMAKER</option><option>TOURIST BOARD REPRESENTATIVE</option><option>DELICATESSEN OWNER</option><option>FISHMONGER</option><option>CHEESEMAKER</option><option>CHEESEMONGER</option><option>BUTCHER</option><option>TRAVEL BLOGGER</option><option>JOURNALIST</option><option>TOURIST AGENT</option></select></div><label>Location</label><div class="autocomplete autocomplete--bordered"><div class="autocomplete__container"><i class="icon icon--pin"></i> <input class="input input--large" type="text" autocomplete="off" ng-change="$ctrl.onAutocompleteRegions($ctrl.regionQuery)" ng-model-options="{ debounce: 300 }" ng-model="$ctrl.regionQuery"> <i ng-if="$ctrl.regionQuery.length > 0" class="icon icon--close-cross--black" ng-click="$ctrl.onDeleteRegionQuery()"></i></div><div class="autocomplete__list autocomplete__list--limited-height" ng-if="$ctrl.regions.length > 0"><div ng-repeat="r in $ctrl.regions track by $index" class="item" ng-click="$ctrl.onRegionAutocompleteClick(r)"><div class="emblem"><img ng-if="r.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::r.Image}}?hw=25"> <img ng-if="!r.Image" ta-lazy-load lazy-source="/content/image/default.png"></div><div class="city" ng-bind-html="::r.Label | accentSearchQuery: $ctrl.regionQuery"></div><div ng-if="r.SecondaryLabel" class="region-country">{{r.SecondaryLabel}}</div></div></div></div><label class="about-me">About me</label> <textarea rows="5" type="text" class="input input--large input--noheight user-profile-textarea" autocomplete="off" name="description" ng-model="$ctrl.editProfile.Description">\r\n                        </textarea> <label>Link</label> <input type="text" class="input input--large" autocomplete="off" name="web" ng-model="$ctrl.editProfile.CriticWebsite"></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row"><button class="btn btn--light-gray-background" ng-click="$ctrl.openEditPage()" ng-if="!$ctrl.isUploadingPhoto && !$ctrl.isSubmitting">CANCEL</button> <button class="btn btn--disabled-background" ng-click="$ctrl.openEditPage()" ng-if="$ctrl.isUploadingPhoto || $ctrl.isSubmitting" disabled>CANCEL</button> <button class="btn btn--red-background" type="submit" ng-if="$ctrl.editForm.$valid && !$ctrl.isUploadingPhoto && !$ctrl.isSubmitting">SAVE</button> <button class="btn btn--disabled-background" type="submit" ng-if="!$ctrl.editForm.$valid || $ctrl.isUploadingPhoto || $ctrl.isSubmitting" disabled>SAVE</button></div></div></form></div></div></div></div><section class="profile-page-redesign"><div class="profile-header-wrapper"><div class="profile-header-row profile-header--top-row"><div class="profile-header--image-name-wrapper"><div class="profile-header--img"><img class="profile-header--avatar profile-header--avatar__img" ng-if="$ctrl.details.ProfilePicture" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.ProfilePicture}}?h=112&w=112" alt="{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}"><div class="profile-header--avatar profile-header--avatar__no-img" ng-if="!$ctrl.details.ProfilePicture">{{$ctrl.details.FirstName.charAt(0)}}</div></div><div ng-if="$ctrl.details.Web" class="profile-header--txt"><div class="profile-header--name-surname"><span>{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</span></div><div class="card__link card__link--noborder" ng-if="$ctrl.details.Web"><a ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">{{$ctrl.details.Web}}</a></div></div><div ng-if="!$ctrl.details.Web" class="profile-header--name-surname"><span>{{$ctrl.details.FirstName}}</span> <span>{{$ctrl.details.LastName}}</span></div></div><div class="edit-btn" ng-click="$ctrl.openEditPage()" ng-if="$ctrl.isLoaded"><i class="icon icon--edit"></i></div></div><div class="profile-header-row profile-header--bottom-row"><h3 class="profile-header--bottom-row__heading">TASTED & REVIEWED</h3><div class="profile-header--statistics"><ul><li><span>{{$ctrl.details.DishCommentCount ? $ctrl.details.DishCommentCount : \'0\'}}</span> {{$ctrl.details.DishCommentCount != 1 ? \'DISHES\' : \'DISH\'}}</li><li><span>{{$ctrl.details.IngredientCommentCount ? $ctrl.details.IngredientCommentCount : \'0\'}}</span> {{$ctrl.details.IngredientCommentCount != 1 ? \'INGREDIENTS\' : \'INGREDIENT\'}}</li><li><span>{{$ctrl.details.RecipeVariationCommentCount ? $ctrl.details.RecipeVariationCommentCount : \'0\'}}</span> {{$ctrl.details.RecipeVariationCommentCount != 1 ? \'RECIPES\' : \'RECIPE\'}}</li><li><span>{{$ctrl.details.DishRestaurantCommentCount ? $ctrl.details.DishRestaurantCommentCount : \'0\'}}</span><p ng-show="$ctrl.details.DishRestaurantCommentCount != 1">DISHES IN<br>RESTAURANTS</p><p ng-hide="$ctrl.details.DishRestaurantCommentCount != 1">DISH IN<br>RESTAURANT</p></li></ul></div></div></div></section><div ng-if="$ctrl.isLoaded" class="profile__tabs"><div class="tab__nav tab__nav--redesign"><ul><li ng-class="{\'selected\' : $ctrl.activePage== \'wanna-try\'}" ng-click="$ctrl.changePage(\'wanna-try\')">Wanna try / visit</li><li ng-class="{\'selected\' : $ctrl.activePage== \'lists\'}" ng-click="$ctrl.changePage(\'lists\')">Lists</li><li ng-class="{\'selected\' : $ctrl.activePage== \'reviews\'}" ng-click="$ctrl.changePage(\'reviews\')">Reviews</li></ul></div><div><ta-profile-wanna-try ng-if="$ctrl.activePage === \'wanna-try\'" user-id="$ctrl.details.UserId" is-private="true" is-mobile="true" template="mobile"></ta-profile-wanna-try><ta-profile-list-redesign ng-if="$ctrl.activePage === \'lists\'" user-id="$ctrl.details.UserId" is-private="true" is-mobile="true" template="mobile"></ta-profile-list-redesign><ta-profile-mobile-reviews-private ng-if="$ctrl.activePage === \'reviews\'" details="$ctrl.details"></ta-profile-mobile-reviews-private></div></div><div class="loading__holder" ng-if="!$ctrl.isLoaded"><i class="fa fa-spinner fa-spin"></i></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile><style>\r\n    .loading__holder {\r\n        padding-top: 60px;\r\n        height: 800px;\r\n        background-color: white;\r\n        text-align: center;\r\n        font-size: 20px;\r\n        color: black;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-main-public.html','<section class="profile-page-redesign"><div class="profile-header-wrapper"><div class="profile-header-row profile-header--top-row"><div class="profile-header--image-name-wrapper"><div class="profile-header--img"><img class="profile-header--avatar profile-header--avatar__img" ng-if="$ctrl.details.ProfilePicture" ng-src="{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.ProfilePicture}}?h=112&w=112" alt="{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}"><div class="profile-header--avatar profile-header--avatar__no-img" ng-if="!$ctrl.details.ProfilePicture">{{$ctrl.details.FirstName.charAt(0)}}</div></div><div ng-if="$ctrl.details.Web" class="profile-header--txt"><div class="profile-header--name-surname"><span>{{$ctrl.details.FirstName}} {{$ctrl.details.LastName}}</span></div><div class="card__link card__link--noborder" ng-if="$ctrl.details.Web"><a ng-href="{{$ctrl.details.Web | acceptLink}}" target="_blank">{{$ctrl.details.Web}}</a></div></div><div ng-if="!$ctrl.details.Web" class="profile-header--name-surname"><span>{{$ctrl.details.FirstName}}</span> <span>{{$ctrl.details.LastName}}</span></div></div></div><div class="profile-header-row profile-header--bottom-row"><h3 class="profile-header--bottom-row__heading">TASTED & REVIEWED</h3><div class="profile-header--statistics"><ul><li><span>{{$ctrl.details.DishCommentCount ? $ctrl.details.DishCommentCount : \'0\'}}</span> {{$ctrl.details.DishCommentCount != 1 ? \'DISHES\' : \'DISH\'}}</li><li><span>{{$ctrl.details.IngredientCommentCount ? $ctrl.details.IngredientCommentCount : \'0\'}}</span> {{$ctrl.details.IngredientCommentCount != 1 ? \'INGREDIENTS\' : \'INGREDIENT\'}}</li><li><span>{{$ctrl.details.RecipeVariationCommentCount ? $ctrl.details.RecipeVariationCommentCount : \'0\'}}</span> {{$ctrl.details.RecipeVariationCommentCount != 1 ? \'RECIPES\' : \'RECIPE\'}}</li><li><span>{{$ctrl.details.DishRestaurantCommentCount ? $ctrl.details.DishRestaurantCommentCount : \'0\'}}</span><p ng-show="$ctrl.details.DishRestaurantCommentCount != 1">DISHES IN<br>RESTAURANTS</p><p ng-hide="$ctrl.details.DishRestaurantCommentCount != 1">DISH IN<br>RESTAURANT</p></li></ul></div></div></div></section><div ng-if="$ctrl.isLoaded" class="profile__tabs"><div class="tab__nav"><ul><li ng-class="{\'selected\' : $ctrl.activePage== \'wanna-try\'}" ng-click="$ctrl.changePage(\'wanna-try\')">Wanna try / visit</li><li ng-class="{\'selected\' : $ctrl.activePage== \'lists\'}" ng-click="$ctrl.changePage(\'lists\')">Lists</li><li ng-class="{\'selected\' : $ctrl.activePage== \'reviews\'}" ng-click="$ctrl.changePage(\'reviews\')">Reviews</li></ul></div><div><ta-profile-wanna-try ng-if="$ctrl.activePage === \'wanna-try\'" user-id="$ctrl.details.UserId" template="mobile" is-mobile="true"></ta-profile-wanna-try><ta-profile-list-redesign ng-if="$ctrl.activePage === \'lists\'" user-id="$ctrl.details.UserId" template="mobile" is-mobile="true"></ta-profile-list-redesign><ta-profile-mobile-reviews-public ng-if="$ctrl.activePage === \'reviews\'" details="$ctrl.details"></ta-profile-mobile-reviews-public></div></div><div class="loading__holder" ng-if="!$ctrl.isLoaded"><i class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.isInAnonymousRole" class="profile-list__create-your-lists profile-list__create-your-lists--mobile"><p class="profile-list__create-your-lists--txt">What are your favorite dishes, drinks, and cuisines from around the world? Make your own lists.</p><button type="button" class="profile-list__create-your-lists--btn profile-list__create-your-lists--btn-mobile" ng-click="$ctrl.createYourList()">CREATE YOUR LISTS</button></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile><style>\r\n    .loading__holder {\r\n        padding-top: 60px;\r\n        height: 800px;\r\n        background-color: white;\r\n        text-align: center;\r\n        font-size: 20px;\r\n        color: black;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-reviews-private.html','<div class="profile-reviews"><div class="profile-reviews__statistics"><div ng-if="$ctrl.currentReviewPage === \'dishes\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.IngredientCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishRestaurantCommentCount}} reviews</h1></div><i class="plate-lines plate-lines--center"></i></div><nav class="tab__nav tab__nav--simple"><ul><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishes\'}" ng-disabled="!$ctrl.details.DishCommentCount || $ctrl.details.DishCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishes\')">Dishes</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'ingredients\'}" ng-disabled="!$ctrl.details.IngredientCommentCount || $ctrl.details.IngredientCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'ingredients\')">Ingredients</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishrestaurants\'}" ng-disabled="!$ctrl.details.DishRestaurantCommentCount || $ctrl.details.DishRestaurantCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishrestaurants\')">Dish in restaurants</li></ul></nav><div><div ng-if="$ctrl.currentReviewPage === \'dishes\'" class="profile-reviews__list"><div ng-repeat="dComment in $ctrl.details.Dishes.Data" class="item"><div class="item__header"><div class="left"><a ng-if="dComment.Image" href="{{dComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{dComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!dComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{dComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{dComment.Title}}</h2></a><div class="location">{{dComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="dComment.Score"></ta-star-score-mobile></div><div class="date">{{dComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{dComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="dComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishComments && $ctrl.showLoadMoreDishBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'" class="profile-reviews__list"><div ng-repeat="iComment in $ctrl.details.Ingredients.Data" class="item"><div class="item__header"><div class="left"><a ng-if="iComment.Image" href="{{iComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{iComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!iComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{iComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{iComment.Title}}</h2></a><div class="location">{{iComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="iComment.Score"></ta-star-score-mobile></div><div class="date">{{iComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{iComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="iComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreIngredientComments && $ctrl.showLoadMoreIngredientsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreIngredientComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'" class="profile-reviews__list"><div ng-repeat="drComment in $ctrl.details.DishRestaurants.Data" class="item"><div class="item__header"><div class="left"><a ng-if="drComment.Image" href="{{drComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{drComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!drComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{drComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{drComment.Title}}</h2></a><div class="location">{{drComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="drComment.Score"></ta-star-score-mobile></div><div class="date">{{drComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{drComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="drComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishRestaurantComments && $ctrl.showLoadMoreDishRestaurantsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishRestaurantComments()">View more</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-reviews-public.html','<div class="profile-reviews"><div class="profile-reviews__statistics"><div ng-if="$ctrl.currentReviewPage === \'dishes\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.IngredientCommentCount}} reviews</h1></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'"><h1 class="h1 h1--medium h1--center">{{$ctrl.details.DishRestaurantCommentCount}} reviews</h1></div><i class="plate-lines plate-lines--center"></i></div><nav class="tab__nav tab__nav--simple"><ul><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishes\'}" ng-disabled="!$ctrl.details.DishCommentCount || $ctrl.details.DishCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishes\')">Dishes</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'ingredients\'}" ng-disabled="!$ctrl.details.IngredientCommentCount || $ctrl.details.IngredientCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'ingredients\')">Ingredients</li><li ng-class="{\'selected\' : $ctrl.currentReviewPage === \'dishrestaurants\'}" ng-disabled="!$ctrl.details.DishRestaurantCommentCount || $ctrl.details.DishRestaurantCommentCount === 0" ng-click="$ctrl.changeReviewPage(\'dishrestaurants\')">Dish in restaurants</li></ul></nav><div><div ng-if="$ctrl.currentReviewPage === \'dishes\'" class="profile-reviews__list"><div ng-repeat="dComment in $ctrl.details.Dishes.Data" class="item"><div class="item__header"><div class="left"><a ng-if="dComment.Image" href="{{dComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{dComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!dComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{dComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{dComment.Title}}</h2></a><div class="location">{{dComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="dComment.Score"></ta-star-score-mobile></div><div class="date">{{dComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{dComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="dComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishComments && $ctrl.showLoadMoreDishBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'ingredients\'" class="profile-reviews__list"><div ng-repeat="iComment in $ctrl.details.Ingredients.Data" class="item"><div class="item__header"><div class="left"><a ng-if="iComment.Image" href="{{iComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{iComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!iComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{iComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{iComment.Title}}</h2></a><div class="location">{{iComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="iComment.Score"></ta-star-score-mobile></div><div class="date">{{iComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{iComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="iComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreIngredientComments && $ctrl.showLoadMoreIngredientsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreIngredientComments()">View more</button></div></div><div ng-if="$ctrl.currentReviewPage === \'dishrestaurants\'" class="profile-reviews__list"><div ng-repeat="drComment in $ctrl.details.DishRestaurants.Data" class="item"><div class="item__header"><div class="left"><a ng-if="drComment.Image" href="{{drComment.UrlLink}}" target="_blank"><div style="background-image: url({{::$ctrl.constants.cdnHost}}{{drComment.Image}}?w=96&h=60);" class="item__thumb thumb"></div></a><div ng-if="!drComment.Image" style="background-image: url(/Content/Image/no_image.svg?w=96&h=60);" class="thumb thumb--none"></div></div><div class="right"><div class="right__row"><a href="{{drComment.UrlLink}}" target="_blank" class="item__link"><h2 class="h2 h2--lowercase h2--bold h2--small">{{drComment.Title}}</h2></a><div class="location">{{drComment.SubTitle}}</div></div><div class="right__row"><div class="stars"><ta-star-score-mobile rating="drComment.Score"></ta-star-score-mobile></div><div class="date">{{drComment.CreatedAt | date : \'shortDate\'}}</div></div></div></div><div class="item__main"><div class="content">{{drComment.Content}}</div></div><div class="item__footer"><div class="handy handy--review"><ta-comment-like-mobile review="drComment"></ta-comment-like-mobile></div></div></div><div class="profile-reviews__view-more"><button ng-if="!$ctrl.isLoadingMoreDishRestaurantComments && $ctrl.showLoadMoreDishRestaurantsBtn" class="btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.onLoadMoreDishRestaurantComments()">View more</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-panel/ta-profile-panel-desktop.html','<div class="user-panel-logout" no-animate ng-show="!$ctrl.isSignedIn && !$ctrl.loadingCountryData"><div class="user-panel user-panel--heading" ng-click="$ctrl.openLogin()"><h4>Hello!</h4><p><span>Log in</span> or <span>Sign Up</span> to track your experience</p></div></div><div class="user-panel user-panel--home user-panel-logged" no-animate ng-show="$ctrl.isSignedIn"><div class="user-panel--heading" ng-if="$ctrl.user.firstname && totalTriedFoods"><a href="profile/{{$ctrl.user.urlLink}}" target="_blank"><h4>Hello {{$ctrl.user.firstname}}</h4></a><p ng-if="totalTriedCountries > 0">You tried {{totalTriedFoods}}{{totalTriedFoods === 1 ? \' food\' : \' foods\'}} from {{totalTriedCountries}}{{totalTriedCountries === 1 ? \' country\' : \' countries\'}}.</p></div><div class="user-panel--tried"><div class="user-panel--accordion"><div class="user-panel--tried__list"><div class="best-most-ratings"><a ng-class="{\'active-rating\' : $ctrl.typeCountry == 1}" ng-click="$ctrl.getUserTriedData(1)">Best rated</a> <span></span> <a ng-class="{\'active-rating\' : $ctrl.typeCountry == 2}" ng-click="$ctrl.getUserTriedData(2)">Most ratings</a></div></div><div class="user-panel--tried__list"><div class="user-panel--tried__list-item" ng-show="$ctrl.triedItems.length > 0" ng-repeat="item in $ctrl.triedItems track by $index"><a class="country-flag-name-row" href="{{item.CountryUrlLink}}" target="_blank"><img ng-show="item.CountryEmblemImage" class="flag" ng-src="{{::$ctrl.constants.cdnHost}}/{{item.CountryEmblemImage}}?w=32" alt="{{item.CountryName}} flag" height="18" width="28"><h4 ng-show="item.CountryName">{{item.CountryName}}</h4></a><ta-progress-bar ng-if="$root.userCacheServiceInitialized && $root.userTokenInitalized" template="shared" user-dash="true" total="item.TotalFoods" tried="item.TriedFoods" average-score="item.DividedAverageScore"></ta-progress-bar></div><div ng-if="$ctrl.loadMoreCountryData" class="similar-list__view-more user-panel--load-more"><button ng-click="$ctrl.loadMoreGetUserTriedData()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">SHOW MORE</button></div><div class="loader loader--sidebar" ng-show="$ctrl.loadingCountryData && $ctrl.showCountryItems"><img src="/Content/Image/loader.gif"></div></div><div ng-show="$ctrl.triedItems.length <= 0" class="user-panel--tried__list"><div class="user-panel--tried__list-item"><p>No results</p></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/profile/profile-panel/ta-profile-panel-mobile.html','<div modal-directive close-modal="$ctrl.closeUserDashModal()" id="user-dash-modal"><div class="modal modal--user-dash"><div class="modal__canvas"><div class="modal__container modal__container--user-dash" click-outside="$ctrl.closeUserDashModal()"><div class="close-modal close-modal--mobile-wrapper" ng-click="$ctrl.closeUserDashModal()"><i class="icon icon--close"></i></div><div class="modal__body modal__body--user-dash"><div class="user-panel--heading" ng-if="$ctrl.user.firstname && totalTriedFoods"><a href="profile/{{$ctrl.user.urlLink}}" target="_blank"><h4>Hello {{$ctrl.user.firstname}}</h4></a><p ng-if="totalTriedCountries > 0">You tried {{totalTriedFoods}}{{totalTriedFoods === 1 ? \' food\' : \' foods\'}} from {{totalTriedCountries}}{{totalTriedCountries === 1 ? \' country\' : \' countries\'}}.</p></div><div class="user-panel--tried"><div class="user-panel--accordion"><div class="user-panel--tried__list"><div class="best-most-ratings"><a ng-class="{\'active-rating\' : $ctrl.typeCountry == 1}" ng-click="$ctrl.getUserTriedData(1)">Best rated</a> <span></span> <a ng-class="{\'active-rating\' : $ctrl.typeCountry == 2}" ng-click="$ctrl.getUserTriedData(2)">Most ratings</a></div></div><div class="user-panel--tried__list"><div class="user-panel--tried__list-item" ng-show="$ctrl.triedItems.length > 0" ng-repeat="item in $ctrl.triedItems track by $index"><a class="country-flag-name-row" href="{{item.CountryName}}" target="_blank"><img ng-show="item.CountryEmblemImage" class="flag" ng-src="{{::$ctrl.constants.cdnHost}}/{{item.CountryEmblemImage}}?w=32" alt="{{item.CountryName}} flag" height="18" width="28"><h4 ng-show="item.CountryName">{{item.CountryName}}</h4></a><ta-progress-bar ng-if="$root.userCacheServiceInitialized && $root.userTokenInitalized" template="shared" user-dash="true" total="item.TotalFoods" tried="item.TriedFoods" average-score="item.DividedAverageScore"></ta-progress-bar></div><div ng-if="$ctrl.loadMoreCountryData" class="similar-list__view-more user-panel--load-more"><button ng-click="$ctrl.loadMoreGetUserTriedData()" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--bold hide-span-element">SHOW MORE</button></div><div class="loader loader--sidebar" ng-show="$ctrl.loadingCountryData && $ctrl.showCountryItems"><img src="/Content/Image/loader.gif"></div></div><div ng-show="$ctrl.triedItems.length <= 0" class="user-panel--tried__list user-panel--tried__no-result"><div class="user-panel--tried__list-item"><p>No results</p></div></div></div></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-desktop-overview/ta-restaurant-main-desktop.html','<section class="restaurant page have-card__hero have-page__background"><div ng-if="$ctrl.isLoaded"><div class="page__background-container"><div class="page__background" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::$ctrl.details.RegionCoverImage}}?mw=2000\')"><div class="page__background-copyright"><a href="{{$ctrl.details.CoverImageAuthorUrl}}" target="_blank">{{$ctrl.details.CoverImageAuthor}}</a></div></div><div class="card card--alt"><div class="card__header"><div class="group">{{$ctrl.details.ServingType}}</div><h1 class="h1 h1--center">{{$ctrl.details.Name}}</h1><h4 class="h4 h4--center"><a class="no-hover-link" ng-if="$ctrl.details.DistrictName" ng-href="{{$ctrl.details.DistrictUrlLink}}" style="color: #292929;">{{$ctrl.details.DistrictName}},</a> <a class="no-hover-link" ng-href="{{$ctrl.details.RegionUrlLink}}">{{$ctrl.details.RegionName}}</a><a ng-if="$ctrl.details.CountryName" ng-href="{{$ctrl.details.CountryUrlLink}}" class="no-hover-link">, {{$ctrl.details.CountryName}}</a></h4><i class="plate-lines plate-lines--center plate-lines--biggest"></i><div class="recommended" ng-bind-html="$ctrl.parseCriticsInfo($ctrl.details) | html"></div><div class="awards-logo" ng-if="$ctrl.details.Badge.NumberOfTableclothAwards === 3"><img src="./Content/Image/awards_restaurants.png"></div></div><div class="card__hero"><ta2-restaurant-tablecloths item="$ctrl.details.Badge" type="single-restaurant" layout="desktop"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="single-restaurant" item="$ctrl.details.Badge" layout="desktop" items-per-column="8"></ta2-restaurant-badges><img ng-if="!$ctrl.details.PreviewImage" class="img-blur" ta-lazy-load src="./Content/layout/images/thumbnail-no-photo-4.jpg" alt="{{$ctrl.details.Name}}"><ta-image-gallery-desktop ng-if="$ctrl.details.PreviewImage" preview="$ctrl.details.PreviewImage" photos="$ctrl.details.Images" hide-arrows-and-credits="true"></ta-image-gallery-desktop><div ng-if="$ctrl.details.details.isRatingOpen"><ta-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.closeRestaurantRating($ctrl.details)"></ta-restaurant-comment-desktop></div></div><div class="card__hero card__hero--none" ng-if="!$ctrl.details.PreviewImage || $ctrl.details.Images.length === 0"></div><div class="card__main"><div class="card__text"><span>{{$ctrl.details.Address}}</span> <span>{{$ctrl.details.PhoneNumber}}</span></div><div class="card__links"><a target="_blank" ng-href="{{$ctrl.details.Web}}"><i class="icon icon--home"></i> <span>Visit website</span></a> <a ng-click="$ctrl.redirectToGoogleMaps($ctrl.details.Longitude, $ctrl.details.Latitude)"><i class="icon icon--direction"></i> <span>Directions</span></a><a class="rating-actions__item rating-actions__item--restaurant" ng-click="$ctrl.wantsToTryClick()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark--darker" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span ng-class="{ \'rating-actions__item-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></a></div><ta-restaurant-error-desktop id="$ctrl.details.Id" entity-type="$ctrl.details.EntityType"></ta-restaurant-error-desktop></div></div></div></div></section><div class="restaurant section-divider" ng-if="$ctrl.isLoaded"><section ng-if="$ctrl.iconicDishes.Count > 0"><div class="restaurant__famouse-for"><h1 class="h1 h1--medium h1--center">Famous for</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="iconic"><div class="iconic__list"><div class="item" ng-repeat="iconic in $ctrl.iconicDishes.Data track by $index"><div class="item__body"><a ng-href="{{$ctrl.details.UrlLink}}/{{iconic.UrlLink}}"><div ng-if="iconic.Image"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::iconic.Image}}?h=400&w=600\')"></div></div></a><div ng-if="!iconic.Image"><a ng-href="{{$ctrl.details.UrlLink}}/{{iconic.UrlLink}}"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::iconic.CategoryImage}}\')"></div></a></div><div class="thumb__footer">BEST IN THE WORLD <i class="plate-lines plate-lines--center plate-lines--gold"></i></div><div class="item__main"><div class="type">{{iconic.Category}}, {{iconic.RegionName}}</div><a href="{{iconic.UrlLink}}"><h2 class="h2 h2--lowercase h2--bold">{{iconic.Name}}</h2></a><div class="recommendations" ng-bind-html="$ctrl.parseCriticsInfo(iconic) | html"></div><div ng-if="iconic.Critic"><blockquote cite="{{iconic.Critic.Source}}" class="recommendation">{{iconic.Critic.Content}}</blockquote><div class="critic">{{iconic.Critic.Name}} <span ng-if="iconic.Critic.Description">, {{iconic.Critic.Description}}</span></div></div></div></div></div></div></div><div class="restaurant__view-all"><ta-view-more-button items="$ctrl.iconicDishes" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.iconicDishesLoading" on-view-more="$ctrl.loadMoreIconicDishes()"></ta-view-more-button></div></div></section><section ng-if="$ctrl.isLoaded" class="restaurant__also-serving-container"><div ng-if="$ctrl.servedDishes.Count > 0" class="also-serving"><h1 class="h1 h1--small h1--center">{{$ctrl.iconicDishes.Count === 0 ? \'Serving\' : \'Also serving\'}}</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><div class="also-serving__list"><div ng-repeat="served in $ctrl.servedDishes.Data" class="item"><div class="item__body"><a ng-href="{{$ctrl.details.UrlLink}}/{{served.UrlLink}}"><div ng-if="served.Image"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::served.Image}}?h=225&w=385\')"></div></div></a><div ng-if="!served.Image"><a ng-href="{{$ctrl.details.UrlLink}}/{{served.UrlLink}}"><div style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::served.Image}}?h=187&w=281\')"></div></a></div><div class="item__main"><div class="type">{{served.Category}}</div><a ng-href="{{$ctrl.details.UrlLink}}/{{served.UrlLink}}"><h2 class="h2 h2--lowercase h2--bold" ng-if="!served.Certificate">{{served.Name}}</h2></a><div class="certificate__container" ng-if="served.Certificate"><h2 class="h2 h2--lowercase h2--bold"><span class="certificate certificate--single"><i class="certificate__item certificate__item--h2" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::served.Certificate.Image}}?mw=50\');"></i></span> <span>{{served.Name}}</span></h2></div><div class="recommendations" ng-bind-html="$ctrl.parseCriticsInfo(served) | html"></div></div></div></div></div><div class="also-serving__view-all"><ta-view-more-button items="$ctrl.servedDishes" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.servedDishesLoading" on-view-more="$ctrl.loadMoreServedDishes()"></ta-view-more-button></div></div></section><section ng-if="$ctrl.isLoaded && $ctrl.reviews.Count > 0" class="restaurant__recommendations-container"><div class="restaurant__recommendations"><div class="reviews"><h1 class="h1 h1--medium h1--center">Recommendations</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><ta-review-desktop-list reviews="$ctrl.reviews"></ta-review-desktop-list><div class="restaurant__view-all"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></div></div></section><section ng-if="$ctrl.comments.Count > 0" class="restaurant__comments-container"><div class="restaurant__comments"><div class="opinions"><h1 class="h1 h1--medium h1--center">User comments</h1><i class="plate-lines plate-lines--center plate-lines--big"></i><ta-opinion-list-desktop ng-if="$ctrl.comments.Count > 0" opinions="$ctrl.comments"></ta-opinion-list-desktop><div class="restaurant__view-all"><ta-view-more-button items="$ctrl.comments" button-class="\'btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.commentsLoading" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></div></section><section ng-if="$ctrl.isLoaded"><div class="miss-text miss-text--nobgcolor"><h2 class="h2 h2--lowercase h2--large h2--center">Have you eaten at {{$ctrl.details.Name}} recently?</h2><button class="btn btn--red-background btn--center" ng-click="$ctrl.tellUsWhere()">HOW DID YOU LIKE IT?</button></div><div ng-if="$ctrl.isTellUs" class="comment comment--vote"><ta-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.tellUsWhere()"></ta-restaurant-comment-desktop></div><div class="miss-text">Are you the owner of {{$ctrl.details.Name}}?<br>Contact us and tell us more about your restaurant<br><a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div></section><section class="explore-more__container" ng-if="$ctrl.exploreMoreCache.Count > 0 && $ctrl.isLoaded && $ctrl.isExploreMoreLoaded"><h1 class="h1 h1--medium h1--center">Explore more</h1><i class="plate-lines plate-lines--big plate-lines--center"></i><ta-explore-more-list-desktop items="$ctrl.explore" explore-loading="$ctrl.exploreLoading" explore-last-page="$ctrl.exploreLastPage" on-view-more="$ctrl.exploreMore()"></ta-explore-more-list-desktop></section></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-mobile-overview/ta-restaurant-main-mobile.html','<section ng-if="$ctrl.isLoaded"><div class="restaurant-detail"><div class="restaurant-detail__images"><ta2-restaurant-tablecloths item="$ctrl.details.Badge" type="single-restaurant" layout="mobile"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="single-restaurant" item="$ctrl.details.Badge" layout="mobile" items-per-column="5"></ta2-restaurant-badges><img ng-if="!$ctrl.details.PreviewImage" class="img-blur" ta-lazy-load src="./Content/layout/images/thumbnail-no-photo-4.jpg" alt="{{$ctrl.details.Name}}"><ta-image-gallery-mobile ng-if="$ctrl.details.PreviewImage" preview="$ctrl.details.PreviewImage" photos="$ctrl.details.Images" mobile-photos="$ctrl.details.MobileImages" hide-image-credits="true" are-restaurant-gallery="true"></ta-image-gallery-mobile><div ng-if="$ctrl.details.details.isRatingOpen"><ta-restaurant-comment-modal details="$ctrl.details" on-close-modal="$ctrl.closeRestaurantRating($ctrl.details)"></ta-restaurant-comment-modal></div></div><div class="restaurant-detail__header"><div class="restaurant-detail__awards-logo" ng-if="$ctrl.details.Badge.NumberOfTableclothAwards === 3"><img src="./Content/Image/awards_restaurants.png"></div><span class="restaurant-detail__type" ng-if="$ctrl.details.ServingType">{{$ctrl.details.ServingType}}</span><h1 class="h1 h1--center">{{$ctrl.details.Name}}</h1><h4 class="h4 h4--center h4--regular">{{::$ctrl.getRegionLabel()}}</h4><i class="plate-lines plate-lines--center"></i></div><div class="restaurant-detail__recommended" ng-if="$ctrl.details.Critic" ng-bind-html="$ctrl.parseCriticsInfo($ctrl.details) | html"></div><div class="restaurant-detail__location"><div class="left"><a ng-click="$ctrl.redirectToGoogleMaps($ctrl.details.Longitude, $ctrl.details.Latitude)"><i class="icon icon--direction"></i><div class="adress">{{$ctrl.details.Address}}</div><div class="distance" ng-if="$ctrl.details.Distance"><span>{{$ctrl.getDistance($ctrl.details)}}</span> away</div></a></div><div class="right"><a ng-href="tel: {{$ctrl.details.PhoneNumber}}"><i class="icon icon--phone"></i></a> <a target="_blank" ng-href="{{$ctrl.details.Web}}"><i class="icon icon--home"></i></a> <a target="_blank" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon__bookmark--darker" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></a></div></div></div><div class="restaurant-detail__footer"><ta-restaurant-error-mobile id="$ctrl.details.Id" entity-type="$ctrl.details.EntityType"></ta-restaurant-error-mobile></div></section><section ng-if="$ctrl.iconicDishes.Count > 0 && $ctrl.isLoaded" class="famouse-for"><div class="iconic"><h2 class="h2 h2--center">Famous for</h2><div class="iconic__list"><div class="item" ng-repeat="iconic in $ctrl.iconicDishes.Data track by $index"><div ng-if="iconic.Image" ng-click="$ctrl.goToIconicDish(iconic.UrlLink)"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::iconic.Image}}?h=400&w=600\')"></div></div><div ng-if="!iconic.Image" ng-click="$ctrl.goToIconicDish(iconic.UrlLink)"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::iconic.CategoryImage}}\')"></div></div><div class="thumb__footer">BEST IN THE WORLD <i class="plate-lines plate-lines--center plate-lines--gold"></i></div><div class="type">{{iconic.Category}}, {{iconic.RegionName}}</div><h3 ng-click="$ctrl.goToIconicDish(iconic.UrlLink)" class="h3">{{iconic.Name}}</h3><div class="recommendations" ng-bind-html="$ctrl.parseCriticsInfo(iconic) | html"></div><div ng-if="iconic.Critic"><blockquote cite="{{iconic.Critic.Source}}" class="recommendation">{{iconic.Critic.Content}}</blockquote><div class="critic"><span>{{iconic.Critic.Name}}</span> <span>{{iconic.Critic.Description}}</span></div></div><a class="btn btn--red-border btn--noborder" ng-href="{{$ctrl.details.UrlLink}}/{{iconic.UrlLink}}">VIEW DISH</a></div></div><div class="restaurant-detail__view-more"><ta-view-more-button items="$ctrl.iconicDishes" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.iconicDishesLoading" on-view-more="$ctrl.loadMoreIconicDishes()"></ta-view-more-button></div></div></section><section ng-if="$ctrl.servedDishes.Count > 0 && $ctrl.isLoaded" class="also-serving"><div><h2 class="h2 h2--center">{{$ctrl.iconicDishes.Count === 0 ? \'Serving\' : \'Also serving\'}}</h2><div class="also-serving__list"><div ng-repeat="served in $ctrl.servedDishes.Data" class="item"><a ng-href="{{$ctrl.details.UrlLink}}/{{served.UrlLink}}"><div ng-if="served.Image"><div class="thumb" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::served.Image}}?h=187&w=281\')"></div></div><div ng-if="!served.Image"><div style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::served.Image}}?h=187&w=281\')"></div></div><div class="type">{{served.Category}}</div><h3 class="h3" ng-if="!served.Certificate">{{served.Name}}</h3><div class="certificate__container certificate__container--single" ng-if="served.Certificate"><h3 class="h3 h3--lowercase h3--bold"><span class="certificate certificate--single"><i class="certificate__item certificate__item--h3" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::served.Certificate.Image}}?mw=50\');"></i></span> <span>{{served.Name}}</span></h3></div></a></div></div><div class="restaurant-detail__view-more"><ta-view-more-button items="$ctrl.servedDishes" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.servedDishesLoading" on-view-more="$ctrl.loadMoreServedDishes()"></ta-view-more-button></div></div></section><div class="reviews" ng-if="$ctrl.reviews.Count > 0 && $ctrl.isLoaded"><h2 class="h2 h2--center">Recommendations</h2><ta-review-list reviews="$ctrl.reviews"></ta-review-list><div class="restaurant-detail__view-more"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.reviewsLoading" on-view-more="$ctrl.loadMoreReviews()"></ta-view-more-button></div></div><div ng-if="$ctrl.comments.Count > 0 && $ctrl.isLoaded"><h2 class="h2 h2--center">User comments</h2><div class="opinions"><ta-opinion-list-mobile ng-if="$ctrl.comments.Count > 0" opinions="$ctrl.comments"></ta-opinion-list-mobile><div class="restaurant-detail__view-more"><ta-view-more-button items="$ctrl.comments" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.commentsLoading" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></div><section ng-if="$ctrl.isLoaded" class="restaurant-detail__tell-us"><div ng-if="!$ctrl.isTellUs"><div class="miss-text">Have you eaten at {{$ctrl.details.Name}} recently? How did you like it? <button class="btn btn--center btn--red-border" ng-click="$ctrl.tellUsWhere()">TELL US</button></div></div><div ng-if="$ctrl.isTellUs && !$ctrl.isAnonymous" class="comment comment--vote"><ta-restaurant-comment-mobile details="$ctrl.details"></ta-restaurant-comment-mobile></div><div ng-if="$ctrl.isTellUs && $ctrl.isAnonymous" class="comment comment--login"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder">OTHER LOG IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div><div class="miss-text miss-text--top-border restaurant-detail__tell-us--last"><div>Are you the owner of {{$ctrl.details.Name}}?</div><div>Contact us and tell us more about your restaurant</div><br><div><a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div></div></section><div class="promotion" ng-if="$ctrl.isLoaded"><div ta-google-ad id="TA_MR_RESTAURANT" name="/21703950087/M_TA_test" platform="mobile"></div></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-desktop.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Restaurant"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Have you eaten at {{$ctrl.details.Name}} recently?</h2><div class="comment__autocomplete"><input type="text" class="input" autocomplete="off" name="dish-name" placeholder="WHAT WAS THE BEST DISH?" ng-model="$ctrl.query" ng-model-options="{ debounce: 200 }" ng-change="$ctrl.onInputDish($ctrl.query)"> <i ng-if="$ctrl.query.length > 0" ng-click="$ctrl.onDishDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.dishes.length > 0"><div ng-repeat="dish in $ctrl.dishes" class="item" ng-click="$ctrl.onDishSelect(dish)"><div class="left" ng-if="dish.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dish.Image}}?h=20&w=20"></div><div class="right">{{dish.Label}}</div></div></div></div><div class="comment__stars comment__stars--big"><ta-star-vote-desktop on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-desktop></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidDish || !$ctrl.isValidPhotoNumber) && !$ctrl.canDelete()" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.isValidDish && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background btn--right">CANCEL YOUR RATING</div></div></div></div><div ng-switch-when="Dish"><ta-restaurant-dish-comment-desktop dish="$ctrl.dish" on-close-modal="$ctrl.closeModal()"></ta-restaurant-dish-comment-desktop></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-mobile.html','<div ng-switch="$ctrl.current"><div ng-switch-when="Restaurant"><div><div class="miss-text">Have you eaten at {{$ctrl.details.Name}} recently?</div><div class="comment__autocomplete"><input class="input" type="text" autocomplete="off" name="dish-name" placeholder="WHAT WAS THE BEST DISH?" ng-model="$ctrl.query" ng-model-options="{ debounce: 200 }" ng-change="$ctrl.onInputDish($ctrl.query)"> <i ng-if="$ctrl.query.length > 0" ng-click="$ctrl.onDishDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.dishes.length > 0"><div ng-repeat="dish in $ctrl.dishes" class="item" ng-click="$ctrl.onDishSelect(dish)"><div class="left" ng-if="dish.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dish.Image}}?h=20&w=20"></div><div class="right">{{dish.Label}}</div></div></div></div><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-mobile><div class="comment__fieldgroup"><textarea class="textarea" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--red-background">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidDish || !$ctrl.isValidPhotoNumber) && !$ctrl.canDelete()" class="btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.isValidDish && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background">CANCEL YOUR RATING</div></div></div><div ng-switch-when="Dish"><ta-restaurant-dish-comment-mobile dish="$ctrl.dish" on-skip="$ctrl.skipToThanks()" template="regular"></ta-restaurant-dish-comment-mobile></div><div ng-switch-when="Thanks"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-modal.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()" class="restaurant-comment-modal"><div class="modal" ng-switch-when="Restaurant"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="miss-text">Have you eaten at {{$ctrl.details.Name}} recently?</div><div class="comment__autocomplete"><input type="text" class="input" autocomplete="off" name="dish-name" placeholder="WHAT WAS THE BEST DISH?" ng-model="$ctrl.query" ng-model-options="{ debounce: 200 }" ng-change="$ctrl.onInputDish($ctrl.query)"> <i ng-if="$ctrl.query.length > 0" ng-click="$ctrl.onDishDelete()" class="icon icon--close-cross icon--close-cross--black"></i><div class="list" ng-if="$ctrl.dishes.length > 0"><div ng-repeat="dish in $ctrl.dishes" class="item" ng-click="$ctrl.onDishSelect(dish)"><div class="left" ng-if="dish.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::dish.Image}}?h=20&w=20"></div><div class="right">{{dish.Label}}</div></div></div></div><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-mobile><div class="comment__fieldgroup"><textarea class="textarea" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidDish || !$ctrl.isValidPhotoNumber) && !$ctrl.canDelete()" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidDish && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.isValidDish && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background btn--right">CANCEL YOUR RATING</div></div></div></div><div ng-switch-when="Dish"><ta-restaurant-dish-comment-mobile dish="$ctrl.dish" on-skip="$ctrl.closeModal()" on-close="$ctrl.closeModal()" template="modal"></ta-restaurant-dish-comment-mobile></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-desktop.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div ng-switch-when="Dish" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">How much do you generally like {{$ctrl.dish.name}}?</h2><div class="comment__stars comment__stars--big"><ta-star-vote-desktop on-rating-select="$ctrl.vote($event.selectedRating)"></ta-star-vote-desktop></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row"><div ng-click="$ctrl.skip()" class="btn btn--dark-gray-background">SKIP</div><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.submit()" class="btn btn--right btn--red-background">SUBMIT</div><div ng-if="$ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidPhotoNumber" class="btn btn--right btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></div></div></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div><div ng-switch-when="Voted"><div class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="desktop" food-details="$ctrl.dish" close-action="$ctrl.closeModal()"></ta-comment-summary></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-mobile-modal.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div ng-switch-when="Dish" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()" exclude="btn"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">How much do you generally like {{$ctrl.dish.name}}?</h2><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)"></ta-star-vote-mobile><div class="comment__fieldgroup"><textarea class="textarea" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row"><div ng-click="$ctrl.skip()" class="btn btn--dark-gray-background">SKIP</div><div ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.submit()" class="btn btn--right btn--red-background">SUBMIT</div><div ng-if="$ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidPhotoNumber" class="btn btn--right btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></div></div></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div><div ng-switch-when="Voted"><div class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="mobile" food-details="$ctrl.dish" close-action="$ctrl.closeModal()"></ta-comment-summary></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-mobile.html','<div ng-switch="$ctrl.current"><div ng-switch-when="Dish"><div><div class="miss-text">How much do you generally like {{$ctrl.dish.name}}?</div><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)"></ta-star-vote-mobile><div class="comment__fieldgroup"><textarea class="textarea" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div><div class="btn__set btn__set--2-in-row"><span class="btn btn--inline btn--dark-gray-background" ng-if="!$ctrl.submitting" ng-click="$ctrl.skip()">SKIP</span> <span ng-if="!$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.submit()" class="btn btn--inline btn--red-background">SUBMIT</span> <span ng-if="$ctrl.submitting || !$ctrl.isValid || !$ctrl.isValidPhotoNumber" class="btn btn--inline btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></span></div></div></div><div ng-switch-when="Thanks"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-error-desktop.html','<section class="see-any-errors"><button class="btn btn--smallest btn--gray-border btn--noborder btn--center" ng-click="$ctrl.onErrorFormShow()">See any errors?</button><div ng-if="$ctrl.isErrorFormShown" class="see-any-errors__modal"><div class="modal" modal-directive close-modal="$ctrl.onErrorFormShow()"><div class="modal__container" click-outside="$ctrl.onErrorFormShow()"><form name="$ctrl.errorForm" ng-submit="$ctrl.submit()" novalidate><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onErrorFormShow()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">See any errors?</h2><div class="see-any-errors__fieldgroup"><textarea class="input" ng-model="$ctrl.data.content" ng-change="$ctrl.resetError()" placeholder="COMMENT" required>\r\n                    {{$ctrl.data.content}}\r\n                </textarea> <input class="input" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" placeholder="EMAIL (optional)"></div><div class="see-any-errors__validate" ng-show="$ctrl.errorForm.email.$error.email">Email not valid!</div><div class="see-any-errors__validate" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-class="{\'btn btn--disabled-background btn--right\': $ctrl.errorForm.$invalid, \'btn btn--red-background btn--right\': !$ctrl.errorForm.$invalid }" ng-disabled="$ctrl.errorForm.$invalid" ng-click="$ctrl.submit()"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></div></form></div></div></div></section>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-error-mobile.html','<section class="see-any-errors"><div class="btn btn--smallest btn--dark-gray-border btn--noborder btn--center" ng-click="$ctrl.onErrorFormShow()">See any errors?</div><div ng-if="$ctrl.isErrorFormShown"><form name="$ctrl.errorForm" ng-submit="$ctrl.submit()" novalidate><div class="see-any-errors__fieldgroup"><textarea class="input" ng-model="$ctrl.data.content" ng-change="$ctrl.resetError()" placeholder="COMMENT" required>\r\n                    {{$ctrl.data.content}}\r\n                </textarea> <input class="input" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" placeholder="EMAIL (optional)"></div><div class="see-any-errors__validate" ng-show="$ctrl.errorForm.email.$error.email">Email not valid!</div><div class="see-any-errors__validate" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div><div ng-class="{\'btn btn--disabled-background\': $ctrl.errorForm.$invalid, \'btn btn--red-background\': !$ctrl.errorForm.$invalid }" ng-disabled="$ctrl.errorForm.$invalid" ng-click="$ctrl.submit()"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></form></div></section>');$templateCache.put('/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-rating-control.html','<div><div class="rating-control rating-control--chip rating-control--rated rating-control--shadow" ng-click="$ctrl.openRatingPopup($event, item)" ng-if="$ctrl.isRated(item)"><span class="rating-control__text" ng-if="$ctrl.getUserRating()">{{$ctrl.getUserRating() | number:1}}</span> <i class="icon icon__rate-checked"></i></div><div class="rating-control rating-control--background" ng-click="$ctrl.openRatingPopup($event, item)" ng-if="!$ctrl.isRated(item)"><i class="icon icon__rate-check"></i></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-dish-details/restaurant-dish-shared/ta-restaurant-and-dish-comment-desktop.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Vote"><div class="modal__container" click-outside="$ctrl.closeModal()" exclude="btn"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">How did you like {{$ctrl.details.DishName}} at {{$ctrl.details.Name}}?</h2><div class="comment__stars comment__stars--big"><ta-star-vote-desktop on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-desktop></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="!$ctrl.submitting && $ctrl.isValid && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid) && !$ctrl.canDelete()" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background btn--right">CANCEL YOUR RATING</div></div></div></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()" exclude="btn"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div>');$templateCache.put('/content/scripts/app/components/restaurant-dish-details/restaurant-dish-shared/ta-restaurant-and-dish-comment-mobile.html','<div ng-switch="$ctrl.current"><div ng-switch-when="Vote"><div><div class="miss-text">How did you like {{$ctrl.details.DishName}} at {{$ctrl.details.Name}}?</div><ta-star-vote-mobile on-rating-select="$ctrl.vote($event.selectedRating)" rating-exists="$ctrl.existingComment"></ta-star-vote-mobile><div class="comment__fieldgroup"><textarea class="textarea" ng-change="$ctrl.onChangeContent()" ng-model="$ctrl.data.content" placeholder="COMMENT">{{$ctrl.data.content}}\r\n                </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div><div ng-if="!$ctrl.submitting && $ctrl.isValid && !$ctrl.canDelete()" ng-click="$ctrl.submit()" class="btn btn--red-background">SUBMIT</div><div ng-if="($ctrl.submitting || !$ctrl.isValid) && !$ctrl.canDelete()" class="btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValid" class="fa fa-spinner fa-spin"></i></div><div ng-if="!$ctrl.submitting && $ctrl.canDelete()" ng-click="$ctrl.deleteComment()" class="btn btn--red-background">CANCEL YOUR RATING</div></div></div><div ng-switch-when="Thanks"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div>');$templateCache.put('/content/scripts/app/components/shared/add-to-list/ta-desktop-add-to-list.html','<div class="profile-list add-to-list"><div modal-directive close-modal="$ctrl.onClose()" class="modal"><div class="modal__container" click-outside="$ctrl.onClose()" ng-if="$ctrl.addToListFlow === \'selection\'"><div class="modal__header add-to-list__header"><span>Favorites list</span> <i class="icon icon--close-slim close-modal" ng-click="$ctrl.onClose()"></i></div><div class="modal__body"><div class="list-item__body"><div class="add-to-list__position"><span>{{$ctrl.listPosition}}</span></div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{$ctrl.selectedFood.UrlLink}}" target="_blank"><img ng-if="$ctrl.foodImage.Image" ng-src="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.foodImage.Image}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{$ctrl.selectedFood.Category}}</div><a ng-href="{{$ctrl.selectedFood.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{$ctrl.selectedFood.Name}}</h3></a><div class="region" ng-if="$ctrl.foodRegion.regionName || $ctrl.foodRegion.countryName"><i class="icon icon--pin"></i> <span>{{$ctrl.foodRegion.regionName}}</span><span ng-if="$ctrl.foodRegion.countryName">, {{$ctrl.foodRegion.countryName}}</span></div></div></div></div></div><div class="modal__footer add-to-list__footer" ng-if="!$ctrl.favoritedFood"><div class="add-to-list__edit-position"><div class="btn btn--lowercase add-to-list__position-btn"><span>{{$ctrl.listPosition}}</span></div><div class="btn btn--lowercase btn--red-background add-to-list__add-btn" ng-click="$ctrl.addToList(\'add\')"><span>&#43; Add to list</span></div></div></div><div class="modal__footer add-to-list__footer" ng-if="$ctrl.favoritedFood"><div class="add-to-list__edit-position"><div class="btn btn--lowercase add-to-list__position-btn" ng-class="{ \'add-to-list__position-btn--invalid\' : !$ctrl.listPosition }"><input type="number" ng-model="$ctrl.listPosition" ng-disabled="$ctrl.favoritedFoodsList.length === 1" min="1" max="{{$ctrl.favoritedFoodsList.length}}"></div><div class="btn btn--red-background btn--lowercase btn--noborder add-to-list__add-btn" ng-class="{ \'btn--gray-background add-to-list__add-btn--gray\' : !$ctrl.listPosition || $ctrl.favoritedFoodsList.length === 1 }" ng-click="$ctrl.addToList(\'change\')"><span>Change position</span></div></div><div class="add-to-list__edit-actions"><span><a href="/profile/{{::$ctrl.me.urlLink}}" target="_blank">Show list</a></span><div class="add-to-list__remove-action" ng-click="$ctrl.removeFromList()"><i class="icon icon--trash"></i> <span>Remove from list</span></div></div></div></div><div class="modal__container" click-outside="$ctrl.onClose()" ng-if="$ctrl.addToListFlow === \'post-action\'"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onClose()"></i></div><div><div class="add-to-list__success-icon"><i class="icon icon--check-success"></i></div><div class="add-to-list__success-text">{{$ctrl.successText}}</div><div class="add-to-list__edit-actions add-to-list__success-show-list"><span><a href="/profile/{{::$ctrl.me.urlLink}}" target="_blank">Show list</a></span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/add-to-list/ta-mobile-add-to-list.html','<div class="profile-list add-to-list"><div modal-directive close-modal="$ctrl.onClose()" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.onClose()" ng-if="$ctrl.addToListFlow === \'selection\'"><div class="modal__header add-to-list__header"><span>Favorites list</span> <i class="icon icon--close-slim close-modal" ng-click="$ctrl.onClose()"></i></div><div class="modal__body"><div class="list-item__body"><div class="add-to-list__position"><span>{{$ctrl.listPosition}}</span></div><div class="list-item__center"><div class="list-item__image"><a ng-href="{{$ctrl.selectedFood.UrlLink}}" target="_blank"><img ng-if="$ctrl.foodImage.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.foodImage.Image}}?w=80&h=80"></a></div><div class="list-item__description"><div class="category">{{$ctrl.selectedFood.Category}}</div><a ng-href="{{$ctrl.selectedFood.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{$ctrl.selectedFood.Name}}</h3></a><div class="region" ng-if="$ctrl.foodRegion.regionName || $ctrl.foodRegion.countryName"><i class="icon icon--pin"></i> <span>{{$ctrl.foodRegion.regionName}}</span><span ng-if="$ctrl.foodRegion.countryName">, {{$ctrl.foodRegion.countryName}}</span></div></div></div></div></div><div class="modal__footer add-to-list__footer" ng-if="!$ctrl.favoritedFood"><div class="add-to-list__edit-position"><div class="btn btn--lowercase add-to-list__position-btn"><span>{{$ctrl.listPosition}}</span></div><div class="btn btn--lowercase btn--red-background add-to-list__add-btn" ng-click="$ctrl.addToList(\'add\')"><span>&#43; Add to list</span></div></div></div><div class="modal__footer add-to-list__footer" ng-if="$ctrl.favoritedFood"><div class="add-to-list__edit-position"><div class="btn btn--lowercase add-to-list__position-btn" ng-class="{ \'add-to-list__position-btn--invalid\' : !$ctrl.listPosition }"><input type="number" ng-model="$ctrl.listPosition" ng-disabled="$ctrl.favoritedFoodsList.length === 1" min="1" max="{{$ctrl.favoritedFoodsList.length}}"></div><div class="btn btn--red-background btn--lowercase btn--noborder add-to-list__add-btn" ng-class="{ \'btn--gray-background add-to-list__add-btn--gray\' : !$ctrl.listPosition || $ctrl.favoritedFoodsList.length === 1 }" ng-click="$ctrl.addToList(\'change\')"><span>Change position</span></div></div><div class="add-to-list__edit-actions"><span><a href="/profile/{{::$ctrl.me.urlLink}}" target="_blank">Show list</a></span><div class="add-to-list__remove-action" ng-click="$ctrl.removeFromList()"><i class="icon icon--trash"></i> <span>Remove from list</span></div></div></div></div><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.onClose()" ng-if="$ctrl.addToListFlow === \'post-action\'"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.onClose()"></i></div><div><div class="add-to-list__success-icon"><i class="icon icon--check-success"></i></div><div class="add-to-list__success-text">{{$ctrl.successText}}</div><div class="add-to-list__edit-actions add-to-list__success-show-list"><span><a href="/profile/{{::$ctrl.me.urlLink}}" target="_blank">Show list</a></span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/additional-regions/ta-additional-regions-desktop.html','<span class="additional-regions region--lowercase" ng-click="$ctrl.showMoreRegions()">{{$ctrl.text}}</span><div class="about-food__menu" ng-if="$ctrl.isOpen"><div class="about-food__close-regions"><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()" ng-if="$ctrl.isOpen"></i></div><div class="about-food__origins about-food__origins--additional" ng-repeat="region in $ctrl.additionalRegions"><div class="about-food__origins__left"><img ng-if="region.EmblemImage" class="flag flag-fix" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.EmblemImage}}"> <img ng-if="!region.EmblemImage" class="flag" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.CountryEmblemImage}}"></div><div class="about-food__origins__middle about-food__origins__middle--center"><div class="flex-wrap"><a href="{{::region.UrlLink}}"><div class="city">{{::region.RegionName}}</div></a> <a href="{{::region.CountryUrl}}"><div class="country">{{::region.CountryName}}</div></a></div></div><div class="about-food__origins__right"><ta-map-image ng-if="$ctrl.regionsImageData[$index]" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image><img class="affix-flag affix-show" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.CountryEmblem}}"></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/additional-regions/ta-additional-regions-mobile.html','<div ng-if="!$ctrl.isOpen" ng-click="$ctrl.showMoreRegions()"><span>and&nbsp;</span> <span class="additional-regions">{{$ctrl.text}}</span></div><div class="about-food__origins about-food__origins--additional" ng-if="$ctrl.isOpen" ng-repeat="region in $ctrl.additionalRegions"><div class="about-food__origins__left"><img ng-if="region.EmblemImage" class="flag flag-fix" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.EmblemImage}}"> <img ng-if="!region.EmblemImage" class="flag" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.CountryEmblemImage}}"></div><div class="about-food__origins__middle about-food__origins__middle--center"><div class="flex-wrap"><div class="city">{{::region.RegionName}}</div><div class="country">{{::region.CountryName}}</div></div></div><div class="about-food__origins__right"><ta-map-image ng-if="$ctrl.regionsImageData[$index]" image-filter="$ctrl.regionsImageData[$index]"></ta-map-image><img class="affix-flag affix-show" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.CountryEmblem}}"></div></div><i class="icon icon--close-slim" ng-click="$ctrl.hideMoreRegions()" ng-if="$ctrl.isOpen"></i>');$templateCache.put('/content/scripts/app/components/shared/buttons/ta-explore-more-button.html','<div ng-show="$ctrl.items.Count > $ctrl.items.Data.length && !$ctrl.isButtonLoading" ng-class="$ctrl.buttonClass" ng-click="$ctrl.viewMore()">EVEN MORE</div><div ng-show="$ctrl.isButtonLoading" ng-class="$ctrl.buttonClass"><i class="fa fa-spinner fa-spin"></i></div>');$templateCache.put('/content/scripts/app/components/shared/buttons/ta-view-more-button.html','<button ng-show="$ctrl.items.Count > $ctrl.items.Data.length && !$ctrl.isButtonLoading" ng-class="$ctrl.buttonClass" ng-click="$ctrl.viewMore()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" ng-class="$ctrl.buttonClass"><i class="fa fa-spinner fa-spin"></i></button>');$templateCache.put('/content/scripts/app/components/shared/badge-ssr/ta-badge-ssr.html','<a href="{{$ctrl.badges.UrlLink}}">{{$ctrl.getBadgeExpanded($ctrl.badges).position}} {{$ctrl.getBadgeExpanded($ctrl.badges).text}}</a>');$templateCache.put('/content/scripts/app/components/shared/entity-categories/ta-entity-categories-desktop.html','<span><a class="category-name-items" href="{{$ctrl.categoryUrlLink}}">{{$ctrl.categoryName}}</a> <a class="category-name-items" ng-repeat="category in $ctrl.additionalCategories" ng-href="{{category.UrlLink}}">{{category.Name}}</a></span>');$templateCache.put('/content/scripts/app/components/shared/entity-categories/ta-entity-categories-mobile.html','<span><a class="category-name-items" href="{{$ctrl.categoryUrlLink}}">{{$ctrl.categoryName}}</a> <a class="category-name-items" ng-class="{ \'category-name-items--last\' : $ctrl.isLastItem($index) }" ng-repeat="category in $ctrl.firstItems track by (category.Name + $index)" ng-href="{{category.UrlLink}}">{{category.Name}}</a> <a class="category-name-items" ng-class="{ \'category-name-items--last\' : $ctrl.remainingItems.length - 1 === $index }" ng-show="$ctrl.showAll" ng-repeat="category in $ctrl.remainingItems track by (category.Name + $index)" ng-href="{{category.UrlLink}}">{{category.Name}}</a></span> <span class="category-name-dots" ng-click="$ctrl.showRemainingItems()" ng-if="!$ctrl.showAll">...</span>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-collection-comment-process-desktop.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Login"><div class="modal__container modal__container--small" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-social-login-desktop></ta-social-login-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-desktop></ta-regular-login-desktop></div></div></div><div class="modal" ng-switch-when="Vote"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.userCommentStatus.isRated ? "Comment" : "Rate & Comment"}} {{$ctrl.details.Name}}</h2><div class="comment__info-not-rated"><ta-star-vote-desktop rating="$ctrl.data.rating" on-rating-select="$ctrl.onVoteChange($event.selectedRating)" rating-exists="$ctrl.userCommentStatus.comment"></ta-star-vote-desktop><div ng-if="$ctrl.isRateValid && !$ctrl.data.content.length > 0"><h4 class="h4 h4--muli h4--center">If you only rate {{$ctrl.details.Name}}, you can still comment later.</h4></div></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChange()" placeholder="OPTIONAL COMMENT">{{$ctrl.data.content}}\r\n                        </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo><div><ta-horizontal-loader percentage="$ctrl.uploadPercentageCompleted"></ta-horizontal-loader></div></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.updateComment()" class="btn btn--right btn--red-background"><span ng-show="!$ctrl.submitting">SUBMIT</span> <i ng-show="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div><div ng-if="(!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber) && $ctrl.data.rating !== 1" class="btn btn--right btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span></div><div ng-if="!$ctrl.isRateValid && $ctrl.data.rating === 1" class="btn btn--right btn--red-background" ng-click="$ctrl.deleteComment()"><span ng-if="!$ctrl.submitting">CANCEL YOUR RATING</span></div></div><div ng-if="!$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></div></div></div></div><div ng-switch-when="Voted"><div class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="desktop" food-details="$ctrl.item" close-action="$ctrl.closeModal()"></ta-comment-summary><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase comment__restaurant-recommendation">Do you know a restaurant that serves good {{$ctrl.details.Name}}?</h2></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row-center"><span class="btn btn--dark-gray-background" ng-click="$ctrl.exit()">EXIT</span> <span class="btn btn--red-background" ng-click="$ctrl.yes()">YES</span></div></div></div></div></div><div ng-switch-when="VotedIngredient"><div class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="desktop" food-details="$ctrl.item" close-action="$ctrl.closeModal()"></ta-comment-summary></div></div></div></div></div><div ng-switch-when="Restaurant"><div class="comment__info"><div class="left"><div class="comment__stars comment__stars--small"><ta-star-score-mobile rating="$ctrl.details.Rating"></ta-star-score-mobile></div></div><div class="right">YOUR RATING: {{$ctrl.viewRating}} <i ng-class="{\'icon icon--check icon--check-yes\': $ctrl.isApproved, \'icon icon--check icon--check-no\': !$ctrl.isApproved}"></i></div></div><ta-dish-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.closeModal()"></ta-dish-restaurant-comment-desktop></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div></div><style>\r\n    .ratingControl > label {\r\n        margin: 0px 0px 0px 0px;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-collection-rating-desktop.html','<div ng-if="!$ctrl.isLoading"><div ng-if="!$ctrl.isAnonymous"><div><div class="rating-box__view" ng-click="$ctrl.toggleRatingOpen()" ng-if="$ctrl.validScoreCount >= 5"><span class="score-text">{{$ctrl.dividedScore | number:1}}</span><ta-star-score-mobile divided-rating="$ctrl.dividedScore"></ta-star-score-mobile><i class="icon--single-star icon--star-full"></i></div><div class="rating-box__view" ng-click="$ctrl.toggleRatingOpen()" ng-if="$ctrl.validScoreCount < 5"><span class="score-text--na">n/a</span><ta-star-score-mobile rating="0"></ta-star-score-mobile><i class="icon--single-star icon--star-empty"></i></div><ta-collection-comment-process-desktop ng-if="$ctrl.item.isRatingOpen" details="$ctrl.item" item="$ctrl.item" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop></div></div><div ng-if="$ctrl.isAnonymous"><div class="rating-box__view" ng-if="$ctrl.validScoreCount >= 5" ng-click="$ctrl.openLogin()"><span class="score-text">{{$ctrl.dividedScore | number:1}}</span> <i class="icon--single-star icon--star-full"></i><ta-star-score-mobile divided-rating="$ctrl.dividedScore"></ta-star-score-mobile></div><div class="rating-box__view" ng-if="$ctrl.validScoreCount < 5" ng-click="$ctrl.openLogin()"><span class="score-text--na">n/a</span> <i class="icon--single-star icon--star-empty"></i><ta-star-score-mobile rating="0"></ta-star-score-mobile></div></div></div><div ng-if="$ctrl.isLoading"><div class="rating-box__view rating-box__view--loading"><i class="fa fa-spinner fa-spin"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-button-alt.html','<div class="comment-button"><button class="btn btn--light-gray-background" ng-if="$ctrl.userCommentStatus.comment" ng-click="$ctrl.startCommentProcess()">Update</button> <button class="btn btn--red-background" ng-if="!$ctrl.userCommentStatus.comment" ng-click="$ctrl.startCommentProcess()">Comment</button></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-button.html','<div class="comment__container"><div ng-if="$ctrl.userCommentStatus.comment"><div class="comment__info-preview" ng-click="$ctrl.startCommentProcess()"><span ng-if="$ctrl.userCommentStatus.dividedScore" class="score-text score-text--left"><span ng-if="$ctrl.userCommentStatus.validScoreCount >= 5">{{$ctrl.userCommentStatus.dividedScore | number: 1}}</span> <span ng-if="$ctrl.userCommentStatus.validScoreCount < 5">n/a</span></span><div class="comment__stars comment__stars--small"><ta-star-score-mobile rating="$ctrl.userCommentStatus.validScoreCount >= 5 ? $ctrl.userCommentStatus.commentRating : 0"></ta-star-score-mobile></div></div></div><div ng-if="!$ctrl.userCommentStatus.comment"><div class="comment__info-preview" ng-click="$ctrl.startCommentProcess()"><span ng-if="$ctrl.userCommentStatus.dividedScore" class="score-text score-text--left"><span ng-if="$ctrl.userCommentStatus.validScoreCount >= 5">{{$ctrl.userCommentStatus.dividedScore | number: 1}}</span> <span ng-if="$ctrl.userCommentStatus.validScoreCount < 5">n/a</span></span><div class="comment__stars comment__stars--small"><ta-star-score-mobile divided-rating="$ctrl.userCommentStatus.validScoreCount >= 5 ? $ctrl.userCommentStatus.dividedScore : 0" rating="$ctrl.userCommentStatus.validScoreCount >= 5 ? $ctrl.userCommentStatus.commentRating : 0"></ta-star-score-mobile></div></div></div><div class="comment__rating-control" ng-if="$ctrl.includeRatingControl"><ta-rating-control open-rating="$ctrl.startCommentProcess()" is-rated="!!$ctrl.userCommentStatus.comment" rating-data="$ctrl.userCommentStatus" label="\'Rate it\'" gray="true"></ta-rating-control></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-label.html','<div class="comment-label"><div class="left-column"><span class="main-score" ng-class="{ \'main-score--na\' : $ctrl.userCommentStatus.validScoreCount < 5 }"><span ng-if="$ctrl.userCommentStatus.validScoreCount >= 5">{{$ctrl.userCommentStatus.dividedScore | number: 1}}</span> <span ng-if="$ctrl.userCommentStatus.validScoreCount < 5">n/a</span></span></div><div class="right-column"><div class="comment__stars comment__stars--small"><ta-star-score-mobile divided-rating="$ctrl.userCommentStatus.validScoreCount >= 5 ? $ctrl.userCommentStatus.dividedScore : 0"></ta-star-score-mobile></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-photo.html','<div class="add-photo__container"><div class="add-photos" ng-if="$ctrl.data.photos.length > 0"><div class="add-photos__item" ng-repeat="p in $ctrl.data.photos"><i class="icon icon--close-cross icon--close-cross--white" ng-click="$ctrl.clickRemovePhoto($event, p)"></i> <img ta-lazy-load lazy-source="{{p.url}}"></div></div><input type="file" multiple class="ta-file-upload" ta-file-change handler="$ctrl.onFilePickerSelect(files)" accept="image/png,image/jpeg" style="display:none"><div class="btn btn--gray-border btn--noborder" ng-if="$ctrl.data.photos.length < 5" ng-click="$ctrl.clickAddPhotos($event)"><div class="icon-add-photos"><i class="icon icon--photo"></i> <span>ADD PHOTOS</span></div><span>{{$ctrl.data.photos.length}}/5</span></div><div class="btn btn--gray-border btn--noborder" ng-if="$ctrl.data.photos.length >= 5"><span></span><span>PHOTOS</span><span>{{$ctrl.data.photos.length}}/5</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-process-mobile.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Login"><div class="modal__container modal__container--small" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-social-login-mobile></ta-social-login-mobile><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-mobile></ta-regular-login-mobile></div></div></div><div class="modal" ng-switch-when="Vote"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.userCommentStatus.isRated ? "Comment" : "Rate & Comment"}} {{$ctrl.details.Name}}</h2><div class="comment__info-not-rated"><ta-star-vote-mobile rating="$ctrl.data.rating" on-rating-select="$ctrl.onVoteChange($event.selectedRating)" rating-exists="$ctrl.userCommentStatus.comment"></ta-star-vote-mobile><div ng-if="$ctrl.isRateValid && !$ctrl.data.content.length > 0"><h4 class="h4 h4--muli h4--center">If you only rate {{$ctrl.details.Name}}, you can still comment later.</h4></div></div><div class="comment__fieldgroup"><textarea class="textarea" ng-class="{ \'textarea--writing\' : $ctrl.data.content }" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChangeMobile()" placeholder="OPTIONAL COMMENT">{{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo><div><ta-horizontal-loader percentage="$ctrl.uploadPercentageCompleted"></ta-horizontal-loader></div></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.updateComment()" class="btn btn--red-background"><span ng-show="!$ctrl.submitting">SUBMIT</span> <i ng-show="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div><div ng-if="(!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber) && $ctrl.data.rating !== 1" class="btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span></div><div ng-if="!$ctrl.isRateValid && $ctrl.data.rating === 1" class="btn btn--red-background" ng-click="$ctrl.deleteComment()"><span ng-if="!$ctrl.submitting">CANCEL YOUR RATING</span></div></div><div ng-if="!$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></div></div></div></div><div ng-switch-when="Voted"><div class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="mobile" food-details="$ctrl.details" close-action="$ctrl.closeModal()"></ta-comment-summary><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small comment__restaurant-recommendation">Do you know a restaurant that serves good {{$ctrl.details.Name}}?</h2></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row-center"><span class="btn btn--dark-gray-background" ng-click="$ctrl.exit()">EXIT</span> <span class="btn btn--red-background" ng-click="$ctrl.yes()">YES</span></div></div></div></div></div><div ng-switch-when="VotedIngredient"><div class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="mobile" food-details="$ctrl.details" close-action="$ctrl.closeModal()"></ta-comment-summary></div></div></div></div></div><div ng-switch-when="Restaurant"><div class="comment__info"><div class="left"><div class="comment__stars comment__stars--small"><ta-star-score-mobile rating="$ctrl.details.Rating"></ta-star-score-mobile></div></div><div class="right">YOUR RATING: {{$ctrl.viewRating}} <i ng-class="{\'icon icon--check icon--check-yes\': $ctrl.isApproved, \'icon icon--check icon--check-no\': !$ctrl.isApproved}"></i></div></div><ta-dish-restaurant-comment details="$ctrl.details" close-modal="$ctrl.closeModal()"></ta-dish-restaurant-comment></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header modal__header--low"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div></div><style>\r\n    .ratingControl > label {\r\n        margin: 0px 0px 0px 0px;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-process.html','<div ng-switch="$ctrl.current" modal-directive close-modal="$ctrl.closeModal()"><div class="modal" ng-switch-when="Login"><div class="modal__container modal__container--small" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><ta-social-login-desktop></ta-social-login-desktop><div class="separator"><span></span><span>OR</span><span></span></div><ta-regular-login-desktop></ta-regular-login-desktop></div></div></div><div class="modal" ng-switch-when="Vote"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-if="!$ctrl.submitting" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">{{$ctrl.userCommentStatus.isRated ? "Comment" : "Rate & Comment"}} {{$ctrl.details.Name}}</h2><div class="comment__info-not-rated"><ta-star-vote-desktop rating="$ctrl.data.rating" on-rating-select="$ctrl.onVoteChange($event.selectedRating)" rating-exists="$ctrl.userCommentStatus.comment"></ta-star-vote-desktop><div ng-if="$ctrl.isRateValid && !$ctrl.data.content.length > 0"><h4 class="h4 h4--muli h4--center">If you only rate {{$ctrl.details.Name}}, you can still comment later.</h4></div></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChange()" placeholder="OPTIONAL COMMENT">{{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo><div><ta-horizontal-loader percentage="$ctrl.uploadPercentageCompleted"></ta-horizontal-loader></div></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div class="comment__validate comment__validate--error" ng-if="$ctrl.isError"><span>{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber" ng-click="$ctrl.updateComment()" class="btn btn--right btn--red-background"><span ng-show="!$ctrl.submitting">SUBMIT</span> <i ng-show="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div><div ng-if="(!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber) && $ctrl.data.rating !== 1" class="btn btn--right btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span></div><div ng-if="!$ctrl.isRateValid && $ctrl.data.rating === 1" class="btn btn--right btn--red-background" ng-click="$ctrl.deleteComment()"><span ng-if="!$ctrl.submitting">CANCEL YOUR RATING</span></div></div><div ng-if="!$ctrl.userCommentStatus.comment"><div ng-if="$ctrl.isRateValid && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit()" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.isRateValid || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting" class="fa fa-spinner fa-spin"></i></div></div></div></div></div><div ng-switch-when="Voted"><div class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="desktop" food-details="$ctrl.details" close-action="$ctrl.closeModal()"></ta-comment-summary><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase comment__restaurant-recommendation">Do you know a restaurant that serves good {{$ctrl.details.Name}}?</h2></div></div><div class="modal__footer"><div class="btn__set btn__set--2-in-row-center"><span class="btn btn--dark-gray-background" ng-click="$ctrl.exit()">EXIT</span> <span class="btn btn--red-background" ng-click="$ctrl.yes()">YES</span></div></div></div></div></div><div ng-switch-when="VotedIngredient"><div class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="desktop" food-details="$ctrl.details" close-action="$ctrl.closeModal()"></ta-comment-summary></div></div></div></div></div><div ng-switch-when="Restaurant"><div class="comment__info"><div class="left"><div class="comment__stars comment__stars--small"><ta-star-score-mobile rating="$ctrl.details.Rating"></ta-star-score-mobile></div></div><div class="right">YOUR RATING: {{$ctrl.viewRating}} <i ng-class="{\'icon icon--check icon--check-yes\': $ctrl.isApproved, \'icon icon--check icon--check-no\': !$ctrl.isApproved}"></i></div></div><ta-dish-restaurant-comment-desktop details="$ctrl.details" on-close-modal="$ctrl.closeModal()"></ta-dish-restaurant-comment-desktop></div><div class="modal" ng-switch-when="Thanks"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box"><ta-comment-thanks is-thanks-visible="$ctrl.isThanksVisible"></ta-comment-thanks></div></div></div></div></div><style>\r\n    .ratingControl >label {\r\n        margin: 0px 0px 0px 0px;\r\n    }\r\n</style>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-summary-desktop.html','<div ng-show="!$ctrl.isLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isLoaded"><div class="comment__summary-description" ng-if="$ctrl.toplistInfo"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small"><a ng-href="{{$ctrl.toplistInfo.UrlLink}}" target="_blank">{{$ctrl.toplistLabel.top}}</a></h2><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small"><a ng-href="{{$ctrl.toplistInfo.UrlLink}}" target="_blank">{{$ctrl.toplistLabel.bottom}}</a> <a ng-href="{{$ctrl.toplistInfo.UrlLink}}" class="comment__summary-view-list" target="_blank">{{::$ctrl.viewListLabel}} <i class="icon icon__new-tab"></i></a></h2></div><div class="comment__summary"><a ng-href="{{::$ctrl.regionUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.regionUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.region"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.region.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.region.Tried}}/{{::$ctrl.triedFood.region.Total}} {{$ctrl.getOrigin()}} {{::$ctrl.foodType}}</span> <span class="comment__summary-link">RATE MORE</span></a> <a ng-href="{{::$ctrl.categoryUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.categoryUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.group"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.group.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.group.Tried}}/{{::$ctrl.triedFood.group.Total}} world\'s {{::$ctrl.categoryPlural | lowercase}}</span> <span class="comment__summary-link">RATE MORE</span></a> <a ng-href="{{::$ctrl.regionUrlLink}}/{{::$ctrl.categoryUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.regionUrlLink + \'/\' + $ctrl.categoryUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.regionInGroup"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.regionInGroup.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.regionInGroup.Tried}}/{{::$ctrl.triedFood.regionInGroup.Total}} {{$ctrl.getOrigin()}} {{::$ctrl.categoryPlural | lowercase}}</span> <span class="comment__summary-link">RATE MORE</span></a></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-summary-mobile.html','<div ng-show="!$ctrl.isLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isLoaded"><div class="comment__summary-description" ng-if="$ctrl.toplistInfo"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small"><a ng-href="{{$ctrl.toplistInfo.UrlLink}}" target="_blank">{{$ctrl.toplistLabel.top}}</a></h2><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small"><a ng-href="{{$ctrl.toplistInfo.UrlLink}}" target="_blank">{{$ctrl.toplistLabel.bottom}}</a> <a ng-href="{{$ctrl.toplistInfo.UrlLink}}" class="comment__summary-view-list" target="_blank">{{::$ctrl.viewListLabel}} <i class="icon icon__new-tab"></i></a></h2></div><div class="comment__summary"><a ng-href="{{::$ctrl.regionUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.regionUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.region"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.region.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.region.Tried}}/{{::$ctrl.triedFood.region.Total}} {{$ctrl.getOrigin()}} {{::$ctrl.foodType}}</span> <span class="comment__summary-link">RATE MORE</span></a> <a ng-href="{{::$ctrl.categoryUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.categoryUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.group"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.group.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.group.Tried}}/{{::$ctrl.triedFood.group.Total}} world\'s {{::$ctrl.categoryPlural | lowercase}}</span> <span class="comment__summary-link">RATE MORE</span></a> <a ng-href="{{::$ctrl.regionUrlLink}}/{{::$ctrl.categoryUrlLink}}" ng-click="$ctrl.navigateToRateMore($event, $ctrl.regionUrlLink + \'/\' + $ctrl.categoryUrlLink)" target="_blank" class="comment__summary-item" ng-if="$ctrl.triedFood.regionInGroup"><div class="comment__summary-circle-wrapper"><ta-progress-circle percentage="$ctrl.triedFood.regionInGroup.PercentageTried"></ta-progress-circle></div><span class="comment__summary-text">Tried {{::$ctrl.triedFood.regionInGroup.Tried}}/{{::$ctrl.triedFood.regionInGroup.Total}} {{$ctrl.getOrigin()}} {{::$ctrl.categoryPlural | lowercase}}</span> <span class="comment__summary-link">RATE MORE</span></a></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comment-thanks.html','<div class="comment comment--thanks"><i class="icon icon--check-success"></i><h2 class="h2 h2--bold h2--lowercase h2--center h2--muli">Thank you for your input.</h2><div class="miss-text miss-text--small-padding miss-text--nobgcolor" ng-if="$ctrl.isThanksVisible">Your input will be visible after approval.</div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comments-list-article.html','<section class="article__comments" ng-class="{\'article-container\' : $ctrl.isMobile}"><form class="comment-form-wrapper" name="commentForm"><div class="article-comments-form"><textarea ng-model="$ctrl.data.content" placeholder="Write a comment..." ng-click="$ctrl.articleLoginTextArea()" required>{{$ctrl.data.content}}</textarea><div class="submit-info-row"><div class="info-col"><span id="info-txt" ng-show="articleCommentStatus"></span></div><button type="submit" ng-click="$ctrl.articleCommentProcess()" ng-disabled="commentForm.$invalid">Submit</button></div></div></form><div class="comment-preview-wrapper" ng-if="$ctrl.articleComments.Data.length > 0"><div class="comments-counter"><p><span>{{ $ctrl.articleComments.Count }}</span> Comments</p></div><div class="comments-preview" ng-repeat="comment in $ctrl.articleComments.Data track by $index"><div class="user-comment"><span class="name">{{ comment.FirstName }} {{ comment.LastName }}</span><hr><p>{{ comment.Content}}</p></div></div><div ng-show="$ctrl.restaurantsLoading" ng-class="{\'loader loader--desktop\' : !$ctrl.isMobile}"><img src="/Content/Image/loader.gif"></div><div class="load-more-comments" ng-if="$ctrl.showLoadMoreBtn"><button class="load-more-comments__btn btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMoreComments()">Load More</button></div></div></section>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comments-list-desktop.html','<div class="opinions__list"><div class="opinion opinion--pending" ng-if="$ctrl.userComment && !$ctrl.isAnonymous"><div class="opinion__body"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="$ctrl.userComment.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.userComment.ProfilePicture}}?height=66&width=66"> <img ng-show="$ctrl.userComment.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{$ctrl.userComment.FirstName}} {{$ctrl.userComment.LastName}}</div><div class="opinion__rating-info"><div class="opinion__stars"><ta-star-score-mobile rating="$ctrl.userComment.RatingScore"></ta-star-score-mobile></div><div class="opinion__date">{{$ctrl.userComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="opinion__main"><div ng-if="$ctrl.userComment.Content" class="opinion__content"><p>"{{$ctrl.userComment.Content}}"</p></div><div class="opinion__photos" ng-if="$ctrl.userComment.Images.length > 0"><div ng-repeat="ci in $ctrl.userComment.Images" class="item" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{ci}}\');"></div></div><div class="opinion__pending" ng-if="$ctrl.userComment.IsApproved"><span>\u2022</span><span>\u2022</span><span>Approved</span></div><div class="opinion__pending" ng-if="!$ctrl.userComment.IsApproved"><span>\u2022</span><span>\u2022</span><span>Pending review</span></div></div></div></div><div class="opinion" ng-repeat="opinion in $ctrl.comments.Data track by $index"><div class="opinion__body"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{opinion.FirstName}} {{opinion.LastName}}</div><div class="opinion__rating-info"><div class="opinion__stars"><ta-star-score-mobile rating="opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date"><div>{{opinion.CreatedAt | date : \'longDate\'}}</div></div></div></div><div class="opinion__main"><div ng-if="opinion.Content" class="opinion__content"><p>"{{opinion.Content}}"</p></div><div class="handy handy--review"><ta-comment-like-mobile review="opinion"></ta-comment-like-mobile></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comments-list-mobile.html','<div class="opinions-new__container" ng-class="{ \'opinions-new__container--empty-list\' : !$ctrl.comments.Data.length && !$ctrl.userComment }"><div class="opinions-new__header"><h2 class="h2 h2--muli h2--small">Comments <span>{{$ctrl.comments.Count}}</span></h2></div><div class="opinions-new__comment" ng-click="$ctrl.startCommentProcess()"><span>Comment</span> <i class="icon icon__camera--gray"></i></div><div class="opinions-new__list" ng-if="$ctrl.comments.Data.length || $ctrl.userComment"><div class="opinion opinion--pending" ng-if="$ctrl.userComment && !$ctrl.isAnonymous"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="$ctrl.userComment.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.userComment.ProfilePicture}}?height=66&width=66"> <img ng-show="$ctrl.userComment.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{$ctrl.userComment.FirstName}} {{$ctrl.userComment.LastName}}</div><div class="opinion__review-info"><div class="opinion__stars"><ta-star-score-mobile rating="$ctrl.userComment.RatingScore"></ta-star-score-mobile></div><div class="opinion__date">{{$ctrl.userComment.CreatedAt | date : \'longDate\'}}</div></div></div><div class="opinion__main"><div ng-if="$ctrl.userComment.Content" class="opinion__content"><p>"{{$ctrl.userComment.Content}}"</p></div><div class="opinion__photos" ng-if="$ctrl.userComment.Images.length > 0"><div class="item" ng-repeat="ci in $ctrl.userComment.Images"><div style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{ci}}\');"></div></div></div><div class="opinion__pending" ng-if="$ctrl.userComment.IsApproved"><span>\u2022</span><span>\u2022</span><span>Approved</span></div><div class="opinion__pending" ng-if="!$ctrl.userComment.IsApproved"><span>\u2022</span><span>\u2022</span><span>Pending review</span></div></div></div><div class="opinion" ng-repeat="opinion in $ctrl.comments.Data track by $index"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{opinion.FirstName}} {{opinion.LastName}}</div><div class="opinion__review-info"><div class="opinion__stars"><ta-star-score-mobile rating="opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date">{{opinion.CreatedAt | date : \'longDate\'}}</div></div></div><div class="opinion__main"><article ng-if="opinion.Content" class="opinion__content"><p>"{{opinion.Content}}"</p></article><div class="handy handy--review"><ta-comment-like-mobile review="opinion" hide-label="true"></ta-comment-like-mobile></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comments-list-redesign.html','<section class="redesign-comments redesign-comments__{{$ctrl.commentsType}}" ng-class="{\'redesign-comments--mobile\' : $ctrl.isMobile}"><div class="redesign-comments--counter" ng-if="$ctrl.articleComments.Data.length > 0"><p>{{$ctrl.articleComments.Count < 2 ? \'Comment\' : \'Comments\'}} <span>({{$ctrl.articleComments.Count}})</span></p></div><form class="comment-form-wrapper" name="commentForm" ng-submit="preventMultipleSubmit()"><div class="redesign-comments--form" ng-class="{\'redesign-comments--form__not-comment-data\' : !$ctrl.articleComments.Data.length}"><textarea ng-model="$ctrl.data.content" placeholder="Write a comment..." ng-click="$ctrl.articleLoginTextArea()" required>{{$ctrl.data.content}}</textarea><div class="submit-info-row"><div class="info-col"><span id="info-txt" ng-show="articleCommentStatus && !$ctrl.isMobile"></span></div><button type="submit" ng-click="$ctrl.articleCommentProcess()" ng-disabled="commentForm.$invalid || $ctrl.preventMultipleSubmitBoolean">Submit</button></div><div class="info-col-mobile"><span id="info-txt" ng-show="articleCommentStatus && $ctrl.isMobile"></span></div></div></form><div class="redesign-comments--preview-wrapper" ng-if="$ctrl.articleComments.Data.length > 0"><div class="comments-preview" ng-repeat="comment in $ctrl.articleComments.Data track by $index"><div class="user-comment"><div class="user-comment--profile"><div class="user-comment--profile__left-col"><img class="avatar" ng-if="comment.avatar" ng-src="test" alt="user avatar"><div class="avatar" ng-if="!comment.avatar">{{comment.FirstName.charAt(0)}}</div><div class="name-and-created-date"><span class="name">{{ comment.FirstName }} {{ comment.LastName }}</span> <span class="date">{{comment.CreatedAt | date: \'MMMM dd. yyyy\'}}</span></div></div></div><p>{{ comment.Content}}</p><hr ng-if="!$last"></div></div><div ng-show="$ctrl.restaurantsLoading" ng-class="{\'loader loader--desktop\' : !$ctrl.isMobile}"><img src="/Content/Image/loader.gif"></div><div class="redesign-comments--load-more" ng-if="$ctrl.showLoadMoreBtn"><button class="redesign-comments--load-more__btn" ng-click="$ctrl.loadMoreComments()">Load More</button></div></div></section>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-comments-list-top-list.html','<section class="article__comments top-list-article__comments" ng-class="{\'article-container\' : $ctrl.isMobile}"><form class="comment-form-wrapper" name="commentForm"><div class="article-comments-form"><textarea ng-model="$ctrl.data.content" placeholder="Write a comment..." ng-click="$ctrl.articleLoginTextArea()" required>{{$ctrl.data.content}}</textarea><div class="submit-info-row"><div class="info-col"><span id="info-txt" ng-show="articleCommentStatus"></span></div><button type="submit" ng-click="$ctrl.articleCommentProcess()" ng-disabled="commentForm.$invalid">Submit</button></div></div></form><div class="comment-preview-wrapper" ng-if="$ctrl.articleComments.Data.length > 0"><div class="comments-counter"><p><span>{{ $ctrl.articleComments.Count }}</span> Comments</p></div><div class="comments-preview" ng-repeat="comment in $ctrl.articleComments.Data track by $index"><div class="user-comment"><span class="name">{{ comment.FirstName }} {{ comment.LastName }}</span><hr><p>{{ comment.Content}}</p></div></div><div ng-show="$ctrl.restaurantsLoading" ng-class="{\'loader loader--desktop\' : !$ctrl.isMobile}"><img src="/Content/Image/loader.gif"></div><div class="load-more-comments" ng-if="$ctrl.showLoadMoreBtn"><button class="load-more-comments__btn btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMoreComments()">Load More</button></div></div></section>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-food-mobile-comments.html','<section><div class="opinions-new"><ta-rating-card ng-if="$ctrl.rating" template="basic" platform="mobile" details="$ctrl.rating" badges="[]" actions="$ctrl.ratingCardActions"></ta-rating-card><ta-comments-list comments="$ctrl.reviews" template="mobile"></ta-comments-list><div class="btn--padding-vertical" ng-if="$ctrl.reviews.Count > $ctrl.reviews.Data.length"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></section>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-opinion-list-desktop.html','<div class="opinions__list"><div class="opinion opinion--pending" ng-if="$ctrl.opinion && !$ctrl.isAnonymous" opinion="$ctrl.opinion"><div class="opinion__body"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="$ctrl.opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="$ctrl.opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{$ctrl.opinion.FirstName}} {{$ctrl.opinion.LastName}}</div><div class="opinion__rating-info"><div class="opinion__stars"><ta-star-score-mobile divided-rating="$ctrl.opinion.RatingScore" rating="$ctrl.opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date">{{$ctrl.opinion.CreatedAt | date : \'longDate\'}}</div></div></div><div class="opinion__main"><div ng-if="$ctrl.opinion.Content" class="opinion__content"><p>"{{$ctrl.opinion.Content}}"</p></div><div class="opinion__photos" ng-if="$ctrl.opinion.Images.length > 0"><div ng-repeat="ci in $ctrl.opinion.Images" class="item" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{ci}}\');"></div></div><div class="opinion__pending" ng-if="$ctrl.opinion.IsApproved"><span>\u2022</span><span>\u2022</span><span>Approved</span></div><div class="opinion__pending" ng-if="!$ctrl.opinion.IsApproved"><span>\u2022</span><span>\u2022</span><span>Pending review</span></div></div></div></div><div class="opinion" ng-repeat="opinion in $ctrl.opinions.Data track by $index"><div class="opinion__body"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{opinion.FirstName}} {{opinion.LastName}}</div><div class="opinion__rating-info"><div class="opinion__stars"><ta-star-score-mobile rating="opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date"><div>{{opinion.CreatedAt | date : \'longDate\'}}</div></div></div></div><div class="opinion__main"><div ng-if="opinion.Content" class="opinion__content"><p>"{{opinion.Content}}"</p></div><div class="handy handy--review"><ta-comment-like-mobile review="opinion"></ta-comment-like-mobile></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-opinion-list-mobile.html','<div class="miss-text"><h2 class="h2 h2--lowercase h2--center h2--muli">{{$ctrl.getTitle()}}</h2></div><div class="opinions__list"><div class="opinion opinion--pending" ng-if="$ctrl.opinion && !$ctrl.isAnonymous" opinion="$ctrl.opinion"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="$ctrl.opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="$ctrl.opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{$ctrl.opinion.FirstName}} {{$ctrl.opinion.LastName}}</div><div class="opinion__stars"><ta-star-score-mobile rating="$ctrl.opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date">{{$ctrl.opinion.CreatedAt | date : \'longDate\'}}</div></div><div class="opinion__main"><div ng-if="$ctrl.opinion.Content" class="opinion__content"><p>"{{$ctrl.opinion.Content}}"</p></div><div class="opinion__photos" ng-if="$ctrl.opinion.Images.length > 0"><div class="item" ng-repeat="ci in $ctrl.opinion.Images"><div style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{ci}}\');"></div></div></div><div class="opinion__pending" ng-if="$ctrl.opinion.IsApproved"><span>\u2022</span><span>\u2022</span><span>Approved</span></div><div class="opinion__pending" ng-if="!$ctrl.opinion.IsApproved"><span>\u2022</span><span>\u2022</span><span>Pending review</span></div></div></div><div class="opinion" ng-repeat="opinion in $ctrl.opinions.Data track by $index"><div class="opinion__header"><div class="opinion__thumb"><img ng-show="opinion.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::opinion.ProfilePicture}}?height=66&width=66"> <img ng-show="opinion.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="opinion__author">{{opinion.FirstName}} {{opinion.LastName}}</div><div class="opinion__stars"><ta-star-score-mobile rating="opinion.RatingScore"></ta-star-score-mobile></div><div class="opinion__date"><div>{{opinion.CreatedAt | date : \'longDate\'}}</div></div></div><div class="opinion__main"><div ng-if="opinion.Content" class="opinion__content"><p>"{{opinion.Content}}"</p></div><div class="handy handy--review"><ta-comment-like-mobile review="opinion"></ta-comment-like-mobile></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-review-desktop-list.html','<div class="reviews__list"><div class="grid"><div class="grid-sizer"></div><div class="gutter-sizer"></div><div ng-repeat="review in $ctrl.reviews.Data track by $index" class="review grid-item"><div class="review__body"><div class="review__header"><div class="review__thumb"><img ng-show="review.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::review.ProfilePicture}}?height=66&width=66"> <img ng-show="review.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="review__author"><div ng-if="!review.UrlLink && !review.SourceLink"><h3 class="h3">{{review.FirstName}} {{review.LastName}}</h3></div><a ng-if="!review.UrlLink && review.SourceLink" href="{{review.SourceLink}}" target="_blank"><h3 class="h3">{{review.FirstName}} {{review.LastName}}</h3></a> <a ng-if="review.UrlLink" href="{{review.UrlLink}}"><h3 class="h3">{{review.FirstName}} {{review.LastName}}</h3></a> <span class="title">{{review.Title}}</span></div></div><blockquote cite="{{review.SourceLink}}"><div class="review__content"><div read-more number-of-letters="500" read-more-txt="{{review.Content}}"></div></div></blockquote><div class="review__subject" ng-if="review.DishName"><p>on <a href="{{review.DishUrlLink}}">{{review.DishName}}</a></p></div><div class="review__footer"><div class="handy handy--review"><ta-comment-like-mobile review="review"></ta-comment-like-mobile></div><div class="review__source"><div class="caption">source</div><a class="thumb" href="{{review.SourceLink}}" target="_blank" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::review.SourceImage}}?h=158&w=108\');"></a></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/comments/ta-review-list.html','<div class="reviews__list"><div ng-repeat="review in $ctrl.reviews.Data track by $index" class="review"><div class="left"><div class="review__header"><div class="review__thumb"><img ng-show="review.ProfilePicture != null" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::review.ProfilePicture}}?height=66&width=66"> <img ng-show="review.ProfilePicture == null" ta-lazy-load lazy-source="/Content/Image/User_Icon.svg"></div><div class="review__author"><div ng-if="!review.UrlLink && !review.SourceLink">{{review.FirstName}} {{review.LastName}}</div><a ng-if="!review.UrlLink && review.SourceLink" href="{{review.SourceLink}}" target="_blank"><div>{{review.FirstName}} {{review.LastName}}</div></a> <a ng-if="review.UrlLink" href="{{review.UrlLink}}"><div>{{review.FirstName}} {{review.LastName}}</div></a> <span>{{review.Title}}</span></div></div><blockquote cite="{{review.SourceLink}}"><div class="review__content"><div read-more number-of-letters="500" read-more-txt="{{review.Content}}"></div></div></blockquote><div class="review__subject"><p>on <a href="{{review.DishUrlLink}}">{{review.DishName}}</a></p></div></div><div class="right"><div class="review__source"><a class="thumb" href="{{review.SourceLink}}" target="_blank"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::review.SourceImage}}?h=158&w=108"></a><div class="caption">source</div></div></div><div class="review__footer"><div class="handy handy--review"><ta-comment-like-mobile review="review"></ta-comment-like-mobile></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/explore-more/ta-explore-more-list-desktop.html','<div class="explore-more"><div class="explore-more__list"><div class="item" ng-repeat="item in $ctrl.items"><div class="item__body"><a ng-href="{{item.UrlLink}}"><div class="item__thumb"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Image}}?h=160&w=280" alt="{{item.Name}}"></div><div class="item__main"><div class="group">{{item.Category}}</div><h2 class="h2 h2--bold h2--lowercase" ng-if="!item.CertificateName && !item.CertificateImage">{{item.Name}}</h2><div class="certificate__container certificate__container--single" ng-if="item.CertificateName && item.CertificateImage"><h2 class="h2 h2--bold h2--lowercase"><span>{{item.Name}}</span> <span class="certificate certificate--single"><i class="certificate__item certificate__item--h2" style="background-image:url(\'{{::$ctrl.constants.cdnHost}}{{::item.CertificateImage}}?mw=20\');"></i></span></h2></div><div class="item-location"><i class="icon icon--pin"></i><div>{{item.CountryName ? item.RegionName + \', \' + item.CountryName : item.RegionName}}</div></div></div></a></div></div></div><div class="explore-more__view-all"><button ng-if="!$ctrl.exploreLoading && !$ctrl.exploreLastPage" class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.viewMore()">VIEW MORE</button> <button ng-if="$ctrl.exploreLoading" class="btn btn--no-bgcolor btn--center"><i class="fa fa-spinner fa-spin"></i></button></div></div>');$templateCache.put('/content/scripts/app/components/shared/events/ta-event-card-desktop.html','<div class="item__body"><div class="item__main" ng-if="$ctrl.event.Image != null"><div class="rating-star rating-star--absolute"><ta-rating-control open-rating="$ctrl.tryOpenRating($ctrl.event)" is-rated="$ctrl.isEventRated()" rating-data="$ctrl.event.details"></ta-rating-control></div><a href="{{$ctrl.event.UrlLink}}" target="_blank"><img class="thumb" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.event.Image}}?width=800&height=513"></a></div><div class="item__main" ng-if="$ctrl.event.Image == null"><div class="rating-star rating-star--absolute"><ta-rating-control open-rating="$ctrl.tryOpenRating($ctrl.event)" is-rated="$ctrl.isEventRated()" rating-data="$ctrl.event.details"></ta-rating-control></div><a href="{{$ctrl.event.UrlLink}}" target="_blank" ng-if="$ctrl.event.Image == null"><img class="thumb" ta-lazy-load lazy-source="random"></a></div><div class="popular-dishes--event"><div class="popular-dish"><div class="desc"><a href="{{$ctrl.event.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{$ctrl.event.Name}}</h3></a><div class="item-location"><i class="icon icon--pin"></i> <span ng-if="!$ctrl.event.RegionUrlLink">{{$ctrl.event.RegionName}}</span> <a class="region-link" ng-href="{{$ctrl.event.RegionUrlLink}}" target="_blank">{{$ctrl.event.RegionName}}</a></div><div class="item-location"><i class="icon icon--calendar"></i><div ng-class="$ctrl.getDateClass($ctrl.event.Date, \'event-card__date--now\', \'event-card__date--exact\')">{{$ctrl.event.Date.DisplayDate}}</div><div class="event-card__date-description" ng-if="$ctrl.event.Date.IsNow || $ctrl.event.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime($ctrl.event.Date)}}</span></div></div><div class="rating-box"><ta-collection-rating-desktop item="$ctrl.event.details"></ta-collection-rating-desktop></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/events/ta-event-desktop.html','<div class="popular-dish"><a href="{{$ctrl.event.UrlLink}}" target="_blank" class="thumb" ng-if="$ctrl.event.Image != null"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.event.Image}}?w=236&h=164"></a> <a href="{{$ctrl.event.UrlLink}}" target="_blank" class="thumb" ng-if="$ctrl.event.Image == null" ng-style="{\'background-image\': \'url(\\\'{{$ctrl.randomImageUrl}}\\\')\'}"></a><div class="desc"><a href="{{$ctrl.event.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{$ctrl.event.Name}}</h3></a><div class="item-location"><i ng-if="!($ctrl.regionLevel === $ctrl.regionLevels.Undefined || $ctrl.regionLevel === $ctrl.regionLevels.Continent)" class="icon icon--pin"></i> <img ng-if="$ctrl.regionLevel === $ctrl.regionLevels.Undefined || $ctrl.regionLevel === $ctrl.regionLevels.Continent" class="item-location__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.event.CountryEmblem}}?mh=16"> <span ng-if="!$ctrl.event.RegionUrlLink">{{::$ctrl.getEventLocationName($ctrl.event.CountryName, $ctrl.event.RegionName)}}</span> <a class="region-link" ng-href="{{$ctrl.event.RegionUrlLink}}" target="_blank">{{::$ctrl.getEventLocationName($ctrl.event.CountryName, $ctrl.event.RegionName)}}</a></div><div class="item-location"><i class="icon icon--calendar"></i><div ng-class="$ctrl.getDateClass($ctrl.event.Date, \'event-card__date--now\', \'event-card__date--exact\')">{{::$ctrl.getExactDisplayDate($ctrl.event)}}</div><div class="event-card__date-description" ng-if="$ctrl.event.Date.IsNow || $ctrl.event.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime($ctrl.event.Date)}}</span></div></div><div class="rating-box"><ta-home-item-rating-desktop item="$ctrl.event"></ta-home-item-rating-desktop></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/events/ta-event-horizontal-mobile.html','<div class="event-horizontal-card__list-item__body"><div class="event-horizontal-card__list-item__main" ng-if="$ctrl.event.Image != null"><div class="event-horizontal-card__list-item-image"><div class="event-horizontal-card__list-item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating($ctrl.event)" is-rated="$ctrl.isEventRated()" rating-data="$ctrl.event.details"></ta-rating-control></div><a href="{{$ctrl.event.UrlLink}}" target="_blank"><img class="thumb" ta-lazy-load lazy-source="{{$ctrl.constants.cdnHost}}{{$ctrl.event.Image}}?width=800&height=513"></a></div></div><div class="event-horizontal-card__list-item__main" ng-if="$ctrl.event.Image == null"><div class="event-horizontal-card__list-item-image"><div class="event-horizontal-card__list-item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating($ctrl.event)" is-rated="$ctrl.isEventRated()" rating-data="$ctrl.event.details"></ta-rating-control></div><a href="{{$ctrl.event.UrlLink}}" target="_blank"><img class="thumb" ta-lazy-load lazy-source="random"></a></div></div><div class="event-horizontal-card__list-item__info"><div class="event-horizontal-card__list-item-category" ng-if="$ctrl.event.label">{{$ctrl.event.label}}</div><a href="{{$ctrl.event.UrlLink}}" target="_blank"><h2 class="h2 h2--bold h2--lowercase">{{$ctrl.event.Name}}</h2></a><div class="event-horizontal-card__list-item-location"><i class="icon icon--pin"></i> <span ng-if="!$ctrl.event.RegionUrlLink">{{$ctrl.event.RegionName}}</span> <a class="region-link" ng-href="{{$ctrl.event.RegionUrlLink}}" target="_blank">{{$ctrl.event.RegionName}}</a></div><div class="event-horizontal-card__list-item-location event-detail__time" ng-if="$ctrl.event.Date"><div class="event-detail__calendar-container"><i class="icon icon--calendar"></i><div ng-class="$ctrl.getDateClass($ctrl.event.Date, \'event-detail__date--now\', \'event-detail__date--exact\')">{{$ctrl.getExactDisplayDate($ctrl.event)}}</div></div><div class="event-detail__date-description" ng-if="$ctrl.event.Date.IsNow || $ctrl.event.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime($ctrl.event.Date)}}</span></div></div></div><ta-home-item-rating class="hide-rating" item="$ctrl.event.details"></ta-home-item-rating></div>');$templateCache.put('/content/scripts/app/components/shared/events/ta-event-mobile.html','<div class="popular-dish"><a href="{{$ctrl.event.UrlLink}}" target="_blank" class="thumb" ng-if="$ctrl.event.Image != null"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.event.Image}}?w=236&h=164"></a> <a href="{{$ctrl.event.UrlLink}}" target="_blank" class="thumb" ng-if="$ctrl.event.Image == null" ng-style="{\'background-image\': \'url(\\\'{{$ctrl.randomImageUrl}}\\\')\'}"></a><div class="desc"><a href="{{$ctrl.event.UrlLink}}" target="_blank"><h3 class="h3 h3--large">{{$ctrl.event.Name}}</h3></a><div class="item-location"><i ng-if="!($ctrl.regionLevel === $ctrl.regionLevels.Undefined || $ctrl.regionLevel === $ctrl.regionLevels.Continent)" class="icon icon--pin"></i> <img ng-if="$ctrl.regionLevel === $ctrl.regionLevels.Undefined || $ctrl.regionLevel === $ctrl.regionLevels.Continent" class="item-location__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.event.CountryEmblem}}?mh=16"> <span ng-if="!$ctrl.event.RegionUrlLink">{{::$ctrl.getEventLocationName($ctrl.event.CountryName, $ctrl.event.RegionName)}}</span> <a class="region-link" ng-href="{{$ctrl.event.RegionUrlLink}}" target="_blank">{{::$ctrl.getEventLocationName($ctrl.event.CountryName, $ctrl.event.RegionName)}}</a></div><div class="item-location event-detail__time" ng-if="$ctrl.event.Date"><div class="event-detail__calendar-container"><i class="icon icon--calendar"></i><div ng-class="$ctrl.getDateClass($ctrl.event.Date, \'event-detail__date--now\', \'event-detail__date--exact\')">{{::$ctrl.getExactDisplayDate($ctrl.event)}}</div></div><div class="event-detail__date-description" ng-if="$ctrl.event.Date.IsNow || $ctrl.event.Date.UpcomingInDays"><i class="dot"></i> <span>{{$ctrl.getExactTime($ctrl.event.Date)}}</span></div></div><div class="rating-box"><ta-home-item-rating item="$ctrl.event"></ta-home-item-rating></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-desktop.html','<div class="food-ingredients food-ingredients--scroll" ng-class="{ \'food-ingredients--redesign\' : $ctrl.isRecipe }"><ul class="food-ingredients__list" id="{{$ctrl.listId}}" ng-class="{ \'food-ingredients__list--static\' : !$ctrl.includeHorizontalScroll() }" ta-horizontal-scroll-drag disabled="$ctrl.disableScroll" active-class="\'food-ingredients__list--scrolling\'"><li class="food-ingredients__item" ng-repeat="foodIngredient in $ctrl.items track by $index" ng-if="foodIngredient.Image && foodIngredient.Image.Image"><a class="food-ingredients__link" ng-href="{{::foodIngredient.UrlLink}}" target="_blank"><div class="food-ingredients__image-wrapper"><img class="food-ingredients__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{foodIngredient.Image.Image}}?h=120&w=120" alt="{{foodIngredient.Name}}"> <span class="food-ingredients__or" ng-if="foodIngredient.hasSibling">OR</span></div><span class="food-ingredients__name">{{foodIngredient.Name}}</span></a></li></ul><div ng-if="$ctrl.isRecipe && $ctrl.includeHorizontalScroll()" class="slider-bg--right"></div><i ng-if="$ctrl.includeHorizontalScroll() && $ctrl.isRecipe" ng-click="$ctrl.scroll(\'left\')" class="icon icon__big-arrow icon__big-arrow-left--redesign"></i> <i ng-if="$ctrl.includeHorizontalScroll() && $ctrl.isRecipe" ng-click="$ctrl.scroll(\'right\')" class="icon icon__big-arrow icon__big-arrow-right--redesign"></i> <i ng-if="$ctrl.includeHorizontalScroll() && !$ctrl.isRecipe" ng-click="$ctrl.scroll(\'left\')" class="icon icon__scroll-arrow icon__scroll-arrow--left"></i> <i ng-if="$ctrl.includeHorizontalScroll() && !$ctrl.isRecipe" ng-click="$ctrl.scroll(\'right\')" class="icon icon__scroll-arrow icon__scroll-arrow--right"></i></div>');$templateCache.put('/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-mini.html','<div class="mini-ingredients"><ul class="mini-ingredients__list" ng-class="{ \'food-ingredients__list\' : !$ctrl.limitTo }"><li class="mini-ingredients__item" ng-repeat="foodIngredient in $ctrl.eligibleItems" ng-if="foodIngredient.Image && foodIngredient.Image.Image"><a class="mini-ingredients__link" ng-href="{{::foodIngredient.UrlLink}}" title="{{::foodIngredient.Name}}" target="_blank"><div class="mini-ingredients__image-wrapper"><img class="mini-ingredients__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{foodIngredient.Image.Image}}?h=120&w=120" lazy-alt="{{::foodIngredient.Name}}"> <span class="mini-ingredients__or" ng-if="foodIngredient.hasSibling && $ctrl.eligibleItems[$index + 1]">OR</span></div><span ng-if="$ctrl.includeName" class="mini-ingredients__name">{{::foodIngredient.Name}}</span></a></li></ul></div>');$templateCache.put('/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-mobile.html','<div class="food-ingredients"><ul class="food-ingredients__list"><li class="food-ingredients__item" ng-repeat="foodIngredient in $ctrl.items" ng-if="foodIngredient.Image && foodIngredient.Image.Image"><a class="food-ingredients__link" ng-href="{{::foodIngredient.UrlLink}}" target="_blank"><div class="food-ingredients__image-wrapper"><img class="food-ingredients__image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{foodIngredient.Image.Image}}?h=120&w=120" lazy-alt="{{::foodIngredient.Name}}"> <span class="food-ingredients__or" ng-if="foodIngredient.hasSibling">OR</span></div><span class="food-ingredients__name">{{::foodIngredient.Name}}</span></a></li></ul></div>');$templateCache.put('/content/scripts/app/components/shared/horizontal-loader/ta-horizontal-loader.html','<div class="horizontal-loader" ng-style="{ \'width\' : $ctrl.percentage+\'%\' }"></div>');$templateCache.put('/content/scripts/app/components/shared/food-order/ta-mobile-food-order.html','<div class="food-order"><div class="sort-by"><div class="dropdown"><div class="drop-btn" ng-click="$ctrl.toggleDropdown($event)">{{$ctrl.selectedOption}} <span class="icon icon--arrow--down-gray"></span></div><div class="dropdown-box-alt" ng-if="$ctrl.isDropdownOpen"><ul class="dropdown__list"><li class="dropdown__list-item" ng-repeat="option in $ctrl.options" ng-click="$ctrl.orderChanged(option.value)">{{option.name}}</li></ul></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/image-gallery/ta-image-gallery-desktop.html','<div ng-if="!$ctrl.isEmpty" class="swiper-container"><div class="swiper-wrapper"><div ng-if="photo.Image" class="swiper-slide" ng-repeat="photo in $ctrl.photos track by $index"><img class="img" ta-lazy-load disable="true" lazy-source="{{::$ctrl.constants.cdnHost}}{{photo.Image}}?mw=1300" alt="{{$ctrl.altText}}"><div class="swiper-copyright" ng-class="photo.ImageAuthorUrl ? \'swiper-copyright--redesign\' : \'\'" ng-if="photo.ImageSource && !$ctrl.hideArrowsAndCredits"><a ng-if="photo.ImageAuthorUrl" href="{{photo.ImageAuthorUrl}}" target="_blank" rel="nofollow"><span class="ta ta-instagram-credits" ng-show="photo.IsInstagramSourced"></span> {{photo.ImageSource}}</a> <span ng-if="!photo.ImageAuthorUrl">{{photo.ImageSource}}</span></div></div></div><div ng-if="$ctrl.photos.length > 1 && !$ctrl.hideArrowsAndCredits" class="swiper-button-next"></div><div ng-if="$ctrl.photos.length > 1 && !$ctrl.hideArrowsAndCredits" class="swiper-button-prev"></div><div ng-if="$ctrl.photos.length > 1" class="swiper-pagination"></div></div>');$templateCache.put('/content/scripts/app/components/shared/image-gallery/ta-image-gallery-mobile.html','<div ng-if="!$ctrl.isEmpty" class="image-gallery"><div class="swiper-container"><div class="swiper-wrapper"><div ng-if="photo.Image" class="swiper-slide" ng-class="$ctrl.autoHeight ? \'swiper-slide--auto\' : \'\'" ng-repeat="photo in $ctrl.photos track by $index"><img class="img" ta-lazy-load disable="true" lazy-source="{{::$ctrl.constants.cdnHost}}{{photo.Image}}?w=600" alt="{{$ctrl.altText}}"><div class="swiper-copyright" ng-class="photo.ImageAuthorUrl ? \'swiper-copyright--redesign swiper-copyright--redesign__mobile\' : \'\'" ng-if="photo.ImageSource && !$ctrl.hideImageCredits"><a ng-if="photo.ImageAuthorUrl" href="{{photo.ImageAuthorUrl}}" target="_blank" rel="nofollow"><span class="ta ta-instagram-credits" ng-show="photo.IsInstagramSourced"></span> {{photo.ImageSource}}</a> <span ng-if="!photo.ImageAuthorUrl">{{photo.ImageSource}}</span></div></div></div><div ng-if="$ctrl.photos.length > 1" class="swiper-pagination swiper-pagination-white"></div></div><div class="swiper-rating" ng-if="$ctrl.rating"><ta-rating-control open-rating="$ctrl.startCommentProcess()" is-rated="!!$ctrl.userCommentStatus.comment" rating-data="$ctrl.userCommentStatus" label="\'Rate it\'"></ta-rating-control></div></div>');$templateCache.put('/content/scripts/app/components/shared/image-gallery/ta-popup-gallery-mobile.html','<div modal-directive close-modal="$ctrl.closeModal()"><div class="modal modal--floating"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-cross--white close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="image-gallery"><div class="swiper-container"><div ng-if="!$ctrl.isEmpty" class="swiper-wrapper"><div class="swiper-slide" ng-repeat="photo in $ctrl.photos track by $index"><img ng-attr-noprerender="{{$index !== 0}}" class="img" ta-lazy-load disable="true" lazy-source="{{::$ctrl.constants.cdnHost}}{{photo.Image}}?w=600&h=450" alt="{{$ctrl.altText}}"><div class="swiper-copyright" ng-if="photo.ImageSource"><a ng-if="photo.ImageAuthorUrl" href="{{photo.ImageAuthorUrl}}" target="_blank" rel="nofollow">{{photo.ImageSource}}</a> <span ng-if="!photo.ImageAuthorUrl">{{photo.ImageSource}}</span></div></div></div><div ng-if="$ctrl.photos.length > 1" class="swiper-pagination swiper-pagination-white"></div></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/location-prompt/ta-location-prompt-mobile.html','<div><div ng-if="$ctrl.locationState === \'PROMPT\'" class="location-prompt__container location-prompt__container--shadow"><div class="location-prompt__content"><div class="location-prompt__pin-wrapper"><div class="location-prompt__pin" ng-click="$ctrl.turnOnLocation()"><i class="icon icon--pin"></i></div></div><div class="location-prompt__content--no-location"><p class="info-text">We don\u2019t know your current location.</p><button ng-click="$ctrl.turnOnLocation()" class="location-prompt__button">Turn on location services</button></div></div></div><div ng-if="$ctrl.locationState === \'DENIED\'" class="location-prompt__container location-prompt__container--shadow"><div class="location-prompt__content"><div class="location-prompt__content--no-results"><p class="info-text">We see that your device location setting is turned off. Please turn it on so you can see what\u2019s nearby.</p></div></div></div><div ng-if="$ctrl.locationState === \'TROUBLE\'" class="location-prompt__container location-prompt__container--shadow"><div class="location-prompt__content"><div class="location-prompt__pin-wrapper"><div class="location-prompt__pin" ng-click="$ctrl.turnOnLocation()"><i class="icon icon--pin"></i></div></div><div class="location-prompt__content--no-results"><p class="info-text">We are having difficulties determining your location. Please try again.</p><button ng-click="$ctrl.turnOnLocation()" class="location-prompt__button">Turn on location services</button></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/notifications/ta-notification-dialog.html','<div class="notification-dialog"><ng-transclude></ng-transclude></div>');$templateCache.put('/content/scripts/app/components/shared/other-names/ta-other-names.html','<h6 class="h6 h6--center h6--regular"><span class="other-name" ng-click="$ctrl.showRemainingItems()" ng-class="{ \'other-name--last\' : $ctrl.isLastItem($index) }" ng-repeat="item in $ctrl.firstItems track by (item + $index)">{{item}}</span> <span class="other-name" ng-class="{ \'other-name--last\' : $ctrl.remainingItems.length - 1 === $index }" ng-show="$ctrl.showAll" ng-repeat="item in $ctrl.remainingItems track by (item + $index)">{{item}}</span> <span ng-if="!$ctrl.showAll">...</span></h6>');$templateCache.put('/content/scripts/app/components/shared/pairings/ta-pairing-desktop-dynamic.html','<div ng-if="$ctrl.items.Data.length > 0" class="pairing-tips"><h4 class="h4 h4--muli h4--extrabold h4--uppercase">{{$ctrl.title}}</h4><div class="pairing-tips__list"><div ng-repeat="pair in $ctrl.items.Data track by $index" class="item"><div class="item__body"><div class="left"><a ng-href="{{pair.UrlLink}}"><img ng-if="pair.Image" class="thumb" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::pair.Image}}?width=280&height=280"> <img ng-if="!pair.Image" class="thumb" ta-lazy-load lazy-source="/Content/Image/no_image.svg?width=280&height=280"></a></div><div class="right"><a ng-href="{{pair.UrlLink}}"><div class="group">{{pair.Category}}</div><h2 class="h2 h2--medium h2--lowercase h2--bold">{{pair.Name}}</h2></a><div class="text" ng-if="pair.Description" read-more number-of-letters="170" read-more-txt="{{pair.Description}}"></div></div></div></div></div><div class="pairing-tips__view-more" ng-if="$ctrl.items.Data.length !== $ctrl.items.Count"><button class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.loadMore()">VIEW MORE</button></div></div>');$templateCache.put('/content/scripts/app/components/shared/pairings/ta-pairing-desktop.html','<div ng-if="$ctrl.pairings.length > 0" class="pairing-tips"><h4 class="h4 h4--muli h4--extrabold h4--uppercase">{{$ctrl.title}}</h4><div class="pairing-tips__list"><div ng-repeat="pair in $ctrl.pairingItems track by $index" class="item"><div class="item__body"><div class="left"><a ng-href="{{pair.UrlLink}}"><img ng-if="pair.Image" class="thumb" ng-class="{ \'thumb--serve\' : $ctrl.title === \'Serve with\' }" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::pair.Image}}?width=280&height=280"> <img ng-if="!pair.Image" class="thumb" ta-lazy-load lazy-source="/Content/Image/no_image.svg?width=280&height=280"></a></div><div class="right"><a ng-href="{{pair.UrlLink}}"><div class="group">{{pair.Category}}</div><h2 class="h2 h2--medium h2--lowercase h2--bold">{{pair.Name}}</h2></a><div class="text" ng-if="pair.Description" read-more number-of-letters="170" read-more-txt="{{pair.Description}}"></div></div></div></div></div><div class="pairing-tips__view-more"><button ng-if="$ctrl.pairings.length !== $ctrl.pairingItems.length" class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.loadMore()">VIEW MORE</button></div></div>');$templateCache.put('/content/scripts/app/components/shared/pairings/ta-pairing-mobile.html','<section class="pairing-tips" ng-class="{ \'pairing-tips--part-of\' : $ctrl.title === \'Part of\' }" ng-if="$ctrl.pairings.length > 0"><h4 class="h4 h4--muli h4--uppercase h4--bold">{{$ctrl.title}}</h4><ul class="list"><li class="item" ng-repeat="pair in $ctrl.pairings track by $index"><div class="item-wrap"><div class="food-types__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(pair)" is-rated="$ctrl.isFoodRated(pair)" rating-data="pair.details" gray="true"></ta-rating-control></div><a ng-href="{{pair.UrlLink}}"><div class="food-types__item-image"><img class="image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::pair.Image}}?h=160&w=160" ng-if="pair.Image"> <img class="no_image" ta-lazy-load lazy-source="/Content/Image/no_image.svg?h=160&w=160" ng-if="!pair.Image"></div></a><div class="food-types__item-category">{{pair.Category}}</div><div class="food-types__item-name"><a ng-href="{{pair.UrlLink}}"><h2 class="h2 h2--center h2--bold h2--lowercase">{{pair.Name}}</h2></a></div><div class="food-types__item-score" ng-class="{ \'food-types__item-score--na\' : pair.details.ValidScoreCount < 5 }"><ta-home-item-rating item="pair.details"></ta-home-item-rating></div></div></li></ul></section>');$templateCache.put('/content/scripts/app/components/shared/progress-bar/ta-progress-bar-shared.html','<div class="progress-bar--wrapper" ng-if="!$ctrl.isSignedIn()"><p ng-if="!$ctrl.userDash" class="progress-bar--txt">You tried <span>{{$ctrl.dishCommentsNumber}}/{{$ctrl.total}} ({{$ctrl.percent}}%)</span> {{$ctrl.title ? $ctrl.title : \'food\'}}</p><p ng-if="$ctrl.userDash" class="progress-bar--txt"><span>{{$ctrl.tried}}/{{$ctrl.total}}{{$ctrl.tried === 1 ? \' food\' : \' foods\'}} tried ({{($ctrl.tried / $ctrl.total * 100) | number:0}}%). Your rating: {{$ctrl.averageScore | number:2}}</span></p><div class="progress-bar--element"><span ng-if="!$ctrl.userDash" class="progress-bar--loading" ng-style="{ \'width\': $ctrl.percent + \'%\' }"></span> <span ng-if="$ctrl.userDash" class="progress-bar--loading" ng-style="{ \'width\': ($ctrl.tried / $ctrl.total * 100 | number:0) + \'%\' }"></span></div></div><div class="progress-bar--wrapper" ng-if="$ctrl.isSignedIn()"><a class="progress-bar--txt progress-bar--txt-hover" ng-click="$ctrl.openLogin()"><span>Log in</span> to track how many foods you\u2019ve tried.</a><div class="progress-bar--element"></div></div>');$templateCache.put('/content/scripts/app/components/shared/progress-circle/ta-progress-circle.html','<div class="progress-circle"><div class="set-size charts-container"><div class="pie-wrapper" ng-class="$ctrl.percentageClass"><span class="label">{{ $ctrl.percentage >= 1 ? ($ctrl.percentage | number:0) : $ctrl.percentage }}%</span><div class="pie"><div class="left-side half-circle"></div><div class="right-side half-circle"></div></div><div class="shadow"></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/range-slider/ta-range-slider.html','<div class="range-slider-wrapper"><p class="recipe-range-heading">{{$ctrl.rangeSliderName}}</p><div class="recipe-range-slider {{$ctrl.uniqueClass}}"><input class="{{$ctrl.uniqueClass}}" type="range" name="range" min="1" max="{{$ctrl.maxSteps}}" steps="1" value="1"></div><ul class="range-labels"><li ng-repeat="label in $ctrl.labels">{{label.name}}</li></ul></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-desktop-basic.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{$ctrl.rateItText}}</span></div><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating ng-if="$ctrl.type === \'collection\'" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryClick()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.addToList(\'add\')"><div class="rating-card__action-icon"><i class="icon icon--plus"></i></div><span class="rating-actions__item-text">Favorite?</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.removeFromList()"><div class="rating-card__action-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Favorite</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-desktop-flex.html','<div class="rating-actions" ng-class="$ctrl.template-column ? \'rating-actions--column\' : \'rating-actions--row\'"><div class="rating-actions__item" ng-class="$ctrl.template-column ? \'rating-actions__item-bottom\' : \'\'" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.userCommentStatus.comment.RatingScore / 2 | number:1}}</span></div><div class="rating-actions__item" ng-class="$ctrl.template-column ? \'rating-actions__item-bottom\' : \'\'" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item" ng-cloak ng-class="{\'rating-actions__item-bottom\' : $ctrl.template-column, \'rating-actions__item-commented\' : $ctrl.userCommentStatus.comment}" ng-click="($ctrl.userCommentStatus.comment == null || $ctrl.userCommentStatus.comment == undefined) && $ctrl.wantsToTryClick()"><div ng-cloak class="rating-actions__item-icon"><i ng-cloak class="icon icon__bookmark" ng-class="{\'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry && ($ctrl.userCommentStatus.comment == null || $ctrl.userCommentStatus.comment == undefined), \'icon__bookmark--commented\' : $ctrl.userCommentStatus.wantsToTry && ($ctrl.userCommentStatus.comment != null || $ctrl.userCommentStatus.comment != undefined), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled()}"></i></div><span ng-cloak class="rating-actions__item-text" ng-class="{\'rating-actions__item-text--rated\' : $ctrl.userCommentStatus.wantsToTry && ($ctrl.userCommentStatus.comment == null || $ctrl.userCommentStatus.comment == undefined), \'rating-actions__item-text--commented\' : $ctrl.userCommentStatus.wantsToTry && $ctrl.userCommentStatus.comment != null || $ctrl.userCommentStatus.comment != undefined}">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-actions__item" ng-class="$ctrl.template-column ? \'rating-actions__item-bottom\' : \'\'" ng-click="$ctrl.addToList(\'add\')"><div class="rating-actions__item-icon"><i class="icon icon--plus"></i></div><span class="rating-actions__item-text">Add to list</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-actions__item" ng-class="$ctrl.template-column ? \'rating-actions__item-bottom\' : \'\'" ng-click="$ctrl.removeFromList()"><div class="rating-actions__item-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Added to list</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-desktop.html','<div class="rating-actions"><div class="rating-actions__item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-actions__item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.wantsToTryClick()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-actions__item-text" ng-class="{ \'rating-actions__item-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.addToList(\'add\')"><div class="rating-actions__item-icon"><i class="icon icon--plus"></i></div><span class="rating-actions__item-text">Add to list</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.removeFromList()"><div class="rating-actions__item-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Added to list</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-mobile.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating ng-if="$ctrl.type === \'collection\'" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryClick()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.addToList(\'add\')"><div class="rating-card__action-icon"><i class="icon icon--plus"></i></div><span class="rating-card__action-text">Favorite?</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.removeFromList()"><div class="rating-card__action-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Favorite</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-desktop.html','<div class="rating-actions"><div class="rating-actions__item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-actions__item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.wantsToTryClick()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-actions__item-text" ng-class="{ \'rating-actions__item-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.addToList(\'add\')"><div class="rating-actions__item-icon"><i class="icon icon--plus"></i></div><span class="rating-actions__item-text">Add to list</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.removeFromList()"><div class="rating-actions__item-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Added to list</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-mobile.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryClick()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.addToList(\'add\')"><div class="rating-card__action-icon"><i class="icon icon--plus"></i></div><span class="rating-card__action-text">Favorite?</span></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-card__action-item" ng-click="$ctrl.removeFromList()"><div class="rating-card__action-icon"><i class="icon icon--plus icon--plus--red"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Favorite</span></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-bookmark.html','<ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-buttons-row rating-row--inner rating-control-redesign bookmark-redesign"><div class="rating-buttons-col wanna-try" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon--wanna-try icon--wanna-try__redesign" ng-class="{ \'icon__bookmark--yes--redesign\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-desktop.html','<ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-buttons-row rating-row--inner rating-control-redesign"><div class="rating-buttons-col rated" ng-if="$ctrl.isFoodRated($ctrl.details)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin-checked"></i><p>Rated</p></div><div class="rating-buttons-col rate-it" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin"></i><p>Rate It</p></div><div class="rating-buttons-col wanna-try" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon--wanna-try" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i><p ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled()) }">{{$ctrl.getWannaTryLabel()}}</p></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-buttons-col add-to-list" ng-click="$ctrl.addToList(\'add\')"><i class="icon icon--plus-circle"></i><p class="rating-actions__item-text">Add To List</p></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-buttons-col add-to-list" ng-click="$ctrl.removeFromList()"><i class="icon icon--plus-circle icon--plus-circle-checked-redesign"></i><p class="rating-actions__item-text rating-actions__item-text--rated">Added To List</p></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-mobile.html','<ta-home-item-rating ng-if="$root.userCacheServiceInitialized" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-buttons-row rating-row--inner"><div class="rated" ng-if="$ctrl.isFoodRated($ctrl.details)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin-checked"></i><p>Rated</p></div><div class="rate-it" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin"></i><p>Rate It</p></div><div class="wanna-try" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon--wanna-try" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i><p ng-class="{ \'rating-actions__item-text--rated\' : $ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</p></div><div ng-if="!$ctrl.getFavoritedFood()" class="add-to-list" ng-click="$ctrl.addToList(\'add\')"><i class="icon icon--plus-circle"></i><p ng-if="!$ctrl.getFavoritedFood()">Add To List</p></div><div ng-if="$ctrl.getFavoritedFood()" class="add-to-list" ng-click="$ctrl.removeFromList()"><i class="icon icon--plus-circle icon--plus-circle-checked-redesign"></i><p ng-if="$ctrl.getFavoritedFood()">Added To List</p></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-rate-basic.html','<ta-home-item-rating ng-if="$root.userCacheServiceInitialized" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getFoodRatingScore($ctrl.foodDetails)"></ta-home-item-rating><div><div class="rating-control rating-control--chip rating-control--rated rating-control--outline" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)"><span class="rating-control__text" ng-if="$ctrl.getFoodRatingScore($ctrl.foodDetails)">{{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span> <i class="icon icon__rate-checked"></i></div><div class="rating-control rating-control--extra-opacity" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)"><i class="icon icon__rate-check icon__rate-check--gray"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-rate.html','<ta-home-item-rating ng-if="$ctrl.isMobile && $root.userCacheServiceInitialized" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-row--inner rating-control-redesign" ng-class="{\'rating-buttons-row\' : !$ctrl.isMobile, \'rating-buttons-row-mobile\' : $ctrl.isMobile}"><div class="rating-col rating-preview"><span class="rating-star" style="--rating: {{ $ctrl.ratingDataCard }}" aria-label="Rating of this product is {{ $ctrl.ratingDataCard }} out of 5."></span><p ng-if="$ctrl.ratingDataCard == 0 && $ctrl.ratingDataCard < 0.5" class="rating-not-a-number">n/a</p><p ng-if="$ctrl.ratingDataCard != 0 && $ctrl.ratingDataCard > 0.5" class="rating-num">{{ $ctrl.ratingDataCard | number:1 }}</p></div><div class="rating-buttons-col rating-col rated rate-it-action" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon__rate-checked icon__rate-checked--redesign"></i><p class="rating-control__text">{{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</p></div><div class="rating-buttons-col rating-col rate-it-action rate-it" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it"></i><p>Rate It</p></div></div><ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen && !$ctrl.isMobile" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-card-basic.html','<div class="rating-card rating-card--food"><div class="rating-card__review"><div class="rating-card__review-main"><ta-comment-label user-comment-status="$ctrl.userCommentStatus"></ta-comment-label></div><div class="rating-card__review-likes" ng-if="!$ctrl.actions.hideLikes"><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Like</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.like.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.like.value}}</span></div><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Indifferent</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.indifferent.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.indifferent.value}}</span></div><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Don\'t like</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.dontlike.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.dontlike.value}}</span></div></div></div><div ng-if="$ctrl.badgesForDisplay && $ctrl.badgesForDisplay.length" class="rating-card__rating"><a href="{{badge.UrlLink}}" target="_blank" class="rating-card__rating-item" ng-repeat="badge in $ctrl.badgesForDisplay"><span class="rating-card__rating-item-position">{{$ctrl.getBadge(badge).position}}</span> <span class="rating-card__rating-item-text">{{$ctrl.getBadge(badge).text}}</span></a><div ng-if="$ctrl.badges.length !== $ctrl.badgesForDisplay.length" ng-click="$ctrl.loadMoreBadges()" class="rating-card__rating-more">MORE RANKINGS</div></div><ta-rating-actions ng-if="$ctrl.platform === \'mobile\'" template="mobile" actions="$ctrl.actions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions><ta-rating-actions ng-if="$ctrl.platform === \'desktop\'" template="desktop-basic" actions="$ctrl.actions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions><ta-rating-actions ng-if="$ctrl.platform === \'desktop-column\'" template="desktop-row" template-column="true" actions="$ctrl.actions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions><div class="rating-card__summary" ng-if="!$ctrl.isAnonymous && $ctrl.triedFood"><div class="rating-card__summary-item" ng-if="$ctrl.triedFood.region"><a ng-href="{{::$ctrl.regionUrlLink}}" class="rating-card__summary-text">Tried {{::$ctrl.triedFood.region.Tried}}/{{::$ctrl.triedFood.region.Total}} {{$ctrl.actions.getOrigin()}} {{::$ctrl.foodType}}</a><div ng-if="$ctrl.summaryCircle.region" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.region.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.region"></div></div></div><div class="rating-card__summary-item rating-card__summary-item--bottom" ng-if="$ctrl.triedFood.group"><a ng-href="{{::$ctrl.foodDetails.CategoryUrlLink}}" class="rating-card__summary-text">Tried {{::$ctrl.triedFood.group.Tried}}/{{::$ctrl.triedFood.group.Total}} world\'s {{::$ctrl.foodDetails.CategoryPlural | lowercase}}</a><div ng-if="$ctrl.summaryCircle.group" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.group.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.group"></div></div></div><div class="rating-card__summary-item rating-card__summary-item--bottom" ng-if="$ctrl.triedFood.regionInGroup"><a ng-href="{{::$ctrl.regionUrlLink}}/{{::$ctrl.foodDetails.CategoryUrlLink}}" class="rating-card__summary-text">Tried {{::$ctrl.triedFood.regionInGroup.Tried}}/{{::$ctrl.triedFood.regionInGroup.Total}} {{$ctrl.actions.getOrigin()}} {{::$ctrl.foodDetails.CategoryPlural | lowercase}}</a><div ng-if="$ctrl.summaryCircle.regionInGroup" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.regionInGroup.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.regionInGroup"></div></div></div></div><div class="rating-card__summary" ng-if="$ctrl.isAnonymous && $ctrl.triedFood"><div class="rating-card__summary-text"><span ng-click="$ctrl.login()" class="rating-card__summary-link">Log in</span> <span>to see your stats</span></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/rating-card/ta-rating-card-expanded.html','<section class="rating-card rating-card--food rating-card--expanded"><div class="rating-card__review"><div class="rating-card__review-main"><ta-comment-label user-comment-status="$ctrl.userCommentStatus"></ta-comment-label></div><div class="rating-card__review-likes"><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Like</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.like.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.like.value}}</span></div><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Indifferent</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.indifferent.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.indifferent.value}}</span></div><div class="rating-card__review-likes-item"><span class="rating-card__review-likes-like">Don\'t like</span><div class="rating-card__review-likes-bar" style="background: {{$ctrl.bars.dontlike.level}}"></div><span class="rating-card__review-likes-rating">{{$ctrl.bars.dontlike.value}}</span></div></div></div><div ng-if="$ctrl.badges && $ctrl.badges.length" class="rating-card__badges"><a href="{{badge.UrlLink}}" target="_blank" class="rating-card__badges-item" ng-repeat="badge in $ctrl.badges"><div class="rating-card__badges-item-position">{{$ctrl.getBadgeExpanded(badge).position}}</div><div class="rating-card__badges-item-text">{{$ctrl.getBadgeExpanded(badge).text}}</div></a></div><ta-rating-actions template="desktop-row" actions="$ctrl.actions" user-comment-status="$ctrl.userCommentStatus" type="\'singleItemOnPage\'"></ta-rating-actions><div class="rating-card__summary" ng-if="!$ctrl.isAnonymous && $ctrl.triedFood"><div class="rating-card__summary-item" ng-if="$ctrl.triedFood.region"><a ng-href="{{::$ctrl.regionUrlLink}}" class="rating-card__summary-text">Tried <strong>{{::$ctrl.triedFood.region.Tried}}/{{::$ctrl.triedFood.region.Total}}</strong> {{$ctrl.actions.getOrigin()}} {{::$ctrl.foodType}}</a><div ng-if="$ctrl.summaryCircle.region" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.region.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.region"></div></div></div><div class="rating-card__summary-item" ng-if="$ctrl.triedFood.group"><a ng-href="{{::$ctrl.foodDetails.CategoryUrlLink}}" class="rating-card__summary-text">Tried <strong>{{::$ctrl.triedFood.group.Tried}}/{{::$ctrl.triedFood.group.Total}}</strong> world\'s {{::$ctrl.foodDetails.CategoryPlural | lowercase}}</a><div ng-if="$ctrl.summaryCircle.group" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.group.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.group"></div></div></div><div class="rating-card__summary-item" ng-if="$ctrl.triedFood.regionInGroup"><a ng-href="{{::$ctrl.regionUrlLink}}/{{::$ctrl.foodDetails.CategoryUrlLink}}" class="rating-card__summary-text">Tried <strong>{{::$ctrl.triedFood.regionInGroup.Tried}}/{{::$ctrl.triedFood.regionInGroup.Total}}</strong> {{$ctrl.actions.getOrigin()}} {{::$ctrl.foodDetails.CategoryPlural | lowercase}}</a><div ng-if="$ctrl.summaryCircle.regionInGroup" class="rating-card__summary-circle-wrapper"><span>{{::$ctrl.triedFood.regionInGroup.PercentageTried}}%</span><div class="rating-card__summary-circle" ng-style="$ctrl.summaryCircle.regionInGroup"></div></div></div></div><div class="rating-card__summary" ng-if="$ctrl.isAnonymous && $ctrl.triedFood"><div class="rating-card__summary-text"><span ng-click="$ctrl.login()" class="rating-card__summary-link">Log in</span> <span>to see your stats</span></div></div></section>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-cook-mode-mobile.html','<div class="recipe__cook-mode" ng-show="isSupported" ng-click="cookMode(cookModeSwitch);"><div class="cook-mode-toggle-btn" ng-class="{\'cook-mode-toggle-btn--active\': cookModeSwitch.value}"><span class="cook-mode-toggle-btn-circle" ng-class="{\'cook-mode-toggle-btn-circle--active\': cookModeSwitch.value}"></span></div><div class="cook-mode-right-col"><h4 class="cook-mode-heading">Cook Mode</h4><p class="cook-mode-txt">Prevent my screen from going dark</p></div></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-cooking-tips-desktop.html','<ul><li ng-repeat="tip in $ctrl.cookingTips.Data track by $index" class="tip"><h4 class="recipe__component-title h4 h4--black h4--muli h4--uppercase">{{::tip.Title}}</h4><div read-more number-of-letters="400" read-more-txt="{{tip.Description}}"></div></li></ul><div class="recipe__view-all" ng-if="$ctrl.cookingTips.Count > $ctrl.cookingTips.Data.length"><ta-view-more-button items="$ctrl.cookingTips" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.cookingTipsLoading" on-view-more="$ctrl.loadMoreCookingTips()"></ta-view-more-button></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-cooking-tips-mobile.html','<ul><li ng-repeat="tip in $ctrl.cookingTips.Data track by $index" class="tip"><h3 class="h3 h3--muli h3--capitalize h3--small h3--extrabold">{{tip.Title.toLowerCase()}}</h3><div read-more number-of-letters="400" read-more-txt="{{tip.Description}}"></div></li></ul><div class="recipe__view-all" ng-if="$ctrl.cookingTips.Count > $ctrl.cookingTips.Data.length"><ta-view-more-button items="$ctrl.cookingTips" button-class="\'btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.cookingTipsLoading" on-view-more="$ctrl.loadMoreCookingTips()"></ta-view-more-button></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-recipe-desktop.html','<ta-comment-process ng-if="$ctrl.userCommentStatus.isCommentProcess" details="$ctrl.ratingDetails" rating-callback="$ctrl.refreshUserReview(comment)"></ta-comment-process><ta-dish-desktop-section-image ng-if="$ctrl.previewTitleData" title-data="$ctrl.previewTitleData"></ta-dish-desktop-section-image><div class="dish__tabs" ng-if="$ctrl.recipe"><nav class="tab__nav" id="tabs_main"><ul><li><a ng-href="{{::$ctrl.details.EntityUrlLink}}" target="_self">Overview</a></li><li class="selected"><a ng-href="{{::$ctrl.details.EntityUrlLink}}/recipe" target="_self">Recipe</a></li><li ng-if="$ctrl.entity === \'DISH\'"><a ng-href="{{::$ctrl.details.EntityUrlLink}}/wheretoeat" target="_self">Where to eat</a></li><li ng-if="$ctrl.entity === \'INGREDIENT\'"><a ng-href="{{::$ctrl.details.EntityUrlLink}}/wheretobuy" target="_self">Where to buy</a></li><li><a ng-href="{{::$ctrl.details.EntityUrlLink}}/comments" target="_self">Comments</a></li></ul></nav></div><div class="authentic-recipe" ng-if="$ctrl.recipe"><section class="authentic-recipe__content" ng-if="$ctrl.introduction && $ctrl.isGeneralRecipe"><h3 class="h3 h3--muli h3--black h3--uppercase recipe__left-column">Introduction & history</h3><div class="authentic-recipe__text" read-more number-of-letters="1000" read-more-txt="{{$ctrl.introduction}}"></div></section><section class="authentic-recipe__content authentic-recipe__content--centered" ng-if="$ctrl.details.foodIngredients.isValid && $ctrl.isGeneralRecipe"><h3 class="h3 h3--muli h3--black h3--uppercase recipe__left-column">Main ingredients</h3><div class="authentic-recipe__mini-ingredients"><ta-food-ingredients disable-scroll="true" items="$ctrl.details.foodIngredients.data" template="desktop"></ta-food-ingredients></div></section><section class="recipe__infographic" ng-if="$ctrl.details.InfographicImage.Image && $ctrl.isGeneralRecipe"><div class="recipe__left-column"></div><div class="infographic__container"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.InfographicImage.Image}}?w=1200" alt="{{$ctrl.details.Name}}-infographic"></div></section><section class="recipe__variations-list" ng-if="$ctrl.variations.length > 1"><div class="recipe__variations-list-title"><h4 class="h4 h4--muli h4--black h4--uppercase">Recipe variations</h4></div><ta-variations-list template="desktop" food="$ctrl.details" items="$ctrl.variations" selected-variation-id="$ctrl.selectedVariationId"></ta-variations-list></section><section ng-if="$ctrl.selectedVariation && $ctrl.ratingDetails" ng-class="{ \'recipe__individual-variation\' : !$ctrl.isGeneralRecipe }"><ta-recipe-variation template="desktop" variation="$ctrl.selectedVariation" rating="$ctrl.ratingDetails" video="$ctrl.recipe.YoutubeVideoId"></ta-recipe-variation></section></div><div class="section-divider" ng-if="$ctrl.recipe"><section class="recipe__cooking-tips" ng-if="$ctrl.selectedVariation.Tips.length"><div class="recipe__cooking-tips-container" ng-if="$ctrl.selectedVariation.Tips.length"><div class="recipe__left-column"><h3 class="h3 h3--bold h3--capitalize h3--large">Cooking tips</h3></div><div class="recipe__middle-column"><ta-cooking-tips template="desktop" tips="$ctrl.selectedVariation.Tips"></ta-cooking-tips></div></div></section><section class="recipe__cooking-tips" ng-if="$ctrl.recipe.Tips.length && $ctrl.isGeneralRecipe"><div class="recipe__cooking-tips-container"><div class="recipe__left-column"><h3 class="h3 h3--bold h3--capitalize h3--large" ng-if="!$ctrl.selectedVariation.Tips.length">Cooking tips</h3></div><div class="recipe__middle-column"><ta-cooking-tips template="desktop" tips="$ctrl.recipe.Tips"></ta-cooking-tips></div></div></section><section><div class="recipe__comment-section opinions"><div class="rating-section__card"><div class="opinions__content"><div class="left"><div class="recipe__variations-list-title"><h4 class="h4 h4--muli h4--black h4--uppercase">Ratings and comments</h4></div><ta-rating-card ng-if="$ctrl.rating" template="basic" platform="desktop-column" details="$ctrl.rating" badges="[]" actions="$ctrl.ratingCardActions"></ta-rating-card></div><div class="right"><ta-comments-list comments="$ctrl.reviews" template="desktop"></ta-comments-list></div></div><div class="opinions__options" ng-if="$ctrl.reviews.Count > $ctrl.reviews.Data.length"><ta-view-more-button items="$ctrl.reviews" button-class="\'view-more btn btn--underscore btn--center btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()" class="component-inline-block"></ta-view-more-button></div></div><div class="rating-section__promotion"><div class="promotion promotion--nopadding" ta-google-ad id="TA_MR_DISH_RECIPE-COMMENT-RATING" name="/21703950087/D_TA_300x250" platform="desktop"></div></div></div></section><section ng-if="$ctrl.otherVariations.length"><div class="recipe__variations-list"><div class="recipe__variations-list-title"><h4 class="h4 h4--muli h4--black h4--uppercase">Other variations</h4></div><ta-variations-list template="desktop" food="$ctrl.details" items="$ctrl.otherVariations"></ta-variations-list></div></section><section ng-if="$ctrl.similar.Data.length"><div class="recipe__variations-list"><div class="recipe__variations-list-title"><h4 class="h4 h4--muli h4--black h4--uppercase">Other authentic recipes</h4></div><div class="similar-list"><ta-similar-recipes items="$ctrl.similar.Data" template="desktop"></ta-similar-recipes></div></div></section></div><ta-footer-desktop ng-if="$ctrl.pageStatus.isSectionLoaded"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-recipe-mobile.html','<div id="nav-stick" style="margin-top: 0px; display:none;" ta-show-nav offset="-10" details="$ctrl.navbarDetails" url-links="$ctrl.urlLinks" active-page="$ctrl.pageStatus.page"></div><div id="pg_content_holder" class="content-holder content-holder--subpage" ng-if="$ctrl.recipe"><section class="authentic-recipe"><div class="about-food__preview" ng-class="{ \'about-food__preview--noimage\' : !$ctrl.recipe.Image.Image, \'about-food__preview--justify-start\' : $ctrl.recipe.Image.Image }"><div class="about-food__preview-image-wrap"><div class="about-food__preview-image-img swiper-slide"><img ng-if="$ctrl.recipe.Image.Image" ta-lazy-load ta-lazy-alt="recipe-image" lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.recipe.Image.Image}}?w=600"><div class="swiper-copyright" ng-if="$ctrl.recipe.Image.Source"><a ng-if="$ctrl.recipe.Image.SourceUrl" href="{{$ctrl.recipe.Image.SourceUrl}}" target="_blank" rel="nofollow">{{$ctrl.recipe.Image.Source}}</a> <span ng-if="!$ctrl.recipe.Image.SourceUrl">{{$ctrl.recipe.Image.Source}}</span></div></div></div><div class="about-food__preview" ng-class="{ \'about-food__preview--noimage\' : !$ctrl.recipe.Image.Image }"><div class="about-food__preview-title"><h1 class="h1 h1--center h1--bold"><span>Authentic</span> <span>{{::$ctrl.details.Name}} recipe</span></h1></div><div class="about-food__preview-subtitle"><h2 class="h2--muli h2--regular h2--uppercase">{{::$ctrl.details.RegionName}}, {{::$ctrl.details.CountryName}}</h2></div></div></div><div class="authentic-recipe__content" ng-if="$ctrl.introduction && $ctrl.isGeneralRecipe"><h3 class="h3 h3--muli authentic-recipe__subtitle">Introduction & history</h3><div class="authentic-recipe__text" read-more number-of-letters="200" read-more-txt="{{$ctrl.introduction}}"></div></div><div class="main-ingredients" ng-if="$ctrl.details.foodIngredients.isValid && $ctrl.isGeneralRecipe"><h3 class="h3 h3--muli main-ingredients__type">Main ingredients</h3><div class="authentic-recipe__mini-ingredients"><ta-food-ingredients items="$ctrl.details.foodIngredients.data" template="mobile"></ta-food-ingredients></div></div><div class="recipe__infographic" ng-if="$ctrl.details.InfographicImage.Image && $ctrl.isGeneralRecipe"><div class="infographic__container"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::$ctrl.details.InfographicImage.Image}}?mw=900" alt="{{$ctrl.details.Name}}-infographic"></div></div></section><section class="recipe__variations-list recipe__variations-list--horizontal" ng-class="{ \'recipe__variations-list--top\' : !$ctrl.isGeneralRecipe, \'recipe__variations-list--border-top\' : $ctrl.isGeneralRecipe }" ng-if="$ctrl.variations.length > 1"><div class="recipe__variations-list-title"><h2 class="h2 h2--bold h2--capitalize">Recipe variations</h2></div><ta-variations-list items="$ctrl.variations" template="mobile" food="$ctrl.details" selected-variation-id="$ctrl.selectedVariationId"></ta-variations-list></section><div ng-show="!$ctrl.isVariationLoaded"><img src="/Content/Image/loader.gif"></div><section ng-if="$ctrl.selectedVariation && $ctrl.isVariationLoaded" ng-class="{ \'recipe__individual-variation\' : !$ctrl.isGeneralRecipe && $ctrl.variations.length <= 1 , \'recipe__variation\' : $ctrl.variations.length <= 1 }"><ta-recipe-variation template="mobile" variation="$ctrl.selectedVariation" rating="$ctrl.ratingDetails" video="$ctrl.recipe.YoutubeVideoId"></ta-recipe-variation></section><div class="recipe-backgrounds"><section ng-if="$ctrl.selectedVariation.Tips.length > 0" class="recipe__tips recipe-background"><div class="promotion promotion--notoppadding" "><div ta-google-ad id="TA_MR_RECIPE" name="/21703950087/M_TA_test" platform="mobile"></div></div><div class="recipe__section"><h2 class="h2 h2--bold h2--capitalize">Cooking tips</h2></div><ta-cooking-tips template="mobile" tips="$ctrl.selectedVariation.Tips"></ta-cooking-tips></section><section ng-if="$ctrl.recipe.Tips.length && $ctrl.isGeneralRecipe" class="recipe__tips recipe-background" ng-class="{ \'recipe__tips--no-title\' : $ctrl.selectedVariation.Tips.length }"><div class="promotion promotion--notoppadding" ng-if="!$ctrl.selectedVariation.Tips.length"><div ta-google-ad id="TA_MR_RECIPE" name="/21703950087/M_TA_test" platform="mobile"></div></div><div ng-if="!$ctrl.selectedVariation.Tips.length" class="recipe__section"><h2 class="h2 h2--bold h2--capitalize">Cooking tips</h2></div><ta-cooking-tips template="mobile" tips="$ctrl.recipe.Tips"></ta-cooking-tips></section><section class="recipe__comment-section recipe-background"><div class="opinions-new"><ta-comments-list comments="$ctrl.reviews" template="mobile"></ta-comments-list><div class="btn--padding-vertical" ng-if="$ctrl.reviews.Count > $ctrl.reviews.Data.length"><ta-view-more-button items="$ctrl.reviews" button-class="\'btn btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold\'" is-button-loading="$ctrl.isLoadingComments" on-view-more="$ctrl.loadMoreComments()"></ta-view-more-button></div></div></section><section class="recipe__variations-list recipe__variations-list--horizontal recipe__variations-list--other recipe-background" ng-if="$ctrl.otherVariations.length"><div class="recipe__variations-list-title"><h2 class="h2 h2--bold h2--capitalize">Other variations</h2></div><ta-variations-list items="$ctrl.otherVariations" template="mobile" food="$ctrl.details"></ta-variations-list></section><section ng-if="$ctrl.similar.Data.length" class="recipe__variations-list recipe__variations-list--vertical recipe-background"><a class="similar-list__preview"><div class="similar-list__preview-image" ng-if="$ctrl.previewTitleData.image.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.previewTitleData.image.Image}}?w=600"></div><div class="similar-list__preview-image similar-list__preview-image--random" ng-if="!$ctrl.previewTitleData.image.Image"><img ta-lazy-load lazy-source="random"></div><h2 class="h1 h1--center h1--lowercase">Other authentic recipes</h2></a><div class="similar-list"><ta-similar-recipes items="$ctrl.similar.Data" template="mobile"></ta-similar-recipes></div></section></div><ta-comment-process-mobile ng-if="$ctrl.userCommentStatus.isCommentProcess" details="$ctrl.ratingDetails" rating-callback="$ctrl.refreshUserReview(comment)"></ta-comment-process-mobile></div><ta-footer-mobile ng-show="$ctrl.pageStatus.isSectionLoaded"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-recipe-variation-desktop.html','<div class="recipe__variation recipe__variation--intro"><div class="recipe__variation-intro"><h2 class="h2 h2--large h2--muli h2--black h2--capitalize">{{$ctrl.variation.Name}}</h2><div class="authentic-recipe__preparation" ng-if="$ctrl.variation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>{{$ctrl.getRecipeTime($ctrl.variation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>{{$ctrl.getRecipeTime($ctrl.variation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.variation.Time.RestingTime.CustomLabel}}</span> <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.variation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>{{$ctrl.getRecipeTimeNoMin($ctrl.variation.Time.TotalTime)}}</strong></div></div></div><div class="recipe__variation-text-wrapper"><div class="authentic-recipe__text" ng-bind-html="$ctrl.variation.Description | html"></div><div class="recipe__variation-likes"><div class="rating-card__review-likes"><div class="recipe__rating"><span ng-if="$ctrl.rating.Rating.ValidScoreCount >= 5">{{$ctrl.rating.Rating.DividedScore | number: 1}}</span> <span ng-if="$ctrl.rating.Rating.ValidScoreCount < 5">n/a</span><div class="comment__stars comment__stars--small"><ta-star-score-mobile divided-rating="$ctrl.rating.Rating.ValidScoreCount >= 5 ? $ctrl.rating.Rating.DividedScore : 0" rating="$ctrl.rating.Rating.ValidScoreCount >= 5 ? $ctrl.rating.Rating.Score : 0"></ta-star-score-mobile></div></div><div class="rating-actions--row"><div class="rating-actions__item" ng-if="$ctrl.userCommentStatus.comment" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-actions__item" ng-if="!$ctrl.userCommentStatus.comment" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">Ate it? Rate it</span></div></div></div></div></div><div class="recipe__variation-image" ng-if="$ctrl.variation.Image.Image"><div class="swiper-slide"><img class="img" ta-lazy-load disable="true" lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.variation.Image.Image}}?mw=1300" alt="{{$ctrl.variation.Name}} photo"><div class="swiper-copyright" ng-if="$ctrl.variation.Image.Source"><a ng-if="$ctrl.variation.Image.SourceUrl" href="{{$ctrl.variation.Image.SourceUrl}}" target="_blank" rel="nofollow">{{$ctrl.variation.Image.Source}}</a> <span ng-if="!$ctrl.variation.Image.SourceUrl">{{$ctrl.variation.Image.Source}}</span></div></div></div><div class="recipe__variation-video" ng-if="$ctrl.video"><ta-related-videos template="desktop" videos="[{YoutubeVideoId: $ctrl.video, isSingle: true}]"></ta-related-videos></div></div></div><div class="recipe__variation recipe__variation--components"><div class="recipe__left-column"><div class="title" ng-if="$ctrl.hasComponentPart(\'Ingredients\')"><h3 class="h3 h3--bold h3--capitalize h3--large">Ingredients</h3><span ng-if="$ctrl.variation.Servings">{{$ctrl.variation.Servings}} {{$ctrl.variation.Servings > 1 ? \'servings\' : \'serving\'}}</span></div><ul class="recipe__variation-ingredients-list"><li ng-repeat="component in $ctrl.variation.Components track by $index" ng-if="component.Ingredients.length"><h4 class="recipe__component-title h4 h4--black h4--muli h4--uppercase" ng-if="component.Name !== $ctrl.variation.Name">{{::component.Name}}</h4><div class="recipe__component-item" ng-repeat="ingredient in component.Ingredients track by $index">{{ingredient.Description}}</div></li></ul></div><div class="recipe__middle-column"><div class="title" ng-if="$ctrl.hasComponentPart(\'Steps\')"><h3 class="h3 h3--bold h3--capitalize h3--large">Preparation</h3></div><ul class="recipe__variation-steps"><li ng-repeat="component in $ctrl.variation.Components track by $index" ng-if="component.Steps.length"><div class="recipe__component-title h4--black" ng-if="component.Name !== $ctrl.variation.Name"><h4 class="h4 h4--black h4--muli h4--uppercase">{{::component.Name}}</h4><span class="recipe__component-step-time" ng-if="component.TimeTo"><i class="icon icon--clock"></i> {{component.TimeFrom}}&#39 {{component.TimeTo ? (\' - \' + component.TimeTo + \'\\&#39\') : \'\'}}</span></div><div ng-repeat="step in component.Steps track by $index" class="recipe__component-step"><div class="content">Step {{step.Order + 1}}/{{component.Steps.length}} <span class="recipe__component-step-time" ng-if="step.TimeTo"><i class="icon icon--clock"></i> {{step.TimeFrom}}&#39 {{step.TimeTo ? (\' - \' + step.TimeTo + \'\\&#39\') : \'\'}}</span></div>{{step.Description}}<div class="recipe__component-step-image swiper-slide" ng-if="step.Image.Image"><img ta-lazy-load ta-lazy-alt="step.Description" lazy-source="{{::$ctrl.constants.cdnHost}}{{::step.Image.Image}}?w=600"><div class="swiper-copyright" ng-if="step.Image.Source"><a ng-if="step.Image.SourceUrl" href="{{step.Image.SourceUrl}}" target="_blank" rel="nofollow">{{step.Image.Source}}</a> <span ng-if="!step.Image.SourceUrl">{{step.Image.Source}}</span></div></div></div></li></ul></div><div class="recipe__right-column"><div class="promotion promotion--nopadding" ta-google-ad id="TA_MR_DISH_RECIPE-VARIATION-RATING" name="/21703950087/D_TA_600x300" platform="desktop"></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-recipe-variation-mobile.html','<div class="recipe"><div class="recipe__body"><div class="recipe__rating"><ta-comment-button details="$ctrl.rating" include-rating-control="true"></ta-comment-button></div><h2 class="h1 h1--large h1--muli h1--black">{{$ctrl.variation.Name}}</h2><div class="authentic-recipe__preparation" ng-if="$ctrl.variation.Time.PrepTime.FullMinutes"><div class="authentic-recipe__preparation-item"><div class="authentic-recipe__preparation-item-time">PREP <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.variation.Time.PrepTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.CookTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">COOK <strong>&nbsp;{{$ctrl.getRecipeTime($ctrl.variation.Time.CookTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.RestingTime.FullMinutes"><div class="authentic-recipe__preparation-item-time"><span class="authentic-recipe__preparation-item-label">{{$ctrl.variation.Time.RestingTime.CustomLabel}}</span> <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.variation.Time.RestingTime)}}</strong></div></div><div class="authentic-recipe__preparation-item" ng-if="$ctrl.variation.Time.TotalTime.FullMinutes"><div class="authentic-recipe__preparation-item-time">READY IN <strong>&nbsp;{{$ctrl.getRecipeTimeNoMin($ctrl.variation.Time.TotalTime)}}</strong></div></div></div><div class="recipe__image swiper-slide" ng-if="$ctrl.variation.Image.Image"><img ta-lazy-load ta-lazy-alt="recipe-variation-image" lazy-source="{{::$ctrl.constants.cdnHost}}{{::$ctrl.variation.Image.Image}}?w=600"><div class="swiper-copyright" ng-if="$ctrl.variation.Image.Source"><a ng-if="$ctrl.variation.Image.SourceUrl" href="{{$ctrl.variation.Image.SourceUrl}}" target="_blank" rel="nofollow">{{$ctrl.variation.Image.Source}}</a> <span ng-if="!$ctrl.variation.Image.SourceUrl">{{$ctrl.variation.Image.Source}}</span></div></div><div class="recipe__text recipe__text--noborder" ng-bind-html="$ctrl.variation.Description |html"></div><ta-related-videos ng-if="$ctrl.video" template="mobile" videos="[{YoutubeVideoId: $ctrl.video, isSingle: true}]"></ta-related-videos><section class="recipe__ingredients-section" ng-if="$ctrl.hasComponentPart(\'Ingredients\')"><div class="recipe__section"><div class="for"><strong>Ingredients</strong> <span ng-if="$ctrl.variation.Servings">{{$ctrl.variation.Servings}} {{$ctrl.variation.Servings > 1 ? \'servings\' : \'serving\'}}</span></div></div><ul class="recipe__ingredients"><li ng-repeat="component in $ctrl.variation.Components track by $index" ng-if="component.Ingredients.length"><h4 class="recipe__ingredients-title h4 h4--extrabold h4--muli h4--uppercase" ng-if="component.Name !== $ctrl.variation.Name">{{::component.Name}}</h4><div class="recipe__ingredients-item" ng-repeat="ingredient in component.Ingredients track by $index">{{ingredient.Description}}</div></li></ul></section><section class="recipe__preparation-section" ng-if="$ctrl.hasComponentPart(\'Steps\')"><ta-cook-mode template="mobile"></ta-cook-mode><div class="recipe__section"><h2 class="h2 h2--bold h2--capitalize">Preparation</h2></div><ul class="recipe__steps"><li ng-repeat="component in $ctrl.variation.Components track by $index" ng-if="component.Steps.length"><div class="recipe__steps-title h4--extrabold" ng-if="component.Name !== $ctrl.variation.Name"><h4 class="h4 h4--extrabold h4--muli h4--uppercase">{{::component.Name}}</h4><span class="recipe__steps-time" ng-if="component.TimeTo"><i class="icon icon--clock"></i> {{component.TimeFrom}}&#39 {{component.TimeTo ? (\' - \' + component.TimeTo + \'\\&#39\') : \'\'}}</span></div><div ng-repeat="step in component.Steps track by $index" class="step"><div class="content">Step {{step.Order + 1}}/{{component.Steps.length}} <span class="recipe__steps-time" ng-if="step.TimeTo"><i class="icon icon--clock"></i> {{step.TimeFrom}}&#39 {{step.TimeTo ? (\' - \' + step.TimeTo + \'\\&#39\') : \'\'}}</span></div>{{step.Description}}<div class="recipe__steps-image swiper-slide" ng-if="step.Image.Image"><img ta-lazy-load ta-lazy-alt="step.Description" lazy-source="{{::$ctrl.constants.cdnHost}}{{::step.Image.Image}}?w=600"><div class="swiper-copyright" ng-if="step.Image.Source"><a ng-if="step.Image.SourceUrl" href="{{step.Image.SourceUrl}}" target="_blank" rel="nofollow">{{step.Image.Source}}</a> <span ng-if="!step.Image.SourceUrl">{{step.Image.Source}}</span></div></div></div></li></ul></section></div></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-similar-recipes-desktop.html','<div class="similar-list__container"><div class="similar-list__list"><div class="similar-list__item similar-list__item--redesign" ng-repeat="item in $ctrl.similarItems" id="similar-item-{{$index + 1}}"><div class="similar-list__item-body"><div class="similar-list__thumb"><a ng-href="{{item.EntityUrlLink}}/recipe" target="_self"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=280" alt="{{item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" alt="{{item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__item-rating-redesign rating-control-redesign"><ta-rating-actions-ssr details="item.details" rating-data-card="item.Rating.DividedScore" template="rate-redesign"></ta-rating-actions-ssr><ta-collection-rating-desktop class="rating" item="item.details" style="display: none;"></ta-collection-rating-desktop></div><div class="similar-list__info-text"><h2 class="h2 h2--black h2--lowercase"><a ng-href="{{item.EntityUrlLink}}/recipe" target="_self">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="similar-list__item-label" ng-if="item.Time.TotalTime.FullMinutes">Ready in {{::$ctrl.getRecipeTimeNoMin(item.Time.TotalTime)}}</div></div></div></div></div></div><div class="loader loader--desktop" ng-show="$ctrl.loadMoreSimilarData"><img src="/Content/Image/loader.gif"></div></div><div class="similar-list__view-more" ng-if="$ctrl.showLoadMoreBtn"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">VIEW MORE</button></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-similar-recipes-mobile.html','<div class="similar-list__container"><div class="similar-list__item similar-list__item--redesign" ng-repeat="item in $ctrl.similarItems" id="similar-item-{{$index + 1}}"><div class="similar-list__item-wrapper"><div class="similar-list__thumb"><a ng-href="{{item.EntityUrlLink}}/recipe" target="_self"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=320" alt="{{item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" alt="{{item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__item-rating-redesign rating-control-redesign"><ta-rating-actions-ssr details="item.details" rating-data-card="item.Rating.DividedScore" template="rate-redesign" is-mobile="true"></ta-rating-actions-ssr></div><h2 class="h2 h2--bold h2--lowercase similar-list__info-header"><a ng-href="{{item.EntityUrlLink}}/recipe" target="_self">{{ item.Name }}</a></h2><div class="similar-list__item-preparation" ng-if="item.Time.TotalTime.FullMinutes">Ready in {{::$ctrl.getRecipeTime(item.Time.TotalTime)}}</div></div></div><div class="loader loader--desktop" ng-show="$ctrl.loadMoreSimilarData"><img src="/Content/Image/loader.gif"></div></div></div><div class="food-types__view-more similar-list__view-more" ng-if="$ctrl.showLoadMoreBtn"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">VIEW MORE</button></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-variations-list-desktop.html','<div class="similar-list similar-list--recipe"><ul class="search-results__wheretoeat-list" ng-class="{ \'search-results__wheretoeat-list--scrollable\' : $ctrl.includeHorizontalScroll() }" id="recipe-variations-ul" ta-horizontal-scroll-drag active-class="search-results__wheretoeat-list--scrolling"><li class="similar-list__item search-results__wheretoeat-item" ng-class="{ \'similar-list__item--row\' : $ctrl.items.length <= 2 }" ng-repeat="item in $ctrl.items"><div class="search-results__wheretoeat-item-wrap"><div class="similar-list__thumb" ng-if="$ctrl.hasSomeImages()"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item.details)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{::item.EntityUrlLink}}/recipe{{item.UrlLink ? \'/\' + item.UrlLink : \'\'}}" target="_self" ng-class="{ \'similar-list__image-unrated\' : !$ctrl.isFoodRated(item) }"><img ta-lazy-load ng-if="item.Image.Image" lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=560" lazy-alt="{{::item.Name}}"> <img ta-lazy-load ng-if="!item.Image.Image" lazy-source="random" lazy-alt="{{::item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-collection-rating-desktop class="rating" item="item.details"></ta-collection-rating-desktop></div><h3 class="h3 h3--lowercase h3--black"><a ng-href="{{::item.EntityUrlLink}}/recipe{{item.UrlLink ? \'/\' + item.UrlLink : \'\'}}" target="_self">{{::item.Name}}</a></h3><div class="similar-list__item-label" ng-if="item.Time.TotalTime.FullMinutes">READY IN {{$ctrl.getRecipeTimeNoMin(item.Time.TotalTime)}}</div><div class="similar-list__item-description" ng-if="item.Description" ng-bind-html="item.Description | html"></div><div class="triangle-bottom" ng-if="$ctrl.selectedVariationId === item.RecipeVariationId"></div></div></div></li></ul><div class="similar-list__scroll-circle similar-list__scroll-circle--left" ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'left\')"><i class="icon icon__big-arrow icon__big-arrow--gray icon__big-arrow-left"></i></div><div class="similar-list__scroll-circle similar-list__scroll-circle--right" ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'right\')"><i class="icon icon__big-arrow icon__big-arrow--gray icon__big-arrow-right"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/recipe/ta-variations-list.html','<div class="similar-list"><ul class="search-results__wheretoeat-list"><li class="similar-list__item similar-list__item--column search-results__wheretoeat-item" ng-repeat="item in $ctrl.items"><div class="search-results__wheretoeat-item-wrap similar-list__item--column"><div class="similar-list__thumb" ng-if="$ctrl.hasSomeImages()"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item.details)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{::item.EntityUrlLink}}/recipe{{item.UrlLink ? \'/\' + item.UrlLink : \'\'}}" target="_self" ng-class="{ \'similar-list__image-unrated\' : !$ctrl.isFoodRated(item.details) }"><img ta-lazy-load ng-if="item.Image.Image" lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=400" lazy-alt="{{::item.Name}}"> <img ta-lazy-load ng-if="!item.Image.Image" lazy-source="random" lazy-alt="{{::item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><h2 class="h2 h2--bold h2--lowercase h2--black"><a ng-href="{{::item.EntityUrlLink}}/recipe{{item.UrlLink ? \'/\' + item.UrlLink : \'\'}}" target="_self">{{::item.Name}}</a></h2><div class="similar-list__item-description similar-list__item-description--uppercase" ng-if="item.Time.TotalTime.FullMinutes">READY IN {{::$ctrl.getRecipeTimeNoMin(item.Time.TotalTime)}}</div><div class="similar-list__item-description" ng-if="item.Description" ng-bind-html="item.Description | html"></div><div class="triangle-bottom" ng-if="$ctrl.selectedVariationId === item.RecipeVariationId"></div></div></div></li></ul></div>');$templateCache.put('/content/scripts/app/components/shared/related-news/ta-related-news-desktop.html','<div class="related-news__container"><h4 class="h4 h4--muli h4--extrabold h4--uppercase">RELATED LINKS</h4><div class="related-news__items"><a ng-repeat="news in $ctrl.newsArticles track by $index" ng-if="news.LinkUrl && news.Title" href="{{::news.LinkUrl}}" target="_blank" class="related-news__item"><div ng-if="news.Source" class="related-news__item-source">{{::news.Source}}</div><div ng-if="news.Title" class="related-news__item-title"><h2 class="h2 h2--muli h2--bold h2--lowercase">{{::news.Title}}</h2></div><div ng-if="news.Description" class="related-news__item-content">{{::news.Description}}</div></a></div></div>');$templateCache.put('/content/scripts/app/components/shared/related-news/ta-related-news-mobile.html','<div class="related-news__container"><h4 class="h4 h4--muli h4--bold h4--uppercase">RELATED LINKS</h4><a ng-repeat="news in $ctrl.newsArticles" ng-if="news.LinkUrl && news.Title" href="{{::news.LinkUrl}}" target="_blank" class="related-news__item"><div ng-if="news.Source" class="related-news__item-source">{{::news.Source}}</div><div ng-if="news.Title" class="related-news__item-title"><h2 class="h2 h2--muli h2--bold h2--lowercase">{{::news.Title}}</h2></div><div ng-if="news.Description" class="related-news__item-content">{{::news.Description}}</div></a></div>');$templateCache.put('/content/scripts/app/components/shared/related-news/ta-related-videos-desktop.html','<div class="related-videos__container"><h4 ng-if="!$ctrl.mainVideo.isSingle" class="h4 h4--muli h4--bold h4--uppercase">RELATED VIDEOS</h4><ul ng-if="$ctrl.videos.length" class="related-videos__items"><li ng-repeat="video in $ctrl.videos" class="related-videos__item" ng-click="$ctrl.openVideoModal($event, video)"><div class="related-videos__thumbnail"><div class="related-videos__thumbnail-play"><i class="icon icon__play-button"></i></div><img ta-lazy-load lazy-source="https://img.youtube.com/vi/{{video.YoutubeVideoId}}/maxresdefault.jpg"></div><div ng-if="video.Source && video.Title" class="related-videos__content"><span ng-if="video.Source" class="related-videos__item-source">{{::video.Source}}</span><h3 class="h3 h3--lowercase h3--semibold h3--muli">{{::video.Title}}</h3></div></li></ul><div class="related-videos__popup" ng-if="$ctrl.openedVideoModal"><div modal-directive close-modal="$ctrl.closeVideoModal()" class="modal"><div class="modal__container modal__container--full-screen"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeVideoModal()"></i></div><div class="modal__body"><iframe class="related-videos__embedd" click-outside="$ctrl.closeVideoModal()" exclude="close-modal" ng-src="{{$ctrl.trustSrc(\'https://www.youtube.com/embed/\' + $ctrl.selectedVideo.YoutubeVideoId)}}"></iframe></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/related-news/ta-related-videos-mobile.html','<div class="related-videos__container"><h4 ng-if="!$ctrl.mainVideo.isSingle" class="h4 h4--muli h4--bold h4--uppercase">RELATED VIDEOS</h4><div ng-if="$ctrl.mainVideo" ng-click="$ctrl.openVideoModal($event, $ctrl.mainVideo)" class="related-videos__item related-videos__item--main"><div class="related-videos__thumbnail related-videos__thumbnail--main"><div class="related-videos__thumbnail-play"><i class="icon icon__play-button"></i></div><img ta-lazy-load lazy-source="https://img.youtube.com/vi/{{$ctrl.mainVideo.YoutubeVideoId}}/mqdefault.jpg"></div><span ng-if="$ctrl.mainVideo.Source" class="related-videos__item-source">{{::$ctrl.mainVideo.Source}}</span><h3 ng-if="$ctrl.mainVideo.Title" class="h3 h3--large h3--lowercase h3--bold h3--muli">{{::$ctrl.mainVideo.Title}}</h3></div><div ng-if="$ctrl.secondaryVideos.length" class="related-videos__secondary-list"><div ng-repeat="video in $ctrl.secondaryVideos" class="related-videos__item related-videos__item--secondary" ng-click="$ctrl.openVideoModal($event, video)"><div class="related-videos__thumbnail related-videos__thumbnail--secondary"><div class="related-videos__thumbnail-play related-videos__thumbnail-play--secondary"><i class="icon icon__play-button"></i></div><img ta-lazy-load lazy-source="https://img.youtube.com/vi/{{video.YoutubeVideoId}}/mqdefault.jpg"></div><span ng-if="video.Source" class="related-videos__item-source">{{::video.Source}}</span><h3 class="h3 h3--small h3--lowercase h3--bold h3--muli">{{::video.Title}}</h3></div></div><div class="related-videos__popup" ng-if="$ctrl.openedVideoModal"><div modal-directive close-modal="$ctrl.closeVideoModal()" class="modal"><div class="modal__container"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeVideoModal()"></i></div><div class="modal__body"><iframe class="related-videos__embedd" click-outside="$ctrl.closeVideoModal()" exclude="close-modal" ng-src="{{$ctrl.trustSrc(\'https://www.youtube.com/embed/\' + $ctrl.selectedVideo.YoutubeVideoId)}}"></iframe></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/similar-list/ta-similar-list-desktop.html','<div class="similar-list__container" ta-horizontal-load-more handler="$ctrl.viewMore()"><div class="similar-list__list"><div class="similar-list__item" ng-repeat="item in $ctrl.displayedItems"><div class="similar-list__item-body"><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}"><img ng-if="item.Image.Image" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?width=320&height=205" alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" alt="{{::item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__info-text"><div class="group"><a ng-href="{{item.Group.UrlLink}}">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="rating-box" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="item.details"></ta-collection-rating-desktop></div><div class="item-location"><i ng-if="$ctrl.isRegion || (!$ctrl.isRegion && !item.Region.RegionEmblemImage)" class="icon icon--pin"></i> <img ng-if="!$ctrl.isRegion && item.Region.RegionEmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Region.RegionEmblemImage}}"><div>{{$ctrl.getRegionName(item.Region)}}</div></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div></div></div></div></div><div ng-if="$ctrl.displayedItems.length !== $ctrl.items.length" class="similar-list__view-more"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.viewMore()">VIEW MORE</button></div>');$templateCache.put('/content/scripts/app/components/shared/similar-list/ta-similar-list-mobile.html','<div class="similar-list__container" ta-horizontal-load-more handler="$ctrl.viewMore()"><div class="similar-list__item" ng-repeat="item in $ctrl.displayedItems"><div class="similar-list__item-wrapper"><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}"><img ng-if="item.Image.Image" loading="lazy" ng-src="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?width=320&height=205" alt="{{item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" alt="{{item.Name}}"></a></div><div class="similar-list__info"><div class="similar-list__info-text"><div class="group"><a ng-href="{{item.Group.UrlLink}}">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase similar-list__info-header"><a ng-href="{{item.UrlLink}}">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="item-location"><i ng-if="$ctrl.isRegion || (!$ctrl.isRegion && !item.Region.RegionEmblemImage)" class="icon icon--pin"></i> <img ng-if="!$ctrl.isRegion && item.Region.RegionEmblemImage" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Region.RegionEmblemImage}}"><div>{{$ctrl.getRegionName(item.Region)}}</div></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div></div></div></div><div ng-if="$ctrl.displayedItems.length !== $ctrl.items.length" class="food-types__view-more"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.viewMore()">VIEW MORE</button></div>');$templateCache.put('/content/scripts/app/components/shared/shared-button/ta-shared-button.html','<div class="ta-shared-button-wrapper" ng-class="{\'ta-shared-button-wrapper--mobile\' : $ctrl.isMobile}" click-outside="$ctrl.openShareSocialIconsRow()"><button type="button" ng-if="!$ctrl.showShareIcons" class="shared-button" ng-click="$ctrl.openShareSocialIconsRow($event)"><span ng-if="$ctrl.showArrow" class="ta ta-share-arrow"></span> {{$ctrl.buttonText}}</button><div ng-if="$ctrl.showShareIcons" class="shared-icons-wrapper"><ul class="shared-icons-list" ng-click="$ctrl.closeShareSocialIconsRow($event)"><li class="list-item--facebook" ng-click="$ctrl.openSharelinkByType(\'facebook\')"><i class="ta ta-facebook-circle"></i></li><li class="list-item--instagram"><a ng-click="$ctrl.shareImage && $ctrl.downloadSharedImageList()"><i class="ta ta-instagram"></i></a></li><li class="list-item--twitter" ng-click="$ctrl.openSharelinkByType(\'twitter\')"><i class="ta ta-twitter"></i></li><li class="list-item--pinterest" ng-click="$ctrl.openSharelinkByType(\'pinterest\')"><i class="ta ta-pinterest-circle"></i></li><li class="list-item--linkedin" ng-click="$ctrl.openSharelinkByType(\'linkedin\')"><i class="ta ta-linkedin"></i></li></ul><i class="ta ta-close-sharp close-icon" ng-click="$ctrl.closeShareSocialIconsRow($event, \'closeBtn\')"></i></div></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-desktop.html','<div class="modal" modal-directive close-modal="$ctrl.closeModal()"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><form name="$ctrl.informationForm"><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Submit your photo or any missing info</h2><div class="contact-text">or contact us directly at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="comment__fieldgroup"><textarea class="input input--nopadding" name="comment" ng-minlength="$ctrl.data.photos.length ? \'\' : 10" ng-class="{ \'textarea--writing\' : $ctrl.informationForm.comment.$viewValue }" ng-focus="resetErrorOnChange()" ng-model="$ctrl.data.content" placeholder="COMMENT">\r\n                    {{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.isAnonymous"><div ng-if="$ctrl.isLoginShown"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder not-logged-wrapper--action">OTHER SIGN IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div></div><input ng-if="$ctrl.isAnonymous" class="input input--mb20 input--medium" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" ng-pattern="$ctrl.emailPattern" placeholder="YOUR E-EMAIL" required><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.showSubmit() && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit();" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.showSubmit() || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></form></div></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-mobile.html','<div ng-click="$ctrl.openModal()" class="btn btn--light-gray-border footer__contact--action">Submit info or photo</div><div class="modal modal--submit-information" modal-directive close-modal="$ctrl.closeModal()" ng-if="$ctrl.isSubmitInformationShown"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><form name="$ctrl.informationForm"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Submit your photo or any missing info</h2><div class="contact-text">or contact us directly at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="comment__fieldgroup"><textarea name="comment" ng-minlength="$ctrl.data.photos.length ? \'\' : 10" class="textarea" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChangeMobile()" placeholder="COMMENT">\r\n                                {{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.isAnonymous"><div ng-if="$ctrl.isLoginShown"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder not-logged-wrapper--action">OTHER SIGN IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div></div><div class="comment__fieldgroup" ng-if="$ctrl.isAnonymous"><label for="email" class="label-hidden"></label> <input class="input input--nopadding" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" ng-pattern="$ctrl.emailPattern" placeholder="EMAIL" required></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.showSubmit() && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit();" class="btn btn--red-background">SUBMIT</div><div ng-if="!$ctrl.showSubmit() || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></form></div></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-header.html','<div><button ng-click="$ctrl.toggleSubmitInformationRecipe()" class="btn btn--gray-border btn--light-border btn--regular btn-submit-header">Submit info or photo</button><ta-submit-information-desktop on-close-modal="$ctrl.toggleSubmitInformationRecipe()" ng-if="$ctrl.isSubmitInformationRecipeShown"></ta-submit-information-desktop></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-input.html','<div><div class="comment-input-row__container"><form class="comment-form" action="/" method="post"><input ng-click="$ctrl.toggleSubmitInformationRecipe()" type="text" class="comment-input" name="comment" placeholder="Comment" ng-disabled="$ctrl.isSubmitInformationRecipeShown"> <input type="file" class="ta-file-upload" ta-file-change handler="$ctrl.onFilePickerSelect(files)" accept="image/png,image/jpeg" style="display: none;"> <a class="upload-photo-btn btn--gray-border btn--noborder" ng-click="$ctrl.toggleSubmitInformationRecipe()"><i class="icon icon--photo"></i></a></form></div><ta-submit-information-desktop on-close-modal="$ctrl.toggleSubmitInformationRecipe()" ng-if="$ctrl.isSubmitInformationRecipeShown"></ta-submit-information-desktop></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-mobile-input.html','<div><div class="comment-input-row__container"><form class="comment-form" action="/" method="post"><input ng-click="$ctrl.toggleSubmitInformationRecipe()" type="text" class="comment-input" name="comment" placeholder="Comment" ng-disabled="$ctrl.isSubmitInformationRecipeShown"> <input type="file" class="ta-file-upload" ta-file-change handler="$ctrl.onFilePickerSelect(files)" accept="image/png,image/jpeg" style="display: none;"><div class="upload-photo-btn btn--gray-border btn--noborder" ng-click="$ctrl.toggleSubmitInformationRecipe()"><i class="icon icon--photo"></i></div></form></div><div class="modal" modal-directive close-modal="$ctrl.closeModal()" ng-if="$ctrl.isSubmitInformationRecipeShown"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><form name="$ctrl.informationForm"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Submit your photo or any missing info</h2><div class="contact-text">or contact us directly at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="comment__fieldgroup"><textarea name="comment" ng-minlength="$ctrl.data.photos.length ? \'\' : 10" class="textarea" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChangeMobile()" placeholder="COMMENT">\r\n                    {{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.isAnonymous"><div ng-if="$ctrl.isLoginShown"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder not-logged-wrapper--action">OTHER SIGN IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div></div><div class="comment__fieldgroup" ng-if="$ctrl.isAnonymous"><label for="email" class="label-hidden"></label> <input class="input input--nopadding" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" ng-pattern="$ctrl.emailPattern" placeholder="EMAIL" required></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.showSubmit() && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit();" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.showSubmit() || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></form></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-mobile.html','<div><div class="let-us-know"><a ng-click="$ctrl.toggleSubmitInformationRecipe()"><p>Do you prepare this recipe differently or see a mistake? <span>Let us know.</span> We want our recipes to be perfectly authentic.</p><i class="icon icon--plus-circle-big"></i></a></div></div><div class="modal" modal-directive close-modal="$ctrl.closeModal()" ng-if="$ctrl.isSubmitInformationRecipeShown"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><form name="$ctrl.informationForm"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--lowercase h2--bold">Submit your photo or any missing info</h2><div class="contact-text">or contact us directly at <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div><div class="comment__fieldgroup"><textarea name="comment" ng-minlength="$ctrl.data.photos.length ? \'\' : 10" class="textarea" ng-model="$ctrl.data.content" ng-focus="resetErrorOnChangeMobile()" placeholder="COMMENT">\r\n                    {{$ctrl.data.content}}\r\n                    </textarea><ta-comment-photo data="$ctrl.data" is-valid-photo-number="$ctrl.isValidPhotoNumber"></ta-comment-photo></div><div ng-if="$ctrl.isAnonymous"><div ng-if="$ctrl.isLoginShown"><ta-social-login-mobile></ta-social-login-mobile><div ng-click="$ctrl.otherLoginOptions()" class="btn btn--black-border btn--noborder not-logged-wrapper--action">OTHER SIGN IN OPTIONS</div><div ng-if="$ctrl.isOtherOptionVisible"><ta-regular-login-mobile></ta-regular-login-mobile></div></div></div><div class="comment__fieldgroup" ng-if="$ctrl.isAnonymous"><label for="email" class="label-hidden"></label> <input class="input input--nopadding" name="email" type="email" ng-model="$ctrl.data.email" ng-change="$ctrl.resetError()" ng-pattern="$ctrl.emailPattern" placeholder="EMAIL" required></div><div ng-if="$ctrl.data.photos.length > 0"><span class="comment__validate comment__validate--legal">By uploading this photo you confirm that this is your photo and you own all rights to the image</span></div><div ng-if="$ctrl.isError"><span class="comment__validate comment__validate--error">{{$ctrl.error}}</span></div></div><div class="modal__footer"><div ng-if="$ctrl.showSubmit() && $ctrl.isValidPhotoNumber && !$ctrl.submitting" ng-click="$ctrl.submit();" class="btn btn--red-background btn--right">SUBMIT</div><div ng-if="!$ctrl.showSubmit() || !$ctrl.isValidPhotoNumber || $ctrl.submitting" class="btn btn--disabled-background btn--right"><span ng-if="!$ctrl.submitting">SUBMIT</span> <i ng-if="$ctrl.submitting && $ctrl.isValidPhotoNumber" class="fa fa-spinner fa-spin"></i></div></div></form></div></div>');$templateCache.put('/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe.html','<div><div class="let-us-know"><a ng-click="$ctrl.toggleSubmitInformationRecipe()"><p>Do you prepare this recipe differently or see a mistake?<br><span>Let us know.</span> We want our recipes to be perfectly authentic.</p><i class="icon icon--plus-circle-big"></i></a></div><ta-submit-information-desktop on-close-modal="$ctrl.toggleSubmitInformationRecipe()" ng-if="$ctrl.isSubmitInformationRecipeShown"></ta-submit-information-desktop></div>');$templateCache.put('/content/scripts/app/components/shared/types/ta-food-types-desktop.html','<div class="food-types"><h2 class="h1 h1--center h1--medium">Types of {{$ctrl.name}}</h2><i class="plate-lines plate-lines--biggest plate-lines--center"></i><div class="food-types__order"><ta-mobile-food-order on-order-change="$ctrl.onFoodTypesOrder(orderBy)" options="$ctrl.foodOrderOptions"></ta-mobile-food-order></div><div class="food-types__list"><div class="food-types__item" ng-repeat="type in $ctrl.displayItems"><div class="rating-star rating-star--right"><ta-rating-control open-rating="$ctrl.tryOpenRating(type)" is-rated="$ctrl.isFoodRated(type)" rating-data="type.details" gray="true"></ta-rating-control></div><div class="food-types__item-image" ng-if="type.Image"><a ng-href="/{{::type.UrlLink}}"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::type.Image}}?h=200&w=200"></a></div><div class="food-types__item-image food-types__item-image--na" ng-if="!type.Image"><div></div></div><div class="food-types__item-group btn--round" ng-if="type.Children.length" ng-click="$ctrl.openTypeChildren(type)"><span>GROUP</span> <i class="icon icon--arrow icon--arrow--down-gray"></i></div><div class="food-types__item-category" ng-if="type.Children.length === 0"><a ng-href="{{type.parentUrlLink}}">{{type.parentLabel}}</a></div><div class="food-types__item-name"><a ng-href="/{{::type.UrlLink}}"><h2 class="h2 h2--center h2--bold h2--lowercase">{{type.ConcatenatedName}}</h2></a></div><div class="food-types__item-score rating-box" ng-class="{ \'food-types__item-score--na\' : type.details.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="type.details"></ta-collection-rating-desktop></div><a ng-href="{{type.Region.RegionUrlLink}}" class="food-types__item-location"><span class="image-wrapper"><i class="flag-icon" ng-style="{\'background-image\': \'url(\' + $ctrl.constants.cdnHost + type.Region.RegionEmblemImage + \')\'}"></i></span> <span>{{::$ctrl.getTypeOrigin(type)}}</span></a><div class="food-types__item-ingredients" ng-if="type.FoodIngredients.length"><ta-food-ingredients-mini items="type.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div></div><div ng-if="$ctrl.data.length !== $ctrl.displayItems.length" class="food-types__view-more"><button class="btn btn--underscore btn--inline btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">VIEW MORE</button></div><div ng-if="$ctrl.typeChildrenOpened"><div modal-directive close-modal="$ctrl.closeTypeChildren()" class="modal food-subtypes"><div class="modal__container food-subtypes__main-modal" click-outside="$ctrl.closeTypeChildren()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeTypeChildren()"></i></div><div class="modal__body"><div class="food-subtypes__title"><h2 class="h1 h1--center h1--medium">Types of {{$ctrl.selectedType.Name}}</h2></div><div class="food-subtypes__content"><ul class="food-subtypes__list"><li ng-repeat-start="subtype in $ctrl.selectedType.Children" class="food-subtypes__item food-subtypes__item--white"><a ng-href="{{::subtype.UrlLink}}" class="food-subtypes__item-image" ng-if="subtype.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::subtype.Image}}?h=150&w=150"></a><div class="food-subtypes__item-info"><div class="food-subtypes__item-title"><a ng-href="{{::subtype.UrlLink}}">{{subtype.ConcatenatedName}}</a><ta-rating-control open-rating="$ctrl.tryOpenRating(subtype)" is-rated="$ctrl.isFoodRated(subtype)" rating-data="subtype.details" gray="true"></ta-rating-control></div><div class="food-types__item-score food-types__item-score--subtype rating-box" ng-class="{ \'food-types__item-score--na\' : subtype.details.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="subtype.details"></ta-collection-rating-desktop></div><div class="food-subtypes__item-extra"><div class="food-subtypes__item-arrow" ng-if="subtype.Children.length"><i class="icon icon--arrow--down-gray" ng-click="subtype.listOpened = !subtype.listOpened" ng-class="{ \'icon--arrow--up-gray\' : subtype.listOpened }"></i></div></div></div></li><li ng-repeat-end ng-if="subtype.Children.length && subtype.listOpened" ng-repeat="subsubtype in subtype.Children" class="food-subtypes__item food-subtypes__item--subtype food-subtypes__item--separated-top"><div class="food-subtypes__item-image" ng-if="subsubtype.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::subsubtype.Image}}?h=150&w=150"></div><div class="food-subtypes__item-info"><div class="food-subtypes__item-title"><a ng-href="{{::subsubtype.UrlLink}}">{{subsubtype.Name}}</a><ta-rating-control open-rating="subsubtype.details.isRatingOpen = !subsubtype.details.isRatingOpen" is-rated="$ctrl.isFoodRated(subsubtype)" rating-data="subsubtype.details" gray="true"></ta-rating-control></div><div class="food-types__item-score food-types__item-score--subtype rating-box" ng-class="{ \'food-types__item-score--na\' : subsubtype.details.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="subsubtype.details"></ta-collection-rating-desktop></div></div></li></ul></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/types/ta-food-types-mobile.html','<div class="food-types ta-parent-section"><h1 class="h1 h1--center h1--lowercase h1--bold">Types of {{$ctrl.name}}</h1><ta-mobile-food-order on-order-change="$ctrl.onFoodTypesOrder(orderBy)" options="$ctrl.foodOrderOptions"></ta-mobile-food-order><div class="food-types__list"><div class="food-types__item" ng-repeat="type in $ctrl.displayItems"><div class="food-types__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(type)" is-rated="$ctrl.isFoodRated(type)" rating-data="type.details" gray="true"></ta-rating-control></div><div class="food-types__item-image" ng-if="type.Image"><a ng-href="/{{::type.UrlLink}}" target="_blank"><img class="image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::type.Image}}?h=160&w=160"></a></div><div class="food-types__item-image" ng-if="!type.Image"><div class="no_image"></div></div><div class="food-types__item-group btn--round" ng-if="type.Children.length" ng-click="$ctrl.openTypeChildren(type)"><span>GROUP</span> <i class="icon icon--arrow icon--arrow--down-gray"></i></div><div class="food-types__item-category" ng-class="{ \'food-types__item-category--high\' : $ctrl.siblingHasGroup(type, $index) }" ng-if="$ctrl.showItemCategory(type, $index)"><a ng-href="{{type.parentUrlLink}}" target="_blank">{{type.parentLabel}}</a></div><div class="food-types__item-name"><a ng-href="/{{type.UrlLink}}" target="_blank"><h2 class="h2 h2--center h2--bold h2--lowercase">{{type.ConcatenatedName}}</h2></a></div><div class="food-types__item-score" ng-class="{ \'food-types__item-score--na\' : type.details.ValidScoreCount < 5 }"><ta-home-item-rating item="type"></ta-home-item-rating></div><a ng-href="{{type.Region.RegionUrlLink}}" target="_blank" class="food-types__item-location" ng-class="{ \'food-types__item-location--center\' : !type.Region.RegionEmblemImage }"><span class="image-wrapper"><i class="flag-icon" ng-style="{\'background-image\': \'url(\' + $ctrl.constants.cdnHost + (type.Region.RegionEmblemImage || type.Region.CountryEmblemImage) + \')\'}"></i></span> <span>{{::$ctrl.getTypeOrigin(type)}}</span></a><div class="food-types__item-ingredients" ng-if="type.FoodIngredients.length"><ta-food-ingredients-mini items="type.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div></div><div ng-if="$ctrl.data.length !== $ctrl.displayItems.length" class="food-types__view-more"><button class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore()">VIEW MORE</button></div><div ng-if="$ctrl.typeChildrenOpened"><div modal-directive close-modal="$ctrl.closeTypeChildren()" class="modal food-subtypes"><div class="modal__container modal__container--full-screen food-subtypes__main-modal"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeTypeChildren()"></i></div><div class="modal__body"><div class="food-subtypes__title"><h1 class="h1 h1--center h1--lowercase h1--bold">Types of {{$ctrl.selectedType.Name}}</h1></div><div class="food-subtypes__content"><ul class="food-subtypes__list"><li ng-repeat-start="subtype in $ctrl.selectedType.Children" class="food-subtypes__item food-subtypes__item--white"><a ng-href="{{::subtype.UrlLink}}" class="food-subtypes__item-image" ng-if="subtype.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::subtype.Image}}?h=130&w=130"></a><div class="food-subtypes__item-info"><div class="food-subtypes__item-title"><a ng-href="{{::subtype.UrlLink}}">{{subtype.ConcatenatedName}}</a><ta-rating-control open-rating="$ctrl.tryOpenRating(subtype)" is-rated="$ctrl.isFoodRated(subtype)" rating-data="subtype.details" gray="true"></ta-rating-control></div><div class="food-types__item-score food-types__item-score--subtype" ng-class="{ \'food-types__item-score--na\' : subtype.details.ValidScoreCount < 5 }"><ta-home-item-rating item="subtype.details"></ta-home-item-rating></div><div class="food-subtypes__item-extra"><div class="food-subtypes__item-arrow" ng-if="subtype.Children.length"><i class="icon icon--arrow--down-gray" ng-click="subtype.listOpened = !subtype.listOpened" ng-class="{ \'icon--arrow--up-gray\' : subtype.listOpened }"></i></div></div></div></li><li ng-repeat-end ng-if="subtype.Children.length && subtype.listOpened" ng-repeat="subsubtype in subtype.Children" class="food-subtypes__item food-subtypes__item--subtype food-subtypes__item--separated-top"><div class="food-subtypes__item-image" ng-if="subsubtype.Image"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::subsubtype.Image}}?h=130&w=130"></div><div class="food-subtypes__item-info"><div class="food-subtypes__item-title"><a ng-href="{{::subsubtype.UrlLink}}">{{subsubtype.Name}}</a><ta-rating-control open-rating="subsubtype.details.isRatingOpen = !subsubtype.details.isRatingOpen" is-rated="$ctrl.isFoodRated(subsubtype)" rating-data="subsubtype.details" gray="true"></ta-rating-control></div><div class="food-types__item-score food-types__item-score--subtype" ng-class="{ \'food-types__item-score--na\' : subsubtype.details.ValidScoreCount < 5 }"><ta-home-item-rating item="subsubtype.details"></ta-home-item-rating></div></div></li></ul></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/shared/types/ta-types-desktop.html','<div class="types"><h2 class="h1 h1--center h1--medium">Types of {{$ctrl.name}}</h2><i class="plate-lines plate-lines--biggest plate-lines--center"></i><div class="types__list--top"><div ng-repeat="type in $ctrl.data" class="type type--top"><div class="inner"><a ng-href="{{type.UrlLink}}"><div class="type__thumb"><img ng-if="type.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::type.Image}}?h=100&w=100"></div><div class="type__name type__name--top">{{type.Name}}</div></a></div></div></div><div class="grid__container" ng-if="$ctrl.hasChildren"><div class="grid"><div class="grid-sizer"></div><div class="gutter-sizer"></div><div ng-repeat="child in $ctrl.data" ng-if="child.Children.length > 0" class="types__list types__list--parent grid-item"><div class="type type--parent"><a ng-href="{{child.UrlLink}}"><div class="left"><div class="type__thumb type__thumb--parent"><img ta-lazy-load lazy-source="{{child.Image}}?h=130&w=130"></div></div><div class="right"><h3 class="h3 h3--large">{{child.Name}}</h3><div class="type__desc" ng-bind-html="child.Description | html"></div></div></a></div><div class="types__list types__list--child"><span ng-repeat="firstChild in child.Children"><div class="type type--child" ng-class="{\'type--child--have-child\': firstChild.Children.length > 0}"><a ng-href="{{firstChild.UrlLink}}"><div class="type__thumb"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::firstChild.Image}}?h=50&w=50" ng-if="firstChild.Image"></div><div class="type__name type__name--child">{{firstChild.Name}}</div></a></div><span><div ng-repeat="secondChild in firstChild.Children" class="type type--child type type--child--2" ng-class="{\'type--child--2--first\': $index < 0}"><a ng-href="{{secondChild.UrlLink}}"><div class="type__thumb"><img ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::secondChild.Image}}?h=60&w=60" ng-if="secondChild.Image"></div><div class="type__name type__name--parent">{{firstChild.Name}}</div><div class="type__name type__name--child-2">{{secondChild.Name}}</div></a></div></span></span></div></div><div class="clearfix"></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-desktop-basic.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{$ctrl.rateItText}}</span></div><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating ng-if="$ctrl.type === \'collection\'" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-card__action-item" ng-click="$ctrl.openAddToList()"><div class="rating-card__action-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-card__action-text" ng-if="!$ctrl.getFavoritedFood()">Favorite?</span> <span class="rating-card__action-text rating-card__action-text--rated" ng-if="$ctrl.getFavoritedFood()">Favorite</span></div></div><div class="rating-actions__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="desktop" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-actions__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.actions.displayFoodName()}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-desktop-flex.html','<div class="rating-actions" ng-class="{ \'rating-actions--row\' : $ctrl.template === \'desktop-row\', \'rating-actions--column\' : $ctrl.template === \'desktop-column\' }"><div class="rating-actions__item" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-actions__item" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-actions__item-text" ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-actions__item" ng-click="$ctrl.openAddToList()"><div class="rating-actions__item-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-actions__item-text" ng-if="!$ctrl.getFavoritedFood()">Add to list</span> <span class="rating-actions__item-text rating-actions__item-text--rated" ng-if="$ctrl.getFavoritedFood()">Added to list</span></div></div><div class="rating-actions__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="desktop" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-actions__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.actions.displayFoodName()}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-desktop.html','<div class="rating-actions"><div class="rating-actions__item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-actions__item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-actions__item-text" ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.openAddToList()"><div class="rating-actions__item-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-actions__item-text" ng-if="!$ctrl.getFavoritedFood()">Add to list</span> <span class="rating-actions__item-text rating-actions__item-text--rated" ng-if="$ctrl.getFavoritedFood()">Added to list</span></div></div><div class="rating-actions__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="desktop" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-actions__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.actions.displayFoodName()}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-mobile.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.userCommentStatus.userRating | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.userCommentStatus.comment && $ctrl.type === \'singleItemOnPage\'" ng-click="$ctrl.startCommentProcess()"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails) && $ctrl.type === \'collection\'" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating ng-if="$ctrl.type === \'collection\'" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-card__action-item" ng-click="$ctrl.openAddToList()"><div class="rating-card__action-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-card__action-text" ng-if="!$ctrl.getFavoritedFood()">Favorite?</span> <span class="rating-card__action-text rating-card__action-text--rated" ng-if="$ctrl.getFavoritedFood()">Favorite</span></div></div><div class="rating-card__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="mobile" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-card__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.actions.displayFoodName()}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-desktop.html','<div class="rating-actions"><div class="rating-actions__item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-actions__item-text rating-actions__item-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-actions__item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-actions__item-icon"><i class="icon icon--check-gray"></i></div><span class="rating-actions__item-text">{{::$ctrl.rateItText}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-actions__item-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-actions__item-text" ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-actions__item rating-actions__item--separated" ng-click="$ctrl.openAddToList()"><div class="rating-actions__item-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-actions__item-text" ng-if="!$ctrl.getFavoritedFood()">Add to list</span> <span class="rating-actions__item-text rating-actions__item-text--rated" ng-if="$ctrl.getFavoritedFood()">Added to list</span></div></div><div class="rating-actions__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="desktop" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-actions__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.foodDetails.Name}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-entity-modal-desktop.html','<div class="rating-buttons-row rating-row--inner rating-control-redesign"><div class="rating-without-modal"><div id="entity-rating"></div><div class="rating-buttons-col rate-it" ng-if="!$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, \'inner-entity\', false, \'#entity-rating\')"><i class="icon icon--rate-it-mobile-thin"></i><p>Rate It</p></div><div class="rating-buttons-col rated" ng-if="$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, \'inner-entity\', false, \'#entity-rating\')"><i class="icon icon--rate-it-mobile-thin-checked"></i><p>Rated {{$ctrl.getFoodRatingScoreV2($ctrl.entityId, $ctrl.entityType) | number:1}}</p></div></div><div class="rating-buttons-col wanna-try" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon--wanna-try" ng-class="{\'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i><p ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry && !$ctrl.wantsToTryDisabled()) }">{{$ctrl.getWannaTryLabel()}}</p></div><div ng-if="!$ctrl.getFavoritedFood()" class="rating-buttons-col add-to-list" ng-click="$ctrl.addToList(\'add\')"><i class="icon icon--plus-circle"></i><p class="rating-actions__item-text">Add To List</p></div><div ng-if="$ctrl.getFavoritedFood()" class="rating-buttons-col add-to-list" ng-click="$ctrl.removeFromList()"><i class="icon icon--plus-circle icon--plus-circle-checked-redesign"></i><p class="rating-actions__item-text rating-actions__item-text--rated">Added To List</p></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-entity-modal-mobile.html','<div class="rating-row--inner rating-control-redesign" ng-class="{\'rating-buttons-row\' : !$ctrl.isMobile, \'rating-buttons-row-mobile\' : $ctrl.isMobile}"><div class="rating-col rating-preview"><span class="rating-star" style="--rating: {{ $ctrl.ratingDataCard }}" aria-label="Rating of this product is {{ $ctrl.ratingDataCard }} out of 5."></span><p ng-if="$ctrl.ratingDataCard == 0 && $ctrl.ratingDataCard < 0.5" class="rating-not-a-number">n/a</p><p ng-if="$ctrl.ratingDataCard != 0 && $ctrl.ratingDataCard > 0.5" class="rating-num">{{ $ctrl.ratingDataCard | number:1 }}</p></div><div class="rating-without-modal rating-without-modal__mobile"><div id="entity-rating"></div><div class="rating-buttons-col rating-col rate-it-action rate-it" ng-if="!$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, \'inner-entity\', false, \'#entity-rating\')"><i class="icon icon--rate-it"></i><p>Rate It</p></div><div class="rating-buttons-col rating-col rated rate-it-action" ng-if="$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, \'inner-entity\', false, \'#entity-rating\')"><i class="icon icon__rate-checked icon__rate-checked--redesign"></i><p class="rating-control__text">Rated {{$ctrl.getFoodRatingScoreV2($ctrl.entityId, $ctrl.entityType) | number:1}}</p></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-mobile.html','<div class="rating-card__actions"><div class="rating-card__action-item" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon__rate-checked"></i></div><span class="rating-card__action-text rating-card__action-text--rated">Rated {{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span></div><div class="rating-card__action-item" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><div class="rating-card__action-icon"><i class="icon icon--check-gray"></i></div><span class="rating-card__action-text">{{::$ctrl.rateItText}}</span></div><ta-home-item-rating class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-card__action-item" ng-click="$ctrl.wantsToTryProcess()"><div class="rating-card__action-icon"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div><span class="rating-card__action-text" ng-class="{ \'rating-card__action-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</span></div><div class="rating-card__action-item" ng-click="$ctrl.openAddToList()"><div class="rating-card__action-icon"><i class="icon icon--plus" ng-class="{ \'icon--plus--red\' : $ctrl.getFavoritedFood() }"></i></div><span class="rating-card__action-text" ng-if="!$ctrl.getFavoritedFood()">Favorite?</span> <span class="rating-card__action-text rating-card__action-text--rated" ng-if="$ctrl.getFavoritedFood()">Favorite</span></div></div><div class="rating-card__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="mobile" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-card__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.foodDetails.Name}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-bookmark.html','<ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-buttons-row rating-row--inner rating-control-redesign bookmark-redesign"><div class="rating-buttons-col wanna-try" ng-click="$ctrl.wantsToTryClick()"><i class="icon icon--wanna-try icon--wanna-try__redesign" ng-class="{ \'icon__bookmark--yes--redesign\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-desktop.html','<ta-collection-comment-process-desktop ng-if="$ctrl.foodDetails.details.isRatingOpen" details="$ctrl.foodDetails.details" item="$ctrl.foodDetails.details" on-rating-update="$ctrl.updateRating(rating)"></ta-collection-comment-process-desktop><div class="rating-buttons-row rating-row--inner rating-control-redesign"><div class="rating-buttons-col rated" ng-if="$ctrl.isFoodRated($ctrl.details)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin-checked"></i><p>Rated</p></div><div class="rating-buttons-col rate-it" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin"></i><p>Rate It</p></div><div class="rating-buttons-col wanna-try" ng-click="$ctrl.wantsToTryProcess()"><i class="icon icon--wanna-try" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i><p ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</p></div><div class="rating-buttons-col add-to-list" ng-click="$ctrl.openAddToList()"><i class="icon icon--plus-circle" ng-class="{ \'icon--plus-circle-checked-redesign\' : $ctrl.getFavoritedFood() }"></i><p ng-if="!$ctrl.getFavoritedFood()">Add To List</p><p ng-if="$ctrl.getFavoritedFood()">Added To List</p></div></div><div class="rating-actions__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="desktop" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-actions__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.actions.displayFoodName()}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-mobile.html','<ta-home-item-rating ng-if="$root.userCacheServiceInitialized" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getRatingSource()"></ta-home-item-rating><div class="rating-buttons-row rating-row--inner"><div class="rated" ng-if="$ctrl.isFoodRated($ctrl.details)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin-checked"></i><p>Rated</p></div><div class="rate-it" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)"><i class="icon icon--rate-it-mobile-thin"></i><p>Rate It</p></div><div class="wanna-try" ng-click="$ctrl.wantsToTryProcess()"><i class="icon icon--wanna-try" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.wantsToTry), \'icon__bookmark--no--red\' : $ctrl.wantsToTryClicked($ctrl.userCommentStatus.doesntWantToTry), \'icon__bookmark--disabled\' : $ctrl.wantsToTryDisabled() }"></i><p ng-class="{ \'rating-actions__item-text--rated\' : ($ctrl.userCommentStatus.wantsToTry || $ctrl.userCommentStatus.doesntWantToTry) && !$ctrl.wantsToTryDisabled() }">{{$ctrl.getWannaTryLabel()}}</p></div><div class="add-to-list" ng-click="$ctrl.openAddToList()"><i class="icon icon--plus-circle" ng-class="{ \'icon--plus-circle-checked-redesign\' : $ctrl.getFavoritedFood() }"></i><p ng-if="!$ctrl.getFavoritedFood()">Add To List</p><p ng-if="$ctrl.getFavoritedFood()">Added To List</p></div></div><div class="rating-card__modal" ng-if="$ctrl.isAddToListProcess"><ta-add-to-list template="mobile" selected-food="$ctrl.foodDetails" on-close="$ctrl.closeAddToList()"></ta-add-to-list></div><div ng-if="$ctrl.isWantsToTryProcess" class="rating-card__modal"><div modal-directive close-modal="$ctrl.closeModal()" class="modal"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeModal()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeModal()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase h2--small">Wanna try {{::$ctrl.foodDetails.Name}}?</h2></div></div><div class="modal__footer"><div class="btn btn--lowercase" ng-click="$ctrl.wantsToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.wantsToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--yes--red\' : $ctrl.userCommentStatus.wantsToTry, \'icon__bookmark--yes\' : !$ctrl.userCommentStatus.wantsToTry }"></i> <span>Wanna try</span></div><div class="btn btn--lowercase" ng-click="$ctrl.doesntWantToTryClick()" ng-class="{ \'active\' : $ctrl.userCommentStatus.doesntWantToTry }"><i class="icon icon__bookmark" ng-class="{ \'icon__bookmark--no--red\' : $ctrl.userCommentStatus.doesntWantToTry, \'icon__bookmark--no\' : !$ctrl.userCommentStatus.doesntWantToTry }"></i> <span>Don\'t wanna try</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-rate-basic.html','<ta-home-item-rating ng-if="$root.userCacheServiceInitialized" class="rating-card__home-item-rating" item="$ctrl.foodDetails.details" source="$ctrl.getFoodRatingScore($ctrl.foodDetails)"></ta-home-item-rating><div><div class="rating-control rating-control--chip rating-control--rated rating-control--outline" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)" ng-if="$ctrl.isFoodRated($ctrl.foodDetails)"><span class="rating-control__text" ng-if="$ctrl.getFoodRatingScore($ctrl.foodDetails)">{{$ctrl.getFoodRatingScore($ctrl.foodDetails) | number:1}}</span> <i class="icon icon__rate-checked"></i></div><div class="rating-control rating-control--extra-opacity" ng-click="$ctrl.tryOpenRating($ctrl.foodDetails)" ng-if="!$ctrl.isFoodRated($ctrl.foodDetails)"><i class="icon icon__rate-check icon__rate-check--gray"></i></div></div>');$templateCache.put('/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-rate.html','<div class="rating-row--inner rating-control-redesign" ng-class="{\'rating-buttons-row\' : !$ctrl.isMobile, \'rating-buttons-row-mobile\' : $ctrl.isMobile}"><div class="rating-col rating-preview"><span class="rating-star" style="--rating: {{$ctrl.validScoreCount < 5 ? 0 : $ctrl.ratingDataCard}}" aria-label="Rating of this product is {{ $ctrl.ratingDataCard }} out of 5."></span><p ng-if="($ctrl.ratingDataCard == 0 && $ctrl.ratingDataCard < 0.5) || $ctrl.validScoreCount < 5" class="rating-not-a-number">n/a</p><p ng-if="$ctrl.ratingDataCard != 0 && $ctrl.ratingDataCard > 0.5 && $ctrl.validScoreCount > 4" class="rating-num">{{ $ctrl.ratingDataCard | number:1 }}</p></div><div class="rating-buttons-col rating-col rated rate-it-action" ng-if="$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, !$ctrl.isMobile ? \'desktop\' : \'mobile\')"><i class="icon icon__rate-checked icon__rate-checked--redesign"></i><p class="rating-control__text">Rated {{$ctrl.getFoodRatingScoreV2($ctrl.entityId, $ctrl.entityType) | number:1}}</p></div><div class="rating-buttons-col rating-col rate-it-action rate-it" ng-if="!$ctrl.isFoodRatedV2($ctrl.entityId, $ctrl.entityType)" ng-click="$ctrl.openRating($ctrl.entityId, $ctrl.entityType, !$ctrl.isMobile ? \'desktop\' : \'mobile\')"><i class="icon icon--rate-it"></i><p>Rate It</p></div></div>');$templateCache.put('/content/scripts/app/v2/shared/restaurant-badges/ta2-restaurant-badges.html','<div ng-if="$ctrl.badges && $ctrl.badges.length" class="restaurant-badges restaurant-badges__{{$ctrl.type}} restaurant-badges__{{$ctrl.type}}--{{$ctrl.layout}} {{$ctrl.additionalClass}} flex" ng-class="{\'restaurant-badges__hidden\' : !$ctrl.isScoreWrapperVisible}"><div ng-repeat="chunk in $ctrl.badges" ng-init="isParentLast = $last"><div ng-repeat="badge in chunk" class="restaurant-badge-wrapper" ng-init="isChildFirst = $first" ng-click="$ctrl.showScore(isParentLast, isChildFirst)"><div ng-show="$ctrl.isScoreWrapperVisible || (isParentLast && isChildFirst)" ng-if="badge.RestaurantAwardTypeString == \'Google\'" class="restaurant-badge restaurant-badge__google-rating flex" ng-class="{\'clickable\' : (isParentLast && isChildFirst)}"><div>{{badge.GoogleRating | number: 1}}</div><div class="count-wrapper flex"><img class="img" ta-lazy-load lazy-source="/Content/layout-shared/layout/icons/google-sign.svg"> <span class="count">{{badge.GoogleRatingCountFormatted}}</span></div></div><div ng-show="$ctrl.isScoreWrapperVisible || (isParentLast && isChildFirst)" ng-if="badge.RestaurantAwardTypeString == \'YearFounded\'" class="restaurant-badge restaurant-badge__year-founded flex" ng-class="{\'restaurant-badge__year-founded--legendary\' : badge.Is100YearsOld, \'restaurant-badge__year-founded--half-century\' : !badge.Is100YearsOld, \'clickable\' : (isParentLast && isChildFirst)}"><img ng-if="badge.Is100YearsOld" class="img" ta-lazy-load lazy-source="/Content/layout-shared/layout/icons/100.svg"> <img ng-if="!badge.Is100YearsOld" class="img" ta-lazy-load lazy-source="/Content/layout-shared/layout/icons/50.svg"></div><div ng-show="$ctrl.isScoreWrapperVisible || (isParentLast && isChildFirst)" ng-if="badge.RestaurantAwardTypeString == \'RestaurantAward\'" class="restaurant-badge restaurant-badge__certificate" ng-class="{\'clickable\' : (isParentLast && isChildFirst)}"><img ng-if="badge.Image" class="img" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{badge.Image}}?mw=60"></div></div></div></div>');$templateCache.put('/content/scripts/app/v2/shared/restaurant-tablecloths/ta2-restaurant-tablecloths.html','<div class="restaurant-tablecloths restaurant-tablecloths__{{$ctrl.type}} restaurant-tablecloths__{{$ctrl.type}}--{{$ctrl.layout}} flex"><img ng-if="$ctrl.item.TableclothTypeString == \'Regular\'" class="image" src="/Content/layout/images/tablecloth-regular.png" ng-repeat="n in [] | range:$ctrl.tableclothNumber"> <img ng-if="$ctrl.item.TableclothTypeString == \'Golden\'" class="image" src="/Content/layout/images/tablecloth-gold.png" ng-repeat="n in [] | range:$ctrl.tableclothNumber"></div>');$templateCache.put('/content/scripts/app/shared/Security/TokenRefresherIframe/TokenRefresherIframe.html','hi');$templateCache.put('/content/scripts/app/components/account/email/confirm-email/ta-confirm-email-desktop.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box"><h2>Email confirmed!</h2></div><form class="reset-password-form"><a href="/map" class="btn btn--red-background">Back to homepage</a></form></div></section>');$templateCache.put('/content/scripts/app/components/account/email/confirm-email/ta-confirm-email-mobile.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box"><h2>Email confirmed!</h2></div><form class="reset-password-form"><a href="/map" class="btn btn--red-background">Back to homepage</a></form></div></section>');$templateCache.put('/content/scripts/app/components/account/password/reset-password/ta-reset-password-confirmation-desktop.html','<section class="account-page reset-paswword"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box" ng-if="$ctrl.isReseted"><h2>Done!</h2></div><div class="title-box" ng-if="!$ctrl.isReseted"><h2>RESET PASSWORD</h2><h4>New password</h4></div><form class="reset-password-form" ng-if="!$ctrl.isReseted"><input class="input input--noborder" ng-model="$ctrl.password" placeholder="New password" type="password" ng-change="$ctrl.onPasswordChange()" autocomplete="off" ta-password-strength pwd="$ctrl.password"> <button class="btn btn--red-background" ng-click="$ctrl.resetPassword()">RESET PASSWORD</button><p ng-if="$ctrl.errorMsg">{{$ctrl.errorMsg}}</p></form></div></section>');$templateCache.put('/content/scripts/app/components/account/password/reset-password/ta-reset-password-confirmation-mobile.html','<section class="account-page reset-paswword"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box" ng-if="$ctrl.isReseted"><h2>Done!</h2></div><div class="title-box" ng-if="!$ctrl.isReseted"><h2>RESET PASSWORD</h2><h4>New password</h4></div><form class="reset-password-form" ng-if="!$ctrl.isReseted"><input class="input input--noborder" ng-model="$ctrl.password" placeholder="New password" type="password" ng-change="$ctrl.onPasswordChange()" autocomplete="off" ta-password-strength pwd="$ctrl.password"> <button class="btn btn--red-background" ng-click="$ctrl.resetPassword()">RESET PASSWORD</button><p ng-if="$ctrl.errorMsg">{{$ctrl.errorMsg}}</p></form></div></section>');$templateCache.put('/content/scripts/app/components/account/password/reset-password/ta-reset-password-desktop.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box" ng-if="$ctrl.isSent"><h2>SENT!</h2><h4>Please follow the link in the email to reset your password.</h4></div><div class="title-box" ng-if="!$ctrl.isSent"><h2>RESET PASSWORD</h2><h4>We\'ll send you an email with a reset link.</h4></div><div class="title-box title-box--turnstile"><div id="turnstileWidgetChangePassDesktop"></div></div><form name="resetPassForm" ng-submit="$ctrl.sendResetEmail()" class="reset-password-form" ng-if="!$ctrl.isSent" novalidate><input class="input input--noborder" ng-model="$ctrl.email" placeholder="Email" type="email" name="email" autocomplete="off" ng-required="true"><div class="login-error-msg" ng-if="$ctrl.notValidEmail">Invalid email.</div><button class="btn btn--red-background" ng-disabled="resetPassForm.$invalid || !$ctrl.tokenIsReady" type="submit">RESET PASSWORD</button></form></div></section>');$templateCache.put('/content/scripts/app/components/account/password/reset-password/ta-reset-password-mobile.html','<section class="account-page"><div class="account-page__header"><a class="logo" href="/map"><div class="ta-logo ta-logo--black"></div></a></div><div class="account-page__body"><div class="title-box" ng-if="$ctrl.isSent"><h2>SENT!</h2><h4>Please follow the link in the email to reset your password.</h4></div><div class="title-box" ng-if="!$ctrl.isSent"><h2>RESET PASSWORD</h2><h4>We\'ll send you an email with a reset link.</h4></div><div class="title-box title-box--turnstile"><div id="turnstileWidgetChangePassMobile"></div></div><form name="resetPassForm" ng-submit="$ctrl.sendResetEmail()" class="reset-password-form" ng-if="!$ctrl.isSent"><input class="input input--noborder" ng-model="$ctrl.email" placeholder="Email" type="email" name="email" autocomplete="off" ng-required="true"><div class="login__error" ng-if="$ctrl.notValidEmail">Invalid email.</div><button class="btn btn-block btn--red-background" ng-disabled="resetPassForm.$invalid || !$ctrl.tokenIsReady" type="submit">RESET PASSWORD</button></form></div></section>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-dish-category-new.html','<div class="search-results" ta-background-sections to="\'.search-results__container\'"><div class="search-results__whattoeat search-results__container"><div class="search-results__desktop-width"><div class="search-results__whattoeat-top" id="search-results-whattoeat-top"><h2 class="h1 h1--bold h1--lowercase h1--small">{{::$ctrl.results.Plural}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="desktop" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div></div><div class="promotion promotion--fullwidth promotion--notoppadding" ng-if="$ctrl.isFoodListLoaded"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-\' + $ctrl.results.Name + \'-whattoeat-end\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><div class="search-results__container"><div class="search-results__lists search-results__desktop-width" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div></div><ta-footer-desktop ng-if="$ctrl.initialCallEnd"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-ingredient-category-new.html','<div class="search-results"><div class="search-results__whattoeat search-results__container search-results__container--gray"><div class="search-results__desktop-width"><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="desktop" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div></div><div class="promotion promotion--fullwidth promotion--nobottompadding" ng-if="$ctrl.isFoodListLoaded"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-ingredient\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><div class="search-results__container"><div class="search-results__lists search-results__desktop-width" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div></div><ta-footer-desktop ng-if="$ctrl.initialCallEnd"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-tags.html','<div class="search-results"><div class="search-results__tags"><div class="search-results__container"><div class="search-results__wheretoeat search-results__desktop-width"><div class="search-results__wheretoeat-title-wrap"><div class="search-results__wheretoeat-title"><h1 class="search-results__wheretoeat-main-header h1 h1--bold h1--small h1--capitalize">Explore: {{::$ctrl.tagName}}</h1><h2 class="search-results__wheretoeat-sub-header h2 h2--lowercase">Foods and drinks related to {{::$ctrl.tagNameCapitalized}}</h2></div><ta-home-map-button></ta-home-map-button></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.isLoaded"><ta-search-results-nav-filter-desktop filter-items="$ctrl.sortOptions" on-filter-selected="$ctrl.onTagOrderBy(filter)" is-content-loaded="true"></ta-search-results-nav-filter-desktop></div><div ng-show="$ctrl.tagsLoading" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-hide="$ctrl.tagsLoading" ng-if="$ctrl.isLoaded"><ta-home-food-list template="desktop" items="$ctrl.results" load-more="$ctrl.onLoadMoreTagItems()" details="{ isTag: true }"></ta-home-food-list></div></div></div><div class="promotion promotion--fullwidth promotion--nopadding"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-\' + $ctrl.tagName}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><ta-footer-desktop ng-if="$ctrl.isLoaded"></ta-footer-desktop></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-dish-category-new.html','<div class="search-results"><ta-search-results-floating-filter-mobile ng-if="$ctrl.floatingFilterData" views="$ctrl.floatingFilterViews" on-change-view-grid="$ctrl.changeViewGrid(viewGrid, callback)" filters-data="$ctrl.floatingFilterData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-mobile><div class="search-results__whattoeat search-results__whattoeat--food" ng-if="($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'large\') && $ctrl.whereToEatLoaded"><div class="search-results__whattoeat-top" id="search-results-whattoeat-top"><h2 class="h2 h2--bold h2--lowercase">{{::$ctrl.results.Plural}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="mobile" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div><div class="search-results__lists ta-parent-section" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list><div class="promotion promotion--fullwidth promotion--search"><div ta-google-ad id="div-gpt-ad-1574692848681-dish-group-article-list" name="/21703950087/M_TA_test" platform="mobile"></div></div></div></div><ta-footer-mobile ng-if="$ctrl.initialCallEnd"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-ingredient-category-new.html','<div class="search-results"><ta-search-results-floating-filter-mobile ng-if="$ctrl.floatingFilterData" views="$ctrl.floatingFilterViews" on-change-view-grid="$ctrl.changeViewGrid(viewGrid, callback)" filters-data="$ctrl.floatingFilterData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-mobile><div class="search-results__whattoeat search-results__whattoeat--food" ng-if="$ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'large\'"><div class="search-results__whattoeat-top" id="search-results-whattoeat-top"><h2 class="h2 h2--bold h2--lowercase">{{::$ctrl.results.Plural}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="mobile" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div><div class="search-results__lists ta-parent-section" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div><ta-footer-mobile ng-if="$ctrl.initialCallEnd"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category/ta-home-tags.html','<div class="search-results__tags"><div class="search-results__wheretoeat"><div class="search-results__wheretoeat-title"><h1 class="search-results__wheretoeat-main-header h1 h1--bold h1--small h1--capitalize">Explore: {{::$ctrl.tagName}}</h1><h2 class="search-results__wheretoeat-sub-header h2 h2--lowercase">Foods and drinks related to {{::$ctrl.tagNameCapitalized}}</h2></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.isLoaded"><ta-search-results-nav-filter-mobile filter-items="$ctrl.sortOptions" on-filter-selected="$ctrl.onTagOrderBy(filter)" is-content-loaded="true"></ta-search-results-nav-filter-mobile></div><div ng-show="$ctrl.tagsLoading" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-hide="$ctrl.tagsLoading" ng-if="$ctrl.isLoaded"><ta-home-food-list template="mobile" items="$ctrl.results" load-more="$ctrl.onLoadMoreTagItems()" details="{ isTag: true }"></ta-home-food-list></div></div><ta-footer-mobile ng-if="$ctrl.isLoaded"></ta-footer-mobile></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-desktop-dish-category-region.html','<div class="search-results" ta-background-sections to="\'.search-results__container\'"><div class="search-results__whattoeat search-results__container" style="background-color: rgb(249, 249, 249);"><div class="search-results__desktop-width"><div class="search-results__whattoeat-top" id="search-results-whattoeat-top"><h2 class="h1 h1--bold h1--lowercase h1--small">{{::$ctrl.getGroupInRegionTitle()}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="desktop" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div></div><div class="promotion promotion--fullwidth promotion--nopadding" ng-if="$ctrl.isFoodListLoaded"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-\' + $ctrl.results.Region.Name + \'-whattoeat\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><div class="search-results__container"><div class="search-results__lists search-results__desktop-width" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div></div><ta-footer-desktop ng-if="$ctrl.initialCallEnd"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-desktop-ingredient-category-region.html','<div class="search-results"><div ng-if="($ctrl.whereToEatData && $ctrl.whereToEatData.length) || $ctrl.hasWhereToEatItems"><div class="search-results__container search-results__container--nobottompadding search-results__wheretoeat"><div class="search-results__desktop-width"><div class="search-results__wheretoeat-title"><h2 class="search-results__wheretoeat-main-header h1 h1--small">{{$ctrl.results.EntityGroup.Name}} festivals & events in {{::$ctrl.results.Region.Name}}</h2></div><div ng-if="$ctrl.locationRequestFinished && $ctrl.whereToEatData && $ctrl.whereToEatData.length"><ta-home-desktop-where-to-eat-list data="$ctrl.whereToEatData" get-items="$ctrl.getWhereToEatItems(sort, location)" include-nearest-sort="true" details="$ctrl.results"></ta-home-desktop-where-to-eat-list></div></div></div></div><div class="search-results__whattoeat search-results__container search-results__container--gray"><div class="search-results__desktop-width"><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="desktop" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div></div><div class="promotion promotion--fullwidth promotion--nobottompadding" ng-if="$ctrl.isFoodListLoaded"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-ingredeint-in-region-whattoeat\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><div class="search-results__container"><div class="search-results__lists search-results__desktop-width" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div></div><ta-footer-desktop ng-if="$ctrl.initialCallEnd"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-dish-category-region.html','<div class="search-results"><ta-search-results-floating-filter-mobile ng-if="$ctrl.floatingFilterData" views="$ctrl.floatingFilterViews" on-change-view-grid="$ctrl.changeViewGrid(viewGrid, callback)" filters-data="$ctrl.floatingFilterData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-mobile><div class="search-results__whattoeat search-results__whattoeat--food" ng-if="($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'large\') && $ctrl.whereToEatLoaded"><div class="search-results__whattoeat-top"><h2 class="h2 h2--bold h2--lowercase">{{::$ctrl.getGroupInRegionTitle()}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="mobile" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div><div class="search-results__lists ta-parent-section" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list><div class="promotion promotion--fullwidth"><div ta-google-ad id="div-gpt-ad-1574692848681-dish-group-article-list" name="/21703950087/M_TA_test" platform="mobile"></div></div></div></div><ta-footer-mobile ng-if="$ctrl.initialCallEnd"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-ingredient-category-region.html','<div class="search-results"><ta-search-results-floating-filter-mobile ng-if="$ctrl.floatingFilterData" views="$ctrl.floatingFilterViews" on-change-view-grid="$ctrl.changeViewGrid(viewGrid, callback)" filters-data="$ctrl.floatingFilterData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-mobile><div class="search-results__wheretoeat search-results__wheretoeat--food" ng-if="($ctrl.whereToEatData && $ctrl.whereToEatData.length) || $ctrl.hasWhereToEatItems"><div class="search-results__wheretoeat-title"><h2 class="search-results__wheretoeat-main-header h1 h1--small">{{$ctrl.results.EntityGroup.Name}} festivals & events in {{::$ctrl.results.Region.Name}}</h2></div></div><div ng-if="$ctrl.locationRequestFinished && $ctrl.whereToEatData && $ctrl.whereToEatData.length"><ta-home-mobile-where-to-eat-list data="$ctrl.whereToEatData" get-items="$ctrl.getWhereToEatItems(sort, location)" include-nearest-sort="true" details="$ctrl.results"></ta-home-mobile-where-to-eat-list></div><div class="search-results__whattoeat search-results__whattoeat--food" ng-if="($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'large\') && $ctrl.whereToEatLoaded"><div class="search-results__whattoeat-top" id="search-results-whattoeat-top"><h2 class="h2 h2--bold h2--lowercase">{{::$ctrl.getGroupInRegionTitle()}}</h2></div><div class="search-results__whattoeat-bottom" ng-if="$ctrl.hasFoodItems" id="search-results-whattoeat-bottom"><div class="food-navigation search-results__navigation"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsFoodList" on-filter-selected="$ctrl.changeFoodListFilter(filter)" is-content-loaded="$ctrl.isFoodListLoaded" override-change="$ctrl.selectedFoodListFilter"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isFoodListLoaded && !$ctrl.foodListItems.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.foodListItems.Data && $ctrl.foodListItems.Data.length"><ta-home-food-list template="mobile" items="$ctrl.foodListItems" load-more="$ctrl.loadMoreFoodItems()" details="$ctrl.results"></ta-home-food-list></div></div><div ng-if="!$ctrl.hasFoodItems && $ctrl.isFoodListLoaded" class="search-results__whattoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">Currently there are no items</p></div></div></div></div></div><div class="search-results__lists ta-parent-section" id="search-results-whattoeat-list" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && ($ctrl.selectedViewGrid === \'regular\' || $ctrl.selectedViewGrid === \'list\')"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div></div><ta-footer-mobile ng-if="$ctrl.initialCallEnd"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-floating-filter-desktop.html','<div class="search-results__floating-filter search-results__floating-filter--top" show-when-scroll show-on="{{$ctrl.showFilterOnIds}}" hide-on="#what-to-eat-filters"><div class="search-results__desktop-width search-results__floating-filter-wrapper"><div class="search-results__floating-filter-chips"><ta-what-to-eat-filters-desktop ng-if="$ctrl.filtersData.filterItems" details="$ctrl.filtersData.details" filter-items="$ctrl.filtersData.filterItems" filters-changed="$ctrl.mainFiltersChanged(filters, callback); $ctrl.applyFilters();" reset-filters="$ctrl.filtersData.resetFilters" include-region="$ctrl.filtersData.includeRegion" include-foods="true" is-floating="true"></ta-what-to-eat-filters-desktop></div><div class="search-results__floating-filter-selection"><ta-mobile-food-order on-order-change="$ctrl.secondaryFilterChanged(orderBy)" options="$ctrl.filtersData.navFilterItems" override-change="$ctrl.selectedNavFilter"></ta-mobile-food-order></div><ta-home-map-button></ta-home-map-button></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-floating-filter-mobile.html','<div class="search-results__floating-filter search-results__floating-filter--top" ng-if="!$ctrl.filtersPopupOpened" show-when-scroll show-on="{{$ctrl.showFilterOnIds}}"><div class="search-results__floating-filter-row"><i class="icon icon__filters icon__filters--gray" ng-click="$ctrl.openFiltersPopup($event)"></i> <span class="search-results__floating-filter-title" ng-click="$ctrl.openFiltersPopup($event)">Filters</span><div class="search-results__floating-filter-views"><span ng-repeat="view in $ctrl.views" class="search-results__floating-filter-views-item" ng-click="$ctrl.changeViewGrid(view.code)"><i class="icon icon__grid" ng-class="[{ \'icon__grid--deselected\' : $ctrl.selectedViewGrid !== view.code }, view.icon]"></i></span></div></div><div class="search-results__floating-filter-row search-results__floating-filter-row--geo" ng-if="$ctrl.filtersData.includeRegion"><ta-what-to-eat-filters-mobile ng-if="$ctrl.filtersData.filterItems" details="$ctrl.filtersData.details" filter-items="$ctrl.filtersData.filterItems" filters-changed="$ctrl.mainFiltersChanged(filters, callback); $ctrl.applyFilters();" reset-filters="$ctrl.filtersData.resetFilters" include-region="$ctrl.filtersData.includeRegion" include-foods="false" is-popup="true"></ta-what-to-eat-filters-mobile></div></div><div ng-if="$ctrl.filtersPopupOpened"><div modal-directive close-modal="$ctrl.closeFiltersPopup()" class="modal search-results__floating-filter-modal"><div class="modal__container modal__container--full-screen"><div class="modal__header"></div><div class="modal__body"><ta-what-to-eat-filters-mobile ng-if="$ctrl.filtersData.filterItems" details="$ctrl.filtersData.details" filter-items="$ctrl.filtersData.filterItems" filters-changed="$ctrl.mainFiltersChanged(filters, callback)" reset-filters="$ctrl.filtersData.resetFilters" include-region="false" is-popup="true"></ta-what-to-eat-filters-mobile><ta-search-results-nav-filter-mobile filter-items="$ctrl.filtersData.navFilterItems" on-filter-selected="$ctrl.secondaryFilterChanged(filter)" is-content-loaded="$ctrl.isContentLoaded" override-change="$ctrl.selectedNavFilter" view-type="\'chips\'"></ta-search-results-nav-filter-mobile></div><div class="modal__footer modal__container--fixed-bottom search-results__floating-filter-footer"><div class="btn__set btn__set--2-in-row"><button class="btn btn--light-gray-background btn--inline" ng-click="$ctrl.closeFiltersPopup()"><span>CANCEL</span></button> <button ng-click="$ctrl.applyFilters()" class="btn btn--red-background btn--inline" ng-class="{ \'btn--disabled-background\' : !$ctrl.dataChanged }">APPLY</button></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-nav-filter-desktop.html','<div ng-class="{ \'disabled-with-opacity\' : $ctrl.disableControl }"><div class="search-results__navigation-menu"><nav class="search-results__nav"><ul><li ng-repeat="filterItem in $ctrl.filterItems" class="about-food__nav__item" ng-click="$ctrl.changeFilter(filterItem.code)" ng-class="{ \'selected\' : $ctrl.selectedFilter === filterItem.code }">{{::filterItem.name}}</li></ul></nav></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-nav-filter-mobile.html','<div ng-if="$ctrl.viewType !== \'chips\'" class="about-food" ng-class="{ \'disabled-with-opacity\' : $ctrl.disableControl }"><div class="about-food__menu"><nav class="about-food__nav-fix"><ul class="about-food__nav__list about-food__nav__list--tall about-food__nav__list--scrollable"><li ng-repeat="filterItem in $ctrl.filterItems" class="about-food__nav__item" ng-click="$ctrl.changeFilter(filterItem.code)" ng-class="{ \'about-food__nav__item--selected\' : $ctrl.selectedFilter === filterItem.code }">{{::filterItem.name}}</li></ul><ul class="about-food__nav__list about-food__nav__list--tall" ng-if="$ctrl.extraControl && $ctrl.extraControl.isVisible"><li class="about-food__nav__item about-food__nav__item--action"><a onclick="window.location.href = window.location.href + \'/restaurants\';">{{::$ctrl.extraControl.actionName}}</a></li></ul></nav></div></div><div ng-if="$ctrl.viewType === \'chips\'" class="search-results__whattoeat-bottom-filter search-results__whattoeat-bottom-filter--nav"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedFilter === filterItem.code }" ng-click="$ctrl.changeFilter(filterItem.code)" ng-repeat="filterItem in $ctrl.filterItems track by $index">{{filterItem.name}}</span></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-what-to-eat-filters-desktop.html','<div ng-class="{ \'search-results__filter\' : $ctrl.isFloating }"><div class="search-results__whattoeat-upper-filter" ng-if="$ctrl.showRegionFilter"><div class="search-results__round-filter search-results__round-filter--selected search-results__round-filter--geo" ng-click="$ctrl.selectRegionAsFilter($ctrl.mainRegionFilter.id)" ng-style="$ctrl.mainRegionFilter.style"><span class="search-results__round-filter-label">{{$ctrl.mainRegionFilter.Name}}</span> <span class="count count--selected" ng-if="$ctrl.mainRegionFilter.FoodCount !== undefined">{{$ctrl.mainRegionFilter.FoodCount}}</span></div><div ng-if="$ctrl.parentRegionFilter" class="search-results__round-filter search-results__round-filter--connected search-results__round-filter--geo" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedRegionFilter === $ctrl.parentRegionFilter.id || $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-click="$ctrl.selectRegionAsFilter($ctrl.parentRegionFilter.id)" ng-style="$ctrl.parentRegionFilter.style"><span class="search-results__round-filter-label">{{$ctrl.parentRegionFilter.Name}}</span> <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedRegionFilter === $ctrl.parentRegionFilter.id || $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-if="$ctrl.parentRegionFilter.FoodCount !== undefined">{{$ctrl.parentRegionFilter.FoodCount}}</span></div><div ng-if="$ctrl.countryFilter" class="search-results__round-filter search-results__round-filter--connected search-results__round-filter--geo" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-click="$ctrl.selectRegionAsFilter($ctrl.countryFilter.id)" ng-style="$ctrl.countryFilter.style"><span class="search-results__round-filter-label">{{$ctrl.countryFilter.Name}}</span> <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-if="$ctrl.countryFilter.FoodCount !== undefined">{{$ctrl.countryFilter.FoodCount}}</span></div></div><div class="search-results__whattoeat-bottom-filter" ng-class="{ \'search-results__whattoeat-bottom-filter--solo\' : !$ctrl.showRegionFilter }" ng-if="$ctrl.showFoodsFilter"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.isMainFilterActive(mainFilter.Id, mainFilter.UrlLink) }" ng-click="$ctrl.changeMainFilter(mainFilter)" ng-repeat="mainFilter in $ctrl.displayedMainFilters track by $index">{{mainFilter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.isMainFilterActive(mainFilter.Id) }" ng-if="mainFilter.Count !== undefined">{{mainFilter.Count}}</span></span><div class="search-results__round-filter search-results__round-filter--circle" ng-if="!$ctrl.filtersExpanded && $ctrl.isFloating" ng-click="$ctrl.showAllMainFilters()"><span class="icon-wrapper"><i class="icon icon--arrow--down-light-gray"></i></span></div><div class="search-results__round-filter search-results__round-filter--circle" ng-if="$ctrl.filtersExpanded && $ctrl.isFloating" ng-click="$ctrl.hideFilters()"><span class="icon-wrapper"><i class="icon icon--close-slim"></i></span></div><div class="search-results__filter-box" ng-if="$ctrl.filtersExpanded && $ctrl.isFloating" click-outside="$ctrl.hideFilters()"><div class="search-results__filter-box-title">FILTERS</div><div class="search-results__whattoeat-bottom-filter"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.isMainFilterActive(mainFilter.Id, mainFilter.UrlLink) }" ng-click="$ctrl.changeMainFilter(mainFilter)" ng-repeat="mainFilter in $ctrl.mainFilters track by $index">{{mainFilter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.isMainFilterActive(mainFilter.Id) }" ng-if="mainFilter.Count !== undefined">{{mainFilter.Count}}</span></span></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/filters/ta-what-to-eat-filters-mobile.html','<div class="search-results__whattoeat-upper-filter" ng-if="$ctrl.showRegionFilter"><div class="search-results__round-filter search-results__round-filter--selected search-results__round-filter--geo" ng-click="$ctrl.selectRegionAsFilter($ctrl.mainRegionFilter.id)" ng-style="$ctrl.mainRegionFilter.style"><span class="search-results__round-filter-label">{{$ctrl.mainRegionFilter.Name}}</span> <span class="count count--selected" ng-if="$ctrl.mainRegionFilter.FoodCount !== undefined">{{$ctrl.mainRegionFilter.FoodCount}}</span></div><div ng-if="$ctrl.parentRegionFilter" class="search-results__round-filter search-results__round-filter--connected search-results__round-filter--geo" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedRegionFilter === $ctrl.parentRegionFilter.id || $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-click="$ctrl.selectRegionAsFilter($ctrl.parentRegionFilter.id)" ng-style="$ctrl.parentRegionFilter.style"><span class="search-results__round-filter-label">{{$ctrl.parentRegionFilter.Name}}</span> <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedRegionFilter === $ctrl.parentRegionFilter.id || $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-if="$ctrl.parentRegionFilter.FoodCount !== undefined">{{$ctrl.parentRegionFilter.FoodCount}}</span></div><div ng-if="$ctrl.countryFilter" class="search-results__round-filter search-results__round-filter--connected search-results__round-filter--geo" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-click="$ctrl.selectRegionAsFilter($ctrl.countryFilter.id)" ng-style="$ctrl.countryFilter.style"><span class="search-results__round-filter-label">{{$ctrl.countryFilter.Name}}</span> <span class="count" ng-class="{ \'count--selected\' : $ctrl.selectedRegionFilter === $ctrl.countryFilter.id }" ng-if="$ctrl.countryFilter.FoodCount !== undefined">{{$ctrl.countryFilter.FoodCount}}</span></div></div><div class="search-results__whattoeat-bottom-filter" ng-if="$ctrl.showFoodsFilter"><span class="search-results__round-filter" ng-class="{ \'search-results__round-filter--selected\' : $ctrl.isMainFilterActive(mainFilter.Id, mainFilter.UrlLink), \'search-results__round-filter--last\' : $index === $ctrl.displayedMainFilters.length - 1 }" ng-click="$ctrl.changeMainFilter(mainFilter)" ng-repeat="mainFilter in $ctrl.displayedMainFilters track by $index">{{mainFilter.Name}} <span class="count" ng-class="{ \'count--selected\' : $ctrl.isMainFilterActive(mainFilter.Id) }" ng-if="mainFilter.Count !== undefined">{{mainFilter.Count}}</span></span><div class="search-results__round-filter search-results__round-filter--circle" ng-if="$ctrl.displayedMainFilters.length !== $ctrl.mainFilters.length && !$ctrl.isPopup" ng-click="$ctrl.showAllMainFilters()"><span class="icon-wrapper"><i class="icon icon--arrow--down-light-gray"></i></span></div><div class="search-results__round-filter search-results__round-filter--circle" ng-if="$ctrl.filtersExpanded && !$ctrl.isPopup" ng-click="$ctrl.hideFilters()"><span class="icon-wrapper"><i class="icon icon--arrow--up-light-gray"></i></span></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-dish-where-to-eat.html','<div class="miss-text miss-text--bottom-border">Want your restaurant listed here? <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-food.html','<div class="miss-text miss-text--bottom-border">Did we miss any authentic dishes, beverages, or local ingredients from {{$ctrl.name}}? Tell us. <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-ingredient-establishment.html','<div class="miss-text miss-text--small-text">Do you wish to add an establishment where {{$ctrl.name}} is sold? Contact us. <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-region.html','<div class="miss-text miss-text--bottom-border">We don\u2019t know much about food from {{$ctrl.name}}. Do you know any authentic dishes, ingredients, or beverages from {{$ctrl.name}}? Tell us. <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-restaurant.html','<div class="miss-text miss-text--bottom-border">Have we missed any iconic restaurants in {{$ctrl.name}}? Contact us. <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a><br>Send as many information as you can regarding the restaurant, the dishes served there, and photos of the dishes.</div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/know-more/ta-knows-nothing.html','<div class="knows-nothing__wrapper" ng-hide="$ctrl.isContactInformationShown"><span>Sorry, we don\'t know what {{$ctrl.name}} is</span> Tell us what {{$ctrl.name}} is and what should we know about it <a href="mailto:editorial@tasteatlas.com">editorial@tasteatlas.com</a></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-desktop-region-what-to-eat.html','<ta-search-results-floating-filter-desktop ng-if="$ctrl.filtersData && $ctrl.filtersData.details" filters-data="$ctrl.filtersData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-desktop><div class="search-results__container" id="what-to-eat-filters"><div class="search-results__desktop-width"><h2 class="h1 h1--bold h1--lowercase h1--small">What to eat in {{::$ctrl.details.Prefix ? $ctrl.details.Prefix + \' \' + $ctrl.details.Name : $ctrl.details.Name}}?</h2><div ng-class="{ \'disabled-with-opacity\' : !$ctrl.isContentLoaded }" ng-if="$ctrl.filterItems"><ta-what-to-eat-filters-desktop details="$ctrl.details" filter-items="$ctrl.filterItems" filters-changed="$ctrl.mainFiltersChanged(filters, callback)" reset-filters="$ctrl.resetFilters" include-region="true"></ta-what-to-eat-filters-desktop></div></div></div><div class="search-results__container search-results__container--gray" id="search-results-whattoeat-bottom"><div class="search-results__desktop-width"><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItems && $ctrl.navFilterItems.length"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItems" on-filter-selected="$ctrl.changeSecondaryFilter(filter)" is-content-loaded="$ctrl.isContentLoaded" override-change="$ctrl.selectedNavFilter"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.isContentLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div id="search-results-whattoeat-content"><div class="search-results__whattoeat-content ta-parent-section" ng-repeat="whatToEatCollection in $ctrl.whatToEatCollections" ng-if="$ctrl.isContentLoaded && $ctrl.whatToEatItems[whatToEatCollection] && $ctrl.whatToEatItems[whatToEatCollection].Data.length"><h2 ng-if="$ctrl.whatToEatTitles[whatToEatCollection]" class="h2 h2--lowercase h2--muli h2--large search-results__whattoeat-content-title">{{$ctrl.whatToEatTitles[whatToEatCollection]()}}</h2><h2 ng-if="$ctrl.selectedNavFilter === \'bestrated\' && $ctrl.isCity" class="h2 h2--lowercase h2--muli h2--large search-results__whattoeat-content-title">{{$ctrl.whatToEatTitles.BestRated()}}</h2><div class="similar-list"><div class="similar-list__container"><div class="similar-list__list"><div class="similar-list__item" ng-repeat="item in $ctrl.whatToEatItems[whatToEatCollection].Data"><div class="similar-list__item-body"><div class="search-results__item-image"><div class="search-results__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=660" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position font-lining-figures" ng-if="$ctrl.isFoodPositionVisible(whatToEatCollection)"><span>{{$index + 1}}</span></div></div><div class="search-results__item-info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="_blank">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><a ng-href="{{item.Region.UrlLink}}" target="_blank" class="item-location" ng-if="item.Region && item.Region.Name && $ctrl.details.Name !== item.Region.Name"><i ng-if="!item.Region.Emblem" class="icon icon--pin"></i> <img ng-if="item.Region.Emblem" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"><div>{{$ctrl.getRegionName(item)}}</div></a><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="item.details"></ta-collection-rating-desktop></div><div class="similar-list__item-description similar-list__item-description--small" ng-if="item.Restaurant">Most iconic: <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div><div class="search-results__item-description search-results__item-description--small"><p>{{item.ShortDescription}}... <span class="read-more" ng-click="$ctrl.viewMore(item.UrlLink)">Read more</span></p></div><div class="search-results__item-links" ng-if="(item.EntityType === $ctrl.entityTypes.DISH) || (item.HasRecipe || item.HasPlaceToEatOrBuy)"><a ng-if="item.UrlLink && item.HasRecipe || item.HasPlaceToEatOrBuy" ng-href="{{item.UrlLink}}" target="_blank" class="search-results__item-link">OVERVIEW</a> <a ng-if="!item.IsBeverage && item.HasPlaceToEatOrBuy && item.EntityType === $ctrl.entityTypes.DISH" ng-href="{{item.OriginalRegionUrlLink}}/wheretoeat" target="_blank" class="search-results__item-link search-results__item-link--divide-left">WHERE TO EAT</a> <a ng-if="(item.IsBeverage || item.EntityType !== $ctrl.entityTypes.DISH) && item.HasPlaceToEatOrBuy" ng-href="{{item.OriginalRegionUrlLink}}/wheretobuy" target="_blank" class="search-results__item-link search-results__item-link--divide-left">WHERE TO BUY</a> <a ng-if="item.HasRecipe" ng-href="{{item.OriginalRegionUrlLink}}/recipe" target="_blank" class="search-results__item-link search-results__item-link--divide-left">VIEW RECIPE</a></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="6"></ta-food-ingredients-mini></div></div></div></div><div ng-if="$ctrl.whatToEatItems[whatToEatCollection].Data.length !== $ctrl.whatToEatItems[whatToEatCollection].Count" class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold" ng-click="$ctrl.loadMore(whatToEatCollection)">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor btn--arrow-bottom hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div><div class="promotion promotion--fullwidth promotion--nobottompadding" ng-if="$ctrl.whatToEatItems[whatToEatCollection].Count > 10"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-region-\' + whatToEatCollection}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div></div></div></div></div><div ng-if="!$ctrl.hasData && $ctrl.isContentLoaded" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing or <button class="no-results__button no-results__button--raw" ng-click="$ctrl.resetMainFilters()">resetting</button> the search filters.</span></div></div></div></div></div></div><div class="search-results__container"><div class="search-results__lists search-results__desktop-width" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && $ctrl.listDataAvailable" id="search-results-whattoeat-list"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div><div ng-if="$ctrl.articleListData.Data.length === 0 && $ctrl.listDataAvailable" class="search-results__lists ta-parent-section"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><div class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing or <button class="no-results__button no-results__button--raw" ng-click="$ctrl.resetMainFilters()">resetting</button> the search filters.</span></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-item-rating-desktop.html','<div ng-if="!$ctrl.isLoading"><div ng-if="!$ctrl.isAnonymous"><div class="rating-box__view" ng-if="$ctrl.validScoreCount >= 5" ng-mouseenter="$ctrl.toggleRatingWindow()" ng-mouseleave="$ctrl.toggleRatingWindow()"><span class="score-text">{{$ctrl.viewScore | number: 1}}</span><ta-star-score-mobile rating="$ctrl.score"></ta-star-score-mobile><span class="score-text">({{$ctrl.scoreCount}})</span><div class="rating-box__hover-box"><div class="commented" ng-if="$ctrl.isCommented"><div class="commented__avatar" ng-if="$ctrl.me.image" style="background-image:url({{::$ctrl.constants.cdnHost}}{{::$ctrl.me.image}}?mw=30)"></div><div class="commented__avatar icon icon--no-profile-alt" ng-if="!$ctrl.me.image"></div><div class="commented__rating">{{$ctrl.viewRating | number:1}}</div></div><div class="rating-box__action" ng-show="$ctrl.entered"><div class="rating-box__action_message">{{$ctrl.viewText}}</div><div class="ratingControl rating-box__action-vote" ng-mouseleave="$ctrl.onMouseLeaveRating()"><input type="radio" id="rating-5-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="10"> <label class="ratingControl-stars ratingControl-stars--5 ratingControl-stars--pos5" for="rating-5-{{$ctrl.entityId}}" ng-mouseleave="$ctrl.mouseLeave(9)" ng-mouseenter="$ctrl.mouseEnter(9)" ng-click="$ctrl.vote(10)"></label><input type="radio" id="rating-45-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="9"> <label class="ratingControl-stars ratingControl-stars--45 ratingControl-stars--half ratingControl-stars--pos5" for="rating-45-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(8)" ng-mouseenter="$ctrl.mouseEnter(8)" ng-click="$ctrl.vote(9)"></label><input type="radio" id="rating-4-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="8"> <label class="ratingControl-stars ratingControl-stars--4 ratingControl-stars--pos4" for="rating-4-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(7)" ng-mouseenter="$ctrl.mouseEnter(7)" ng-click="$ctrl.vote(8)"></label><input type="radio" id="rating-35-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="7"> <label class="ratingControl-stars ratingControl-stars--35 ratingControl-stars--half ratingControl-stars--pos4" for="rating-35-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(6)" ng-mouseenter="$ctrl.mouseEnter(6)" ng-click="$ctrl.vote(7)"></label><input type="radio" id="rating-3-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="6"> <label class="ratingControl-stars ratingControl-stars--3 ratingControl-stars--pos3" for="rating-3-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(5)" ng-mouseenter="$ctrl.mouseEnter(5)" ng-click="$ctrl.vote(6)"></label><input type="radio" id="rating-25-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="5"> <label class="ratingControl-stars ratingControl-stars--25 ratingControl-stars--half ratingControl-stars--pos3" for="rating-25-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(4)" ng-mouseenter="$ctrl.mouseEnter(4)" ng-click="$ctrl.vote(5)"></label><input type="radio" id="rating-2-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="4"> <label class="ratingControl-stars ratingControl-stars--2 ratingControl-stars--pos2" for="rating-2-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(3)" ng-mouseenter="$ctrl.mouseEnter(3)" ng-click="$ctrl.vote(4)"></label><input type="radio" id="rating-15-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="3"> <label class="ratingControl-stars ratingControl-stars--15 ratingControl-stars--half ratingControl-stars--pos2" for="rating-15-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(2)" ng-mouseenter="$ctrl.mouseEnter(2)" ng-click="$ctrl.vote(3)"></label><input type="radio" id="rating-1-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="2"> <label class="ratingControl-stars ratingControl-stars--1 ratingControl-stars--pos1" for="rating-1" ng-mouseleave="$ctrl.mouseLeave(1)" ng-mouseenter="$ctrl.mouseEnter(1)" ng-click="$ctrl.vote(2)"></label><input type="radio" id="rating-05" name="rating" value="1"> <label class="ratingControl-stars ratingControl-stars--05 ratingControl-stars--half ratingControl-stars--pos1" for="rating-05" ng-mouseleave="$ctrl.mouseLeave(0)" ng-mouseenter="$ctrl.mouseEnter(0)" ng-click="$ctrl.vote(1)"></label></div></div></div></div><div class="rating-box__view" ng-if="$ctrl.validScoreCount < 5" ng-mouseenter="$ctrl.toggleRatingWindow()" ng-mouseleave="$ctrl.toggleRatingWindow()"><span class="score-text">n/a</span><ta-star-score-mobile rating="0"></ta-star-score-mobile><span class="score-text">({{$ctrl.scoreCount}})</span><div class="rating-box__hover-box"><div class="commented" ng-if="$ctrl.isCommented"><div class="commented__avatar" ng-if="$ctrl.me.image" style="background-image:url({{::$ctrl.constants.cdnHost}}{{::$ctrl.me.image}}?mw=30)"></div><div class="commented__avatar icon icon--no-profile-alt" ng-if="!$ctrl.me.image"></div><div class="commented__rating">{{$ctrl.viewRating | number:1}}</div></div><div class="rating-box__action" ng-show="$ctrl.entered"><div class="rating-box__action_message">{{$ctrl.viewText}}</div><div class="ratingControl rating-box__action-vote" ng-mouseleave="$ctrl.onMouseLeaveRating()"><input type="radio" id="rating-5-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="10"> <label class="ratingControl-stars ratingControl-stars--5 ratingControl-stars--pos5" for="rating-5-{{$ctrl.entityId}}" ng-mouseleave="$ctrl.mouseLeave(9)" ng-mouseenter="$ctrl.mouseEnter(9)" ng-click="$ctrl.vote(10)"></label><input type="radio" id="rating-45-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="9"> <label class="ratingControl-stars ratingControl-stars--45 ratingControl-stars--half ratingControl-stars--pos5" for="rating-45-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(8)" ng-mouseenter="$ctrl.mouseEnter(8)" ng-click="$ctrl.vote(9)"></label><input type="radio" id="rating-4-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="8"> <label class="ratingControl-stars ratingControl-stars--4 ratingControl-stars--pos4" for="rating-4-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(7)" ng-mouseenter="$ctrl.mouseEnter(7)" ng-click="$ctrl.vote(8)"></label><input type="radio" id="rating-35-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="7"> <label class="ratingControl-stars ratingControl-stars--35 ratingControl-stars--half ratingControl-stars--pos4" for="rating-35-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(6)" ng-mouseenter="$ctrl.mouseEnter(6)" ng-click="$ctrl.vote(7)"></label><input type="radio" id="rating-3-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="6"> <label class="ratingControl-stars ratingControl-stars--3 ratingControl-stars--pos3" for="rating-3-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(5)" ng-mouseenter="$ctrl.mouseEnter(5)" ng-click="$ctrl.vote(6)"></label><input type="radio" id="rating-25-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="5"> <label class="ratingControl-stars ratingControl-stars--25 ratingControl-stars--half ratingControl-stars--pos3" for="rating-25-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(4)" ng-mouseenter="$ctrl.mouseEnter(4)" ng-click="$ctrl.vote(5)"></label><input type="radio" id="rating-2-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="4"> <label class="ratingControl-stars ratingControl-stars--2 ratingControl-stars--pos2" for="rating-2-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(3)" ng-mouseenter="$ctrl.mouseEnter(3)" ng-click="$ctrl.vote(4)"></label><input type="radio" id="rating-15-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="3"> <label class="ratingControl-stars ratingControl-stars--15 ratingControl-stars--half ratingControl-stars--pos2" for="rating-15-{{$ctrl.entityId}}-{{$ctrl.entityType}}" ng-mouseleave="$ctrl.mouseLeave(2)" ng-mouseenter="$ctrl.mouseEnter(2)" ng-click="$ctrl.vote(3)"></label><input type="radio" id="rating-1-{{$ctrl.entityId}}-{{$ctrl.entityType}}" name="rating" value="2"> <label class="ratingControl-stars ratingControl-stars--1 ratingControl-stars--pos1" for="rating-1" ng-mouseleave="$ctrl.mouseLeave(1)" ng-mouseenter="$ctrl.mouseEnter(1)" ng-click="$ctrl.vote(2)"></label><input type="radio" id="rating-05" name="rating" value="1"> <label class="ratingControl-stars ratingControl-stars--05 ratingControl-stars--half ratingControl-stars--pos1" for="rating-05" ng-mouseleave="$ctrl.mouseLeave(0)" ng-mouseenter="$ctrl.mouseEnter(0)" ng-click="$ctrl.vote(1)"></label></div></div></div></div></div><div ng-if="$ctrl.isAnonymous"><div class="rating-box__view" ng-if="$ctrl.validScoreCount >= 5" ng-click="$ctrl.openLogin()"><span class="score-text">{{$ctrl.viewScore | number: 1}}</span><ta-star-score-mobile rating="$ctrl.score"></ta-star-score-mobile><span class="score-text">({{$ctrl.scoreCount}})</span></div><div class="rating-box__view" ng-if="$ctrl.validScoreCount < 5" ng-click="$ctrl.openLogin()"><span class="score-text">n/a</span><ta-star-score-mobile rating="0" ng-click="$ctrl.openLogin()"></ta-star-score-mobile><span class="score-text">({{$ctrl.scoreCount}})</span></div></div></div><div ng-if="$ctrl.isLoading"><div class="rating-box__view rating-box__view--loading"><i class="fa fa-spinner fa-spin"></i></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-item-rating.html','<div ng-if="!$ctrl.isLoading"><div ng-if="!$ctrl.isAnonymous"><div><div class="rating-box__view" ng-click="$ctrl.toggleRatingOpen()" ng-if="$ctrl.validScoreCount >= 5"><div class="flex rating-container" ng-if="$ctrl.item.DividedScore || $ctrl.dividedScore"><span class="score-text">{{($ctrl.item.DividedScore ? $ctrl.item.DividedScore : $ctrl.dividedScore) | number:1}}</span><ta-star-score-mobile rating="$ctrl.item.Score.Score ? $ctrl.item.Score.Score : $ctrl.score"></ta-star-score-mobile></div><i class="icon--single-star icon--star-full"></i></div><div class="rating-box__view" ng-click="$ctrl.toggleRatingOpen()" ng-if="$ctrl.validScoreCount < 5"><span class="score-text--na">n/a</span><h2>{{ $ctrl.Rating }}</h2><ta-star-score-mobile rating="0"></ta-star-score-mobile><i class="icon--single-star icon--star-empty"></i></div><div class="modal" modal-directive close-modal="$ctrl.toggleRatingOpen()" ng-if="$ctrl.item.isRatingOpen || $ctrl.item.details.isRatingOpen"><div class="modal__canvas" ng-click="$ctrl.toggleRatingOpen()"></div><div class="modal__container modal__container--fixed-bottom"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.toggleRatingOpen()"></i></div><div class="modal__body"><h2 class="h2 h2--center h2--muli h2--bold h2--lowercase">Rate {{$ctrl.item.Name}}</h2><div class="comment__info-not-rated"><ta-star-vote-mobile rating="$ctrl.rating" on-rating-select="$ctrl.onVoteChange($event.selectedRating)" rating-exists="$ctrl.comment"></ta-star-vote-mobile></div></div><div class="modal__footer"><div ng-if="$ctrl.isRateValid" ng-click="$ctrl.vote()" class="btn btn--right btn--red-background submit-btn">SUBMIT</div><div ng-if="!$ctrl.isRateValid && !$ctrl.isCommented" class="btn btn--right submit-btn btn--disabled-background"><span ng-if="!$ctrl.submitting">SUBMIT</span></div><div ng-if="!$ctrl.isRateValid && $ctrl.rating === 1 && $ctrl.isCommented" class="btn btn--right submit-btn btn--red-background" ng-click="$ctrl.removeComment()"><span ng-if="!$ctrl.submitting">CANCEL YOUR RATING</span></div></div></div></div><div class="modal" modal-directive close-modal="$ctrl.closeStatistics()" ng-if="$ctrl.showStatistics"><div class="modal__container modal__container--fixed-bottom" click-outside="$ctrl.closeStatistics()"><div class="modal__header"><i class="icon icon--close-slim close-modal" ng-click="$ctrl.closeStatistics()"></i></div><div class="modal__body"><div class="comment__thanks-box comment__thanks-box--proposal"><ta-comment-summary template="mobile" food-details="$ctrl.item" close-action="$ctrl.closeStatistics()"></ta-comment-summary></div></div></div></div></div></div><div ng-if="$ctrl.isAnonymous"><div class="rating-box__view" ng-if="$ctrl.validScoreCount >= 5" ng-click="$ctrl.openLogin()"><i class="icon--single-star icon--star-full"></i><div class="flex rating-container" ng-if="$ctrl.item.DividedScore || $ctrl.dividedScore"><span class="score-text">{{($ctrl.item.DividedScore ? $ctrl.item.DividedScore : $ctrl.dividedScore) | number:1}}</span><ta-star-score-mobile rating="$ctrl.item.Score.Score ? $ctrl.item.Score.Score : $ctrl.score"></ta-star-score-mobile></div></div><div class="rating-box__view" ng-if="$ctrl.validScoreCount < 5" ng-click="$ctrl.openLogin()"><span class="score-text--na">n/a</span> <i class="icon--single-star icon--star-empty"></i><ta-star-score-mobile rating="0"></ta-star-score-mobile></div></div></div><div ng-if="$ctrl.isLoading"><div class="rating-box__view rating-box__view--loading"><i class="fa fa-spinner fa-spin"></i></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-list-desktop.html','<div class="search-results__regions-container"><div class="search-results__regions-item" ng-repeat="region in $ctrl.details.Data track by $index"><a class="search-results__regions-item-image" ng-href="{{::region.UrlLink}}" target="_blank"><img ng-if="!region.Image.Image" ta-lazy-load lazy-source="random"> <img ng-if="region.Image && region.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::region.Image.Image}}?width=460&height=320" lazy-alt="{{::region.Name}}"></a><div class="search-results__regions-item-info"><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{::region.UrlLink}}" target="_blank">{{::region.Name}}</a></h2><div class="similar-list__item-score" ng-if="$ctrl.details.part === \'Regions\'"><div class="rating"><div class="rating-box__view"><span ng-if="region.Score" class="score-text">{{region.Score/2 | number:1}}</span> <span ng-if="!region.Score" class="score-text--na">n/a</span><ta-star-score-mobile rating="region.Score"></ta-star-score-mobile><i class="icon dot"></i> <span class="score-text search-results__regions-food-count">{{$ctrl.getFoodCount(region.FoodCount)}}</span></div></div></div><div class="similar-list__item-score" ng-if="$ctrl.details.part === \'Cities\'"><div class="rating-box__view"><span class="score-text search-results__regions-food-count">{{$ctrl.getFoodCount(region.FoodCount)}}</span> <span class="score-text search-results__regions-pipe" ng-if="region.RestaurantCount">|</span> <span class="score-text search-results__regions-food-count score-text search-results__regions-food-count--separated" ng-if="region.RestaurantCount">{{$ctrl.getRestaurantCount(region.RestaurantCount)}}</span></div></div><div class="search-results__regions-item-description" ng-if="region.FamousFor && region.FamousFor.length">Famous for <a ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in region.FamousFor">{{dish.Name}}{{$index === region.FamousFor.length - 1 ? \'\' : \', \'}}</a></div></div><div class="search-results__regions-item-map" ng-if="$ctrl.imagesData[region.Name]"><a ng-href="{{::region.UrlLink}}" target="_blank"><ta-map-image image-filter="$ctrl.imagesData[region.Name]"></ta-map-image></a></div></div></div><div ng-if="$ctrl.details.Data.length !== $ctrl.details.Count" class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--underscore btn--center btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMoreItems()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-list-mobile.html','<div class="search-results__regions-item" ng-repeat="region in $ctrl.details.Data track by $index"><div class="search-results__regions-item-info"><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{::region.UrlLink}}" target="_blank">{{::region.Name}}</a></h2><div class="similar-list__item-score" ng-if="$ctrl.details.part === \'Regions\'"><div class="rating"><div class="rating-box__view"><span ng-if="region.Score" class="score-text">{{region.Score/2 | number:1}}</span> <span ng-if="!region.Score" class="score-text--na">n/a</span><ta-star-score-mobile rating="region.Score"></ta-star-score-mobile><i class="icon dot"></i> <span class="score-text search-results__regions-food-count">{{$ctrl.getFoodCount(region.FoodCount)}}</span></div></div></div><div class="similar-list__item-score" ng-if="$ctrl.details.part === \'Cities\'"><div class="rating-box__view"><span class="score-text search-results__regions-food-count">{{$ctrl.getFoodCount(region.FoodCount)}}</span> <span class="score-text search-results__regions-pipe" ng-if="region.RestaurantCount">|</span> <span class="score-text search-results__regions-food-count score-text search-results__regions-food-count--separated" ng-if="region.RestaurantCount">{{$ctrl.getRestaurantCount(region.RestaurantCount)}}</span></div></div><div class="search-results__regions-item-description" ng-if="region.FamousFor && region.FamousFor.length">Famous for <a ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in region.FamousFor">{{dish.Name}}{{$index === region.FamousFor.length - 1 ? \'\' : \', \'}}</a></div></div><div class="search-results__regions-item-map" ng-if="$ctrl.imagesData[region.Name]"><a ng-href="{{::region.UrlLink}}" target="_blank"><ta-map-image image-filter="$ctrl.imagesData[region.Name]"></ta-map-image></a></div></div><div ng-if="$ctrl.details.Data.length !== $ctrl.details.Count" class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--underscore btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMoreItems()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-regular-desktop-new.html','<div class="search-results"><div class="search-results__container search-results__container--gray search-results__container--nobottompadding" ng-if="$ctrl.whereToEatHasData"><div class="search-results__wheretoeat search-results__desktop-width"><div class="search-results__wheretoeat-title"><h2 class="search-results__wheretoeat-main-header h1 h1--small">Where to eat local?</h2><h2 class="search-results__wheretoeat-sub-header h2 h2--lowercase">The best traditional places in {{$ctrl.results.Name}}, recommended by food professionals</h2></div><div ng-if="$ctrl.locationRequestFinished"><ta-home-desktop-where-to-eat-list get-items="$ctrl.getWhereToEatItems(sort, location)" view-all="$ctrl.viewAllRestaurantsWhereToEat()" location="$ctrl.location" include-nearest-sort="$ctrl.isInLocation" details="$ctrl.results"></ta-home-desktop-where-to-eat-list></div></div></div><div class="search-results__whattoeat"><ta-home-desktop-region-what-to-eat details="$ctrl.results" view-mode="$ctrl.selectedViewGrid"></ta-home-desktop-region-what-to-eat></div><div class="search-results__desktop-width search-results__container" ng-if="$ctrl.regionsDetails && ($ctrl.regionsDetails.Regions.Count || $ctrl.regionsDetails.Cities.Count)"><div class="search-results__regions" ng-repeat="regionPart in $ctrl.regionDetailsParts track by $index"><h2 class="h2--muli search-results__whattoeat-content-title">{{::regionPart}}</h2><ta-home-region-list details="{ part: regionPart, Data: $ctrl.regionsDetails[regionPart].Data, Count: $ctrl.regionsDetails[regionPart].Count }" load-more="$ctrl.loadMoreRegionList(type, page, part)" template="desktop"></ta-home-region-list></div></div></div><ta-footer-desktop ng-if="$ctrl.isReady"></ta-footer-desktop>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-regular.html','<div class="search-results"><div class="search-results__wheretoeat" ng-if="($ctrl.whereToEatData && $ctrl.whereToEatData.length) || $ctrl.hasWhereToEatItems"><div class="search-results__wheretoeat-title"><h2 class="search-results__wheretoeat-main-header h1 h1--small">Where to eat local?</h2><h2 class="search-results__wheretoeat-sub-header h2 h2--lowercase">The best traditional places in {{$ctrl.results.Prefix ? $ctrl.results.Prefix + \' \' + $ctrl.results.Name : $ctrl.results.Name}}, recommended by food professionals</h2></div><div ng-if="$ctrl.locationRequestFinished"><ta-home-mobile-where-to-eat-list data="$ctrl.whereToEatData" get-items="$ctrl.getWhereToEatItems(sort, location)" view-all="$ctrl.viewAllRestaurantsWhereToEat()" location="$ctrl.location" include-nearest-sort="$ctrl.isInLocation" details="$ctrl.results"></ta-home-mobile-where-to-eat-list></div></div><div class="search-results__whattoeat" ng-if="$ctrl.whereToEatLoaded"><ta-home-region-what-to-eat details="$ctrl.results" view-mode="$ctrl.selectedViewGrid"></ta-home-region-what-to-eat></div><div ta-background-sections to="\'.ta-parent-section\'"><div class="search-results__regions ta-parent-section" ng-if="$ctrl.regionsDetails && $ctrl.regionsDetails[regionPart].Count" ng-repeat="regionPart in $ctrl.regionDetailsParts track by $index"><h2 class="h2--muli search-results__whattoeat-content-title">{{::regionPart}}</h2><ta-home-region-list details="{ part: regionPart, Data: $ctrl.regionsDetails[regionPart].Data, Count: $ctrl.regionsDetails[regionPart].Count }" load-more="$ctrl.loadMoreRegionList(type, page, part)" template="mobile"></ta-home-region-list></div></div><div class="search-results__link-box" ng-if="$ctrl.boxes && $ctrl.boxes.length && $ctrl.whereToEatLoaded"><h2 class="h2 h2--bold h2--uppercase h2--muli">Wider regions</h2><div class="search-results__link-box-container"><div class="search-results__link-box-item" ng-repeat="box in $ctrl.boxes track by $index"><div><div class="search-results__link-box-thumb"><a ng-href="{{::box.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}"><img ng-if="box.CoverImage && box.CoverImage.Image" noprerender="true" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::box.CoverImage.Image}}?width=320&height=205" lazy-alt="{{box.Name}}"> <img ng-if="!box.CoverImage.Image" noprerender="true" ta-lazy-load lazy-source="random" lazy-alt="{{box.Name}}"></a></div><div class="search-results__link-box-info"><h2 class="h2 h2--muli h2--bold h2--lowercase h2--center"><a ng-href="{{box.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{::box.FoodCount}} foods in {{::box.Name}}</a></h2></div></div></div></div></div></div><ta-footer-mobile ng-if="$ctrl.isReady"></ta-footer-mobile>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-what-to-eat.html','<ta-search-results-floating-filter-mobile ng-if="$ctrl.filtersData && $ctrl.filtersData.details" views="$ctrl.floatingFilterViews" on-change-view-grid="$ctrl.changeViewGrid(viewGrid, callback)" filters-data="$ctrl.filtersData" on-apply-filters="$ctrl.mainFiltersChanged(filters, callback)"></ta-search-results-floating-filter-mobile><div class="search-results__whattoeat-region-top" id="search-results-whattoeat-top"><h2 class="h2 h2--bold h2--lowercase">What to eat in {{::$ctrl.details.Prefix ? $ctrl.details.Prefix + \' \' + $ctrl.details.Name : $ctrl.details.Name}}?</h2><div ng-class="{ \'disabled-with-opacity\' : !$ctrl.isContentLoaded }" ng-if="$ctrl.showWhatToEatFilters() && $ctrl.filterItems"><ta-what-to-eat-filters-mobile details="$ctrl.details" filter-items="$ctrl.filterItems" filters-changed="$ctrl.mainFiltersChanged(filters, callback)" reset-filters="$ctrl.resetFilters" include-region="false"></ta-what-to-eat-filters-mobile></div></div><div ta-background-sections to="\'.ta-parent-section\'" id="search-results-whattoeat-bottom"><div class="search-results__whattoeat-region-bottom"><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItems && $ctrl.navFilterItems.length"><ta-search-results-nav-filter-mobile filter-items="$ctrl.selectedNavFilterItems" on-filter-selected="$ctrl.changeSecondaryFilter(filter)" is-content-loaded="$ctrl.isContentLoaded" override-change="$ctrl.selectedNavFilter"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isContentLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div id="search-results-whattoeat-content" ng-if="$ctrl.selectedViewGrid !== \'list\'"><div class="search-results__whattoeat-content ta-parent-section" ng-repeat="whatToEatCollection in $ctrl.whatToEatCollections" ng-if="$ctrl.isContentLoaded && $ctrl.whatToEatItems[whatToEatCollection] && $ctrl.whatToEatItems[whatToEatCollection].Data.length"><div ng-if="$ctrl.whatToEatTitles[whatToEatCollection]" class="search-results__whattoeat-content-title">{{$ctrl.whatToEatTitles[whatToEatCollection]()}}</div><div ng-if="$ctrl.selectedNavFilter === \'bestrated\' && $ctrl.isCity" class="search-results__whattoeat-content-title">{{$ctrl.whatToEatTitles.BestRated()}}</div><div class="similar-list"><div class="similar-list__container"><div class="similar-list__item similar-list__item--column" ng-repeat-start="item in $ctrl.whatToEatItems[whatToEatCollection].Data" ng-show="$ctrl.selectedViewGrid === \'regular\'"><div><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?width=320&height=205" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position font-lining-figures" ng-if="$ctrl.isFoodPositionVisible(whatToEatCollection)"><span>{{$index + 1}}</span></div></div><div class="similar-list__info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase similar-list__info-header" ng-if="!item.Certificate"><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><a ng-href="{{item.UrlLink}}" ng-if="item.Certificate" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}"><div class="certificate__container certificate__container--single"><h2 class="h2 h2--bold h2--lowercase similar-list__info-header"><span>{{item.Name}}</span> <span class="certificate certificate--single"><i class="certificate__item certificate__item--h3" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::item.Certificate.Image}}?mw=50\');"></i></span></h2></div></a><div class="item-location" ng-if="item.Region && item.Region.Name && $ctrl.details.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"><div>{{$ctrl.getRegionName(item)}}</div></div><div class="similar-list__item-score" ng-if="$ctrl.selectedViewGrid === \'regular\'" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="similar-list__item-description" ng-if="item.Restaurant">Most iconic: <a ng-href="{{item.Restaurant.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div><div ng-repeat-end class="promotion promotion--fullwidth promotion--search" ng-if="$ctrl.showBannerOnSearchResultsMobile($index, $ctrl.whatToEatItems[whatToEatCollection].Count) && $ctrl.selectedViewGrid === \'regular\'"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-region-\'+ item.Name + $index}}" name="/21703950087/M_TA_test" platform="mobile"></div></div><div class="search-results__large-item" ng-repeat-start="item in $ctrl.whatToEatItems[whatToEatCollection].Data" ng-show="$ctrl.selectedViewGrid === \'large\'"><div class="search-results__large-item-image"><div class="search-results__large-item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}"><img ng-if="item.Image.Image" class="img" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=660" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" class="img" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position similar-list__item-position--large font-lining-figures" ng-if="$ctrl.isFoodPositionVisible(whatToEatCollection)"><span>{{$index + 1}}</span></div></div><div class="search-results__large-item-info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="item-location" ng-if="item.Region && item.Region.Name && $ctrl.details.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"><div>{{$ctrl.getRegionName(item)}}</div></div><div class="similar-list__item-score" ng-if="$ctrl.selectedViewGrid === \'large\'" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="similar-list__item-description similar-list__item-description--large" ng-if="item.Restaurant">Best in <a ng-href="{{item.Restaurant.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div><div class="search-results__large-item-links" ng-if="(item.EntityType === $ctrl.entityTypes.DISH) || item.HasRecipe"><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__large-item-link">OVERVIEW</a> <a ng-href="{{item.UrlLink}}/wheretoeat" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__large-item-link search-results__large-item-link--divide-left">WHERE TO EAT</a> <a ng-href="{{item.UrlLink}}/recipe" ng-if="item.HasRecipe" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__large-item-link search-results__large-item-link--divide-left">VIEW RECIPE</a></div></div><div class="similar-list__item-ingredients similar-list__item-ingredients--large" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" include-name="true"></ta-food-ingredients-mini></div></div><div ng-repeat-end class="promotion promotion--fullwidth promotion--search" ng-if="$ctrl.whatToEatItems[whatToEatCollection].Count > 10 && $index === 1 && $ctrl.selectedViewGrid === \'large\'"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-region-large\'+ item.Name + $index}}" name="/21703950087/M_TA_test" platform="mobile"></div></div><div ng-if="$ctrl.whatToEatItems[whatToEatCollection].Data.length !== $ctrl.whatToEatItems[whatToEatCollection].Count" class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMore(whatToEatCollection)">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div></div></div></div></div><div ng-if="!$ctrl.hasData && $ctrl.isContentLoaded" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing or <button class="no-results__button no-results__button--raw" ng-click="$ctrl.resetMainFilters()">resetting</button> the search filters.</span></div></div></div></div></div><div class="search-results__lists ta-parent-section" ng-if="$ctrl.articleListData.Data && $ctrl.articleListData.Data.length && $ctrl.listDataAvailable" id="search-results-whattoeat-list"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><ta-home-search-results-list list-data="$ctrl.articleListData" load-more="$ctrl.loadMoreArticleList()"></ta-home-search-results-list></div><div ng-if="$ctrl.articleListData.Data.length === 0 && $ctrl.listDataAvailable" id="search-results-whattoeat-list-empty" class="search-results__lists ta-parent-section"><h2 class="h2 h2--bold h2--lowercase">Lists</h2><div class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing or <button class="no-results__button no-results__button--raw" ng-click="$ctrl.resetMainFilters()">resetting</button> the search filters.</span></div></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-desktop-search-results-events.html','<ul class="search-results__wheretoeat-list" ng-class="{ \'search-results__wheretoeat-list--scrollable\' : $ctrl.includeHorizontalScroll(\'events-ul\') }" id="events-ul" ta-horizontal-scroll-drag active-class="search-results__wheretoeat-list--scrolling"><li ng-repeat="item in $ctrl.events.Data track by $index" class="search-results__wheretoeat-item"><div class="search-results__wheretoeat-item-wrap"><a ng-href="{{item.UrlLink}}" target="_blank"><div class="search-results__wheretoeat-item-image"><img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Image.Image}}?h=400&w=400" lazy-alt="{{::item.Name}}" ng-if="item.Image && item.Image.Image"> <img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="random" lazy-alt="{{::item.Name}}" ng-if="!item.Image.Image"></div></a><div class="search-results__wheretoeat-item-name"><a ng-href="{{item.UrlLink}}" target="_blank"><h2 class="h2 h2--bold h2--lowercase">{{item.Name}}</h2></a></div><div class="search-results__wheretoeat-item-location" ng-class="{ \'search-results__wheretoeat-item-location--emblem\' : item.Region.Emblem }"><i ng-if="!item.Region.Emblem" class="icon icon--pin"></i> <img ng-if="item.Region.Emblem" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Region.Emblem}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{item.Region.Name}}</a></div><div class="search-results__wheretoeat-item-date"><i class="icon icon--calendar"></i> <span>{{::$ctrl.getExactDisplayDate(item)}}</span></div></div></li></ul><i ng-if="$ctrl.includeHorizontalScroll(\'events-ul\')" ng-click="$ctrl.scroll(\'left\', \'events-ul\')" class="icon icon__scroll-arrow icon__scroll-arrow--left"></i> <i ng-if="$ctrl.includeHorizontalScroll(\'events-ul\')" ng-click="$ctrl.scroll(\'right\', \'events-ul\')" class="icon icon__scroll-arrow icon__scroll-arrow--right"></i>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-food-list.html','<div><div id="search-results-whattoeat-content" ng-if="$ctrl.hasData()"><div class="similar-list search-results__food-list"><div class="similar-list__container search-results__whattoeat-content" ng-class="{ \'search-results__horizontal-scroll\' : $ctrl.includeHorizontalScroll() }"><div class="similar-list__list" ng-if="$ctrl.items.selectedViewGrid === \'regular\'"><div class="similar-list__item" ng-repeat="item in $ctrl.items.Data"><div class="similar-list__item-body"><div class="search-results__item-image search-results__item-image--regular"><div class="search-results__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=660" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position font-lining-figures" ng-if="$ctrl.items.selectedFoodListFilter === \'mostpopular\' || $ctrl.items.selectedFoodListFilter === \'bestrated\'"><span>{{$index + 1}}</span></div></div><div class="search-results__item-info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="_blank">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><a ng-href="{{item.Region.UrlLink}}" target="_blank" class="item-location" ng-if="item.Region && item.Region.Name && $ctrl.details.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"><div>{{$ctrl.getRegionName(item)}}</div></a><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="item.details"></ta-collection-rating-desktop></div><div class="similar-list__item-description similar-list__item-description--small" ng-if="item.Restaurant">Most iconic: <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div><div class="search-results__item-description search-results__item-description--small" ta-bind-html-compile="$ctrl.shortenDescription(item.Description, { readMoreFunc: \'$ctrl.viewMore(item.UrlLink)\' })"></div><div class="search-results__item-links" ng-if="(item.EntityType === $ctrl.entityTypes.DISH) || item.HasRecipe"><a ng-href="{{item.UrlLink}}" target="_blank" class="search-results__item-link">OVERVIEW</a> <a ng-href="{{item.UrlLink}}/wheretoeat" ng-if="item.EntityType === $ctrl.entityTypes.DISH" target="_blank" class="search-results__item-link search-results__item-link--divide-left">WHERE TO EAT</a> <a ng-href="{{item.UrlLink}}/recipe" ng-if="item.HasRecipe" target="_blank" class="search-results__item-link search-results__item-link--divide-left">VIEW RECIPE</a></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="6"></ta-food-ingredients-mini></div></div></div></div><ul class="search-results__wheretoeat-list" ng-if="$ctrl.items.selectedViewGrid === \'horizontal-list\'" ng-class="{ \'search-results__wheretoeat-list--scrollable\' : $ctrl.includeHorizontalScroll() }" id="whattoeat-ul" ta-horizontal-scroll-drag active-class="\'search-results__wheretoeat-list--scrolling\'"><li class="search-results__wheretoeat-item" ng-repeat="item in $ctrl.items.Data"><div class="search-results__wheretoeat-item-wrap similar-list__item--column"><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank" ng-class="{ \'similar-list__image-unrated\' : !$ctrl.isFoodRated(item) }"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=320" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a></div><div class="similar-list__info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="_blank">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase" ng-if="!item.Certificate"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="certificate__container certificate__container--single"><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}" ng-if="item.Certificate" target="_blank"><span>{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</span></a> <span class="certificate certificate--single"><a ng-href="{{item.Certificate.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h3" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::item.Certificate.Image}}?mw=50\');"></i></a></span></h2></div><a ng-href="{{item.Region.UrlLink}}" target="_blank" class="item-location" ng-if="$ctrl.details.Region.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"><div class="similar-list__item-region-name">{{$ctrl.getRegionName(item)}}</div></a><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-collection-rating-desktop item="item.details"></ta-collection-rating-desktop></div><div class="similar-list__item-description" ng-if="item.Restaurant">Best in <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> <span ng-if="!$ctrl.isInRestaurantLocation(item.Restaurant.RestaurantRegionId)">{{$ctrl.bestInRestaurant(item).regionName}}</span></div></div></div></li><li class="search-results__wheretoeat-item search-results__wheretoeat-item--viewmore" ng-if="$ctrl.details.UrlLink && $ctrl.items.Data.length > 2"><a ng-href="{{::$ctrl.details.UrlLink}}" class="search-results__wheretoeat-item-wrap"><div class="no-results__container no-results__container--fill-height"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__big-arrow icon__big-arrow-right icon__big-arrow--gray"></i></div></div><div class="no-results__content--no-location"><span class="no-results__text no-results__text--small no-results__text--gray no-results__text--bold">{{::$ctrl.details.viewAllLabel}}</span></div></div></div></a></li></ul><i ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'left\')" class="icon icon__scroll-arrow icon__scroll-arrow--left"></i> <i ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'right\')" class="icon icon__scroll-arrow icon__scroll-arrow--right"></i><div ng-if="$ctrl.items.Data.length !== $ctrl.items.Count && $ctrl.items.selectedViewGrid !== \'horizontal-list\'" class="search-results__view-more-wrapper"><div class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.startLoadMore()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div></div></div></div></div><div ng-if="!$ctrl.hasData()" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-view-all-restaurants.html','<div><div ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-desktop details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-desktop></div><ul class="similar-list__list"><li class="search-results__large-item similar-list__item" ng-repeat="restaurant in $ctrl.restaurantsList track by $index"><div class="similar-list__item-body"><div class="search-results__large-item-header"><a ng-href="{{restaurant.UrlLink}}" class="search-results__large-item-header-title" target="_blank"><h2 class="h2 h2--bold h2--lowercase">{{restaurant.Name}}</h2></a><div class="search-results__large-item-header-subtitle" ng-if="restaurant.Address || (restaurant.Region && restaurant.Region.Name)">{{restaurant.Region.Name}}</div><div ng-if="$ctrl.showDirections(restaurant)" class="search-results__large-item-header-location"><span ng-if="restaurant.Location.Distance" class="search-results__large-item-header-distance"><i class="icon icon--pin"></i> {{$ctrl.getDistance(restaurant.Location)}}</span> <span ng-if="restaurant.Location.Lat && restaurant.Location.Long" ng-click="$ctrl.redirectToGoogleMaps(restaurant.Location.Long, restaurant.Location.Lat)" class="search-results__large-item-links"><span class="search-results__large-item-link search-results__large-item-link--divide-left">DIRECTIONS</span></span></div><div ng-if="!$ctrl.showDirections && restaurant.Location" class="search-results__large-item-header-location"><span ng-if="restaurant.Location.Distance" class="search-results__large-item-header-distance"><i class="icon icon--pin"></i> {{$ctrl.getDistance(restaurant.Location)}}</span> <span ng-if="restaurant.Location.Lat && restaurant.Location.Long" ng-click="$ctrl.redirectToGoogleMaps(restaurant.Location.Long, restaurant.Location.Lat)" class="search-results__large-item-links"><span class="search-results__large-item-link search-results__large-item-link--divide-left">DIRECTIONS</span></span></div></div><div class="search-results__large-item-image-wrap restaurant-detail-card-image-wrap"><ta2-restaurant-tablecloths item="restaurant.Badge" type="restaurants" layout="desktop"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="restaurants" item="restaurant.Badge" layout="desktop" items-per-column="5"></ta2-restaurant-badges><a ng-href="{{restaurant.UrlLink}}" class="search-results__large-item-image" target="_blank" ng-class="{ \'search-results__large-item-image--shadow\' : $ctrl.showAwardImage(restaurant) }" ng-if="restaurant.Image && restaurant.Image.Image"><img class="img" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::restaurant.Image.Image}}?mw=600" lazy-alt="{{::restaurant.Name}}"></a> <a ng-href="{{restaurant.UrlLink}}" target="_blank" class="search-results__large-item-image" ng-if="!restaurant.Image.Image"><img class="img" ta-lazy-load lazy-source="random" lazy-alt="{{::restaurant.Name}}"></a><div ng-show="showScoreWrapper" class="search-results__item-rating search-results__item-rating-centered-by-points"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(restaurant)" is-rated="$ctrl.isRestaurantRated(restaurant.Id)" avg-rating="$ctrl.getRestaurantAvgRating(restaurant.Id)"></ta-restaurant-rating-control></div></div><div ng-if="restaurant.Description" class="search-results__large-item-info search-results__large-item-info--small"><div class="search-results__large-item-description" ng-bind-html="restaurant.Description | html"></div></div><div ng-if="!restaurant.Description && restaurant.Critic" class="search-results__large-item-info search-results__large-item-info--small"><div class="search-results__large-item-description" ta-recommended-by name="restaurant.Critic.Name" url="restaurant.Critic.ProfileUrl" source="restaurant.Critic.Source" count="restaurant.NoOfCritics"></div><div class="reviews__list" ng-if="restaurant.Critic.Content"><blockquote cite="{{restaurant.Critic.SourceLink}}"><div class="review__content"><div read-more number-of-letters="500" read-more-txt="{{restaurant.Critic.Content}}"></div></div></blockquote></div></div><div ng-if="(restaurant.Dishes && restaurant.Dishes.length) || (restaurant.FamousForEntities && restaurant.FamousForEntities.length)" class="search-results__large-item-info search-results__large-item-info--small search-results__large-item-info--recommended" ng-class="{ \'search-results__large-item-info--bottom\' : $ctrl.shouldAlignRecommendedDishesToBottom($index, $ctrl.restaurantsList) }"><div class="search-results__large-item-recommended"><span class="search-results__large-item-recommended-title">RECOMMENDED DISHES</span><ul class="search-results__large-item-recommended-list"><li class="search-results__large-item-recommended-list-item" ng-repeat="dish in $ctrl.concatFamousForEntities(restaurant.Dishes, restaurant.FamousForEntities) track by $index | limitTo: 3"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="search-results__large-item-recommended-list-item-image"><img ng-if="dish.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::dish.Image.Image}}?w=236&h=164" lazy-alt="{{::dish.Name}}"> <img ng-if="!dish.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::dish.Name}}"></a><div class="search-results__large-item-recommended-list-item-info"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="title">{{::dish.Name}}</a><div class="subtitle" ng-if="$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)"><div class="search-results__wheretoeat-item-award-wrapper"><img class="search-results__wheretoeat-item-award-icon" src="/Content/layout-shared/layout/icons/stolnjak.svg"></div>{{::$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)}}</div></div></li><li class="search-results__large-item-recommended-list-item" ng-if="restaurant.Dishes && restaurant.Dishes.length && !$ctrl.concatFamousForEntities()" ng-repeat="dish in restaurant.Dishes track by $index | limitTo: 3"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="search-results__large-item-recommended-list-item-image"><img ng-if="dish.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::dish.Image.Image}}?w=236&h=164" lazy-alt="{{::dish.Name}}"> <img ng-if="!dish.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::dish.Name}}"></a><div class="search-results__large-item-recommended-list-item-info"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="title">{{::dish.Name}}</a><div class="subtitle" ng-if="$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)"><div class="search-results__wheretoeat-item-award-wrapper"><img class="search-results__wheretoeat-item-award-icon" src="/Content/layout-shared/layout/icons/stolnjak.svg"></div>{{::$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)}}</div></div></li></ul></div></div></div></li></ul></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-view-all.html','<div class="search-results"><div class="search-results__whattoeat-recommended search-results__container search-results__container--gray"><div class="search-results__desktop-width"><div class="search-results__whattoeat-restaurants"><div class="search-results__viewall-title" ng-class="{ \'search-results__viewall-title--flat\' : $ctrl.navFilterItemsRestaurants.length <= 1 }" ng-if="$ctrl.geoPermissionFinished"><h1 class="h1 h1--bold h1--lowercase h1--small">{{$ctrl.restaurantSectionTitle}}</h1></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItemsRestaurants.length > 1"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsRestaurants" on-filter-selected="$ctrl.changeSecondaryFilterRestaurants(filter)" is-content-loaded="$ctrl.areRestaurantsLoaded" override-change="$ctrl.selectedNavFilterRestaurants"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.areRestaurantsLoaded && !$ctrl.restaurantsList.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div class="similar-list" ng-if="$ctrl.areRestaurantsLoaded || $ctrl.restaurantsList.length"><div class="similar-list__container" ng-if="$ctrl.restaurantsList && $ctrl.restaurantsList.length"><ta-home-view-all-restaurants template="desktop"></ta-home-view-all-restaurants><div ng-if="$ctrl.restaurantsList.length < $ctrl.response.Count" class="search-results__view-more"><button ng-click="$ctrl.loadMore()" class="btn btn--nopadding btn--underscore btn--no-bgcolor btn--black-text btn--extrabold hide-span-element">View more</button></div></div><div ng-if="$ctrl.restaurantsList && $ctrl.restaurantsList.length === 0" class="search-results__wheretoeat-empty h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.selectedNavFilterRestaurants !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.selectedNavFilterRestaurants === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivatedRestaurants(location)"></ta-location-prompt-mobile></div></div></div></div></div></div><div class="search-results__viewall-foods search-results__container search-results__container--nobottompadding"><div class="search-results__desktop-width"><div class="search-results__viewall-title" ng-if="$ctrl.geoPermissionFinished"><h1 class="h1 h1--bold h1--lowercase h1--small">{{::$ctrl.foodsHeaderTitle}}</h1><span class="search-results__viewall-link"><a ng-href="{{::$ctrl.originalUrlLink}}" class="btn btn--noborder btn--nopadding btn--no-bgcolor btn--bold">VIEW ALL</a></span></div><div ng-show="!$ctrl.foods.Data && !$ctrl.foods.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-show="$ctrl.foods && $ctrl.foods.Data && $ctrl.foods.Data.length"><ta-home-food-list template="desktop" items="$ctrl.foods" details="{ Region: { Name: $ctrl.regionName }, currentRegionId: $ctrl.regionId, UrlLink: $ctrl.originalUrlLink, viewAllLabel: $ctrl.viewAllFoodsLabel }"></ta-home-food-list></div></div></div><div class="promotion promotion--fullwidth promotion--nobottompadding"><div ta-google-ad id="{{\'div-gpt-ad-1598870123608-0-viewall-wheretoeat\'}}" platform="desktop" name="/21703950087/D_TA_billboard"></div></div><div class="search-results__wheretoeat search-results__container search-results__container--nobottompadding search-results__container--gray"><div class="search-results__desktop-width"><div class="search-results__wheretoeat-title"><h2 class="h1 h1--small h2--bold h2--lowercase search-results__wheretoeat-main-header">{{$ctrl.eventSectionTitle}}</h2></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItemsEvents.length"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItemsEvents" on-filter-selected="$ctrl.changeWhereToEatEventsFilter(filter)" is-content-loaded="$ctrl.areEventsLoaded" override-change="false"></ta-search-results-nav-filter-desktop></div><div ng-show="!$ctrl.areEventsLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.areEventsLoaded" class="search-results__wheretoeat-content search-results__horizontal-scroll"><ta-search-results-events ng-if="$ctrl.events.Data && $ctrl.events.Data.length" template="desktop" events="$ctrl.events"></ta-search-results-events><div ng-if="$ctrl.events.Data && $ctrl.events.Data.length === 0" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.selectedNavFilterEvents !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.selectedNavFilterEvents === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivatedEvents(location)"></ta-location-prompt-mobile></div></div></div></div></div><ta-footer-desktop ng-if="$ctrl.areEventsLoaded"></ta-footer-desktop></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-where-to-eat-list.html','<div class="search-results__navigation search-results__navigation--flex" ng-if="$ctrl.isMoreThanFiveInitially"><ta-search-results-nav-filter-desktop filter-items="$ctrl.navFilterItems" on-filter-selected="$ctrl.changeWhereToEatFilter(filter)" is-content-loaded="$ctrl.isContentLoaded" override-change="$ctrl.whereToEatFilter"></ta-search-results-nav-filter-desktop><div class="search-results__navigation-view-all" ng-if="$ctrl.whereToEat.length >= 3 && $ctrl.viewAll"><a onclick="window.location.href = window.location.href + \'/restaurants\';" class="btn btn--nopadding btn--no-bgcolor btn--bold btn--lowercase">View all</a></div></div><div ng-show="!$ctrl.isContentLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isContentLoaded" class="search-results__wheretoeat-content search-results__horizontal-scroll"><ul ng-if="$ctrl.whereToEat.length" class="search-results__wheretoeat-list" ng-class="{ \'search-results__wheretoeat-list--scrollable\' : $ctrl.includeHorizontalScroll() }" id="wheretoeat-ul" ta-horizontal-scroll-drag active-class="search-results__wheretoeat-list--scrolling"><li ng-repeat="item in $ctrl.whereToEat track by $index" class="search-results__wheretoeat-item"><div class="search-results__wheretoeat-item-wrap"><div class="search-results__wheretoeat-item-image restaurant-detail-card-image-wrap"><ta2-restaurant-tablecloths item="item.Badge" type="where-to-eat" layout="desktop"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="where-to-eat" layout="desktop" item="item.Badge"></ta2-restaurant-badges><a ng-href="{{item.UrlLink}}" target="_blank" ng-class="{ \'search-results__wheretoeat-item-image--shadow\' : $ctrl.showAwardImage(item) }"><img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Image.Image}}?mw=560" lazy-alt="{{::item.Name}}" ng-if="item.Image && item.Image.Image" disable="{{$index < 3}}"> <img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="random" lazy-alt="{{::item.Name}}" ng-if="!item.Image.Image" disable="{{$index < 3}}"></a><div ng-show="showScoreWrapper" class="search-results__item-rating search-results__item-rating-centered-by-points-small"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isRestaurantRated(item.Id)" avg-rating="$ctrl.getRestaurantAvgRating(item.Id)"></ta-restaurant-rating-control></div></div><div class="search-results__wheretoeat-item-name"><h5 ng-if="item.IsNearest && $ctrl.whereToEatFilter === \'selection\'" class="h5--muli h5--regular group">NEAREST</h5><h5 ng-if="item.IsMostRecommended && $ctrl.whereToEatFilter === \'selection\'" class="h5--muli h5--regular group">MOST RECOMMENDED</h5><a ng-href="{{item.UrlLink}}" target="_blank"><h2 class="h2 h2--bold h2--lowercase">{{item.Name}}</h2></a></div><div class="search-results__wheretoeat-item-location" ng-class="{ \'search-results__wheretoeat-item-location--emblem\' : !$ctrl.shouldShowPin(item) }" ng-if="($ctrl.details.RegionLevel >= $ctrl.regionLevels.CapitalCity || $ctrl.details.RegionLevel === undefined) && item.EntityType !== $ctrl.entityTypes.EVENT"><span ng-if="$ctrl.details.RegionLevel != 3 || (item.Location && $ctrl.isRegion && $ctrl.distanceCalculatorCheck(item.Location))" style="display: contents;"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}?mw=16"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{item.Region.Name}}</a></span><div class="search-results__wheretoeat-item-distance" ng-if="$ctrl.details.RegionLevel != 7 && $ctrl.details.RegionLevel != 6 && item.Location && $ctrl.isRegion && $ctrl.distanceCalculatorCheck(item.Location)"><span class="dot-divide">\xB7</span> <span class="distance">{{$ctrl.distanceCalculatorCheck(item.Location)}}</span></div></div><div ng-if="item.EntityType === $ctrl.entityTypes.EVENT" class="search-results__wheretoeat-item-date"><i class="icon icon--calendar"></i> <span>{{::$ctrl.getExactDisplayDate(item)}}</span></div><div ng-if="(item.Dishes && item.Dishes.length) || (item.FamousForEntities && item.FamousForEntities.length)"><div ng-if="$ctrl.bestInTheWorld(item)" class="search-results__wheretoeat-item-info search-results__wheretoeat-item-info--best"><p>{{$ctrl.topInTheWorldFirstDescription(item.Dishes[0])}} <a ng-href="{{item.Dishes[0].UrlLink}}" target="_blank">{{item.Dishes[0].Name.trim()}}</a> in the world.<span class="search-results__wheretoeat-item-info--also also-famous-for" ng-if="$ctrl.isFamousFor(item)">&nbsp;Also famous for <a ng-if="item.Dishes[0].Name !== dish.Name" ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in $ctrl.concatFamousForEntities(item.Dishes, item.FamousForEntities) track by $index | limitTo: 3">{{dish.Name.trim()}}{{$index === $ctrl.famousFor.length - 1 ? \'\' : \', \'}}</a></span></p></div></div><div ng-if="$ctrl.isFamousFor(item) && !$ctrl.bestInTheWorld(item) && ((item.Dishes && item.Dishes.length) || (item.FamousForEntities && item.FamousForEntities.length))" class="search-results__wheretoeat-item-info search-results__wheretoeat-item-info--famous"><p>Famous for <a ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in $ctrl.concatFamousForEntities(item.Dishes, item.FamousForEntities) track by $index | limitTo: 3">{{dish.Name.trim()}}{{$index === $ctrl.famousFor.length - 1 ? \'\' : \', \'}}</a></p></div></div></li><li class="search-results__wheretoeat-item search-results__wheretoeat-item--viewmore" ng-if="$ctrl.whereToEat.length >= 3" ng-click="$ctrl.viewAll()"><div class="search-results__wheretoeat-item-wrap"><div class="no-results__container no-results__container--fill-height"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__big-arrow icon__big-arrow-right icon__big-arrow--gray"></i></div></div><div class="no-results__content--no-location"><span ng-if="$ctrl.viewAllLinkText" class="no-results__text no-results__text--gray no-results__text--bold">{{$ctrl.viewAllLinkText}}</span> <span ng-if="!$ctrl.viewAllLinkText" class="no-results__text no-results__text--gray no-results__text--bold">View all recommended restaurants in {{::$ctrl.regionName}}</span></div></div></div></div></li></ul><i ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'left\')" class="icon icon__scroll-arrow icon__scroll-arrow--left"></i> <i ng-if="$ctrl.includeHorizontalScroll()" ng-click="$ctrl.scroll(\'right\')" class="icon icon__scroll-arrow icon__scroll-arrow--right"></i><div class="search-results__rating-container" ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-desktop details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-desktop></div><div ng-if="$ctrl.whereToEat.length === 0" class="search-results__wheretoeat-empty search-results__wheretoeat-empty--bottompadding h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.whereToEatFilter !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.whereToEatFilter === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-food-list.html','<div><div id="search-results-whattoeat-content" ng-if="$ctrl.hasData()"><div class="search-results__whattoeat-content ta-parent-section"><div class="similar-list"><div class="similar-list__container" ng-if="$ctrl.items.selectedViewGrid !== \'horizontal-list\'" ng-show="$ctrl.items.selectedViewGrid === \'regular\'"><div class="similar-list__item similar-list__item--column" ng-repeat-start="item in $ctrl.items.Data"><div><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=320" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position font-lining-figures" ng-if="$ctrl.items.selectedFoodListFilter === \'mostpopular\' || $ctrl.items.selectedFoodListFilter === \'bestrated\'"><span>{{$index + 1}}</span></div></div><div class="similar-list__info"><h2 class="h2 h2--bold h2--lowercase similar-list__info-header" ng-if="!item.Certificate"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="certificate__container certificate__container--single"><h2 class="h2 h2--bold h2--lowercase similar-list__info-header"><a ng-href="{{item.UrlLink}}" ng-if="item.Certificate" target="_blank"><span>{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</span></a> <span class="certificate certificate--single"><a ng-href="{{item.Certificate.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h3" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::item.Certificate.Image}}?mw=50\');"></i></a></span></h2></div><div class="item-location" ng-if="$ctrl.details.Region.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{$ctrl.getRegionName(item)}}</a></div><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="similar-list__item-description" ng-if="item.Restaurant">Most iconic: <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div></div></div><div class="similar-list__item-ingredients" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" limit-to="4"></ta-food-ingredients-mini></div></div><div ng-repeat-end class="promotion promotion--fullwidth promotion--search" " ng-if="$ctrl.items.Count > 20 && $ctrl.showBannerOnSearchResultsMobile($index, $ctrl.items.Count) && $ctrl.items.selectedViewGrid === \'regular\'"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-dish-group-\'+ item.Name + $index}}" name="/21703950087/M_TA_test" platform="mobile"></div></div></div><div class="similar-list__container" ng-if="$ctrl.items.selectedViewGrid !== \'horizontal-list\'" ng-show="$ctrl.items.selectedViewGrid === \'large\'"><div class="search-results__large-item" ng-repeat-start="item in $ctrl.items.Data"><div class="search-results__large-item-image"><div class="search-results__large-item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank"><img ng-if="item.Image.Image" class="img" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=660" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" class="img" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a><div class="similar-list__item-position similar-list__item-position--large font-lining-figures" ng-if="$ctrl.items.selectedFoodListFilter === \'mostpopular\' || $ctrl.items.selectedFoodListFilter === \'bestrated\'"><span>{{$index + 1}}</span></div></div><div class="search-results__large-item-info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="_blank">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="item-location"><i ng-if="!item.Country.Emblem && !item.Region.Emblem" class="icon icon--pin"></i> <img ng-if="item.Country.Emblem || item.Region.Emblem" ng-src="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{$ctrl.getRegionName(item)}}</a></div><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="similar-list__item-description similar-list__item-description--large" ng-if="item.Restaurant">Best in <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> {{$ctrl.bestInRestaurant(item).regionName}}</div><div class="search-results__large-item-links" ng-if="(item.EntityType === $ctrl.entityTypes.DISH) || item.HasRecipe"><a ng-href="{{item.UrlLink}}/wheretoeat" target="_blank" ng-if="item.EntityType === $ctrl.entityTypes.DISH" class="search-results__large-item-link">WHERE TO EAT</a> <a ng-href="{{item.UrlLink}}/recipe" target="_blank" ng-if="item.HasRecipe" class="search-results__large-item-link" ng-class="{ \'search-results__large-item-link--divide-left\' : item.EntityType === $ctrl.entityTypes.DISH }">VIEW RECIPE</a></div></div><div class="similar-list__item-ingredients similar-list__item-ingredients--large" ng-if="item.FoodIngredients && item.FoodIngredients.length"><ta-food-ingredients-mini items="item.FoodIngredients" include-name="true"></ta-food-ingredients-mini></div></div><div ng-repeat-end class="promotion promotion--fullwidth promotion--search" " ng-if="$ctrl.items.Count > 20 && $index === 1 && $ctrl.items.selectedViewGrid === \'large\'"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-dish-group-large\'+ item.Name + $index}}" name="/21703950087/M_TA_test" platform="mobile"></div></div></div><div class="similar-list__container" ng-if="$ctrl.items.selectedViewGrid === \'horizontal-list\'"><ul class="search-results__wheretoeat-list"><li class="similar-list__item similar-list__item--column search-results__wheretoeat-item" ng-repeat="item in $ctrl.items.Data"><div class="search-results__wheretoeat-item-wrap similar-list__item--column"><div class="similar-list__thumb"><div class="similar-list__item-rating"><ta-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isFoodRated(item)" rating-data="item.details"></ta-rating-control></div><a ng-href="{{item.UrlLink}}" target="_blank" ng-class="{ \'similar-list__image-unrated\' : !$ctrl.isFoodRated(item) }"><img ng-if="item.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}/{{::item.Image.Image}}?mw=320" lazy-alt="{{::item.Name}}"> <img ng-if="!item.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::item.Name}}"></a></div><div class="similar-list__info"><div class="group"><a ng-href="{{item.Group.UrlLink}}" target="_blank">{{item.Group.Name}}</a></div><h2 class="h2 h2--bold h2--lowercase similar-list__info-header" ng-if="!item.Certificate"><a ng-href="{{item.UrlLink}}" target="_blank">{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</a></h2><div class="certificate__container certificate__container--single"><h2 class="h2 h2--bold h2--lowercase similar-list__info-header"><a ng-href="{{item.UrlLink}}" ng-if="item.Certificate" target="_blank"><span>{{ item.EnglishName ? item.EnglishName + \' (\' + item.Name + \')\' : item.Name }}</span></a> <span class="certificate certificate--single"><a ng-href="{{item.Certificate.UrlLink}}" target="_blank"><i class="certificate__item certificate__item--h3" style="background-image: url(\'{{::$ctrl.constants.cdnHost}}{{::item.Certificate.Image}}?mw=50\');"></i></a></span></h2></div><div class="item-location" ng-if="$ctrl.details.Region.Name !== item.Region.Name"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank" class="similar-list__item-region-name">{{$ctrl.getRegionName(item)}}</a></div><div class="similar-list__item-score" ng-class="{ \'similar-list__item-score--na\' : item.Score.ValidScoreCount < 5 }"><ta-home-item-rating class="rating" item="item.details"></ta-home-item-rating></div><div class="similar-list__item-description" ng-if="item.Restaurant">Best in <a ng-href="{{item.Restaurant.UrlLink}}" target="_blank">{{$ctrl.bestInRestaurant(item).restaurantName}}</a> <span ng-if="!$ctrl.isInRestaurantLocation(item.Restaurant.RestaurantRegionId)">{{$ctrl.bestInRestaurant(item).regionName}}</span></div></div></div></li><li class="search-results__wheretoeat-item search-results__wheretoeat-item--viewmore" ng-if="$ctrl.details.UrlLink && $ctrl.items.Data.length > 2"><a ng-href="{{::$ctrl.details.UrlLink}}" class="search-results__wheretoeat-item-wrap"><div class="no-results__container no-results__container--fill-height"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__big-arrow icon__big-arrow-right icon__big-arrow--gray"></i></div></div><div class="no-results__content--no-location"><span class="no-results__text no-results__text--small no-results__text--gray no-results__text--bold">{{::$ctrl.details.viewAllLabel}}</span></div></div></div></a></li></ul></div><div ng-if="$ctrl.items.Data.length !== $ctrl.items.Count && $ctrl.items.selectedViewGrid !== \'horizontal-list\'" class="search-results__view-more-wrapper"><div class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.startLoadMore()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div></div></div></div></div><div ng-if="!$ctrl.hasData()" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-view-all-restaurants.html','<div><div ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-modal details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-modal></div><ul class="similar-list__container"><li class="search-results__large-item" ng-repeat-start="restaurant in $ctrl.restaurantsList track by $index"><div class="search-results__large-item-header"><a ng-href="{{restaurant.UrlLink}}" target="_blank" class="search-results__large-item-header-title"><h2 class="h2 h2--bold h2--lowercase">{{restaurant.Name}}</h2></a><div class="search-results__large-item-header-subtitle" ng-if="restaurant.Address">{{::$ctrl.getRestaurantAddress(restaurant)}}</div><div ng-if="!$ctrl.showDirections && restaurant.Location" class="search-results__large-item-header-location"><span ng-if="restaurant.Location.Distance" class="search-results__large-item-header-distance"><i class="icon icon--pin"></i> {{$ctrl.getDistance(restaurant.Location)}}</span> <span ng-if="restaurant.Location.Lat && restaurant.Location.Long" ng-click="$ctrl.redirectToGoogleMaps(restaurant.Location.Long, restaurant.Location.Lat)" class="search-results__large-item-links"><span class="search-results__large-item-link search-results__large-item-link--divide-left">DIRECTIONS</span></span></div><div ng-if="$ctrl.showDirections(restaurant)" class="search-results__large-item-header-location"><span ng-if="restaurant.Location.Distance" class="search-results__large-item-header-distance"><i class="icon icon--pin"></i> {{$ctrl.getDistance(restaurant.Location)}}</span> <span ng-if="restaurant.Location.Lat && restaurant.Location.Long" ng-click="$ctrl.redirectToGoogleMaps(restaurant.Location.Long, restaurant.Location.Lat)" class="search-results__large-item-links"><span class="search-results__large-item-link search-results__large-item-link--divide-left">DIRECTIONS</span></span></div></div><div class="search-results__large-item-image restaurant-detail-card-image-wrap" ng-class="{ \'search-results__large-item-image--shadow\' : $ctrl.showAwardImage(restaurant) }"><ta2-restaurant-tablecloths item="restaurant.Badge" type="restaurants" layout="mobile"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="restaurants" layout="mobile" item="restaurant.Badge"></ta2-restaurant-badges><a ng-href="{{restaurant.UrlLink}}" target="_blank" ng-if="restaurant.Image && restaurant.Image.Image"><img class="img" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::restaurant.Image.Image}}?mw=600" lazy-alt="{{::restaurant.Name}}"></a> <a ng-href="{{restaurant.UrlLink}}" target="_blank" ng-if="!restaurant.Image.Image"><img class="img" ta-lazy-load lazy-source="random" lazy-alt="{{::restaurant.Name}}"></a><div ng-show="showScoreWrapper" class="similar-list__item-rating similar-list__item-rating-centered-by-points"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(restaurant)" is-rated="$ctrl.isRestaurantRated(restaurant.Id)" avg-rating="$ctrl.getRestaurantAvgRating(restaurant.Id)"></ta-restaurant-rating-control></div></div><div ng-if="restaurant.Description" class="search-results__large-item-info search-results__large-item-info--small"><div class="search-results__large-item-description" ng-bind-html="restaurant.Description | html"></div></div><div ng-if="!restaurant.Description && restaurant.Critic" class="search-results__large-item-info search-results__large-item-info--small"><div class="search-results__large-item-description" ta-recommended-by name="restaurant.Critic.Name" url="restaurant.Critic.ProfileUrl" source="restaurant.Critic.Source" count="restaurant.NoOfCritics"></div><div class="reviews__list" ng-if="restaurant.Critic.Content"><blockquote cite="{{restaurant.Critic.SourceLink}}"><div class="review__content"><div read-more number-of-letters="500" read-more-txt="{{restaurant.Critic.Content}}"></div></div></blockquote></div></div><div ng-if="(restaurant.Dishes && restaurant.Dishes.length) || (restaurant.FamousForEntities && restaurant.FamousForEntities.length)" class="search-results__large-item-info search-results__large-item-info--small search-results__large-item-info--recommended"><div class="search-results__large-item-recommended"><span class="search-results__large-item-recommended-title">RECOMMENDED DISHES</span><ul class="search-results__large-item-recommended-list"><li class="search-results__large-item-recommended-list-item" ng-class="{ \'search-results__large-item-recommended-list-item--single\' : restaurant.famousFor.length === 1 }" ng-repeat="dish in $ctrl.concatFamousForEntities(restaurant.Dishes, restaurant.FamousForEntities) track by $index | limitTo: 3"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="search-results__large-item-recommended-list-item-image"><img ng-if="dish.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::dish.Image.Image}}?w=236&h=164" lazy-alt="{{::dish.Name}}"> <img ng-if="!dish.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::dish.Name}}"></a><div class="search-results__large-item-recommended-list-item-info"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="title">{{::dish.Name}}</a><div class="subtitle" ng-if="$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)"><div class="search-results__wheretoeat-item-award-wrapper"><img class="search-results__wheretoeat-item-award-icon" src="/Content/layout-shared/layout/icons/stolnjak.svg"></div>{{::$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)}}</div></div></li><li class="search-results__large-item-recommended-list-item" ng-if="restaurant.Dishes && restaurant.Dishes.length && !$ctrl.concatFamousForEntities()" ng-class="{ \'search-results__large-item-recommended-list-item--single\' : restaurant.Dishes.length === 1 }" ng-repeat="dish in restaurant.Dishes track by $index"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="search-results__large-item-recommended-list-item-image"><img ng-if="dish.Image.Image" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::dish.Image.Image}}?w=236&h=164" lazy-alt="{{::dish.Name}}"> <img ng-if="!dish.Image.Image" ta-lazy-load lazy-source="random" lazy-alt="{{::dish.Name}}"></a><div class="search-results__large-item-recommended-list-item-info"><a ng-href="{{::dish.UrlLink}}" target="_blank" class="title">{{::dish.Name}}</a><div class="subtitle" ng-if="$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)"><div class="search-results__wheretoeat-item-award-wrapper"><img class="search-results__wheretoeat-item-award-icon" src="/Content/layout-shared/layout/icons/stolnjak.svg"></div>{{::$ctrl.getRankingLabel(dish.PrecalculatedWorldRanking)}}</div></div></li></ul></div></div></li><li ng-repeat-end class="promotion promotion--fullwidth" ng-if="$ctrl.showBannerInRestaurantsList($index) && $ctrl.restaurants.Data.length !== $index + 1"><div ta-google-ad id="{{\'div-gpt-ad-1574692848681-near-me-restaurant\'+ $index}}" name="/21703950087/M_TA_test" platform="mobile"></div></li></ul></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-view-all.html','<div class="search-results__go-back header" ng-if="!$ctrl.page"><span ng-click="$ctrl.goBack()"><i class="icon icon__big-arrow icon__big-arrow-left"></i> {{::$ctrl.headerTitle}}</span></div><div class="search-results__viewall-foods"><div class="search-results__viewall-title search-results__viewall-title--cut" ng-if="$ctrl.geoPermissionFinished"><h2 class="h2 h2--bold h2--lowercase">{{::$ctrl.foodsHeaderTitle}}</h2><span class="search-results__viewall-link"><a ng-href="{{::$ctrl.originalUrlLink}}" class="btn btn--noborder btn--nopadding btn--no-bgcolor btn--bold">VIEW ALL</a></span></div><div ng-show="!$ctrl.foods.Data && !$ctrl.foods.Data.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-show="$ctrl.foods && $ctrl.foods.Data && $ctrl.foods.Data.length"><ta-home-food-list template="mobile" items="$ctrl.foods" details="{ Region: { Name: $ctrl.regionName }, currentRegionId: $ctrl.regionId, UrlLink: $ctrl.originalUrlLink, viewAllLabel: $ctrl.viewAllFoodsLabel }"></ta-home-food-list></div></div><div class="search-results__whattoeat-recommended" ta-background-sections to="\'.ta-parent-section\'"><div class="search-results__whattoeat-restaurants ta-parent-section"><div class="search-results__viewall-title" ng-class="{ \'search-results__viewall-title--flat\' : $ctrl.navFilterItemsRestaurants.length <= 1 }" ng-if="$ctrl.geoPermissionFinished"><h1 class="h2 h2--bold h2--lowercase">{{$ctrl.restaurantSectionTitle}}</h1></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItemsRestaurants.length > 1"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsRestaurants" on-filter-selected="$ctrl.changeSecondaryFilterRestaurants(filter)" is-content-loaded="$ctrl.areRestaurantsLoaded" override-change="$ctrl.selectedNavFilterRestaurants"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.areRestaurantsLoaded && !$ctrl.restaurantsList.length" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div class="similar-list" ng-if="$ctrl.areRestaurantsLoaded || $ctrl.restaurantsList.length"><div ng-if="$ctrl.restaurantsList && $ctrl.restaurantsList.length"><ta-home-view-all-restaurants template="mobile"></ta-home-view-all-restaurants><div ng-if="$ctrl.restaurantsList.length < $ctrl.response.Count" class="where_to_eat__view-more"><button ng-click="$ctrl.loadMore()" class="btn btn--nopadding btn--underscore btn--no-bgcolor btn--black-text btn--extrabold btn--center">View more</button></div></div><div ng-if="$ctrl.restaurantsList && $ctrl.restaurantsList.length === 0" class="search-results__wheretoeat-empty h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.selectedNavFilterRestaurants !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.selectedNavFilterRestaurants === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivatedRestaurants(location)"></ta-location-prompt-mobile></div></div></div></div><div class="search-results__wheretoeat ta-parent-section"><div class="search-results__wheretoeat-title"><h2 class="h1 h1--small h2--bold h2--lowercase search-results__wheretoeat-main-header">{{$ctrl.eventSectionTitle}}</h2></div><div class="food-navigation search-results__navigation" ng-if="$ctrl.navFilterItemsEvents.length"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItemsEvents" on-filter-selected="$ctrl.changeWhereToEatEventsFilter(filter)" is-content-loaded="$ctrl.areEventsLoaded" override-change="false"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.areEventsLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.areEventsLoaded" class="search-results__wheretoeat-content"><ta-search-results-events ng-if="$ctrl.events.Data && $ctrl.events.Data.length" template="mobile" events="$ctrl.events"></ta-search-results-events><div ng-if="$ctrl.events.Data && $ctrl.events.Data.length === 0" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.selectedNavFilterEvents !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.selectedNavFilterEvents === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivatedEvents(location)"></ta-location-prompt-mobile></div></div></div></div><ta-footer-mobile ng-if="$ctrl.areEventsLoaded"></ta-footer-mobile></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-where-to-eat-list.html','<div class="food-navigation search-results__navigation" ng-if="$ctrl.isMoreThanFiveInitially" ng-class="{ \'search-results__navigation--cut\' : $ctrl.whereToEat.length >= 3 && $ctrl.viewAll }"><ta-search-results-nav-filter-mobile filter-items="$ctrl.navFilterItems" on-filter-selected="$ctrl.changeWhereToEatFilter(filter)" is-content-loaded="$ctrl.isContentLoaded" override-change="$ctrl.whereToEatFilter" extra-control="$ctrl.viewAllData"></ta-search-results-nav-filter-mobile></div><div ng-show="!$ctrl.isContentLoaded" style="margin: auto;"><img src="/Content/Image/loader.gif"></div><div ng-if="$ctrl.isContentLoaded" class="search-results__wheretoeat-content"><ul ng-if="$ctrl.whereToEat.length" class="search-results__wheretoeat-list"><li ng-repeat="item in $ctrl.whereToEat track by $index" class="search-results__wheretoeat-item"><div class="search-results__wheretoeat-item-wrap"><div class="search-results__wheretoeat-item-image restaurant-detail-card-image-wrap"><ta2-restaurant-tablecloths item="item.Badge" type="where-to-eat" layout="mobile"></ta2-restaurant-tablecloths><ta2-restaurant-badges type="where-to-eat" layout="mobile" item="item.Badge"></ta2-restaurant-badges><a ng-href="{{item.UrlLink}}" target="_blank"><img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Image.Image}}?mw=560" lazy-alt="{{::item.Name}}" ng-if="item.Image && item.Image.Image" disable="{{$index < 3}}"> <img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="random" lazy-alt="{{::item.Name}}" ng-if="!item.Image.Image" disable="{{$index < 3}}"></a><div ng-show="showScoreWrapper" class="similar-list__item-rating similar-list__item-rating-centered-by-points-small"><ta-restaurant-rating-control open-rating="$ctrl.tryOpenRating(item)" is-rated="$ctrl.isRestaurantRated(item.Id)" avg-rating="$ctrl.getRestaurantAvgRating(item.Id)"></ta-restaurant-rating-control></div></div><div class="search-results__wheretoeat-item-name"><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}"><h2 class="h2 h2--bold h2--lowercase">{{$ctrl.displayText(item.Name, 39)}}</h2></a></div><div class="search-results__wheretoeat-item-location" ng-class="{ \'search-results__wheretoeat-item-location--emblem\' : !$ctrl.shouldShowPin(item) }" ng-if="($ctrl.details.RegionLevel > $ctrl.regionLevels.CapitalCity || $ctrl.details.RegionLevel === undefined) && item.EntityType !== $ctrl.entityTypes.EVENT"><i ng-if="$ctrl.shouldShowPin(item)" class="icon icon--pin"></i> <img ng-if="!$ctrl.shouldShowPin(item)" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{$ctrl.getEmblem(item)}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{item.Region.Name}}</a><div class="search-results__wheretoeat-item-distance" ng-show="$ctrl.details.RegionLevel != 7 && $ctrl.details.RegionLevel != 6 && item.Location && $ctrl.isRegion && $ctrl.distanceCalculatorCheck(item.Location)"><span class="dot-divide">\xB7</span> <span class="distance">{{$ctrl.distanceCalculatorCheck(item.Location)}}</span></div></div><div class="search-results__wheretoeat-item-location search-results__wheretoeat-item-location--emblem" ng-if="$ctrl.details.RegionLevel <= $ctrl.regionLevels.CapitalCity && $ctrl.includeNearestSort && item.Address && item.EntityType !== $ctrl.entityTypes.EVENT" ng-click="$ctrl.redirectToGoogleMaps(item.Address)"><span ng-if="$ctrl.details.RegionLevel != 3 || (item.Location && $ctrl.isRegion && $ctrl.distanceCalculatorCheck(item.Location))">{{$ctrl.displayAddress(item.Address)}}</span><div class="search-results__wheretoeat-item-distance" ng-show="$ctrl.details.RegionLevel != 7 && $ctrl.details.RegionLevel != 6 && item.Location && $ctrl.isRegion && $ctrl.distanceCalculatorCheck(item.Location)"><span class="dot-divide">\xB7</span> <span class="distance">{{$ctrl.distanceCalculatorCheck(item.Location)}}</span></div></div><div ng-if="item.EntityType === $ctrl.entityTypes.EVENT" class="search-results__wheretoeat-item-date"><i class="icon icon--calendar"></i> <span>{{::$ctrl.getExactDisplayDate(item)}}</span></div><div ng-if="(item.Dishes && item.Dishes.length) || (item.FamousForEntities && item.FamousForEntities.length)"><div ng-if="$ctrl.bestInTheWorld(item)" class="search-results__wheretoeat-item-info search-results__wheretoeat-item-info--best"><p>{{$ctrl.topInTheWorldFirstDescription(item.Dishes[0])}} <a ng-href="{{item.Dishes[0].UrlLink}}" target="_blank">{{item.Dishes[0].Name.trim()}}</a> in the world. <span class="search-results__wheretoeat-item-info--also also-famous-for" ng-if="$ctrl.isFamousFor(item) && item.Dishes[0].Name != dish.Name">&nbsp;Also famous for <a ng-if="item.Dishes[0].Name !== dish.Name" ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in $ctrl.concatFamousForEntities(item.Dishes, item.FamousForEntities) | limitTo: 3">{{dish.Name.trim()}}{{$index === $ctrl.famousFor.length - 1 ? \'\' : \', \'}}</a></span></p></div></div><div ng-if="$ctrl.isFamousFor(item) && !$ctrl.bestInTheWorld(item) && ((item.Dishes && item.Dishes.length) || (item.FamousForEntities && item.FamousForEntities.length))" class="search-results__wheretoeat-item-info search-results__wheretoeat-item-info--famous"><p>Famous for <a ng-href="{{dish.UrlLink}}" target="_blank" ng-repeat="dish in $ctrl.concatFamousForEntities(item.Dishes, item.FamousForEntities) track by $index | limitTo: 3">{{dish.Name.trim()}}{{$index === $ctrl.famousFor.length - 1 ? \'\' : \', \'}}</a></p></div></div></li><li class="search-results__wheretoeat-item search-results__wheretoeat-item--viewmore" ng-if="$ctrl.whereToEat.length >= 3" ng-click="$ctrl.viewAll()"><div class="search-results__wheretoeat-item-wrap"><div class="no-results__container no-results__container--fill-height"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__big-arrow icon__big-arrow-right icon__big-arrow--gray"></i></div></div><div class="no-results__content--no-location"><span ng-if="$ctrl.viewAllLinkText" class="no-results__text no-results__text--small no-results__text--gray no-results__text--bold">{{$ctrl.viewAllLinkText}}</span> <span ng-if="!$ctrl.viewAllLinkText" class="no-results__text no-results__text--small no-results__text--gray no-results__text--bold">View all recommended restaurants in {{::$ctrl.regionName}}</span></div></div></div></div></li></ul><div class="search-results__rating-container" ng-if="$ctrl.isRestaurantRatingOpen"><ta-restaurant-comment-modal details="$ctrl.restaurantItem" on-close-modal="$ctrl.closeRestaurantRating()"></ta-restaurant-comment-modal></div><div ng-if="$ctrl.whereToEat.length === 0" class="search-results__wheretoeat-empty h2 h2--center h2--muli h2--bold h2--lowercase"><div class="no-results__container no-results__container--shadow" ng-if="$ctrl.isLocationOn() || ($ctrl.whereToEatFilter !== \'nearest\' && !$ctrl.isLocationOn())"><div class="no-results__content"><div class="no-results__pin-wrapper"><div class="no-results__pin"><i class="icon icon__no-results icon__no-results--gray"></i></div></div><div class="no-results__content--no-location"><p class="info-text">No results.</p><span class="no-results__text no-results__text--divided">Try changing the search filters.</span></div></div></div><div ng-if="!$ctrl.isLocationOn() && $ctrl.whereToEatFilter === \'nearest\'" class="location-prompt"><ta-location-prompt-mobile location="$ctrl.location" on-location-activated="$ctrl.onLocationActivated(location)"></ta-location-prompt-mobile></div></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-home-search-results-list.html','<div class="search-results__list-container"><ul class="search-results__list"><li class="search-results__list-item" ng-repeat="item in $ctrl.listData.Data track by $index"><a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__list-item-image" ng-if="item.Image && item.Image.Image"><img ta-lazy-load lazy-source="{{$ctrl.constants.cdnHost}}/{{item.Image.Image}}?w=230&h=160" lazy-alt="{{$ctrl.articleTitles[$index].top}} {{$ctrl.articleTitles[$index].bottom}}"></a> <a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__list-item-image" ng-if="!item.Image.Image"><img ta-lazy-load lazy-source="random" lazy-alt="{{$ctrl.articleTitles[$index].top}} {{$ctrl.articleTitles[$index].bottom}}"></a> <a ng-href="{{item.UrlLink}}" target="{{$ctrl.isOneTabBrowser ? \'_self\' : \'_blank\'}}" class="search-results__list-item-title font-lining-figures"><div class="search-results__list-item-title-top">{{$ctrl.articleTitles[$index].top}}</div><div class="search-results__list-item-title-bottom">{{$ctrl.articleTitles[$index].bottom}}</div></a></li></ul><div ng-if="$ctrl.listData.Data.length !== $ctrl.listData.Count" class="search-results__view-more"><button ng-show="!$ctrl.isButtonLoading" class="btn btn--inline btn--underscore btn--nopadding btn--no-bgcolor btn--black-text btn--extrabold hide-span-element" ng-click="$ctrl.loadMoreItems()">VIEW MORE</button> <button ng-show="$ctrl.isButtonLoading" class="btn btn--noborder btn--no-bgcolor hide-span-element"><i class="fa fa-spinner fa-spin"></i></button></div></div>');$templateCache.put('/content/scripts/app/components/home-page/home-search-results/shared/ta-mobile-search-results-events.html','<ul class="search-results__wheretoeat-list"><li ng-repeat="item in $ctrl.events.Data track by $index" class="search-results__wheretoeat-item"><div class="search-results__wheretoeat-item-wrap"><a ng-href="{{item.UrlLink}}" target="_blank"><div class="search-results__wheretoeat-item-image"><img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Image.Image}}?h=400&w=400" lazy-alt="{{::item.Name}}" ng-if="item.Image && item.Image.Image"> <img ta-lazy-load class="search-results__wheretoeat-item-image-img" lazy-source="random" lazy-alt="{{::item.Name}}" ng-if="!item.Image.Image"></div></a><div class="search-results__wheretoeat-item-name"><a ng-href="{{item.UrlLink}}" target="_blank"><h2 class="h2 h2--bold h2--lowercase">{{item.Name}}</h2></a></div><div class="search-results__wheretoeat-item-location" ng-class="{ \'search-results__wheretoeat-item-location--emblem\' : item.Region.Emblem }"><i ng-if="!item.Region.Emblem" class="icon icon--pin"></i> <img ng-if="item.Region.Emblem" ta-lazy-load lazy-source="{{::$ctrl.constants.cdnHost}}{{::item.Region.Emblem}}"> <a ng-href="{{item.Region.UrlLink}}" target="_blank">{{item.Region.Name}}</a></div><div class="search-results__wheretoeat-item-date"><i class="icon icon--calendar"></i> <span>{{::$ctrl.getExactDisplayDate(item)}}</span></div></div></li></ul>');$templateCache.put('/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-dish.html','<ul class="recursion-list"><li class="recursion-list-item" ng-repeat="dish in $ctrl.dishes"><div class="item-container"><div class="recursion-list-item__inner-wrapper"><div ng-if="dish.Image" class="list-image"><img ta-lazy-load lazy-source="{{dish.Image}}?w=50&h=30"></div><a ng-href="{{dish.Link}}"><div class="list-name">{{dish.Name}}</div></a></div><div class="recursion-list-item__inner-wrapper"><div class="list-description">{{$ctrl.mapDescription(dish.Count)}}</div><div class="list-btn" ng-class="{\'close\': !dish.toggleChildren, \'open\' : region.toggleChildren}" ng-if="dish.IsCountVisible" ng-click="$ctrl.viewChildren(dish.Id, $index)"><i ng-class="{\'fa fa-angle-down\': !dish.toggleChildren, \'fa fa-angle-up\' : dish.toggleChildren}" aria-hidden="true"></i></div></div></div><ta-site-map-dish ng-if="dish.child && dish.toggleChildren" dishes="dish.child"></ta-site-map-dish></li></ul>');$templateCache.put('/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-ingredient.html','<ul class="recursion-list"><li class="recursion-list-item" ng-repeat="ingredient in $ctrl.ingredients"><div class="item-container"><div class="recursion-list-item__inner-wrapper"><div ng-if="ingredient.Image" class="list-image"><img ta-lazy-load lazy-source="{{ingredient.Image}}?w=50&h=30"></div><a ng-href="{{ingredient.Link}}"><div class="list-name">{{ingredient.Name}}</div></a></div><div class="recursion-list-item__inner-wrapper"><div class="list-description">{{$ctrl.mapDescription(ingredient.Count)}}</div><div class="list-btn" ng-class="{\'close\': !ingredient.toggleChildren, \'open\' : ingredient.toggleChildren}" ng-if="ingredient.IsCountVisible" ng-click="$ctrl.viewChildren(ingredient.Id, $index)"><i ng-class="{\'fa fa-angle-down\': !ingredient.toggleChildren, \'fa fa-angle-up\' : ingredient.toggleChildren}" aria-hidden="true"></i></div></div></div><ta-site-map-ingredient ng-if="ingredient.child && ingredient.toggleChildren" ingredients="ingredient.child"></ta-site-map-ingredient></li></ul>');$templateCache.put('/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-region.html','<ul class="recursion-list"><li class="recursion-list-item" ng-repeat="region in $ctrl.regions"><div class="item-container"><div class="recursion-list-item__inner-wrapper"><div ng-if="region.Image" class="list-image"><img ta-lazy-load lazy-source="{{region.Image}}?w=50&h=30"></div><a href="{{region.Link}}"><div class="list-name">{{region.Name}}</div></a></div><div class="recursion-list-item__inner-wrapper"><div class="list-description">{{$ctrl.mapDescription(region.RegionLevel, region.Count)}}</div><div class="list-btn" ng-class="{\'close\': !region.toggleChildren, \'open\' : region.toggleChildren}" ng-if="region.IsCountVisible" ng-click="$ctrl.viewRegionChildren(region.Id, $index)"><i ng-class="{\'fa fa-angle-down\': !region.toggleChildren, \'fa fa-angle-up\' : region.toggleChildren}" aria-hidden="true"></i></div></div></div><ta-site-map-region ng-if="region.child && region.toggleChildren" regions="region.child"></ta-site-map-region></li></ul>');}]);;angular.module('tasteatlas').component('taConfirmEmailDesktop',{templateUrl:'/content/scripts/app/components/account/email/confirm-email/ta-confirm-email-desktop.html',controller:'taConfirmEmailDesktopController'}).controller("taConfirmEmailDesktopController",[function(){var _self=this;}]);;angular.module('tasteatlas').component('taConfirmEmailMobile',{templateUrl:'/content/scripts/app/components/account/email/confirm-email/ta-confirm-email-mobile.html',controller:'taConfirmEmailMobileController'}).controller("taConfirmEmailMobileController",[function(){var _self=this;}]);;angular.module('tasteatlas').component('taExternalLoginFailureDesktop',{templateUrl:'/content/scripts/app/components/account/external-login/ta-external-login-failure-desktop.html',controller:'taExternalLoginFailureDesktopController'}).controller("taExternalLoginFailureDesktopController",[function(){var _self=this;}]);;angular.module('tasteatlas').component('taExternalLoginFailureMobile',{templateUrl:'/content/scripts/app/components/account/external-login/ta-external-login-failure-mobile.html',controller:'taExternalLoginFailureMobileController'}).controller("taExternalLoginFailureMobileController",[function(){var _self=this;}]);;angular.module('tasteatlas').component('taExternalLoginMissingEmailDesktop',{templateUrl:'/content/scripts/app/components/account/external-login/ta-external-login-missing-email-desktop.html',controller:'taExternalLoginMissingEmailDesktopController'}).controller("taExternalLoginMissingEmailDesktopController",["AccountService","MiscellaneousHelper",function(AccountService,MiscellaneousHelper){var _self=this;this.email="";this.showErrorMessage=false;this.cancelEmailInput=function(){window.location.href='/';};this.submitEmail=function(){this.showErrorMessage=false;AccountService.submitMissingFacebookEmail({email:this.email}).then(function(response){if(response.data.code==='email_taken'){_self.showErrorMessage=true;return;}
if(response.data.success===false){window.location.href='/Account/ExternalLoginFailure';}
else{window.location.href='/';}},function error(){window.location.href='/Account/ExternalLoginFailure';});};this.emailPattern=MiscellaneousHelper.validators.email;}]);;angular.module('tasteatlas').component('taExternalLoginMissingEmailMobile',{templateUrl:'/content/scripts/app/components/account/external-login/ta-external-login-missing-email-mobile.html',controller:'taExternalLoginMissingEmailMobileController'}).controller("taExternalLoginMissingEmailMobileController",["AccountService","MiscellaneousHelper",function(AccountService,MiscellaneousHelper){var _self=this;this.email="";this.showErrorMessage=false;this.cancelEmailInput=function(){window.location.href='/';};this.submitEmail=function(){this.showErrorMessage=false;AccountService.submitMissingFacebookEmail({email:this.email}).then(function(response){if(response.data.code==='email_taken'){_self.showErrorMessage=true;return;}
if(response.data.success===false){window.location.href='/Account/ExternalLoginFailure';}
else{window.location.href='/';}},function error(){window.location.href='/Account/ExternalLoginFailure';});};this.emailPattern=MiscellaneousHelper.validators.email;}]);;angular.module('tasteatlas').component('taResetPasswordConfirmationDesktop',{templateUrl:'/content/scripts/app/components/account/password/reset-password/ta-reset-password-confirmation-desktop.html',controller:'taResetPasswordConfirmationDesktopController',bindings:{userId:'<',token:'<'}}).controller("taResetPasswordConfirmationDesktopController",['AccountService',function(AccountService){var _self=this;this.password='';this.isReseted=false;this.isResetting=false;this.errorMsg='';this.onPasswordChange=function(){_self.errorMsg='';};this.resetPassword=function(){_self.isResetting=true;AccountService.resetPassword({UserId:_self.userId,token:_self.token,Password:_self.password}).then(function(success){_self.isResetting=false;if(success.data.success===true){_self.isReseted=true;}else{_self.errorMsg="An error occured.";}}).catch(function(error){_self.isResetting=false;_self.errorMsg="An error occured.";});};}]);;angular.module('tasteatlas').component('taResetPasswordConfirmationMobile',{templateUrl:'/content/scripts/app/components/account/password/reset-password/ta-reset-password-confirmation-mobile.html',controller:'taResetPasswordConfirmationMobileController',bindings:{userId:'<',token:'<'}}).controller("taResetPasswordConfirmationMobileController",['AccountService',function(AccountService){var _self=this;this.password='';this.isReseted=false;this.resetPassword=function(){_self.isReseted=true;AccountService.resetPassword({UserId:_self.userId,token:_self.token,Password:_self.password}).then(function(success){}).catch(function(error){});};}]);;angular.module('tasteatlas').component('taResetPasswordDesktop',{templateUrl:'/content/scripts/app/components/account/password/reset-password/ta-reset-password-desktop.html',controller:'taResetPasswordDesktopController'}).controller("taResetPasswordDesktopController",['AccountService','$scope',function(AccountService,$scope){var _self=this;this.email='';this.isSent=false;this.notValidEmail=false;this.tokenIsReady=false;$scope.pwd='';this.$onInit=function(){turnstile.ready(function(){turnstile.render('#turnstileWidgetChangePassDesktop',{sitekey:'0x4AAAAAAAMjvcS1XT4GI3th',theme:'light',datasize:'compact',appearance:'execute',refreshexpired:'manual',callback:function(token){_self.token=token;if(token){_self.tokenIsReady=true;}
else{_self.tokenIsReady=false;}},});});};this.sendResetEmail=function(){function validateEmail(email){var re=/^\S+@\S+\.\S+$/;return re.test(String(email).toLowerCase());}
if(validateEmail(_self.email)){AccountService.sendResetEmail({Email:_self.email,token:_self.token}).then(function(success){console.log(success);_self.isSent=true;_self.notValidEmail=false;}).catch(function(error){console.log(error);_self.notValidEmail=true;});}else{_self.notValidEmail=true;_self.isSent=false;}};}]);;angular.module('tasteatlas').component('taResetPasswordMobile',{templateUrl:'/content/scripts/app/components/account/password/reset-password/ta-reset-password-mobile.html',controller:'taResetPasswordMobileController'}).controller("taResetPasswordMobileController",["AccountService",function(AccountService){var _self=this;this.email='';this.isSent=false;this.notValidEmail=false;this.tokenIsReady=false;this.$onInit=function(){turnstile.ready(function(){turnstile.render('#turnstileWidgetChangePassMobile',{sitekey:'0x4AAAAAAAMjvcS1XT4GI3th',theme:'light',datasize:'compact',appearance:'execute',refreshexpired:'manual',callback:function(token){_self.token=token;if(token){_self.tokenIsReady=true;}
else{_self.tokenIsReady=false;}},});});};this.sendResetEmail=function(){function validateEmail(email){var re=/^\S+@\S+\.\S+$/;return re.test(String(email).toLowerCase());}
if(validateEmail(_self.email)){AccountService.sendResetEmail({Email:_self.email,token:_self.token}).then(function(success){console.log(success);_self.isSent=true;_self.notValidEmail=false;}).catch(function(error){console.log(error);_self.notValidEmail=true;});}else{_self.notValidEmail=true;_self.isSent=false;}};}]);;angular.module('tasteatlas').component('taCardGame',{templateUrl:'/content/scripts/app/components/card-game/ta-card-game.html',controller:'taCardGameController'}).controller("taCardGameController",["$http",function($http){var _self=this;_self.query='';_self.autoCompleteResult=[];_self.submitResult=[];_self.foodResult=[];_self.init=function(){}
_self.searchItems=function(){if(_self.query.length<3)
return;getAutoComplete(_self.query).then(function(response){_self.autoCompleteResult=response.data;})}
_self.selectItem=function(entityId,entityType){var result=_self.autoCompleteResult.filter(obj=>{return obj.EntityId==entityId&&obj.EntityTypeEnum==entityType})
if(result){_self.submitResult.push(result[0]);}
_self.autoCompleteResult=[];_self.query='';angular.element('#cg_search').focus();}
_self.removeSelected=function(entityId,entityType){var arr=_self.submitResult;for(var i=0;i<arr.length;i++){console.log('aaa');if(arr[i].EntityId==entityId&&arr[i].EntityTypeEnum==entityType){arr.splice(i,1);}}
_self.foodResult=[];}
_self.submitSearch=function(){console.log(_self.submitResult)
getFoodItems(_self.submitResult).then(function(response){_self.foodResult=response.data;})}
function getAutoComplete(query){return $http.get('/api/v3/autocomplete/GetFoodIngredients?query='+query)}
function getFoodItems(submitRequest){return $http.post('/api/v3/cardgame/getitemsescontaing',submitRequest);}}]);;angular.module('tasteatlas').component('taCertificatesFilter',{bindings:{isMobile:'<',items:'<',totalItemCounter:'<',foodGroups:'<',certificateId:'<',regionId:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/certificates/ta-certificates-filter-mobile.html','desktop':'/content/scripts/app/components/certificates/ta-certificates-filter-desktop.html',};return templates[$attrs.template];},controller:'taCertificatesFilterController',}).controller("taCertificatesFilterController",["CertificatesService","constants","$timeout","$scope",function(CertificatesService,constants,$timeout,$scope){var _self=this;this.constants=constants;_self.isContentLoaded=true;_self.filtersExpanded=false;_self.loadingItems=false;_self.listItemSizeCounter=12;_self.listItemPageCounter=1;_self.gridRow;_self.indexCounter=0;_self.selectedTopFilter="mostpopular";_self.topFilterItems=[{code:"mostpopular",name:"Most Popular"},{code:"new",name:"New"},{code:"bestRated",name:"Best rated"},{code:"alphabetically",name:"Alphabetically"}];_self.selectedBottomFilter="All";_self.numberOfItems;_self.filterItemList=[];_self.entityGroupId=null;_self.entityType=null;_self.regionId=null;_self.certificateId=null;_self.numberOfItemsAfter;_self.lastGoogleAdsEnabled;this.$onInit=function(){if(!_self.selectedTopFilter){_self.selectedTopFilter=_self.topFilterItems[0].code;}
if(Math.max(document.documentElement.clientWidth,window.innerWidth)<1281&&!_self.isMobile){_self.numberOfItems=8;}
else if(_self.isMobile){_self.numberOfItems=3;_self.gridRow=7;}
else{_self.numberOfItems=9;_self.gridRow=4;;}
_self.loadFoodTypeFilters(_self.numberOfItems);_self.loadItemsOnFilterChange(null,null,_self.selectedTopFilter,_self.regionId,_self.certificateId,0,_self.listItemSizeCounter);_self.selectedCategoryLength=_self.totalItemCounter;}
this.loadFoodTypeFilters=function(mainItemsCount){_self.displayedMainFoodTypeFilters=_self.foodGroups.slice(0,mainItemsCount);_self.expandedFoodTypeFilters=_self.foodGroups.slice(mainItemsCount);}
this.changeTopFilter=function(filter){if(_self.selectedTopFilter===filter){return}
_self.selectedTopFilter=filter;_self.listItemPageCounter=1;_self.loadItemsOnFilterChange(_self.entityType,_self.entityGroupId,_self.selectedTopFilter,_self.regionId,_self.certificateId,0,_self.listItemSizeCounter);};this.toggleFoodTypeFilters=function(){_self.filtersExpanded=!_self.filtersExpanded;};this.changeBottomFilter=function(filter){if(_self.selectedBottomFilter===filter){return}
if(filter==='All'){_self.selectedBottomFilter=filter;_self.entityGroupId=null;_self.entityType=null;_self.selectedCategoryLength=_self.totalItemCounter;}
else{_self.selectedBottomFilter=filter.Name;_self.entityType=filter.EntityType;_self.entityGroupId=filter.EntityGroupId;_self.selectedCategoryLength=filter.SuitableDishes;}
_self.indexCounter=0;_self.listItemPageCounter=1;_self.loadItemsOnFilterChange(_self.entityType,_self.entityGroupId,_self.selectedTopFilter,_self.regionId,_self.certificateId,0,_self.listItemSizeCounter);};this.loadItemsOnFilterChange=function(entityType,entityGroupId,order,regionId,certificateId,page,pageSize){_self.loadingItems=true;CertificatesService.getCertificatesResults(entityType,entityGroupId,order,regionId,certificateId,page,pageSize).then(function(success){_self.filterItemList=success.data;}).then(function(){if(_self.filterItemList.length<=12){_self.removeGoogleAdsFromList(_self.filterItemList.length);}
_self.appendGoogleAdsToList();_self.checkItemsHeadingWidth();if(_self.isMobile){_self.checkLastMobileAd()}}).catch(function(error){console.log(error);}).finally(function(){_self.loadingItems=false;});}
this.loadMoreCertificatesItems=function(){_self.loadingItems=true;CertificatesService.getCertificatesResults(_self.entityType,_self.entityGroupId,_self.selectedTopFilter,_self.regionId,_self.certificateId,_self.listItemPageCounter,_self.listItemSizeCounter).then(function(success){_self.filterItemList=_self.filterItemList.concat(success.data);_self.listItemPageCounter=_self.listItemPageCounter+1;if(_self.isMobile){_self.gridRow=_self.gridRow+7;}
else{_self.gridRow=_self.gridRow+4;}}).then(function(){_self.appendGoogleAdsToList();_self.checkItemsHeadingWidth();if(_self.isMobile){_self.checkLastMobileAd();}
else{$timeout(()=>{document.getElementById('certificates-list-wrapper').scrollTop=document.getElementById('certificates-list-wrapper').scrollHeight;});}}).catch(function(error){console.log(error);}).finally(function(){_self.loadingItems=false;});}
this.appendGoogleAdsToList=function(){$timeout(()=>{[...document.querySelectorAll('.certificates-result-list__item')].map(function(listItem,index){var adGoogleNode=document.createElement('div');var adGoogleNodeId=crypto.randomUUID();if(_self.isMobile){_self.numberOfItemsAfter=12;adGoogleNode.style.cssText+='--grid-row:'+_self.gridRow+';--grid-col:'+(_self.gridRow+1);adGoogleNode.classList.add('certificates-result-list__item--ads',`certificates-result-list__item--ads-${adGoogleNodeId}`);adGoogleNode.innerHTML+=`<div class="promotion-certificates" angular-request-compile ta-google-ad id="certificates-ad-mobile-${adGoogleNodeId}" name="/21703950087/D_TA_300x250" platform="mobile"></div>`}
else{_self.numberOfItemsAfter=9;adGoogleNode.style.cssText+='--grid-row:'+_self.gridRow+';--grid-col:'+(_self.gridRow+1);adGoogleNode.classList.add('certificates-result-list__item--ads',`certificates-result-list__item--ads-${adGoogleNodeId}`);adGoogleNode.innerHTML+=`<div class='promotion promotion--fullwidth promotion--notoppadding' angular-request-compile ta-google-ad id="certificates-ad-desktop-${adGoogleNodeId}" name='/21703950087/D_TA_billboard' platform='desktop'></div>`}
if((parseInt(index+1)%_self.numberOfItemsAfter)==0&&_self.indexCounter<index){_self.indexCounter=_self.indexCounter+_self.numberOfItemsAfter;listItem.parentNode.insertBefore(adGoogleNode.cloneNode(true),listItem);}});});}
this.removeGoogleAdsFromList=function(itemNumber){$timeout(()=>{const googleAds=[...document.querySelectorAll('.certificates-result-list__item--ads')];if(_self.isMobile){_self.gridRow=7;}
else{_self.gridRow=4;}
googleAds.forEach((ad)=>{ad.remove()});});}
this.checkLastMobileAd=function(){$timeout(()=>{var lastMobileAd=Array.from(document.querySelectorAll('.certificates-result-list__item--ads')).pop();if(!lastMobileAd||lastMobileAd.hasAttribute('disabled-ads')){_self.lastGoogleAdsEnabled=true;}
else{_self.lastGoogleAdsEnabled=false;}});}
this.checkItemsHeadingWidth=function(){var inValid=/\s/;$timeout(()=>{if(_self.isMobile){var itemHeadings=document.querySelectorAll('.dish-name h3');}
else{var itemHeadings=document.querySelectorAll('.dish-name');}
itemHeadings.forEach(itemHeading=>{if(!inValid.test(itemHeading.textContent)){itemHeading.classList.add("dish-name__one-row-heading");}});});}}]);;angular.module('tasteatlas').component('taCertificatesSearch',{bindings:{isMobile:'<',items:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/certificates/ta-certificates-search-mobile.html','desktop':'/content/scripts/app/components/certificates/ta-certificates-search-desktop.html',};return templates[$attrs.template];},controller:'taCertificatesSearchController',}).controller("taCertificatesSearchController",["CertificatesService","$timeout","$window","$scope",function(CertificatesService,$timeout,$window,$scope){var _self=this;this.certificatesDropdownItems=[];this.selectedDropdownItem=null;this.isDropdownOpen=false;this.regionsAutocomplete=[];this.regionsQuery='';this.regionUrlLink;this.errorMessage=document.querySelector("#error-msg");this.$onInit=function(){CertificatesService.getAllCertificates().then(function(success){_self.certificatesDropdownItems=success.data;}).catch(function(error){console.log(error);});}
this.toggleDropdownOpen=function(){_self.isDropdownOpen=!_self.isDropdownOpen;}
this.closeSertificateDropdown=function(){_self.isDropdownOpen=false;}
this.getSelectedItem=function(item){_self.selectedDropdownItem=item;_self.onDeleteAutocompleteQuery();_self.toggleDropdownOpen();_self.errorMessage.innerText='';}
this.goToSingleCertificatesPage=function(searchedDropdownItem){if(!searchedDropdownItem){_self.errorMessage.innerText='Please first select the certificate.';$timeout(()=>{_self.errorMessage.innerText='';},3500);return}
if(_self.regionUrlLink&&_self.selectedDropdownItem.UrlLink){$window.location.href=`/${_self.regionUrlLink}/${_self.selectedDropdownItem.UrlLink}`;_self.regionUrlLink=null;}
else if(_self.selectedDropdownItem.UrlLink){$window.location.href=`/${_self.selectedDropdownItem.UrlLink}`;}}
this.searchRegionCertificates=function(){if(!_self.regionsQuery||_self.regionsQuery.length<2)
return;CertificatesService.getAllCertificatedRegions(_self.regionsQuery,_self.selectedDropdownItem.CertificateId).then(function(success){_self.regionsAutocomplete=success.data;}).catch(function(error){console.log(error);});}
this.getSelectedRegion=function(selectedRegionName,selectedRegionUrlLink){_self.regionUrlLink=selectedRegionUrlLink;_self.regionsQuery=selectedRegionName;_self.regionsAutocomplete=[];}
this.onDeleteAutocompleteQuery=function(){_self.regionsQuery='';_self.regionsAutocomplete=[];}
this.closeAutocompleteAutocomplete=function(){_self.onDeleteAutocompleteQuery();}}]);;angular.module('tasteatlas').component('taCriticDesktop',{templateUrl:'/content/scripts/app/components/critic-details/ta-critic-desktop.html',controller:'taCriticDesktopController',bindings:{id:'<'}}).controller('taCriticDesktopController',['CriticService','constants','$q','MainHelper',function(CriticService,constants,$q,MainHelper){var _self=this;this.constants=constants;this.filter={PageIndex:1,PageSize:50};this.isLoaded=false;this.msnry=null;var msnryOptions=MainHelper.msnry_options;this.$onInit=function(){var promises=[CriticService.getCriticDetails(_self.id),CriticService.getCriticsReviews(_self.id,_self.filter)];$q.all(promises).then(function(success){_self.details=success[0].data;_self.reviews=success[1].data;_self.isLoaded=true;initMsnry();},function(error){console.log(error);});};this.reviewsLoading=false;this.loadMoreReviews=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;CriticService.getCriticsReviews(_self.id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;initMsnry();},function(error){console.log(error);});};function initMsnry(){setTimeout(function(){var elem=document.querySelector('.grid');_self.msnry=new Masonry(elem,msnryOptions);},100);}}]);;angular.module('tasteatlas').component('taCriticMobile',{templateUrl:'/content/scripts/app/components/critic-details/ta-critic-mobile.html',controller:'taCriticMobileController',bindings:{id:'<'}}).controller('taCriticMobileController',['CriticService','$q','constants',function(CriticService,$q,constants){var _self=this;this.constants=constants;this.filter={PageIndex:1,PageSize:50};this.isLoaded=false;this.$onInit=function(){var promises=[CriticService.getCriticDetails(_self.id),CriticService.getCriticsReviews(_self.id,_self.filter)];$q.all(promises).then(function(success){_self.details=success[0].data;_self.reviews=success[1].data;_self.isLoaded=true;},function(error){console.log(error);});};this.reviewsLoading=false;this.loadMoreReviews=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;CriticService.getCriticsReviews(_self.id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;},function(error){console.log(error);});};}]);;angular.module('tasteatlas').component('taDishDesktopComments',{bindings:{details:'<',rating:'<',previewTitleInit:'&'},templateUrl:'/content/scripts/app/components/dish-details/dish-desktop-comments/ta-dish-desktop-comments.html',controller:'ta-dish-desktop-comments-controller'}).controller("ta-dish-desktop-comments-controller",["$timeout","DishService","UserSubjectService","$q","UserCommentStatusService","LoginService","PageStatusSubjectService","RatingSharedService","BotInterceptor","CommentHelper",function($timeout,DishService,UserSubjectService,$q,UserCommentStatusService,LoginService,PageStatusSubjectService,RatingSharedService,BotInterceptor,CommentHelper){var _self=this;this.dishReviewsFilter={PageSize:10,PageIndex:1,IsCritic:false};this.reviews=[];this.userCommentStatus={};this.comment=undefined;this.showMissTxt=false;this.ratingCardActions=null;_self.isAnonymous=true;this.$onInit=function(){BotInterceptor.blockIndexing();UserCommentStatusService.subscribe(_dishCommentPageObserver);_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);_self.ratingCardActions.hideDetailedInformation=true;_self.previewTitleInit({data:{type:'comments',main:{upper:'Comments'}}});var promises=[DishService.getUserDishComment(_self.details.EntityId),DishService.getDishRating(_self.details.EntityId),DishService.getDishReviews(_self.details.EntityId,_self.dishReviewsFilter),DishService.getDishOverview(_self.details.EntityId)];$q.all(promises).then(function(success){_self.comment=success[0].data;var rating=success[1].data;_self.reviews=success[2].data;_self.overviewDetails=success[3].data;UserCommentStatusService.dispatch({dividedScore:rating.DividedScore,validScoreCount:rating.ValidScoreCount,scoreCount:rating.ScoreCount,commentRating:rating.Score,userRating:_self.comment?CommentHelper.recalculateRatingForView(_self.comment.RatingScore):0,isCommentProcess:false,comment:_self.comment});_self.userCommentStatus=UserCommentStatusService.getCurrentState();PageStatusSubjectService.dispatch({isSectionLoaded:true});$timeout(function(){_self.showMissTxt=true;});},function(error){console.log(error);});};this.isLoadingComments=false;this.loadMoreComments=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.isLoadingComments=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;DishService.getDishReviews(_self.details.EntityId,{IsCritic:false,PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isLoadingComments=false;},function(error){console.log(error);});};this.isTellUs=false;this.tellUsWhere=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.isTellUs=!_self.isTellUs;};var _dishCommentPageObserver=function(data){_self.comment=data.comment;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_dishCommentPageObserver);};}]);;angular.module('tasteatlas').component('taDishDesktopMain',{bindings:{id:'<',whereToEatRegionId:'<',additionalRegionId:'<',recipeVariationId:'<',name:'<',activePage:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-desktop-overview/ta-dish-desktop-main.html',controller:'ta-dish-desktop-main-controller'}).controller("ta-dish-desktop-main-controller",["$q","constants","DishService","MainHelper","UserCommentStatusService","PageStatusSubjectService","GlobalStatusService","$filter","GeolocationService","RegionService","UserCacheService","RegionLevels","$scope",function($q,constants,DishService,MainHelper,UserCommentStatusService,PageStatusSubjectService,GlobalStatusService,$filter,GeolocationService,RegionService,UserCacheService,RegionLevels,$scope){var _self=this;this.constants=constants;this.userCommentStatus={};this.regionLevels=RegionLevels;this.imageData={};this.regionsImageData=[];this.moreRegionsVisible=false;this.dishRating=null;this.comment=null;this.location={longitude:'',latitude:''};this.maxDetailedAdditionalRegions=5;this.pageStatus=PageStatusSubjectService.state;this.previewTitleData;this.$onInit=function(){_self.preloadedDetails=window.ta.details;PageStatusSubjectService.subscribe(_dishPageStatusObserver);GlobalStatusService.setMainPageType("DISH");PageStatusSubjectService.dispatch({page:_self.activePage});_self.foodIngredients={data:_self.preloadedDetails.FoodIngredients,cutData:_self.preloadedDetails.FoodIngredients.slice(0,8),isValid:!!$filter('filter')(_self.preloadedDetails.FoodIngredients,function(item){return item.Image&&item.Image.Image;})[0]};promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};RegionService.getCurrentRegionId({lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){_self.currentRegionId=success.data;});});}});});this.ratingActions={getFoodIds:function(){return{entityId:_self.preloadedDetails.EntityId,entityTypeEnum:_self.preloadedDetails.EntityType};},displayFoodName:function(){return _self.preloadedDetails.Name;},getWannaTryItem:function(){return UserCacheService.getDishWannaTry(_self.preloadedDetails.EntityId);},getDetails:function(){return _self.preloadedDetails;},loadRatingActions:true};};function promiseChain(){var promises=[DishService.getUserDishComment(_self.id),DishService.getDishRating(_self.id)];return $q.all(promises).then(function(success){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);if(location.href.includes('recipe')&&_self.preloadedDetails.HasRecipes===false){PageStatusSubjectService.dispatch({page:''});}
UserCommentStatusService.subscribe(_dishDesktopMainObserver);_self.comment=success[0].data;_self.dishRating=success[1].data;UserCommentStatusService.dispatch({dividedScore:_self.dishRating.DividedScore,validScoreCount:_self.dishRating.ValidScoreCount,scoreCount:_self.dishRating.ScoreCount,commentRating:_self.dishRating.Score,userRating:_self.comment?_self.comment.DividedScore:0,isCommentProcess:false,comment:_self.comment});_self.preloadedDetails.Rating={DividedScore:_self.preloadedDetails.Score.DividedScore,ValidScoreCount:_self.preloadedDetails.Score.ValidScoreCount,ScoreCount:_self.preloadedDetails.Score.ScoreCount,Score:_self.preloadedDetails.Score.Score,CommentId:_self.comment?_self.comment.CommentId:null,IsApproved:_self.comment?_self.comment.IsApproved:null,IsCommented:!!_self.comment};PageStatusSubjectService.dispatch({isLoaded:true,page:_self.activePage});}).catch(function(error){console.log(error);});};this.showMoreRegions=function(){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,50,50);for(var i=0;i<_self.preloadedDetails.AdditionalRegions.length;i++){_self.regionsImageData.push(MainHelper.createImageFilter(_self.preloadedDetails.AdditionalRegions[i].Current.RegionId||_self.preloadedDetails.AdditionalRegions[i].RegionId,50,50));}
_self.moreRegionsVisible=true;};this.hideMoreRegions=function(){_self.regionsImageData=[];_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);_self.moreRegionsVisible=false;};this.refreshRatingData=function(){var promises=[DishService.getUserDishComment(_self.id),DishService.getDishRating(_self.id)];return $q.all(promises).then(function(success){var comment=success[0].data;_self.dishRating=success[1].data;UserCommentStatusService.dispatch({dividedScore:_self.dishRating.DividedScore,validScoreCount:_self.dishRating.ValidScoreCount,scoreCount:_self.dishRating.ScoreCount,commentRating:_self.dishRating.Score,userRating:comment?comment.DividedScore:0,isCommentProcess:true,comment:comment});});};this.onPreviewTitleChange=function(data){_self.previewTitleData=data;};var _dishDesktopMainObserver=function(data){_self.userCommentStatus=data;};var _dishPageStatusObserver=function(data){_self.pageStatus=data;MainHelper.addDesktopPagePlaceholder(_self.pageStatus.isSectionLoaded,'.dish__tabs','dish__holder');};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_dishDesktopMainObserver);PageStatusSubjectService.unsubscribe(_dishPageStatusObserver);GlobalStatusService.setMainPageType(null);};}]);;angular.module('tasteatlas').component('taDishDesktopOverview',{bindings:{details:'<',rating:'<',id:'<',whereToEatRegionId:'<',name:'<',additionalRegionId:'<',},templateUrl:'/content/scripts/app/components/dish-details/dish-desktop-overview/ta-dish-desktop-overview.html',controller:'ta-dish-desktop-overview-controller'}).controller("ta-dish-desktop-overview-controller",["constants","DishService","$q","MainHelper","UserSubjectService","RecipeService","PageStatusSubjectService","RatingSharedService",function(constants,DishService,$q,MainHelper,UserSubjectService,RecipeService,PageStatusSubjectService,RatingSharedService){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.pairingTips={};this.types=[];this.partOf;this.partOfPageSize=4;this.partOfPage=0;this.otherVarieties;this.dishReviewFilter={PageSize:10,PageIndex:1,IsCritic:false};this.isAnonymous;this.isOverviewLoaded=false;this.restaurantItem=null;this.ratingCardActions=null;this.whereToEatTitleData;this.similarFoodData=[];this.moreFromRegion=[];this.recipeVariations=[];this.mainRecipeVariation;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();DishService.GetDishTypes(_self.details.EntityId,0).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);var promises=[DishService.filterDishRestaurants(_self.details.EntityId,{Start:0,StartTake:5,PageIndex:1}),DishService.GetDishPairs(_self.details.EntityId),DishService.GetDishEvents(_self.details.EntityId,{PageIndex:1,PageSize:6}),DishService.getSimilarDishes(_self.id),DishService.getSimilarDishesInRegion({dishId:_self.id,additionalRegionId:_self.additionalRegionId}),DishService.GetDishPartOf(_self.details.EntityId,{pageSize:_self.partOfPageSize,page:_self.partOfPage}),DishService.getDishOverview(_self.details.EntityId)];if(_self.details.HasRecipes){promises.push(DishService.getRecipeVariations(_self.details.EntityId));promises.push(DishService.getMainRecipeVariationSimpleDetails(_self.details.EntityId));}
$q.all(promises).then(function(success){if(_self.details.HasRecipes){_self.recipeVariations=success[7].data;_self.mainRecipeVariation=success[8].data;}
_self.restaurants=success[0].data.DishRestaurants;_self.searchInfo={name:_self.details.Name,region:undefined,count:_self.restaurants.Count};_self.pairingTips=success[1].data;_self.events=success[2].data;_self.similarFoodData=success[3].data;_self.moreFromRegion=success[4].data;_self.partOf=success[5].data;_self.overviewDetails=success[6].data;PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isOverviewLoaded=true;if(!_self.details.IsGroup){DishService.getSiblings(_self.details.EntityId,{pageSize:50,page:0}).then(function(success){_self.otherVarieties=success.data;});}}).catch(function(err){console.log(err);});};this.redirectTo=function(url){var redirect=_self.details.EntityUrlLink+'/wheretoeat/'+url;MainHelper.redirect(redirect);};this.events=undefined;this.eventsLoading=false;this.onLoadMoreEvents=function(){if(_self.events.Data.length>_self.events.Count)
return;_self.events.PageIndex=_self.events.PageIndex+1;_self.eventsLoading=true;DishService.GetDishEvents(_self.details.EntityId,{PageIndex:_self.events.PageIndex,PageSize:_self.events.PageSize}).then(function(success){_self.events.Data=_self.events.Data.concat(success.data.Data);_self.eventsLoading=false;}).catch(function(error){_self.eventsLoading=false;console.log(error);});};this.onFoodTypesOrderChange=function(orderBy){DishService.GetDishTypes(_self.details.EntityId,orderBy).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});};this.onPreviewTitleChange=function(data){_self.whereToEatTitleData=data;};this.getMoreFromRegionTitle=function(){return MainHelper.getMoreFromRegionTitle(_self.moreFromRegion);};this.loadMorePartOf=function(){_self.partOfPage+=1;DishService.GetDishPartOf(_self.details.EntityId,{pageSize:_self.partOfPageSize,page:_self.partOfPage}).then(function(success){_self.partOf.Data=_self.partOf.Data.concat(success.data.Data);}).catch(function(err){console.log(err);});};}]);;angular.module('tasteatlas').component('taDishDesktopTypes',{bindings:{data:'<',name:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-desktop-shared/ta-dish-desktop-types.html',controller:'ta-dish-desktop-types-controller'}).controller("ta-dish-desktop-types-controller",["$scope","constants",function($scope,constants){var _self=this;this.constants=constants;this.$onInit=function(){setTimeout(function(){var elem=document.querySelector('.grid');var msnry=new Masonry(elem,{columnWidth:'.grid-sizer',gutter:'.gutter-sizer',itemSelector:'.grid-item',percentPosition:true,horizontalOrder:true});},50);hasAnyChildren();};this.hasChildren=false;function hasAnyChildren(){if(_self.data.length===0)
return;angular.forEach(_self.data,function(value,key){if(_self.data[key].Children.length>0){_self.hasChildren=true;return;}});}}]);;angular.module('tasteatlas').component('taDishDesktopWhereToEat',{bindings:{id:'<',whereToEatRegionId:'<',name:'<',details:'<',onLocationChange:'&',viewMore:'@'},templateUrl:'/content/scripts/app/components/dish-details/dish-desktop-where-to-eat/ta-dish-desktop-where-to-eat.html',controller:'ta-dish-desktop-where-to-eat-controller'}).controller("ta-dish-desktop-where-to-eat-controller",["$scope","constants","DishService","MainHelper","RegionService","DishHelper","PageStatusSubjectService","RatingSharedService","GeolocationService","$q","LoginService","BotInterceptor","UserSubjectService",function($scope,constants,DishService,MainHelper,RegionService,DishHelper,PageStatusSubjectService,RatingSharedService,GeolocationService,$q,LoginService,BotInterceptor,UserSubjectService){var _self=this;this.constants=constants;this.restaurants=[];this.cities=[];this.regionId;this.regionName;this.pageStatus=PageStatusSubjectService.state;this.searchInfo={name:'',region:'',count:0};this.restaurantsLoading=false;this.loadMoreRestaurantsLoading=false;this.isAutoCompleteVisible=false;this.showAddress=false;this.restaurantItem=null;this.isRestaurantRatingOpen=false;this.selectedLocation="world";this.location={longitude:'',latitude:''};this.pageSize=10;this.numberOfDisplayedItems=10;this.startDisplayedItems=0;this.loadMoreRestaurantsData=false;this.restaurantsItem;$scope.showLoadMoreBtn;this.parseCriticsInfo=MainHelper.parseDishCriticInfo;function shouldBlockIndexing(){var isWorld=!_self.whereToEatRegionId;if(isWorld||_self.aggregatedCommentCount>=this.pageSize){return false;}
return true;}
this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.regionName=_self.name?_self.name:'the world';_self.regionId=_self.whereToEatRegionId?_self.whereToEatRegionId:null;if(_self.name){_self.selectedLocation='search';}
_self.onLocationChange({data:setTitleData()});PageStatusSubjectService.subscribe(_whereToEatPageStatusObserver);var promises=[DishService.filterDishRestaurants(_self.id,{regionId:_self.regionId,Start:0,StartTake:10,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude})];GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return promiseChain(promises);}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};if(_self.regionId===null){var geoPromises=[DishService.getNearbyDishRestaurants(_self.details.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude})];_self.selectedLocation='nearme';}
else{_self.selectedLocation='world';}
if(_self.selectedLocation=='nearme'){return promiseChain(geoPromises);}});}else if(data==='PROMPT'){promiseChain(promises);}else if(data==='DENIED'){promiseChain(promises);}
else{promiseChain(promises);}});};function promiseChain(promises){_self.restaurantsLoading=true;$q.all(promises).then(function success(response){_self.restaurants=response[0].data.DishRestaurants||response[0].data;_self.aggregatedCommentCount=response[0].data.AggregatedCommentCount;_self.restaurants.PageIndex=0;if(_self.regionId===null){if(_self.restaurants.Data.length===0){_self.changeLocation('world');}}
else{_self.selectedLocation='search';}
if(shouldBlockIndexing()){BotInterceptor.blockIndexing();}
if(_self.numberOfDisplayedItems>_self.restaurants.Data.length){$scope.showLoadMoreBtn=false;}else{$scope.showLoadMoreBtn=true;}
_self.searchInfo={name:_self.details.Name,region:_self.regionName,count:_self.restaurants.Count};PageStatusSubjectService.dispatch({isSectionLoaded:true});}).catch(function(error){console.log(error);}).finally(function(){_self.restaurantsLoading=false;});}
this.loadMore=function(){_self.startDisplayedItems=_self.startDisplayedItems+_self.numberOfDisplayedItems;_self.loadMoreRestaurantsData=true;DishService.filterDishRestaurants(_self.id,{Start:_self.startDisplayedItems,StartTake:_self.pageSize}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.DishRestaurants.Data);_self.searchInfo={name:_self.details.Name,region:_self.regionName,count:_self.restaurants.Count};}).catch(function(error){console.log('Error: '+JSON.stringify(error));}).finally(function(){_self.loadMoreRestaurantsData=false;if(_self.startDisplayedItems+_self.numberOfDisplayedItems>_self.restaurants.Data.length){$scope.showLoadMoreBtn=false;}else{$scope.showLoadMoreBtn=true;}});};this.autocompleteCities=function(query){deleteAutocompleteResults();if(query===undefined||query==='')
return;if(query.length<2)
return;RegionService.searchRegions(query).then(function success(response){var data=response.data;_self.cities=DishHelper.mapAutocompleteItems(data);response.data.length===0?_self.isAutoCompleteVisible=false:_self.isAutoCompleteVisible=true;},function error(err){console.log(err);});};this.filterRestaurants=function(regionId,regionName,urlLink){_self.restaurantsLoading=true;_self.isAutoCompleteVisible=false;_self.regionId=regionId;_self.regionName=regionName;_self.query=regionName;var regionUrlLink=urlLink?urlLink:"";DishService.filterDishRestaurants(_self.id,{Start:0,StartTake:10,PageIndex:1,RegionId:_self.regionId}).then(function(success){_self.restaurants.Data=success.data.DishRestaurants.Data
if(_self.pageStatus.page==='wheretoeat'){var whereToEatRegionUrl=_self.details.EntityUrlLink+'/wheretoeat/'+regionUrlLink;_self.onLocationChange({data:setTitleData()});history.pushState({},'',whereToEatRegionUrl);}
_self.searchInfo={name:_self.details.Name,region:_self.regionName,count:_self.restaurants.Count};},function(error){console.log(error);}).finally(function(){_self.restaurantsLoading=false;if(_self.startDisplayedItems+_self.numberOfDisplayedItems>_self.restaurants.Data.length){$scope.showLoadMoreBtn=false;}else{$scope.showLoadMoreBtn=true;}});};this.filterRestaurantsNearMe=function(){_self.startDisplayedItems=_self.startDisplayedItems+_self.numberOfDisplayedItems;_self.restaurantsLoading=true;DishService.getNearbyDishRestaurants(_self.details.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){if(success.data!=null){_self.restaurants=success.data;}else{_self.restaurants=[];}},function(error){console.log(error);}).finally(function(){_self.restaurantsLoading=false;if(_self.restaurants.length>0){if(_self.startDisplayedItems+_self.numberOfDisplayedItems>_self.restaurants.Data.length){$scope.showLoadMoreBtn=false;}else{$scope.showLoadMoreBtn=true;}}});};this.deleteQuery=function(){_self.query='';deleteAutocompleteResults();_self.isAutoCompleteVisible=false;DishService.filterDishRestaurants(_self.details.EntityId,{Start:0,StartTake:_self.pageSize,PageIndex:1}).then(function success(response){_self.restaurants=response.data.DishRestaurants;_self.regionName=undefined;if(_self.pageStatus.page==='wheretoeat'){history.pushState({},'',_self.details.EntityUrlLink+'/wheretoeat');}
_self.searchInfo={name:_self.details.Name,region:_self.regionName,count:_self.restaurants.Count};},function error(err){console.log(err);});};function deleteAutocompleteResults(){_self.cities=[];_self.regionId='';}
this.isTellUs=false;this.tellUsWhere=function(){_self.isTellUs=!_self.isTellUs;};this.getRestaurantAddress=function(restaurant){return restaurant.Address.split(',')[0];};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};this.changeLocation=function(location){if(_self.selectedLocation===location)return;var region={regionId:null,regionName:""};_self.selectedLocation=location;_self.onLocationChange({data:setTitleData()});if(location==="nearme"){_self.startDisplayedItems=0;return _self.filterRestaurantsNearMe();}
else if(location==="world"){_self.startDisplayedItems=0;return _self.filterRestaurants(region.regionId,region.regionName);}
else if(location==="region"){_self.startDisplayedItems=0;region.regionId=_self.details.Region.Current.RegionId;region.regionName=_self.details.Region.Current.Name;return _self.filterRestaurants(region.regionId,region.regionName);}};this.isLocationOn=function(){if(_self.location){return _self.location.latitude&&_self.location.longitude;}
return false;};this.onLocationActivated=function(location){_self.location=location;return _self.filterRestaurantsNearMe();};this.isTellUs=false;this.tellUsWhere=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.isTellUs=!_self.isTellUs;};function setTitleData(){return{type:'wheretoeat',upper:'WHERE TO EAT',main:{upper:'The best '+_self.details.Name,lower:getWhereToEatLocation()},sub:'(according to food experts)',extra:null,image:_self.details.PreviewImage};}
function getWhereToEatLocation(){if(_self.selectedLocation==="nearme"){return "near you";}
else if(_self.selectedLocation==="world"){return "in the world";}
else if(_self.selectedLocation==="region"){return "in "+_self.details.Region.Current.Name;}
else if(_self.selectedLocation==="search"){return "in "+(_self.regionName||"the world");}
return "";};var _whereToEatPageStatusObserver=function(data){_self.pageStatus=data;};this.$onDestroy=function(){PageStatusSubjectService.unsubscribe(_whereToEatPageStatusObserver);};}]);;angular.module('tasteatlas').component('taDishMobileComments',{bindings:{details:'<',rating:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-mobile-comments/ta-dish-mobile-comments.html',controller:'ta-dish-mobile-comments-controller'}).controller("ta-dish-mobile-comments-controller",["DishService",function(DishService){var _self=this;this.promises=[];this.getReviews;this.dishReviewsFilter={PageSize:10,PageIndex:1,IsCritic:false};this.$onInit=function(){_self.promises=[DishService.getUserDishComment(_self.details.EntityId),DishService.getDishRating(_self.details.EntityId),DishService.getDishReviews(_self.details.EntityId,_self.dishReviewsFilter)];_self.getReviews=DishService.getDishReviews;};}]);;angular.module('tasteatlas').component('taDishMobileMain',{bindings:{dishId:'<',whereToEatRegionId:'<',additionalRegionId:'<',recipeVariationId:'<',name:'<',activePage:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-mobile-overview/ta-dish-mobile-main.html',controller:'ta-dish-mobile-main-controller'}).controller("ta-dish-mobile-main-controller",["$q","constants","MainHelper","UserCommentStatusService","DishService","CommentHelper","PageStatusSubjectService","GlobalStatusService","$filter","RegionLevels",function($q,constants,MainHelper,UserCommentStatusService,DishService,CommentHelper,PageStatusSubjectService,GlobalStatusService,$filter,RegionLevels){var _self=this;this.constants=constants;this.regionLevels=RegionLevels;this.userCommentStatus={};this.imageData='';this.moreRegionsVisible=false;this.regionsImageData=[];this.dishRating=null;this.pageStatus=PageStatusSubjectService.state;this.galleryPopupOpen=false;this.$onInit=function(){PageStatusSubjectService.subscribe(_dishPageStatusObserver);GlobalStatusService.setMainPageType("DISH");PageStatusSubjectService.dispatch({page:_self.activePage});_self.preloadedDetails=window.ta.details;_self.urlLinks=[{link:'',preview:'Overview',isVisible:true},{link:'recipe',preview:'Recipe',isVisible:_self.preloadedDetails.HasRecipes},{link:'wheretoeat',preview:'Where to eat',isVisible:true},{link:'comments',preview:'Comments',isVisible:true}];_self.preloadedDetails.foodIngredients={data:_self.preloadedDetails.FoodIngredients,isValid:!!$filter('filter')(_self.preloadedDetails.FoodIngredients,function(item){return item.Image&&item.Image.Image;})[0]};var promises=[DishService.getUserDishComment(_self.dishId),DishService.getDishRating(_self.dishId)];$q.all(promises).then(function(success){_self.dishRating=success[1].data;_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId);_self.details={previewImage:_self.preloadedDetails.PreviewImage!==null?_self.preloadedDetails.PreviewImage.Image:null,regionName:_self.preloadedDetails.Region.Current.Name,countryName:_self.preloadedDetails.Region.Parent.Name,title:_self.preloadedDetails.Name,regionImage:_self.preloadedDetails.Region.Current.EmblemImage,countryImage:_self.preloadedDetails.Region.Parent.EmblemImage,urlLink:_self.preloadedDetails.EntityUrlLink};if(location.href.includes('recipe')&&_self.preloadedDetails.HasRecipes===false){PageStatusSubjectService.dispatch({page:''});}
UserCommentStatusService.subscribe(_dishMobileMainObserver);var comment=success[0].data;_self.preloadedDetails.Rating={DividedScore:_self.preloadedDetails.Score.DividedScore,ValidScoreCount:_self.preloadedDetails.Score.ValidScoreCount,ScoreCount:_self.preloadedDetails.Score.ScoreCount,Score:_self.preloadedDetails.Score.Score,CommentId:comment?comment.CommentId:null,IsApproved:comment?comment.IsApproved:null,IsCommented:!!comment};UserCommentStatusService.dispatch({dividedScore:_self.dishRating.DividedScore,validScoreCount:_self.dishRating.ValidScoreCount,scoreCount:_self.dishRating.ScoreCount,commentRating:_self.dishRating.Score,userRating:comment?comment.DividedScore:0,isCommentProcess:false,comment:comment});PageStatusSubjectService.dispatch({isLoaded:true,page:_self.activePage});}).catch(function(error){console.log(error);});};this.showMoreRegions=function(){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,50,50);for(var i=0;i<_self.preloadedDetails.AdditionalRegions.length;i++){_self.regionsImageData.push(MainHelper.createImageFilter(_self.preloadedDetails.AdditionalRegions[i].Current.RegionId||_self.preloadedDetails.AdditionalRegions[i].Parent.RegionId,50,50));}
_self.moreRegionsVisible=true;};this.hideMoreRegions=function(){_self.regionsImageData=[];_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);_self.moreRegionsVisible=false;};this.refreshRatingData=function(comment){var promises=[DishService.getDishRating(_self.dishId)];var comment=comment;return $q.all(promises).then(function(success){_self.dishRating=success[0].data;UserCommentStatusService.dispatch({dividedScore:_self.dishRating.DividedScore,validScoreCount:_self.dishRating.ValidScoreCount,scoreCount:_self.dishRating.ScoreCount,commentRating:_self.dishRating.Score,userRating:comment?comment.DividedScore:0,isCommentProcess:true,comment:comment});});};this.closeModal=function(){_self.galleryPopupOpen=false;};this.getRegionName=function(details){var dishDetails=details||_self.preloadedDetails.Region;var regionName=dishDetails.Current.Name;var countryName=dishDetails.Parent.IsContinent!=true?dishDetails.Parent.Name:'';if(regionName&&countryName){return regionName+', '+countryName;}
return regionName||countryName;};var _dishMobileMainObserver=function(data){_self.userCommentStatus=data;};var _dishPageStatusObserver=function(data){_self.pageStatus=data;MainHelper.addMobilePagePlaceholder(_self.pageStatus.isSectionLoaded);};this.getStickyNavOffset=function(){return _self.pageStatus.page===''?0:-10;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_dishMobileMainObserver);PageStatusSubjectService.unsubscribe(_dishPageStatusObserver);GlobalStatusService.setMainPageType(null);};}]);;angular.module('tasteatlas').component('taDishMobileOverview',{bindings:{preloadedDetails:'<',rating:'<',additionalRegionId:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-mobile-overview/ta-dish-mobile-overview.html',controller:'ta-dish-mobile-overview-controller',}).controller("ta-dish-mobile-overview-controller",["DishService","constants","$q","MainHelper","GeolocationService","PageStatusSubjectService","RecipeService","EventHelperService","RatingSharedService",function(DishService,constants,$q,MainHelper,GeolocationService,PageStatusSubjectService,RecipeService,EventHelperService,RatingSharedService){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.getDistance=MainHelper.getDistance;this.redirectToGoogleMaps=MainHelper.redirectToAddress;this.restaurants=[];this.nearbyRestaurants=[];this.displayedRestaurants=[];this.restaurantsInRegion=[];this.similarDishesData=[];this.moreFromRegion=[];this.otherVarieties=null;this.pairingTips={};this.ratingCardActions=null;this.recipeVariations=[];this.mainRecipeVariation;this.types=[];this.location={longitude:'',latitude:''};this.selectedLocation="";this.isRestaurantRatingOpen=false;this.restaurantItem=null;this.redirect=MainHelper.redirect;this.$onInit=function(){_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.preloadedDetails);DishService.GetDishTypes(_self.preloadedDetails.EntityId,0).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){if(data==='DENIED'||data==='TROUBLE'){_self.location={longitude:'',latitude:''};}
else{_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};}
afterLocationPromiseChain();});}
else{afterLocationPromiseChain();}});});};function promiseChain(){var promises=[DishService.filterDishRestaurants(_self.preloadedDetails.EntityId,{Start:0,StartTake:5,PageIndex:1}),DishService.GetDishPairs(_self.preloadedDetails.EntityId),DishService.getSimilarDishes(_self.preloadedDetails.EntityId),DishService.getSimilarDishesInRegion({dishId:_self.preloadedDetails.EntityId,additionalRegionId:_self.additionalRegionId}),DishService.GetDishPartOf(_self.preloadedDetails.EntityId),DishService.getDishOverview(_self.preloadedDetails.EntityId)];if(_self.preloadedDetails.HasRecipes){promises.push(DishService.getRecipeVariations(_self.preloadedDetails.EntityId));promises.push(DishService.getMainRecipeVariationSimpleDetails(_self.preloadedDetails.EntityId));}
return $q.all(promises).then(function(success){if(_self.preloadedDetails.HasRecipes){_self.recipeVariations=success[6].data;_self.mainRecipeVariation=success[7].data;_self.recipeIngredientsPreview=_self.mainRecipeVariation?RecipeService.getRecipeIngredientsPreview(_self.mainRecipeVariation.Components):[];}
_self.restaurants=success[0].data.DishRestaurants;_self.pairingTips=success[1].data;_self.similarDishesData=success[2].data;_self.moreFromRegion=success[3].data;_self.partOf=success[4].data;_self.overviewDetails=success[5].data;if(!_self.preloadedDetails.IsGroup){DishService.getSiblings(_self.preloadedDetails.EntityId,{pageSize:50,page:0}).then(function(success){_self.otherVarieties=success.data;});}}).catch(function(err){console.log(err);});}
function afterLocationPromiseChain(){var promises=[DishService.getNearbyDishRestaurants(_self.preloadedDetails.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude}),DishService.GetDishEvents(_self.preloadedDetails.EntityId,{PageSize:10,PageIndex:1,order:0,Longitude:_self.location.longitude,Latitude:_self.location.latitude}),];return $q.all(promises).then(function(success){_self.nearbyRestaurants=success[0].data;if(success[0].data&&success[0].data.Data.length){_self.displayedRestaurants=success[0].data;_self.selectedLocation="nearme";}
else{_self.displayedRestaurants=_self.restaurants;_self.selectedLocation="world";}
_self.events=EventHelperService.addtEventsLabel(success[1].data);}).catch(function(err){console.log(err);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.eventOrderOptions=MainHelper.getEventOrderByArray(_self.location);});}
this.isAnonymous=false;this.events=undefined;this.eventsLoading=false;this.filterRestaurants=function(regionId,regionName){_self.regionId=regionId;_self.regionName=regionName;DishService.filterDishRestaurants(_self.preloadedDetails.EntityId,{Start:0,StartTake:5,PageIndex:1,RegionId:_self.regionId,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.displayedRestaurants=success.data.DishRestaurants;_self.restaurantsInRegion=success.data.DishRestaurants;},function(error){console.log(error);});};this.changeLocation=function(location){if(_self.selectedLocation===location)return;var region={regionId:null,regionName:""};_self.selectedLocation=location;if(location==="nearme"){return _self.displayedRestaurants=_self.nearbyRestaurants;}
else if(location==="world"){return _self.displayedRestaurants=_self.restaurants;}
else if(location==="region"&&_self.restaurantsInRegion.length===0){region.regionId=_self.preloadedDetails.Region.Current.RegionId;region.regionName=_self.preloadedDetails.Region.Current.Name;return _self.filterRestaurants(region.regionId,region.regionName);}
else if(location==="region"&&_self.restaurantsInRegion.Data){return _self.displayedRestaurants=_self.restaurantsInRegion;}};this.onSelection=function(regionData){_self.filterRestaurants(regionData.id,regionData.name);};this.onFoodTypesOrderChange=function(orderBy){DishService.GetDishTypes(_self.preloadedDetails.EntityId,orderBy).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});};this.onEventsOrderChange=function(orderBy){DishService.GetDishEvents(_self.preloadedDetails.EntityId,{PageSize:10,PageIndex:1,order:orderBy,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.events=orderBy===0?EventHelperService.addtEventsLabel(success.data):success.data;}).catch(function(err){console.log(err);});};this.isLocationOn=function(){if(_self.location){return _self.location.latitude&&_self.location.longitude;}
return false;};this.onLocationActivated=function(location){_self.location=location;return DishService.getNearbyDishRestaurants(_self.preloadedDetails.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.nearbyRestaurants=success.data;_self.displayedRestaurants=_self.nearbyRestaurants;}).catch(function(err){console.log(err);});};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};this.closeTellUsWhere=function(){_self.isTellUs=false;};this.isTellUs=false;this.tellUsWhere=function(){return RatingSharedService.tryOpenRatingCustom(function(){_self.isTellUs=true;});};this.getMoreFromRegionTitle=function(){return MainHelper.getMoreFromRegionTitle(_self.moreFromRegion);};var randomNumberBetween1and4=Math.floor(Math.random()*4)+1;this.randomImageUrl="/content/layout/images/thumbnail-no-photo-"+randomNumberBetween1and4+".jpg";this.countPreparationItems=function(){var preparationWrapper=document.querySelector('.authentic-recipe__preparation')
if(preparationWrapper!=null&&preparationWrapper.childElementCount>4){preparationWrapper.classList.add('authentic-recipe__preparation--five-items');}}
angular.element(document).ready(function(){setTimeout(function(){_self.countPreparationItems();},500);});}]);;angular.module('tasteatlas').component('taDishMobileWhereToEat',{bindings:{details:'<',whereToEatRegionId:'<',name:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-mobile-where-to-eat/ta-dish-mobile-where-to-eat.html',controller:'ta-dish-mobile-where-to-eat-controller'}).controller("ta-dish-mobile-where-to-eat-controller",["$scope","constants","DishService","$q","MainHelper","GeolocationService","DishHelper","PageStatusSubjectService","$window","TextTransformService","RatingSharedService","BotInterceptor",function($scope,constants,DishService,$q,MainHelper,GeolocationService,DishHelper,PageStatusSubjectService,$window,TextTransformService,RatingSharedService,BotInterceptor){var _self=this;this.constants=constants;this.getDistance=MainHelper.getDistance;this.restaurants=[];this.cities=[];this.regionId;this.regionName;this.isWhereToEatLoaded=false;this.isAutoCompleteVisible=false;this.location={longitude:'',latitude:''};this.restaurantsLoading=false;this.splitAddress=DishHelper.splitAddress;this.parseCriticsInfo=MainHelper.parseDishCriticInfo;this.redirect=MainHelper.redirect;this.redirectToGoogleMaps=MainHelper.redirectToAddress;this.shortDescription="";this.pageStatus=PageStatusSubjectService.state;this.selectedLocation="world";this.isMoreRecommendationsOpen=false;this.selectedRestaurant=null;this.pageSize=20;this.numberOfDisplayedItems=20;this.startDisplayedItems=0;this.showLoadMoreBtn=true;this.loadMoreRestaurantsData=false;this.$onInit=function(){PageStatusSubjectService.subscribe(_dishPageStatusObserver);_self.regionName=_self.name?_self.name:'the world';_self.regionId=_self.whereToEatRegionId?_self.whereToEatRegionId:null;var promises=[DishService.filterDishRestaurants(_self.details.EntityId,{Start:0,StartTake:_self.pageSize,PageIndex:1,RegionId:_self.regionId,Longitude:_self.location.longitude,Latitude:_self.location.latitude})];GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){if(data==='DENIED'||data==='TROUBLE'){return promiseChain(promises);}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};if(_self.regionId===null){_self.selectedLocation='nearme';promises=[DishService.getNearbyDishRestaurants(_self.details.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude})];}
else{_self.selectedLocation='search';}
promiseChain(promises);});}else if(data==='PROMPT'){promiseChain(promises);}else if(data==='DENIED'){promiseChain(promises);}else{promiseChain(promises);}});_self.shortDescription=TextTransformService.shortenDescription(_self.details.Description);};this.changePage=function(selectedPage){if(_self.pageStatus.page===selectedPage)return;PageStatusSubjectService.dispatch({page:selectedPage,isSectionLoaded:false});history.pushState({},null,_self.details.EntityUrlLink+"/"+selectedPage);var offset=MainHelper.calculateMobileOffset();if($window.scrollY>offset){$window.scrollTo(0,offset);}};function shouldBlockIndexing(){var isWorld=!_self.whereToEatRegionId;if(isWorld||_self.aggregatedCommentCount>=620){return false;}
return true;}
function promiseChain(promises){_self.restaurantsLoading=true;$q.all(promises).then(function success(response){_self.restaurants=response[0].data.DishRestaurants||response[0].data;_self.aggregatedCommentCount=response[0].data.AggregatedCommentCount;_self.restaurants.PageIndex=1;if(_self.numberOfDisplayedItems>_self.restaurants.Data.length){_self.showLoadMoreBtn=false;}
if(shouldBlockIndexing()){BotInterceptor.blockIndexing();}
if(_self.regionId===null){if(_self.restaurants.Data.length===0)
_self.changeLocation('world');}
else{_self.selectedLocation='search';}
_self.isWhereToEatLoaded=true;PageStatusSubjectService.dispatch({isSectionLoaded:true});}).catch(function(error){console.log(error);}).finally(function(){_self.restaurantsLoading=false;});}
this.loadMore=function(){_self.startDisplayedItems=_self.startDisplayedItems+_self.numberOfDisplayedItems;_self.loadMoreRestaurantsData=true;DishService.filterDishRestaurants(_self.details.EntityId,{Start:_self.startDisplayedItems,StartTake:_self.pageSize}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.DishRestaurants.Data);_self.searchInfo={name:_self.details.Name,region:_self.regionName,count:_self.restaurants.Count};}).catch(function(error){console.log('Error: '+JSON.stringify(error));}).finally(function(){_self.loadMoreRestaurantsData=false;if(_self.startDisplayedItems+_self.numberOfDisplayedItems>_self.restaurants.Data.length){_self.showLoadMoreBtn=false;}});};this.loadMoreRestaurants=function(){if(_self.restaurants.Data.Count>=_self.restaurants.Data.length)
return;_self.restaurantsLoading=true;_self.restaurants.PageIndex=_self.restaurants.PageIndex+1;DishService.filterDishRestaurants(_self.details.EntityId,{Start:_self.restaurants.Data.length,StartTake:10,PageIndex:_self.restaurants.PageIndex,RegionId:_self.regionId,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.DishRestaurants.Data);_self.restaurantsLoading=false;},function(error){console.log(error);});};this.filterRestaurants=function(regionId,regionName,urlLink){_self.restaurantsLoading=false;_self.isAutoCompleteVisible=false;_self.regionId=regionId;_self.regionName=regionName;_self.query=regionName;var regionUrlLink=urlLink?urlLink:"";DishService.filterDishRestaurants(_self.details.EntityId,{Start:0,StartTake:20,PageIndex:1,RegionId:_self.regionId,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.restaurants=success.data.DishRestaurants;_self.restaurantsLoading=false;_self.isAutocompleteActive=false;var whereToEatRegionUrl=_self.details.EntityUrlLink+'/wheretoeat/'+regionUrlLink;history.pushState({},'',whereToEatRegionUrl);},function(error){console.log(error);});};this.filterRestaurantsNearMe=function(){_self.restaurantsLoading=true;return DishService.getNearbyDishRestaurants(_self.details.EntityId,{PageSize:5,PageIndex:1,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.restaurants=success.data;_self.restaurantsLoading=false;},function(error){console.log(error);});};this.closeTellUsWhere=function(){_self.isTellUs=false;};this.isTellUs=false;this.tellUsWhere=function(){return RatingSharedService.tryOpenRatingCustom(function(){_self.isTellUs=true;});};this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};var _dishPageStatusObserver=function(data){_self.pageStatus=data;MainHelper.addMobilePagePlaceholder(_self.pageStatus.isSectionLoaded);};this.changeLocation=function(location){if(_self.selectedLocation===location)return;var region={regionId:null,regionName:""};_self.selectedLocation=location;if(location==="nearme"){return _self.filterRestaurantsNearMe();}
else if(location==="world"){return _self.filterRestaurants(region.regionId,region.regionName);}
else if(location==="region"){region.regionId=_self.details.Region.Current.RegionId;region.regionName=_self.details.Region.Current.Name;return _self.filterRestaurants(region.regionId,region.regionName);}};this.onSelection=function(regionData){_self.filterRestaurants(regionData.id,regionData.name,regionData.url);};this.openMoreRecommendations=function(restaurant){_self.isMoreRecommendationsOpen=true;_self.selectedRestaurant=restaurant;};this.closeModal=function(){_self.isMoreRecommendationsOpen=false;_self.selectedRestaurant=null;};this.getWhereToEatLocation=function(){if(_self.selectedLocation==="nearme"){return "near you";}
else if(_self.selectedLocation==="world"){return "in the world";}
else if(_self.selectedLocation==="region"){return "in "+_self.details.Region.Current.Name;}
else if(_self.selectedLocation==="search"){return "in "+_self.regionName;}
return "";};this.isLocationOn=function(){if(_self.location){return _self.location.latitude&&_self.location.longitude;}
return false;};this.onLocationActivated=function(location){_self.location=location;return _self.filterRestaurantsNearMe();};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};}]);;angular.module('tasteatlas').component('taCountryCertificateSlider',{bindings:{isMobile:'<',id:'<',},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-country-certificate-slider.html',controller:'ta-country-certificate-slider-controller'}).controller("ta-country-certificate-slider-controller",["$scope","MainHelper",function($scope,MainHelper){var _self=this;this.$onInit=function(){};this.includeHorizontalScroll=function(){return MainHelper.includeHorizontalScroll(`certificate-list-country-${_self.id}`);};this.scroll=function(direction){var container=document.getElementById(`certificate-list-country-${_self.id}`);if(_self.isMobile){MainHelper.sideScroll(container,direction,10,90,10);}
else{MainHelper.sideScroll(container,direction,10,300,10);}};}]);;angular.module('tasteatlas').component('taDishDesktopSectionImage',{bindings:{titleData:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-dish-desktop-section-image.html',controller:'ta-dish-desktop-section-image-controller'}).controller('ta-dish-desktop-section-image-controller',['constants',function(constants){var _self=this;this.constants=constants;this.showImage=function(){return _self.titleData.image&&_self.titleData.image.Image&&_self.titleData.type!=='comments';};}]);;angular.module('tasteatlas').component('taDishMobileTypes',{bindings:{data:'<',name:'<'},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-dish-mobile-types.html',controller:'ta-dish-mobile-types-controller'}).controller("ta-dish-mobile-types-controller",["$scope","constants",function($scope,constants){var _self=this;this.constants=constants;this.$onInit=function(){};}]);;angular.module('tasteatlas').component('taDishRestaurantCommentDesktop',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-dish-restaurant-comment-desktop.html',controller:'taDishRestaurantCommenDesktopController'}).controller("taDishRestaurantCommenDesktopController",['$timeout','$scope','constants','CommentService','CommentHelper','FilePickerService','RestaurantService','$q','UserCacheService','RegionLevels','SearchService',function($timeout,$scope,constants,CommentService,CommentHelper,FilePickerService,RestaurantService,$q,UserCacheService,RegionLevels,SearchService){var _self=this;this.constants=constants;this.isAnonymous=true;this.isValid=false;this.isValidRestaurant=false;this.isValidCity=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.isRateValid=false;this.isRestaurantManuallySelected=false;this.submitting=false;this.uploadPercentageCompleted=0;this.isError=false;this.error='';this.Vote='Vote';this.Thanks='Thanks';this.phase=_self.Vote;this.query='';this.city='';this.cities=[];this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[],informations:[]};this.restaurants=[];this.isRestaurantSelected=false;this.isOpened=true;this.existingComment=null;this.$onInit=function(){_self.data.entityId=_self.details.Id||_self.details.EntityId;_self.data.entityType=11;};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.closeModal=function(){_self.onCloseModal();};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);_self.isRateValid=CommentHelper.isRateValid(_self.data);};this.onInputRestaurant=function(query){removeError();_self.isRestaurantSelected=false;_self.isRestaurantManuallySelected=false;_self.restaurants=[];_self.data.entityId2='';_self.data.suggestions=[];_self.isValidCity=false;_self.restaurants=[];if(query===''){_self.isValidRestaurant=false;return;}
_self.isValidRestaurant=true;RestaurantService.searchRestaurants(query).then(function(success){_self.restaurants=success.data;},function(error){console.log(error);});};this.onInputCity=function(city){removeError();_self.cities=[];if(city===''){_self.isValidCity=false;return;}
if(city.length<3){return;}
_self.isValidCity=true;return SearchService.getRegions({query:city,RegionLevelEnum:[RegionLevels.City,RegionLevels.RegionCapitalCity,RegionLevels.CapitalCity]}).then(function(response){_self.cities=response;});};this.onRestaurantDelete=function(){$timeout(function(){removeError();if(_self.isRestaurantSelected){_self.isRestaurantSelected=false;_self.query='';_self.isValidRestaurant=false;_self.restaurants=[];_self.city='';_self.isValidCity=false;_self.existingComment=null;}else{_self.query='';_self.isValidRestaurant=false;_self.isRestaurantManuallySelected=false;_self.restaurants=[];}});};this.onCityDelete=function(){$timeout(function(){removeError();if(_self.isRestaurantSelected){_self.isRestaurantSelected=false;_self.query='';_self.isValidRestaurant=false;_self.city='';_self.isValidCity=false;_self.existingComment=null;}else{_self.city='';_self.isValidCity=false;}});};this.onRestaurantSelect=function(restaurant){$timeout(function(){_self.restaurants=[];_self.isRestaurantSelected=true;_self.data.entityId2=restaurant.EntityId;_self.city=restaurant.SecondaryLabel;_self.query=restaurant.Label;_self.isValidRestaurant=true;_self.isValidCity=true;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);});};this.onClickOutsideRestaurant=function(){removeError();if(_self.query){_self.onManualRestaurantSelect(_self.query);}};this.onManualRestaurantSelect=function(restaurant){$timeout(function(){_self.restaurants=[];_self.query=restaurant;_self.isValidRestaurant=true;_self.existingComment=null;_self.isRestaurantManuallySelected=true;if(_self.city){_self.isValidCity=true;}});};this.onClickOutsideCity=function(){removeError();if(_self.city){_self.onCitySelect(_self.city);}};this.onCitySelect=function(city){$timeout(function(){_self.cities=[];if(typeof city=='object'){_self.city=city.Name+', '+city.ParentFullName;_self.isValidCity=true;}
if(_self.isRestaurantSelected){_self.restaurants=[];_self.query='';_self.isValidRestaurant=false;_self.isRestaurantSelected=false;}});};this.submit=function(){$timeout(function(){if(_self.submitting&&!_self.isValid&&!_self.isValidCity&&!_self.isValidRestaurant)
return;_self.submitting=true;if(_self.isRestaurantSelected)
commentAction();else
suggestionAction();});};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidCity&&!_self.isValidRestaurant)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){resetToDefaults();_self.phase=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.phase=_self.Vote;}).finally(function(){_self.submitting=false;});};this.getRestaurantDescription=function(restaurant){if(!restaurant.SecondaryLabel){return restaurant.Label;}
return restaurant.Label+" ("+restaurant.SecondaryLabel+")";};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){resetToDefaults();_self.phase=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.phase=_self.Vote;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function suggestionAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postSuggestion(photos);}).then(function(commentPosted){resetToDefaults();_self.phase=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.phase=_self.Vote[0];});}
function postSuggestion(uploadedPhotos){var entityType=_self.data.entityType;var entityId=_self.data.entityId;var content=_self.data.content;var rating=_self.data.rating;var photos=uploadedPhotos||[];var suggestionType=1;if(_self.query===''||_self.city==='')
return $q.reject('Restaurant or city cannot be null');var informations=[_self.query,_self.city];return CommentService.suggestionPost({entityType:entityType,entityId:entityId,content:content,score:rating,photos:photos,suggestionType:suggestionType,informations:informations});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){_self.uploadPercentageCompleted=(event.loaded/event.total)*100;}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.isRestaurantSelected=false;_self.restaurants=[];_self.query='';_self.city='';_self.data.entityId2='';_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.informations=[];_self.isValid=false;_self.isValidRestaurant=false;_self.isValidCity=false;_self.submitting=false;_self.isRateValid=false;}}]);;angular.module('tasteatlas').component('taDishRestaurantComment',{bindings:{details:'<',closeModal:'&'},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-dish-restaurant-comment.html',controller:'taDishRestaurantCommenController'}).controller("taDishRestaurantCommenController",['$scope','constants','CommentService','CommentHelper','RestaurantService','$q','UserSubjectService','SearchService','RegionLevels',function($scope,constants,CommentService,CommentHelper,RestaurantService,$q,UserSubjectService,SearchService,RegionLevels){var _self=this;this.constants=constants;this.isAnonymous=true;this.isValid=false;this.isValidRestaurant=false;this.isValidCity=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.isRateValid=false;this.isRestaurantManuallySelected=false;this.submitting=false;this.uploadPercentageCompleted=0;this.isLoginView=true;this.isError=false;this.error='';this.Vote='Vote';this.Login='Login';this.Thanks='Thanks';this.phase=_self.Vote;this.query='';this.city='';this.cities=[];this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[],informations:[]};this.restaurants=[];this.isRestaurantSelected=false;this.$onInit=function(){_self.data.entityId=_self.details.Id||_self.details.EntityId;_self.data.entityType=11;_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserSubjectService.subscribe(_dishRestaurantCommentObserver);if(_self.isAnonymous)
_self.phase=_self.Login;};var _dishRestaurantCommentObserver=function(options){_self.isAnonymous=UserSubjectService.isInAnonymousRole();if(_self.isAnonymous)
_self.phase=_self.Login;};this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);_self.isRateValid=CommentHelper.isRateValid(_self.data);};this.onInputRestaurant=function(query){removeError();_self.isRestaurantSelected=false;_self.isRestaurantManuallySelected=false;_self.restaurants=[];_self.data.entityId2='';_self.data.suggestions=[];_self.isValidCity=false;_self.restaurants=[];if(query===''){_self.isValidRestaurant=false;return;}
_self.isValidRestaurant=true;RestaurantService.searchRestaurants(query).then(function(success){_self.restaurants=success.data;},function(error){console.log(error);});};this.onInputCity=function(city){removeError();_self.cities=[];if(city===''){_self.isValidCity=false;return;}
if(city.length<3){return;}
_self.isValidCity=true;return SearchService.getRegions({query:city,RegionLevelEnum:[RegionLevels.City,RegionLevels.RegionCapitalCity,RegionLevels.CapitalCity]}).then(function(response){_self.cities=response;});};this.onRestaurantDelete=function(){removeError();if(_self.isRestaurantSelected){_self.isRestaurantSelected=false;_self.query='';_self.isValidRestaurant=false;_self.restaurants=[];_self.city='';_self.isValidCity=false;}else{_self.query='';_self.isValidRestaurant=false;_self.isRestaurantManuallySelected=false;_self.restaurants=[];}};this.onClickOutsideRestaurant=function(){removeError();if(_self.query){_self.onManualRestaurantSelect(_self.query);}};this.onCityDelete=function(){removeError();if(_self.isRestaurantSelected){_self.isRestaurantSelected=false;_self.query='';_self.isValidRestaurant=false;_self.city='';_self.isValidCity=false;}else{_self.city='';_self.isValidCity=false;}};this.onRestaurantSelect=function(restaurant){_self.restaurants=[];_self.isRestaurantSelected=true;_self.data.entityId2=restaurant.EntityId;_self.city=restaurant.SecondaryLabel;_self.query=restaurant.Label;_self.isValidRestaurant=true;_self.isValidCity=true;};this.onManualRestaurantSelect=function(restaurant){_self.restaurants=[];_self.query=restaurant;_self.isValidRestaurant=true;_self.isRestaurantManuallySelected=true;if(_self.city){_self.isValidCity=true;}};this.onClickOutsideCity=function(){removeError();if(_self.city){_self.onCitySelect(_self.city);}};this.onCitySelect=function(city){_self.cities=[];if(typeof city=='object'){_self.city=city.Name+', '+city.ParentFullName;_self.isValidCity=true;}
if(_self.isRestaurantSelected){_self.restaurants=[];_self.query='';_self.isValidRestaurant=false;_self.isRestaurantSelected=false;}};this.submit=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidCity&&!_self.isValidRestaurant)
return;_self.submitting=true;if(_self.isRestaurantSelected)
commentAction();else
suggestionAction();};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){resetToDefaults();_self.phase=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.phase=_self.Vote;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function suggestionAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postSuggestion(photos);}).then(function(commentPosted){resetToDefaults();_self.phase=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.phase=_self.Vote;});}
function postSuggestion(uploadedPhotos){var entityType=_self.data.entityType;var entityId=_self.data.entityId;var content=_self.data.content;var rating=_self.data.rating;var photos=uploadedPhotos||[];var suggestionType=1;if(_self.query===''||_self.city==='')
return $q.reject('Restaurant or city cannot be null');var informations=[_self.query,_self.city];return CommentService.suggestionPost({entityType:entityType,entityId:entityId,content:content,score:rating,photos:photos,suggestionType:suggestionType,informations:informations});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.isRestaurantSelected=false;_self.restaurants=[];_self.query='';_self.city='';_self.data.entityId2='';_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.informations=[];_self.isValid=false;_self.isValidRestaurant=false;_self.isValidCity=false;_self.submitting=false;_self.isRateValid=false;}
function uploadPhotosProgressCallback(event){_self.uploadPercentageCompleted=(event.loaded/event.total)*100;}
this.isRegisterView=false;this.openRegister=function(){_self.isRegisterView=true;_self.isLoginView=false;};this.closeRegister=function(){_self.isRegisterView=false;_self.isLoginView=true;};this.getRestaurantDescription=function(restaurant){if(!restaurant.SecondaryLabel){return restaurant.Label;}
return restaurant.Label+" ("+restaurant.SecondaryLabel+")";};$scope.$on('$destroy',function(){UserSubjectService.unsubscribe(_dishRestaurantCommentObserver);});}]);;angular.module('tasteatlas').component('taMobileRegionSearch',{bindings:{onSelection:'&'},templateUrl:'/content/scripts/app/components/dish-details/dish-shared/ta-mobile-region-search.html',controller:'ta-mobile-region-search-controller'}).controller("ta-mobile-region-search-controller",["constants","$timeout","RegionService","DishHelper",function(constants,$timeout,RegionService,DishHelper){var _self=this;this.constants=constants;this.isAutocompleteActive=false;this.query="";this.regions=[];this.$onInit=function(){};this.toggleAutocomplete=function(){_self.isAutocompleteActive=!_self.isAutocompleteActive;if(_self.isAutocompleteActive){setTextboxToFocus();}};this.autoCompleteRegions=function(query){deleteAutocompleteResults();if(query===undefined||query==='')
return;if(query.length<2)
return;RegionService.searchRegions(query).then(function success(response){var data=response.data;_self.regions=DishHelper.mapAutocompleteItems(data);response.data.length===0?_self.isAutoCompleteVisible=false:_self.isAutoCompleteVisible=true;},function error(err){console.log(err);});};this.deleteQuery=function(){_self.query='';deleteAutocompleteResults();_self.isAutoCompleteVisible=false;};this.doSelection=function(regionId,regionName,regionUrlLink){_self.isAutocompleteActive=false;var resultObject={id:regionId,name:regionName,url:regionUrlLink};_self.onSelection({regionData:resultObject});_self.regionId=regionId;deleteAutocompleteResults();_self.query=regionName;};function deleteAutocompleteResults(){_self.regions=[];_self.regionId='';setTextboxToFocus();}
function setTextboxToFocus(){$timeout(function(){angular.element('#autocomplete-region-id').focus();});}}]);;angular.module('tasteatlas').component('taEventDesktopMain',{bindings:{id:'<'},templateUrl:'/content/scripts/app/components/event-details/event-desktop-overview/ta-event-desktop-main.html',controller:'taEventDesktopMainController'}).controller("taEventDesktopMainController",["$q","constants","EventService","MainHelper","CommentHelper","UserCommentStatusService","EventHelperService",function($q,constants,EventService,MainHelper,CommentHelper,UserCommentStatusService,EventHelperService){var _self=this;this.constants=constants;this.details={};this.reviews=[];this.imageData='';this.comment=undefined;this.isLoaded=false;this.$onInit=function(){var promises=[EventService.GetEventDetails(_self.id),EventService.GetEventReviews(_self.id,{PageIndex:1,PageSize:12}),EventService.GetEventUserComment(_self.id)];$q.all(promises).then(function(success){_self.details=success[0].data;_self.reviews=success[1].data;UserCommentStatusService.subscribe(_eventDesktopMainObserver);_self.comment=success[2].data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating,userRating:_self.comment?CommentHelper.recalculateRatingForView(_self.comment.RatingScore):0,isCommentProcess:false,comment:_self.comment});_self.isLoaded=true;}).catch(function(error){console.log(error);});};this.loadMoreComments=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.isLoadingComments=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;EventService.GetEventReviews(_self.details.Id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isLoadingComments=false;},function(error){console.log(error);});};this.loadMoreItems=function(){if(_self.items.PageIndex===_self.items.NumberOfPages)
return;_self.isLoadingItems=true;_self.items.PageIndex=_self.items.PageIndex+1;EventService.GetEventItems(_self.details.Id,{PageSize:_self.items.PageSize,PageIndex:_self.items.PageIndex}).then(function(success){_self.items.Data=_self.items.Data.concat(success.data.Data);_self.isLoadingItems=false;},function(error){_self.isLoadingItems=false;console.log(error);});};var _eventDesktopMainObserver=function(data){_self.userCommentStatus=data;};this.getDateClass=function(){if(_self.details.Date.IsNow){return{"event-card__date--now":true};}
if(_self.details.Date.UpcomingInDays){return{"event-card__date--exact":true};}};this.getExactTime=function(){return _self.details.Date.IsNow?"Now":_self.getEventTimeFromNow(_self.details.Date);};this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_eventDesktopMainObserver);};}]);;angular.module('tasteatlas').component('taEventMobileMain',{bindings:{id:'<'},templateUrl:'/content/scripts/app/components/event-details/event-mobile-overview/ta-event-mobile-main.html',controller:'taEventMobileMainController'}).controller("taEventMobileMainController",["$q","constants","EventService","MainHelper","CommentHelper","UserCommentStatusService","EventHelperService",function($q,constants,EventService,MainHelper,CommentHelper,UserCommentStatusService,EventHelperService){var _self=this;this.constants=constants;this.redirectToGoogleMaps=MainHelper.redirectToAddress;this.details={};this.reviews=[];this.imageData='';this.comment=undefined;this.isLoaded=false;this.$onInit=function(){var promises=[EventService.GetEventDetails(_self.id),EventService.GetEventReviews(_self.id,{PageIndex:1,PageSize:12}),EventService.GetEventUserComment(_self.id)];$q.all(promises).then(function(success){_self.details=success[0].data;_self.reviews=success[1].data;UserCommentStatusService.subscribe(_eventDesktopMainObserver);_self.comment=success[2].data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating,userRating:_self.comment?CommentHelper.recalculateRatingForView(_self.comment.RatingScore):0,isCommentProcess:false,comment:_self.comment});_self.isLoaded=true;}).catch(function(error){console.log(error);});};this.loadMoreComments=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.isLoadingComments=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;EventService.GetEventReviews(_self.details.Id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isLoadingComments=false;},function(error){console.log(error);});};this.loadMoreItems=function(){if(_self.items.PageIndex===_self.items.NumberOfPages)
return;_self.isLoadingItems=true;_self.items.PageIndex=_self.items.PageIndex+1;EventService.GetEventItems(_self.details.Id,{PageSize:_self.items.PageSize,PageIndex:_self.items.PageIndex}).then(function(success){_self.items.Data=_self.items.Data.concat(success.data.Data);_self.isLoadingItems=false;},function(error){_self.isLoadingItems=false;console.log(error);});};this.getEventLocationInfo=function(){if(_self.details.Region){return _self.details.Region.RegionName.toUpperCase()+', '+_self.details.Region.CountryName.toUpperCase();}};this.getEventLocationAddress=function(){var result=_self.details.Venue;if(_self.details.Address){result+=", "+_self.details.Address;}
return result;};this.getDateClass=function(){if(_self.details.Date.IsNow){return{"event-detail__date--now":true};}
if(_self.details.Date.UpcomingInDays){return{"event-detail__date--exact":true};}};this.getExactTime=function(){return _self.details.Date.IsNow?"Now":_self.getEventTimeFromNow(_self.details.Date);};this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;this.getDisplayDate=function(){var displayDate=_self.details.Date.DisplayDate;if(_self.details.Date.UpcomingInDays!==null){var startMonth=moment(_self.details.Date.StartDate).format("MMM D");var endMonth=moment(_self.details.Date.EndDate).format("MMM D");displayDate=startMonth+" - "+endMonth;if(_self.details.Date.StartDate===_self.details.Date.EndDate){displayDate=displayDate.split('-')[0].trim();}}
return displayDate;};var _eventDesktopMainObserver=function(data){_self.userCommentStatus=data;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_eventDesktopMainObserver);};}]);;angular.module('tasteatlas').component('taBackToTop',{controller:'taBackToTopController',bindings:{isMobile:'<'},templateUrl:'/content/scripts/app/components/general/back-to-top/ta-back-to-top.html',}).controller("taBackToTopController",['$scope',function($scope){var _self=this;let lastScrollTop=0;_self.innerHeight=0;_self.backToTop;_self.$onInit=function(){_self.backToTop=$(".js-back-to-top");_self.backToTop.click(function(){window.scrollTo({top:0,behavior:'smooth'});})
var scrollTimer=null;document.onscroll=function(){if(scrollTimer){clearTimeout(scrollTimer);scrollTimer=null;}
scrollTimer=setTimeout(handleScroll,10);};setInterval(function(){handleInterval();},50);}
function handleScroll(){var scrollTop=$(document).scrollTop();if(scrollTop>600&&scrollTop<lastScrollTop&&!getModalElem().is(':visible')){var buttonPosition=window.innerHeight-80;_self.backToTop.children().css('top',buttonPosition+"px");show();}else{hide();}
lastScrollTop=scrollTop;}
function handleInterval(){if(getModalElem().is(':visible')){hide();}}
function getModalElem(){return $(".modal");}
function hide(){_self.backToTop.addClass('ta-back-to-top--hide');}
function show(){_self.backToTop.removeClass('ta-back-to-top--hide');}}]);;angular.module('tasteatlas').component('taCookies',{templateUrl:'/content/scripts/app/components/general/cookies/ta-cookies.html',controller:'taCookiesController'}).controller("taCookiesController",['$cookies',function($cookies){var _self=this;this.cookieName='ta_cookie_policy';this.hasCookie=false;this.$onInit=function(){_self.hasCookie=true;};this.putCookie=function(){_self.hasCookie=true;var now=new Date();var exp=new Date(now.getFullYear()+1,now.getMonth(),now.getDate());$cookies.put(_self.cookieName,_self.hasCookie,{expires:exp});};}]);;angular.module('tasteatlas').component('taFooterDesktop',{templateUrl:'/content/scripts/app/components/general/footer/ta-footer-desktop.html',controller:'taFooterDesktopController'}).controller("taFooterDesktopController",['StatisticsService',function(StatisticsService){var _self=this;this.information=[];this.currentYear='2020';this.$onInit=function(){_self.currentYear=new Date().getFullYear();StatisticsService.getFooterStatistics().then(function success(response){_self.information=response.data;},function error(err){console.log(err);});};this.isSubmitInformationShown=false;this.toggleSubmitInformation=function(){_self.isSubmitInformationShown=!_self.isSubmitInformationShown;};}]);;angular.module('tasteatlas').component('taFooterMobile',{templateUrl:'/content/scripts/app/components/general/footer/ta-footer-mobile.html',controller:'taFooterMobileController'}).controller("taFooterMobileController",['StatisticsService',function(StatisticsService){var _self=this;this.information=[];this.currentYear='2020';this.$onInit=function(){_self.currentYear=new Date().getFullYear();StatisticsService.getFooterStatistics().then(function success(response){_self.information=response.data;},function error(err){console.log(err);});};}]);;angular.module('tasteatlas').component('taHamburgerMobile',{templateUrl:'/content/scripts/app/components/general/hamburger/ta-hamburger-mobile.html',controller:'taHamburgerMobileController'}).controller("taHamburgerMobileController",['StatisticsService','constants','CommunicationService','$scope',function(StatisticsService,constants,CommunicationService,$scope){var _self=this;this.constants=constants;this.isHamburgerShown=false;this.information=[];this.$onInit=function(){StatisticsService.getFooterStatistics().then(function(response){_self.information=response.data;}).catch(function(err){console.log(err);});}
this.closeHamburger=function(){angular.element('#mobile-hamburger-id').removeClass('offcanvas--active');$(document.body).css('overflow','auto');setTimeout(function(){$scope.$apply(function(){_self.isHamburgerShown=false;});},100);};this.openHamburger=function(){$(document.body).css('overflow','hidden');CommunicationService.openHamburgerAction({name:CommunicationService.OPEN_HAMBURGER_ACTION});_self.isHamburgerShown=true;setTimeout(function(){angular.element('#mobile-hamburger-id').addClass('offcanvas--active');},250);};this.isSubmitInformationShown=false;this.toggleSubmitInformation=function(){_self.isSubmitInformationShown=!_self.isSubmitInformationShown;};}]);;angular.module('tasteatlas').component('taHeaderBottom',{bindings:{isMobile:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/general/header/ta-header-bottom-mobile.html','desktop':'/content/scripts/app/components/general/header/ta-header-bottom-desktop.html',};return templates[$attrs.template];},controller:'taHeaderBottomController',}).controller("taHeaderBottomController",['$q','$scope','$element','$timeout','constants','GeolocationService','MenuService',function($q,$scope,$element,$timeout,constants,GeolocationService,MenuService){var _self=this;this.pathName;this.nearMeRegionData=[];this.nearMeParentRegionData=[];this.nearMeParentCountryData=[];this.destinationsRootData=[];this.destinationsData=[];this.foodCategoriesRootData=[];this.foodCategoriesData=[];this.selectedMenuItem;this.selectedContinent;this.selectedCountry;this.selectedFoodCategory;this.selectedFoodItem;this.showSubmenu;this.menuItems=[{name:"near-me",id:1},{name:"destinations",id:2},{name:"bestfood",id:3},{name:"map",id:4},{name:"recipes",id:5},{name:"certificates",id:6},{name:"quiz",id:7},{name:"food-categories",id:8},];this.continents=[{name:"Africa",id:2},{name:"Asia",id:1},{name:"Australia",id:7},{name:"Europe",id:3},{name:"North America",id:6},{name:"South America",id:4},];this.foodCategories=[{name:"Dishes",id:1},{name:"Food Products",id:2},{name:"Beverages",id:3}];this.observerOptions={root:null,rootMargin:'10%',threshold:0};this.nearMeLayersLoader=false;this.destinationsLayersLoader=false;this.foodCategoriesLayersLoader=false;this.userClicked=false;this.locationEnabled=true;this.nullOr500ServerError=false;this.location={longitude:'',latitude:'',hasLocation:false};var _granted='GRANTED';var _denied='DENIED';var _prompt='PROMPT';var _trouble='TROUBLE';_self.constants=constants;this.$onInit=function(){if(window.selectedMenuItem){_self.pathName=window.selectedMenuItem;if(_self.isMobile){$timeout(function(){var mainMenu=$element.find('.header-bottom__main-menu');var selectedMenuItem=$element.find('.menu-item__active',mainMenu);if(selectedMenuItem&&selectedMenuItem.parent().index()>=3){mainMenu.scrollLeft(selectedMenuItem.offset().left-100);}});}}
_self.resetAllMenus();_self.getLocationData();_self.observer=new IntersectionObserver(_self.observerCallback,_self.observerOptions);_self.observeGAbutton();};_self.createCustomEventGA4=function(category,parameter_name,parameter_value){gtag("event",category,{[parameter_name]:parameter_value});}
_self.handleGAcLick=function(event){var attributeName='data-tag';var closestElement=angular.element(event.target).closest(`[${attributeName}]`);var attributeValue=closestElement.attr(attributeName);if(attributeValue){_self.createCustomEventGA4(attributeValue,'event_label',attributeValue)};}
_self.observeGAbutton=function(){var links=document.querySelectorAll('.js-ga-nav');links.forEach(el=>_self.observer.observe(el));}
_self.observerCallback=function(entries){entries.forEach(el=>el.isIntersecting?el.target.addEventListener('click',_self.handleGAcLick):el.target.removeEventListener('click',_self.handleGAcLick));}
_self.getMenuItemById=function(id){if(id){return _self.menuItems.find(obj=>{return obj.id===id})}
return null;}
_self.getMenuItemByName=function(name){if(name){return _self.menuItems.find(obj=>{return obj.name===name})}
return null;}
_self.getLocationData=function(){GeolocationService.handlePremission().then(function(data){if(data===_granted){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data===_trouble){_self.locationState=_trouble;_self.locationEnabled=false;return null;}
if(data===_denied){_self.locationState=_denied;_self.locationEnabled=false;return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};var geoPromises=[MenuService.getNearMe({lat:_self.location.latitude,lon:_self.location.longitude})];if(_self.nearMeRegionData.length==0){return promiseChain(geoPromises);}});}else if(data===_prompt){_self.locationEnabled=false;_self.locationState=_prompt;}else if(data===_denied){_self.locationState=_denied;_self.locationEnabled=false;}});}
function promiseChain(promises){_self.nearMeLayersLoader=true;$q.all(promises).then(function success(success){_self.nearMeRegionData={RegionUrlLink:success[0].data.RegionUrlLink,RegionName:success[0].data.RegionName};_self.nearMeParentRegionData={ParentRegionUrlLink:success[0].data.ParentRegionUrlLink,ParentRegionName:success[0].data.ParentRegionName};_self.nearMeCountryData={CountryUrlLink:success[0].data.CountryUrlLink,CountryName:success[0].data.CountryName};_self.userClicked=true;}).catch(function(error){console.log(error);console.error('NearMePromiseChain ERROR: '+JSON.stringify(error));}).finally(function(){_self.nearMeLayersLoader=false;});}
_self.onLocationActivated=function(location){_self.location=location;return _self.locationNearMe();};_self.isLocationOn=function(){if(_self.location){return _self.location.latitude&&_self.location.longitude;}
return false;};_self.locationNearMe=function(){_self.nearMeLayersLoader=true;MenuService.getNearMe({lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){if(success.data==null)
_self.nullOr500ServerError=true;else
_self.nearMeRegionData={RegionUrlLink:success.data.RegionUrlLink,RegionName:success.data.RegionName};_self.nearMeParentRegionData={ParentRegionUrlLink:success.data.ParentRegionUrlLink,ParentRegionName:success.data.ParentRegionName};_self.nearMeCountryData={CountryUrlLink:success.data.CountryUrlLink,CountryName:success.data.CountryName};_self.userClicked=true;}).catch(function(error){console.error("getNearMe ERROR: "+JSON.stringify(error));}).finally(function(){_self.nearMeLayersLoader=false;})};_self.resetAllMenus=function(){_self.showSubmenu=false;_self.selectedContinent=null;_self.selectedCountry=null;_self.selectedFoodCategory=null;_self.selectedFoodItem=null;_self.selectedMenuItem=null;if(_self.isMobile){document.body.style.overflow='visible';}
if(!_self.pathName){_self.selectedMenuItem=null;}
else{var menuItem=_self.getMenuItemByName(_self.pathName);if(menuItem){_self.selectedMenuItem=menuItem;}}}
_self.openNearMe=function(){var menuItem=_self.getMenuItemById(1);if(_self.selectedMenuItem!=menuItem||!_self.showSubmenu){_self.resetAllMenus();if(!_self.userClicked){_self.getLocationData();}
_self.selectedMenuItem=menuItem;if(_self.isMobile){document.body.style.overflow='hidden';}
_self.showSubmenu=true;}
else{_self.resetAllMenus();if(_self.isMobile){document.body.style.overflow='visible';}}}
_self.toggleMenuRoot=function(menuId){var menuItem=_self.getMenuItemById(menuId);if(_self.selectedMenuItem!=menuItem||!_self.showSubmenu){_self.resetAllMenus();_self.selectedMenuItem=menuItem;if(_self.isMobile){document.body.style.overflow='hidden';}
_self.showSubmenu=true;}
else{_self.resetAllMenus();if(_self.isMobile){document.body.style.overflow='visible';}}};_self.toggleContinentItems=function(continent){_self.selectedCountry=null;if(_self.selectedContinent!=continent){_self.destinationsLayersLoader=true;_self.selectedContinent=continent;MenuService.getCountries(continent.id).then(function(success){_self.destinationsData=success.data;_self.destinationsRootData=success.data;}).catch(function(error){console.error("getDestinationsLayerDataERROR: "+JSON.stringify(error));}).finally(()=>{_self.destinationsLayersLoader=false;});}
else{_self.selectedContinent=null;}};_self.toggleCountryDetails=function(country){if(_self.selectedCountry!=country){_self.destinationsLayersLoader=true;_self.selectedCountry=country;console.log(country)
MenuService.getRegions(country.EntityId).then(function(success){_self.destinationsData=success.data;}).catch(function(error){console.error("getDestinationsLayerDataERROR: "+JSON.stringify(error));}).finally(()=>{_self.destinationsLayersLoader=false;});}
else{_self.selectedCountry=null;_self.destinationsData=_self.destinationsRootData;}};_self.toggleFoodCategoryItems=function(foodCategory){_self.selectedFoodItem=null;if(_self.selectedFoodCategory!=foodCategory){_self.foodCategoriesLayersLoader=true;_self.selectedFoodCategory=foodCategory;var foodCategoriesAPIType;if(foodCategory.id==1){foodCategoriesAPIType=MenuService.getDishGroups(null);}
else if(foodCategory.id==2){foodCategoriesAPIType=MenuService.getIngredientGroups(null);}
else if(foodCategory.id==3){foodCategoriesAPIType=MenuService.getBeverageGroups(275);}
foodCategoriesAPIType.then(function(success){_self.foodCategoriesData=success.data;_self.foodCategoriesRootData=success.data;}).catch(function(error){console.error("getFoodCategoriesLayerDataERROR: "+JSON.stringify(error));}).finally(()=>{_self.foodCategoriesLayersLoader=false;});}
else{_self.selectedFoodCategory=null;}};_self.toggleFoodItemDetails=function(foodItem){if(_self.selectedFoodItem!=foodItem){_self.foodCategoriesLayersLoader=true;_self.selectedFoodItem=foodItem;var foodCategoriesAPIType;if(_self.selectedFoodCategory.id==1){foodCategoriesAPIType=MenuService.getDishGroups(foodItem.EntityId);}
else if(_self.selectedFoodCategory.id==2){foodCategoriesAPIType=MenuService.getIngredientGroups(foodItem.EntityId);}
else if(_self.selectedFoodCategory.id==3){foodCategoriesAPIType=MenuService.getBeverageGroups(foodItem.EntityId);}
foodCategoriesAPIType.then(function(success){_self.foodCategoriesData=success.data;}).catch(function(error){console.error("getFoodCategoriesLayerDataERROR: "+JSON.stringify(error));}).finally(()=>{_self.foodCategoriesLayersLoader=false;});}
else{_self.selectedFoodItem=null;_self.foodCategoriesData=_self.foodCategoriesRootData;}};document.addEventListener("scroll",(event)=>{if(window.pageYOffset>299&&!_self.isMobile){_self.resetAllMenus();}});}]);;angular.module('tasteatlas').component('taHeaderDesktop',{templateUrl:'/content/scripts/app/components/general/header/ta-header-desktop.html',controller:'taHeaderDesktopController',bindings:{isErrorPage:'<'}}).controller("taHeaderDesktopController",["$element","$window","ResultListSubjectService",function($element,$window,ResultListSubjectService){var _self=this;this.displayHeader=true;this.isSubmitInformationShown=false;this.showSubmitFoodButton=false;this.$onInit=function(){ResultListSubjectService.subscribe(_desktopListObserver);_self.showSubmitFoodButton=true;};this.toggleSubmitInformation=function(){_self.isSubmitInformationShown=!_self.isSubmitInformationShown;};this.isSearchResults=function(){return document.getElementById('search-details-main');};function _desktopListObserver(){addScrollEventHandler();};function addScrollEventHandler(){var windowElement=angular.element($window);var previousTopPosition=windowElement.scrollTop();windowElement.bind("scroll",handleNavigation);function handleNavigation(e){var window=angular.element(e.currentTarget);var element=angular.element($element);var headerDiv=angular.element(element.find('#header-id'));if(previousTopPosition>window.scrollTop()){headerDiv.removeClass('header--hidden');}else if(previousTopPosition<window.scrollTop()){headerDiv.addClass('header--hidden');}
previousTopPosition=window.scrollTop();};}}]);;angular.module('tasteatlas').component('taHeaderMobile',{templateUrl:'/content/scripts/app/components/general/header/ta-header-mobile-redesign.html',bindings:{isErrorPage:'<',isHomePage:'<'},controller:'taHeaderMobileController',}).controller("taHeaderMobileController",['$rootScope','$scope','LoginService','UserSubjectService','MeService','AccountService','UserCacheService',function($rootScope,$scope,LoginService,UserSubjectService,MeService,AccountService,UserCacheService){var _self=this;this.me={};this.isAnonymous=false;this.isItOpen=false;this.displayHeader=true;this.isLoginView=true;this.isLoginProcess=false;this.isDropdownOpen=false;this.userFirstLetter='';this.isInAnonymousRole=UserSubjectService.isInAnonymousRole;this.$onInit=function(){LoginService.subscribe(_self.loginProcessStatus);$scope.$watch('$root.userTokenInitalized',function(){if($rootScope.userTokenInitalized){if(UserSubjectService.isInAnonymousRole()){_self.isAnonymous=true;}else{MeService.me().then(function success(response){_self.me=response.data;_self.isAnonymous=false;_self.userFirstLetter=_self.me.FirstName.charAt(0);},function error(err){console.log(err);});}}});};this.isLoginOpened=false;this.openLogin=function(){_self.isLoginProcess=true;_self.isLoginView=true;var header=document.getElementById('header-id');header.style.zIndex=111;LoginService.updateState({isLoginProcess:_self.isLoginProcess});};this.closeLogin=function(){_self.isLoginProcess=false;_self.isRegisterView=false;_self.isLoginView=true;var header=document.getElementById('header-id');header.style.zIndex=110;LoginService.updateState({isLoginProcess:_self.isLoginProcess});};this.isRegisterView=false;this.openRegister=function(){_self.isRegisterView=true;_self.isLoginView=false;};this.closeRegister=function(){_self.isRegisterView=false;_self.isLoginView=true;};this.loginProcessStatus=function(LoginStatus){_self.isLoginProcess=LoginStatus.isLoginProcess;};this.toggleDropdown=function(event){if(event){_self.isDropdownOpen=!_self.isDropdownOpen
return}
if(event!==null){_self.isDropdownOpen=false}};this.signOut=function(){AccountService.signOut().then(function(success){UserCacheService.clearStorageByKey('myLists');UserCacheService.clearStorageByKey('gameQuizPublicId');UserCacheService.clearStorageByKey('quizAnonymousUserId');location.reload();}).catch(function(err){UserCacheService.clearStorageByKey('myLists');UserCacheService.clearStorageByKey('gameQuizPublicId');UserCacheService.clearStorageByKey('quizAnonymousUserId');location.reload();console.log(err);});};this.openUserDashPopup=function(){console.log('openUserDashPopup');_self.isItOpen=true;}
var closeUserDashPopup=$rootScope.$on("closeUserDashPopup",function(event,data){_self.isItOpen=data;});$rootScope.$on('$destroy',closeUserDashPopup);$scope.$on('$destroy',function(){LoginService.unsubscribe(_self.loginProcessStatus);});}]);;angular.module('tasteatlas').component('taRegularLoginDesktop',{templateUrl:'/content/scripts/app/components/general/login-desktop/ta-regular-login-desktop.html',controller:'taRegularLoginDesktopController'}).controller("taRegularLoginDesktopController",["AccountService","$timeout","constants","UserLocationFactory",function(AccountService,$timeout,constants,UserLocationFactory){var _self=this;this.constants=constants;this.isSubmitting=false;this.isPasswordVisible=false;this.errorMessage='';this.password='';this.email='';this.login=function(event){_self.isSubmitting=true;_self.errorMessage='';AccountService.login({Email:_self.email,Password:_self.password}).then(function(response){if(response.success===true){event.preventDefault();$timeout(function(){_self.isSubmitting=false;UserLocationFactory.clearCountryCookie();window.location.reload();},1500)}
else{_self.errorMessage=response.message;}}).catch(function(response){_self.isSubmitting=false;if(response.data.success===false){_self.errorMessage=response.data.message;}});};this.passwordVisibilityHandler=()=>{_self.isPasswordVisible=!_self.isPasswordVisible;}}]);;angular.module('tasteatlas').component('taRegularRegisterDesktop',{templateUrl:'/content/scripts/app/components/general/login-desktop/ta-regular-register-desktop.html',controller:'taRegularRegisterDesktopController'}).controller("taRegularRegisterDesktopController",["AccountService","$scope",function(AccountService,$scope){var _self=this;this.isSubmitting=false;this.isPasswordVisible=false;this.serverError=false;this.tokenIsReady=false;this.serverErrorMessage="";this.$onInit=function(){turnstile.ready(function(){turnstile.render('#turnstileWidget',{sitekey:'0x4AAAAAAAMjvcS1XT4GI3th',theme:'light',datasize:'compact',appearance:'execute',refreshexpired:'manual',callback:function(token){_self.token=token;if(token){_self.tokenIsReady=true;}
else{_self.tokenIsReady=false;}},});});};this.register=function(registerForm){_self.serverError=false;if(registerForm.$invalid)
return;_self.isSubmitting=true;AccountService.register({Email:_self.email,Password:_self.password,FirstName:_self.firstName,LastName:_self.lastName,token:_self.token}).then(function(response){_self.isSubmitting=false;if(response.success)
window.location.reload();else{_self.serverError=true;_self.serverErrorMessage=response.errors[0];}}).catch(function(response){_self.serverError=true;_self.serverErrorMessage="";});};this.passwordVisibilityHandler=()=>{_self.isPasswordVisible=!_self.isPasswordVisible;};}]);;angular.module('tasteatlas').component('taSocialLoginDesktop',{templateUrl:'/content/scripts/app/components/general/login-desktop/ta-social-login-desktop.html',controller:'taSocialLoginDesktopController'}).controller("taSocialLoginDesktopController",["$scope","UserLocationFactory",function($scope,UserLocationFactory){var _self=this;this.redirect='';this.$onInit=function(){_self.redirect=window.location.pathname+window.location.search;};this.submitFbLogin=function(){UserLocationFactory.clearCountryCookie();var fb=angular.element(document.getElementById("fb_login_form_social_login"));fb.submit();};this.submitGoogleLogin=function(){UserLocationFactory.clearCountryCookie();var google=angular.element(document.getElementById("fb_google_form_social_login"));google.submit();};}]);;angular.module('tasteatlas').component('taSocialRegisterDesktop',{templateUrl:'/content/scripts/app/components/general/login-desktop/ta-social-register-desktop.html',controller:'taSocialRegisterDesktopController'}).controller("taSocialRegisterDesktopController",["$scope","UserLocationFactory",function($scope,UserLocationFactory){var _self=this;this.redirect='';this.$onInit=function(){_self.redirect=window.location.pathname;};this.submitFbLogin=function(){UserLocationFactory.clearCountryCookie();var fb=angular.element(document.getElementById("fb_login_form_social_register"));fb.submit();};this.submitGoogleLogin=function(){UserLocationFactory.clearCountryCookie();var google=angular.element(document.getElementById("fb_google_form_social_register"));google.submit();};}]);;angular.module('tasteatlas').component('taRegisterMobileButton',{templateUrl:'/content/scripts/app/components/general/login-mobile/ta-register-mobile-button.html',controller:'taRegisterMobileButtonController'}).controller("taRegisterMobileButtonController",["AccountService",function(AccountService){var _self=this;this.isRegisterOpened=false;this.openRegister=function(){_self.isRegisterOpened=true;};this.closeRegister=function(){_self.isRegisterOpened=false;};}]);;angular.module('tasteatlas').component('taRegularLoginMobile',{templateUrl:'/content/scripts/app/components/general/login-mobile/ta-regular-login-mobile.html',controller:'taRegularLoginMobileController'}).controller("taRegularLoginMobileController",["AccountService","UserLocationFactory",function(AccountService,UserLocationFactory){var _self=this;this.isSubmitting=false;this.isPasswordVisible=false;this.errorMessage='';this.password='';this.email='';this.login=function(){_self.isSubmitting=true;_self.errorMessage='';AccountService.login({Email:_self.email,Password:_self.password}).then(function(response){_self.isSubmitting=false;if(response.success===true){UserLocationFactory.clearCountryCookie();window.location.reload();}
else{_self.errorMessage=response.message;}}).catch(function(response){_self.isSubmitting=false;if(response.data.success===false){_self.errorMessage=response.data.message;}});};this.passwordVisibilityHandler=()=>{_self.isPasswordVisible=!_self.isPasswordVisible;}}]);;angular.module('tasteatlas').component('taRegularRegisterMobile',{templateUrl:'/content/scripts/app/components/general/login-mobile/ta-regular-register-mobile.html',controller:'taRegularRegisterMobileController'}).controller("taRegularRegisterMobileController",["AccountService",function(AccountService){var _self=this;this.isSubmitting=false;this.serverError=false;this.tokenIsReady=false;this.serverErrorMessage="";this.isPasswordVisible=false;this.$onInit=function(){turnstile.ready(function(){turnstile.render('#turnstileWidgetMobile',{sitekey:'0x4AAAAAAAMjvcS1XT4GI3th',theme:'light',datasize:'compact',appearance:'execute',refreshexpired:'manual',callback:function(token){_self.token=token;if(token){_self.tokenIsReady=true;}
else{_self.tokenIsReady=false;}},});});};this.register=function(registerForm){_self.serverError=false;if(registerForm.$invalid)
return;_self.isSubmitting=true;AccountService.register({Email:_self.email,Password:_self.password,FirstName:_self.firstName,LastName:_self.lastName,token:_self.token}).then(function(response){_self.isSubmitting=false;if(response.success)
window.location.reload();else{_self.serverError=true;_self.serverErrorMessage=response.errors[0];}}).catch(function(response){_self.serverError=true;_self.serverErrorMessage="";});};this.passwordVisibilityHandler=()=>{_self.isPasswordVisible=!_self.isPasswordVisible;}}]);;angular.module('tasteatlas').component('taSocialLoginMobile',{templateUrl:'/content/scripts/app/components/general/login-mobile/ta-social-login-mobile.html',controller:'taSocialLoginMobileController'}).controller("taSocialLoginMobileController",["$scope","UserLocationFactory",function($scope,UserLocationFactory){var _self=this;this.redirect='';this.$onInit=function(){_self.redirect=window.location.pathname+window.location.search;};this.submitFbLogin=function(){UserLocationFactory.clearCountryCookie();var fb=angular.element(document.getElementById("fb_login_form_social_login"));fb.submit();};this.submitGoogleLogin=function(){UserLocationFactory.clearCountryCookie();var google=angular.element(document.getElementById("fb_google_form_social_login"));google.submit();};}]);;angular.module('tasteatlas').component('taSocialRegisterMobile',{templateUrl:'/content/scripts/app/components/general/login-mobile/ta-social-register-mobile.html',controller:'taSocialRegisterMobileController'}).controller("taSocialRegisterMobileController",["$scope","UserLocationFactory",function($scope,UserLocationFactory){var _self=this;this.redirect='';this.$onInit=function(){_self.redirect=window.location.pathname;};this.submitFbRegister=function(){UserLocationFactory.clearCountryCookie();var fb=angular.element(document.getElementById("fb_login_form_social_register"));fb.submit();};this.submitGoogleRegister=function(){UserLocationFactory.clearCountryCookie();var google=angular.element(document.getElementById("fb_google_form_social_register"));google.submit();};}]);;angular.module('tasteatlas').component('taSharingBoxDesktop',{templateUrl:'/content/scripts/app/components/general/sharing/ta-sharing-box-desktop.html',controller:'taSharingBoxDesktopController'}).controller("taSharingBoxDesktopController",["SocialSharingService","SharingSubjectService",function(SocialSharingService,SharingSubjectService){var _self=this;this.isShareMoreOpen=false;this.isShareBtnVisible=true;this.link=null;this.urlRoot=window.location.protocol+"//"+window.location.host+"/";this.openShareMore=function(){_self.isShareMoreOpened=true;_self.isShareBtnVisible=false;};this.closeShareMore=function(){_self.isShareMoreOpened=false;_self.isShareBtnVisible=true;};this.fbCounter=null;this.iscounterLoaded=false;this.$onInit=function(){SharingSubjectService.subscribe(_sharingDesktopObserver);};this.$onDestroy=function(){SharingSubjectService.unsubscribe(_sharingDesktopObserver);};var _sharingDesktopObserver=function(state){_self.sharingDetails=state.payload;_self.link=state.payload.link?_self.urlRoot+state.payload.link:window.location.href;};this.fbShare=function(){SocialSharingService.fbShare(_self.link,_self.sharingDetails.name);};this.pinterestShare=function(){SocialSharingService.pinterestShare(_self.link,_self.sharingDetails.name,_self.sharingDetails.image);};this.twitterShare=function(){SocialSharingService.twitterShare(_self.link,_self.sharingDetails.name);};this.mailShare=function(){SocialSharingService.mailShare(_self.link,_self.sharingDetails.name);};this.linkedInShare=function(){SocialSharingService.linkedInShare(_self.link,_self.sharingDetails.name);};}]);;angular.module('tasteatlas').component('taSharingBoxMobile',{templateUrl:'/content/scripts/app/components/general/sharing/ta-sharing-box-mobile.html',controller:'taSharingBoxMobileController'}).controller("taSharingBoxMobileController",["SocialSharingService","SharingSubjectService","SharingSubjectAltService","$timeout",function(SocialSharingService,SharingSubjectService,SharingSubjectAltService,$timeout){var _self=this;this.fbCounter=null;this.isShareMoreOpen=false;this.notificationMessage;this.isDialogVisible=false;this.openShareMore=function(){this.isShareMoreOpened=true;};this.link=null;this.urlRoot=window.location.protocol+"//"+window.location.host+"/";this.closeShareMore=function(){this.isShareMoreOpened=false;};this.$onInit=function(){SharingSubjectService.subscribe(_sharingMobileObserver);};this.$onDestroy=function(){SharingSubjectService.unsubscribe(_sharingMobileObserver);};var _sharingMobileObserver=function(state){_self.sharingDetails=state.payload;_self.link=state.payload.link?_self.urlRoot+state.payload.link:window.location.href;};this.fbShare=function(){SocialSharingService.fbShare(_self.link,_self.sharingDetails.name);};this.fbMessengerShare=function(){SocialSharingService.fbMessengerShare(_self.link,_self.sharingDetails.name);};this.whatsappShare=function(){SocialSharingService.whatsappShare(_self.link,_self.sharingDetails.name);};this.pinterestShare=function(){SocialSharingService.pinterestShare(_self.link,_self.sharingDetails.name,_self.sharingDetails.Image);};this.viberShare=function(){SocialSharingService.viberShare(_self.link,_self.sharingDetails.name);};this.twitterShare=function(){SocialSharingService.twitterShare(_self.link,_self.sharingDetails.name);};this.mailShare=function(){SocialSharingService.mailShare(_self.link,_self.sharingDetails.name);};this.gplusShare=function(){SocialSharingService.gplusShare(_self.link,_self.sharingDetails.name);};this.linkedInShare=function(){SocialSharingService.linkedInShare(_self.link,_self.sharingDetails.name);};this.copyLink=function($event){var element=$event.currentTarget;var link=window.location.href;SocialSharingService.copyLink(element,link);_self.notificationMessage="Link copied to clipboard";_self.showDialog();};this.showDialog=function(){_self.isDialogVisible=true;$timeout(function(){_self.isDialogVisible=false;},2000);};}]);;angular.module('tasteatlas').component('taTutorialDesktop',{templateUrl:'/content/scripts/app/components/general/tutorial/ta-tutorial-desktop.html',controller:'taTutorialDesktopController'}).controller("taTutorialDesktopController",['TutorialService','CommunicationService',function(TutorialService,CommunicationService){var _self=this;this.isCompleted=false;this.toggle=false;this.items=TutorialService.items;this.$onInit=function(){TutorialService.onTutorialAction(tutorialActionReducer);if(TutorialService.hasCookies()===true){_self.isCompleted=true;_self.toggle=false;}};function tutorialActionReducer(options){switch(options.name){case TutorialService.TUTORIAL_COMPLETED:_self.isCompleted=true;_self.toggle=false;TutorialService.putTutorialCookie();break;case TutorialService.TUTORIAL_HIDE:_self.toggle=false;if(_self.isCompleted===true)
_self.toggle=false;break;case TutorialService.TUTORIAL_SHOW:_self.toggle=true;if(_self.isCompleted===true)
_self.toggle=false;break;default:_self.toggle=false;break;}}
this.endTutorial=function(){TutorialService.tutorialAction({name:TutorialService.TUTORIAL_COMPLETED});};this.selectItem=function(item){if(!item)
return;_self.toggle=false;var prepared=CommunicationService.prepareItemForSearchAction(item);CommunicationService.doSearch({item:prepared});};}]);;angular.module('tasteatlas').component('taTutorialMobile',{templateUrl:'/content/scripts/app/components/general/tutorial/ta-tutorial-mobile.html',controller:'taTutorialMobileController'}).controller("taTutorialMobileController",['TutorialService','CommunicationService',function(TutorialService,CommunicationService){var _self=this;this.isCompleted=false;this.toggle=false;this.items=TutorialService.items;this.$onInit=function(){TutorialService.onTutorialAction(tutorialActionReducer);if(TutorialService.hasCookies()===true){_self.isCompleted=true;_self.toggle=false;}};function tutorialActionReducer(options){switch(options.name){case TutorialService.TUTORIAL_COMPLETED:_self.toggle=false;break;case TutorialService.TUTORIAL_HIDE:_self.toggle=false;break;case TutorialService.TUTORIAL_SHOW:_self.toggle=true;break;default:console.log('An error occured');}}
this.selectItem=function(item){if(!item)
return;_self.toggle=false;var prepared=CommunicationService.prepareItemForSearchAction(item);CommunicationService.doSearch({item:prepared});};}]);;angular.module('tasteatlas').component('taHomeDesktopList',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-list.html',controller:'taHomeDesktopListController',bindings:{page:'<'}}).controller("taHomeDesktopListController",["constants","MainHelper","ResultListSubjectService","MapOpenerService",function(constants,MainHelper,ResultListSubjectService,MapOpenerService){var _self=this;this.constants=constants;this.results={};this.current='';this.isLoading=false;this.isLoaded=false;this.isInitialSearch=true;this.title="";this.isMapOpen=false;this.currentState={};this.$onInit=function(){_self.currentState=ResultListSubjectService.getCurrentState();_desktopListObserver(_self.currentState);ResultListSubjectService.subscribe(_desktopListObserver);MapOpenerService.subscribe(function(state){_self.isMapOpen=state.isOpen;});_self.isMapOpen=MapOpenerService.getCurrentState().isOpen;};this.$onDestroy=function(){ResultListSubjectService.unsubscribe(_desktopListObserver);};var _desktopListObserver=function(options){_self.isLoading=true;switch(options.name){case ResultListSubjectService.CLEAR_DATA:break;case ResultListSubjectService.INITIAL_SEARCH:_self.isInitialSearch=true;break;case ResultListSubjectService.SEARCH_RID:_self.initialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.regionBasicData);if(_self.page){_self.switchView(_self.page);}
_self.current='RegionRegular';_self.isInitialSearch=false;if(_self.results){_self.imageData=MainHelper.createImageFilter(_self.results.RegionId,180,90,'transparent','#fff');}
_self.isLoaded=true;break;case ResultListSubjectService.SEARCH_RID_DGID:_self.isInitialSearch=false;_self.current='Loading';console.log(window.ta.dishGroupbasicData);_self.results=angular.fromJson(window.ta.dishGroupbasicData);if(_self.page){_self.switchView(_self.page);}
_self.current='DishRegion';if(_self.results){_self.title=getGroupInRegionTitle();_self.imageData=MainHelper.createImageFilter(_self.results.Region.RegionId,180,90,'transparent','#fff');}
_self.isLoaded=true;break;case ResultListSubjectService.SEARCH_RID_IGID:_self.isInitialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.ingredientGroupbasicData);_self.current='IngredientRegion';if(_self.results){_self.title=getGroupInRegionTitle();_self.imageData=MainHelper.createImageFilter(_self.results.Region.RegionId,180,90,'transparent','#fff');}
_self.isLoaded=true;break;case ResultListSubjectService.SEARCH_DGID:_self.isInitialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.dishGroupbasicData);if(_self.page){_self.switchView(_self.page);}
_self.current='DishCategory';_self.isLoaded=true;break;case ResultListSubjectService.SEARCH_IGID:_self.isInitialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.ingredientGroupbasicData);_self.current='IngredientCategory';break;case ResultListSubjectService.SEARCH_TAG:_self.isInitialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.tagDataFirstPage);_self.tagName=options.tagName;_self.current='Tags';_self.isLoaded=true;break;}};this.switchView=function(switchTo){var urlLink='';if(_self.results.EntityGroup&&_self.results.Region){urlLink=_self.results.Region.UrlLink.toLowerCase()+'/'+_self.results.EntityGroup.UrlLink.toLowerCase();}
else{urlLink=_self.results.UrlLink.toLowerCase();}
if(switchTo==='viewallwheretoeat'){_self.viewAllWhereToEat=true;history.pushState({},null,urlLink+"/restaurants");}
else if(switchTo==='searchresults'){_self.viewAllWhereToEat=false;history.pushState({},null,urlLink);}};function getGroupInRegionTitle(){var entity=_self.results.EntityGroup;var region=_self.results.Region;if(entity&&entity.Plural&&region){if(region.Adjective){return region.Adjective+' '+entity.Plural;}
return entity.Plural+' in '+region.Name;}};}]);;angular.module('tasteatlas').component('taHomeDesktopLoginButton',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-login-button.html',controller:'taHomeDesktopLoginButtonController'}).controller("taHomeDesktopLoginButtonController",["$scope","LoginService","UserSubjectService","AccountService","UserCacheService",function($scope,LoginService,UserSubjectService,AccountService,UserCacheService){var _self=this;this.me={};this.isLoginView=true;this.isLoginProcess=false;this.isDropdownOpen=false;this.isSignedIn=false;this.userFirstLetter='';this.hasProfilePicture=false;var header=document.getElementById('header-id');this.isInAnonymousRole=UserSubjectService.isInAnonymousRole;this.$onInit=function(){LoginService.subscribe(_self.loginProcessStatus);_self.me=UserSubjectService.getUser();UserSubjectService.subscribe(_userDesktopLoginButton);};var _userDesktopLoginButton=function(){_self.me=UserSubjectService.getUser();if(!_self.isInAnonymousRole()){_self.isSignedIn=true;_self.userFirstLetter=_self.me.firstname.charAt(0);}};this.isLoginOpened=false;this.openLogin=function(){_self.isLoginProcess=true;_self.isLoginView=true;header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});};this.closeLogin=function(){_self.isLoginProcess=false;_self.isRegisterView=false;_self.isLoginView=true;header.classList.remove('header-top');document.querySelector('body').classList.remove('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});};this.isRegisterView=false;this.openRegister=function(){_self.isRegisterView=true;_self.isLoginView=false;};this.closeRegister=function(){_self.isRegisterView=false;_self.isLoginView=true;};this.isLoginProcess=false;this.loginProcessStatus=function(LoginStatus){_self.isLoginProcess=LoginStatus.isLoginProcess;if(_self.isLoginProcess){header.classList.add('header-top');}else{header.classList.remove('header-top');}};this.toggleDropdown=function(event){if(event){_self.isDropdownOpen=!_self.isDropdownOpen
return}
if(event!==null){_self.isDropdownOpen=false}};_self.signOut=signOut;function signOut(){AccountService.signOut().then(function(success){UserCacheService.clearStorageByKey('myLists');UserCacheService.clearStorageByKey('gameQuizPublicId');UserCacheService.clearStorageByKey('quizAnonymousUserId');location.reload();}).catch(function(err){UserCacheService.clearStorageByKey('myLists');UserCacheService.clearStorageByKey('gameQuizPublicId');UserCacheService.clearStorageByKey('quizAnonymousUserId');location.reload();console.log(err);});}
$scope.$on('$destroy',function(){LoginService.unsubscribe(_self.loginProcessStatus);});}]);;angular.module('tasteatlas').component('taHomeDesktopLogin',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-login.html',controller:'taHomeDesktopLoginController'}).controller("taHomeDesktopLoginController",["$scope","$http","DesktopInteractionService","AccountService",function($scope,$http,DesktopInteractionService,AccountService){var _self=this;$scope.submitFbLogin=submitFbLogin;$scope.submitGoogleLogin=submitGoogleLogin;$scope.loginRegular=loginRegular;$scope.isSubmitting=false;$scope.errorMessage='';$scope.openRegistration=openRegistration;$scope.returnUrl='';this.$onInit=function(){$scope.returnUrl=window.location.pathname;};function submitFbLogin(){document.getElementById("fb_login_form_home_login").submit();}
function submitGoogleLogin(){document.getElementById("fb_google_form_home_login").submit();}
function loginRegular(){_self.isSubmitting=true;_self.errorMessage='';AccountService.login({Email:_self.email,Password:_self.password}).then(function(response){_self.isSubmitting=false;if(response.success===true)
window.location.reload();}).catch(function(response){_self.isSubmitting=false;if(response.status===400){if(response.data.code==='invalid_data'){_self.errorMessage='Invalid email or password';}
else if(response.data.code==='invalid_model'){_self.errorMessage='Invalid email format';}
else if(response.data.code==='requires_verification'){_self.errorMessage='Account requires verification';}
else if(response.data.code==='locked_out'){_self.errorMessage='This account is locked out';}}});}
function openRegistration(){DesktopInteractionService.openRegistrationPopup();}}]);;angular.module('tasteatlas').component('taHomeDesktopMain',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-main.html',controller:'taHomeDesktopMainController',bindings:{entityId:'<',entityName:'<',entityType:'<',entityId2:'<',page:'<'}}).controller("taHomeDesktopMainController",["$scope","ResultMapSubjectService","ResultListSubjectService","CommunicationService","MainHelper","ItemTypes","MapOpenerService",function($scope,ResultMapSubjectService,ResultListSubjectService,CommunicationService,MainHelper,ItemTypes,MapOpenerService){var _self=this;this.itemTypes=ItemTypes;this.isMapOpen=false;this.isMapOpenedOnce=false;this.$onInit=function(){MapOpenerService.subscribe(_mapOpenerObserver_);if(_self.page==="map"){MapOpenerService.dispatch({isOpen:true,isOpenedOnce:true,page:_self.page});}
angular.element(document).ready(function(){$scope.body=angular.element(document.getElementsByTagName('body'));$scope.body.addClass('c-home-page');var footer=angular.element(document.getElementById('footer'));footer.addClass('js-hide');});_determineAction();loadOnPopStateHandler();var prepared=CommunicationService.prepareItemForSearchAction({id:_self.entityId,name:_self.entityName,type:_self.entityType,regionId:_self.entityId2});history.replaceState(prepared,"test",window.location.href);};function _mapOpenerObserver_(state){_self.isMapOpen=state.isOpen;_self.isMapOpenedOnce=state.isOpenedOnce;_self.page=state.page;loadOnPopStateHandler();}
function _determineAction(){var currentPathName=window.location.pathname;if(currentPathName.endsWith('/')){currentPathName=currentPathName.slice(0,-1);}
if(currentPathName===CommunicationService.SEARCH_URL){_self.isMapOpen=true;_self.isMapOpenedOnce=true;MapOpenerService.dispatch({isOpen:true,isOpenedOnce:true,page:_self.page});ResultMapSubjectService.dispatch({name:ResultMapSubjectService.INITIAL_SEARCH});return;}
var orderby=MainHelper.findOrderByFromParams();if(_self.entityType!==null&&_self.entityId!==null){if(_self.entityType===_self.itemTypes.Region){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID,regionId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID,regionId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.DishGroup&&_self.entityId2===null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_DGID,dishGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_DGID,dishGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.IngredientGroup&&_self.entityId2===null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_IGID,ingredientGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_IGID,ingredientGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.DishGroup&&_self.entityId2!==null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_DGID,regionId:_self.entityId2,dishGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_DGID,regionId:_self.entityId2,dishGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.IngredientGroup&&_self.entityId2!==null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_IGID,regionId:_self.entityId2,ingredientGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_IGID,regionId:_self.entityId2,ingredientGroupId:_self.entityId,orderBy:orderby});}
else if(_self.entityType==='Tags'){ResultMapSubjectService.dispatch({name:ResultListSubjectService.SEARCH_TAG,tagName:_self.entityName});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_TAG,tagName:_self.entityName,orderBy:orderby});}}}
function loadOnPopStateHandler(){if(_self.isMapOpen){window.onpopstate=function(){if(!history.state){window.location.reload();_determineAction();}
else{var urlLink=window.location.pathname;let url=window.location.replace(urlLink);history.pushState(url);}};}
else{window.onpopstate=null;}}}]);;angular.module('tasteatlas').component('taHomeDesktopRegistration',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-registration.html',controller:'taHomeDesktopRegistrationController'}).controller("taHomeDesktopRegistrationController",["$scope","AccountService",function($scope,AccountService){var _self=this;$scope.register=register;$scope.isSubmitting=false;_self.$onInit=function(){angular.element(document).ready(function(){$scope.registrationBox=angular.element(document.getElementsByClassName('registration-box'));$scope.registrationBox.perfectScrollbar();});};function register(){_self.isSubmitting=true;_self.errorMessage='';AccountService.register({Email:_self.email,Password:_self.password,ConfirmPassword:_self.password,FirstName:_self.firstName,LastName:_self.lastName}).then(function(response){console.log(response);_self.isSubmitting=false;if(response.success===true)
window.location.reload();}).catch(function(response){console.log(response);_self.isSubmitting=false;_self.errorMessage=response.data.message;});}}]);;angular.module('tasteatlas').directive('taHomeDesktopSearchButton',["DesktopInteractionService","CommunicationService","TutorialService","ChangeLabelSubjectService",function(DesktopInteractionService,CommunicationService,TutorialService,ChangeLabelSubjectService){return{restrict:'A',templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-search-button.html',link:function(scope,element){if(location.pathname!==CommunicationService.SEARCH_URL){scope.placeholder='Search locations or food';}
ChangeLabelSubjectService.subscribe(function(options){switch(options.name){case ChangeLabelSubjectService.CHANGE_LABEL:scope.placeholder='Search: eg. '+options.placeholder;break;default:scope.placeholder='Italy';}});element.bind('click',function(e){e.preventDefault();DesktopInteractionService.openDesktopSearch();TutorialService.tutorialAction({name:TutorialService.TUTORIAL_SHOW});});}};}]);;angular.module('tasteatlas').component('taHomeDesktopSearch',{templateUrl:'/content/scripts/app/components/home-desktop/ta-home-desktop-search.html',controller:'taHomeDesktopSearchController'}).controller("taHomeDesktopSearchController",["$element","constants","$q","$scope","$timeout","SearchService","CommunicationService","MainMapService","DesktopInteractionService","TutorialService","ResultListSubjectService","ChangeLabelSubjectService","ItemTypes","ItemTypeLabels",function($element,constants,$q,$scope,$timeout,SearchService,CommunicationService,MainMapService,DesktopInteractionService,TutorialService,ResultListSubjectService,ChangeLabelSubjectService,ItemTypes,ItemTypeLabels){var _self=this;this.constants=constants;this.FIRST_SPLICE_LEVEL=5;this.SECOND_SPLICE_LEVEL=10;this.CITY_CATEGORY='City';this.REGION_CATEGORY='Region';this.REGION_COUNTRY='Country';this.itemTypes=ItemTypes;this.itemTypeLabels=ItemTypeLabels;this.query='';this.onlyRecipes=false;this.placeholder='';this.autocompleteItems={};this.showSuggestion=false;this.suggestionItem={};this.isShownToggle=false;this.isShown=true;this.isJohnSnow=false;this.isLoadingAutocompleteResults=false;this.autocompleteSuggestionCanceler=null;this.$onInit=function(){$element.on('mouseenter',function(e){MainMapService.deletePopupClusterItems();MainMapService.deleteRegionListPopup();});ChangeLabelSubjectService.subscribe(_desktopSearchObserver);angular.element(document).ready(function(){_self.inputSearchContainer=angular.element(document.getElementsByClassName('input-container'));_self.inputSearch=_self.inputSearchContainer.find('input');_self.inputSearchList=angular.element(document.getElementsByClassName('search-list'));_self.searchIcon=angular.element(document.getElementsByClassName('icon--search-header'));_self.inputSearchList.addClass('js-hide');_self.inputSearchList.perfectScrollbar();});_self.query='';};var _desktopSearchObserver=function(options){switch(options.name){case ChangeLabelSubjectService.CHANGE_LABEL:_self.placeholder=options.placeholder;break;default:_self.placeholder='Italy';}};this.onInputClick=function(){_self.searchIcon.removeClass('js-hide');_self.inputSearch.focus();if(_self.query!==''){_self.onInputSearch(_self.query);}};this.onInputDelete=function(){_self.query='';_self.autocompleteItems=[];_self.inputSearchList.addClass('js-hide');DesktopInteractionService.closeDesktopSearch();this.showSuggestion=false;_self.isJohnSnow=false;};this.onInputEnter=function($event){if($event.keyCode!==13||_self.query===''||_self.isLoadingAutocompleteResults===true)
return;_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(_self.query)];stopPreviousAutocompleteSuggestion();$q.all(promise).then(function(success){var autocompleteResults=success[0];if(_self.query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.Sections.length===0){mainAutoCompleteSuggestion(_self.query);}
else{var itemForSearch={};if(autocompleteResults.Sections.length>0&&autocompleteResults.Items.length===0){itemForSearch=autocompleteResults.Sections[0].Items[0];}else{itemForSearch=autocompleteResults.Items[0];}
var item=CommunicationService.mapAutocompleteItem(itemForSearch);_self.onItemSelect(item);}
_self.inputSearch.blur();_self.isLoadingAutocompleteResults=false;_self.inputSearchList.removeClass('js-hide');});};this.onKeyDown=function(event){if(event.which===40){angular.element('.search-item').not('.ng-hide').first().focus();}};this.onInputSearch=function(query){if(query===''){TutorialService.tutorialAction({name:TutorialService.TUTORIAL_SHOW});}
else{TutorialService.tutorialAction({name:TutorialService.TUTORIAL_HIDE});}
_self.inputSearchList.removeClass('js-hide');_self.suggestionItem={};_self.autocompleteItems=[];_self.showSuggestion=false;_self.isJohnSnow=false;if(query.length<2){return;}
_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(query)];stopPreviousAutocompleteSuggestion();$q.all(promise).then(function(success){var autocompleteResults=success[0];_self.autocompleteItems=CommunicationService.mapAutocompleteResults(autocompleteResults);_self.isLoadingAutocompleteResults=false;var isLessThanFive=(autocompleteResults.Items.length+autocompleteResults.CustomItems.length)<5;var isEmpty=query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.CustomItems.length===0;if(isEmpty||isLessThanFive){return getSimilarResults(query).then(function(similarResults){_self.autocompleteItems.Items=_self.autocompleteItems.Items.concat(similarResults);});}});};$scope.toggleSearchOnlyRecipes=function(queryRecipes){_self.onlyRecipes=!_self.onlyRecipes;return _self.onInputSearch(queryRecipes);}
function autocomplete(query){return SearchService.mainAutocomplete({query:query,onlyRecipes:_self.onlyRecipes});}
function getSimilarResults(query){return SearchService.getSimilar({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){return success;});}
function mainAutoCompleteSuggestion(query){_self.autocompleteSuggestionCanceler=$q.defer();SearchService.mainAutoCompleteSuggestion({query:query}).then(function(success){var result=success;if(result.length>0&&_self.autocompleteItems.length===0){_self.showSuggestion=true;_self.isJohnSnow=false;_self.suggestionItem=result[0];}
if(result.length===0&&_self.autocompleteItems.length===0){_self.isJohnSnow=true;_self.showSuggestion=false;}});}
this.onItemSelect=function(item){if(!item)
return;var prepared=CommunicationService.prepareItemForSearchAction(item);_self.autocompleteItems=[];CommunicationService.doSearch({item:prepared});_self.placeholder=prepared.label;_self.query='';$timeout(function(){_self.inputSearchList.addClass('js-hide');});};this.getItemName=function(item){if(item.OtherName){return item.Name+" ("+item.OtherName+")";}
return item.Name;};this.isEmblem=function(entityType){return[ItemTypes.Undefined,ItemTypes.Region,ItemTypes.AutocompleteEntity,ItemTypes.DishGroupInRegion,ItemTypes.IngredientGroupInRegion].includes(entityType);};function stopPreviousAutocompleteSuggestion(){if(_self.autocompleteSuggestionCanceler){_self.autocompleteSuggestionCanceler.resolve();_self.autocompleteSuggestionCanceler=null;}}}]);;angular.module('tasteatlas').directive('taTriggerSearch',['MobileInteractionService','TutorialService','CommunicationService',function(MobileInteractionService,TutorialService,CommunicationService){return{restrict:'A',link:function(scope,element){element.bind('click',function(){MobileInteractionService.triggerSearchInput();TutorialService.tutorialAction({name:TutorialService.TUTORIAL_SHOW});});}};}]);;angular.module('tasteatlas').component('taHomeLoader',{templateUrl:'/content/scripts/app/components/home-page/ta-home-loader.html',controller:'taHomeLoaderController'}).controller("taHomeLoaderController",["$scope",function($scope){}]);;angular.module('tasteatlas').component('taHomeMain',{templateUrl:'/content/scripts/app/components/home-page/ta-home-main.html',controller:'taHomeMainController',bindings:{entityId:'<',entityName:'<',entityType:'<',entityId2:'<',page:'<'}}).controller("taHomeMainController",["CommunicationService","ResultMapSubjectService","ResultListSubjectService","MainHelper","ItemTypes","MapOpenerService",function(CommunicationService,ResultMapSubjectService,ResultListSubjectService,MainHelper,ItemTypes,MapOpenerService){var _self=this;this.itemTypes=ItemTypes;this.isMapOpen=false;this.isMapOpenedOnce=false;this.$onInit=function(){MapOpenerService.subscribe(_mapOpenerObserver_);if(_self.page==="map"){MapOpenerService.dispatch({isOpen:true,isOpenedOnce:true,page:_self.page});}
var body=angular.element(document.getElementsByTagName('body'));body.addClass('c-home-page');if(location.pathname!=='/search'){var overlay=angular.element('.main-map__trigger');overlay.addClass('js-hide');}
_determineAction();loadOnPopStateHandler();_self.prepared=CommunicationService.prepareItemForSearchAction({id:_self.entityId,name:_self.entityName,type:_self.entityType,regionId:_self.entityId2});history.replaceState(_self.prepared,"",window.location.href);};function _mapOpenerObserver_(state){_self.isMapOpen=state.isOpen;_self.isMapOpenedOnce=state.isOpenedOnce;_self.page=state.page;loadOnPopStateHandler();}
function _determineAction(){var currentPathName=window.location.pathname;if(currentPathName.endsWith('/')){currentPathName=currentPathName.slice(0,-1);}
if(currentPathName===CommunicationService.SEARCH_URL){_self.isMapOpen=true;_self.isMapOpenedOnce=true;MapOpenerService.dispatch({isOpen:true,isOpenedOnce:true,page:_self.page});ResultMapSubjectService.dispatch({name:ResultMapSubjectService.INITIAL_SEARCH,regionId:null});return;}
var orderby=MainHelper.findOrderByFromParams();if(_self.entityType!==null&&_self.entityId!==null){if(_self.entityType===_self.itemTypes.Region){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID,regionId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID,regionId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.DishGroup&&_self.entityId2===null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_DGID,dishGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_DGID,dishGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.IngredientGroup&&_self.entityId2===null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_IGID,ingredientGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_IGID,ingredientGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.DishGroup&&_self.entityId2!==null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_DGID,regionId:_self.entityId2,dishGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_DGID,regionId:_self.entityId2,dishGroupId:_self.entityId,orderBy:orderby});}else if(_self.entityType===_self.itemTypes.IngredientGroup&&_self.entityId2!==null){ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_IGID,regionId:_self.entityId2,ingredientGroupId:_self.entityId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_IGID,regionId:_self.entityId2,ingredientGroupId:_self.entityId,orderBy:orderby});}
else if(_self.entityType==='Tags'){ResultMapSubjectService.dispatch({name:ResultListSubjectService.SEARCH_TAG,tagName:_self.entityName});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_TAG,tagName:_self.entityName,orderBy:orderby});}}}
function loadOnPopStateHandler(){if(_self.isMapOpen){window.onpopstate=function(){if(!history.state){window.location.reload();_determineAction();}
else{var urlLink=window.location.pathname;let url=window.location.replace(urlLink);history.pushState(url);}};}
else{window.onpopstate=null;}}}]);;angular.module('tasteatlas').component('taHomeSearchList',{templateUrl:'/content/scripts/app/components/home-page/ta-home-search-list.html',controller:'taHomeSearchListController',bindings:{page:'<'}}).controller("taHomeSearchListController",["MainHelper","constants","MobileInteractionService",'ResultListSubjectService','MapOpenerService',function(MainHelper,constants,MobileInteractionService,ResultListSubjectService,MapOpenerService){var _self=this;this.constants=constants;this.isVisible=true;_self.results={};_self.isParentLoaded=false;_self.isParentLoading=false;_self.isLoaded=false;_self.parent={};_self.current='';_self.isLoading=false;_self.isInitialSearch=true;_self.isMapOpen=false;_self.isDrawerOpened=false;_self.imageData=null;_self.viewAllWhereToEat=false;this.toggleDrawer=function(){MobileInteractionService.toggleResults();};this.$onInit=function(){if(location.pathname!=='/map'){var searchDetail=angular.element(document.getElementsByClassName('search-details'));searchDetail.addClass('js-show');}
MapOpenerService.subscribe(function(state){_self.isMapOpen=state.isOpen;});_self.isMapOpen=MapOpenerService.getCurrentState().isOpen;var currentState=ResultListSubjectService.getCurrentState();_mobileListObserver(currentState);ResultListSubjectService.subscribe(_mobileListObserver);};this.$onDestroy=function(){ResultListSubjectService.unsubscribe(_mobileListObserver);};var _mobileListObserver=function(options){_self.isLoading=true;switch(options.name){case ResultListSubjectService.CLEAR_DATA:MobileInteractionService.triggerCloseSearchDetail();_self.isDrawerOpened=false;break;case ResultListSubjectService.INITIAL_SEARCH:_self.initialSearch=true;break;case ResultListSubjectService.SEARCH_RID:_self.initialSearch=false;_self.current='Loading';_self.results=angular.fromJson(window.ta.regionBasicData);_self.parent={};_self.isParentLoaded=false;if(_self.page){_self.switchView(_self.page);}
_self.current='RegionRegular';_self.isInitialSearch=false;if(_self.results){_self.imageData=MainHelper.createImageFilter(_self.results.RegionId,null,null,'transparent','#fff');}
_self.isLoaded=true;_self.isLoading=false;break;case ResultListSubjectService.SEARCH_RID_DGID:_self.isInitialSearch=false;_self.current='Loading';_self.parent={};_self.isParentLoaded=false;_self.results=angular.fromJson(window.ta.dishGroupbasicData);_self.current='DishRegion';if(_self.page){_self.switchView(_self.page);}
_self.isLoaded=true;_self.isLoading=false;break;case ResultListSubjectService.SEARCH_RID_IGID:_self.isInitialSearch=false;_self.current='Loading';_self.parent={};_self.isParentLoaded=false;_self.results=angular.fromJson(window.ta.ingredientGroupbasicData);_self.current='IngredientRegion';_self.isLoaded=true;_self.isLoading=false;break;case ResultListSubjectService.SEARCH_DGID:_self.isInitialSearch=false;_self.current='Loading';_self.parent={};_self.isParentLoaded=false;_self.results=angular.fromJson(window.ta.dishGroupbasicData);_self.current='DishCategory';if(_self.page){_self.switchView(_self.page);}
_self.isLoaded=true;_self.isLoading=false;break;case ResultListSubjectService.SEARCH_IGID:_self.isInitialSearch=false;_self.current='Loading';_self.parent={};_self.isParentLoaded=false;_self.results=angular.fromJson(window.ta.ingredientGroupbasicData);_self.current='IngredientCategory';_self.isLoaded=true;_self.isLoading=false;break;case ResultListSubjectService.SEARCH_TAG:_self.isInitialSearch=false;_self.current='Loading';_self.parent={};_self.isParentLoaded=false;_self.results=angular.fromJson(window.ta.tagDataFirstPage);_self.placeName=options.label;_self.current='Tags';_self.isLoaded=true;_self.isLoading=false;break;}};this.switchView=function(switchTo){var urlLink='';if(_self.results.EntityGroup&&_self.results.Region){urlLink=_self.results.Region.UrlLink.toLowerCase()+'/'+_self.results.EntityGroup.UrlLink.toLowerCase();}
else{urlLink=_self.results.UrlLink.toLowerCase();}
if(switchTo==='viewallwheretoeat'){_self.viewAllWhereToEat=true;history.pushState({},null,urlLink+"/restaurants");}
else if(switchTo==='searchresults'){_self.viewAllWhereToEat=false;history.pushState({},null,urlLink);}};this.isSearchPage=function(){return location.pathname==='/map';};}]);;angular.module('tasteatlas').component('taHomeSearchRecipe',{bindings:{isError:'<',suggestions:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/ta-home-search-recipe-mobile.html','mobile-fullscreen':'/content/scripts/app/components/home-page/ta-home-search-recipe-mobile-fullscreen.html','desktop':'/content/scripts/app/components/home-page/ta-home-search-recipe-desktop.html',};return templates[$attrs.template];},controller:'taHomeSearchRecipeController',}).controller("taHomeSearchRecipeController",["$timeout","RegionLevels","CommunicationService","constants","SearchService","$q","$scope","GeolocationService","RegionService","ItemTypes","ItemTypeLabels","RecentSearchService",function($timeout,RegionLevels,CommunicationService,constants,SearchService,$q,$scope,GeolocationService,RegionService,ItemTypes,ItemTypeLabels,RecentSearchService){var _self=this;this.constants=constants;this.showSearchResults=false;this.showSearchBar=true;this.query='';this.onlyRecipes=false;this.showNotFound=false;this.showCloseBtn=false;this.itemTypes=ItemTypes;this.itemTypeLabels=ItemTypeLabels;this.currentRegion=null;this.geolocationState=null;this.suggestionItem={};this.showSuggestion=false;this.isJohnSnow=false;this.nearbyRegions=[];this.$onInit=function(){_self.recentSearches=RecentSearchService.get();GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){return RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude});}).then(function(success){_self.currentRegion=success.data[0];_self.nearbyRegions=success.data.filter(function(item){return item.RegionLevel!==RegionLevels.Continent;});_self.geolocationState='GRANTED';});}else if(data==='PROMPT'){_self.geolocationState='PROMPT';}else if(data==='DENIED'){_self.geolocationState='DENIED';}});angular.element(document).ready(function(){_self.closeIcon=document.getElementById('search-close-icon-mobile');});};$scope.toggleSearchOnlyRecipes=function(queryRecipes){_self.onlyRecipes=!_self.onlyRecipes;return _self.onInputSearch(queryRecipes);}
this.goToNearMe=function(){window.open('near','_self');};this.onCurrentRegionClick=function(region){var item={type:4,regionId:region.Id,label:region.Name,url:region.UrlLink};CommunicationService.doSearch({item:item});};this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:8000}).then(function(data){if(data==='DENIED'){_self.locationState='DENIED';_self.isLoaded=true;return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.geolocationState='GRANTED';});});}});};this.handleGeolocationState=function(){GeolocationService.getLocation({timeout:3000}).then(function(data){if(data==='DENIED'){_self.geolocationState='DENIED';return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.nearbyRegions=success.data.filter(function(item){return item.RegionLevel!==RegionLevels.Continent;});_self.geolocationState='GRANTED';});});};this.toggleFullScreenSearch=function(){_self.query='';_self.autocompleteItems=[];_self.showSuggestion=false;_self.isJohnSnow=false;_self.showNotFound=false;_self.onlyRecipes=false;_self.showCloseBtn=true;_self.showSearchBar=!_self.showSearchBar;if(!_self.showSearchBar){$timeout(()=>{document.querySelector('#mobile-input-focused').focus();});document.body.style.overflow='hidden';}else{document.body.style.removeProperty('overflow');}};this.onInputClick=function(){this.showSearchResults=true;_self.showNotFound=false;_self.autocompleteItems=[];};this.onInputDelete=function(){_self.query='';_self.onlyRecipes=false;_self.showSearchResults=false;_self.autocompleteItems={Items:[],CustomItems:[]};_self.isJohnSnow=false;_self.showSuggestion=false;_self.showNotFound=false;_self.showCloseBtn=false;if(!_self.showSearchBar){document.querySelector('#mobile-input-focused').focus();}};this.onInputSearch=function(query){_self.suggestionItem={};_self.autocompleteItems={Items:[],CustomItems:[]};if(query.length==0){_self.onlyRecipes=false;}
if(query.length<2){return;}
_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(query)];_self.showSuggestion=false;_self.isJohnSnow=false;_self.showNotFound=false;$q.all(promise).then(function(success){var autocompleteResults=success[0];_self.autocompleteItems=CommunicationService.mapAutocompleteResults(autocompleteResults);_self.isLoadingAutocompleteResults=false;var isLessThanFive=(autocompleteResults.Items.length+autocompleteResults.CustomItems.length)<5;var isEmpty=query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.CustomItems.length===0;if(isEmpty||isLessThanFive){return getSimilarResults(query).then(function(similarResults){_self.autocompleteItems.Items=_self.autocompleteItems.Items.concat(similarResults);}).catch((err)=>{console.log(err);}).finally(function(){if(_self.autocompleteItems.CustomItems.length>0||_self.autocompleteItems.Items.length>0){_self.showSearchResults=true;}else{_self.showNotFound=true;}});}});};function autocomplete(query){return SearchService.mainAutocomplete({query:query,onlyRecipes:_self.onlyRecipes});}
function getSimilarResults(query){return SearchService.getSimilar({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){return success;});}
function mainAutoCompleteSuggestion(query){_self.autocompleteSuggestionCanceler=$q.defer();SearchService.mainAutoCompleteSuggestion({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){var result=success;if(result.length>0&&_self.autocompleteItems.length===0){_self.showSuggestion=true;_self.isJohnSnow=false;_self.suggestionItem=result[0];}
if(result.length===0&&_self.autocompleteItems.length===0){_self.isJohnSnow=true;_self.showSuggestion=false;}});}
this.onItemSelect=function(item){window.open(window.location.origin+"/"+item.UrlLink,'_self');};this.getItemName=function(item){if(item.OtherName){return item.Name+" ("+item.OtherName+")";}
return item.Name;};this.onKeyDown=function(event){if(event.which===40){angular.element('.item').not('.ng-hide').first().focus();}};this.isEmblem=function(entityType){return[ItemTypes.Undefined,ItemTypes.Region,ItemTypes.AutocompleteEntity,ItemTypes.DishGroupInRegion,ItemTypes.IngredientGroupInRegion].includes(entityType);};}]);;angular.module('tasteatlas').component('taHomeSearch',{templateUrl:'/content/scripts/app/components/home-page/ta-home-search.html',controller:'taHomeSearchController'}).controller("taHomeSearchController",["$element","constants","$window","$q","$scope","SearchService","CommunicationService","MainMapService","MobileInteractionService","TutorialService","GeolocationService","RegionService","ChangeLabelSubjectService","RecentSearchService","ItemTypes","RegionLevels","ItemTypeLabels",function($element,constants,$window,$q,$scope,SearchService,CommunicationService,MainMapService,MobileInteractionService,TutorialService,GeolocationService,RegionService,ChangeLabelSubjectService,RecentSearchService,ItemTypes,RegionLevels,ItemTypeLabels){var _self=this;this.constants=constants;this.currentRegion=null;this.geolocationState=null;this.query='';this.onlyRecipes=false;this.placeholder='';this.autocompleteItems={};this.itemTypes=ItemTypes;this.itemTypeLabels=ItemTypeLabels;this.showSuggestion=false;this.suggestionItem={};this.onInputClick=onInputClick;this.onInputEnter=onInputEnter;this.onInputSearch=onInputSearch;this.onItemSelect=onItemSelect;this.onInputClose=onInputClose;this.onInputDelete=onInputDelete;this.getItemName=getItemName;this.isEmblem=isEmblem;this.isJohnSnow=false;this.showNotFound=false;this.isLoadingAutocompleteResults=false;this.autocompleteSuggestionCanceler=null;this.nearbyRegions=[];this.recentSearches=[];var _mobileSearchObserver=function(options){switch(options.name){case ChangeLabelSubjectService.CHANGE_LABEL:_self.placeholder=options.placeholder;break;default:_self.placeholder='Italy';}};this.$onInit=function(){_self.recentSearches=RecentSearchService.get();$element.on('mouseenter',function(e){MainMapService.deletePopupClusterItems();MainMapService.deleteRegionListPopup();});ChangeLabelSubjectService.subscribe(_mobileSearchObserver);GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){return RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude});}).then(function(success){_self.currentRegion=success.data[0];_self.nearbyRegions=success.data.filter(function(item){return item.RegionLevel!==RegionLevels.Continent;});_self.geolocationState='GRANTED';});}else if(data==='PROMPT'){_self.geolocationState='PROMPT';}else if(data==='DENIED'){_self.geolocationState='DENIED';}});angular.element(document).ready(function(){_self.body=angular.element(document.getElementsByTagName('body'));_self.inputSearchContainer=angular.element(document.getElementsByClassName('input-container'));_self.inputSearch=_self.inputSearchContainer.find('input');_self.inputSearchList=angular.element(document.getElementsByClassName('search-list'));});};$scope.toggleSearchOnlyRecipes=function(queryRecipes){_self.onlyRecipes=!_self.onlyRecipes;return _self.onInputSearch(queryRecipes);}
this.handleGeolocationState=function(){GeolocationService.getLocation().then(function(data){if(data==='DENIED'){_self.geolocationState='DENIED';return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.nearbyRegions=success.data.filter(function(item){return item.RegionLevel!==RegionLevels.Continent;});_self.geolocationState='GRANTED';});});};this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:8000}).then(function(data){if(data==='DENIED'){_self.locationState='DENIED';_self.isLoaded=true;return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.geolocationState='GRANTED';});});}});};this.goToNearMe=function(){window.open('near','_self');};this.onCurrentRegionClick=function(region){var item={type:4,regionId:region.Id,label:region.Name,url:region.UrlLink};CommunicationService.doSearch({item:item});};function onInputClick(){_self.autocompleteItems=[];_self.inputSearch.focus();if(_self.query!==''){onInputSearch(_self.query);}else{openAutocompleteList();}}
function onInputDelete(){_self.query='';_self.autocompleteItems=[];_self.inputSearch.focus();_self.showSuggestion=false;_self.isJohnSnow=false;_self.showNotFound=false;TutorialService.tutorialAction({name:TutorialService.TUTORIAL_SHOW});openAutocompleteList();var closeIcon=angular.element(document.getElementById('search-close-icon-mobile'));closeIcon.addClass('js-hide');}
function onInputClose(){_self.query='';_self.autocompleteItems=[];_self.showSuggestion=false;_self.isJohnSnow=false;_self.showNotFound=false;MobileInteractionService.triggerCloseSearchInput();}
function onInputEnter($event){if($event.keyCode!==13||_self.query===''||_self.isLoadingAutocompleteResults===true)
return;_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(_self.query)];stopPreviousAutocompleteSuggestion();$q.all(promise).then(function(success){var autocompleteResults=success[0];if(_self.query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.Sections.length===0){mainAutoCompleteSuggestion(_self.query);}else{var itemForSearch={};if(autocompleteResults.Sections.length>0&&autocompleteResults.Items.length===0){itemForSearch=autocompleteResults.Sections[0].Items[0];}else{itemForSearch=autocompleteResults.Items[0];}
var item=CommunicationService.mapAutocompleteItem(itemForSearch);onItemSelect(item);}
_self.inputSearch.blur();_self.isLoadingAutocompleteResults=false;});}
function onInputSearch(query){var closeIcon=angular.element(document.getElementById('search-close-icon-mobile'));if(query===''){TutorialService.tutorialAction({name:TutorialService.TUTORIAL_SHOW});closeIcon.addClass('js-hide');}else{TutorialService.tutorialAction({name:TutorialService.TUTORIAL_HIDE});closeIcon.removeClass('js-hide');}
_self.suggestionItem={};_self.autocompleteItems=[];_self.showSuggestion=false;_self.isJohnSnow=false;_self.showNotFound=false;if(query.length<2){return;}
_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(query)];stopPreviousAutocompleteSuggestion();$q.all(promise).then(function(success){var autocompleteResults=success[0];_self.autocompleteItems=CommunicationService.mapAutocompleteResults(autocompleteResults);_self.isLoadingAutocompleteResults=false;var isLessThanFive=(autocompleteResults.Items.length+autocompleteResults.CustomItems.length)<5;var isEmpty=query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.CustomItems.length===0;if(isEmpty||isLessThanFive){return getSimilarResults(query).then(function(similarResults){_self.autocompleteItems.Items=_self.autocompleteItems.Items.concat(similarResults);}).catch((err)=>{console.log(err);}).finally(function(){if(_self.autocompleteItems.CustomItems.length>0||_self.autocompleteItems.Items.length>0){_self.showSearchResults=true;}else{_self.showNotFound=true;}});}});openAutocompleteList();}
function mainAutoCompleteSuggestion(query){_self.autocompleteSuggestionCanceler=$q.defer();SearchService.mainAutoCompleteSuggestion({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){var result=success;if(result.length>0&&_self.autocompleteItems.length===0){_self.showSuggestion=true;_self.isJohnSnow=false;_self.suggestionItem=result[0];openAutocompleteList();}
if(result.length===0&&_self.autocompleteItems.length===0){_self.isJohnSnow=true;_self.showSuggestion=false;}});}
function getSimilarResults(query){return SearchService.getSimilar({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){return success;});}
function autocomplete(query){return SearchService.mainAutocomplete({query:query,onlyRecipes:_self.onlyRecipes});}
function stopPreviousAutocompleteSuggestion(){if(_self.autocompleteSuggestionCanceler){_self.autocompleteSuggestionCanceler.resolve();_self.autocompleteSuggestionCanceler=null;}}
function onItemSelect(item){if(!item)
return;_self.recentSearches=RecentSearchService.put(item);var prepared=CommunicationService.prepareItemForSearchAction(item);var search=CommunicationService.doSearch({item:prepared});var drawer=angular.element('#search_details');if(search==='searched-on-map'&&drawer){drawer.removeClass('js-open');}
else if(search==='searched-on-list'&&drawer){drawer.addClass('js-open');}
_self.placeholder=prepared.label;}
function openAutocompleteList(){MobileInteractionService.hideBody();_self.inputSearchList.addClass('js-show-list');var header=angular.element('#header-id');header.addClass('js-hide');}
function getItemName(item){if(item.OtherName){return item.Name+" ("+item.OtherName+")";}
return item.Name;}
function isEmblem(entityType){return[ItemTypes.Undefined,ItemTypes.Region,ItemTypes.AutocompleteEntity,ItemTypes.DishGroupInRegion,ItemTypes.IngredientGroupInRegion].includes(entityType);};}]);;angular.module('tasteatlas').component('taHomeDishCategoryNew',{controller:'taHomeDishCategoryNewController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-dish-category-new.html','desktop':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-dish-category-new.html'};return templates[$attrs.template];},bindings:{template:'@',results:'<',switchView:'&'}}).controller("taHomeDishCategoryNewController",["DishGroupService","GeolocationService","$q","FoodTypesService","WhatToEatFiltersService","$timeout","PageStatusSubjectService","BotInterceptor",function(DishGroupService,GeolocationService,$q,FoodTypesService,WhatToEatFiltersService,$timeout,PageStatusSubjectService,BotInterceptor){var _self=this;this.articleListPageSize=12;this.articleListPage=0;this.articleListData=[];this.foodListItems=null;this.selectedViewGrid='regular';this.hasFoodItems=false;this.whereToEatData=[];this.hasWhereToEatItems=null;this.whereToEatLoaded=false;this.location={longitude:'',latitude:''};this.locationRequestFinished=false;this.isFoodListLoaded=false;this.selectedFoodListFilter='mostpopular';this.foodListPage=0;this.foodListPageSize=40;this.floatingFilterData=null;this.initialCallEnd=false;var loadRatingData=FoodTypesService.loadItemRatingDetailsMobile;this.navFilterItemsFoodList=[{name:'Most popular',code:'mostpopular'},{name:'Best rated',code:'bestrated'},{name:'Alphabetically',code:'alphabetically'},{name:'By Location',code:'location'}];this.floatingFilterViews=[{code:'regular',icon:'icon__grid-regular'},{code:'large',icon:'icon__grid-large'}];var foodListFilters={mostpopular:1,bestrated:2,alphabetically:3,location:4};function promiseChain(){var promises=[DishGroupService.getTopLists(_self.results.EntityGroupId,{page:_self.articleListPage,pageSize:_self.articleListPageSize}),DishGroupService.getDishesNew(_self.results.EntityGroupId,{sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template==='mobile'}),];return $q.all(promises).then(function(success){_self.articleListData=success[0].data;if(_self.articleListData.Count){_self.floatingFilterViews.push({code:'list',icon:'icon__grid-list'});}
loadRatingData(success[1].data.Data);_self.foodListItems=success[1].data;_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;_self.foodListItems.selectedFoodListFilter=_self.selectedFoodListFilter;_self.hasFoodItems=!!_self.foodListItems.Count;if(_self.foodListItems.Count<=3){BotInterceptor.blockIndexing();}}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;_self.initialCallEnd=true;PageStatusSubjectService.dispatch({isSectionLoaded:true});});}
this.$onInit=function(){if(_self.results.EntityGroupId!=95&&_self.results.EntityGroupId!=69&&_self.results.EntityGroupId!=53){_self.whereToEatData=angular.fromJson(window.ta.whereToEatData);}
if(_self.hasWhereToEatItems===null){_self.hasWhereToEatItems=!!_self.whereToEatData.length;}
_self.whereToEatLoaded=true;_self.locationRequestFinished=true;if(_self.template==='desktop'){loadRatingData=FoodTypesService.loadItemRatingDetailsDesktop;_self.foodListPageSize=42;}
promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};});}}).finally(function(){_self.floatingFilterData={details:_self.results,resetFilters:false,filterItems:null,includeRegion:false,navFilterItems:_self.navFilterItemsFoodList};})});};this.loadMoreArticleList=function(){_self.articleListPage+=1;return DishGroupService.getTopLists(_self.results.EntityGroupId,{page:_self.articleListPage,pageSize:_self.articleListPageSize}).then(function(success){return success.data;}).catch(function(error){console.log(error);});};this.getWhereToEatItems=function(sort,location){if(_self.results.EntityGroupId!=95&&_self.results.EntityGroupId!=69&&_self.results.EntityGroupId!=53){if(location&&location.latitude&&location.longitude){_self.location=location;}
return DishGroupService.getDishesWhereToEat(_self.results.EntityGroupId,{sort:sort,lon:_self.location.longitude,lat:_self.location.latitude});}};function getDishes(){_self.isFoodListLoaded=false;return DishGroupService.getDishesNew(_self.results.EntityGroupId,{sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template==='mobile'}).then(function(success){loadRatingData(success.data.Data);_self.foodListItems.Data=_self.foodListItems.Data.concat(success.data.Data);_self.foodListItems.Count=success.data.Count;}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;});}
this.changeFoodListFilter=function(filter){if(_self.selectedFoodListFilter===filter){return;}
_self.selectedFoodListFilter=filter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};WhatToEatFiltersService.dispatch({selectedNavFilter:_self.selectedFoodListFilter});_self.foodListPage=0;return getDishes();};this.loadMoreFoodItems=function(){_self.foodListPage+=1;return getDishes();};this.changeViewGrid=function(viewGrid,callback){if(_self.selectedViewGrid===viewGrid){return;}
var previouslySelectedView=_self.selectedViewGrid;_self.selectedViewGrid=viewGrid;if(previouslySelectedView==='list'&&(viewGrid==='large'||viewGrid==='regular')){_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};return getDishes().finally(callback('search-results-whattoeat-bottom',100));}
if(viewGrid==='list'){return $timeout(function(){callback('search-results-whattoeat-list',90);});}
_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;callback('search-results-whattoeat-bottom',100);};this.mainFiltersChanged=function(filters,callback){_self.selectedFoodListFilter=filters.selectedNavFilter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};_self.foodListPage=0;return getDishes().finally(callback('search-results-whattoeat-bottom',100));};this.viewAllRestaurantsWhereToEat=function(){_self.switchView({switchTo:'viewallwheretoeat'});};}]);;angular.module('tasteatlas').component('taHomeIngredientCategoryNew',{controller:'taHomeIngredientCategoryNewController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-ingredient-category-new.html','desktop':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-ingredient-category-new.html'};return templates[$attrs.template];},bindings:{template:'@',results:'<'}}).controller("taHomeIngredientCategoryNewController",["IngredientGroupService","$q","FoodTypesService","WhatToEatFiltersService","$timeout","BotInterceptor",function(IngredientGroupService,$q,FoodTypesService,WhatToEatFiltersService,$timeout,BotInterceptor){var _self=this;this.articleListPageSize=12;this.articleListPage=0;this.articleListData=[];this.foodListItems=null;this.selectedViewGrid='regular';this.hasFoodItems=false;this.isFoodListLoaded=false;this.selectedFoodListFilter='mostpopular';this.foodListPage=0;this.foodListPageSize=40;this.floatingFilterData=null;this.initialCallEnd=false;var loadRatingData=FoodTypesService.loadItemRatingDetailsMobile;this.navFilterItemsFoodList=[{name:'Most popular',code:'mostpopular'},{name:'Best rated',code:'bestrated'},{name:'Alphabetically',code:'alphabetically'},{name:'By Location',code:'location'}];this.floatingFilterViews=[{code:'regular',icon:'icon__grid-regular'},{code:'large',icon:'icon__grid-large'}];var foodListFilters={mostpopular:1,bestrated:2,alphabetically:3,location:4};function promiseChain(){var promises=[IngredientGroupService.getTopLists(_self.results.EntityGroupId,{page:_self.articleListPage,pageSize:_self.articleListPageSize}),IngredientGroupService.getIngredientsNew(_self.results.EntityGroupId,{sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template==='mobile'})];return $q.all(promises).then(function(success){_self.articleListData=success[0].data;if(_self.articleListData.Count){_self.floatingFilterViews.push({code:'list',icon:'icon__grid-list'});}
loadRatingData(success[1].data.Data);_self.foodListItems=success[1].data;_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;_self.foodListItems.selectedFoodListFilter=_self.selectedFoodListFilter;_self.hasFoodItems=!!_self.foodListItems.Count;if(_self.foodListItems.Count<=3){BotInterceptor.blockIndexing();}}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;_self.initialCallEnd=true;});}
this.$onInit=function(){if(_self.template==='desktop'){loadRatingData=FoodTypesService.loadItemRatingDetailsDesktop;_self.foodListPageSize=42;}
promiseChain().then(function(){_self.floatingFilterData={details:_self.results,resetFilters:false,filterItems:null,includeRegion:false,navFilterItems:_self.navFilterItemsFoodList};});};this.loadMoreArticleList=function(){_self.articleListPage+=1;return IngredientGroupService.getTopLists(_self.results.EntityGroupId,{page:_self.articleListPage,pageSize:_self.articleListPageSize}).then(function(success){return success.data;}).catch(function(error){console.log(error);});};function getIngredients(){_self.isFoodListLoaded=false;return IngredientGroupService.getIngredientsNew(_self.results.EntityGroupId,{sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template==='mobile'}).then(function(success){loadRatingData(success.data.Data);_self.foodListItems.Data=_self.foodListItems.Data.concat(success.data.Data);_self.foodListItems.Count=success.data.Count;}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;});}
this.changeFoodListFilter=function(filter){if(_self.selectedFoodListFilter===filter){return;}
_self.selectedFoodListFilter=filter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};WhatToEatFiltersService.dispatch({selectedNavFilter:_self.selectedFoodListFilter});_self.foodListPage=0;return getIngredients();};this.loadMoreFoodItems=function(){_self.foodListPage+=1;return getIngredients();};this.changeViewGrid=function(viewGrid,callback){if(_self.selectedViewGrid===viewGrid){return;}
var previouslySelectedView=_self.selectedViewGrid;_self.selectedViewGrid=viewGrid;if(previouslySelectedView==='list'&&(viewGrid==='large'||viewGrid==='regular')){_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};return getIngredients().finally(callback('search-results-whattoeat-bottom',100));}
if(viewGrid==='list'){return $timeout(function(){callback('search-results-whattoeat-list',90);});}
_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;callback('search-results-whattoeat-bottom',100);};this.mainFiltersChanged=function(filters,callback){_self.selectedFoodListFilter=filters.selectedNavFilter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};_self.foodListPage=0;return getIngredients().finally(callback('search-results-whattoeat-bottom',100));};}]);;angular.module('tasteatlas').component('taHomeTags',{controller:'taHomeTagsController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-tags.html','desktop':'/content/scripts/app/components/home-page/home-search-results/category/ta-home-desktop-tags.html'};return templates[$attrs.template];},bindings:{template:'@',results:'<',sharingDetails:'<'}}).controller("taHomeTagsController",["TagService","MainHelper","FoodTypesService","ResultListSubjectService","$timeout","BotInterceptor",function(TagService,MainHelper,FoodTypesService,ResultListSubjectService,$timeout,BotInterceptor){var _self=this;this.tagName="";this.tagNameCapitalized="";this.tagsLoading=false;this.tagOrderBy=0;this.isLoaded=false;var loadRatingData=FoodTypesService.loadItemRatingDetailsMobile;this.sortOptions=[{name:'Most popular',code:'mostpopular'},{name:'Best rated',code:'bestrated'},{name:'Alphabetically',code:'alphabetically'},{name:'By Location',code:'location'}];var pageSize=48;var page=0;this.$onInit=function(){if(_self.template==='desktop'){loadRatingData=FoodTypesService.loadItemRatingDetailsDesktop;}
BotInterceptor.blockIndexing();var tagMetaData=ResultListSubjectService.getCurrentState();_self.tagName=tagMetaData.tagName;_self.tagNameCapitalized=tagMetaData.tagName.substring(0,1).toUpperCase()+tagMetaData.tagName.substring(1);loadRatingData(_self.results.Data);_self.results.selectedViewGrid="regular";_self.tagOrderBy=MainHelper.findOrderByFromParams();_self.regionTitleType=_self.results.RegionLevel?MainHelper.determineTitleRegionType(_self.results.RegionLevel):null;$timeout(function(){_self.isLoaded=true;});};this.onTagOrderBy=function(filter){var orderBy=filter;_self.tagOrderBy=orderBy;_self.tagsLoading=true;_self.results.Data=[];_self.results.Count=0;return TagService.getItemsV3({tag:_self.tagName,page:page,pageSize:pageSize,sort:_self.tagOrderBy}).then(function(success){loadRatingData(success.data.Data);_self.results.Data=success.data.Data;_self.results.Count=success.data.Count;}).catch(function(error){console.log(error);}).finally(function(){_self.tagsLoading=false;});};this.tagsLoading=false;this.onLoadMoreTagItems=function(){page=page+1;return TagService.getItemsV3({tag:_self.tagName,page:page,pageSize:pageSize,sort:_self.tagOrderBy}).then(function(success){loadRatingData(success.data.Data);_self.results.Data=_self.results.Data.concat(success.data.Data);},function(error){console.log(error);});};}]);;angular.module('tasteatlas').component('taHomeCategoryRegion',{controller:'taHomeCategoryRegionController',templateUrl:function($element,$attrs){var templates={'mobile-dish':'/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-dish-category-region.html','mobile-ingredient':'/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-ingredient-category-region.html','desktop-dish':'/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-desktop-dish-category-region.html','desktop-ingredient':'/content/scripts/app/components/home-page/home-search-results/category-in-region/ta-home-desktop-ingredient-category-region.html'};return templates[$attrs.template];},bindings:{template:'@',results:'<',switchView:'&'}}).controller("taHomeCategoryRegionController",["DishGroupService","IngredientGroupService","RegionService","GeolocationService","$q","FoodTypesService","WhatToEatFiltersService","$timeout","BotInterceptor",function(DishGroupService,IngredientGroupService,RegionService,GeolocationService,$q,FoodTypesService,WhatToEatFiltersService,$timeout,BotInterceptor){var _self=this;this.articleListPageSize=12;this.articleListPage=0;this.articleListData=[];this.foodListItems=null;this.selectedViewGrid='regular';this.hasFoodItems=false;this.whereToEatData=[];this.isInLocation=false;this.hasWhereToEatItems=null;this.whereToEatLoaded=false;this.location={longitude:'',latitude:''};this.locationRequestFinished=false;this.isFoodListLoaded=false;this.selectedFoodListFilter='mostpopular';this.foodListPage=0;this.foodListPageSize=40;this.floatingFilterData=null;this.initialCallEnd=false;this.entityId=null;this.regionId=null;var GroupService={};var loadRatingData=FoodTypesService.loadItemRatingDetailsMobile;this.navFilterItemsFoodList=[{name:'Most popular',code:'mostpopular'},{name:'Best rated',code:'bestrated'},{name:'Alphabetically',code:'alphabetically'},{name:'By Location',code:'location'}];this.floatingFilterViews=[{code:'regular',icon:'icon__grid-regular'},{code:'large',icon:'icon__grid-large'}];var foodListFilters={mostpopular:1,bestrated:2,alphabetically:3,location:4};function promiseChain(){var promises=[GroupService.getTopLists(_self.entityId,{regionId:_self.regionId,page:_self.articleListPage,pageSize:_self.articleListPageSize}),GroupService.getCategoryNew(_self.entityId,{regionId:_self.regionId,sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template.indexOf('mobile')>-1}),];return $q.all(promises).then(function(success){_self.articleListData=success[0].data;if(_self.articleListData.Count){_self.floatingFilterViews.push({code:'list',icon:'icon__grid-list'});}
loadRatingData(success[1].data.Data);_self.foodListItems=success[1].data;_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;_self.foodListItems.selectedFoodListFilter=_self.selectedFoodListFilter;_self.hasFoodItems=!!_self.foodListItems.Count;if(_self.foodListItems.Count<=3){BotInterceptor.blockIndexing();}
RegionService.isInLocation(_self.regionId,{lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){_self.isInLocation=success.data;});}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;_self.initialCallEnd=true;});}
this.$onInit=function(){if(_self.template.indexOf('desktop')>-1){loadRatingData=FoodTypesService.loadItemRatingDetailsDesktop;_self.foodListPageSize=42;}
_self.entityId=_self.results.EntityGroup.EntityGroupId;_self.regionId=_self.results.Region.RegionId;if(_self.template.indexOf('dish')>-1){GroupService={getTopLists:DishGroupService.getTopLists,getCategoryWhereToEat:DishGroupService.getDishesWhereToEat,getCategoryNew:DishGroupService.getDishesNew,};}
else{GroupService={getTopLists:IngredientGroupService.getTopLists,getCategoryWhereToEat:IngredientGroupService.getIngredientsWhereToEat,getCategoryNew:IngredientGroupService.getIngredientsNew,};}
_self.whereToEatData=angular.fromJson(window.ta.whereToEatData);if(_self.hasWhereToEatItems===null){_self.hasWhereToEatItems=!!_self.whereToEatData.length;}
_self.whereToEatLoaded=true;_self.locationRequestFinished=true;promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};});}}).finally(function(){_self.floatingFilterData={details:_self.results,resetFilters:false,filterItems:null,includeRegion:false,navFilterItems:_self.navFilterItemsFoodList};});});};this.loadMoreArticleList=function(){_self.articleListPage+=1;return GroupService.getTopLists(_self.entityId,{regionId:_self.regionId,page:_self.articleListPage,pageSize:_self.articleListPageSize}).then(function(success){return success.data;}).catch(function(error){console.log(error);});};this.getWhereToEatItems=function(sort,location){if(location&&location.latitude&&location.longitude){_self.location=location;}
return GroupService.getCategoryWhereToEat(_self.entityId,{regionId:_self.regionId,sort:sort,lon:_self.location.longitude,lat:_self.location.latitude});};function getDishes(){_self.isFoodListLoaded=false;return GroupService.getCategoryNew(_self.entityId,{regionId:_self.regionId,sort:foodListFilters[_self.selectedFoodListFilter],page:_self.foodListPage,pageSize:_self.foodListPageSize,removeDescription:_self.template.indexOf('mobile')>-1}).then(function(success){loadRatingData(success.data.Data);_self.foodListItems.Data=_self.foodListItems.Data.concat(success.data.Data);_self.foodListItems.Count=success.data.Count;}).catch(function(err){console.log(err);}).finally(function(){_self.isFoodListLoaded=true;});}
this.changeFoodListFilter=function(filter){if(_self.selectedFoodListFilter===filter){return;}
_self.selectedFoodListFilter=filter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};WhatToEatFiltersService.dispatch({selectedNavFilter:_self.selectedFoodListFilter});_self.foodListPage=0;return getDishes();};this.loadMoreFoodItems=function(){_self.foodListPage+=1;return getDishes();};this.changeViewGrid=function(viewGrid,callback){if(_self.selectedViewGrid===viewGrid){return;}
var previouslySelectedView=_self.selectedViewGrid;_self.selectedViewGrid=viewGrid;if(previouslySelectedView==='list'&&(viewGrid==='large'||viewGrid==='regular')){_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};return getDishes().finally(callback('search-results-whattoeat-bottom',100));}
if(viewGrid==='list'){return $timeout(function(){callback('search-results-whattoeat-list',90);});}
_self.foodListItems.selectedViewGrid=_self.selectedViewGrid;callback('search-results-whattoeat-bottom',100);};this.mainFiltersChanged=function(filters,callback){_self.selectedFoodListFilter=filters.selectedNavFilter;_self.foodListItems={Data:[],Count:0,selectedViewGrid:_self.selectedViewGrid,selectedFoodListFilter:_self.selectedFoodListFilter};_self.foodListPage=0;return getDishes().finally(callback('search-results-whattoeat-bottom',100));};this.getGroupInRegionTitle=function(){var entity=_self.results.EntityGroup;var region=_self.results.Region;if(entity&&entity.Plural&&region){if(region.Adjective){return region.Adjective+' '+entity.Plural;}
return entity.Plural+' in '+region.Name;}};this.viewAllRestaurantsWhereToEat=function(){_self.switchView({switchTo:'viewallwheretoeat'});};}]);;angular.module('tasteatlas').component('taSearchResultsFloatingFilterDesktop',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-floating-filter-desktop.html',controller:'taSearchResultsFloatingFilterDesktopController',bindings:{onApplyFilters:'&',filtersData:'<'}}).controller("taSearchResultsFloatingFilterDesktopController",['$scope','WhatToEatFiltersService','$timeout','MainHelper','$window',function($scope,WhatToEatFiltersService,$timeout,MainHelper,$window){var _self=this;this.filtersPopupOpened=false;this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.selectedNavFilter=null;this.selectedRegionFilter=null;this.dataChanged=false;this.showFilterOnIds=['#search-results-whattoeat-content','#search-results-whattoeat-list'];this.$onInit=function(){WhatToEatFiltersService.subscribe(_filtersObserver_);loadSelectedItems();loadRegionFoodCount();};function _filtersObserver_(state){_self.selectedMainFilterEnums=state.selectedMainFilterEnums;_self.selectedRegionFilter=state.selectedRegionFilter;_self.selectedNavFilter=state.selectedNavFilter;_self.selectedMainFilterUrlLinks=state.selectedMainFilterUrlLinks;}
function loadSelectedItems(){var stateCopy=JSON.parse(JSON.stringify((WhatToEatFiltersService._state)));_self.selectedMainFilterEnums=stateCopy.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=stateCopy.selectedMainFilterUrlLinks;_self.selectedRegionFilter=stateCopy.selectedRegionFilter;_self.selectedNavFilter=stateCopy.selectedNavFilter;}
function filterCallback(action){return function(elementId,offset){if(action==='scroll-to-section'){return MainHelper.scrollToTargetAdjusted(elementId,offset);}
return;};}
function loadRegionFoodCount(){angular.forEach(_self.filtersData.regionCount,function(item){if(_self.filtersData.details.Country&&item.RegionId===_self.filtersData.details.Country.RegionId){_self.filtersData.details.Country.FoodCount=item.Count;}
else if(_self.filtersData.details.ParentRegion&&item.RegionId===_self.filtersData.details.ParentRegion.RegionId){_self.filtersData.details.ParentRegion.FoodCount=item.Count;}});}
this.openFiltersPopup=function(event){event.stopPropagation();event.preventDefault();_self.filtersPopupOpened=true;};this.closeFiltersPopup=function(){loadSelectedItems();_self.filtersPopupOpened=false;};this.mainFiltersChanged=function(filters){_self.dataChanged=true;_self.selectedMainFilterEnums=filters.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=filters.selectedMainFilterUrlLinks;_self.selectedRegionFilter=filters.selectedRegionFilter;if(!_self.selectedMainFilterEnums.includes(_self.filtersData.filterItems.masterFilter.Id)||_self.selectedMainFilterUrlLinks.length){_self.selectedNavFilter='mostpopular';}};this.secondaryFilterChanged=function(filter){if(_self.selectedNavFilter===filter){return;}
_self.dataChanged=true;_self.selectedNavFilter=filter;if(_self.selectedNavFilter==='selection'){_self.filtersData.resetFilters=true;$timeout(function(){_self.filtersData.resetFilters=false;});}
_self.applyFilters();};this.applyFilters=function(){if(!_self.dataChanged){return;}
WhatToEatFiltersService.dispatch({selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks,selectedRegionFilter:_self.selectedRegionFilter,selectedNavFilter:_self.selectedNavFilter});_self.onApplyFilters({filters:{selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks,selectedRegionFilter:_self.selectedRegionFilter,selectedNavFilter:_self.selectedNavFilter},callback:filterCallback('scroll-to-section')});_self.closeFiltersPopup();};this.isHeaderHidden=false;angular.element($window).bind("scroll",function(){var header=angular.element('ta-header-desktop');var headerDiv=angular.element(header.find('#header-id'));$scope.$apply(function(){_self.isHeaderHidden=headerDiv.hasClass('header--hidden');});});}]);;angular.module('tasteatlas').component('taSearchResultsFloatingFilterMobile',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-floating-filter-mobile.html',controller:'taSearchResultsFloatingFilterMobileController',bindings:{views:'<',onChangeViewGrid:'&',onApplyFilters:'&',filtersData:'<'}}).controller("taSearchResultsFloatingFilterMobileController",['WhatToEatFiltersService','$timeout','MainHelper',function(WhatToEatFiltersService,$timeout,MainHelper){var _self=this;this.filtersPopupOpened=false;this.selectedViewGrid='';this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.selectedNavFilter=null;this.selectedRegionFilter=null;this.dataChanged=false;this.showFilterOnIds=['#search-results-whattoeat-content','#search-results-whattoeat-list','#search-results-whattoeat-list-empty'];this.$onInit=function(){_self.selectedViewGrid=_self.views[0].code;WhatToEatFiltersService.subscribe(_filtersObserver_);loadSelectedItems();loadRegionFoodCount();};function _filtersObserver_(state){_self.selectedMainFilterEnums=state.selectedMainFilterEnums;_self.selectedRegionFilter=state.selectedRegionFilter;_self.selectedNavFilter=state.selectedNavFilter;_self.selectedMainFilterUrlLinks=state.selectedMainFilterUrlLinks;}
function loadSelectedItems(){var stateCopy=JSON.parse(JSON.stringify((WhatToEatFiltersService._state)));_self.selectedMainFilterEnums=stateCopy.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=stateCopy.selectedMainFilterUrlLinks;_self.selectedRegionFilter=stateCopy.selectedRegionFilter;_self.selectedNavFilter=stateCopy.selectedNavFilter;}
function filterCallback(action){return function(elementId,offset){if(action==='scroll-to-section'){return MainHelper.scrollToTargetAdjusted(elementId,offset);}
return;};}
function loadRegionFoodCount(){angular.forEach(_self.filtersData.regionCount,function(item){if(_self.filtersData.details.Country&&item.RegionId===_self.filtersData.details.Country.RegionId){_self.filtersData.details.Country.FoodCount=item.Count;}
else if(_self.filtersData.details.ParentRegion&&item.RegionId===_self.filtersData.details.ParentRegion.RegionId){_self.filtersData.details.ParentRegion.FoodCount=item.Count;}});}
this.changeViewGrid=function(viewGrid){if(_self.selectedViewGrid===viewGrid){return;}
_self.selectedViewGrid=viewGrid;_self.onChangeViewGrid({viewGrid:_self.selectedViewGrid,callback:filterCallback('scroll-to-section')});};this.openFiltersPopup=function(event){event.stopPropagation();event.preventDefault();_self.filtersPopupOpened=true;};this.closeFiltersPopup=function(){loadSelectedItems();_self.filtersPopupOpened=false;};this.mainFiltersChanged=function(filters){_self.dataChanged=true;_self.selectedMainFilterEnums=filters.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=filters.selectedMainFilterUrlLinks;_self.selectedRegionFilter=filters.selectedRegionFilter;if(!_self.selectedMainFilterEnums.includes(_self.filtersData.filterItems.masterFilter.Id)||_self.selectedMainFilterUrlLinks.length){_self.selectedNavFilter='mostpopular';}};this.secondaryFilterChanged=function(filter){if(_self.selectedNavFilter===filter){return;}
_self.dataChanged=true;_self.selectedNavFilter=filter;if(_self.selectedNavFilter==='selection'){_self.filtersData.resetFilters=true;$timeout(function(){_self.filtersData.resetFilters=false;});return;}};this.applyFilters=function(){if(!_self.dataChanged){return;}
WhatToEatFiltersService.dispatch({selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks,selectedRegionFilter:_self.selectedRegionFilter,selectedNavFilter:_self.selectedNavFilter});_self.onApplyFilters({filters:{selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks,selectedRegionFilter:_self.selectedRegionFilter,selectedNavFilter:_self.selectedNavFilter},callback:filterCallback('scroll-to-section')});_self.closeFiltersPopup();};}]);;angular.module('tasteatlas').component('taSearchResultsNavFilterDesktop',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-nav-filter-desktop.html',controller:'taSearchResultsNavFilterDesktopController',bindings:{filterItems:'<',onFilterSelected:'&',isContentLoaded:'<',overrideChange:'<'}}).controller("taSearchResultsNavFilterDesktopController",[function(){var _self=this;this.selectedFilter='';this.disableControl=false;this.$onInit=function(){if(!_self.selectedFilter){_self.selectedFilter=_self.filterItems[0].code;}};this.$onChanges=function(changeObj){if(changeObj&&changeObj.isContentLoaded&&changeObj.isContentLoaded.currentValue!==undefined){_self.disableControl=!changeObj.isContentLoaded.currentValue;}
if(changeObj&&changeObj.overrideChange&&changeObj.overrideChange.currentValue&&changeObj.overrideChange.currentValue.length){_self.selectedFilter=changeObj.overrideChange.currentValue;}};this.changeFilter=function(filter){if(_self.selectedFilter===filter){return;}
_self.selectedFilter=filter;_self.onFilterSelected({filter:filter});};}]);;angular.module('tasteatlas').component('taSearchResultsNavFilterMobile',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-search-results-nav-filter-mobile.html',controller:'taSearchResultsNavFilterMobileController',bindings:{filterItems:'<',onFilterSelected:'&',isContentLoaded:'<',overrideChange:'<',viewType:'<',extraControl:'<'}}).controller("taSearchResultsNavFilterMobileController",[function(){var _self=this;this.selectedFilter='';this.disableControl=false;this.$onInit=function(){if(!_self.selectedFilter){_self.selectedFilter=_self.filterItems[0].code;}};this.$onChanges=function(changeObj){if(changeObj&&changeObj.isContentLoaded&&changeObj.isContentLoaded.currentValue!==undefined){_self.disableControl=!changeObj.isContentLoaded.currentValue;}
if(changeObj&&changeObj.overrideChange&&changeObj.overrideChange.currentValue&&changeObj.overrideChange.currentValue.length){_self.selectedFilter=changeObj.overrideChange.currentValue;}};this.changeFilter=function(filter){if(_self.selectedFilter===filter){return;}
_self.selectedFilter=filter;_self.onFilterSelected({filter:filter});};}]);;angular.module('tasteatlas').component('taWhatToEatFiltersDesktop',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-what-to-eat-filters-desktop.html',controller:'taWhatToEatFiltersDesktopController',bindings:{details:'<',resetFilters:'<',filtersChanged:'&',filterItems:'<',includeRegion:'<',includeFoods:'<',isFloating:'<'}}).controller("taWhatToEatFiltersDesktopController",['RegionLevels','WhatToEatFiltersService','MainHelper',function(RegionLevels,WhatToEatFiltersService,MainHelper){var _self=this;this.regionLevels=RegionLevels;this.regionsAsFilters=[];this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.displayedMainFilters=[];this.mainRegionFilter=null;this.selectedRegionFilter=null;this.parentRegionFilter=null;this.countryFilter=null;this.showRegionFilter=false;this.showFoodsFilter=false;this.filtersExpanded=false;this.$onInit=function(){WhatToEatFiltersService.subscribe(_filtersObserver_);_self.showRegionFilter=_self.includeRegion&&(_self.details.RegionLevel<_self.regionLevels.Country);_self.showFoodsFilter=_self.includeFoods!==undefined?_self.includeFoods:true;loadFoodFilters();_self.regionsAsFilters=loadRegionsAsFilters();if(!_self.isFloating){_self.selectedMainFilterEnums=[_self.masterFilter.Id];submitFilterChange(filterCallback('none'));}
else{var stateCopy=JSON.parse(JSON.stringify((WhatToEatFiltersService._state)));_self.selectedMainFilterEnums=stateCopy.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=stateCopy.selectedMainFilterUrlLinks;_self.selectedRegionFilter=stateCopy.selectedRegionFilter;}};this.$onChanges=function(changeObj){if(changeObj&&changeObj.filterItems&&changeObj.filterItems.currentValue&&!angular.equals(changeObj.filterItems.currentValue,changeObj.filterItems.previousValue)){_self.filterItems=changeObj.filterItems.currentValue;loadFoodFilters();}
if(changeObj&&changeObj.resetFilters&&changeObj.resetFilters.currentValue&&!angular.equals(changeObj.resetFilters.previousValue,{})){_self.resetMainFilters();}};function _filtersObserver_(state){_self.selectedMainFilterEnums=state.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=state.selectedMainFilterUrlLinks;_self.selectedRegionFilter=state.selectedRegionFilter;}
function filterCallback(action){return function(elementId,offset){if(action==='scroll-to-section'){return MainHelper.scrollToTargetAdjusted(elementId,offset);}
return;};}
function submitFilterChange(callback){WhatToEatFiltersService.dispatch({selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedRegionFilter:_self.selectedRegionFilter,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks});_self.filtersChanged({filters:{selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedRegionFilter:_self.selectedRegionFilter,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks},callback:callback});}
function loadRegionsAsFilters(){var filters=[];_self.mainRegionFilter={id:_self.details.RegionId,Name:_self.details.Name,FoodCount:_self.details.FoodCount,style:{'z-index':10}};if(_self.details.ParentRegion){_self.parentRegionFilter={id:_self.details.ParentRegion.RegionId,Name:_self.details.ParentRegion.Name,FoodCount:_self.details.ParentRegion.FoodCount,style:{'z-index':9},isParentRegion:true};if(_self.details.OriginallyFrom<=3){_self.selectedRegionFilter=_self.details.ParentRegion.RegionId;}}
if(_self.details.Country){_self.countryFilter={id:_self.details.Country.RegionId,Name:_self.details.Country.Name,FoodCount:_self.details.Country.FoodCount,style:{'z-index':8}};}
if(_self.details.RegionLevel===RegionLevels.CapitalCity){_self.selectedRegionFilter=_self.details.Country.RegionId;}
return filters;}
function loadFoodFilters(){_self.masterFilter=_self.filterItems.masterFilter;_self.mainFilters=_self.filterItems.mainFilters;_self.displayedMainFilters=_self.isFloating?_self.mainFilters.slice(0,4):_self.mainFilters;}
this.selectRegionAsFilter=function(filterId){if(filterId===_self.selectedRegionFilter){return;}
_self.selectedRegionFilter=filterId;submitFilterChange(filterCallback('scroll-to-section'));};this.isMainFilterActive=function(mainFilterEnum,mainFilterUrlLink){return _self.selectedMainFilterEnums.includes(mainFilterEnum)||_self.selectedMainFilterUrlLinks.includes(mainFilterUrlLink);};this.changeMainFilter=function(filter){if(filter.Id!==undefined){if(filter.Id===_self.masterFilter.Id){_self.handleMasterFilter();return;}
_self.selectedMainFilterUrlLinks=[];_self.selectedMainFilterEnums=[filter.Id];}
else if(filter.UrlLink){_self.selectedMainFilterUrlLinks=[filter.UrlLink];_self.selectedMainFilterEnums=[];}
submitFilterChange(filterCallback('scroll-to-section'));};this.handleMasterFilter=function(){_self.selectedMainFilterUrlLinks=[];_self.selectedMainFilterEnums=[_self.masterFilter.Id];submitFilterChange(filterCallback('scroll-to-section'));};this.showAllMainFilters=function(){_self.filtersExpanded=true;};this.hideFilters=function(){_self.filtersExpanded=false;};this.resetMainFilters=function(){_self.changeMainFilter(_self.masterFilter);};}]);;angular.module('tasteatlas').component('taWhatToEatFiltersMobile',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/filters/ta-what-to-eat-filters-mobile.html',controller:'taWhatToEatFiltersController',bindings:{details:'<',resetFilters:'<',filtersChanged:'&',filterItems:'<',includeRegion:'<',includeFoods:'<',isPopup:'<'}}).controller("taWhatToEatFiltersController",['RegionLevels','WhatToEatFiltersService','MainHelper',function(RegionLevels,WhatToEatFiltersService,MainHelper){var _self=this;this.regionLevels=RegionLevels;this.regionsAsFilters=[];this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.displayedMainFilters=[];this.mainRegionFilter=null;this.selectedRegionFilter=null;this.parentRegionFilter=null;this.countryFilter=null;this.filtersExpanded=false;this.showRegionFilter=false;this.showFoodsFilter=false;this.$onInit=function(){WhatToEatFiltersService.subscribe(_filtersObserver_);_self.showRegionFilter=_self.includeRegion&&(_self.details.RegionLevel<_self.regionLevels.Country);_self.showFoodsFilter=_self.includeFoods!==undefined?_self.includeFoods:true;loadFoodFilters();_self.regionsAsFilters=loadRegionsAsFilters();if(!_self.isPopup){_self.selectedMainFilterEnums=[_self.masterFilter.Id];submitFilterChange(filterCallback('none'));}
else{var stateCopy=JSON.parse(JSON.stringify((WhatToEatFiltersService._state)));_self.selectedMainFilterEnums=stateCopy.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=stateCopy.selectedMainFilterUrlLinks;_self.selectedRegionFilter=stateCopy.selectedRegionFilter;}};this.$onChanges=function(changeObj){if(changeObj&&changeObj.filterItems&&changeObj.filterItems.currentValue&&!angular.equals(changeObj.filterItems.currentValue,changeObj.filterItems.previousValue)){_self.filterItems=changeObj.filterItems.currentValue;loadFoodFilters();_self.hideFilters();}
if(changeObj&&changeObj.resetFilters&&changeObj.resetFilters.currentValue&&!angular.equals(changeObj.resetFilters.previousValue,{})){_self.resetMainFilters();}};this.$doCheck=function(){showNonVisibleSelectedFilters();};function _filtersObserver_(state){_self.selectedMainFilterEnums=state.selectedMainFilterEnums;_self.selectedMainFilterUrlLinks=state.selectedMainFilterUrlLinks;_self.selectedRegionFilter=state.selectedRegionFilter;}
function filterCallback(action){return function(elementId,offset){if(action==='scroll-to-section'){return MainHelper.scrollToTargetAdjusted(elementId,offset);}
return;};}
function submitFilterChange(callback){if(!_self.isPopup){WhatToEatFiltersService.dispatch({selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedRegionFilter:_self.selectedRegionFilter,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks});}
_self.filtersChanged({filters:{selectedMainFilterEnums:_self.selectedMainFilterEnums,selectedRegionFilter:_self.selectedRegionFilter,selectedMainFilterUrlLinks:_self.selectedMainFilterUrlLinks},callback:callback});}
function loadRegionsAsFilters(){var filters=[];_self.mainRegionFilter={id:_self.details.RegionId,Name:_self.details.Name,FoodCount:_self.details.FoodCount,style:{'z-index':10}};if(_self.details.ParentRegion){_self.parentRegionFilter={id:_self.details.ParentRegion.RegionId,Name:_self.details.ParentRegion.Name,FoodCount:_self.details.ParentRegion.FoodCount,style:{'z-index':9},isParentRegion:true};if(_self.details.OriginallyFrom<=3){_self.selectedRegionFilter=_self.details.ParentRegion.RegionId;}}
if(_self.details.Country){_self.countryFilter={id:_self.details.Country.RegionId,Name:_self.details.Country.Name,FoodCount:_self.details.Country.FoodCount,style:{'z-index':8}};}
if(_self.details.IsMostPopularCity||(_self.details.RegionLevel===RegionLevels.CapitalCity)){_self.selectedRegionFilter=_self.details.Country.RegionId;}
return filters;}
function loadFoodFilters(){_self.masterFilter=_self.filterItems.masterFilter;_self.mainFilters=_self.filterItems.mainFilters;_self.displayedMainFilters=_self.isPopup?_self.mainFilters:_self.mainFilters.slice(0,6);}
this.selectRegionAsFilter=function(filterId){if(filterId===_self.selectedRegionFilter){return;}
_self.selectedRegionFilter=filterId;submitFilterChange(filterCallback('scroll-to-section'));};this.isMainFilterActive=function(mainFilterEnum,mainFilterUrlLink){return _self.selectedMainFilterEnums.includes(mainFilterEnum)||_self.selectedMainFilterUrlLinks.includes(mainFilterUrlLink);};this.changeMainFilter=function(filter){if(filter.Id!==undefined){if(filter.Id===_self.masterFilter.Id){_self.handleMasterFilter();return;}
_self.selectedMainFilterUrlLinks=[];_self.selectedMainFilterEnums=[filter.Id];}
else if(filter.UrlLink){_self.selectedMainFilterUrlLinks=[filter.UrlLink];_self.selectedMainFilterEnums=[];}
submitFilterChange(filterCallback('scroll-to-section'));};this.handleMasterFilter=function(){_self.selectedMainFilterUrlLinks=[];_self.selectedMainFilterEnums=[_self.masterFilter.Id];submitFilterChange(filterCallback('scroll-to-section'));};this.showAllMainFilters=function(){_self.displayedMainFilters=_self.mainFilters;_self.filtersExpanded=true;};this.hideFilters=function(){_self.displayedMainFilters=_self.mainFilters.slice(0,6);_self.filtersExpanded=false;};this.resetMainFilters=function(){_self.changeMainFilter(_self.masterFilter);};function showNonVisibleSelectedFilters(){if((_self.selectedMainFilterEnums.length||_self.selectedMainFilterUrlLinks.length)&&_self.displayedMainFilters.length!==_self.mainFilters.length){var selected;var selectedFiltersData=[];if(_self.selectedMainFilterEnums.length){selectedFiltersData=_self.selectedMainFilterEnums;}
else if(_self.selectedMainFilterUrlLinks.length){selectedFiltersData=_self.selectedMainFilterUrlLinks;}
angular.forEach(selectedFiltersData,function(selectedFilterCode){selected=_self.displayedMainFilters.find(function(displayedMainFilter){return displayedMainFilter.Id===selectedFilterCode||displayedMainFilter.UrlLink===selectedFilterCode;});if(!selected){_self.showAllMainFilters();}});}}}]);;angular.module("tasteatlas").service("WhatToEatFiltersService",[function(){var _self=this;_self._observers=[];_self._state={selectedMainFilterEnums:[],selectedMainFilterUrlLinks:[],selectedRegionFilter:null,selectedNavFilter:null};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){if(state.selectedMainFilterEnums!==undefined){_self._state.selectedMainFilterEnums=state.selectedMainFilterEnums;}
if(state.selectedMainFilterUrlLinks!==undefined){_self._state.selectedMainFilterUrlLinks=state.selectedMainFilterUrlLinks;}
if(state.selectedRegionFilter!==undefined){_self._state.selectedRegionFilter=state.selectedRegionFilter;}
if(state.selectedNavFilter!==undefined){_self._state.selectedNavFilter=state.selectedNavFilter;}
for(var i=0;i<_self._observers.length;i++){_self._observers[i](_self._state);}};this.state=Object.assign({},_self._state);}]);;angular.module('tasteatlas').component('taKnowMoreDishWhereToEat',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-dish-where-to-eat.html',controller:'taKnowMoreDishWhereToEatController'}).controller("taKnowMoreDishWhereToEatController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taKnowMoreFood',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-food.html',controller:'taKnowMoreFoodController',bindings:{name:'<'}}).controller("taKnowMoreFoodController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taKnowMoreIngredientEstablishment',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-ingredient-establishment.html',controller:'taKnowMoreIngredientEstablishmentController',bindings:{name:'='}}).controller("taKnowMoreIngredientEstablishmentController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taKnowMoreRegion',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-region.html',controller:'taKnowMoreRegionController',bindings:{name:'<'}}).controller("taKnowMoreRegionController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taKnowMoreRestaurant',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-know-more-restaurant.html',controller:'taKnowMoreRestaurantController',bindings:{name:'<'}}).controller("taKnowMoreRestaurantController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taKnowsNothing',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/know-more/ta-knows-nothing.html',controller:'taKnowsNothingController',bindings:{name:'<'}}).controller("taKnowsNothingController",["$scope",function($scope){var _self=this;this.isContactInformationShown=false;_self.contactUs=function(){_self.isContactInformationShown=true;};}]);;angular.module('tasteatlas').component('taHomeDesktopRegionWhatToEat',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-desktop-region-what-to-eat.html',controller:'taHomeDesktopRegionWhatToEatController',bindings:{details:'<'}}).controller("taHomeDesktopRegionWhatToEatController",["constants","FoodTypesService","RatingSharedService","RegionService","PageStatusSubjectService","EntityTypes","WhatToEatFiltersService","RegionLevels","$window","BotInterceptor","TextTransformService",function(constants,FoodTypesService,RatingSharedService,RegionService,PageStatusSubjectService,EntityTypes,WhatToEatFiltersService,RegionLevels,$window,BotInterceptor,TextTransformService){var _self=this;this.constants=constants;this.entityTypes=EntityTypes;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.shortenDescription=TextTransformService.shortenDescription;this.isContentLoaded=false;this.hasData=false;this.pageSizeSections=12;this.pageSize=18;this.isButtonLoading=false;this.whatToEatItems=null;this.whatToEatCollections=[];this.selectedNavFilter='selection';this.selectedSectionsList=[];this.resetFilters=false;this.selectedRegionFilter=null;this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.filtersData={};this.articleListPageSize=12;this.articleListPage=0;this.articleListData=[];this.listDataAvailable=true;this.filterItems=null;this.regionSearchWhatToEatSectionEnum={OriginallyFrom:1,PopularDishes:2,FoodProducts:3,Drinks:4,all:[1,2,3,4]};this.secondaryFilters={selection:0,mostpopular:1,bestrated:2,alphabet:3,location:4};this.topListEnumSort={none:0,selection:1,mostpopular:2,bestrated:3,worstrated:4,bylocation:5};this.navFilterItems=[];this.floatingFilterViews=[{code:'regular',icon:'icon__grid-regular'},{code:'large',icon:'icon__grid-large'}];var masterFilter,allFilters,whatToEatScrollOffset=50;this.$onInit=function(){_self.selectedSectionsList=_self.regionSearchWhatToEatSectionEnum.all;_self.isCity=_self.details.RegionLevel>=RegionLevels.City&&_self.details.RegionLevel<=RegionLevels.CapitalCity;whatToEatScrollOffset=_self.details.RegionLevel<=RegionLevels.RegionGroup?100:50;RegionService.getRegionFoodCount(_self.details.RegionId).then(function(success){_self.filtersData.regionCount=success.data;getWhereToEatFilters(_self.selectedRegionFilter||_self.details.RegionId,_self.details.RegionId);});_self.navFilterItems=loadNavFilterItems();_self.whatToEatTitles={OriginallyFrom:function(){var regionName=_self.details.Prefix?_self.details.Prefix+' '+_self.details.Name:_self.details.Name;if(_self.details.NameOverride){regionName=_self.details.PrefixOverride?_self.details.PrefixOverride+' '+_self.details.NameOverride:_self.details.NameOverride;}
return 'Originally from '+regionName||"";},PopularDishes:getMostPopularDishesTitle,FoodProducts:getFoodProductsTitle,Drinks:getDrinksTitle,BestRated:getBestRatedTitle};getTopLists().then(function(){if(_self.articleListData.Count===0){_self.listDataAvailable=false;}
else{_self.floatingFilterViews.push({code:'list',icon:'icon__grid-list'});}});};function loadNavFilterItems(){var items=[{code:'selection',name:'Selection',value:'selection'},{code:'mostpopular',name:'Most popular',value:'mostpopular'}];if(_self.isCity&&(!_self.selectedRegionFilter||_self.selectedRegionFilter===_self.details.RegionId)){items.push({code:'alphabet',name:'Alphabetically',value:'alphabet',});}
else{items.push({code:'bestrated',name:'Best rated',value:'bestrated',},{code:'alphabet',name:'Alphabetically',value:'alphabet',});}
if(!_self.isCity){items.push({code:'location',name:'By location',value:'location',});}
return items;}
function getCountryAdjective(){if(_self.details.RegionLevel<=RegionLevels.RegionGroup&&_self.details.Country&&_self.details.Country.Adjective){return _self.details.Country.Adjective||'';}
else if(_self.details.RegionLevel>=RegionLevels.Country){return _self.details.Adjective||'';}
return '';}
function getMostPopularDishesTitle(){if(_self.details.RegionLevel===RegionLevels.RegionGroup){return getMostPopularDishesTitleRegionGroup();}
else if(_self.details.RegionLevel<=RegionLevels.CapitalCity&&_self.details.FoodCount>10){if(_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId){return 'Other popular regional dishes';}
if(_self.details.Country.RegionId===_self.selectedRegionFilter){return 'Other popular '+getCountryAdjective()+' dishes';}
if(_self.selectedNavFilter==='mostpopular'||_self.selectedNavFilter==='alphabet'){console.log('drugi'+_self.details.ParentRegion);return 'Most popular dishes in '+_self.details.Name;}
return 'Other popular '+getCountryAdjective()+' dishes';}
else if(_self.details.RegionLevel<RegionLevels.RegionGroup){if(_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId){return 'Most popular regional dishes';}
return 'Most popular '
+getCountryAdjective()
+' dishes'
+(_self.details.FoodCount?' in '+_self.details.Name:'');}
else if(_self.details.RegionLevel>=RegionLevels.Country){return 'Most popular '+getCountryAdjective()+' dishes';}
return '';}
function getFoodProductsTitle(){var isRegionViewed=_self.details.RegionLevel>=RegionLevels.Region&&_self.details.RegionLevel<=RegionLevels.RegionGroup;var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(_self.details.RegionLevel>=RegionLevels.Country||_self.details.RegionLevel===RegionLevels.CapitalCity||isCountrySelected){return 'Most popular '+getCountryAdjective()+' food products';}
else if(isRegionViewed||isRegionSelected){return 'Most popular regional products';}
else{return 'Most popular local food products';}}
function getDrinksTitle(){var isRegionViewed=_self.details.RegionLevel>=RegionLevels.Region&&_self.details.RegionLevel<=RegionLevels.RegionGroup;var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(_self.details.RegionLevel>=RegionLevels.Country||_self.details.RegionLevel===RegionLevels.CapitalCity||isCountrySelected){return 'Most popular '+getCountryAdjective()+' drinks';}
else if(isRegionViewed||isRegionSelected){return 'Most popular regional drinks';}
else{return 'Most popular local drinks';}}
function getMostPopularDishesTitleRegionGroup(){var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(isCountrySelected){return 'Most popular '+_self.details.Country.Adjective+' dishes';}
else{return 'Most popular regional dishes';}}
function getBestRatedTitle(){var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(isCountrySelected){return "Best rated in "+_self.details.Country.Name;}
else if(isRegionSelected){return "Best rated in "+_self.details.ParentRegion.Name;}
else{return "Best rated";}}
this.loadMore=function(whatToEatCollection){if(_self.selectedNavFilter==='selection'){return loadMoreSelection(whatToEatCollection);}
else{return loadMoreRegular(whatToEatCollection);}};function loadMoreRegular(whatToEatCollection){_self.isButtonLoading=true;_self.whatToEatItems[whatToEatCollection].page+=1;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.whatToEatItems[whatToEatCollection].page,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter],filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,pageSize:_self.pageSize}).then(function(success){FoodTypesService.loadItemRatingDetailsDesktop(success.data.Data);_self.whatToEatItems[whatToEatCollection].Data=_self.whatToEatItems[whatToEatCollection].Data.concat(success.data.Data);}).catch(function(error){console.log(error);}).finally(function(){_self.isButtonLoading=false;});}
function loadMoreSelection(whatToEatCollection){_self.isButtonLoading=true;var whatToEatSectionEnum=_self.regionSearchWhatToEatSectionEnum[whatToEatCollection];_self.whatToEatItems[whatToEatCollection].page+=1;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{includeSections:true,page:_self.whatToEatItems[whatToEatCollection].page,userViewpointRegionId:_self.details.RegionId,pageSize:_self.pageSizeSections,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,regionSearchWhatToEatSelectionSectionEnum:[whatToEatSectionEnum]}).then(function(success){FoodTypesService.loadItemRatingDetailsDesktop(success.data.Data);_self.whatToEatItems[whatToEatCollection].Data=_self.whatToEatItems[whatToEatCollection].Data.concat(success.data.Data);}).catch(function(error){console.log(error);}).finally(function(){_self.isButtonLoading=false;});}
this.changeSecondaryFilter=function(filter){if(_self.selectedNavFilter===filter){return;}
_self.selectedNavFilter=filter;WhatToEatFiltersService.dispatch({selectedNavFilter:_self.selectedNavFilter});if(_self.selectedNavFilter==='selection'){_self.resetMainFilters();return;}
return getWhatToEat();};function addPages(data){angular.forEach(Object.keys(data),function(item){if(data[item]&&data[item].Data&&data[item].Data.length){data[item].page=0;}});}
function getWhatToEat(){if(_self.selectedNavFilter==='bestrated'&&_self.isCity){return getWhatToEatRegular();}
else if(_self.selectedNavFilter==='selection'||(_self.isCity&&_self.selectedMainFilterEnums.includes(masterFilter.Id))){return getWhatToEatSelection();}
else{return getWhatToEatRegular();}}
function getWhatToEatRegular(){_self.resetFilters=false;_self.isContentLoaded=false;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:0,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter],filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,pageSize:_self.pageSize}).then(function(success){_self.whatToEatItems={filteredCollection:success.data};_self.hasData=false;_self.whatToEatCollections=Object.keys(_self.whatToEatItems);addPages(_self.whatToEatItems);angular.forEach(_self.whatToEatCollections,function(collection){if(_self.whatToEatItems[collection]&&_self.whatToEatItems[collection].Data.length){_self.hasData=true;FoodTypesService.loadItemRatingDetailsDesktop(_self.whatToEatItems[collection].Data);}});}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isContentLoaded=true;});}
function getWhatToEatSelection(){_self.resetFilters=false;_self.isContentLoaded=false;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,pageSize:_self.pageSizeSections,includeSections:true,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter]}).then(function(success){addPages(success.data);_self.whatToEatItems=success.data;_self.hasData=false;_self.whatToEatCollections=Object.keys(_self.whatToEatItems);angular.forEach(_self.whatToEatCollections,function(collection){if(_self.whatToEatItems[collection]&&_self.whatToEatItems[collection].Data.length){_self.hasData=true;FoodTypesService.loadItemRatingDetailsDesktop(_self.whatToEatItems[collection].Data);}});if(!_self.hasData){BotInterceptor.blockIndexing();}}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isContentLoaded=true;});}
function getTopLists(){_self.articleListPage=0;_self.articleListData=[];return RegionService.getTopLists(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.articleListPage,pageSize:_self.articleListPageSize,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,typeFilter:_self.topListEnumSort[_self.selectedNavFilter]}).then(function(success){_self.articleListData=success.data;if(_self.articleListData.Count>10){_self.shouldFilterArticleLists=true;}}).catch(function(err){console.log(err);});}
this.readMore=function(item){item.descriptionExpanded=true;};this.mainFiltersChanged=function(filters,callback){var regionFilterChanged=filters.selectedRegionFilter!==null&&(_self.selectedRegionFilter!==filters.selectedRegionFilter);if(regionFilterChanged){getWhereToEatFilters(filters.selectedRegionFilter||_self.details.RegionId,_self.details.RegionId);}
var keys=Object.keys(filters);angular.forEach(keys,function(key){if(filters[key]){_self[key]=filters[key];}});_self.navFilterItems=loadNavFilterItems();if(_self.isCity&&_self.selectedNavFilter==='bestrated'&&_self.selectedRegionFilter===_self.details.RegionId){_self.changeSecondaryFilter('selection');}
if(masterFilter&&!_self.selectedMainFilterEnums.includes(masterFilter.Id)&&_self.selectedNavFilter==='selection'){_self.changeSecondaryFilter('mostpopular');}
if(regionFilterChanged){return getTopLists().then(function(){return getWhatToEat().finally(callback('search-results-whattoeat-bottom',whatToEatScrollOffset));});}
return getWhatToEat().finally(callback('search-results-whattoeat-bottom',whatToEatScrollOffset));};this.resetMainFilters=function(){_self.resetFilters=true;};this.loadMoreArticleList=function(){_self.articleListPage+=1;return RegionService.getTopLists(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.articleListPage,pageSize:_self.articleListPageSize,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,typeFilter:_self.topListEnumSort[_self.selectedNavFilter]}).then(function(success){return success.data;}).catch(function(error){console.log(error);});};this.bestInRestaurant=function(item){if(_self.details.Name!==item.Restaurant.RestaurantRegionName){return item.Restaurant.Name+' ('+item.Restaurant.RestaurantRegionName+')';}
return item.Restaurant.Name;};this.isFoodPositionVisible=function(whatToEatCollection){return whatToEatCollection==='PopularDishes'||whatToEatCollection==='Drinks'||whatToEatCollection==='FoodProducts'||_self.selectedNavFilter==='bestrated'||_self.selectedNavFilter==='mostpopular';};function getWhereToEatFilters(regionId,userViewpointRegionId){return RegionService.getFiltersForRegion(regionId,{userViewpointRegionId:userViewpointRegionId}).then(function(success){allFilters=success.data;masterFilter=allFilters.PredefinedFilters[0];_self.filterItems={masterFilter:masterFilter||{Count:0,Id:0,Name:"All"},mainFilters:allFilters.PredefinedFilters.concat(allFilters.GroupFilters)};_self.filtersData.details=_self.details;_self.filtersData.resetFilters=_self.resetFilters;_self.filtersData.filterItems=_self.filterItems;_self.filtersData.includeRegion=_self.details.RegionLevel<=RegionLevels.RegionGroup;_self.filtersData.navFilterItems=_self.navFilterItems;});}
this.bestInRestaurant=function(item){var isCity=_self.details.RegionLevel<=RegionLevels.CapitalCity;var isProvince=_self.details.RegionLevel>=RegionLevels.MicroRegion&&_self.details.RegionLevel<=RegionLevels.CountryGroup;var isContinent=_self.details.RegionLevel===RegionLevels.Continent;if(isCity){return{restaurantName:item.Restaurant.Name,regionName:''};}
else if(isProvince){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+')'};}
else if(isContinent&&item.Restaurant.RestaurantCountryName){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+', '+item.Restaurant.RestaurantCountryName+')'};}
return{restaurantName:item.Restaurant.Name,regionName:''};};this.viewMore=function(urlLink){$window.open(urlLink,'_blank');};this.getRegionName=function(item){var isCountryContinent=item.Country&&item.Country.RegionLevel===RegionLevels.Continent;var isItemCountrySameSearchCountry=_self.details.Country&&item.Country&&_self.details.Country.Name===item.Country.Name;var isItemCountrySameSearchRegion=item.Country&&_self.details.Region&&_self.details.Region.Name===item.Country.Name;var isItemCountryOnSearch=item.Region.Name&&item.Country.Name&&_self.details.Name===item.Country.Name;if(isItemCountrySameSearchCountry||isItemCountrySameSearchRegion||(!isCountryContinent&&isItemCountryOnSearch)){return item.Region.Name;}
if(item.Region.Name&&item.Country.Name&&!isCountryContinent){return item.Region.Name+", "+item.Country.Name;}
else if(item.Region.Name&&(!item.Country.Name||isCountryContinent)){return item.Region.Name;}
return item.Country.Name||"";};this.getEmblem=function(item){if(_self.details.RegionLevel&&_self.details.RegionLevel>=RegionLevels.CountryGroup){return item.Country.Emblem||item.Region.Emblem;}
return item.Region.Emblem||item.Country.Emblem;};}]);;angular.module('tasteatlas').component('taHomeItemRatingDesktop',{bindings:{item:'<'},templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-item-rating-desktop.html',controller:'taHomeItemDesktopController'}).controller("taHomeItemDesktopController",['UserSubjectService','constants','CommentService','CommentHelper','UserCacheService','LoginService','MiscellaneousHelper',function(UserSubjectService,constants,CommentService,CommentHelper,UserCacheService,LoginService,MiscellaneousHelper){var _self=this;this.constants=constants;this.isAnonymous=true;this.rating=0;this.isLoading=false;this.commentId;this.isCommented=false;this.comment;this.initialRating=0;this.viewText='RATE IT';this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.entityId=_self.item.DishId||(_self.item.IngredientId||_self.item.Id);_self.entityType=_self.item.EntityType;_self.score=_self.item.Score;_self.viewScore=CommentHelper.recalculateRatingForView(_self.item.Score);_self.scoreCount=_self.item.ScoreCount;_self.validScoreCount=_self.item.ValidScoreCount;if(_self.entityType===1){_self.comment=UserCacheService.getDishCommentById(_self.entityId);if(_self.comment){_self.isCommented=true;_self.commentId=_self.comment.CommentId;_self.initialRating=_self.comment.Rating;_self.rating=_self.comment.Rating;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);}}
if(_self.entityType===2){_self.comment=UserCacheService.getIngredientCommentById(_self.entityId);if(_self.comment){_self.commentId=_self.comment.CommentId;_self.isCommented=true;_self.initialRating=_self.comment.Rating;_self.rating=_self.comment.Rating;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);}}
if(_self.entityType===14){_self.comment=UserCacheService.getEventCommentById(_self.entityId);if(_self.comment){_self.commentId=_self.comment.CommentId;_self.isCommented=true;_self.initialRating=_self.comment.Rating;_self.rating=_self.comment.Rating;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);}}
_self.me=UserSubjectService.getUser();};this.openLogin=function(){LoginService.updateState({isLoginProcess:true});};this.vote=function(vote){if(vote===undefined)
return;_self.rating=vote;postComment();};this.entered=false;this.toggleRatingWindow=function(){_self.entered=!_self.entered;};this.starInfo=new MiscellaneousHelper.StarInfoDesktop().values;this.mouseEnter=function(value){_self.viewText=_self.starInfo[value].description;};this.onMouseLeaveRating=function(){_self.viewText='RATE IT';};this.mouseLeave=function(value){_self.viewText=_self.starInfo[value].description;};function postComment(){if(_self.rating===0)
return;_self.toggleRatingWindow();_self.isLoading=true;var rating=_self.rating;var entityType=_self.entityType;var entityId=_self.entityId;if(!_self.isCommented){CommentService.commentsPost({entityType:entityType,entityId:entityId,score:rating,content:'',photos:[]}).then(function(success){_self.isCommented=true;_self.isLoading=false;var score=_self.score?_self.score:0;var count=_self.scoreCount+1;var avg=score+(_self.rating-score)/count;_self.commentId=success.data.CommentId;_self.score=avg;_self.viewScore=CommentHelper.recalculateRatingForView(avg);_self.scoreCount=_self.scoreCount+1;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);_self.initialRating=_self.rating;}).catch(function(error){_self.isCommented=false;_self.isLoading=false;});}
if(_self.isCommented){CommentService.updateRating(_self.commentId,{rating:rating}).then(function(success){_self.isCommented=true;_self.isLoading=false;var count=_self.scoreCount;var score=_self.score?_self.score:0;var difference=_self.rating-_self.initialRating;var avg=score+difference/count;_self.score=avg;_self.viewScore=CommentHelper.recalculateRatingForView(avg);_self.initialRating=_self.rating;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);}).catch(function(error){_self.isLoading=false;});}}}]);;angular.module('tasteatlas').component('taHomeItemRating',{bindings:{item:'<',source:'<'},templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-item-rating.html',controller:'taHomeItemController'}).controller("taHomeItemController",['constants','RatingSharedService','EntityTypes',function(constants,RatingSharedService,EntityTypes){var _self=this;this.constants=constants;this.isAnonymous=true;this.rating=0;this.isLoading=false;this.temporaryCommentId=null;this.commentId;this.comment;this.UserData;this.me;this.showStatistics=false;this.dividedRating;this.$onInit=RatingSharedService.onInit;if(RatingSharedService.validScoreCount<5){_self.dividedRating=0;}else{_self.dividedRating=RatingSharedService.viewScore;}
this.$doCheck=function(){if(_self.item.isRatingOpen){if(_self.rating==0||_self.rating===null){RatingSharedService.getCommentData.call(_self);}}};this.openLogin=RatingSharedService.openLogin;this.toggleRatingOpen=RatingSharedService.toggleRatingOpen;this.onVoteChange=RatingSharedService.onVoteChange;this.vote=function(){RatingSharedService.vote.apply(_self).then(function(){sendGaEvent();if(_self.item.EntityType===EntityTypes.DISH||_self.item.EntityType===EntityTypes.INGREDIENT){_self.showStatistics=true;}})};this.closeStatistics=function(){_self.showStatistics=false;};this.removeComment=function(){if(!_self.commentId){return;}
return RatingSharedService.deleteComment.call(_self,_self.commentId).then(function(){_self.toggleRatingOpen();});};function sendGaEvent(){var source=_self.source||'other';ga('send','event','rating',source+'-rated','');}}]);;angular.module('tasteatlas').component('taHomeRegionList',{templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-list-mobile.html','desktop':'/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-list-desktop.html'};return templates[$attrs.template];},controller:'taHomeRegionListController',bindings:{template:'@',details:'<',loadMore:'&'}}).controller('taHomeRegionListController',['MainHelper','constants',function(MainHelper,constants){var _self=this;this.constants=constants;this.imagesData={};this.isButtonLoading=false;this.similarRegionTypeEnum={All:0,Cities:1,Regions:2};this.similarRegionsPages={Regions:0,Cities:0};this.$onInit=function(){angular.forEach(_self.details.Data,function(region){_self.imagesData[region.Name]=MainHelper.createImageFilter(region.RegionId,80,80);});};this.loadMoreItems=function(){_self.similarRegionsPages[_self.details.part]+=1;_self.loadMore({type:_self.similarRegionTypeEnum[_self.details.part],page:_self.similarRegionsPages[_self.details.part],part:_self.details.part}).then(function(data){angular.forEach(data,function(region){_self.imagesData[region.Name]=MainHelper.createImageFilter(region.RegionId,80,80);});});};this.getFoodCount=function(foodCount){if(foodCount===1){return foodCount+' food';}
return foodCount+' foods';};this.getRestaurantCount=function(restaurantCount){if(restaurantCount===1){return restaurantCount+' restaurant';}
return restaurantCount+' restaurants';};}]);;angular.module('tasteatlas').component('taHomeRegionRegularDesktopNew',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-regular-desktop-new.html',controller:'taHomeRegionRegularDesktopNewController',bindings:{results:'<',switchView:'&'}}).controller("taHomeRegionRegularDesktopNewController",["constants","RegionService","GeolocationService","MainHelper","$q","BotInterceptor",function(constants,RegionService,GeolocationService,MainHelper,$q,BotInterceptor){var _self=this;this.constants=constants;this.redirectToGoogleMaps=MainHelper.redirectToGoogleMaps;this.whereToEatLoaded=false;this.whereToEatHasData=true;this.isInLocation=false;this.firstLoadExecuted=false;this.regionsDetails=null;this.location={longitude:'',latitude:''};this.locationRequestFinished=false;this.boxes=[];this.regionCount=null;function promiseChain(){var promises=[RegionService.getRegionFoodCount(_self.results.RegionId),RegionService.getSimilarRegions(_self.results.RegionId,{pageSize:10})];return $q.all(promises).then(function(success){loadRegionFoodCount(success[0].data);loadRegionBoxes();_self.regionsDetails=success[1].data;_self.regionDetailsParts=Object.keys(_self.regionsDetails);}).catch(function(err){console.log(err);}).finally(function(){_self.isReady=true;});}
this.$onInit=function(){if(_self.results.FoodCount<1){BotInterceptor.blockIndexing();}
var whereToEatData=angular.fromJson(window.ta.whereToEatData);if(whereToEatData.length===0&&!_self.firstLoadExecuted){_self.whereToEatHasData=false;}
_self.firstLoadExecuted=true;_self.whereToEatLoaded=true;_self.locationRequestFinished=true;promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};RegionService.isInLocation(_self.results.RegionId,{lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){_self.isInLocation=success.data;});});}}).finally(function(){});});};this.viewAllRestaurantsWhereToEat=function(){_self.switchView({switchTo:'viewallwheretoeat'});};this.getWhereToEatItems=function(sort,location){if(location&&location.latitude&&location.longitude){_self.location=location;}
return RegionService.getWhereToEat(_self.results.RegionId,{sort:sort,lon:_self.location.longitude,lat:_self.location.latitude});};this.loadMoreRegionList=function(type,page,part){return RegionService.getSimilarRegions(_self.results.RegionId,{regionType:type,page:page,pageSize:10}).then(function(success){_self.regionsDetails[part].Data=_self.regionsDetails[part].Data.concat(success.data.Data);return success.data.Data;});};function loadRegionBoxes(){if(_self.results.ParentRegion){_self.boxes.push({Name:_self.results.ParentRegion.Name,UrlLink:_self.results.ParentRegion.UrlLink,CoverImage:_self.results.ParentRegion.CoverImage,FoodCount:_self.results.ParentRegion.FoodCount});}
if(_self.results.Country){_self.boxes.push({Name:_self.results.Country.Name,UrlLink:_self.results.Country.UrlLink,CoverImage:_self.results.Country.CoverImage,FoodCount:_self.results.Country.FoodCount});}}
function loadRegionFoodCount(regionCount){angular.forEach(regionCount,function(item){if(_self.results.Country&&item.RegionId===_self.results.Country.RegionId){_self.results.Country.FoodCount=item.Count;}
else if(_self.results.ParentRegion&&item.RegionId===_self.results.ParentRegion.RegionId){_self.results.ParentRegion.FoodCount=item.Count;}});}}]);;angular.module('tasteatlas').component('taHomeRegionRegular',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-regular.html',controller:'taHomeRegionRegularController',bindings:{results:'<',switchView:'&'}}).controller("taHomeRegionRegularController",["constants","RegionService","GeolocationService","MainHelper","BrowserService","$q","RegionLevels","BotInterceptor",function(constants,RegionService,GeolocationService,MainHelper,BrowserService,$q,RegionLevels,BotInterceptor){var _self=this;this.constants=constants;this.isOneTabBrowser=BrowserService.isOneTabBrowser();this.whereToEatLoaded=false;this.whereToEatData=[];this.isInLocation=false;this.regionsDetails=null;this.regionDetailsParts=[];this.isReady=false;this.hasWhereToEatItems=null;this.location={longitude:'',latitude:''};this.locationRequestFinished=false;this.boxes=[];this.regionCount=null;function promiseChain(){var promises=[RegionService.getRegionFoodCount(_self.results.RegionId),RegionService.getSimilarRegions(_self.results.RegionId,{pageSize:6})];return $q.all(promises).then(function(success){loadRegionFoodCount(success[0].data);loadRegionBoxes();_self.regionsDetails=success[1].data;_self.regionDetailsParts=Object.keys(_self.regionsDetails);}).catch(function(err){console.log(err);}).finally(function(){_self.isReady=true;});}
this.$onInit=function(){if(_self.results.FoodCount<1){BotInterceptor.blockIndexing();}
_self.whereToEatData=angular.fromJson(window.ta.whereToEatData);if(_self.hasWhereToEatItems===null){_self.hasWhereToEatItems=!!_self.whereToEatData.length;}
_self.whereToEatLoaded=true;_self.locationRequestFinished=true;promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};RegionService.isInLocation(_self.results.RegionId,{lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){_self.isInLocation=success.data;});});}}).finally(function(){});});};this.viewAllRestaurantsWhereToEat=function(){_self.switchView({switchTo:'viewallwheretoeat'});};this.getWhereToEatItems=function(sort,location){if(location&&location.latitude&&location.longitude){_self.location=location;}
return RegionService.getWhereToEat(_self.results.RegionId,{sort:sort,lon:_self.location.longitude,lat:_self.location.latitude});};this.loadMoreRegionList=function(type,page,part){return RegionService.getSimilarRegions(_self.results.RegionId,{regionType:type,page:page,pageSize:10}).then(function(success){_self.regionsDetails[part].Data=_self.regionsDetails[part].Data.concat(success.data.Data);return success.data.Data;});};this.redirectToGoogleMaps=MainHelper.redirectToGoogleMaps;function loadRegionBoxes(){if(_self.results.RegionLevel>=RegionLevels.Country){return;}
if(_self.results.ParentRegion){_self.boxes.push({Name:_self.results.ParentRegion.Name,UrlLink:_self.results.ParentRegion.UrlLink,CoverImage:_self.results.ParentRegion.CoverImage,FoodCount:_self.results.ParentRegion.FoodCount});}
if(_self.results.Country){_self.boxes.push({Name:_self.results.Country.Name,UrlLink:_self.results.Country.UrlLink,CoverImage:_self.results.Country.CoverImage,FoodCount:_self.results.Country.FoodCount});}}
function loadRegionFoodCount(regionCount){angular.forEach(regionCount,function(item){if(_self.results.Country&&item.RegionId===_self.results.Country.RegionId){_self.results.Country.FoodCount=item.Count;}
else if(_self.results.ParentRegion&&item.RegionId===_self.results.ParentRegion.RegionId){_self.results.ParentRegion.FoodCount=item.Count;}});}}]);;angular.module('tasteatlas').component('taHomeRegionWhatToEat',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/region/ta-home-region-what-to-eat.html',controller:'taHomeRegionWhatToEatController',bindings:{details:'<'}}).controller("taHomeRegionWhatToEatController",["constants","FoodTypesService","RatingSharedService","RegionService","PageStatusSubjectService","EntityTypes","WhatToEatFiltersService","BrowserService","RegionLevels","MainHelper","BotInterceptor",function(constants,FoodTypesService,RatingSharedService,RegionService,PageStatusSubjectService,EntityTypes,WhatToEatFiltersService,BrowserService,RegionLevels,MainHelper,BotInterceptor){var _self=this;this.constants=constants;this.entityTypes=EntityTypes;this.regionLevels=RegionLevels;this.isOneTabBrowser=BrowserService.isOneTabBrowser();this.showBannerOnSearchResultsMobile=MainHelper.showBannerOnSearchResultsMobile;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.selectedViewGrid='regular';this.isContentLoaded=false;this.hasData=false;this.pageSizeSections=20;this.pageSize=20;this.isButtonLoading=false;this.whatToEatItems=null;this.whatToEatCollections=[];this.selectedNavFilter='selection';this.selectedSectionsList=[];this.resetFilters=false;this.selectedRegionFilter=null;this.selectedMainFilterEnums=[];this.selectedMainFilterUrlLinks=[];this.filtersData={};this.articleListPageSize=12;this.articleListPage=0;this.articleListData=[];this.listDataAvailable=true;this.shouldFilterArticleLists=false;this.selectedNavFilterItems;this.filterItems=null;this.regionSearchWhatToEatSectionEnum={OriginallyFrom:1,PopularDishes:2,FoodProducts:3,Drinks:4,all:[1,2,3,4]};this.secondaryFilters={selection:0,mostpopular:1,bestrated:2,alphabet:3,location:4};this.topListEnumSort={none:0,selection:1,mostpopular:2,bestrated:3,worstrated:4,bylocation:5};this.navFilterItemsForList=[{code:'selection',name:'Selection'},{code:'mostpopular',name:'Most popular'},{code:'bestrated',name:'Best rated'},{code:'worstrated',name:'Worst rated'},{code:'bylocation',name:'By location'}];this.navFilterItems=[];this.floatingFilterViews=[{code:'regular',icon:'icon__grid-regular'},{code:'large',icon:'icon__grid-large'}];var masterFilter,allFilters,whatToEatScrollOffset=100;this.$onInit=function(){_self.selectedSectionsList=_self.regionSearchWhatToEatSectionEnum.all;_self.isCity=_self.details.RegionLevel>=RegionLevels.District&&_self.details.RegionLevel<=RegionLevels.CapitalCity;whatToEatScrollOffset=_self.details.RegionLevel<=RegionLevels.RegionGroup?150:100;RegionService.getRegionFoodCount(_self.details.RegionId).then(function(success){_self.filtersData.regionCount=success.data;getWhereToEatFilters(_self.selectedRegionFilter||_self.details.RegionId,_self.details.RegionId);});_self.navFilterItems=loadNavFilterItems();_self.whatToEatTitles={OriginallyFrom:function(){var regionName=_self.details.Prefix?_self.details.Prefix+' '+_self.details.Name:_self.details.Name;if(_self.details.NameOverride){regionName=_self.details.PrefixOverride?_self.details.PrefixOverride+' '+_self.details.NameOverride:_self.details.NameOverride;}
return 'Originally from '+regionName||"";},PopularDishes:getMostPopularDishesTitle,FoodProducts:getFoodProductsTitle,Drinks:getDrinksTitle,BestRated:getBestRatedTitle};getTopLists().then(function(){if(_self.articleListData.Count===0){_self.listDataAvailable=false;}
else{_self.floatingFilterViews.push({code:'list',icon:'icon__grid-list'});}});};function loadNavFilterItems(){var items=[{code:'selection',name:'Selection'},{code:'mostpopular',name:'Most popular'}];if(_self.isCity&&(!_self.selectedRegionFilter||_self.selectedRegionFilter===_self.details.RegionId)){items.push({code:'alphabet',name:'Alphabetically'});}
else{items.push({code:'bestrated',name:'Best rated'},{code:'alphabet',name:'Alphabetically'});}
if(!_self.isCity){items.push({code:'location',name:'By location'});}
return items;}
function getCountryAdjective(){if(_self.details.RegionLevel<=RegionLevels.RegionGroup&&_self.details.Country&&_self.details.Country.Adjective){return _self.details.Country.Adjective||'';}
else if(_self.details.RegionLevel>=RegionLevels.Country){return _self.details.Adjective||'';}
return '';}
function getMostPopularDishesTitle(){if(_self.details.RegionLevel===RegionLevels.RegionGroup){return getMostPopularDishesTitleRegionGroup();}
else if(_self.details.RegionLevel<=RegionLevels.CapitalCity&&_self.details.FoodCount>10){if(_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId){return 'Other popular regional dishes';}
return 'Most popular dishes in '+_self.details.Name;}
else if(_self.details.RegionLevel<RegionLevels.RegionGroup){if(_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId){return 'Most popular regional dishes';}
else if(_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId&&_self.details.FoodCount<10){return 'Most popular dishes in '+_self.details.Name;}
return 'Most popular '
+getCountryAdjective()
+' dishes'
+(_self.details.FoodCount?' in '+_self.details.Name:'');}
else if(_self.details.RegionLevel>=RegionLevels.Country){return 'Most popular '+getCountryAdjective()+' dishes';}
return '';}
function getFoodProductsTitle(){var isRegionViewed=_self.details.RegionLevel>=RegionLevels.Region&&_self.details.RegionLevel<=RegionLevels.RegionGroup;var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(_self.details.RegionLevel>=RegionLevels.Country||_self.details.RegionLevel===RegionLevels.CapitalCity||isCountrySelected||_self.details.IsMostPopularCity){return 'Most popular '+getCountryAdjective()+' food products';}
else if(isRegionViewed||isRegionSelected){return 'Most popular regional products';}
else{return 'Most popular local food products';}}
function getDrinksTitle(){var isRegionViewed=_self.details.RegionLevel>=RegionLevels.Region&&_self.details.RegionLevel<=RegionLevels.RegionGroup;var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(_self.details.RegionLevel>=RegionLevels.Country||_self.details.RegionLevel===RegionLevels.CapitalCity||isCountrySelected||_self.details.IsMostPopularCity){return 'Most popular '+getCountryAdjective()+' drinks';}
else if(isRegionViewed||isRegionSelected){return 'Most popular regional drinks';}
else{return 'Most popular local drinks';}}
function getMostPopularDishesTitleRegionGroup(){var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(isCountrySelected){return 'Most popular '+_self.details.Country.Adjective+' dishes';}
else{return 'Most popular regional dishes';}}
function getBestRatedTitle(){var isRegionSelected=_self.details.ParentRegion&&_self.selectedRegionFilter===_self.details.ParentRegion.RegionId;var isCountrySelected=_self.details.Country&&_self.selectedRegionFilter===_self.details.Country.RegionId;if(isCountrySelected){return "Best rated in "+_self.details.Country.Name;}
else if(isRegionSelected){return "Best rated in "+_self.details.ParentRegion.Name;}
else{return "Best rated";}}
this.loadMore=function(whatToEatCollection){if(_self.selectedNavFilter==='selection'){return loadMoreSelection(whatToEatCollection);}
else{return loadMoreRegular(whatToEatCollection);}};function loadMoreRegular(whatToEatCollection){_self.isButtonLoading=true;_self.whatToEatItems[whatToEatCollection].page+=1;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.whatToEatItems[whatToEatCollection].page,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter],filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,pageSize:_self.pageSize,removeDescription:true}).then(function(success){FoodTypesService.loadItemRatingDetailsMobile(success.data.Data);_self.whatToEatItems[whatToEatCollection].Data=_self.whatToEatItems[whatToEatCollection].Data.concat(success.data.Data);}).catch(function(error){console.log(error);}).finally(function(){_self.isButtonLoading=false;});}
function loadMoreSelection(whatToEatCollection){_self.isButtonLoading=true;var whatToEatSectionEnum=_self.regionSearchWhatToEatSectionEnum[whatToEatCollection];_self.whatToEatItems[whatToEatCollection].page+=1;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{includeSections:true,page:_self.whatToEatItems[whatToEatCollection].page,userViewpointRegionId:_self.details.RegionId,pageSize:_self.pageSizeSections,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,regionSearchWhatToEatSelectionSectionEnum:[whatToEatSectionEnum],removeDescription:true}).then(function(success){FoodTypesService.loadItemRatingDetailsMobile(success.data.Data);_self.whatToEatItems[whatToEatCollection].Data=_self.whatToEatItems[whatToEatCollection].Data.concat(success.data.Data);}).catch(function(error){console.log(error);}).finally(function(){_self.isButtonLoading=false;});}
this.changeSecondaryFilter=function(filter){if(_self.selectedNavFilter===filter){return;}
_self.selectedNavFilter=filter;WhatToEatFiltersService.dispatch({selectedNavFilter:_self.selectedNavFilter});if(_self.selectedViewGrid==='list'){return getTopLists();}
if(_self.selectedNavFilter==='selection'){_self.resetMainFilters();return;}
return getWhatToEat();};function addPages(data){angular.forEach(Object.keys(data),function(item){if(data[item]&&data[item].Data&&data[item].Data.length){data[item].page=0;}});}
function getWhatToEat(){if(_self.selectedNavFilter==='bestrated'&&_self.isCity){return getWhatToEatRegular();}
else if(_self.selectedNavFilter==='selection'||(_self.isCity&&masterFilter&&_self.selectedMainFilterEnums.includes(masterFilter.Id))){return getWhatToEatSelection();}
else{return getWhatToEatRegular();}}
function getWhatToEatRegular(){_self.resetFilters=false;_self.isContentLoaded=false;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:0,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter],filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,pageSize:_self.pageSize,removeDescription:true}).then(function(success){_self.whatToEatItems={filteredCollection:success.data};_self.hasData=false;_self.whatToEatCollections=Object.keys(_self.whatToEatItems);addPages(_self.whatToEatItems);angular.forEach(_self.whatToEatCollections,function(collection){if(_self.whatToEatItems[collection]&&_self.whatToEatItems[collection].Data.length){_self.hasData=true;FoodTypesService.loadItemRatingDetailsMobile(_self.whatToEatItems[collection].Data);}});}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isContentLoaded=true;});}
function getWhatToEatSelection(){_self.resetFilters=false;_self.isContentLoaded=false;return RegionService.getWhatToEat(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,pageSize:_self.pageSizeSections,includeSections:true,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,regionWhatToEatSortEnum:_self.secondaryFilters[_self.selectedNavFilter],removeDescription:true}).then(function(success){addPages(success.data);_self.whatToEatItems=success.data;_self.hasData=false;_self.whatToEatCollections=Object.keys(_self.whatToEatItems);angular.forEach(_self.whatToEatCollections,function(collection){if(_self.whatToEatItems[collection]&&_self.whatToEatItems[collection].Data.length){_self.hasData=true;FoodTypesService.loadItemRatingDetailsMobile(_self.whatToEatItems[collection].Data);}});if(!_self.hasData){BotInterceptor.blockIndexing();}}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isContentLoaded=true;});}
function getTopLists(){_self.articleListPage=0;_self.articleListData=[];return RegionService.getTopLists(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.articleListPage,pageSize:_self.articleListPageSize,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,typeFilter:_self.topListEnumSort[_self.selectedNavFilter]}).then(function(success){_self.articleListData=success.data;if(_self.articleListData.Count>10){_self.shouldFilterArticleLists=true;}}).catch(function(err){console.log(err);});}
this.readMore=function(item){item.descriptionExpanded=true;};this.mainFiltersChanged=function(filters,callback){var regionFilterChanged=filters.selectedRegionFilter!==null&&(_self.selectedRegionFilter!==filters.selectedRegionFilter);if(regionFilterChanged){getWhereToEatFilters(filters.selectedRegionFilter||_self.details.RegionId,_self.details.RegionId);}
var keys=Object.keys(filters);angular.forEach(keys,function(key){if(filters[key]){_self[key]=filters[key];}});_self.navFilterItems=loadNavFilterItems();_self.selectedNavFilterItems=_self.navFilterItems;if(_self.isCity&&_self.selectedNavFilter==='bestrated'&&_self.selectedRegionFilter===_self.details.RegionId){_self.changeSecondaryFilter('selection');}
if(masterFilter&&!_self.selectedMainFilterEnums.includes(masterFilter.Id)&&_self.selectedNavFilter==='selection'){_self.changeSecondaryFilter('mostpopular');}
if(_self.selectedViewGrid==='list'){_self.selectedNavFilterItems=_self.navFilterItemsForList;return getTopLists().finally(callback('search-results-whattoeat-top',50));}
if(regionFilterChanged){return getTopLists().then(function(){return getWhatToEat().finally(callback('search-results-whattoeat-bottom',whatToEatScrollOffset));});}
return getWhatToEat().finally(callback('search-results-whattoeat-bottom',whatToEatScrollOffset));};this.changeViewGrid=function(viewGrid,callback){if(_self.selectedViewGrid===viewGrid){return;}
if(_self.selectedViewGrid==='list'){getWhereToEatFilters(_self.selectedRegionFilter||_self.details.RegionId,_self.details.RegionId);}
var previouslySelectedView=_self.selectedViewGrid;_self.selectedViewGrid=viewGrid;if(previouslySelectedView==='list'&&(viewGrid==='large'||viewGrid==='regular')){_self.selectedNavFilterItems=_self.navFilterItems;_self.pageSize=viewGrid==='large'?6:20;return getWhatToEat().finally(callback('search-results-whattoeat-bottom',whatToEatScrollOffset));}
if(viewGrid==='list'){_self.selectedNavFilterItems=_self.navFilterItemsForList;getFiltersForList();return getTopLists().finally(callback('search-results-whattoeat-top',50));}
callback('search-results-whattoeat-bottom',whatToEatScrollOffset);};this.resetMainFilters=function(){_self.resetFilters=true;if(_self.selectedViewGrid==='list'){_self.changeSecondaryFilter('selection');}};this.loadMoreArticleList=function(){_self.articleListPage+=1;return RegionService.getTopLists(_self.selectedRegionFilter||_self.details.RegionId,{userViewpointRegionId:_self.details.RegionId,page:_self.articleListPage,pageSize:_self.articleListPageSize,filters:_self.selectedMainFilterEnums,groupFilterUrlLinks:_self.selectedMainFilterUrlLinks,typeFilter:_self.topListEnumSort[_self.selectedNavFilter]}).then(function(success){return success.data;}).catch(function(error){console.log(error);});};this.showWhatToEatFilters=function(){if(_self.selectedViewGrid!=='list'){return true;}
if(_self.selectedViewGrid==='list'){return _self.shouldFilterArticleLists;}};this.bestInRestaurant=function(item){var isCity=_self.details.RegionLevel<=RegionLevels.CapitalCity;var isProvince=_self.details.RegionLevel>=RegionLevels.MicroRegion&&_self.details.RegionLevel<=RegionLevels.CountryGroup;var isContinent=_self.details.RegionLevel===RegionLevels.Continent;if(isCity){return{restaurantName:item.Restaurant.Name,regionName:''};}
else if(isProvince){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+')'};}
else if(isContinent&&item.Restaurant.RestaurantCountryName){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+', '+item.Restaurant.RestaurantCountryName+')'};}
return{restaurantName:item.Restaurant.Name,regionName:''};};this.isFoodPositionVisible=function(whatToEatCollection){return whatToEatCollection==='PopularDishes'||whatToEatCollection==='Drinks'||whatToEatCollection==='FoodProducts'||_self.selectedNavFilter==='bestrated'||_self.selectedNavFilter==='mostpopular';};this.shouldShowPin=function(item){var regionLevel=_self.details.RegionLevel;var hasCountryEmblem=!!item.Country.Emblem;var hasRegionEmblem=!!item.Region.Emblem;if(regionLevel===RegionLevels.Continent){return!hasCountryEmblem&&!hasRegionEmblem;}
else{return!hasRegionEmblem||item.Region.RegionLevel>=RegionLevels.Country;}};function getWhereToEatFilters(regionId,userViewpointRegionId){return RegionService.getFiltersForRegion(regionId,{userViewpointRegionId:userViewpointRegionId}).then(function(success){allFilters=success.data;masterFilter=allFilters.PredefinedFilters[0];_self.filterItems={masterFilter:masterFilter||{Count:0,Id:0,Name:"All"},mainFilters:allFilters.PredefinedFilters.concat(allFilters.GroupFilters)};_self.filtersData.details=_self.details;_self.filtersData.resetFilters=_self.resetFilters;_self.filtersData.filterItems=_self.filterItems;_self.filtersData.includeRegion=_self.details.RegionLevel<=RegionLevels.RegionGroup;_self.filtersData.navFilterItems=_self.navFilterItems;});}
function getFiltersForList(){_self.filtersData=Object.create(null);_self.filterItems={masterFilter:masterFilter||{Count:0,Id:0,Name:"All"},mainFilters:allFilters.PredefinedFilters};_self.filtersData.details=_self.details;_self.filtersData.resetFilters=_self.resetFilters;_self.filtersData.filterItems=_self.filterItems;_self.filtersData.includeRegion=_self.details.RegionLevel<=RegionLevels.RegionGroup;_self.filtersData.navFilterItems=_self.navFilterItemsForList;angular.forEach(_self.filterItems.mainFilters,function(filterItem){delete filterItem.Count;});}
this.getRegionName=function(item){var isCountryContinent=item.Country&&item.Country.RegionLevel===RegionLevels.Continent;var isItemCountrySameSearchCountry=_self.details.Country&&item.Country&&_self.details.Country.Name===item.Country.Name;var isItemCountrySameSearchRegion=item.Country&&_self.details.Region&&_self.details.Region.Name===item.Country.Name;var isItemCountryOnSearch=item.Region.Name&&item.Country.Name&&_self.details.Name===item.Country.Name;if(isItemCountrySameSearchCountry||isItemCountrySameSearchRegion||(!isCountryContinent&&isItemCountryOnSearch)){return item.Region.Name;}
if(item.Region.Name&&item.Country.Name&&!isCountryContinent){return item.Region.Name+", "+item.Country.Name;}
else if(item.Region.Name&&(!item.Country.Name||isCountryContinent)){return item.Region.Name;}
return item.Country.Name||"";};this.getEmblem=function(item){if(_self.details.RegionLevel&&_self.details.RegionLevel>=RegionLevels.CountryGroup){return item.Country.Emblem||item.Region.Emblem;}
return item.Region.Emblem||item.Country.Emblem;};}]);;angular.module('tasteatlas').component('taHomeDesktopWhereToEatList',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-where-to-eat-list.html',controller:'taHomeDesktopWhereToEatListController',bindings:{getItems:'&',viewAll:'&',location:'<',includeNearestSort:'<',details:'<',viewAllLinkText:'<'}}).controller("taHomeDesktopWhereToEatListController",["DistanceCalculator","$scope","$timeout","constants","GlobalStatusService","EventHelperService","EntityTypes","MainHelper","RegionLevels","RatingSharedService","RestaurantDishService",function(DistanceCalculator,$scope,$timeout,constants,GlobalStatusService,EventHelperService,EntityTypes,MainHelper,RegionLevels,RatingSharedService,RestaurantDishService){var _self=this;this.constants=constants;this.entityTypes=EntityTypes;this.regionLevels=RegionLevels;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;this.getDistance=MainHelper.getDistance;this.distanceCalculator=DistanceCalculator.distanceBetweenPoints;this.calculatedDistanceObject={};this.isMoreThanFiveInitially=true;this.isContentLoaded=false;this.whereToEatFilter='best';this.whereToEat=[];this.regionName="";this.itemCounter=false;this.isRestaurantRatingOpen=false;this.restaurantItem=null;this.viewAllLinkTextVar=null;this.famousFor=[];this.filteredCertificates=[];this.firstCertificateShow;this.isRegion;var whereToEatFilters={selection:1,nearest:2,best:3,events:4};this.navFilterItems=[];this.$onInit=function(){loadNavFilterItems();_self.isContentLoaded=true;_self.whereToEat=angular.fromJson(window.ta.whereToEatData);_self.isMoreThanFiveInitially=_self.whereToEat.length>5;_self.regionName=findRegionName();loadNavFilterItems();_self.isRegion=_self.details.RegionId&&!_self.details.EntityGroupId;};this.$onChanges=function(changeObj){if(changeObj&&changeObj.includeNearestSort&&changeObj.includeNearestSort.currentValue&&changeObj.includeNearestSort.currentValue!==changeObj.includeNearestSort.previousValue){loadNavFilterItems();if(angular.isDefined(location)){this.distanceCalculatorCheck=function(restaurantLocation){_self.calculatedDistanceObject=_self.distanceCalculator(restaurantLocation[Object.keys(restaurantLocation)[0]],restaurantLocation[Object.keys(restaurantLocation)[1]],_self.location.latitude,_self.location.longitude);if(_self.userLocation==='US'&&_self.calculatedDistanceObject){return _self.calculatedDistanceObject[Object.keys(_self.calculatedDistanceObject)[0]].toFixed(2)+' mi';}
else if(_self.calculatedDistanceObject){return _self.calculatedDistanceObject[Object.keys(_self.calculatedDistanceObject)[1]].toFixed(2)+' km';}}}}};function findRegionName(){if(_self.details&&_self.details.Name){return _self.details.Prefix?_self.details.Prefix+' '+_self.details.Name:_self.details.Name;}
return " the world";}
this.changeWhereToEatFilter=function(filterType){if(_self.whereToEatFilter===filterType)return;_self.whereToEatFilter=filterType;if(_self.whereToEatFilter==='nearest'&&!_self.isLocationOn()){_self.whereToEat=[];return;}
_self.isContentLoaded=false;_self.getItems({sort:whereToEatFilters[_self.whereToEatFilter]}).then(function(success){_self.whereToEat=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.isContentLoaded=true;});};this.isLocationOn=function(){if(_self.location){return!!_self.location.latitude&&!!_self.location.longitude;}
return false;};this.onLocationActivated=function(location){_self.location=location;_self.isContentLoaded=false;_self.getItems({sort:whereToEatFilters[_self.whereToEatFilter],location:location}).then(function(success){_self.whereToEat=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.isContentLoaded=true;});};function loadNavFilterItems(){_self.navFilterItems=[];if(_self.includeNearestSort){_self.navFilterItems.push({code:'selection',name:'Selection'},{code:'nearest',name:'Nearest'});_self.whereToEatFilter='selection';}
_self.navFilterItems.push({code:'best',name:'Best'},{code:'events',name:'Events'});}
this.scroll=function(direction){var container=document.getElementById('wheretoeat-ul');MainHelper.sideScroll(container,direction,10,300,10);};this.includeHorizontalScroll=function(){return MainHelper.includeHorizontalScroll('wheretoeat-ul');};this.showAwardImage=function(item){if(!_self.details){return false;}
return item.IsMustTry&&!item.IsLegendary;};this.showLegendaryIcon=function(item){if(!_self.details){return false;}
var regionLevel;if(_self.details.RegionLevel){regionLevel=_self.details.RegionLevel;}
else if(_self.details.Region&&_self.details.Region.RegionLevel){regionLevel=_self.details.Region.RegionLevel;}
if(regionLevel===undefined||regionLevel>=RegionLevels.Country){return false;}
return item.IsLegendary;};this.isFamousFor=function(item){var isBestSort=_self.whereToEatFilter==='best';var isNearestSort=_self.whereToEatFilter==='nearest';var hasRanking=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking;var isTop=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking<=10;var isNumberOne=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking==1;if(!hasRanking){return true;}
if(isNearestSort){return!isTop;}
if(isBestSort){return!isNumberOne;}};this.concatFamousForEntities=function(dishes,other){if(!other.length){_self.famousFor=[...new Set([...dishes])];}else{_self.famousFor=[...new Set([...dishes,...other])];const keys=['Name','UrlLink'];_self.famousFor=_self.famousFor.filter((s=>o=>(k=>!s.has(k)&&s.add(k))
(keys.map(k=>o[k]).join('|')))
(new Set));}
return _self.famousFor=_self.famousFor.slice(0,3);}
this.topInTheWorldFirstDescription=function(dish){if(dish.PrecalculatedWorldRanking>1){return "Top 10 ";}
return "Most iconic ";};this.bestInTheWorld=function(dish){if(dish.Dishes&&dish.Dishes[0].PrecalculatedWorldRanking==1){return true;}
return false;};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};this.getEmblem=function(item){var isRegionSearch=_self.details.Region||_self.details.RegionId;var isCategorySearch=_self.details.EntityGroup||_self.details.EntityGroupId;var isCategoryInRegionSearch=isRegionSearch&&isCategorySearch;if(isCategoryInRegionSearch){return item.Region.Emblem;}
if(isCategorySearch){return item.Country.Emblem||item.Region.Emblem;}
if(isRegionSearch){return item.Region.Emblem;}
return item.Region.Emblem||item.Country.Emblem;};this.shouldShowPin=function(item){var hasRegion=_self.details.Region||_self.details.RegionId;if(!hasRegion){return false;}
var regionLevel=_self.details.RegionLevel;var hasCountryEmblem=!!item.Country.Emblem;var hasRegionEmblem=!!item.Region.Emblem;if(regionLevel===RegionLevels.Continent){return!hasCountryEmblem&&!hasRegionEmblem;}
else{return!hasRegionEmblem||item.Region.RegionLevel>=RegionLevels.Country;}};}]);;angular.module('tasteatlas').component('taHomeFoodList',{controller:'taHomeFoodListController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-food-list.html','desktop':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-food-list.html'};return templates[$attrs.template];},bindings:{template:'@',items:'<',loadMore:'&',details:'<'}}).controller("taHomeFoodListController",["constants","EntityTypes","FoodTypesService","RatingSharedService","BrowserService","RegionLevels","MainHelper","$window","TextTransformService",function(constants,EntityTypes,FoodTypesService,RatingSharedService,BrowserService,RegionLevels,MainHelper,$window,TextTransformService){var _self=this;this.constants=constants;this.isButtonLoading=false;this.isOneTabBrowser=BrowserService.isOneTabBrowser();this.entityTypes=EntityTypes;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.shortenDescription=TextTransformService.shortenDescription;this.showBannerOnSearchResultsMobile=MainHelper.showBannerOnSearchResultsMobile;this.hasData=function(){if(_self.items&&_self.items.Data&&_self.items.Data.length){return true;}
else{return false;}};this.getRegionName=function(item){var isCountryContinent=item.Country&&item.Country.RegionLevel===RegionLevels.Continent;var isNearMeSearch=!!_self.details.currentRegionId;if(isNearMeSearch||(item.Country&&_self.details.Region&&_self.details.Region.Name===item.Country.Name)){return item.Region.Name;}
if(item.Region.Name&&item.Country.Name&&!isCountryContinent){return item.Region.Name+", "+item.Country.Name;}
else if(item.Region.Name&&(!item.Country.Name||isCountryContinent)){return item.Region.Name;}
return item.Country.Name||"";};this.readMore=function(item){item.descriptionExpanded=true;};this.shouldShowPin=function(item){if(!_self.details.Region){return false;}
var regionLevel=_self.details.RegionLevel;var hasCountryEmblem=!!item.Country.Emblem;var hasRegionEmblem=!!item.Region.Emblem;if(regionLevel===RegionLevels.Continent){return!hasCountryEmblem&&!hasRegionEmblem;}
else{return!hasRegionEmblem||item.Region.RegionLevel>=RegionLevels.Country;}};this.bestInRestaurant=function(item){if(_self.details.Region){var isCity=_self.details.Region.RegionLevel<=RegionLevels.CapitalCity;var isProvince=_self.details.Region.RegionLevel>=RegionLevels.MicroRegion&&_self.details.Region.RegionLevel<=RegionLevels.CountryGroup;var isContinent=_self.details.Region.RegionLevel===RegionLevels.Continent;if(isCity){return{restaurantName:item.Restaurant.Name,regionName:''};}
else if(isProvince){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+')'};}
else if(isContinent&&item.Restaurant.RestaurantCountryName){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+', '+item.Restaurant.RestaurantCountryName+')'};}}
var isNearMeSearch=!!_self.details.currentRegionId;if(isNearMeSearch){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+')'};}
if(item.Restaurant.RestaurantCountryName&&item.Restaurant.RestaurantRegionName){return{restaurantName:item.Restaurant.Name,regionName:' ('+item.Restaurant.RestaurantRegionName+', '+item.Restaurant.RestaurantCountryName+')'};}
return{restaurantName:item.Restaurant.Name,regionName:''};};this.isInRestaurantLocation=function(restaurantRegionId){return restaurantRegionId===_self.details.currentRegionId;};this.startLoadMore=function(){_self.isButtonLoading=true;_self.loadMore().then(function(){_self.isButtonLoading=false;})};this.includeHorizontalScroll=function(){return MainHelper.includeHorizontalScroll('whattoeat-ul');};this.scroll=function(direction){var container=document.getElementById('whattoeat-ul');MainHelper.sideScroll(container,direction,10,300,10);};this.viewMore=function(urlLink){$window.open(urlLink,'_blank');};this.getEmblem=function(item){var isRegionSearch=_self.details.Region;var isCountry=isRegionSearch&&_self.details.Region.RegionLevel<RegionLevels.CountryGroup;var isContinent=isRegionSearch&&_self.details.Region.RegionLevel>=RegionLevels.CountryGroup;var isTag=_self.details&&_self.details.isTag;var isCategorySearch=_self.details.EntityGroupId;if(isCategorySearch||isTag){return item.Country.Emblem||item.Region.Emblem;}
if(isCountry){return item.Region.Emblem;}
if(isContinent){return item.Country.Emblem;}
return item.Region.Emblem||item.Country.Emblem;};}]);;angular.module('tasteatlas').component('taHomeMobileWhereToEatList',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-where-to-eat-list.html',controller:'taHomeMobileWhereToEatListController',bindings:{data:'<',getItems:'&',viewAll:'&',location:'<',includeNearestSort:'<',details:'<',viewAllLinkText:'<'}}).controller("taHomeMobileWhereToEatListController",["constants","DistanceCalculator","EventHelperService","EntityTypes","BrowserService","MainHelper","RegionLevels","RatingSharedService","RestaurantDishService",function(constants,DistanceCalculator,EventHelperService,EntityTypes,BrowserService,MainHelper,RegionLevels,RatingSharedService,RestaurantDishService){var _self=this;this.regionLevels=RegionLevels;this.isOneTabBrowser=BrowserService.isOneTabBrowser();this.constants=constants;this.entityTypes=EntityTypes;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;this.redirectToGoogleMaps=MainHelper.redirectToAddress;this.getDistance=MainHelper.getDistance;this.distanceCalculator=DistanceCalculator.distanceBetweenPoints;this.calculatedDistanceObject={};this.isMoreThanFiveInitially=true;this.isContentLoaded=false;this.whereToEatFilter='best';this.whereToEat=[];this.regionName="";this.viewAllData;this.isRestaurantRatingOpen=false;this.restaurantItem=null;this.famousFor=[];this.filteredCertificates=[];this.firstCertificateShow;this.isRegion;var whereToEatFilters={nearest:2,best:3,events:4};this.navFilterItems=[];this.$onInit=function(){loadNavFilterItems();_self.isRegion=_self.details.RegionId&&!_self.details.EntityGroupId;_self.whereToEat=_self.data;_self.isMoreThanFiveInitially=_self.whereToEat.length>5;_self.regionName=findRegionName();_self.isContentLoaded=true;_self.viewAllData={isVisible:function(){return _self.whereToEat.length>=3&&_self.viewAll;},mainAction:_self.viewAll,actionName:'View all'};};this.$onChanges=function(changeObj){if(changeObj&&changeObj.includeNearestSort&&changeObj.includeNearestSort.currentValue&&changeObj.includeNearestSort.currentValue!==changeObj.includeNearestSort.previousValue){loadNavFilterItems();if(angular.isDefined(location)){this.distanceCalculatorCheck=function(restaurantLocation){_self.calculatedDistanceObject=_self.distanceCalculator(restaurantLocation[Object.keys(restaurantLocation)[0]],restaurantLocation[Object.keys(restaurantLocation)[1]],_self.location.latitude,_self.location.longitude);if(_self.userLocation==='US'&&_self.calculatedDistanceObject){return _self.calculatedDistanceObject[Object.keys(_self.calculatedDistanceObject)[0]].toFixed(2)+' mi';}
else if(_self.calculatedDistanceObject){return _self.calculatedDistanceObject[Object.keys(_self.calculatedDistanceObject)[1]].toFixed(2)+' km';}}}}};function findRegionName(){if(_self.details&&_self.details.Name){return _self.details.Prefix?_self.details.Prefix+' '+_self.details.Name:_self.details.Name;}
return " the world";}
this.changeWhereToEatFilter=function(filterType){if(_self.whereToEatFilter===filterType)return;_self.whereToEatFilter=filterType;if(_self.whereToEatFilter==='nearest'&&!_self.isLocationOn()){_self.whereToEat=[];return;}
_self.isContentLoaded=false;_self.getItems({sort:whereToEatFilters[_self.whereToEatFilter]}).then(function(success){_self.whereToEat=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.isContentLoaded=true;});};this.isLocationOn=function(){if(_self.location){return!!_self.location.latitude&&!!_self.location.longitude;}
return false;};this.onLocationActivated=function(location){_self.location=location;_self.isContentLoaded=false;_self.getItems({sort:whereToEatFilters[_self.whereToEatFilter],location:location}).then(function(success){_self.whereToEat=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.isContentLoaded=true;});};this.displayText=function(value,sliceTo){if(value.length<=sliceTo){return value;}
return value.slice(0,sliceTo)+'...';};this.displayAddress=function(address){var addressParts=address.split(',');return addressParts[0];};this.isFamousFor=function(item){var isBestSort=_self.whereToEatFilter==='best';var isNearestSort=_self.whereToEatFilter==='nearest';var hasRanking=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking;var isTop=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking<=10;var isNumberOne=item.Dishes&&item.Dishes.length===1&&item.Dishes[0].PrecalculatedWorldRanking==1;if(!hasRanking){return true;}
if(isNearestSort){return!isTop;}
if(isBestSort){return!isNumberOne;}};this.concatFamousForEntities=function(dishes,other){if(!other.length){_self.famousFor=[...new Set([...dishes])];}else{_self.famousFor=[...new Set([...dishes,...other])];const keys=['Name','UrlLink'];_self.famousFor=_self.famousFor.filter((s=>o=>(k=>!s.has(k)&&s.add(k))
(keys.map(k=>o[k]).join('|')))
(new Set));}
return _self.famousFor=_self.famousFor.slice(0,3);}
this.topInTheWorldFirstDescription=function(dish){if(dish.PrecalculatedWorldRanking>1){return "Top 10 ";}
return "Most iconic ";};this.bestInTheWorld=function(dish){if(dish.Dishes&&dish.Dishes[0].PrecalculatedWorldRanking==1){return true;}
return false;};this.showAwardImage=function(item){if(!_self.details){return false;}
return item.IsMustTry&&!item.IsLegendary;};this.showLegendaryIcon=function(item){if(!_self.details){return false;}
var regionLevel;if(_self.details.RegionLevel){regionLevel=_self.details.RegionLevel;}
else if(_self.details.Region&&_self.details.Region.RegionLevel){regionLevel=_self.details.Region.RegionLevel;}
if(regionLevel===undefined||regionLevel>=RegionLevels.Country){return false;}
return item.IsLegendary;};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};function loadNavFilterItems(){_self.navFilterItems=[];_self.navFilterItems.push({code:'best',name:'Best'});if(_self.includeNearestSort){_self.navFilterItems.push({code:'nearest',name:'Nearest'});}
else{_self.changeWhereToEatFilter('best');}
_self.navFilterItems.push({code:'events',name:'Events'});}
this.getEmblem=function(item){var isRegionSearch=_self.details.Region||_self.details.RegionId;var isCategorySearch=_self.details.EntityGroup||_self.details.EntityGroupId;var isCategoryInRegionSearch=isRegionSearch&&isCategorySearch;if(isCategoryInRegionSearch){return item.Region.Emblem;}
if(isCategorySearch){return item.Country.Emblem||item.Region.Emblem;}
if(isRegionSearch){return item.Region.Emblem;}
return item.Region.Emblem||item.Country.Emblem;};this.shouldShowPin=function(item){var hasRegion=_self.details.Region||_self.details.RegionId;if(!hasRegion){return false;}
var regionLevel=_self.details.RegionLevel;var hasCountryEmblem=!!item.Country.Emblem;var hasRegionEmblem=!!item.Region.Emblem;if(regionLevel===RegionLevels.Continent){return!hasCountryEmblem&&!hasRegionEmblem;}
else{return!hasRegionEmblem||item.Region.RegionLevel>=RegionLevels.Country;}};}]);;angular.module('tasteatlas').component('taHomeSearchResultsList',{templateUrl:'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-search-results-list.html',controller:'taHomeSearchResultsListController',bindings:{listData:'<',loadMore:'&'}}).controller("taHomeSearchResultsListController",["constants","TopListArticleSharedService","TopListArticleListRanges","BrowserService",function(constants,TopListArticleSharedService,TopListArticleListRanges,BrowserService){var _self=this;this.constants=constants;this.isOneTabBrowser=BrowserService.isOneTabBrowser();this.data=[];this.articleTitles=[];this.isButtonLoading=false;this.TopListArticleListRanges=TopListArticleListRanges;this.createRandomArticleTitlePartsV2=TopListArticleSharedService.createRandomArticleTitlePartsV2;this.$onChanges=function(changeObj){if(changeObj&&changeObj.listData&&changeObj.listData.currentValue&&!angular.equals(changeObj.listData.currentValue,changeObj.listData.previousValue)){createListTitles();}};function findRandomArticleTitle(article){return _self.createRandomArticleTitlePartsV2(article);}
function createListTitles(){_self.articleTitles=[];var data=_self.listData.Data;if(data&&data.length){for(var j=0;j<data.length;j++){_self.articleTitles.push(findRandomArticleTitle(data[j]));}}}
this.loadMoreItems=function(){_self.isButtonLoading=true;_self.loadMore().then(function(data){_self.listData.Data=_self.listData.Data.concat(data.Data);createListTitles();}).finally(function(){_self.isButtonLoading=false;});};}]);;angular.module('tasteatlas').directive('taHomeViewAllRestaurants',function(){return{restrict:'E',scope:true,replace:true,templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-view-all-restaurants.html','desktop':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-view-all-restaurants.html'};return templates[$attrs.template];}};});;angular.module('tasteatlas').component('taHomeViewAll',{controller:'taHomeViewAllController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-mobile-view-all.html','desktop':'/content/scripts/app/components/home-page/home-search-results/shared/ta-home-desktop-view-all.html'};return templates[$attrs.template];},bindings:{template:'@',results:'<',switchView:'&',page:'<'}}).controller("taHomeViewAllController",["constants","$q","$scope","$sce","GeolocationService","MainHelper","DishGroupService","RegionService","PageStatusSubjectService","RegionLevels","$timeout","FoodTypesService","RatingSharedService","BotInterceptor","RestaurantDishService",function(constants,$q,$scope,$sce,GeolocationService,MainHelper,DishGroupService,RegionService,PageStatusSubjectService,RegionLevels,$timeout,FoodTypesService,RatingSharedService,BotInterceptor,RestaurantDishService){var _self=this;this.constants=constants;this.getDistance=MainHelper.getDistance;var savedPopState;this.events=[];this.response=null;this.areEventsLoaded=false;this.location={longitude:'',latitude:''};this.geoPermissionFinished=false;this.selectedNavFilterRestaurants='mostrecommended';this.selectedNavFilterEvents='selection';this.restaurantsPageSize=10;this.restaurantsPage=0;this.restaurantsList=[];this.filteredCertificates=[];this.firstCertificateShow;this.isInLocation=true;this.foods={};this.isRestaurantRatingOpen=false;this.restaurantItem=null;this.navFilterItemsEvents=[];this.navFilterItemsRestaurants=[];this.secondaryFiltersRestaurants={none:0,nearest:1,mostrecommended:2};this.secondaryFiltersEvents={none:0,selection:1,nearest:2,soonest:3,mostpopular:4};function promiseChain(){var promises=[_self.getFoods(_self.fetchId,{userViewpointRegionId:_self.fetchId,regionId:_self.regionId,sort:1,page:0,regionSearchWhatToEatSelectionSectionEnum:getRegionSearchWhatToEatSelectionSectionEnum(),pageSize:20,includeSections:false})];return $q.all(promises).then(function(success){loadRatingData(success[0].data.Data);_self.foods.Data=success[0].data.Data;_self.foods.selectedViewGrid='horizontal-list';}).catch(function(err){console.log(err);});}
function afterLocationPromiseChain(){_self.geoPermissionFinished=true;var promises=[_self.getWhereToEatEvents(_self.fetchId,{regionId:_self.regionId,sort:_self.secondaryFiltersEvents[_self.selectedNavFilterEvents],lon:_self.location.longitude,lat:_self.location.latitude,pageSize:10,page:0})];return $q.all(promises).then(function(success){_self.events=success[0].data;if(_self.isRegion||_self.isDishGroupInRegion){RegionService.isInLocation(_self.fetchId,{lat:_self.location.latitude,lon:_self.location.longitude}).then(function(success){_self.isInLocation=success.data;loadNavFilterItems();if(_self.isInLocation){_self.changeSecondaryFilterRestaurants('nearest');}
else{getAllRestaurants();}}).catch(function(err){console.log(err);});}
else{loadNavFilterItems();getAllRestaurants();}}).catch(function(err){console.log(err);}).finally(function(){_self.areEventsLoaded=true;PageStatusSubjectService.dispatch({isSectionLoaded:true});});}
this.getWhereToEatEvents=null;this.getWhereToEatRestaurants=null;this.getFoods=null;this.eventSectionTitle="";this.restaurantSectionTitle="";this.headerTitle="";this.foodsHeaderTitle="";this.fetchId=null;this.regionId=null;this.regionName="";this.originalUrlLink="";this.viewAllFoodsLabel="";function initData(){var regionName;if(_self.isDishGroup){_self.fetchId=_self.results.EntityGroupId;_self.getWhereToEatEvents=DishGroupService.getWhereToEatEvents;_self.getWhereToEatRestaurants=DishGroupService.getWhereToEatRestaurants;_self.getFoods=DishGroupService.getDishesNew;_self.eventSectionTitle=_self.results.Name+" events";_self.restaurantSectionTitle="The best traditional restaurants serving "+_self.results.Name.toLowerCase();_self.headerTitle="Where to eat "+_self.results.Name;_self.foodsHeaderTitle=_self.results.Name+" types";_self.originalUrlLink=_self.results.UrlLink;_self.viewAllFoodsLabel="View all "+_self.results.Name.toLowerCase()+" types";}
else if(_self.isRegion){regionName=(_self.results.Prefix?_self.results.Prefix+' '+_self.results.Name:_self.results.Name);_self.fetchId=_self.results.RegionId;_self.regionId=_self.results.RegionId;_self.regionName=_self.results.Name;_self.getWhereToEatEvents=RegionService.getWhereToEatEvents;_self.getWhereToEatRestaurants=RegionService.getWhereToEatRestaurants;_self.getFoods=RegionService.getWhatToEat;_self.eventSectionTitle="Food events in "+regionName;_self.restaurantSectionTitle="The best traditional restaurants in "+regionName;_self.headerTitle="Where to eat local in "+regionName;_self.foodsHeaderTitle="What to eat in "+regionName;_self.originalUrlLink=_self.results.UrlLink;_self.viewAllFoodsLabel="View all local foods";}
else if(_self.isDishGroupInRegion){regionName=(_self.results.Region.Prefix?_self.results.Region.Prefix+' '+_self.results.Region.Name:_self.results.Region.Name);_self.fetchId=_self.results.EntityGroup.EntityGroupId;_self.regionId=_self.results.Region.RegionId;_self.regionName=_self.results.Region.Name;_self.getWhereToEatEvents=DishGroupService.getWhereToEatEvents;_self.getWhereToEatRestaurants=DishGroupService.getWhereToEatRestaurants;_self.getFoods=DishGroupService.getDishesNew;_self.eventSectionTitle=_self.results.EntityGroup.Name+" events in "+regionName;_self.restaurantSectionTitle="The best traditional restaurants serving "+_self.results.EntityGroup.Name.toLowerCase()+' in '+regionName;_self.headerTitle="Where to eat "+_self.results.EntityGroup.Name+' in '+regionName;_self.foodsHeaderTitle=getGroupInRegionTitle();_self.originalUrlLink=_self.results.Region.UrlLink+'/'+_self.results.EntityGroup.UrlLink;_self.viewAllFoodsLabel="View all "+getGroupInRegionTitle();}}
this.$onInit=function(){_self.areEventsLoaded=false;_self.restaurantsPageSize=_self.template==='mobile'?10:12;if(!_self.page&&_self.template==='mobile'){angular.element(document.querySelector('#header-id')).css('z-index','-1');}
_self.isDishGroup=_self.results.EntityGroupId&&!_self.results.RegionId;_self.isRegion=_self.results.RegionId&&!_self.results.EntityGroupId;_self.isDishGroupInRegion=_self.results.EntityGroup&&_self.results.Region;initData();promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){if(data==='DENIED'||data==='TROUBLE'){_self.location={longitude:'',latitude:''};}
else{_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};}
afterLocationPromiseChain();});}
else{afterLocationPromiseChain();}});});savedPopState=window.onpopstate;window.onpopstate=function(evt){$timeout(function(){_self.goBack();});};};this.$onDestroy=function(){angular.element(document.querySelector('#header-id')).css('z-index','110');window.onpopstate=savedPopState;};this.goBack=function(){_self.switchView({switchTo:'searchresults'});};this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};function loadNavFilterItems(){_self.navFilterItemsEvents=[{code:'selection',name:'Selection'}];_self.navFilterItemsRestaurants=[{code:'mostrecommended',name:'Most recommended'}];if(_self.isInLocation){_self.navFilterItemsEvents.push({code:'nearest',name:'Nearest'},{code:'soonest',name:'Soonest'},{code:'mostpopular',name:'Most popular'});_self.navFilterItemsRestaurants.unshift({code:'nearest',name:'Nearest'});}
else{_self.navFilterItemsEvents.push({code:'soonest',name:'Soonest'},{code:'mostpopular',name:'Most popular'});}}
function getAllRestaurants(){_self.areRestaurantsLoaded=false;return _self.getWhereToEatRestaurants(_self.fetchId,{regionId:_self.regionId,sort:_self.secondaryFiltersRestaurants[_self.selectedNavFilterRestaurants],lon:_self.location.longitude,lat:_self.location.latitude,pageSize:_self.restaurantsPageSize,page:_self.restaurantsPage}).then(function(success){_self.response=success.data;_self.restaurantsList=_self.restaurantsList.concat(_self.response.Data);if(_self.restaurantsList.length<5){BotInterceptor.blockIndexing();}}).finally(function(){_self.areRestaurantsLoaded=true;});}
this.concatFamousForEntities=function(dishes,other){_self.famousFor=[...new Set([...dishes||[],...other||[]])];const keys=['Name','UrlLink'];_self.famousFor=_self.famousFor.filter((s=>o=>(k=>!s.has(k)&&s.add(k))
(keys.map(k=>o[k]).join('|')))
(new Set));return _self.famousFor=_self.famousFor.slice(0,3);}
this.loadMore=function(){_self.restaurantsPage+=1;return getAllRestaurants();};this.changeSecondaryFilterRestaurants=function(filter){if(_self.selectedNavFilterRestaurants===filter){return;}
_self.selectedNavFilterRestaurants=filter;_self.restaurantsPage=0;_self.restaurantsList=[];if(_self.selectedNavFilterRestaurants==='nearest'&&!_self.isLocationOn()){return;}
return getAllRestaurants();};this.changeWhereToEatEventsFilter=function(filterType){if(_self.selectedNavFilterEvents===filterType)return;_self.selectedNavFilterEvents=filterType;if(_self.selectedNavFilterEvents==='nearest'&&!_self.isLocationOn()){_self.events={Data:[]};return;}
_self.areEventsLoaded=false;_self.getWhereToEatEvents(_self.fetchId,{regionId:_self.regionId,sort:_self.secondaryFiltersEvents[_self.selectedNavFilterEvents],lon:_self.location.longitude,lat:_self.location.latitude,pageSize:10,page:0}).then(function(success){_self.events=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.areEventsLoaded=true;});};this.isLocationOn=function(){if(_self.location){return!!_self.location.latitude&&!!_self.location.longitude;}
return false;};this.onLocationActivatedEvents=function(location){_self.location=location;_self.areEventsLoaded=false;return _self.getWhereToEatEvents(_self.fetchId,{regionId:_self.regionId,sort:_self.secondaryFiltersEvents[_self.selectedNavFilterEvents],lon:_self.location.longitude,lat:_self.location.latitude,pageSize:10,page:0}).then(function(success){_self.events=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.areEventsLoaded=true;});};this.onLocationActivatedRestaurants=function(location){_self.location=location;return getAllRestaurants();};this.getRankingLabel=function(ranking){if(!ranking){return "";}
if(ranking>1){return "Top 10 in the world";}
return "Most iconic in the world";};this.getRestaurantAddress=function(restaurant){var city=restaurant.Region.Name||"";var country=restaurant.Region.CountryName||"";var address=restaurant.Address||"";var entityGroupId=_self.results.EntityGroupId;if(_self.results.EntityGroup){entityGroupId=_self.results.EntityGroup.EntityGroupId;}
var regionId=_self.results.RegionId;var regionLevel=_self.results.RegionLevel;if(_self.results.Region){regionId=_self.results.Region.RegionId;regionLevel=_self.results.Region.RegionLevel;}
if(entityGroupId&&!_self.isDishGroupInRegion){return city+(country?", "+country:"");}
else if(regionId&&(regionLevel>=RegionLevels.Region)){return city;}
else if(_self.isInLocation){return address.split(',')[0];}
return "";};this.showAwardImage=function(item){if(_self.results.RegionLevel===undefined){return false;}
return item.IsMustTry&&!item.IsLegendary;};this.showLegendaryIcon=function(item){var regionLevel;if(_self.results.RegionLevel){regionLevel=_self.results.RegionLevel;}
else if(_self.results.Region&&_self.results.Region.RegionLevel){regionLevel=_self.results.Region.RegionLevel;}
if(regionLevel===undefined||regionLevel>=RegionLevels.Country){return false;}
return item.IsLegendary;};this.showBannerInRestaurantsList=function(index){if(index===0){return true;}
if(index%3===0){return true;}
return false;};this.showDirections=function(restaurant){if(!restaurant.Location||!_self.isInLocation){return false;}
if(restaurant.Location&&restaurant.Location.Distance){return restaurant.Location.Distance<100;}
return _self.isInLocation&&_self.location&&_self.location.latitude&&_self.location.longitude;};function getGroupInRegionTitle(){var entity=_self.results.EntityGroup;var region=_self.results.Region;if(entity&&entity.Plural&&region){if(region.Adjective){return region.Adjective+' '+entity.Name.toLowerCase()+' types';}
return entity.Name.charAt(0).toUpperCase()+entity.Name.slice(1).toLowerCase()+' types in '+region.Name;}};function getRegionSearchWhatToEatSelectionSectionEnum(){if(!_self.isRegion){return null;}
var isCity=_self.results.RegionLevel<=RegionLevels.CapitalCity;return isCity?1:0;};function loadRatingData(data){if(_self.template==='mobile'){FoodTypesService.loadItemRatingDetailsMobile(data);}
else{FoodTypesService.loadItemRatingDetailsDesktop(data);}}
this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};this.shouldAlignRecommendedDishesToBottom=MainHelper.shouldAlignRecommendedDishesToBottom;}]);;angular.module('tasteatlas').component('taSearchResultsEvents',{controller:'taSearchResultsEventsController',bindings:{events:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/home-page/home-search-results/shared/ta-mobile-search-results-events.html','desktop':'/content/scripts/app/components/home-page/home-search-results/shared/ta-desktop-search-results-events.html'};return templates[$attrs.template];},}).controller("taSearchResultsEventsController",["constants","EventHelperService","MainHelper",function(constants,EventHelperService,MainHelper){var _self=this;this.constants=constants;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;this.includeHorizontalScroll=function(id){return MainHelper.includeHorizontalScroll(id);};this.scroll=function(direction,id){var container=document.getElementById(id);MainHelper.sideScroll(container,direction,10,300,10);};}]);;angular.module('tasteatlas').component('taIngredientDesktopComments',{bindings:{details:'<',rating:'<',previewTitleInit:'&'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-desktop-comments/ta-ingredient-desktop-comments.html',controller:'taIngredientDesktopCommentsController'}).controller('taIngredientDesktopCommentsController',['$timeout','IngredientService','UserSubjectService','$q','UserCommentStatusService','PageStatusSubjectService','RatingSharedService','BotInterceptor','CommentHelper',function($timeout,IngredientService,UserSubjectService,$q,UserCommentStatusService,PageStatusSubjectService,RatingSharedService,BotInterceptor,CommentHelper){var _self=this;this.filter={pageSize:10,pageIndex:1,IsCritic:false};this.reviews=[];this.userCommentStatus={};this.comment=undefined;this.showMissTxt=false;this.ratingCardActions=null;_self.isAnonymous=true;this.$onInit=function(){BotInterceptor.blockIndexing();UserCommentStatusService.subscribe(_ingredientCommentPageObserver);_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);_self.ratingCardActions.hideDetailedInformation=true;_self.previewTitleInit({data:{type:'comments',main:{upper:'Comments'}}});var promises=[IngredientService.getUserIngredientComment(_self.details.EntityId),IngredientService.getIngredientRating(_self.details.EntityId),IngredientService.getIngredientReviews(_self.details.EntityId,_self.filter),IngredientService.getIngredientOverview(_self.details.EntityId)];$q.all(promises).then(function(success){_self.comment=success[0].data;var rating=success[1].data;_self.reviews=success[2].data;_self.overviewDetails=success[3].data;UserCommentStatusService.dispatch({dividedScore:rating.DividedScore,validScoreCount:rating.ValidScoreCount,scoreCount:rating.ScoreCount,commentRating:rating.Score,userRating:_self.comment?CommentHelper.recalculateRatingForView(_self.comment.RatingScore):0,isCommentProcess:false,comment:_self.comment});_self.userCommentStatus=UserCommentStatusService.getCurrentState();PageStatusSubjectService.dispatch({isSectionLoaded:true});$timeout(function(){_self.showMissTxt=true;});},function(error){console.log(error);});};this.isCommentsLoading=false;this.loadMoreComments=function(){if(_self.reviews.Count===_self.reviews.length)
return;_self.isCommentLoading=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;IngredientService.getIngredientReviews(_self.details.EntityId,{pageSize:_self.reviews.PageSize,pageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isCommentsLoading=false;}).catch(function(error){console.log(error);});};var _ingredientCommentPageObserver=function(data){_self.comment=data.comment;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_ingredientCommentPageObserver);};}]);;angular.module('tasteatlas').component('taIngredientDesktopMain',{bindings:{id:'<',activePage:'<',additionalRegionId:'<',recipeVariationId:'<',},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-desktop-overview/ta-ingredient-desktop-main.html',controller:'ta-ingredient-desktop-main-controller'}).controller("ta-ingredient-desktop-main-controller",['IngredientService','constants','$q','MainHelper','UserCommentStatusService','CommentHelper','PageStatusSubjectService','GlobalStatusService','UserCacheService','$filter','RegionLevels',function(IngredientService,constants,$q,MainHelper,UserCommentStatusService,CommentHelper,PageStatusSubjectService,GlobalStatusService,UserCacheService,$filter,RegionLevels){var _self=this;this.constants=constants;this.regionLevels=RegionLevels;this.imageData={};this.regionsImageData=[];this.moreRegionsVisible=false;this.pageStatus=PageStatusSubjectService.state;this.ingredientRating=null;this.previewTitleData;this.maxDetailedAdditionalRegions=5;this.$onInit=function(){PageStatusSubjectService.subscribe(_ingredientPageStatusObserver);GlobalStatusService.setMainPageType("INGREDIENT");PageStatusSubjectService.dispatch({page:_self.activePage});_self.preloadedDetails=window.ta.details;_self.foodIngredients={data:_self.preloadedDetails.FoodIngredients,cutData:_self.preloadedDetails.FoodIngredients.slice(0,8),isValid:!!$filter('filter')(_self.preloadedDetails.FoodIngredients,function(item){return item.Image&&item.Image.Image;})[0]};var promises=[IngredientService.getUserIngredientComment(_self.id),IngredientService.getIngredientRating(_self.id)];$q.all(promises).then(function(success){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);UserCommentStatusService.subscribe(_ingredientDesktopMainObserver);var comment=success[0].data;_self.ingredientRating=success[1].data;UserCommentStatusService.dispatch({dividedScore:_self.ingredientRating.DividedScore,validScoreCount:_self.ingredientRating.ValidScoreCount,scoreCount:_self.ingredientRating.ScoreCount,commentRating:_self.ingredientRating.Score,userRating:comment?CommentHelper.recalculateRatingForView(comment.RatingScore):0,isCommentProcess:false,comment:comment});_self.preloadedDetails.Rating={DividedScore:_self.preloadedDetails.Score.DividedScore,ValidScoreCount:_self.preloadedDetails.Score.ValidScoreCount,ScoreCount:_self.preloadedDetails.Score.ScoreCount,Score:_self.preloadedDetails.Score.Score,CommentId:comment?comment.CommentId:null,IsApproved:comment?comment.IsApproved:null,IsCommented:!!comment};PageStatusSubjectService.dispatch({isLoaded:true,page:_self.activePage});}).catch(function(error){console.log(error);});};this.showMoreRegions=function(){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,50,50);for(var i=0;i<_self.preloadedDetails.AdditionalRegions.length;i++){_self.regionsImageData.push(MainHelper.createImageFilter(_self.preloadedDetails.AdditionalRegions[i].Current.RegionId||_self.preloadedDetails.AdditionalRegions[i].Parent.RegionId,50,50));}
_self.moreRegionsVisible=true;};this.hideMoreRegions=function(){_self.regionsImageData=[];_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);_self.moreRegionsVisible=false;};this.ratingActions={getFoodIds:function(){return{entityId:_self.preloadedDetails.EntityId,entityTypeEnum:_self.preloadedDetails.EntityType};},displayFoodName:function(){return _self.preloadedDetails.Name;},getWannaTryItem:function(){return UserCacheService.getIngredientWannaTry(_self.preloadedDetails.EntityId);},getDetails:function(){return _self.preloadedDetails;}};this.refreshRatingData=function(){var promises=[IngredientService.getUserIngredientComment(_self.id),IngredientService.getIngredientRating(_self.id)];return $q.all(promises).then(function(success){var comment=success[0].data;_self.ingredientRating=success[1].data;UserCommentStatusService.dispatch({dividedScore:_self.ingredientRating.DividedScore,validScoreCount:_self.ingredientRating.ValidScoreCount,scoreCount:_self.ingredientRating.ScoreCount,commentRating:_self.ingredientRating.Score,userRating:comment?CommentHelper.recalculateRatingForView(comment.RatingScore):0,isCommentProcess:true,comment:comment});});};this.onPreviewTitleChange=function(data){_self.previewTitleData=data;};var _ingredientDesktopMainObserver=function(data){_self.userCommentStatus=data;};var _ingredientPageStatusObserver=function(data){_self.pageStatus=data;MainHelper.addDesktopPagePlaceholder(_self.pageStatus.isSectionLoaded,'.ingredient__tabs','ingredient__holder');};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_ingredientDesktopMainObserver);PageStatusSubjectService.unsubscribe(_ingredientPageStatusObserver);};}]);;angular.module('tasteatlas').component('taIngredientDesktopOverview',{bindings:{details:'<',onAllLoaded:'&',rating:'<',additionalRegionId:'<'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-desktop-overview/ta-ingredient-desktop-overview.html',controller:'taIngredientDesktopOverviewController'}).controller('taIngredientDesktopOverviewController',['IngredientService','constants','$q','GeolocationService','MainHelper','RecipeService','PageStatusSubjectService','RatingSharedService',function(IngredientService,constants,$q,GeolocationService,MainHelper,RecipeService,PageStatusSubjectService,RatingSharedService){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.shops=[];this.location={longitude:'',latitude:'',hasLocation:false};this.pairingTips={};this.partOf;this.partOfPageSize=4;this.partOfPage=0;this.otherVarieties;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.isLoaded=false;this.ratingCardActions=null;this.similarFoodData=[];this.moreFromRegion=[];this.recipeVariations=[];this.mainRecipeVariation;this.$onInit=function(){IngredientService.GetIngredientTypes(_self.details.EntityId,0).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data===GeolocationService.granted()){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data.coords===undefined){afterLocationPromiseChain();return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude,hasLocation:true};afterLocationPromiseChain();});}
else{afterLocationPromiseChain();}});});};function promiseChain(){var promises=[IngredientService.GetIngredientPairs(_self.details.EntityId),IngredientService.GetIngredientEvents(_self.details.EntityId,{PageIndex:1,PageSize:6}),IngredientService.getSimilarIngredients(_self.details.EntityId),IngredientService.getSimilarIngredientsInRegion({ingredientId:_self.details.EntityId,additionalRegionId:_self.additionalRegionId}),IngredientService.GetIngredientPartOf(_self.details.EntityId,{pageSize:_self.partOfPageSize,page:_self.partOfPage}),IngredientService.getIngredientOverview(_self.details.EntityId)];if(_self.details.HasRecipes){promises.push(IngredientService.getRecipeVariations(_self.details.EntityId));promises.push(IngredientService.getMainRecipeVariationSimpleDetails(_self.details.EntityId));}
return $q.all(promises).then(function(success){if(_self.details.HasRecipes){_self.recipeVariations=success[6].data;_self.mainRecipeVariation=success[7].data;}
_self.pairingTips=success[0].data;_self.events=success[1].data;_self.similarFoodData=success[2].data;_self.moreFromRegion=success[3].data;_self.partOf=success[4].data;_self.overviewDetails=success[5].data;if(!_self.details.IsGroup){IngredientService.getSiblings(_self.details.EntityId,{pageSize:50,page:0}).then(function(success){_self.otherVarieties=success.data;});}},function(error){console.log(error);});}
function afterLocationPromiseChain(){var promises=[IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:5,pageIndex:1,longitude:_self.location.longitude,latitude:_self.location.latitude})];return $q.all(promises).then(function(success){_self.shops=success[0].data;PageStatusSubjectService.dispatch({isSectionLoaded:true});},function(error){console.log(error);});}
this.events=undefined;this.eventsLoading=false;this.onLoadMoreEvents=function(){if(_self.events.Data.length>_self.events.Count)
return;_self.events.PageIndex=_self.events.PageIndex+1;_self.eventsLoading=true;IngredientService.GetIngredientEvents(_self.details.EntityId,{PageIndex:_self.events.PageIndex,PageSize:_self.events.PageSize}).then(function(success){_self.events.Data=_self.events.Data.concat(success.data.Data);_self.eventsLoading=false;}).catch(function(error){_self.eventsLoading=false;console.log(error);});};this.onFoodTypesOrderChange=function(orderBy){IngredientService.GetIngredientTypes(_self.details.EntityId,orderBy).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});};this.getMoreFromRegionTitle=function(){return MainHelper.getMoreFromRegionTitle(_self.moreFromRegion);};this.loadMorePartOf=function(){_self.partOfPage+=1;IngredientService.GetIngredientPartOf(_self.details.EntityId,{pageSize:_self.partOfPageSize,page:_self.partOfPage}).then(function(success){_self.partOf.Data=_self.partOf.Data.concat(success.data.Data);}).catch(function(err){console.log(err);});};}]);;angular.module('tasteatlas').component('taIngredientDesktopWhereToBuy',{bindings:{details:'<',previewTitleInit:'&'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-desktop-where-to-buy/ta-ingredient-desktop-where-to-buy.html',controller:'taIngredientDesktopWhereToBuyController'}).controller('taIngredientDesktopWhereToBuyController',['$q','IngredientService','GeolocationService','MainHelper','GoogleMapLibrary','PageStatusSubjectService','BotInterceptor',function($q,IngredientService,GeolocationService,MainHelper,GoogleMapLibrary,PageStatusSubjectService,BotInterceptor){var _self=this;this.shops=[];this.isAutoCompleteVisiable=false;this.reviewPageSize=100;this.reviewPageIndex=1;this.location={longitude:'',latitude:'',hasLocation:false};this.hasLocation=false;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.$onInit=function(){BotInterceptor.blockIndexing();_self.previewTitleInit({data:{type:'wheretobuy',upper:'WHERE TO '+(_self.details.IsDrink?'DRINK':'TASTE')+' and buy',main:{upper:_self.details.Name,lower:null},sub:null,extra:null,image:_self.details.PreviewImage}});promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data.coords===undefined){afterLocationPromiseChain();return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude,hasLocation:true};afterLocationPromiseChain();},function(error){console.log('error');});}
else{afterLocationPromiseChain();}});});};this.isShopsLoading=false;this.loadMoreShops=function(){if(_self.shops.PageIndex>=_self.shops.NumberOfPages)
return;_self.isShopsLoading=true;_self.shops.PageIndex=_self.shops.PageIndex+1;IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:_self.shops.PageSize,pageIndex:_self.shops.PageIndex,longitude:_self.location.longitude,latitude:_self.location.latitude}).then(function(success){_self.shops.Data=_self.shops.Data.concat(success.data.Data);_self.isShopsLoading=false;},function(error){console.log(error);});};function promiseChain(){var promises=[IngredientService.getIngredientShopLocations(_self.details.EntityId)];return $q.all(promises).then(function(success){_self.shopsLocation=success[0].data;}).catch(function(error){console.log(error);});}
function afterLocationPromiseChain(){var promises=[IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:_self.reviewPageSize,pageIndex:_self.reviewPageIndex,longitude:_self.location.longitude,latitude:_self.location.latitude})];return $q.all(promises).then(function(success){_self.shops=success[0].data;}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});});}
this.activeShopId;this.openMarker=function(id){if(id===undefined)
return;GoogleMapLibrary.triggerMarker(id);_self.activeShopId=id;};}]);;angular.module('tasteatlas').component('taIngredientMobileComments',{bindings:{details:'<',rating:'<'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-mobile-comments/ta-ingredient-mobile-comments.html',controller:'ta-ingredient-mobile-comments-controller'}).controller('ta-ingredient-mobile-comments-controller',['IngredientService',function(IngredientService){var _self=this;this.userCommentStatus={};this.filter={pageSize:10,pageIndex:1};this.promises=[];this.getReviews;this.$onInit=function(){_self.promises=[IngredientService.getUserIngredientComment(_self.details.EntityId),IngredientService.getIngredientRating(_self.details.EntityId),IngredientService.getIngredientReviews(_self.details.EntityId,_self.filter)];this.getReviews=IngredientService.getIngredientReviews;};}]);;angular.module('tasteatlas').component('taIngredientMobileMain',{bindings:{ingredientId:'<',activePage:'<',additionalRegionId:'<',recipeVariationId:'<',},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-mobile-overview/ta-ingredient-mobile-main.html',controller:'ta-ingredient-mobile-main-controller'}).controller("ta-ingredient-mobile-main-controller",["constants","$q","MainHelper","UserCommentStatusService","PageStatusSubjectService","CommentHelper","IngredientService","$filter","GlobalStatusService","RegionLevels",function(constants,$q,MainHelper,UserCommentStatusService,PageStatusSubjectService,CommentHelper,IngredientService,$filter,GlobalStatusService,RegionLevels){var _self=this;this.constants=constants;this.regionLevels=RegionLevels;this.pageStatus=PageStatusSubjectService.state;this.userCommentStatus={};this.imageData='';this.moreRegionsVisible=false;this.regionsImageData=[];this.ingredientRating=null;this.galleryPopupOpen=false;this.urlLinks=[{link:'',preview:'Overview',isVisible:true},{link:'wheretobuy',preview:'Where to buy',isVisible:true},{link:'recipe',preview:'Recipe',isVisible:true},{link:'comments',preview:'Comments',isVisible:true}];this.$onInit=function(){PageStatusSubjectService.subscribe(_ingredientPageStatusObserver);GlobalStatusService.setMainPageType("INGREDIENT");PageStatusSubjectService.dispatch({page:_self.activePage});_self.preloadedDetails=window.ta.details;_self.urlLinks=[{link:'',preview:'Overview',isVisible:true},{link:'wheretobuy',preview:'Where to buy',isVisible:true},{link:'recipe',preview:'Recipe',isVisible:_self.preloadedDetails.HasRecipes},{link:'comments',preview:'Comments',isVisible:true}];_self.preloadedDetails.foodIngredients={data:_self.preloadedDetails.FoodIngredients,isValid:!!$filter('filter')(_self.preloadedDetails.FoodIngredients,function(item){return item.Image&&item.Image.Image;})[0]};var promises=[IngredientService.getUserIngredientComment(_self.ingredientId),IngredientService.getIngredientRating(_self.ingredientId)];$q.all(promises).then(function(success){_self.ingredientRating=success[1].data;_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,65,65);_self.isLoaded=true;_self.details={previewImage:_self.preloadedDetails.PreviewImage!==null?_self.preloadedDetails.PreviewImage.Image:null,regionName:_self.preloadedDetails.Region.Current.Name,countryName:_self.preloadedDetails.Region.Parent.Name,title:_self.preloadedDetails.Name,regionImage:_self.preloadedDetails.Region.Current.EmblemImage,countryImage:_self.preloadedDetails.Region.Parent.EmblemImage,urlLink:_self.preloadedDetails.EntityUrlLink};if(location.href.includes('recipe')&&_self.preloadedDetails.HasRecipes===false){PageStatusSubjectService.dispatch({page:''});}
UserCommentStatusService.subscribe(_ingredientMobileMainObserver);var comment=success[0].data;_self.preloadedDetails.Rating={DividedScore:_self.preloadedDetails.Score.DividedScore,ValidScoreCount:_self.preloadedDetails.Score.ValidScoreCount,ScoreCount:_self.preloadedDetails.Score.ScoreCount,Score:_self.preloadedDetails.Score.Score,CommentId:comment?comment.CommentId:null,IsApproved:comment?comment.IsApproved:null,IsCommented:!!comment};UserCommentStatusService.dispatch({dividedScore:_self.ingredientRating.DividedScore,validScoreCount:_self.ingredientRating.ValidScoreCount,scoreCount:_self.ingredientRating.ScoreCount,commentRating:_self.ingredientRating.Score,userRating:comment?CommentHelper.recalculateRatingForView(comment.RatingScore):0,isCommentProcess:false,comment:comment});PageStatusSubjectService.dispatch({isLoaded:true,page:_self.activePage});}).catch(function(error){console.log(error);});};this.showMoreRegions=function(){_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,50,50);for(var i=0;i<_self.preloadedDetails.AdditionalRegions.length;i++){_self.regionsImageData.push(MainHelper.createImageFilter(_self.preloadedDetails.AdditionalRegions[i].Current.RegionId||_self.preloadedDetails.AdditionalRegions[i].Parent.RegionId,50,50));}
_self.moreRegionsVisible=true;};this.hideMoreRegions=function(){_self.regionsImageData=[];_self.imageData=MainHelper.createImageFilter(_self.preloadedDetails.Region.Current.RegionId||_self.preloadedDetails.Region.Parent.RegionId,200,200);_self.moreRegionsVisible=false;};this.refreshRatingData=function(comment){var promises=[IngredientService.getIngredientRating(_self.ingredientId)];var comment=comment;return $q.all(promises).then(function(success){_self.ingredientRating=success[0].data;UserCommentStatusService.dispatch({dividedScore:_self.ingredientRating.DividedScore,validScoreCount:_self.ingredientRating.ValidScoreCount,scoreCount:_self.ingredientRating.ScoreCount,commentRating:_self.ingredientRating.Score,userRating:comment?CommentHelper.recalculateRatingForView(comment.RatingScore):0,isCommentProcess:true,comment:comment});});};this.closeModal=function(){_self.galleryPopupOpen=false;};this.getRegionName=function(details){var ingredientDetails=details||_self.preloadedDetails.Region;var regionName=ingredientDetails.Current.Name;var countryName=ingredientDetails.Parent.IsContinent!=true?ingredientDetails.Parent.Name:'';if(regionName&&countryName){return regionName+', '+countryName;}
return regionName||countryName;};var _ingredientMobileMainObserver=function(data){_self.userCommentStatus=data;};var _ingredientPageStatusObserver=function(data){_self.pageStatus=data;MainHelper.addMobilePagePlaceholder(_self.pageStatus.isSectionLoaded);};this.getStickyNavOffset=function(){return _self.pageStatus.page===''?0:-10;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_ingredientMobileMainObserver);PageStatusSubjectService.unsubscribe(_ingredientPageStatusObserver);};}]);;angular.module('tasteatlas').component('taIngredientMobileOverview',{bindings:{details:'<',rating:'<',additionalRegionId:'<'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-mobile-overview/ta-ingredient-mobile-overview.html',controller:'ta-ingredient-mobile-overview-controller'}).controller('ta-ingredient-mobile-overview-controller',['$filter','IngredientService','constants','$q','GeolocationService','MainHelper','RecipeService','PageStatusSubjectService','EventHelperService','RatingSharedService',function($filter,IngredientService,constants,$q,GeolocationService,MainHelper,RecipeService,PageStatusSubjectService,EventHelperService,RatingSharedService){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.getDistance=MainHelper.getDistance;this.shops=[];this.location={longitude:'',latitude:'',hasLocation:false};this.pairingTips={};this.rating=null;this.selectedShopsLocation="near";this.ratingCardActions=null;this.recipeVariations=[];this.mainRecipeVariation;this.similarIngredientData=[];this.moreFromRegion=[];this.otherVarieties=null;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.isLoaded=false;this.$onInit=function(){_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data===GeolocationService.granted()){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data.coords===undefined){afterLocationPromiseChain();return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude,hasLocation:true};afterLocationPromiseChain();});}else{afterLocationPromiseChain();}});});};function promiseChain(){var promises=[IngredientService.GetIngredientPairs(_self.details.EntityId),IngredientService.GetIngredientTypes(_self.details.EntityId,0),IngredientService.getSimilarIngredients(_self.details.EntityId),IngredientService.getSimilarIngredientsInRegion({ingredientId:_self.details.EntityId,additionalRegionId:_self.additionalRegionId}),IngredientService.GetIngredientPartOf(_self.details.EntityId),IngredientService.getIngredientOverview(_self.details.EntityId)];if(_self.details.HasRecipes){promises.push(IngredientService.getRecipeVariations(_self.details.EntityId));promises.push(IngredientService.getMainRecipeVariationSimpleDetails(_self.details.EntityId));}
return $q.all(promises).then(function(success){if(_self.details.HasRecipes){_self.recipeVariations=success[6].data;_self.mainRecipeVariation=success[7].data;_self.recipeIngredientsPreview=_self.mainRecipeVariation?RecipeService.getRecipeIngredientsPreview(_self.mainRecipeVariation.Components):[];}
_self.pairingTips=success[0].data;_self.types=success[1].data;_self.similarIngredientData=success[2].data;_self.moreFromRegion=success[3].data;_self.partOf=success[4].data;_self.overviewDetails=success[5].data;if(!_self.details.IsGroup){IngredientService.getSiblings(_self.details.EntityId,{pageSize:50,page:0}).then(function(success){_self.otherVarieties=success.data;});}}).catch(function(error){console.log(error);});}
function afterLocationPromiseChain(){var promises=[IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:3,pageIndex:1,longitude:_self.location.longitude,latitude:_self.location.latitude}),IngredientService.GetIngredientEvents(_self.details.EntityId,{PageIndex:1,PageSize:10,order:0,Longitude:_self.location.longitude,Latitude:_self.location.latitude})];return $q.all(promises).then(function(success){_self.shops=success[0].data;_self.events=EventHelperService.addtEventsLabel(success[1].data);_self.displayedShops=_self.shops;if(!_self.displayedShops.Data.length){return;}
var isFarAway=_self.displayedShops.Data.some(function(shop){return shop.Distance>500;});if(_self.location.hasLocation&&isFarAway){_self.changeShopsLocation('all');}
else if(_self.location.hasLocation){_self.selectedShopsLocation='nearme';}
else{_self.selectedShopsLocation='all';}}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.eventOrderOptions=MainHelper.getEventOrderByArray(_self.location);});}
this.events=undefined;this.eventsLoading=false;this.changeShopsLocation=function(location){if(_self.selectedShopsLocation===location)return;_self.selectedShopsLocation=location;var shopsFilter;if(location==="nearme"){shopsFilter={pageSize:3,pageIndex:1,longitude:_self.location.longitude,latitude:_self.location.latitude};}
else if(location==="all"){shopsFilter={pageSize:3,pageIndex:1,longitude:null,latitude:null};}
return IngredientService.filterIngredientShops(_self.details.EntityId,shopsFilter).then(function(success){_self.displayedShops=success.data;}).catch(function(error){console.log(error);});};this.onEventsOrderChange=function(orderBy){IngredientService.GetIngredientEvents(_self.details.EntityId,{PageSize:10,PageIndex:1,order:orderBy,Longitude:_self.location.longitude,Latitude:_self.location.latitude}).then(function(success){_self.events=orderBy===0?EventHelperService.addtEventsLabel(success.data):success.data;}).catch(function(err){console.log(err);});};this.onFoodTypesOrderChange=function(orderBy){IngredientService.GetIngredientTypes(_self.details.EntityId,orderBy).then(function(success){_self.types=success.data;}).catch(function(err){console.log(err);});};this.getMoreFromRegionTitle=function(){return MainHelper.getMoreFromRegionTitle(_self.moreFromRegion);};}]);;angular.module('tasteatlas').component('taIngredientMobileWhereToBuy',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-mobile-where-to-buy/ta-ingredient-mobile-where-to-buy.html',controller:'ta-ingredient-mobile-where-to-buy-controller'}).controller('ta-ingredient-mobile-where-to-buy-controller',['$q','IngredientService','GeolocationService','MainHelper','$scope','SharingSubjectService','PageStatusSubjectService','BotInterceptor',function($q,IngredientService,GeolocationService,MainHelper,$scope,SharingSubjectService,PageStatusSubjectService,BotInterceptor){var _self=this;this.getDistance=MainHelper.getDistance;this.shops=[];this.isAutoCompleteVisiable=false;this.reviewPageSize=10;this.reviewPageIndex=1;this.location={longitude:'',latitude:'',hasLocation:false};this.hasLocation=false;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.$onInit=function(){BotInterceptor.blockIndexing();promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data.coords===undefined){afterLocationPromiseChain();return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude,hasLocation:true};afterLocationPromiseChain();});}else{afterLocationPromiseChain();}});});var pageType=MainHelper.determineIngredientPageType($scope.activePage);var image=undefined;if(_self.details.PreviewImage&&_self.details.PreviewImage.Image)
image=_self.details.PreviewImage.Image;SharingSubjectService.dispatch({name:SharingSubjectService.SHARE_ITEM_CHANGED,payload:{pageType:pageType,name:_self.details.Name,image:image}});};this.isShopsLoading=false;this.loadMoreShops=function(){if(_self.shops.PageIndex>_self.shops.NumberOfPages)
return;_self.isShopsLoading=true;_self.shops.PageIndex=_self.shops.PageIndex+1;IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:_self.shops.PageSize,pageIndex:_self.shops.PageIndex,longitude:_self.location.longitude,latitude:_self.location.latitude}).then(function(success){_self.shops.Data=_self.shops.Data.concat(success.data.Data);_self.isShopsLoading=false;},function(error){console.log(error);});};function promiseChain(){var promises=[IngredientService.getIngredientShopLocations(_self.details.EntityId),IngredientService.exploreIngredients(_self.details.EntityId,{PageSize:10,PageIndex:1})];return $q.all(promises).then(function(success){_self.shopsLocation=success[0].data;_self.explore=success[1].data;},function(error){console.log(error);});}
function afterLocationPromiseChain(){var promises=[IngredientService.filterIngredientShops(_self.details.EntityId,{pageSize:_self.reviewPageSize,pageIndex:_self.reviewPageIndex,longitude:_self.location.longitude,latitude:_self.location.latitude})];return $q.all(promises).then(function(success){_self.shops=success[0].data;}).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});});}}]);;angular.module('tasteatlas').component('taIngredientErrorMobile',{bindings:{shop:'<'},templateUrl:'/content/scripts/app/components/ingredient-details/ingredient-shared/ta-ingredient-error-mobile.html',controller:'taIngredientErrorMobileController'}).controller("taIngredientErrorMobileController",['CommentService',function(CommentService){var _self=this;this.isErrorFormShown=false;this.error='';this.isError=false;this.submitting=false;this.data={entityId:'',entityType:'',content:'',email:''};this.onErrorFormShow=function(){_self.isErrorFormShown=!_self.isErrorFormShown;};this.submit=function(){if(_self.errorForm.$valid===false)
return;if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;_self.data.entityId=_self.shop.Id;_self.data.entityType=_self.shop.EntityType;CommentService.errorPost(_self.data).then(function(success){resetData();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetData();});};function resetData(){_self.submitting=false;_self.data={entityId:'',entityType:'',content:'',email:''};_self.isErrorFormShown=false;}
this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};}]);;angular.module('tasteatlas').component('taLandingDesktop',{templateUrl:'/content/scripts/app/components/landing/landing-desktop/ta-landing-desktop.html',controller:'taLandingDesktopController',bindings:{isError:'<'}}).controller("taLandingDesktopController",["CommunicationService","constants","SearchService","$q","$scope","SuggestionService","GeolocationService","RegionService","ItemTypes","ItemTypeLabels",function(CommunicationService,constants,SearchService,$q,$scope,SuggestionService,GeolocationService,RegionService,ItemTypes,ItemTypeLabels){var _self=this;this.constants=constants;this.showSearchResults=false;this.query='';this.onlyRecipes=false;this.itemTypes=ItemTypes;this.itemTypeLabels=ItemTypeLabels;this.currentRegion=null;this.geolocationState=null;this.suggestionItem={};this.showSuggestion=false;this.isJohnSnow=false;this.suggestions=[];this.isLoaded=false;this.$onInit=function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){return RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude});}).then(function(success){_self.currentRegion=success.data[0];_self.geolocationState='GRANTED';});}else if(data==='PROMPT'){_self.geolocationState='PROMPT';}else if(data==='DENIED'){_self.geolocationState='DENIED';}});var query=window.location.pathname.replace('/','');SuggestionService.mainAutoCompleteSuggestion({query:query}).then(function(suggestions){if(suggestions.length){_self.suggestions=suggestions;_self.isLoaded=true;}
else{SuggestionService.randomAutocompleteSuggestion().then(function(randomSuggestion){_self.suggestions.push(randomSuggestion);_self.isLoaded=true;}).catch(function(error){console.log(error);});}}).catch(function(error){console.log(error);});};this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:8000}).then(function(data){if(data==='DENIED'){_self.locationState='DENIED';_self.isLoaded=true;return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.geolocationState='GRANTED';});});}});};this.onInputClick=function(){this.showSearchResults=true;};this.onInputDelete=function(){_self.query='';_self.showSearchResults=false;_self.autocompleteItems={Items:[],CustomItems:[]};_self.isJohnSnow=false;_self.showSuggestion=false;};this.onInputSearch=function(query){_self.suggestionItem={};_self.autocompleteItems={Items:[],CustomItems:[]};if(query.length<2){return;}
_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(query)];_self.showSuggestion=false;_self.isJohnSnow=false;$q.all(promise).then(function(success){var autocompleteResults=success[0];_self.autocompleteItems=CommunicationService.mapAutocompleteResults(autocompleteResults);_self.isLoadingAutocompleteResults=false;var isLessThanFive=(autocompleteResults.Items.length+autocompleteResults.CustomItems.length)<5;var isEmpty=query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.CustomItems.length===0;if(isEmpty||isLessThanFive){return getSimilarResults(query).then(function(similarResults){_self.autocompleteItems.Items=_self.autocompleteItems.Items.concat(similarResults);});}
if(_self.autocompleteItems.CustomItems.length>0||_self.autocompleteItems.Items.length>0){_self.showSearchResults=true;}});};$scope.toggleSearchOnlyRecipes=function(queryRecipes){_self.onlyRecipes=!_self.onlyRecipes;return _self.onInputSearch(queryRecipes);}
function autocomplete(query){return SearchService.mainAutocomplete({query:query,onlyRecipes:_self.onlyRecipes});}
function getSimilarResults(query){return SearchService.getSimilar({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){return success;});}
function mainAutoCompleteSuggestion(query){_self.autocompleteSuggestionCanceler=$q.defer();SearchService.mainAutoCompleteSuggestion({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){var result=success;if(result.length>0&&_self.autocompleteItems.length===0){_self.showSuggestion=true;_self.isJohnSnow=false;_self.suggestionItem=result[0];}
if(result.length===0&&_self.autocompleteItems.length===0){_self.isJohnSnow=true;_self.showSuggestion=false;}});}
this.onItemSelect=function(item){window.open(window.location.origin+"/"+item.UrlLink,'_self');};this.getItemName=function(item){if(item.OtherName){return item.Name+" ("+item.OtherName+")";}
return item.Name;};this.onKeyDown=function(event){if(event.which===40){angular.element('.item').not('.ng-hide').first().focus();}};this.isEmblem=function(entityType){return[ItemTypes.Undefined,ItemTypes.Region,ItemTypes.AutocompleteEntity].includes(entityType);};}]);;angular.module('tasteatlas').component('taNotfoundDesktop',{templateUrl:'/content/scripts/app/components/landing/landing-desktop/ta-notfound-desktop.html',controller:'ta404DesktopController'}).controller('ta404DesktopController',['SuggestionService',function(SuggestionService){var _self=this;this.suggestions=[];this.isLoaded=false;this.$onInit=function(){var query=window.location.pathname.replace('/','');SuggestionService.mainAutoCompleteSuggestion({query:query}).then(function(suggestions){if(suggestions.length){_self.suggestions=suggestions;_self.isLoaded=true;}
else{SuggestionService.randomAutocompleteSuggestion().then(function(randomSuggestion){_self.suggestions.push(randomSuggestion);_self.isLoaded=true;}).catch(function(error){console.log(error);});}}).catch(function(error){console.log(error);});};}]);;angular.module('tasteatlas').component('taLandingMobile',{templateUrl:'/content/scripts/app/components/landing/landing-mobile/ta-landing-mobile.html',controller:'taLandingMobileController',bindings:{isError:'<',suggestions:'<'}}).controller("taLandingMobileController",["CommunicationService","constants","SearchService","$q","$scope","GeolocationService","RegionService","RecentSearchService","ItemTypes","ItemTypeLabels","SuggestionService",function(CommunicationService,constants,SearchService,$q,$scope,GeolocationService,RegionService,RecentSearchService,ItemTypes,ItemTypeLabels,SuggestionService){var _self=this;this.constants=constants;this.showSearchResults=false;this.searchOpen=false;this.query='';this.onlyRecipes=false;this.itemTypes=ItemTypes;this.itemTypeLabels=ItemTypeLabels;this.currentRegion=null;this.geolocationState=null;this.suggestionItem={};this.showSuggestion=false;this.isJohnSnow=false;this.suggestions=[];this.isLoaded=false;this.$onInit=function(){angular.element('body').css('overflow','hidden');angular.element('html').css('overflow','hidden');GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation().then(function(data){return RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude});}).then(function(success){_self.regions=success.data;_self.geolocationState='GRANTED';});}else if(data==='PROMPT'){_self.geolocationState='PROMPT';}else if(data==='DENIED'){_self.geolocationState='DENIED';}});var query=window.location.pathname.replace('/','');SuggestionService.mainAutoCompleteSuggestion({query:query}).then(function(suggestions){if(suggestions.length){_self.suggestions=suggestions;_self.isLoaded=true;}
else{SuggestionService.randomAutocompleteSuggestion().then(function(randomSuggestion){_self.suggestions.push(randomSuggestion);_self.isLoaded=true;}).catch(function(error){console.log(error);});}}).catch(function(error){console.log(error);});};$scope.toggleSearchOnlyRecipes=function(queryRecipes){_self.onlyRecipes=!_self.onlyRecipes;return _self.onInputSearch(queryRecipes);}
this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:8000}).then(function(data){if(data==='DENIED'){_self.locationState='DENIED';_self.isLoaded=true;return;}
RegionService.getRegionsByLocation({lat:data.coords.latitude,lon:data.coords.longitude}).then(function(success){_self.currentRegion=success.data[0];_self.regions=success.data;_self.geolocationState='GRANTED';});});}});};this.openSearch=function(){_self.searchOpen=true;var autocomplete_input=document.getElementById('autocomplete_input');var layout=document.getElementById('landing_main');layout.classList.add('landing-page__main--searchable');this.showSearchResults=true;};this.closeSearch=function(){_self.searchOpen=false;var layout=document.getElementById('landing_main');layout.classList.remove('landing-page__main--searchable');};this.onInputDelete=function(){_self.query='';_self.showSearchResults=false;_self.autocompleteItems={Items:[],CustomItems:[]};_self.isJohnSnow=false;_self.showSuggestion=false;};this.onInputSearch=function(query){_self.suggestionItem={};_self.autocompleteItems={Items:[],CustomItems:[]};if(query.length<2){return;}
_self.isLoadingAutocompleteResults=true;var promise=[autocomplete(query)];_self.showSuggestion=false;_self.isJohnSnow=false;$q.all(promise).then(function(success){var autocompleteResults=success[0];_self.autocompleteItems=CommunicationService.mapAutocompleteResults(autocompleteResults);_self.isLoadingAutocompleteResults=false;var isLessThanFive=(autocompleteResults.Items.length+autocompleteResults.CustomItems.length)<5;var isEmpty=query.length>0&&autocompleteResults.Items.length===0&&autocompleteResults.CustomItems.length===0;if(isEmpty||isLessThanFive){return getSimilarResults(query).then(function(similarResults){_self.autocompleteItems.Items=_self.autocompleteItems.Items.concat(similarResults);});}
if(_self.autocompleteItems.CustomItems.length>0||_self.autocompleteItems.Items.length>0){_self.showSearchResults=true;}});};function autocomplete(query){return SearchService.mainAutocomplete({query:query,onlyRecipes:_self.onlyRecipes});}
function mainAutoCompleteSuggestion(query){_self.autocompleteSuggestionCanceler=$q.defer();SearchService.mainAutoCompleteSuggestion({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){var result=success;if(result.length>0&&_self.autocompleteItems.Items.length===0&&_self.autocompleteItems.CustomItems.length===0){_self.showSuggestion=true;_self.isJohnSnow=false;_self.suggestionItem=result[0];}
if(result.length===0&&_self.autocompleteItems.Items.length===0&&_self.autocompleteItems.CustomItems.length===0){_self.isJohnSnow=true;_self.showSuggestion=false;}});}
function getSimilarResults(query){return SearchService.getSimilar({query:query,onlyRecipes:_self.onlyRecipes}).then(function(success){return success;});}
this.onItemSelect=function(item){_self.recentSearches=RecentSearchService.put(item);window.open(item.UrlLink,"_self");};this.getItemName=function(item){if(item.OtherName){return item.Name+" ("+item.OtherName+")";}
return item.Name;};this.isEmblem=function(entityType){return[ItemTypes.Undefined,ItemTypes.Region,ItemTypes.AutocompleteEntity].includes(entityType);};this.$onDestroy=function(){angular.element('body').css('overflow','');angular.element('html').css('overflow','');};}]);;angular.module('tasteatlas').component('taNotfoundMobile',{templateUrl:'/content/scripts/app/components/landing/landing-mobile/ta-notfound-mobile.html',controller:'ta404MobileController'}).controller('ta404MobileController',['SuggestionService',function(SuggestionService){var _self=this;this.suggestions=[];this.isLoaded=false;this.$onInit=function(){var query=window.location.pathname.replace('/','');SuggestionService.mainAutoCompleteSuggestion({query:query}).then(function(suggestions){if(suggestions.length){_self.suggestions=suggestions;_self.isLoaded=true;}
else{SuggestionService.randomAutocompleteSuggestion().then(function(randomSuggestion){_self.suggestions.push(randomSuggestion);_self.isLoaded=true;}).catch(function(error){console.log(error);});}}).catch(function(error){console.log(error);});};}]);;angular.module('tasteatlas').component('taDesktopSeoMap',{templateUrl:'/content/scripts/app/components/maps/ta-desktop-seo-map.html',controller:'taDesktopSeoMapController',bindings:{regionId:'<',dishGroupId:'<',ingredientGroupId:'<'}}).controller("taDesktopSeoMapController",["$timeout","MainMapService","MapHelper","$q","SearchService","RegionLevels",function($timeout,MainMapService,MapHelper,$q,SearchService,RegionLevels){var _self=this;var _mapId='main-map';var _map;var _initMap=false;function initMap(){if(_initMap){return $q.resolve(true);}
_map=MainMapService.initMap({mapId:_mapId,navigateToItem:true,displayLocationTooltip:true,dragHideTooltip:true,isMobile:false});_initMap=true;return $q.resolve(true);}
function moveMap(searchResults){searchResults=searchResults||{};var region=searchResults.Region||{};var envelope=region.Envelope;var promiseChain=$q.resolve(searchResults);if(!envelope){var coordiantes=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(function(item){return MapHelper.toMercatorCoordinate([item.Location.Longitude,item.Location.Latitude]);});if(!coordiantes.length)
return promiseChain;if(region.RegionLevel>RegionLevels.Undefined&&region.RegionLevel<RegionLevels.MicroRegion){var regionCoordinate=MapHelper.toMercatorCoordinate([region.LocationCordinate.Longitude,region.LocationCordinate.Latitude]);extent=MapHelper.toBoundingExtentFromCoordinates([regionCoordinate]);}else{extent=MapHelper.toBoundingExtentFromCoordinates(coordiantes);}
promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent});});return promiseChain=promiseChain.then(function(){return searchResults;});}
var extent=MapHelper.toMercatorExtent([envelope.BottomLeft.Longitude,envelope.BottomLeft.Latitude,envelope.TopRight.Longitude,envelope.TopRight.Latitude]);var extentConstrainResolution=true;if(region.RegionLevel>=RegionLevels.RegionGroup)
extentConstrainResolution=false;var extentPadding=[-10,-10,-10,-10];promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent,constrainResolution:extentConstrainResolution,padding:extentPadding});});return promiseChain.then(function(){return searchResults;});}
function setMapFeatures(searchResults){searchResults=searchResults||[];var features=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(MapHelper.mapItemToFeature).filter(function(feature){return feature;});var deferred=$q.defer();MainMapService.setFeaturesLayer(features);$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
function setBorderLayer(searchResults){searchResults=searchResults||{};var region=searchResults.Region;var borders=region.Borders;var location=region.Location;var deferred=$q.defer();if(!borders&&!location){MainMapService.clearBorderLayer();}
else{MainMapService.setBorderLayer({borders:borders,location:location,additionalBorders:region.AdditionalBorders});}
$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
var _showSearchResultsPromise;function showSearchResults(searchResults){var promiseChain=$q.resolve(searchResults);promiseChain=promiseChain.then(setBorderLayer);if(searchResults.MoveMap){promiseChain=promiseChain.then(moveMap);promiseChain=promiseChain.then(setMapFeatures);}else{promiseChain=promiseChain.then(setMapFeatures);}
_showSearchResultsPromise=promiseChain;return _showSearchResultsPromise;}
this.$onInit=function(){initMap();_determineAction();};function _determineAction(){if(_self.entityType!==null&&_self.entityId!==null){if(_self.regionId&&!_self.dishGroupId&&!_self.ingredientGroupId){SearchService.mainSearchMap({regionId:_self.regionId}).then(showSearchResults);}else if(_self.dishGroupId&&!_self.regionId&&!_self.ingredientGroupId){SearchService.mainSearchMap({dishGroupId:_self.dishGroupId}).then(showSearchResults);}else if(_self.ingredientGroupId&&!_self.regionId&&!_self.dishGroupId){SearchService.mainSearchMap({ingredientGroupId:_self.ingredientGroupId}).then(showSearchResults);}else if(_self.regionId&&_self.dishGroupId&&!_self.ingredientGroupId){SearchService.mainSearchMap({regionId:_self.regionId,dishGroupId:_self.dishGroupId}).then(showSearchResults);}else if(_self.regionId&&_self.ingredientGroupId&&!_self.dishGroupId){SearchService.mainSearchMap({regionId:_self.regionId,ingredientGroupId:_self.ingredientGroupId}).then(showSearchResults);}}}}]);;angular.module('tasteatlas').component('taHomeDesktopMap',{templateUrl:'/content/scripts/app/components/maps/ta-home-desktop-map.html',controller:'taHomeDesktopMapController'}).controller("taHomeDesktopMapController",["$timeout","MainMapService","MapHelper","$q","SearchService","RegionService","LoaderService","GeolocationService","mapConfig","ResultMapSubjectService","RegionLevels","BotInterceptor",function($timeout,MainMapService,MapHelper,$q,SearchService,RegionService,LoaderService,GeolocationService,mapConfig,ResultMapSubjectService,RegionLevels,BotInterceptor){var _self=this;var _mapId='main-map';var _map;var _initMap=false;this.viewListBtn=false;this.viewListBtnUrlLink;this.isCheckMyLocationShown=true;this.checkMyLocation=function(){GeolocationService.getLocation().then(function(data){if(data==='DENIED'||data==='TROUBLE')return;var coordinate=ol.proj.fromLonLat([data.coords.longitude,data.coords.latitude]);MapHelper.flyToAnimation({map:_map,coordinate:coordinate,zoomLevel:mapConfig.maxZoomLevel}).then(MainMapService.showNerbyRegions(coordinate,true));});};function initMap(){if(_initMap){return $q.resolve(true);}
_map=MainMapService.initMap({mapId:_mapId,navigateToItem:true,displayLocationTooltip:true,dragHideTooltip:true,isMobile:false});_initMap=true;return $q.resolve(true);}
this.viewList=function(){window.open(_self.viewListBtnUrlLink);};function moveMap(searchResults){searchResults=searchResults||{};var region=searchResults.Region||{};var envelope=region.Envelope;_self.viewListBtnUrlLink=region.UrlLink;if(_self.viewListBtnUrlLink!=null){_self.viewListBtn=true;}
else{_self.viewListBtn=false;}
var promiseChain=$q.resolve(searchResults);if(!envelope){var coordiantes=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(function(item){return MapHelper.toMercatorCoordinate([item.Location.Longitude,item.Location.Latitude]);});if(!coordiantes.length)
return promiseChain;if(region.RegionLevel>RegionLevels.Undefined&&region.RegionLevel<RegionLevels.MicroRegion){var regionCoordinate=MapHelper.toMercatorCoordinate([region.LocationCordinate.Longitude,region.LocationCordinate.Latitude]);extent=MapHelper.toBoundingExtentFromCoordinates([regionCoordinate]);}else{extent=MapHelper.toBoundingExtentFromCoordinates(coordiantes);}
promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent});});return promiseChain=promiseChain.then(function(){return searchResults;});}
var extent=MapHelper.toMercatorExtent([envelope.BottomLeft.Longitude,envelope.BottomLeft.Latitude,envelope.TopRight.Longitude,envelope.TopRight.Latitude]);var extentConstrainResolution=true;if(region.RegionLevel>=RegionLevels.RegionGroup)
extentConstrainResolution=false;var extentPadding=[-10,-10,-10,-10];promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent,constrainResolution:extentConstrainResolution,padding:extentPadding});});return promiseChain.then(function(){return searchResults;});}
function setMapFeatures(searchResults){searchResults=searchResults||[];var features=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(MapHelper.mapItemToFeature).filter(function(feature){return feature;});var deferred=$q.defer();MainMapService.setFeaturesLayer(features);$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
function setBorderLayer(searchResults){searchResults=searchResults||{};var region=searchResults.Region;var borders=region.Borders;var location=region.Location;var deferred=$q.defer();if(!borders&&!location){MainMapService.clearBorderLayer();}
else{MainMapService.setBorderLayer({borders:borders,location:location,additionalBorders:region.AdditionalBorders});}
$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
var _showSearchResultsPromise;function showSearchResults(searchResults){LoaderService.triggerStopLoader();var promiseChain=$q.resolve(searchResults);promiseChain=promiseChain.then(setBorderLayer);if(searchResults.MoveMap){promiseChain=promiseChain.then(moveMap);promiseChain=promiseChain.then(setMapFeatures);}else{promiseChain=promiseChain.then(setMapFeatures);}
_showSearchResultsPromise=promiseChain;return _showSearchResultsPromise;}
function initialSearch(){SearchService.mainSearchMap({regionId:null}).then(function(response){if(response.Items&&response.Items.length<10){BotInterceptor.blockIndexing();}
showSearchResults(response);});}
this.$onInit=function(){var currentState=ResultMapSubjectService.getCurrentState();_desktopMapObserver(currentState);ResultMapSubjectService.subscribe(_desktopMapObserver);initMap();};this.$onDestroy=function(){ResultMapSubjectService.unsubscribe(_desktopMapObserver);};this.isSearched=function(){var searchUrl="/search";var urlLink=window.location.pathname;return urlLink.indexOf(searchUrl)===-1;};var _desktopMapObserver=function(options){MainMapService.updateSize();switch(options.name){case ResultMapSubjectService.INITIAL_SEARCH:initialSearch();break;case ResultMapSubjectService.SEARCH_RID:SearchService.mainSearchMap({regionId:options.regionId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RID_DGID:SearchService.mainSearchMap({regionId:options.regionId,dishGroupId:options.dishGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RID_IGID:SearchService.mainSearchMap({regionId:options.regionId,ingredientGroupId:options.ingredientGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_DGID:SearchService.mainSearchMap({dishGroupId:options.dishGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_IGID:SearchService.mainSearchMap({ingredientGroupId:options.ingredientGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RP:SearchService.mainSearchMap({regionId:options.regionId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_TAG:SearchService.mainSearchMap({TagName:options.tagName}).then(showSearchResults);break;default:initialSearch();break;}};}]);;angular.module('tasteatlas').component('taHomeMobileMap',{templateUrl:'/content/scripts/app/components/maps/ta-home-mobile-map.html',controller:'taHomeMobileMapController'}).controller("taHomeMobileMapController",["$timeout","MainMapService","MapHelper","$q","SearchService","RegionService","LoaderService","GeolocationService","MobileInteractionService","mapConfig","ResultMapSubjectService","RegionLevels","BotInterceptor",function($timeout,MainMapService,MapHelper,$q,SearchService,RegionService,LoaderService,GeolocationService,MobileInteractionService,mapConfig,ResultMapSubjectService,RegionLevels,BotInterceptor){var _self=this;var _mapId='main-map';var _map;var _initMap=false;this.viewListBtn=false;this.viewListBtnUrlLink;function initMap(){if(_initMap){return $q.resolve(true);}
_map=MainMapService.initMap({mapId:_mapId,navigateToItem:true,displayLocationTooltip:true,dragHideTooltip:true,isMobile:true});_initMap=true;return $q.resolve(true);}
this.toggleDrawer=function(){MobileInteractionService.toggleResults();};this.isCheckMyLocationShown=true;this.checkMyLocation=function(){GeolocationService.getLocation().then(function(data){if(data==='DENIED'||data==='TROUBLE')return;var coordinate=ol.proj.fromLonLat([data.coords.longitude,data.coords.latitude]);MapHelper.flyToAnimation({map:_map,coordinate:coordinate,zoomLevel:mapConfig.maxZoomLevel}).then(MainMapService.showNerbyRegions(coordinate,true));});};this.viewList=function(){window.open(_self.viewListBtnUrlLink);};function moveMap(searchResults){searchResults=searchResults||{};var region=searchResults.Region;var envelope=region.Envelope;_self.viewListBtnUrlLink=region.UrlLink;if(_self.viewListBtnUrlLink!=null){_self.viewListBtn=true;}
else{_self.viewListBtn=false;}
var promiseChain=$q.resolve(searchResults);if(!envelope){var coordiantes=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(function(item){return MapHelper.toMercatorCoordinate([item.Location.Longitude,item.Location.Latitude]);});if(!coordiantes.length)
return promiseChain;if(region.RegionLevel>RegionLevels.Undefined&&region.RegionLevel<RegionLevels.MicroRegion){var regionCoordinate=MapHelper.toMercatorCoordinate([region.LocationCordinate.Longitude,region.LocationCordinate.Latitude]);extent=MapHelper.toBoundingExtentFromCoordinates([regionCoordinate]);}else{extent=MapHelper.toBoundingExtentFromCoordinates(coordiantes);}
promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent});});return promiseChain=promiseChain.then(function(){return searchResults;});}
var extent=MapHelper.toMercatorExtent([envelope.BottomLeft.Longitude,envelope.BottomLeft.Latitude,envelope.TopRight.Longitude,envelope.TopRight.Latitude]);var extentConstrainResolution=true;if(region.RegionLevel>=RegionLevels.RegionGroup)
extentConstrainResolution=false;var extentPadding=[-10,-10,-10,-10];promiseChain=promiseChain.then(function(){return MapHelper.fitExtentAnimation({map:_map,extent:extent,constrainResolution:extentConstrainResolution,padding:extentPadding});});return promiseChain.then(function(){return searchResults;});}
function setMapFeatures(searchResults){searchResults=searchResults||[];var features=(searchResults.Items||[]).filter(function(item){return item.Location;}).map(MapHelper.mapItemToFeature).filter(function(feature){return feature;});var deferred=$q.defer();MainMapService.setFeaturesLayer(features);$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
function setBorderLayer(searchResults){searchResults=searchResults||{};var region=searchResults.Region;var borders=region.Borders;var location=region.Location;var deferred=$q.defer();if(!borders&&!location){MainMapService.clearBorderLayer();}
else{MainMapService.setBorderLayer({borders:borders,location:location,additionalBorders:region.AdditionalBorders});}
$timeout(function(){deferred.resolve(searchResults);},10);return deferred.promise;}
var _showSearchResultsPromise;function showSearchResults(searchResults){LoaderService.triggerStopLoader();var promiseChain=$q.resolve(searchResults);promiseChain=promiseChain.then(setBorderLayer);if(searchResults.MoveMap){promiseChain=promiseChain.then(moveMap);promiseChain=promiseChain.then(setMapFeatures);}else{promiseChain=promiseChain.then(setMapFeatures);}
_showSearchResultsPromise=promiseChain;return _showSearchResultsPromise;}
function initialSearch(){SearchService.mainSearchMap({regionId:null}).then(function(response){if(response.Items&&response.Items.length<10){BotInterceptor.blockIndexing();}
showSearchResults(response);});MainMapService.updateSize();}
this.isSearchPage=function(){return location.pathname==='/search';};this.$onInit=function(){var currentState=ResultMapSubjectService.getCurrentState();_mobileMapObserver(currentState);ResultMapSubjectService.subscribe(_mobileMapObserver);initMap();};this.$onDestroy=function(){ResultMapSubjectService.unsubscribe(_mobileMapObserver);};var _mobileMapObserver=function(options){MainMapService.updateSize();switch(options.name){case ResultMapSubjectService.INITIAL_SEARCH:initialSearch();break;case ResultMapSubjectService.SEARCH_RID:SearchService.mainSearchMap({regionId:options.regionId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RID_DGID:SearchService.mainSearchMap({regionId:options.regionId,dishGroupId:options.dishGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RID_IGID:SearchService.mainSearchMap({regionId:options.regionId,ingredientGroupId:options.ingredientGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_DGID:SearchService.mainSearchMap({dishGroupId:options.dishGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_IGID:SearchService.mainSearchMap({ingredientGroupId:options.ingredientGroupId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_RP:SearchService.mainSearchMap({regionId:options.regionId}).then(showSearchResults);break;case ResultMapSubjectService.SEARCH_TAG:SearchService.mainSearchMap({TagName:options.tagName}).then(showSearchResults);break;default:initialSearch();break;}};}]);;angular.module('tasteatlas').component('taMiniMapRegion',{bindings:{regionId:'<'},templateUrl:'/content/scripts/app/components/maps/ta-mini-map-region.html',controller:'taMiniMapRegionCtrl'}).controller("taMiniMapRegionCtrl",["$scope","$timeout","MiniMapService",function($scope,$timeout,MiniMapService){var _self=this;this.mapId='ta-minimap-region-'+$scope.$id;this.data={};this.showProgress=false;var _regionId;function initMiniMap(){if(!_self.mapId||!_regionId)
return;$timeout(function(){MiniMapService.getMiniMapRegionData({regionId:_regionId}).then(function(regionData){regionData=regionData||{};var region=regionData.region;var extent=regionData.extent;return MiniMapService.initMiniMapRegion({mapId:_self.mapId,region:region,extent:extent});});},0);}
function activate(){if(_self.regionId)_regionId=Number(_self.regionId);initMiniMap();}
this.$onInit=function(){activate();};}]);;angular.module('tasteatlas').component('taMiscellaneousDesktop',{templateUrl:'/content/scripts/app/components/miscellaneous/ta-miscellaneous-desktop.html',controller:'taMiscellaneousDesktopController',bindings:{activePage:'<'}}).controller('taMiscellaneousDesktopController',['MiscellaneousHelper',function(MiscellaneousHelper){var _self=this;this.title='';this.about=MiscellaneousHelper.about;this.sitemap=MiscellaneousHelper.sitemap;this.terms=MiscellaneousHelper.terms;this.privacy=MiscellaneousHelper.privacy;this.$onInit=function(){if(_self.activePage===undefined){_self.activePage=_self.about;_self.title=_self.activePage;}
determineTitle();};this.changePage=function(page){_self.activePage=page;history.pushState({},null,page);determineTitle();};function determineTitle(){if(_self.activePage===_self.about)
_self.title='About TasteAtlas';else if(_self.activePage===_self.sitemap)
_self.title='Site map';else if(_self.activePage===_self.terms)
_self.title='Terms and conditions';else if(_self.activePage===_self.privacy)
_self.title='Privacy';else
_self.title='About TasteAtlas';}}]);;angular.module('tasteatlas').component('taMiscellaneousMobile',{templateUrl:'/content/scripts/app/components/miscellaneous/ta-miscellaneous-mobile.html',controller:'taMiscellaneousMobileController',bindings:{activePage:'<'}}).controller('taMiscellaneousMobileController',['MiscellaneousHelper',function(MiscellaneousHelper){this.about=MiscellaneousHelper.about;this.sitemap=MiscellaneousHelper.sitemap;this.terms=MiscellaneousHelper.terms;this.privacy=MiscellaneousHelper.privacy;var _self=this;this.$onInit=function(){if(_self.activePage===undefined)
_self.activePage='about';};this.changePage=function(page){_self.activePage=page;history.pushState({},null,page);};}]);;angular.module('tasteatlas').component('taAboutDesktop',{templateUrl:'/content/scripts/app/components/miscellaneous/about/ta-about-desktop.html',controller:'taAboutDesktopController'}).controller('taAboutDesktopController',['$scope',function($scope){var _self=this;this.currentYear='2020';this.$onInit=function(){_self.currentYear=new Date().getFullYear();};}]);;angular.module('tasteatlas').component('taAboutMobile',{templateUrl:'/content/scripts/app/components/miscellaneous/about/ta-about-mobile.html',controller:'taAboutMobileController'}).controller('taAboutMobileController',['$scope',function($scope){var _self=this;this.currentYear='2020';this.$onInit=function(){_self.currentYear=new Date().getFullYear();};}]);;angular.module('tasteatlas').component('taPrivacyDesktop',{templateUrl:'/content/scripts/app/components/miscellaneous/privacy/ta-privacy-desktop.html',controller:'taPrivacyDesktopController'}).controller('taPrivacyDesktopController',['$scope',function($scope){}]);;angular.module('tasteatlas').component('taPrivacyMobile',{templateUrl:'/content/scripts/app/components/miscellaneous/privacy/ta-privacy-mobile.html',controller:'taPrivacyMobileController'}).controller('taPrivacyMobileController',['$scope',function($scope){}]);;angular.module('tasteatlas').component('taSiteMapDesktop',{templateUrl:'/content/scripts/app/components/miscellaneous/site-map/ta-site-map-desktop.html',controller:'taSiteMapDesktopController'}).controller("taSiteMapDesktopController",["RegionService","IngredientGroupService","DishGroupService","$q",function(RegionService,IngredientGroupService,DishGroupService,$q){var _self=this;this.regions=[];this.dishes=[];this.areDishesVisible=false;this.ingredients=[];this.areIngredientsVisible=false;this.sliceIndex=10;this.isLoaded=false;this.$onInit=function(){var promises=[RegionService.getRegionSiteMapParent(),DishGroupService.getDishGroupSiteMapParent(),IngredientGroupService.getIngredientGroupSiteMapParent()];$q.all(promises).then(function success(response){_self.regions=response[0].data;_self.dishes=response[1].data.slice(0,_self.sliceIndex);_self.tempDishes=response[1].data.slice(_self.sliceIndex);_self.ingredients=response[2].data.slice(0,_self.sliceIndex);_self.tempIngredients=response[2].data.slice(_self.sliceIndex);_self.isLoaded=true;},function error(err){console.log(err);});};this.viewDishes=function(){_self.areDishesVisible=true;_self.dishes=_self.dishes.concat(_self.tempDishes);};this.viewIngredients=function(){_self.areIngredientsVisible=true;_self.ingredients=_self.ingredients.concat(_self.tempIngredients);};}]);;angular.module('tasteatlas').component('taSiteMap',{templateUrl:'/content/scripts/app/components/miscellaneous/site-map/ta-site-map-main.html',controller:'taSiteMapController'}).controller("taSiteMapController",["RegionService","IngredientGroupService","DishGroupService","$q",function(RegionService,IngredientGroupService,DishGroupService,$q){var _self=this;this.regions=[];this.dishes=[];this.areDishesVisible=false;this.ingredients=[];this.areIngredientsVisible=false;this.sliceIndex=10;this.isLoaded=false;this.$onInit=function(){var promises=[RegionService.getRegionSiteMapParent(),DishGroupService.getDishGroupSiteMapParent(),IngredientGroupService.getIngredientGroupSiteMapParent()];$q.all(promises).then(function success(response){_self.regions=response[0].data;_self.dishes=response[1].data.slice(0,_self.sliceIndex);_self.tempDishes=response[1].data.slice(_self.sliceIndex);_self.ingredients=response[2].data.slice(0,_self.sliceIndex);_self.tempIngredients=response[2].data.slice(_self.sliceIndex);_self.isLoaded=true;},function error(err){console.log(err);});};this.viewDishes=function(){_self.areDishesVisible=true;_self.dishes=_self.dishes.concat(_self.tempDishes);};this.viewIngredients=function(){_self.areIngredientsVisible=true;_self.ingredients=_self.ingredients.concat(_self.tempIngredients);};}]);;angular.module('tasteatlas').component('taSiteMapDish',{templateUrl:'/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-dish.html',controller:'taSiteMapDishController',bindings:{dishes:'='}}).controller("taSiteMapDishController",["MainHelper","DishGroupService",function(MainHelper,DishGroupService){var _self=this;this.viewChildren=function(id,index){if(_self.dishes[index].toggleChildren!==undefined){_self.dishes[index].toggleChildren=!_self.dishes[index].toggleChildren;MainHelper.closeAllChildren(_self.dishes[index].child);return;}
DishGroupService.getDishGroupChildren(id).then(function success(response){_self.dishes[index].child=[];_self.dishes[index].child=response.data;_self.dishes[index].toggleChildren=true;if(_self.dishes[index].Children.length>0){angular.forEach(_self.dishes[index].Children,function(value,key){var item={Children:[],Count:0,Id:_self.dishes[index].Children[key].Id,Image:_self.dishes[index].Children[key].Image,IsCountvisible:false,Link:_self.dishes[index].Children[key].UrlLink,Name:_self.dishes[index].Children[key].Name,RegionLevel:null};_self.dishes[index].child.push(item);});}},function error(err){console.log(err);});};this.mapDescription=function(count){if(count===0)
return null;else if(count===1)
return '1 ITEM';else
return count+' ITEMS';};}]);;angular.module('tasteatlas').component('taSiteMapIngredient',{templateUrl:'/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-ingredient.html',controller:'taSiteMapIngredientController',bindings:{ingredients:'='}}).controller("taSiteMapIngredientController",["MainHelper","IngredientGroupService",function(MainHelper,IngredientGroupService){var _self=this;this.viewChildren=function(id,index){if(_self.ingredients[index].toggleChildren!==undefined){_self.ingredients[index].toggleChildren=!_self.ingredients[index].toggleChildren;MainHelper.closeAllChildren(_self.ingredients[index].child);return;}
IngredientGroupService.getIngredientGroupChildren(id).then(function success(response){_self.ingredients[index].child=[];_self.ingredients[index].child=response.data;_self.ingredients[index].toggleChildren=true;if(_self.ingredients[index].Children.length>0){angular.forEach(_self.ingredients[index].Children,function(value,key){var item={Children:[],Count:0,Id:_self.ingredients[index].Children[key].Id,Image:_self.ingredients[index].Children[key].Image,IsCountvisible:false,Link:_self.ingredients[index].Children[key].UrlLink,Name:_self.ingredients[index].Children[key].Name,RegionLevel:null};_self.ingredients[index].child.push(item);});}},function error(err){console.log(err);});};this.mapDescription=function(count){if(count===0)
return null;else if(count===1)
return '1 ITEM';else
return count+' ITEMS';};}]);;angular.module('tasteatlas').component('taSiteMapRegion',{templateUrl:'/content/scripts/app/components/miscellaneous/site-map/site-map-child/ta-site-map-region.html',controller:'taSiteMapRegionController',bindings:{regions:'='}}).controller("taSiteMapRegionController",["MainHelper","RegionService",function(MainHelper,RegionService){var _self=this;this.viewRegionChildren=function(id,index){if(_self.regions[index].toggleChildren!==undefined){_self.regions[index].toggleChildren=!_self.regions[index].toggleChildren;MainHelper.closeAllChildren(_self.regions[index].child);return;}
RegionService.getRegionChildren(id).then(function success(response){_self.regions[index].child=[];_self.regions[index].child=response.data;_self.regions[index].toggleChildren=true;},function error(err){console.log(err);});};this.mapDescription=function(level,count){if(count===0)
return null;if(level<4)
return null;else if(level>3&&level<7)
return count>1?count+' REGIONS':'1 REGION';else if(level===9)
return count>1?count+' COUNTRIES':'1 COUNTRY';else
return null;};}]);;angular.module('tasteatlas').component('taTermsDesktop',{templateUrl:'/content/scripts/app/components/miscellaneous/terms/ta-terms-desktop.html',controller:'taTermsDesktopController'}).controller('taTermsDesktopController',['$scope','$element','$window',function($scope,$element,$window){var _self=this;this.introduction='anchor-introduction';this.introductionPosition=0;this.copyright='anchor-copyright';this.copyrightPosition=0;this.licence='anchor-licence';this.licencePosition=0;this.use='anchor-use';this.usePosition=0;this.registrationAndAccounts='anchor-registration-and-accounts';this.registrationAndAccountsPosition=0;this.cancellationAndSuspensionOfAccount='anchor-cancellation-and-suspension-of-account';this.cancellationAndSuspensionOfAccountPosition=0;this.yourContentLicence='anchor-your-content-licence';this.yourContentLicencePosition=0;this.yourContentRules='anchor-your-content-rules';this.yourContentRulesPosition=0;this.limitedWarranties='anchor-limited-warranties';this.limitedWarrantiesPosition=0;this.limitationsAndExclusionsOfLiability='anchor-your-limitations-and-exclusions-of-liability';this.limitationsAndExclusionsOfLiabilityPosition=0;this.breachesofTheseTermsAndConditions='anchor-breaches-of-these-terms-and-conditions';this.breachesofTheseTermsAndConditionsPosition=0;this.variation='anchor-variation';this.variationPosition=0;this.assignment='anchor-assignment';this.assignmentPosition=0;this.severability='anchor-severability';this.severabilityPosition=0;this.thirdPartyRights='anchor-third-party-rights';this.thirdPartyRightsPosition=0;this.statutoryAndRegulatoryDisclosures='anchor-statutory-and-regulatory-disclosures';this.statutoryAndRegulatoryDisclosuresPosition=0;this.entireAggrement='anchor-entire-aggrement';this.entireAggrementPosition=0;this.data=[];this.isDataSet=false;this.position=_self.introduction;this.textWrapper;this.textWrapperHeight=0;this.$onInit=function(){console.log(angular.element('#text-wrapper')[0].scrollHeight);_self.textWrapper=angular.element('#text-wrapper')[0];_self.textWrapperHeight=_self.textWrapper.scrollHeight;_self.textWrapper.scrollHeight=_self.textWrapper.scrollHeight+1000;_self.position=_self.introduction;_self.introductionPosition=angular.element(document.getElementById(_self.introduction))[0].offsetTop;_self.copyrightPosition=angular.element(document.getElementById(_self.copyright))[0].offsetTop;_self.licencePosition=angular.element(document.getElementById(_self.licence))[0].offsetTop;_self.usePosition=angular.element(document.getElementById(_self.use))[0].offsetTop;_self.registrationAndAccountsPosition=angular.element(document.getElementById(_self.registrationAndAccounts))[0].offsetTop;_self.cancellationAndSuspensionOfAccountPosition=angular.element(document.getElementById(_self.cancellationAndSuspensionOfAccount))[0].offsetTop;_self.yourContentLicencePosition=angular.element(document.getElementById(_self.yourContentLicence))[0].offsetTop;_self.yourContentRulesPosition=angular.element(document.getElementById(_self.yourContentRules))[0].offsetTop;_self.limitedWarrantiesPosition=angular.element(document.getElementById(_self.limitedWarranties))[0].offsetTop;_self.limitationsAndExclusionsOfLiabilityPosition=angular.element(document.getElementById(_self.limitationsAndExclusionsOfLiability))[0].offsetTop;_self.breachesofTheseTermsAndConditionsPosition=angular.element(document.getElementById(_self.breachesofTheseTermsAndConditions))[0].offsetTop;_self.variationPosition=angular.element(document.getElementById(_self.variation))[0].offsetTop;_self.assignmentPosition=angular.element(document.getElementById(_self.assignment))[0].offsetTop;_self.severabilityPosition=angular.element(document.getElementById(_self.severability))[0].offsetTop;_self.thirdPartyRightsPosition=angular.element(document.getElementById(_self.thirdPartyRights))[0].offsetTop;_self.entireAggrementPosition=angular.element(document.getElementById(_self.entireAggrement))[0].offsetTop;_self.data=[{name:'Introduction',id:_self.introduction,value:_self.introductionPosition},{name:'Copyright notice',id:_self.copyright,value:_self.copyrightPosition},{name:'License to use websit',id:_self.licence,value:_self.licencePosition},{name:'Acceptable use',id:_self.use,value:_self.usePosition},{name:'Registration and accounts',id:_self.registrationAndAccounts,value:_self.registrationAndAccountsPosition},{name:'Cancellation and suspension of account',id:_self.cancellationAndSuspensionOfAccount,value:_self.cancellationAndSuspensionOfAccountPosition},{name:'Your content: license',id:_self.yourContentLicence,value:_self.yourContentLicencePosition},{name:'Your content: rules',id:_self.yourContentRules,value:_self.yourContentRulesPosition},{name:'Limited warranties',id:_self.limitedWarranties,value:_self.limitedWarrantiesPosition},{name:'Limitations and exclusions of liability',id:_self.limitationsAndExclusionsOfLiability,value:_self.limitationsAndExclusionsOfLiabilityPosition},{name:'Breaches of these terms and conditions',id:_self.breachesofTheseTermsAndConditions,value:_self.breachesofTheseTermsAndConditionsPosition},{name:'Variation',id:_self.variation,value:_self.variationPosition},{name:'Assignment',id:_self.assignment,value:_self.assignmentPosition},{name:'Severability',id:_self.severability,value:_self.severabilityPosition},{name:'Third party rights',id:_self.thirdPartyRights,value:_self.thirdPartyRightsPosition},{name:'Entire agreement',id:_self.entireAggrement,value:_self.entireAggrementPosition}];_self.isDataSet=true;};this.changePage=function(page){this.onChangePage({$event:{page:page}});};this.goToAnchor=function(top,type,id){var element=document.getElementById('text-wrapper');var to=document.getElementById(id).offsetTop;scrollTo(element,to,1000,40);};function scrollTo(element,to,duration,topOffset){var start=element.scrollTop;var change=to-start-topOffset;var currentTime=0;var increment=20;var animateScroll=function(){currentTime+=increment;var val=easeInOutQuad(currentTime,start,change,duration);element.scrollTop=val;if(currentTime<duration){setTimeout(animateScroll,increment);}};animateScroll();}
function easeInOutQuad(t,b,c,d){t/=d/2;if(t<1)return c/2*t*t+b;t--;return-c/2*(t*(t-2)-1)+b;}
this.updateAnchor=function(){var top=document.getElementById('text-wrapper').scrollTop;$scope.$apply(function(){_self.position=closest();function closest(){var curr=_self.data[0].value;var diff=Math.abs(top-curr);for(var val=0;val<_self.data.length;val++){var newdiff=Math.abs(top-_self.data[val].value);if(newdiff<diff){diff=newdiff;curr=_self.data[val].name;}}
return curr;}});};}]).directive('onScroll',function($timeout){return{scope:{handler:'&'},restrict:'A',link:function(scope,element){element.on('scroll',function(e){scope.handler();});}};});;angular.module('tasteatlas').component('taTermsMobile',{templateUrl:'/content/scripts/app/components/miscellaneous/terms/ta-terms-mobile.html',controller:'taTermsMobileController',bindings:{onChangePage:'&'}}).controller('taTermsMobileController',['$scope',function($scope){var _self=this;this.changePage=function(page){this.onChangePage({$event:{page:page}});};}]);;angular.module('tasteatlas').component('taNearMe',{controller:'taNearMeController',templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/near-me/near-me-mobile/ta-near-me-mobile.html','desktop':'/content/scripts/app/components/near-me/near-me-desktop/ta-near-me-desktop.html'};return templates[$attrs.template];},bindings:{template:'@'}}).controller("taNearMeController",['$q','constants','GeolocationService','NearMeServiceV3','RegionService','MainHelper','FoodTypesService','PageStatusSubjectService','$timeout','RatingSharedService','RestaurantDishService',function($q,constants,GeolocationService,NearMeServiceV3,RegionService,MainHelper,FoodTypesService,PageStatusSubjectService,$timeout,RatingSharedService,RestaurantDishService){var _self=this;this.constants=constants;this.getDistance=MainHelper.getDistance;this.isLoaded=false;this.location={longitude:'',latitude:'',hasLocation:false};this.hasLocation=false;this.viewAllLink='';var _granted='GRANTED';var _denied='DENIED';var _prompt='PROMPT';var _trouble='TROUBLE';this.locationState='';this.food={};this.restaurants={};this.restaurantsList=[];this.restaurantsPageSize=10;this.currentRegionId=0;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};var loadItemRating=FoodTypesService.loadItemRatingDetailsMobile;this.chooseFirstCircle=RestaurantDishService.chooseFirstCircle;this.$onInit=function(){if(_self.template==='desktop'){loadItemRating=FoodTypesService.loadItemRatingDetailsDesktop;_self.restaurantsPageSize=6;}
GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:6000}).then(function(data){if(data==='TROUBLE'){_self.locationState=_trouble;_self.isLoaded=true;return null;}
if(data==='DENIED'){_self.locationState=_denied;_self.isLoaded=true;return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude,hasLocation:true};_self.locationState=_granted;promiseChain();console.log(data);}).catch(function(error){console.log(error);_self.locationState=_trouble;_self.isLoaded=true;});}else if(data==='PROMPT'){_self.isLoaded=true;_self.locationState=_prompt;}else if(data==='DENIED'){_self.locationState=_denied;_self.isLoaded=true;}});};this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:6000}).then(function(data){if(data==='DENIED'){_self.locationState=_denied;_self.isLoaded=true;return;}
if(data==='TROUBLE'){_self.locationState=_trouble;_self.isLoaded=true;return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};_self.locationState=_granted;promiseChain();});}
if(data==='DENIED'){_self.locationState=_denied;_self.isLoaded=true;}});};function promiseChain(){_self.isLoaded=false;var filter={lat:_self.location.latitude,lon:_self.location.longitude,pageSize:_self.restaurantsPageSize,page:0};var promises=[NearMeServiceV3.getFood(filter),NearMeServiceV3.getRestaurants(filter),RegionService.getCurrentRegionId({lat:_self.location.latitude,lon:_self.location.longitude})];$q.all(promises).then(function(success){_self.food=success[0].data;loadItemRating(success[0].data.Data);_self.food.page=0;_self.food.selectedViewGrid='horizontal-list';_self.restaurants=success[1].data.Restaurants;_self.restaurantsList=success[1].data.Restaurants.Data;_self.viewAllLink=success[1].data.ViewAllRegionUrlLink;_self.restaurants.page=0;_self.currentRegionId=success[2].data;_self.isLoaded=true;},function(error){console.log(error);}).finally(function(){$timeout(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});});});}
this.loadMoreRestaurants=function(){_self.restaurants.page=_self.restaurants.page+1;NearMeServiceV3.getRestaurants({lat:_self.location.latitude,lon:_self.location.longitude,pageSize:_self.restaurantsPageSize,page:_self.restaurants.page}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.Restaurants.Data);_self.restaurantsList=_self.restaurants.Data;},function(error){console.log(error);});};this.onLocationActivated=function(location){_self.location=location;_self.locationState=_granted;return promiseChain();};this.getRankingLabel=function(ranking){if(!ranking){return "";}
if(ranking>1){return "Top 10 in the world";}
return "Most iconic in the world";};this.getRestaurantAddress=function(restaurant){var isInRestaurantRegion=_self.currentRegionId===restaurant.Region.RegionId;if(!_self.currentRegionId||!isInRestaurantRegion){return restaurant.Region.Name;}
return restaurant.Address.split(',')[0];};this.showBannerInRestaurantsList=function(index){if(index===0){return true;}
if(index%3===0){return true;}
return false;};this.includeHorizontalScroll=function(id){return MainHelper.includeHorizontalScroll(id);};this.scroll=function(direction,id){var container=document.getElementById(id);MainHelper.sideScroll(container,direction,10,300,10);};this.tryOpenRating=function(item){return RatingSharedService.tryOpenRatingCustom(function(){_self.restaurantItem=item;_self.isRestaurantRatingOpen=true;});};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(){_self.isRestaurantRatingOpen=false;_self.restaurantItem=null;};this.showAwardImage=function(item){return item.IsMustTry&&!item.IsLegendary;};this.showLegendaryIcon=function(item){return item.IsLegendary;};this.shouldAlignRecommendedDishesToBottom=MainHelper.shouldAlignRecommendedDishesToBottom;}]);;angular.module('tasteatlas').component('taHomeNearMe',{controller:'taHomeNearMeController',templateUrl:'/content/scripts/app/components/near-me/home-near-me/ta-home-near-me.html',bindings:{template:'@',isMobile:'<'}}).controller("taHomeNearMeController",['$q','constants','taServicesEntityModalHandler','GeolocationService','NearMeServiceV3','MainHelper','$timeout','UserCacheService',function($q,constants,taServicesEntityModalHandler,GeolocationService,NearMeServiceV3,MainHelper,$timeout,UserCacheService){var _self=this;this.isLoaded=false;this.userClicked=false;this.locationEnabled=true;this.nullOr500ServerError=false;this.localFood=[];this.openEntityRestaurantModal=taServicesEntityModalHandler.openEntityRestaurantModal;this.location={longitude:'',latitude:'',hasLocation:false};this.getDistance=MainHelper.getDistance;this.nearMeServiceV3=NearMeServiceV3;var isMobile=window.innerWidth<=768;var _granted='GRANTED';var _denied='DENIED';var _prompt='PROMPT';var _trouble='TROUBLE';_self.constants=constants;var localstorageKey='near_me_home';var useLocalCache=true;var localCacheTimeInMilliseconds=15*60*1000;this.$onInit=function(){if(!isMobile){_self.initialNearMeSlider();}
if(window.location.href.indexOf('noNearMeCache')!=-1){useLocalCache=false;}
initFromCacheIfExists();document.querySelector('#myButton').addEventListener('click',function(){ga('send','event','Button','Click','NearMe');});};_self.onUserClick=function(){_self.userClicked=true;GeolocationService.handlePremission().then(function(data){if(data===_granted){GeolocationService.getLocation({timeout:6000}).then(function(data){if(data===_trouble){_self.locationState=_trouble;_self.locationEnabled=false;return null;}
if(data===_denied){_self.locationState=_denied;_self.locationEnabled=false;return null;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};_self.locationState=_granted;promiseChain();}).catch(function(error){console.log(error);_self.nullOr500ServerError=true;_self.locationState=_trouble;})}else if(data===_prompt){_self.locationEnabled=false;_self.locationState=_prompt;}else if(data===_denied){_self.locationState=_denied;_self.locationEnabled=false;}});}
_self.onLocationActivated=function(location){_self.location=location;_self.locationState=_granted;return promiseChain();};_self.initialNearMeSlider=function(){$timeout(function(){var swiper=new Swiper('.near-me-slider',{slidesPerView:3,slidesPerGroup:1,freeMode:false,observer:true,observeParents:true,speed:500,resistanceRatio:0,navigation:{nextEl:'.near-me-button-next',prevEl:'.near-me-button-prev',},});});}
function initFromCacheIfExists(){if(!useLocalCache)
return;var localFood=UserCacheService.getItemWithExpiration(localstorageKey);if(localFood){_self.localFood=localFood;_self.isLoaded=true;_self.userClicked=true;}}
function promiseChain(){_self.isLoaded=false;_self.locationEnabled=true;var promises=[_self.nearMeServiceV3.getHomeNearMe({lat:_self.location.latitude,lon:_self.location.longitude})];$q.all(promises).then(function(success){if(success[0].data==null)
useLocalCache=false,_self.nullOr500ServerError=true;else
_self.localFood=success[0].data;if(useLocalCache)
UserCacheService.setItemWithExpiration(localstorageKey,success[0].data,localCacheTimeInMilliseconds);}).catch(function(error){console.log(error)
_self.nullOr500ServerError=true;useLocalCache=false;}).finally(function(){_self.isLoaded=true;})};}]);;angular.module('tasteatlas').component('taProfileMap',{bindings:{userId:'<'},templateUrl:'/content/scripts/app/components/profile/ta-profile-map.html',controller:'taProfileMapCtrl'}).controller("taProfileMapCtrl",["$timeout","ProfileMapService",function($timeout,ProfileMapService){var _self=this;var _mapId='profile-map';this.isMapOpen=false;this.$onInit=function(){if(!_mapId)
return;ProfileMapService.initMap({mapId:_mapId});$timeout(function(){ProfileMapService.getProfileMapData(_self.userId);},0);};this.toggleMap=function(){var mapContainer=document.getElementById('profile-map-container');mapContainer.classList.toggle('profile__map--show');_self.isMapOpen=!_self.isMapOpen;};}]);;angular.module('tasteatlas').component('taProfileDesktopListPrivatePopup',{bindings:{item:'<',onDeleteItem:'&',onOrderChange:'&',onClosePopup:'&'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-private-popup.html',controller:'taProfileDesktopListPrivatePopupController'}).controller("taProfileDesktopListPrivatePopupController",["constants",function(constants){var _self=this;this.constants=constants;this.currentIndex=0;this.newIndex=0;this.$onInit=function(){_self.currentIndex=_self.item.Order;_self.newIndex=_self.item.Order;};this.orderChange=function(item){_self.onOrderChange({item:item,lastIndex:_self.currentIndex,newIndex:_self.newIndex});};this.deleteItem=function(item){_self.onDeleteItem({id:item.Id});};this.closePopup=function(){_self.onClosePopup();};}]);;angular.module('tasteatlas').component('taProfileDesktopListPrivate',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-private.html',controller:'taProfileDesktopListPrivateController'}).controller("taProfileDesktopListPrivateController",["ProfileService","constants","RegionService","DishService","RestaurantService","$scope",function(ProfileService,constants,RegionService,DishService,RestaurantService,$scope){var _self=this;this.constants=constants;this.openShareListModal=false;this.addToListType;this.LIST_TYPES={'FavoriteFood':dishesListLimit=3,'FavoriteCouisines':cuisinesListLimit=3,'restaurants':restaurantsListLimit=3,}
this.LOAD_MORE_BTN_TYPES={'FavoriteFood':dishesListLimitLoadMore=true,'FavoriteCouisines':cuisinesListLimitLoadMore=true,'restaurants':restaurantsListLimitLoadMore=true,}
this.addFavoriteDishRestaurantForm={};Array.prototype.move=function(from,to){this.splice(to,0,this.splice(from,1)[0]);};this.$onInit=function(){_self.addFavoriteDishRestaurantForm={UserId:_self.details.UserId,DishId:'',RestaurantId:'',RestaurantName:'',RestaurantCity:'',RestaurantCountry:'',Order:_self.details.FavoriteDishRestaurants.length+1};angular.element(document).ready(function(){var swiper=new Swiper('.profile-lists__lists-slider',{slidesPerView:3,spaceBetween:0,loop:false,watchOverflow:true,freeMode:false,navigation:{nextEl:'.swiper-button-next',prevEl:'.swiper-button-prev'},});});Object.keys(this.LIST_TYPES).forEach((type)=>{if(_self.details[type]){this.checkListLengthByType(type)}});};this.loadMoreListItems=function(type){_self.LIST_TYPES[type]=_self.LIST_TYPES[type]+3;if(_self.LIST_TYPES[type]<_self.details[type].length){_self.LOAD_MORE_BTN_TYPES[type]=true;}
else{_self.LOAD_MORE_BTN_TYPES[type]=false;}}
this.checkListLengthByType=function(type){if(_self.LIST_TYPES[type]<_self.details[type].length){_self.LOAD_MORE_BTN_TYPES[type]=true;}
else{_self.LOAD_MORE_BTN_TYPES[type]=false;}}
this.favoriteCouisinePopup='';this.onOpenFavoriteCouisinePopup=function(id){_self.favoriteCouisinePopup='favorite-couisine-popup-'+id;};this.onCloseFavoriteCouisinePopup=function(){_self.favoriteCouisinePopup='';};this.couisineQuery='';this.couisines=[];this.isCouisineLoading=false;this.isCouisineFormOpened=false;this.onOpenCouisineForm=function(){_self.isCouisineFormOpened=!_self.isCouisineFormOpened;};this.onCouisineEnter=function(id){var deleteBtn=angular.element('#delete-couisine-'+id);deleteBtn.removeClass('js-hide');};this.onCouisineLeave=function(id){var deleteBtn=angular.element('#delete-couisine-'+id);deleteBtn.addClass('js-hide');};this.favoriteCouisinesDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;data.push({Id:_self.details.FavoriteCouisines[i].Id,UserId:_self.details.UserId,RegionId:_self.details.FavoriteCouisines[i].RegionId,Order:i+1});}
if(data.length===0)
return;_self.isCouisineLoading=true;ProfileService.UpdateFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.isCouisineLoading=false;}).catch(function(error){console.log(error);_self.isCouisineLoading=false;});},containment:'#favorite-couisine-id'};this.onSearchRegionByCouisine=function(query){if(!query||query.length===0)
return;RegionService.searchRegionsByCouisine(query).then(function(success){_self.couisines=success.data;}).catch(function(error){console.log(error);});};this.onDeleteCouisineQuery=function(){_self.couisineQuery='';_self.couisines=[];};this.onCouisineClick=function(couisine){if(!couisine)
return;var hasCouisine=false;_self.details.FavoriteCouisines=_self.details.FavoriteCouisines.filter(function(value,index,arr){if(value.RegionId===couisine.EntityId)
hasCouisine=true;return value;});if(!hasCouisine){_self.isCouisineLoading=true;var data={UserId:_self.details.UserId,RegionId:couisine.EntityId,Order:_self.details.FavoriteCouisines.length+1};ProfileService.AddFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.details.FavoriteCouisines.push(success.data);_self.isCouisineLoading=false;}).catch(function(error){console.log(error);_self.isCouisineLoading=false;});}
_self.isCouisineFormOpened=false;_self.onDeleteCouisineQuery();};this.onDeleteFavoriteCouisine=function(id){ProfileService.DeleteFavoriteCouisine(_self.details.UserId,id).then(function(success){_self.details.FavoriteCouisines=_self.details.FavoriteCouisines.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;}
_self.onCloseFavoriteCouisinePopup();}).catch(function(error){_self.onCloseFavoriteCouisinePopup();console.log(error);});};this.onFavoriteCouisineOrderChange=function(item,lastIndex,newIndex){if(newIndex>_self.details.FavoriteCouisines.length)
newIndex=_self.details.FavoriteCouisines.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex)-1;var to=parseInt(newIndex)-1;_self.details.FavoriteCouisines.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;data.push({Id:_self.details.FavoriteCouisines[i].Id,UserId:_self.details.UserId,RegionId:_self.details.FavoriteCouisines[i].RegionId,Order:i+1});}
if(data.lenth===0)
return;_self.isCouisineLoading=false;ProfileService.UpdateFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.isCouisineLoading=false;_self.onCloseFavoriteCouisinePopup();}).catch(function(error){console.log(error);_self.onCloseFavoriteCouisinePopup();_self.isCouisineLoading=false;});};this.favoriteFoodQuery='';this.favoriteFoodAutocomplete=[];this.isFavoriteFoodAutocompleteLoading=false;this.onFavoriteFoodOrderChange=function(item,lastIndex,newIndex){if(newIndex>_self.details.FavoriteFood.length)
newIndex=_self.details.FavoriteFood.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex)-1;var to=parseInt(newIndex)-1;_self.details.FavoriteFood.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;data.push({Id:_self.details.FavoriteFood[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteFood[i].DishId,IngredientId:_self.details.FavoriteFood[i].IngredientId,Order:i+1});}
if(data.length===0)
return;_self.isFavoriteFoodAutocompleteLoading=true;ProfileService.UpdateFavoriteFood(_self.details.UserId,data).then(function(success){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();console.log(error);});};this.isFavoriteFoodFormOpened=false;this.onOpenFavoriteFoodForm=function(){_self.isFavoriteFoodFormOpened=!_self.isFavoriteFoodFormOpened;};this.favoriteFoodPopup='';this.onOpenFavoriteFoodPopup=function(id){_self.favoriteFoodPopup='favorite-food-popup-'+id;};this.onCloseFavoriteFoodPopup=function(){_self.favoriteFoodPopup='';};this.onFoodEnter=function(id){var deleteBtn=angular.element('#delete-food-'+id);deleteBtn.removeClass('js-hide');};this.onFoodLeave=function(id){var deleteBtn=angular.element('#delete-food-'+id);deleteBtn.addClass('js-hide');};this.favoriteFoodDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;data.push({Id:_self.details.FavoriteFood[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteFood[i].DishId,IngredientId:_self.details.FavoriteFood[i].IngredientId,Order:i+1});}
if(data.length===0)
return;_self.isFavoriteFoodAutocompleteLoading=true;ProfileService.UpdateFavoriteFood(_self.details.UserId,data).then(function(success){_self.isFavoriteFoodAutocompleteLoading=false;}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;console.log(error);});},containment:'#favorite-food-id'};this.onSearchFavoriteFood=function(query){if(!query||query.length===0)
return;DishService.searchFood(query).then(function(success){_self.favoriteFoodAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onDeleteFavoriteFoodAutocompleteQuery=function(){_self.favoriteFoodQuery='';_self.favoriteFoodAutocomplete=[];};this.onFavoriteFoodAutocompleteClick=function(food){if(!food)
return;var hasFavoriteFood=false;var dishId=null;var ingredientId=null;if(food.EntityType===1){dishId=food.EntityId;}
if(food.EntityType===2){ingredientId=food.EntityId;}
_self.details.FavoriteFood=_self.details.FavoriteFood.filter(function(value,index,arr){if(value.DishId&&value.DishId===food.EntityId){hasFavoriteFood=true;}
if(value.IngredientId&&value.IngredientId===food.EntityId){hasFavoriteFood=true;}
if(index<5){return value;}});if(!hasFavoriteFood){_self.isFavoriteFoodAutocompleteLoading=true;var data={UserId:_self.details.UserId,DishId:dishId,IngredientId:ingredientId,Order:_self.details.FavoriteFood.length+1};ProfileService.AddFavoriteFood(_self.details.UserId,data).then(function(success){if(success.data!==null){_self.details.FavoriteFood.push(success.data);}
_self.isFavoriteFoodAutocompleteLoading=false;}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;console.log(error);});}
_self.isFavoriteFoodFormOpened=false;_self.onDeleteFavoriteFoodAutocompleteQuery();};this.onDeleteFavoriteFood=function(id){ProfileService.DeleteFavoriteFood(_self.details.UserId,id).then(function(success){_self.details.FavoriteFood=_self.details.FavoriteFood.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;}}).catch(function(error){console.log(error);});};this.favoriteRestaurantPopup='';this.onOpenFavoriteRestaurantPopup=function(id){_self.favoriteRestaurantPopup='favorite-restaurant-popup-'+id;};this.onCloseFavoriteRestaurantPopup=function(){_self.favoriteRestaurantPopup='';};this.dishesAutocomplete=[];this.restaurantAutocomplete=[];this.isFavoriteDishRestaurantsLoading=false;this.onDishRestaurantEnter=function(id){var deleteBtn=angular.element('#delete-dish-restaurant-'+id);deleteBtn.removeClass('js-hide');};this.onDishRestaurantLeave=function(id){var deleteBtn=angular.element('#delete-dish-restaurant-'+id);deleteBtn.addClass('js-hide');};this.onFavoriteDishRestaurantsOrderChange=function(lastIndex,newIndex){if(newIndex>_self.details.FavoriteDishRestaurants.length)
newIndex=_self.details.FavoriteDishRestaurants.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex);var to=parseInt(newIndex)-1;_self.details.FavoriteDishRestaurants.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){_self.details.FavoriteDishRestaurants[i].Order=i+1;data.push({Id:_self.details.FavoriteDishRestaurants[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteDishRestaurants[i].DishId,Order:i+1,RestaurantId:_self.details.FavoriteDishRestaurants[i].RestaurantId,RestaurantName:_self.details.FavoriteDishRestaurants[i].RestaurantName,RestaurantCity:_self.details.FavoriteDishRestaurants[i].RestaurantCity,RestaurantCountry:_self.details.FavoriteDishRestaurants[i].RestaurantCountry});}
if(data.length===0)
return;_self.isDishesAutocompleteLoading=true;ProfileService.UpdateFavoriteDishRestaurants(_self.details.UserId,data).then(function(success){_self.isDishesAutocompleteLoading=false;_self.onCloseFavoriteRestaurantPopup();}).catch(function(error){console.log(error);_self.onCloseFavoriteRestaurantPopup();_self.isDishesAutocompleteLoading=false;});};this.favoriteDishRestaurantsDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){_self.details.FavoriteDishRestaurants[i].Order=i+1;data.push({Id:_self.details.FavoriteDishRestaurants[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteDishRestaurants[i].DishId,Order:i+1,RestaurantId:_self.details.FavoriteDishRestaurants[i].RestaurantId,RestaurantName:_self.details.FavoriteDishRestaurants[i].RestaurantName,RestaurantCity:_self.details.FavoriteDishRestaurants[i].RestaurantCity,RestaurantCountry:_self.details.FavoriteDishRestaurants[i].RestaurantCountry});}
if(data.length===0)
return;_self.isDishesAutocompleteLoading=true;ProfileService.UpdateFavoriteDishRestaurants(_self.details.UserId,data).then(function(success){_self.isDishesAutocompleteLoading=false;}).catch(function(error){console.log(error);_self.isDishesAutocompleteLoading=false;});},containment:'#favorite-dish-restaurant-id'};this.onSearchDishes=function(query){if(!query||query.length===0){_self.dishesAutocomplete=[];return;}
DishService.searchDishes(query).then(function(success){_self.dishesAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onDeleteDishQuery=function(){_self.dishQuery='';_self.dishesAutocomplete=[];};this.onDishAutocompleteClick=function(dish){if(!dish)
return;_self.addFavoriteDishRestaurantForm.DishId=dish.EntityId;_self.dishQuery=dish.Label;_self.dishesAutocomplete=[];};this.onSearchRestaurants=function(query){if(!query||query.length===0){_self.restaurantAutocomplete=[];return;}
RestaurantService.searchRestaurantsByName(query).then(function(success){_self.restaurantAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onRestaurantAutocompleteClick=function(restaurant){if(!restaurant)
return;_self.addFavoriteDishRestaurantForm.RestaurantId=restaurant.EntityId;_self.addFavoriteDishRestaurantForm.RestaurantName=restaurant.Label;_self.addFavoriteDishRestaurantForm.RestaurantCity=restaurant.RegionName;_self.addFavoriteDishRestaurantForm.RestaurantCountry=restaurant.CountryName;_self.restaurantAutocomplete=[];};this.onDeleteRestaurantQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantId=null;_self.addFavoriteDishRestaurantForm.RestaurantName='';_self.restaurantAutocomplete=[];};this.cityQuery='';this.onDeleteCityQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantCity='';};this.countryQuery='';this.onDeleteCountryQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantCountry='';};this.isFavoriteDishRestaurantFormOpened=false;this.onOpenFavoriteDishRestaurantForm=function(){_self.dishQuery=="";_self.addFavoriteDishRestaurantForm.RestaurantName="";_self.addFavoriteDishRestaurantForm.RestaurantCity="";_self.addFavoriteDishRestaurantForm.RestaurantCountry="";_self.favoriteDishRestaurants.$setUntouched();_self.isFavoriteDishRestaurantFormOpened=!_self.isFavoriteDishRestaurantFormOpened;};this.addFavoriteDishRestaurant=function(){if(!_self.favoriteDishRestaurants.$valid)
return;_self.addFavoriteDishRestaurantForm.Order=_self.details.FavoriteDishRestaurants.length+1;var hasFavoriteDishRestaurant=false;_self.details.FavoriteDishRestaurants=_self.details.FavoriteDishRestaurants.filter(function(value,index,arr){if(value.DishId===_self.addFavoriteDishRestaurantForm.DishId&&value.RestaurantId===_self.addFavoriteDishRestaurantForm.RestaurantId)
hasFavoriteDishRestaurant=true;return value;});if(!hasFavoriteDishRestaurant){_self.isFavoriteDishRestaurantsLoading=true;ProfileService.AddFavoriteDishRestaurant(_self.details.UserId,_self.addFavoriteDishRestaurantForm).then(function(success){_self.isFavoriteDishRestaurantsLoading=false;_self.details.FavoriteDishRestaurants.push(success.data);}).catch(function(error){_self.isFavoriteDishRestaurantsLoading=false;console.log(error);});}
_self.dishQuery=="";_self.addFavoriteDishRestaurantForm.RestaurantName="";_self.addFavoriteDishRestaurantForm.RestaurantCity="";_self.addFavoriteDishRestaurantForm.RestaurantCountry="";_self.favoriteDishRestaurants.$setUntouched();_self.isFavoriteDishRestaurantFormOpened=false;};this.onDeleteFavoriteDishRestaurant=function(id){if(!id)
return;ProfileService.DeleteFavoriteDishRestaurant(_self.details.UserId,id).then(function(success){_self.details.FavoriteDishRestaurants=_self.details.FavoriteDishRestaurants.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){_self.details.FavoriteDishRestaurants[i].Order=i+1;}}).catch(function(error){console.log(error);});};this.closeShareListModal=function(){_self.openShareListModal=false;document.querySelector('body').classList.remove('modal--open');};this.addToList=function(){_self.closeShareListModal();if(_self.addToListType=='Cuisines'){_self.isCouisineFormOpened=true;_self.isFavoriteDishRestaurantFormOpened=false;_self.isFavoriteFoodFormOpened=false;}
else if(_self.addToListType=='DishesInRestaurants'){_self.isFavoriteDishRestaurantFormOpened=true;_self.isCouisineFormOpened=false;_self.isFavoriteFoodFormOpened=false;}
else{_self.isFavoriteFoodFormOpened=true;_self.isFavoriteDishRestaurantFormOpened=false;_self.isCouisineFormOpened=false;}}
$scope.$on('openShareListModal',function(event,data){_self.openShareListModal=data.openShareListModal;_self.addToListType=data.type;});}]);;angular.module('tasteatlas').component('taProfileDesktopListPublic',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-list-public.html',controller:'taProfileDesktopListPublicController'}).controller("taProfileDesktopListPublicController",["constants",function(constants){var _self=this;this.constants=constants;}]);;angular.module('tasteatlas').component('taProfileDesktopMainPrivate',{bindings:{userId:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-main-private.html',controller:'taProfileDesktopMainPrivateController'}).controller("taProfileDesktopMainPrivateController",["ProfileService","constants","RegionService","FilePickerService","$scope","TokenFactory","$timeout",function(ProfileService,constants,RegionService,FilePickerService,$scope,TokenFactory,$timeout){var _self=this;this.constants=constants;this.details={};this.activePage='lists';this.isLoaded=false;this.editProfile={FirstName:'',LastName:'',Title:'',Description:'',CriticWebsite:'',RegionId:'',Location:'',ProfilePicture:'',};this.$onInit=function(){ProfileService.GetProfileDetails(_self.userId).then(function(success){_self.details=success.data;mapDetailsForEdit(_self.details);_self.isLoaded=true;}).catch((err)=>{console.error(err);}).finally(()=>{});};this.changePage=function(page){_self.activePage=page;};this.isEditPageOpened=false;this.openEditPage=function(){_self.isEditPageOpened=!_self.isEditPageOpened;if(!_self.isEditPageOpened){mapDetailsForEdit(_self.details);}};this.regionQuery='';this.regions=[];this.onAutocompleteRegions=function(query){if(!query||query.length===0)
return;_self.regions=[];RegionService.searchRegions(query).then(function(success){_self.regions=success.data;}).catch(function(error){console.log(error);});};this.onDeleteRegionQuery=function(){_self.regionQuery='';_self.regions=[];_self.editProfile.RegionId='';_self.editProfile.Location='';};this.onRegionAutocompleteClick=function(region){if(!region)
return;_self.regionQuery=region.Label;_self.regions=[];_self.editProfile.RegionId=region.EntityId;_self.editProfile.Location=region.Label;};this.addProfilePhoto=function(){FilePickerService.triggerFilePicker();};this.isUploadingPhoto=false;this.onUploadImageClick=function(file){if(!file)
return;_self.isUploadingPhoto=true;FilePickerService.readAsDataUrl(file[0],$scope).then(function(result){return ProfileService.UploadProfileImage(result.file);}).then(function(success){_self.editProfile.ProfilePicture=success.data;_self.isUploadingPhoto=false;}).catch(function(err){_self.isUploadingPhoto=false;console.log(err);});};this.isSubmitting=false;this.onEdit=function(){if(!_self.editForm.$valid)
return;_self.isSubmitting=true;ProfileService.UpdateProfileDetails(_self.details.UserId,_self.editProfile).then(function(success){_self.isSubmitting=false;TokenFactory.refreshIfSoonToExpire().then(function(){location.reload();});}).catch(function(error){console.log(error);_self.isSubmitting=false;});};function mapDetailsForEdit(data){_self.editProfile={FirstName:data.FirstName,LastName:data.LastName,Title:data.Title,Description:data.Description,CriticWebsite:data.Web,RegionId:data.RegionId,Location:data.Location,ProfilePicture:data.ProfilePicture};_self.regionQuery=data.Location;}}]);;angular.module('tasteatlas').component('taProfileDesktopMainPublic',{bindings:{userId:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-main-public.html',controller:'taProfileDesktopMainPublicController'}).controller("taProfileDesktopMainPublicController",["constants","ProfileService","$q","UserSubjectService","$timeout","LoginService",function(constants,ProfileService,$q,UserSubjectService,$timeout,LoginService){var _self=this;this.constants=constants;this.header=document.getElementById('header-id');this.details={};this.me={};this.activePage='lists';this.isLoaded=false;this.$onInit=function(){_self.isInAnonymousRole=UserSubjectService.isInAnonymousRole();ProfileService.GetProfileDetails(_self.userId).then(function(success){_self.details=success.data;_self.isLoaded=true;});};this.changePage=function(page){_self.activePage=page;};_self.createYourList=function(){if(UserSubjectService.isInAnonymousRole()){_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});}
else{_self.me=UserSubjectService.getUser();if(_self.me.urlLink){$timeout(function(){window.open('/profile/'+_self.me.urlLink,'_self');});}}}}]);;angular.module('tasteatlas').component('taProfileDesktopReviewsPrivate',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-reviews-private.html',controller:'taProfileDesktopReviewsPrivateController'}).controller("taProfileDesktopReviewsPrivateController",["ProfileService","constants",function(ProfileService,constants){var _self=this;this.constants=constants;this.currentReviewPage='dishes';this.isLoadingMoreDishComments=false;this.showLoadMoreDishBtn=true;this.isLoadingMoreIngredientComments=false;this.showLoadMoreIngredientsBtn=true;this.isLoadingMoreDishRestaurantComments=false;this.showLoadMoreDishRestaurantsBtn=true;this.$onInit=function(){_self.details.Dishes=[];_self.details.Dishes.PageIndex=1;_self.details.Ingredients=[];_self.details.Ingredients.PageIndex=1;_self.details.DishRestaurants=[];_self.details.DishRestaurants.PageIndex=1;_self.loadDishComments();}
this.changeReviewPage=function(page){_self.currentReviewPage=page;if(page=='ingredients'){_self.loadIngredientsComments();}
else if(page=='dishrestaurants'){_self.loadDishRestaurantsComments();}
else{_self.loadDishComments();}};this.loadDishComments=function(){_self.isLoadingMoreDishComments=true;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Dishes.Data=success.data.Data;_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});}
this.loadIngredientsComments=function(){_self.isLoadingMoreIngredientComments=true;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Ingredients.Data=success.data.Data;_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});}
this.loadDishRestaurantsComments=function(){_self.isLoadingMoreDishRestaurantComments=true;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.DishRestaurants.Data=success.data.Data;_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});}
this.onLoadMoreDishComments=function(){_self.isLoadingMoreDishComments=true;_self.details.Dishes.PageIndex=_self.details.Dishes.PageIndex+1;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Dishes.PageIndex}).then(function(success){_self.details.Dishes.Data=_self.details.Dishes.Data.concat(success.data.Data);_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});};this.onLoadMoreIngredientComments=function(){_self.isLoadingMoreIngredientComments=true;_self.details.Ingredients.PageIndex=_self.details.Ingredients.PageIndex+1;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Ingredients.PageIndex}).then(function(success){_self.details.Ingredients.Data=_self.details.Ingredients.Data.concat(success.data.Data);_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});};this.onLoadMoreDishRestaurantComments=function(){_self.isLoadingMoreDishRestaurantComments=true;_self.details.DishRestaurants.PageIndex=_self.details.DishRestaurants.PageIndex+1;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.DishRestaurants.PageIndex}).then(function(success){_self.details.DishRestaurants.Data=_self.details.DishRestaurants.Data.concat(success.data.Data);_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});};}]);;angular.module('tasteatlas').component('taProfileDesktopReviewsPublic',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-desktop/ta-profile-desktop-reviews-public.html',controller:'taProfileDesktopReviewsPublicController'}).controller("taProfileDesktopReviewsPublicController",["ProfileService","constants",function(ProfileService,constants){var _self=this;this.constants=constants;this.currentReviewPage='dishes';this.isLoadingMoreDishComments=false;this.showLoadMoreDishBtn=true;this.isLoadingMoreIngredientComments=false;this.showLoadMoreIngredientsBtn=true;this.isLoadingMoreDishRestaurantComments=false;this.showLoadMoreDishRestaurantsBtn=true;this.$onInit=function(){_self.details.Dishes=[];_self.details.Dishes.PageIndex=1;_self.details.Ingredients=[];_self.details.Ingredients.PageIndex=1;_self.details.DishRestaurants=[];_self.details.DishRestaurants.PageIndex=1;_self.loadDishComments();}
this.changeReviewPage=function(page){_self.currentReviewPage=page;if(page=='ingredients'){_self.loadIngredientsComments();}
else if(page=='dishrestaurants'){_self.loadDishRestaurantsComments();}
else{_self.loadDishComments();}};this.loadDishComments=function(){_self.isLoadingMoreDishComments=true;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Dishes.Data=success.data.Data;_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});}
this.loadIngredientsComments=function(){_self.isLoadingMoreIngredientComments=true;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Ingredients.Data=success.data.Data;_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});}
this.loadDishRestaurantsComments=function(){_self.isLoadingMoreDishRestaurantComments=true;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.DishRestaurants.Data=success.data.Data;_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});}
this.onLoadMoreDishComments=function(){_self.isLoadingMoreDishComments=true;_self.details.Dishes.PageIndex=_self.details.Dishes.PageIndex+1;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Dishes.PageIndex}).then(function(success){_self.details.Dishes.Data=_self.details.Dishes.Data.concat(success.data.Data);_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});};this.onLoadMoreIngredientComments=function(){_self.isLoadingMoreIngredientComments=true;_self.details.Ingredients.PageIndex=_self.details.Ingredients.PageIndex+1;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Ingredients.PageIndex}).then(function(success){_self.details.Ingredients.Data=_self.details.Ingredients.Data.concat(success.data.Data);_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});};this.onLoadMoreDishRestaurantComments=function(){_self.isLoadingMoreDishRestaurantComments=true;_self.details.DishRestaurants.PageIndex=_self.details.DishRestaurants.PageIndex+1;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.DishRestaurants.PageIndex}).then(function(success){_self.details.DishRestaurants.Data=_self.details.DishRestaurants.Data.concat(success.data.Data);_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});};}]);;angular.module('tasteatlas').component('taProfileListRedesign',{bindings:{userId:'<',isMobile:'<',isPrivate:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/profile/profile-list/ta-profile-list-redesign-mobile.html','desktop':'/content/scripts/app/components/profile/profile-list/ta-profile-list-redesign-desktop.html',};return templates[$attrs.template];},controller:'taProfileListRedesignController'}).controller("taProfileListRedesignController",["ProfileService","constants","DishService","$scope","$timeout",function(ProfileService,constants,DishService,$scope,$timeout){var _self=this;this.constants=constants;this.openShareListModal=false;this.autoPopulateRestaurantFields=false;this.selectedDishForRestaurant=false;this.addToListType;this.listItemCounter=10;this.listAllItems=100;this.userListTypeEnum={Food:1,Cuisines:2,DishesInRestaurants:3,}
this.userListAutocompleteTypeEnum={Dishes:1,Cuisines:2,Food:3,Cuisines:4,Restaurants:5,Recipes:6,}
this.LIST_TYPES={'1':favoriteFoodData={},'2':favoriteCouisinesData={},'3':favoriteRestaurantsData={},}
this.LIST_TOTAL_COUNT={'1':favoriteFoodTotalCount=0,'2':favoriteCouisinesTotalCount=0,'3':favoriteRestaurantsTotalCount=0,}
this.LIST_COUNTERS={'1':favoriteFoodPageCounter=1,'2':favoriteCouisinesPageCounter=1,'3':favoriteRestaurantsPageCounter=1,}
this.LOAD_MORE_BTN_TYPES={'1':foodListLimitLoadMore=true,'2':cuisinesListLimitLoadMore=true,'3':restaurantsListLimitLoadMore=true,}
this.LIST_LOADER={'1':foodListLoader=false,'2':cuisinesListLoader=false,'3':restaurantsListLoader=false,}
$scope.dishInRestaurant={};this.$onInit=function(){Object.keys(this.LIST_TYPES).forEach((type)=>{_self.loadInitListByType(type);});angular.element(document).ready(function(){if(!_self.isMobile){var swiper=new Swiper('.profile-lists__lists-slider',{slidesPerView:3,spaceBetween:0,loop:false,watchOverflow:true,freeMode:false,allowTouchMove:false,direction:'horizontal',touchRatio:0,navigation:{nextEl:'.swiper-button-next',prevEl:'.swiper-button-prev'}});}});};this.loadInitListByType=function(type){ProfileService.GetProfileListByType(_self.userId,type,0,_self.listItemCounter).then(function(success){_self.LIST_TYPES[type]=success.data.Items;_self.LIST_TOTAL_COUNT[type]=success.data.TotalCount;}).catch(function(error){console.log(error);}).finally(function(){_self.resetCounterAndLoadMoreBtn(type);});}
this.loadUpdatedListByType=function(type){ProfileService.GetProfileListByType(_self.userId,type,0,_self.listAllItems).then(function(success){_self.LIST_TYPES[type]=success.data.Items;_self.LIST_TOTAL_COUNT[type]=success.data.TotalCount;}).catch(function(error){console.log(error);}).finally(function(){_self.resetCounterAndLoadMoreBtn(type);});}
this.loadMoreItemsOnClick=function(type){ProfileService.GetProfileListByType(_self.userId,type,_self.listItemCounter,_self.listAllItems).then(function(success){_self.LIST_TYPES[type]=_self.LIST_TYPES[type].concat(success.data.Items);}).then(function(){_self.resetCounterAndLoadMoreBtn(type);_self.LIST_COUNTERS[type]=_self.LIST_COUNTERS[type]+1;switch(type){case 1:_self.listTypeId='foods-list';break;case 2:_self.listTypeId='cuisines-list';break;case 3:_self.listTypeId='dishes-in-restaurants-list';break;}}).catch(function(error){console.log(error);});}
this.deleteListItem=function(type,Id,listId){ProfileService.DeleteListItem(type,_self.userId,Id).then(function(success){if(_self.isMobile){_self.isMobileFullListOpen(listId)?_self.loadUpdatedListByType(type):_self.loadInitListByType(type);}
else{_self.loadUpdatedListByType(type);}
_self.LIST_COUNTERS[type]=1;}).catch(function(error){console.log('deleteListItem '+error);});}
this.addListItem=function(item,type,listId){if(type!==_self.userListTypeEnum.DishesInRestaurants){_self.entityId2=null;}
else{_self.entityId2=item.entityId2;}
ProfileService.AddListItem(type,_self.userId,item.EntityId,item.EntityType,_self.entityId2).then(function(success){_self.onDeleteAutocompleteQuery(type);}).catch(function(error){console.log('addListItem '+error);}).finally(function(){if(_self.isMobile){_self.isMobileFullListOpen(listId)?_self.loadUpdatedListByType(type):_self.loadInitListByType(type);}
else{_self.loadUpdatedListByType(type);}
_self.LIST_COUNTERS[type]=1;});}
this.resetCounterAndLoadMoreBtn=function(type){if(_self.LIST_TYPES[type].length>=_self.LIST_TOTAL_COUNT[type]){_self.LOAD_MORE_BTN_TYPES[type]=false;}
else{_self.LOAD_MORE_BTN_TYPES[type]=true;}
_self.LIST_LOADER[type]=true;}
this.mobileResetLayoutAfterAction=function(){if(_self.isMobile){document.body.classList.remove("body-no-scroll");const allElements=document.querySelectorAll('*');allElements.forEach((element)=>{element.classList.remove('profile-list--expanded');});}}
this.isMobileFullListOpen=function(listId){var listElement=document.getElementById(listId);if(listElement.classList.contains('profile-list--expanded')){return true}
return false}
this.toggleFullList=function(listId){var listElement=document.getElementById(listId);var doc;if(!_self.isMobileFullListOpen(listId)){if(listId=='profile_list_food'){_self.type=_self.userListTypeEnum.Food;}
else if(listId=='profile_list_cuisine'){_self.type=_self.userListTypeEnum.Cuisines;}
else if(listId=='profile_list_dishes'){_self.type=_self.userListTypeEnum.DishesInRestaurants;}
ProfileService.GetProfileListByType(_self.userId,_self.type,10,_self.listAllItems).then(function(success){_self.LIST_TYPES[_self.type]=_self.LIST_TYPES[_self.type].concat(success.data.Items);}).then(function(){doc=document.documentElement;_self.scrollPositionLeft=(window.pageXOffset||doc.scrollLeft)-(doc.clientLeft||0);_self.scrollPositionTop=(window.pageYOffset||doc.scrollTop)-(doc.clientTop||0);document.body.classList.add("body-no-scroll");listElement.classList.add('profile-list--expanded');}).catch(function(error){console.log(error);console.log(error);});}
else{_self.LIST_TYPES[_self.type]=_self.LIST_TYPES[_self.type].slice(0,10);document.body.classList.remove("body-no-scroll");listElement.classList.remove('profile-list--expanded');window.scrollTo(_self.scrollPositionLeft,_self.scrollPositionTop);}};this.listFoodsItemDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('itemMoved');},orderChanged:function(event){for(var i=0;i<_self.LIST_TYPES[_self.userListTypeEnum.Food].length;i++){if(i==event.dest.index){var data={userListType:_self.userListTypeEnum.Food,userId:_self.userId,id:_self.LIST_TYPES[_self.userListTypeEnum.Food][i].Id,newOrder:event.dest.index};}}
if(data.length===0)
return;ProfileService.UpdateItemsPosition(data).then(function(success){}).catch(function(error){console.log('listFoodsItemDragControlError: '+error);});},containment:'#favorite-food-id'}
this.listCuisinesItemDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('itemMoved');},orderChanged:function(event){for(var i=0;i<_self.LIST_TYPES[_self.userListTypeEnum.Cuisines].length;i++){if(i==event.dest.index){var data={userListType:_self.userListTypeEnum.Cuisines,userId:_self.userId,id:_self.LIST_TYPES[_self.userListTypeEnum.Cuisines][i].Id,newOrder:event.dest.index,};}}
if(data.length===0)
return;ProfileService.UpdateItemsPosition(data).then(function(success){}).catch(function(error){console.log('listCuisinesItemDragControlError: '+error);});},containment:'#favorite-couisine-id'}
this.listRestaurantsItemDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('itemMoved');},orderChanged:function(event){for(var i=0;i<_self.LIST_TYPES[_self.userListTypeEnum.DishesInRestaurants].length;i++){if(i==event.dest.index){var data={userListType:_self.userListTypeEnum.DishesInRestaurants,userId:_self.userId,id:_self.LIST_TYPES[_self.userListTypeEnum.DishesInRestaurants][i].Id,newOrder:event.dest.index};}}
if(data.length===0)
return;ProfileService.UpdateItemsPosition(data).then(function(success){}).catch(function(error){console.log('listRestaurantsItemDragControlError: '+error);});},containment:'#favorite-restaurants-id'}
this.onSearchItems=function(query,type){if(type==_self.userListAutocompleteTypeEnum.Food){_self.favoriteFoodAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Cuisines){_self.favoriteCuisinesAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Dishes){_self.dishesInRestaurantsAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Restaurants){_self.restaurantsAutocomplete=[];}
if(!query||query.length<2)
return;DishService.GetUserListAutocomplete(query,type).then(function(success){if(type==_self.userListAutocompleteTypeEnum.Food){_self.favoriteFoodAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Cuisines){_self.favoriteCuisinesAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Dishes){_self.dishesInRestaurantsAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Restaurants){_self.restaurantsAutocomplete=success.data;}}).catch(function(error){console.log('searchItemsByTypeError: '+error);});};this.isFoodAutocompleteVisible=false;this.onFoodAutocompleteOpen=function(){_self.isFoodAutocompleteVisible=!_self.isFoodAutocompleteVisible;};this.isCouisineAutocompleteVisible=false;this.onCouisineAutocompleteOpen=function(){_self.isCouisineAutocompleteVisible=!_self.isCouisineAutocompleteVisible;};this.isDishRestaurantVisible=false;this.onDishRestaurantAutocompleteOpen=function(){_self.isDishRestaurantVisible=!_self.isDishRestaurantVisible;};this.favoriteFoodQuery='';this.favoriteFoodAutocomplete=[];this.isFavoriteFoodFormOpened=false;this.onOpenFavoriteFoodForm=function(){_self.isFavoriteFoodFormOpened=!_self.isDishesFormOpened;_self.isFavoriteCuisinesFormOpened=false;_self.isDishesInRestaurantsFormOpened=false;};this.favoriteCuisinesQuery='';this.favoriteCuisinesAutocomplete=[];this.isFavoriteCuisinesFormOpened=false;this.onOpenFavoriteCuisinesForm=function(){_self.isFavoriteCuisinesFormOpened=!_self.isFavoriteCuisinesFormOpened;_self.isFavoriteFoodFormOpened=false;_self.isDishesInRestaurantsFormOpened=false;};this.dishesInRestaurantsAutocomplete=[];this.isDishesInRestaurantsFormOpened=false;this.onOpenDishesInRestaurantsForm=function(){_self.isDishesInRestaurantsFormOpened=!_self.isDishesInRestaurantsFormOpened;_self.isFavoriteFoodFormOpened=false;_self.isFavoriteCuisinesFormOpened=false;};this.onDishInRestaurantsAutocompleteClick=function(data,type){if(!data)return;if(type==_self.userListAutocompleteTypeEnum.Dishes){_self.dishInRestaurant.dishId=data.EntityId;_self.dishInRestaurant.dish=data.Name;_self.dishesInRestaurantsAutocomplete=[];_self.selectedDishForRestaurant=true;}
else if(type==_self.userListAutocompleteTypeEnum.Restaurants){_self.dishInRestaurant.restaurantId=data.EntityId;_self.dishInRestaurant.restaurantName=data.Name;_self.dishInRestaurant.city=data.RestaurantCity;_self.dishInRestaurant.country=data.RestaurantCountry;_self.autoPopulateRestaurantFields=true;_self.restaurantsAutocomplete=[];}};this.onDeleteAutocompleteQuery=function(type){if(type==_self.userListTypeEnum.Food){_self.favoriteFoodQuery='';_self.favoriteFoodAutocomplete=[];_self.isFoodAutocompleteVisible=false;}
else if(type==_self.userListTypeEnum.Cuisines){_self.favoriteCuisinesQuery='';_self.favoriteCuisinesAutocomplete=[];_self.isCouisineAutocompleteVisible=false;}
else if(type=='Dishes'){_self.dishInRestaurant.dishId='';_self.dishInRestaurant.dish='';_self.isRestaurantVisible=false;_self.dishesInRestaurantsAutocomplete=[];if(!_self.isMobile){_self.isDishRestaurantVisible=false;}}
else if(type=='Restaurants'){_self.dishInRestaurant.restaurantName='';_self.dishInRestaurant.city='';_self.dishInRestaurant.country='';_self.restaurantsAutocomplete=[];_self.isRestaurantVisible=false;_self.autoPopulateRestaurantFields=false;}
else if(type=='City'){_self.dishInRestaurant.city='';}
else if(type=='Country'){_self.dishInRestaurant.country='';}};this.addFavoriteDishRestaurant=function(){var data={userId:_self.userId,dishId:_self.dishInRestaurant.dishId,restaurantId:_self.dishInRestaurant.restaurantId,restaurantName:_self.dishInRestaurant.restaurantName,restaurantCity:_self.dishInRestaurant.city,restaurantCountry:_self.dishInRestaurant.country}
ProfileService.AddDishesInRestaurants(data).then(function(success){}).catch(function(error){console.log('addFavoriteDishRestaurant: '+error);}).finally(function(){_self.loadUpdatedListByType(_self.userListTypeEnum.DishesInRestaurants);_self.isDishesInRestaurantsFormOpened=false;_self.autoPopulateRestaurantFields=false;_self.dishInRestaurant.dish='';_self.dishInRestaurant.dishId='';_self.dishInRestaurant.restaurantName='';_self.dishInRestaurant.restaurantId='';_self.dishInRestaurant.city='';_self.dishInRestaurant.country='';_self.LIST_COUNTERS[_self.userListTypeEnum.DishesInRestaurants]=1;if(_self.isMobile){_self.isDishRestaurantVisible=false;}});}
this.closeShareListModal=function(){_self.openShareListModal=false;document.querySelector('body').classList.remove('modal--open');};this.addToList=function(type){_self.closeShareListModal();if(_self.addToListType=='Cuisines'){if(type=='Desktop'){_self.isFavoriteCuisinesFormOpened=true;_self.isFavoriteFoodFormOpened=false;_self.isDishesInRestaurantsFormOpened=false;}
else{_self.isCouisineAutocompleteVisible=true;_self.isDishRestaurantVisible=false;_self.isFoodAutocompleteVisible=false;}}
else if(_self.addToListType=='DishesInRestaurants'){if(type=='Desktop'){_self.isFavoriteDishRestaurantFormOpened=true;_self.isFavoriteCuisinesFormOpened=false;_self.isFavoriteFoodFormOpened=false;}
else{_self.isDishRestaurantVisible=true;_self.isCouisineAutocompleteVisible=false;_self.isFoodAutocompleteVisible=false;}}
else{if(type=='Desktop'){_self.isFavoriteFoodFormOpened=true;_self.isFavoriteDishRestaurantFormOpened=false;_self.isFavoriteCuisinesFormOpened=false;}
else{_self.isFoodAutocompleteVisible=true;_self.isDishRestaurantVisible=false;_self.isCouisineAutocompleteVisible=false;}}}
$scope.$on('openShareListModal',function(event,data){_self.openShareListModal=data.openShareListModal;_self.addToListType=data.type;});}]);;angular.module('tasteatlas').component('taProfileList',{bindings:{details:'<',isMobile:'<'},templateUrl:'/content/scripts/app/components/profile/profile-list/ta-profile-list.html',controller:'taProfileListController'}).controller("taProfileListController",["UserSubjectService","LoginService","$timeout",function(UserSubjectService,LoginService,$timeout){var _self=this;this.header=document.getElementById('header-id');this.$onInit=function(){};_self.createYourList=function(){if(UserSubjectService.isInAnonymousRole()){_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});}
else{_self.me=UserSubjectService.getUser();console.log(_self.me)
console.log(_self.details)
if(_self.me.urlLink){$timeout(function(){window.open('/profile/'+_self.me.urlLink,'_self');});}}}}]);;angular.module('tasteatlas').component('taProfileWannaTry',{bindings:{userId:'<',isMobile:'<',isPrivate:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/profile/profile-list/ta-profile-wanna-try-mobile.html','desktop':'/content/scripts/app/components/profile/profile-list/ta-profile-wanna-try-desktop.html',};return templates[$attrs.template];},controller:'taProfileWannaTryController'}).controller('taProfileWannaTryController',["ProfileService","constants","DishService","$scope","$timeout","UserCacheService",function(ProfileService,constants,DishService,$scope,$timeout,UserCacheService){var _self=this;this.constants=constants;this.openShareListModal=false;this.listItemCounter=10;this.listAllItems=100;this.userListTypeEnum={WannaTryDishes:4,WannaTryIngredients:5,WannaVisitRestaurants:6,WannaTryRecipes:7,}
this.userListAutocompleteTypeEnum={Dishes:1,Ingredients:2,Food:3,Cuisines:4,Restaurants:5,Recipes:6,}
this.WANNA_TRY_LIST_TYPES={'4':dishesData={},'5':ingredientsData={},'6':restaurantsData={},'7':recipesData={},}
this.WANNA_TRY_LIST_TOTAL_COUNT={'4':dishesTotalCount=0,'5':ingredientsTotalCount=0,'6':restaurantsTotalCount=0,'7':recipesTotalCount=0,}
this.WANNA_TRY_LIST_COUNTERS={'4':dishesPageCounter=1,'5':ingredientsPageCounter=1,'6':restaurantsPageCounter=1,'7':recipesPageCounter=1,}
this.WANNA_TRY_LOAD_MORE_BTN_TYPES={'4':dishesListLimitLoadMore=true,'5':ingredientsListLimitLoadMore=true,'6':restaurantsListLimitLoadMore=true,'7':recipesListLimitLoadMore=true,}
this.WANNA_TRY_LOADER={'4':dishesListLoader=false,'5':ingredientsLoader=false,'6':restaurantsLoader=false,'7':recipesListLoader=false,}
this.$onInit=function(){Object.keys(this.WANNA_TRY_LIST_TYPES).forEach((type)=>{_self.loadInitListByType(type);});angular.element(document).ready(function(){if(!_self.isMobile){var swiper=new Swiper('.profile-lists__wanna-try',{slidesPerView:3,slidesPerGroup:1,spaceBetween:0,freeMode:false,autoHeight:false,speed:400,watchOverflow:true,allowTouchMove:true,direction:'horizontal',navigation:{nextEl:'.swiper-button-next',prevEl:'.swiper-button-prev'},breakpoints:{1280:{slidesPerView:3,allowTouchMove:false,},}});}});};this.loadInitListByType=function(type){ProfileService.GetProfileListByType(_self.userId,type,0,_self.listItemCounter).then(function(success){_self.WANNA_TRY_LIST_TYPES[type]=success.data.Items;_self.WANNA_TRY_LIST_TOTAL_COUNT[type]=success.data.TotalCount;}).catch(function(error){console.log(error);}).finally(function(){_self.resetCounterAndLoadMoreBtn(type);});}
this.loadUpdatedListByType=function(type){ProfileService.GetProfileListByType(_self.userId,type,0,_self.listAllItems).then(function(success){_self.WANNA_TRY_LIST_TYPES[type]=success.data.Items;_self.WANNA_TRY_LIST_TOTAL_COUNT[type]=success.data.TotalCount;}).catch(function(error){console.log(error);}).finally(function(){_self.resetCounterAndLoadMoreBtn(type);});}
this.loadMoreItemsOnClick=function(type){ProfileService.GetProfileListByType(_self.userId,type,_self.listItemCounter,_self.listAllItems).then(function(success){_self.WANNA_TRY_LIST_TYPES[type]=_self.WANNA_TRY_LIST_TYPES[type].concat(success.data.Items);}).then(function(){_self.resetCounterAndLoadMoreBtn(type);_self.WANNA_TRY_LIST_COUNTERS[type]=_self.WANNA_TRY_LIST_COUNTERS[type]+1;switch(type){case 4:_self.listTypeId='dishes-list';break;case 5:_self.listTypeId='ingredients-list';break;case 7:_self.listTypeId='recipes-list';break;}}).catch(function(error){console.log(error);});}
this.deleteListItem=function(type,id,listId){ProfileService.DeleteListItem(type,_self.userId,id).then(function(success){if(_self.isMobile){_self.isMobileFullListOpen(listId)?_self.loadUpdatedListByType(type):_self.loadInitListByType(type);}
else{_self.loadUpdatedListByType(type);}
_self.WANNA_TRY_LIST_COUNTERS[type]=1;UserCacheService.refreshMyLists();}).catch(function(error){console.log('wannaTryDeleteListItem '+error);});}
this.addListItem=function(item,type,listId){if(type!==_self.userListTypeEnum.WannaTryRecipes){_self.entityId2=null;}
else{_self.entityId2=item.entityId2;}
ProfileService.AddListItem(type,_self.userId,item.EntityId,type,_self.entityId2).then(function(success){_self.onDeleteAutocompleteQuery(type);}).catch(function(error){console.log('wannaTryAddListItem '+error);}).finally(function(){if(_self.isMobile){_self.isMobileFullListOpen(listId)?_self.loadUpdatedListByType(type):_self.loadInitListByType(type);}
else{_self.loadUpdatedListByType(type);}
_self.WANNA_TRY_LIST_COUNTERS[type]=1;UserCacheService.refreshMyLists();});}
this.resetCounterAndLoadMoreBtn=function(type){if(_self.WANNA_TRY_LIST_TYPES[type].length>=_self.WANNA_TRY_LIST_TOTAL_COUNT[type]){_self.WANNA_TRY_LOAD_MORE_BTN_TYPES[type]=false;}
else{_self.WANNA_TRY_LOAD_MORE_BTN_TYPES[type]=true;}
_self.WANNA_TRY_LOADER[type]=true;}
this.mobileResetLayoutAfterAction=function(){if(_self.isMobile){document.body.classList.remove("body-no-scroll");const allElements=document.querySelectorAll('*');allElements.forEach((element)=>{element.classList.remove('profile-list--expanded');});}}
this.isMobileFullListOpen=function(listId){var listElement=document.getElementById(listId);if(listElement.classList.contains('profile-list--expanded')){return true}
return false}
this.toggleFullList=function(listId){var doc;var listElement=document.getElementById(listId);if(!_self.isMobileFullListOpen(listId)){if(listId=='profile_list_dishes'){_self.type=_self.userListTypeEnum.WannaTryDishes;}
else if(listId=='profile_list_ingredients'){_self.type=_self.userListTypeEnum.WannaTryIngredients;}
else if(listId=='profile_list_restaurants'){_self.type=_self.userListTypeEnum.WannaVisitRestaurants;}
else if(listId=='profile_list_recipes'){_self.type=_self.userListTypeEnum.WannaTryRecipes;}
ProfileService.GetProfileListByType(_self.userId,_self.type,0,50).then(function(success){_self.WANNA_TRY_LIST_TYPES[_self.type]=_self.WANNA_TRY_LIST_TYPES[_self.type].concat(success.data.Items.slice(5));}).then(function(){doc=document.documentElement;_self.scrollPositionLeft=(window.pageXOffset||doc.scrollLeft)-(doc.clientLeft||0);_self.scrollPositionTop=(window.pageYOffset||doc.scrollTop)-(doc.clientTop||0);document.body.classList.add("body-no-scroll");listElement.classList.add('profile-list--expanded');}).catch(function(error){console.log('GetProfileListByTypeError: '+error);});}
else{_self.WANNA_TRY_LIST_TYPES[_self.type]=_self.WANNA_TRY_LIST_TYPES[_self.type].slice(0,5)
document.body.classList.remove("body-no-scroll");listElement.classList.remove('profile-list--expanded');window.scrollTo(_self.scrollPositionLeft,_self.scrollPositionTop);}};this.onSearchItems=function(query,type){if(type==_self.userListAutocompleteTypeEnum.Dishes){_self.dishesAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Ingredients){_self.ingredientsAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Restaurants){_self.restaurantsAutocomplete=[];}
else if(type==_self.userListAutocompleteTypeEnum.Recipes){_self.recipesAutocomplete=[];}
if(!query||query.length<2)
return;DishService.GetUserListAutocomplete(query,type).then(function(success){if(type==_self.userListAutocompleteTypeEnum.Dishes){_self.dishesAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Ingredients){_self.ingredientsAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Recipes){_self.recipesAutocomplete=success.data;}
else if(type==_self.userListAutocompleteTypeEnum.Restaurants){_self.restaurantsAutocomplete=success.data;}}).catch(function(error){console.log('searchItemsByTypeError: '+error);});};this.isDishesAutocompleteVisible=false;this.onDishesAutocompleteOpen=function(){_self.isDishesAutocompleteVisible=!_self.isDishesAutocompleteVisible;};this.isIngredientsAutocompleteVisible=false;this.onIngredientsAutocompleteOpen=function(){_self.isIngredientsAutocompleteVisible=!_self.isIngredientsAutocompleteVisible;};this.isRestaurantsAutocompleteVisible=false;this.onRestaurantsAutocompleteOpen=function(){_self.isRestaurantsAutocompleteVisible=!_self.isRestaurantsAutocompleteVisible;};this.isRecipesAutocompleteVisible=false;this.onRecipesAutocompleteOpen=function(){_self.isRecipesAutocompleteVisible=!_self.isRecipesAutocompleteVisible;};this.dishesQuery='';this.dishesAutocomplete=[];this.isDishesFormOpened=false;this.onOpenDishesForm=function(){_self.isDishesFormOpened=!_self.isDishesFormOpened;_self.isIngredientsFormOpened=false;_self.isRecipesFormOpened=false;_self.isRestaurantsFormOpened=false;};this.ingredientsQuery='';this.ingredientsAutocomplete=[];this.isIngredientsFormOpened=false;this.onOpenIngredientsForm=function(){_self.isIngredientsFormOpened=!_self.isIngredientsFormOpened;_self.isDishesFormOpened=false;_self.isRecipesFormOpened=false;_self.isRestaurantsFormOpened=false;};this.restaurantsQuery='';this.restaurantsAutocomplete=[];this.isRestaurantsFormOpened=false;this.onOpenRestaurantForm=function(){_self.isRestaurantsFormOpened=!_self.isRestaurantsFormOpened;_self.isDishesFormOpened=false;_self.isIngredientsFormOpened=false;_self.isRecipesFormOpened=false;};this.recipesQuery='';this.recipesAutocomplete=[];this.isRecipesFormOpened=false;this.onOpenRecipesForm=function(){_self.isRecipesFormOpened=!_self.isRecipesFormOpened;_self.isDishesFormOpened=false;_self.isIngredientsFormOpened=false;_self.isRestaurantsFormOpened=false;};this.onDeleteAutocompleteQuery=function(type){if(type==_self.userListTypeEnum.WannaTryDishes){_self.dishesQuery='';_self.dishesAutocomplete=[];_self.isDishesAutocompleteVisible=false;}
else if(type==_self.userListTypeEnum.WannaTryIngredients){_self.ingredientsQuery='';_self.ingredientsAutocomplete=[];_self.isIngredientsAutocompleteVisible=false;}
else if(type==_self.userListTypeEnum.WannaVisitRestaurants){_self.restaurantsQuery='';_self.restaurantsAutocomplete=[];_self.isRestaurantsAutocompleteVisible=false;}
else if(type==_self.userListTypeEnum.WannaTryRecipes){_self.recipesQuery='';_self.recipesAutocomplete=[];_self.isRecipesAutocompleteVisible=false;}};this.closeShareListModal=function(){_self.openShareListModal=false;document.querySelector('body').classList.remove('modal--open');};$scope.$on('openShareListModal',function(data){_self.openShareListModal=data;console.log('openShareListModal '+_self.openShareListModal)});}]);;angular.module('tasteatlas').component('taProfileMobileListPrivatePopup',{bindings:{item:'<',onDeleteItem:'&',onOrderChange:'&',onClosePopup:'&'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-private-popup.html',controller:'taProfileMobileListPrivatePopupController'}).controller("taProfileMobileListPrivatePopupController",["constants",function(constants){var _self=this;this.constants=constants;this.currentIndex=0;this.newIndex=0;this.$onInit=function(){_self.currentIndex=_self.item.Order;_self.newIndex=_self.item.Order;};this.orderChange=function(item){_self.onOrderChange({item:item,lastIndex:_self.currentIndex,newIndex:_self.newIndex});};this.deleteItem=function(item){_self.onDeleteItem({id:item.Id});};this.closePopup=function(){_self.onClosePopup();};}]);;angular.module('tasteatlas').component('taProfileMobileListPrivate',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-private.html',controller:'taProfileMobileListPrivateController'}).controller("taProfileMobileListPrivateController",["ProfileService","constants","RegionService","DishService","RestaurantService","$scope",function(ProfileService,constants,RegionService,DishService,RestaurantService,$scope){var _self=this;this.constants=constants;this.openShareListModal=false;this.addFavoriteDishRestaurantForm={};this.scrollPositionLeft;this.scrollPositionTop;this.limitList=5;Array.prototype.move=function(from,to){this.splice(to,0,this.splice(from,1)[0]);};this.$onInit=function(){_self.addFavoriteDishRestaurantForm={UserId:_self.details.UserId,DishId:'',RestaurantId:'',RestaurantName:'',RestaurantCity:'',RestaurantCountry:'',Order:_self.details.FavoriteDishRestaurants.length+1};};this.couisineQuery='';this.couisines=[];this.isCouisineLoading=false;this.isCouisineAutocompleteVisible=false;this.onCouisineAutocompleteOpen=function(){_self.isCouisineAutocompleteVisible=!_self.isCouisineAutocompleteVisible;};this.favoriteCouisinePopup='';this.onOpenFavoriteCouisinePopup=function(id){_self.favoriteCouisinePopup='favorite-couisine-popup-'+id;};this.onCloseFavoriteCouisinePopup=function(){_self.favoriteCouisinePopup='';};this.onFavoriteCouisineOrderChange=function(item,lastIndex,newIndex){if(newIndex>_self.details.FavoriteCouisines.length)
newIndex=_self.details.FavoriteCouisines.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex)-1;var to=parseInt(newIndex)-1;_self.details.FavoriteCouisines.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;data.push({Id:_self.details.FavoriteCouisines[i].Id,UserId:_self.details.UserId,RegionId:_self.details.FavoriteCouisines[i].RegionId,Order:i+1});}
if(data.lenth===0)
return;_self.isCouisineLoading=false;ProfileService.UpdateFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.isCouisineLoading=false;_self.onCloseFavoriteCouisinePopup();}).catch(function(error){console.log(error);_self.onCloseFavoriteCouisinePopup();_self.isCouisineLoading=false;});};function reorderArray(array,from,to){return array.splice(to,0,array.splice(from,1)[0]);}
this.favoriteCouisinesDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;data.push({Id:_self.details.FavoriteCouisines[i].Id,UserId:_self.details.UserId,RegionId:_self.details.FavoriteCouisines[i].RegionId,Order:i+1});}
if(data.length===0)
return;_self.isCouisineLoading=true;ProfileService.UpdateFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.isCouisineLoading=false;}).catch(function(error){console.log(error);_self.isCouisineLoading=false;});},containment:'#favorite-couisine-id'};this.onSearchRegionByCouisine=function(query){_self.couisines=[];if(!query||query.length===0)
return;RegionService.searchRegionsByCouisine(query).then(function(success){_self.couisines=success.data;}).catch(function(error){console.log(error);});};this.onDeleteCouisineQuery=function(){_self.couisineQuery='';_self.couisines=[];};this.onCouisineClick=function(couisine){if(!couisine)
return;_self.isCouisineAutocompleteVisible=!_self.isCouisineAutocompleteVisible;var hasCouisine=false;_self.details.FavoriteCouisines=_self.details.FavoriteCouisines.filter(function(value,index,arr){if(value.RegionId===couisine.EntityId)
hasCouisine=true;return value;});if(!hasCouisine){_self.isCouisineLoading=true;var data={UserId:_self.details.UserId,RegionId:couisine.EntityId,Order:_self.details.FavoriteCouisines.length+1};ProfileService.AddFavoriteCouisine(_self.details.UserId,data).then(function(success){_self.details.FavoriteCouisines.push(success.data);_self.isCouisineLoading=false;_self.toggleFullList('profile_list_cuisine');}).catch(function(error){console.log(error);_self.isCouisineLoading=false;});}
_self.onDeleteCouisineQuery();};this.onDeleteFavoriteCouisine=function(id){ProfileService.DeleteFavoriteCouisine(_self.details.UserId,id).then(function(success){_self.details.FavoriteCouisines=_self.details.FavoriteCouisines.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteCouisines.length;i++){_self.details.FavoriteCouisines[i].Order=i+1;}
_self.onCloseFavoriteCouisinePopup();}).catch(function(error){_self.onCloseFavoriteCouisinePopup();console.log(error);});};this.favoriteFoodQuery='';this.favoriteFoodAutocomplete=[];this.isFavoriteFoodAutocompleteLoading=false;this.favoriteFoodPopup='';this.onOpenFavoriteFoodPopup=function(id){_self.favoriteFoodPopup='favorite-food-popup-'+id;};this.onCloseFavoriteFoodPopup=function(){_self.favoriteFoodPopup='';};this.isFoodAutocompleteVisible=false;this.onFoodAutocompleteOpen=function(){_self.isFoodAutocompleteVisible=!_self.isFoodAutocompleteVisible;};this.onFavoriteFoodOrderChange=function(item,lastIndex,newIndex){if(newIndex>_self.details.FavoriteFood.length)
newIndex=_self.details.FavoriteFood.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex)-1;var to=parseInt(newIndex)-1;_self.details.FavoriteFood.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;data.push({Id:_self.details.FavoriteFood[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteFood[i].DishId,IngredientId:_self.details.FavoriteFood[i].IngredientId,Order:i+1});}
if(data.length===0)
return;_self.isFavoriteFoodAutocompleteLoading=true;ProfileService.UpdateFavoriteFood(_self.details.UserId,data).then(function(success){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();console.log(error);});};this.favoriteFoodDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;data.push({Id:_self.details.FavoriteFood[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteFood[i].DishId,IngredientId:_self.details.FavoriteFood[i].IngredientId,Order:i+1});}
if(data.length===0)
return;_self.isFavoriteFoodAutocompleteLoading=true;ProfileService.UpdateFavoriteFood(_self.details.UserId,data).then(function(success){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();console.log(error);});},containment:'#favorite-food-id'};this.onSearchFavoriteFood=function(query){_self.favoriteFoodAutocomplete=[];if(!query||query.length===0)
return;DishService.searchFood(query).then(function(success){_self.favoriteFoodAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onDeleteFavoriteFoodAutocompleteQuery=function(){_self.favoriteFoodQuery='';_self.favoriteFoodAutocomplete=[];};this.onFavoriteFoodAutocompleteClick=function(food){if(!food)
return;_self.isFoodAutocompleteVisible=!_self.isFoodAutocompleteVisible;var hasFavoriteFood=false;var dishId=null;var ingredientId=null;if(food.EntityType===1){dishId=food.EntityId;}
if(food.EntityType===2){ingredientId=food.EntityId;}
_self.details.FavoriteFood=_self.details.FavoriteFood.filter(function(value,index,arr){if(value.DishId&&value.DishId===food.EntityId){hasFavoriteFood=true;}
if(value.IngredientId&&value.IngredientId===food.EntityId){hasFavoriteFood=true;}
return value;});if(!hasFavoriteFood){_self.isFavoriteFoodAutocompleteLoading=true;var data={UserId:_self.details.UserId,DishId:dishId,IngredientId:ingredientId,Order:_self.details.FavoriteFood.length+1};ProfileService.AddFavoriteFood(_self.details.UserId,data).then(function(success){if(success.data!==null){_self.details.FavoriteFood.push(success.data);}
_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();_self.toggleFullList('profile_list_food');}).catch(function(error){_self.isFavoriteFoodAutocompleteLoading=false;_self.onCloseFavoriteFoodPopup();console.log(error);});}
_self.onDeleteFavoriteFoodAutocompleteQuery();};this.onDeleteFavoriteFood=function(id){ProfileService.DeleteFavoriteFood(_self.details.UserId,id).then(function(success){_self.details.FavoriteFood=_self.details.FavoriteFood.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteFood.length;i++){_self.details.FavoriteFood[i].Order=i+1;}
_self.onCloseFavoriteFoodPopup();}).catch(function(error){_self.onCloseFavoriteFoodPopup();console.log(error);});};this.favoriteRestaurantPopup='';this.onOpenFavoriteRestaurantPopup=function(id){_self.favoriteRestaurantPopup='favorite-restaurant-popup-'+id;};this.onCloseFavoriteRestaurantPopup=function(){_self.favoriteRestaurantPopup='';};this.dishesAutocomplete=[];this.restaurantAutocomplete=[];this.isFavoriteDishRestaurantsLoading=false;this.isDishRestaurantVisible=false;this.onDishRestaurantAutocompleteOpen=function(){_self.isDishRestaurantVisible=!_self.isDishRestaurantVisible;};this.onDishRestaurantEnter=function(id){var deleteBtn=angular.element('#delete-dish-restaurant-'+id);deleteBtn.removeClass('js-hide');};this.onDishRestaurantLeave=function(id){var deleteBtn=angular.element('#delete-dish-restaurant-'+id);deleteBtn.addClass('js-hide');};this.onFavoriteDishRestaurantsOrderChange=function(lastIndex,newIndex){if(newIndex>_self.details.FavoriteDishRestaurants.length)
newIndex=_self.details.FavoriteDishRestaurants.length;if(newIndex<1)
newIndex=1;var from=parseInt(lastIndex);var to=parseInt(newIndex)-1;_self.details.FavoriteDishRestaurants.move(from,to);var data=[];for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){_self.details.FavoriteDishRestaurants[i].Order=i+1;data.push({Id:_self.details.FavoriteDishRestaurants[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteDishRestaurants[i].DishId,Order:i+1,RestaurantId:_self.details.FavoriteDishRestaurants[i].RestaurantId,RestaurantName:_self.details.FavoriteDishRestaurants[i].RestaurantName,RestaurantCity:_self.details.FavoriteDishRestaurants[i].RestaurantCity,RestaurantCountry:_self.details.FavoriteDishRestaurants[i].RestaurantCountry});}
if(data.length===0)
return;_self.isDishesAutocompleteLoading=true;ProfileService.UpdateFavoriteDishRestaurants(_self.details.UserId,data).then(function(success){_self.isDishesAutocompleteLoading=false;_self.onCloseFavoriteRestaurantPopup();}).catch(function(error){console.log(error);_self.onCloseFavoriteRestaurantPopup();_self.isDishesAutocompleteLoading=false;});};this.favoriteDishRestaurantsDragControl={accept:function(sourceItemHandleScope,destSortableScope){return sourceItemHandleScope.itemScope.sortableScope.$id===destSortableScope.$id;},itemMoved:function(event){console.log('Moved');},orderChanged:function(event){var data=[];for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){data.push({Id:_self.details.FavoriteDishRestaurants[i].Id,UserId:_self.details.UserId,DishId:_self.details.FavoriteDishRestaurants[i].DishId,Order:i+1,RestaurantId:_self.details.FavoriteDishRestaurants[i].RestaurantId,RestaurantName:_self.details.FavoriteDishRestaurants[i].RestaurantName,RestaurantCity:_self.details.FavoriteDishRestaurants[i].RestaurantCity,RestaurantCountry:_self.details.FavoriteDishRestaurants[i].RestaurantCountry});}
if(data.length===0)
return;_self.isDishesAutocompleteLoading=true;ProfileService.UpdateFavoriteDishRestaurants(_self.details.UserId,data).then(function(success){_self.isDishesAutocompleteLoading=false;}).catch(function(error){console.log(error);_self.isDishesAutocompleteLoading=false;});},containment:'#favorite-dish-restaurant-id'};this.onSearchDishes=function(query){_self.dishesAutocomplete=[];if(!query||query.length===0){return;}
DishService.searchDishes(query).then(function(success){_self.dishesAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onDeleteDishQuery=function(){_self.dishQuery='';_self.dishesAutocomplete=[];};this.onDishAutocompleteClick=function(dish){if(!dish)
return;_self.addFavoriteDishRestaurantForm.DishId=dish.EntityId;_self.dishQuery=dish.Label;_self.dishesAutocomplete=[];};this.onSearchRestaurants=function(query){_self.restaurantAutocomplete=[];if(!query||query.length===0){return;}
RestaurantService.searchRestaurantsByName(query).then(function(success){_self.restaurantAutocomplete=success.data;}).catch(function(error){console.log(error);});};this.onRestaurantAutocompleteClick=function(restaurant){if(!restaurant)
return;_self.addFavoriteDishRestaurantForm.RestaurantId=restaurant.EntityId;_self.addFavoriteDishRestaurantForm.RestaurantName=restaurant.Label;_self.addFavoriteDishRestaurantForm.RestaurantCity=restaurant.RegionName;_self.addFavoriteDishRestaurantForm.RestaurantCountry=restaurant.CountryName;_self.restaurantAutocomplete=[];};this.onDeleteRestaurantQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantId=null;_self.addFavoriteDishRestaurantForm.RestaurantName='';_self.restaurantAutocomplete=[];};this.cityQuery='';this.onDeleteCityQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantCity='';};this.countryQuery='';this.onDeleteCountryQuery=function(){_self.addFavoriteDishRestaurantForm.RestaurantCountry='';};this.addFavoriteDishRestaurant=function(){if(!_self.favoriteDishRestaurants.$valid)
return;_self.addFavoriteDishRestaurantForm.Order=_self.details.FavoriteDishRestaurants.length+1;var hasFavoriteDishRestaurant=false;_self.details.FavoriteDishRestaurants=_self.details.FavoriteDishRestaurants.filter(function(value,index,arr){if(value.DishId===_self.addFavoriteDishRestaurantForm.DishId&&value.RestaurantId===_self.addFavoriteDishRestaurantForm.RestaurantId)
hasFavoriteDishRestaurant=true;return value;});if(!hasFavoriteDishRestaurant){_self.isFavoriteDishRestaurantsLoading=true;ProfileService.AddFavoriteDishRestaurant(_self.details.UserId,_self.addFavoriteDishRestaurantForm).then(function(success){_self.isFavoriteDishRestaurantsLoading=false;_self.details.FavoriteDishRestaurants.push(success.data);_self.isDishRestaurantVisible=false;_self.toggleFullList('profile_list_dishes');}).catch(function(error){_self.isFavoriteDishRestaurantsLoading=false;_self.isDishRestaurantVisible=false;console.log(error);});}};this.onDeleteFavoriteDishRestaurant=function(id){if(!id)
return;ProfileService.DeleteFavoriteDishRestaurant(_self.details.UserId,id).then(function(success){_self.details.FavoriteDishRestaurants=_self.details.FavoriteDishRestaurants.filter(function(value,index,arr){return value.Id!==success.data;});for(var i=0;i<_self.details.FavoriteDishRestaurants.length;i++){_self.details.FavoriteDishRestaurants[i].Order=i+1;}
_self.onCloseFavoriteRestaurantPopup();}).catch(function(error){_self.onCloseFavoriteRestaurantPopup();console.log(error);});};this.toggleFullList=function(listId){var doc;var listElement=document.getElementById(listId);if(!listElement.classList.contains('profile-list--expanded')){doc=document.documentElement;_self.scrollPositionLeft=(window.pageXOffset||doc.scrollLeft)-(doc.clientLeft||0);_self.scrollPositionTop=(window.pageYOffset||doc.scrollTop)-(doc.clientTop||0);document.body.classList.add("body-no-scroll");listElement.classList.add('profile-list--expanded');_self.limitList=undefined;}
else{document.body.classList.remove("body-no-scroll");listElement.classList.remove('profile-list--expanded');window.scrollTo(_self.scrollPositionLeft,_self.scrollPositionTop);_self.limitList=5;}};this.addToList=function(){_self.closeShareListModal();if(_self.addToListType=='Cuisines'){_self.isCouisineAutocompleteVisible=true;_self.isDishRestaurantVisible=false;_self.isFoodAutocompleteVisible=false;}
else if(_self.addToListType=='DishesInRestaurants'){_self.isDishRestaurantVisible=true;_self.isCouisineAutocompleteVisible=false;_self.isFoodAutocompleteVisible=false;}
else{_self.isFoodAutocompleteVisible=true;_self.isDishRestaurantVisible=false;_self.isCouisineAutocompleteVisible=false;}}
this.closeShareListModal=function(){_self.openShareListModal=false;document.querySelector('body').classList.remove('modal--open');};$scope.$on('openShareListModal',function(event,data){_self.openShareListModal=data.openShareListModal;_self.addToListType=data.type;});}]);;angular.module('tasteatlas').component('taProfileMobileListPublic',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-list-public.html',controller:'taProfileMobileListPublicController'}).controller("taProfileMobileListPublicController",["constants",function(constants){var _self=this;this.constants=constants;this.scrollPositionLeft;this.scrollPositionTop;this.limitList=5;this.toggleFullList=function(listId){var doc;var listElement=document.getElementById(listId);if(!listElement.classList.contains('profile-list--expanded-public')){doc=document.documentElement;_self.scrollPositionLeft=(window.pageXOffset||doc.scrollLeft)-(doc.clientLeft||0);_self.scrollPositionTop=(window.pageYOffset||doc.scrollTop)-(doc.clientTop||0);document.body.classList.add("body-no-scroll");listElement.classList.add('profile-list--expanded-public');_self.limitList=undefined;}
else{document.body.classList.remove("body-no-scroll");listElement.classList.remove('profile-list--expanded-public');window.scrollTo(_self.scrollPositionLeft,_self.scrollPositionTop);_self.limitList=5;}};}]);;angular.module('tasteatlas').component('taProfileMobileMainPrivate',{bindings:{userId:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-main-private.html',controller:'taProfileMobileMainPrivateController'}).controller("taProfileMobileMainPrivateController",["ProfileService","constants","RegionService","FilePickerService","$scope",function(ProfileService,constants,RegionService,FilePickerService,$scope){var _self=this;this.constants=constants;this.details={};this.activePage='lists';this.isLoaded=false;this.editProfile={FirstName:'',LastName:'',Title:'',Description:'',CriticWebsite:'',RegionId:'',Location:''};this.$onInit=function(){ProfileService.GetProfileDetails(_self.userId).then(function(success){_self.details=success.data;_self.isLoaded=true;});};this.changePage=function(page){_self.activePage=page;};this.isEditPageOpened=false;this.openEditPage=function(){if(!_self.isEditPageOpened){mapDetailsForEdit(_self.details);}
_self.isEditPageOpened=!_self.isEditPageOpened;};this.regionQuery='';this.regions=[];this.onAutocompleteRegions=function(query){if(!query||query.length===0)
return;_self.regions=[];RegionService.searchRegions(query).then(function(success){_self.regions=success.data;}).catch(function(error){console.log(error);});};this.onDeleteRegionQuery=function(){_self.regionQuery='';_self.regions=[];_self.editProfile.RegionId='';_self.editProfile.Location='';};this.onRegionAutocompleteClick=function(region){if(!region)
return;_self.regionQuery=region.Label;_self.regions=[];_self.editProfile.RegionId=region.EntityId;_self.editProfile.Location=region.Label;};this.addProfilePhoto=function(event){FilePickerService.triggerFilePicker(event);};this.isUploadingPhoto=false;this.onUploadImageClick=function(file){if(!file)
return;_self.isUploadingPhoto=true;FilePickerService.readAsDataUrl(file[0],$scope).then(function(result){return ProfileService.UploadProfileImage(result.file);}).then(function(success){_self.editProfile.ProfilePicture=success.data;_self.isUploadingPhoto=false;}).catch(function(err){_self.isUploadingPhoto=false;console.log(err);});};this.isSubmitting=false;this.onEdit=function(){if(!_self.editForm.$valid)
return;_self.isSubmitting=true;ProfileService.UpdateProfileDetails(_self.details.UserId,_self.editProfile).then(function(success){_self.isSubmitting=false;location.reload();}).catch(function(error){console.log(error);_self.isSubmitting=false;});};function mapDetailsForEdit(data){_self.editProfile={FirstName:data.FirstName,LastName:data.LastName,Title:data.Title,Description:data.Description,CriticWebsite:data.Web,RegionId:data.RegionId,Location:data.Location,ProfilePicture:data.ProfilePicture};_self.regionQuery=data.Location;}}]);;angular.module('tasteatlas').component('taProfileMobileMainPublic',{bindings:{userId:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-main-public.html',controller:'taProfileMobileMainPublicController'}).controller("taProfileMobileMainPublicController",["constants","ProfileService","$q","UserSubjectService","LoginService","$timeout",function(constants,ProfileService,$q,UserSubjectService,LoginService,$timeout){var _self=this;this.constants=constants;this.details={};this.activePage='lists';this.isLoaded=false;this.header=document.getElementById('header-id');this.$onInit=function(){_self.isInAnonymousRole=UserSubjectService.isInAnonymousRole();ProfileService.GetProfileDetails(_self.userId).then(function(success){_self.details=success.data;_self.isLoaded=true;});};this.changePage=function(page){_self.activePage=page;};_self.createYourList=function(){if(UserSubjectService.isInAnonymousRole()){_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});}
else{_self.me=UserSubjectService.getUser();if(_self.me.urlLink){$timeout(function(){window.open('/profile/'+_self.me.urlLink,'_self');});}}}}]);;angular.module('tasteatlas').component('taProfileMobileReviewsPrivate',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-reviews-private.html',controller:'taProfileMobileReviewsPrivateController'}).controller("taProfileMobileReviewsPrivateController",["ProfileService","constants",function(ProfileService,constants){var _self=this;this.constants=constants;this.currentReviewPage='dishes';this.isLoadingMoreDishComments=false;this.showLoadMoreDishBtn=true;this.isLoadingMoreIngredientComments=false;this.showLoadMoreIngredientsBtn=true;this.isLoadingMoreDishRestaurantComments=false;this.showLoadMoreDishRestaurantsBtn=true;this.$onInit=function(){_self.details.Dishes=[];_self.details.Dishes.PageIndex=1;_self.details.Ingredients=[];_self.details.Ingredients.PageIndex=1;_self.details.DishRestaurants=[];_self.details.DishRestaurants.PageIndex=1;_self.loadDishComments();}
this.changeReviewPage=function(page){_self.currentReviewPage=page;if(page=='ingredients'){_self.loadIngredientsComments();}
else if(page=='dishrestaurants'){_self.loadDishRestaurantsComments();}
else{_self.loadDishComments();}};this.loadDishComments=function(){_self.isLoadingMoreDishComments=true;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Dishes.Data=success.data.Data;_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});}
this.loadIngredientsComments=function(){_self.isLoadingMoreIngredientComments=true;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Ingredients.Data=success.data.Data;_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});}
this.loadDishRestaurantsComments=function(){_self.isLoadingMoreDishRestaurantComments=true;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.DishRestaurants.Data=success.data.Data;_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});}
this.onLoadMoreDishComments=function(){_self.isLoadingMoreDishComments=true;_self.details.Dishes.PageIndex=_self.details.Dishes.PageIndex+1;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Dishes.PageIndex}).then(function(success){_self.details.Dishes.Data=_self.details.Dishes.Data.concat(success.data.Data);_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});};this.onLoadMoreIngredientComments=function(){_self.isLoadingMoreIngredientComments=true;_self.details.Ingredients.PageIndex=_self.details.Ingredients.PageIndex+1;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Ingredients.PageIndex}).then(function(success){_self.details.Ingredients.Data=_self.details.Ingredients.Data.concat(success.data.Data);_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});};this.onLoadMoreDishRestaurantComments=function(){_self.isLoadingMoreDishRestaurantComments=true;_self.details.DishRestaurants.PageIndex=_self.details.DishRestaurants.PageIndex+1;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.DishRestaurants.PageIndex}).then(function(success){_self.details.DishRestaurants.Data=_self.details.DishRestaurants.Data.concat(success.data.Data);_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});};}]);;angular.module('tasteatlas').component('taProfileMobileReviewsPublic',{bindings:{details:'<'},templateUrl:'/content/scripts/app/components/profile/profile-mobile/ta-profile-mobile-reviews-public.html',controller:'taProfileMobileReviewsPublicController'}).controller("taProfileMobileReviewsPublicController",["ProfileService","constants",function(ProfileService,constants){var _self=this;this.constants=constants;this.currentReviewPage='dishes';this.isLoadingMoreDishComments=false;this.showLoadMoreDishBtn=true;this.isLoadingMoreIngredientComments=false;this.showLoadMoreIngredientsBtn=true;this.isLoadingMoreDishRestaurantComments=false;this.showLoadMoreDishRestaurantsBtn=true;this.$onInit=function(){_self.details.Dishes=[];_self.details.Dishes.PageIndex=1;_self.details.Ingredients=[];_self.details.Ingredients.PageIndex=1;_self.details.DishRestaurants=[];_self.details.DishRestaurants.PageIndex=1;_self.loadDishComments();}
this.changeReviewPage=function(page){_self.currentReviewPage=page;if(page=='ingredients'){_self.loadIngredientsComments();}
else if(page=='dishrestaurants'){_self.loadDishRestaurantsComments();}
else{_self.loadDishComments();}};this.loadDishComments=function(){_self.isLoadingMoreDishComments=true;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Dishes.Data=success.data.Data;_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});}
this.loadIngredientsComments=function(){_self.isLoadingMoreIngredientComments=true;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.Ingredients.Data=success.data.Data;_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});}
this.loadDishRestaurantsComments=function(){_self.isLoadingMoreDishRestaurantComments=true;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:1}).then(function(success){_self.details.DishRestaurants.Data=success.data.Data;_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});}
this.onLoadMoreDishComments=function(){_self.isLoadingMoreDishComments=true;_self.details.Dishes.PageIndex=_self.details.Dishes.PageIndex+1;ProfileService.GetUserDishComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Dishes.PageIndex}).then(function(success){_self.details.Dishes.Data=_self.details.Dishes.Data.concat(success.data.Data);_self.isLoadingMoreDishComments=false;if(_self.details.Dishes.Data.length>=_self.details.DishCommentCount){_self.showLoadMoreDishBtn=false;}
else{_self.showLoadMoreDishBtn=true;}}).catch(function(error){_self.isLoadingMoreDishComments=false;console.log(error);});};this.onLoadMoreIngredientComments=function(){_self.isLoadingMoreIngredientComments=true;_self.details.Ingredients.PageIndex=_self.details.Ingredients.PageIndex+1;ProfileService.GetUserIngredientComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.Ingredients.PageIndex}).then(function(success){_self.details.Ingredients.Data=_self.details.Ingredients.Data.concat(success.data.Data);_self.isLoadingMoreIngredientComments=false;if(_self.details.Ingredients.Data.length>=_self.details.IngredientCommentCount){_self.showLoadMoreIngredientsBtn=false;}
else{_self.showLoadMoreIngredientsBtn=true;}}).catch(function(error){_self.isLoadingMoreIngredientComments=false;console.log(error);});};this.onLoadMoreDishRestaurantComments=function(){_self.isLoadingMoreDishRestaurantComments=true;_self.details.DishRestaurants.PageIndex=_self.details.DishRestaurants.PageIndex+1;ProfileService.GetUserDishRestaurantComments(_self.details.UserId,{PageSize:6,PageIndex:_self.details.DishRestaurants.PageIndex}).then(function(success){_self.details.DishRestaurants.Data=_self.details.DishRestaurants.Data.concat(success.data.Data);_self.isLoadingMoreDishRestaurantComments=false;if(_self.details.DishRestaurants.Data.length>=_self.details.DishRestaurantCommentCount){_self.showLoadMoreDishRestaurantsBtn=false;}
else{_self.showLoadMoreDishRestaurantsBtn=true;}}).catch(function(error){_self.isLoadingMoreDishRestaurantComments=false;console.log(error);});};}]);;angular.module('tasteatlas').component('taProfilePanel',{bindings:{template:'@',details:'<',isMobile:'<'},templateUrl:function($element,$attrs){var templates={'desktop':'/content/scripts/app/components/profile/profile-panel/ta-profile-panel-desktop.html','mobile':'/content/scripts/app/components/profile/profile-panel/ta-profile-panel-mobile.html'};return templates[$attrs.template];},controller:'profile-panel-controller'}).controller('profile-panel-controller',['UserSubjectService','$scope','MeService','LoginService','$rootScope','constants',function(UserSubjectService,$scope,MeService,LoginService,$rootScope,constants){var _self=this;this.user={};this.isLoginProcess=false;var header=document.getElementById('header-id');this.showCountryItems;this.triedItems=[];this.totalTriedItems=[];this.isSignedIn=false;this.loadMoreCountryData=false;this.loadingCountryData=false;this.typeCountry;this.numberOfDisplayedItems=0;this.startDisplayedItems=0;$scope.totalTriedFoods=0;$scope.totalTriedCountries=0;_self.constants=constants;this.$onInit=function(){_self.getUserTriedData();}
_self.getUserTriedData=function(type){_self.startDisplayedItems=0;if(_self.isMobile){_self.numberOfDisplayedItems=4;}
else{_self.numberOfDisplayedItems=5;}
if(type==0||type==1){_self.typeCountry=1;if(type==0){this.showCountryItems=true;}}else{_self.typeCountry=2;}
if(!UserSubjectService.isInAnonymousRole()){var params={order:_self.typeCountry}
_self.loadingCountryData=true;MeService.getUserTriedData(params).then(function(success){_self.triedItems=success.data.Items.slice(_self.startDisplayedItems,_self.numberOfDisplayedItems);_self.totalTriedItems=success.data.Items;$scope.totalTriedFoods=success.data.TotalTriedFoods;$scope.totalTriedCountries=success.data.TotalTriedCountries;_self.user=UserSubjectService.getUser();}).catch(function(error){console.log('Error: '+JSON.stringify(error));}).finally(function(){_self.isSignedIn=true;_self.loadingCountryData=false;if(_self.numberOfDisplayedItems>_self.triedItems.length||_self.totalTriedItems.length<6){_self.loadMoreCountryData=false;}else{_self.loadMoreCountryData=true;}});}
else{_self.isSignedIn=false;}}
_self.loadMoreGetUserTriedData=function(){_self.loadingCountryData=true;_self.startDisplayedItems=_self.startDisplayedItems+1;_self.numberOfDisplayedItems=_self.numberOfDisplayedItems+_self.numberOfDisplayedItems;MeService.getUserTriedData({order:_self.typeCountry}).then(function(success){_self.triedItems=success.data.Items.slice(0,_self.numberOfDisplayedItems);}).catch(function(error){console.log('Error: '+JSON.stringify(error));}).finally(function(){_self.loadingCountryData=false;if(_self.numberOfDisplayedItems>=_self.triedItems.length+1){_self.loadMoreCountryData=false;}else{_self.loadMoreCountryData=true;}});}
this.openLogin=function(){_self.isLoginProcess=true;header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});};this.closeUserDashModal=function(){let userDashOpen=false;$rootScope.$emit("closeUserDashPopup",userDashOpen);}
$rootScope.$on('$destroy',function(){UserSubjectService.unsubscribe(_userDesktopLoginInfo);});$rootScope.$on("ta.entityCommented",function(){return _self.getUserTriedData();});}]);;angular.module('tasteatlas').component('taQuizWrapper',{templateUrl:'/content/scripts/app/components/quiz/ta-quiz-wrapper.html',controller:'taQuizWrapperController'}).controller("taQuizWrapperController",["$timeout","$interval","QuizService","UserSubjectService",function($timeout,$interval,QuizService,UserSubjectService){var _self=this;this.$onInit=function(){_self.isInAnonymousRole=UserSubjectService.isInAnonymousRole();_self.model={getJokerInfo:{},userInformation:{},getActiveQuizAsync:getActiveQuizAsync,userHaveActiveQuiz:false,loadingUserInformation:false,startQuizInformation:{},currentQuestionInfo:{},currentQuestionValidationInfo:{},getGameQuizHeaderData:getGameQuizHeaderData,currentQuestionHeaderData:{},currentQuestionDetails:{},goToNextQuestion:false,showQuestion:true,nextQuestion:nextQuestion,isLoading:true,checkLoginOnResultPage:checkLoginOnResultPage,remainingLives:remainingLives,remainingJoker:remainingJoker,continueGame:false,changeState:changeState,currentState:'start',answerCountdown:answerCountdown,timeIsUp:{timer:null,areTimeIsUp:false,restTime:null},setNullToGameQuizPublicIdKey:setNullToGameQuizPublicIdKey,getTransitionImageAndSlider:getTransitionImage,getUserLoginAndGameInfo:getUserLoginAndGameInfo,results:{todayAllTime:null,best:null,loginInfo:null,lastGame:null,total:null},getGameQuizPublicId:getGameQuizPublicId,getAnonymousUserId:getAnonymousUserId,goToGameFinishedScreens:goToGameFinishedScreens,questionDetailsStateTime:3000,}
_self.model.getActiveQuizAsync();_self.assignQuizToUser();$('#header-id').css('top',0);document.addEventListener('contextmenu',event=>event.preventDefault());};function getGameQuizPublicId(){if(localStorage.getItem('gameQuizPublicId')){return localStorage.getItem('gameQuizPublicId');}}
function getAnonymousUserId(){if(localStorage.getItem('quizAnonymousUserId')){return localStorage.getItem('quizAnonymousUserId');}}
function getUserLoginAndGameInfo(){if(_self.isInAnonymousRole){QuizService.getAnonymousUserId().then(function(success){if(!localStorage.getItem('quizAnonymousUserId')){localStorage.setItem('quizAnonymousUserId',success.data);}}).catch(function(err){console.log(err);}).finally(function(){_self.getUserBestScore();_self.getUserGameInfo();});}
else{_self.getUserBestScore();_self.getUserGameInfo();}}
_self.getUserBestScore=function(){QuizService.getUserBestScore(_self.model.getAnonymousUserId()).then(function(success){_self.model.results.best=success.data;}).catch(function(err){console.log('getUserBestScore endpoint error: '+err);});}
_self.getUserGameInfo=function(){QuizService.getUserGameInfo(_self.model.getAnonymousUserId()).then(function(success){_self.model.userInformation=success.data;}).catch(function(err){console.log('getUserGameInfo endpoint error: '+err);}).finally(function(){_self.model.loadingUserInformation=true;});}
function getActiveQuizAsync(){QuizService.getActiveQuizAsync(_self.model.getAnonymousUserId()).then(function(success){_self.model.userHaveActiveQuiz=success.data;}).catch(function(err){console.log('getActiveQuizAsync endpoint error: '+err);}).finally(function(){_self.changePageTitle();});}
function getTransitionImage(){QuizService.getTransitionImage().then(function(success){_self.model.transitionImage=success.data;}).catch(function(err){console.log('getTransitionImage endpoint error: '+err);}).finally(function(){_self.initialStartQuizSlider();});}
_self.initialStartQuizSlider=function(){$timeout(()=>{var quizSwiper=new Swiper('.start-quiz-slider',{slidesPerView:'auto',centeredSlides:true,loop:true,autoHeight:false,speed:500,grabCursor:true,autoplay:{delay:2000,pauseOnMouseEnter:true,disableOnInteraction:false},});})}
function getGameQuizHeaderData(){QuizService.getGameQuizHeaderData(_self.model.getGameQuizPublicId()).then(function(success){_self.model.currentQuestionHeaderData=success.data;}).catch(function(err){console.log('getGameQuizHeaderData endpoint error: '+err);}).finally(function(){_self.model.remainingLives();_self.model.remainingJoker();})}
function goToGameFinishedScreens(){if(_self.model.goToNextQuestion&&_self.model.currentQuestionDetails&&_self.model.currentQuestionDetails.NextStepString=='GameOver'||_self.model.currentQuestionDetails.NextStepString=='GameFinishedSuccessfully'){if(_self.model.userHaveActiveQuiz===_self.model.getGameQuizPublicId()){_self.model.showQuestion=true;_self.model.goToNextQuestion=false;_self.model.continueGame=false;_self.model.changeState('gamefinished');}
else{_self.model.changeState('gamefinished');}}
if(_self.model.currentQuestionDetails&&_self.model.currentQuestionDetails.NextStepString=='GameOver'){_self.model.questionDetailsStateTime=6000;}
else{_self.model.questionDetailsStateTime=3000;}}
function nextQuestion(){_self.model.isLoading=true;_self.model.currentQuestionInfo=null;_self.model.currentQuestionValidationInfo=null;_self.model.getGameQuizHeaderData();QuizService.getNextQuestion(_self.model.getGameQuizPublicId()).then(function(success){_self.model.currentQuestionInfo=success.data;}).catch(function(err){console.log('getNextQuestion endpoint error');$interval.cancel(_self.model.timeIsUp.timer);localStorage.removeItem('gameQuizPublicId')
localStorage.removeItem('quizAnonymousUserId')
_self.model.changeState('start');}).finally(function(){if(_self.model.currentQuestionInfo){_self.model.timeIsUp.restTime=_self.model.currentQuestionInfo.QuestionTimeout;if(_self.model.currentQuestionInfo.GameFinished==false){_self.model.goToNextQuestion=false;_self.model.showQuestion=true;_self.model.isLoading=false;_self.model.timeIsUp.timer=$interval(_self.model.answerCountdown,1000);console.log('Quiz next question');}
else{$interval.cancel(_self.model.timeIsUp.timer);_self.model.timeIsUp.timer==null;_self.model.timeIsUp.areTimeIsUp=false;_self.model.timeIsUp.restTime==null;localStorage.removeItem('gameQuizPublicId')
localStorage.removeItem('quizAnonymousUserId')
_self.model.currentQuestionInfo=null;_self.model.currentQuestionValidationInfo=null;_self.model.changeState('start');console.log('Quiz game finished');}}else{_self.model.timeIsUp.restTime=13;}});}
function remainingLives(){_self.remainingLives=document.querySelectorAll('.chart-number .js-life');_self.remainingLives.forEach((remainingLife,index)=>{if(_self.model.currentQuestionHeaderData){if(index<_self.model.currentQuestionHeaderData.RemainingLives){remainingLife.classList.add('ta-heart-full');}
else{remainingLife.classList.remove('ta-heart-full');}
if(index>=_self.model.currentQuestionHeaderData.RemainingLives){remainingLife.classList.add('ta-heart-life');}
else{remainingLife.classList.remove('ta-heart-life');}
if(index==_self.model.currentQuestionHeaderData.RemainingLives&&_self.model.currentQuestionHeaderData.NextAward==1&&_self.model.currentQuestionHeaderData.ConsecutiveCorrectAnswers>0){remainingLife.classList.add('ta-heart-progress');}
else if(index==_self.model.currentQuestionHeaderData.RemainingLives&&_self.model.currentQuestionHeaderData.NextAward==2&&_self.model.currentQuestionHeaderData.ConsecutiveCorrectAnswers>0&&_self.model.currentQuestionHeaderData.RemainingFiftyFiftyJokers==5){remainingLife.classList.add('ta-heart-progress');}
else{remainingLife.classList.remove('ta-heart-progress');}
if(remainingLife.classList.contains('ta-heart-progress')&&(_self.model.currentQuestionHeaderData.ExtraLifePending||_self.model.currentQuestionValidationInfo&&_self.model.currentQuestionValidationInfo.ExtraLifePending)){remainingLife.classList.add('ta-heart-one-answer-left');}
else{remainingLife.classList.remove('ta-heart-one-answer-left');}
if(_self.model.currentQuestionDetails&&_self.model.currentQuestionDetails.NextStepString=='GameOver'||_self.model.currentQuestionHeaderData.ConsecutiveCorrectAnswers==0&&_self.model.currentQuestionHeaderData.NextAward==1){remainingLife.classList.remove('ta-heart-progress');}}});}
function remainingJoker(){_self.lightbulbs=document.querySelectorAll('.quiz-lightbulb-wrapper .quiz-lightbulb');if(_self.model.currentQuestionHeaderData){_self.lightbulbs.forEach((remainingJoker,index)=>{if(index<_self.model.currentQuestionHeaderData.RemainingFiftyFiftyJokers){remainingJoker.classList.add('quiz-lightbulb--full');remainingJoker.children[0].classList.add('quiz-lightbulb--life__full');}
else{remainingJoker.classList.remove('quiz-lightbulb--full');remainingJoker.children[0].classList.remove('quiz-lightbulb--life__full');}
if(index==_self.model.currentQuestionHeaderData.RemainingFiftyFiftyJokers&&_self.model.currentQuestionHeaderData.NextAward==2&&_self.model.currentQuestionHeaderData.ConsecutiveCorrectAnswers>0){remainingJoker.classList.add("quiz-lightbulb--progress");}
else if(index==_self.model.currentQuestionHeaderData.RemainingFiftyFiftyJokers&&_self.model.currentQuestionHeaderData.NextAward==1&&_self.model.currentQuestionHeaderData.ConsecutiveCorrectAnswers>0&&_self.model.currentQuestionHeaderData.RemainingLives==5){remainingJoker.classList.add("quiz-lightbulb--progress");}
else{remainingJoker.classList.remove("quiz-lightbulb--progress");}
if(remainingJoker.classList.contains('quiz-lightbulb--progress')&&_self.model.currentQuestionHeaderData.ExtraFiftyFiftyJokerPending){remainingJoker.classList.add('quiz-lightbulb--pending');}
else{remainingJoker.classList.remove('quiz-lightbulb--pending');}})}}
function changeState(state){var possibleStates=['start','question','gamefinished'];if(possibleStates.includes(state)){_self.model.currentState=state;_self.changePageTitle(state);$interval.cancel(_self.model.timeIsUp.timer);_self.model.timeIsUp.timer==null;_self.model.timeIsUp.restTime=0;_self.model.timeIsUp.areTimeIsUp=false;}
else{console.error('State is wrong - '+_self.model.currentState);}}
_self.changePageTitle=function(state='start'){switch(state){case 'start':document.title="Test your knowledge of world cuisines!";break;case 'question':document.title="Quiz question";break;case 'gamefinished':document.title="Your result";break;default:document.title="Test your knowledge of world cuisines!";}}
function checkLoginOnResultPage(){if(!localStorage.getItem('showResultPage')){localStorage.setItem('showResultPage',1)}}
function setNullToGameQuizPublicIdKey(){if(localStorage.getItem('gameQuizPublicId')&&localStorage.getItem('gameQuizPublicId')!='null'){localStorage.setItem('gameQuizPublicId',null);}}
_self.assignQuizToUser=function(){if(_self.isInAnonymousRole==false){QuizService.assignQuizToUser(_self.model.getGameQuizPublicId(),_self.model.getAnonymousUserId()).then(function(success){console.log('Success assigned quiz to user.');});}
if(_self.isInAnonymousRole&&localStorage.getItem('showResultPage')==1&&localStorage.getItem('gameQuizPublicId')!='null'){QuizService.assignQuizToUser(_self.model.getGameQuizPublicId(),_self.model.getAnonymousUserId()).then(function(success){console.log('Success assigned quiz to user.');}).catch(function(err){console.log(err);}).finally(function(){if(_self.model.userHaveActiveQuiz==null){_self.model.changeState('gamefinished');}
localStorage.removeItem('showResultPage');});}}
function answerCountdown(){if(_self.model.timeIsUp.restTime&&_self.model.timeIsUp.restTime!==0&&_self.model.timeIsUp.restTime>0){_self.model.timeIsUp.restTime--;}
else{$interval.cancel(_self.model.timeIsUp.timer);_self.model.timeIsUp.timer==null;_self.model.timeIsUp.areTimeIsUp=true;console.log('Time is up!');$timeout(()=>{QuizService.validateAnswerAsync(_self.model.currentQuestionInfo.PublicQuestionId,0,0,true).then(function(success){_self.model.currentQuestionValidationInfo=success.data;_self.model.currentQuestionHeaderData=success.data.HeaderData;_self.model.currentQuestionHeaderData.ExtraLifePending=success.data.ExtraLifePending;_self.model.currentQuestionHeaderData.ExtraFiftyFiftyJokerPending=success.data.ExtraFiftyFiftyJokerPending;}).catch(function(err){console.log(err);}).finally(function(){_self.model.remainingLives();console.log('Validate Answer');QuizService.getLastQuestionDetails(_self.model.getGameQuizPublicId()).then(function(success){_self.model.currentQuestionDetails=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.model.timeIsUp.areTimeIsUp=false;_self.model.goToNextQuestion=true;console.log('getLastQuestionDetails');$timeout(()=>{_self.model.goToGameFinishedScreens();},_self.model.questionDetailsStateTime)});});},1500)}}}]);;angular.module('tasteatlas').component('taQuizProgressBar',{bindings:{ratio:'<',answered:'<',type:'@',},templateUrl:'/content/scripts/app/components/quiz/progress-bar/ta-quiz-progress-bar.html',controller:'taQuizProgressBarController'}).controller("taQuizProgressBarController",[function(){var _self=this;this.$onInit=function(){};}]);;angular.module('tasteatlas').component('taQuizQuestionAnswers',{bindings:{data:'<',},templateUrl:'/content/scripts/app/components/quiz/question-screen/ta-quiz-question-answers.html',controller:'taQuizQuestionAnswersController'}).controller("taQuizQuestionAnswersController",["$timeout","$interval","QuizService","$rootScope","constants",function($timeout,$interval,QuizService,$rootScope,constants){var _self=this;_self.constants=constants;_self.jokerClicked=false;_self.answerClicked=false;this.$onInit=function(){_self.lightbulbs=document.querySelectorAll('.quiz-lightbulb-wrapper .quiz-lightbulb');_self.data.remainingJoker();};_self.validateAnswer=function(publicQuestionId,answer){_self.elapsedTime=10-_self.data.timeIsUp.restTime;$interval.cancel(_self.data.timeIsUp.timer);_self.data.timeIsUp.timer==null;if(!_self.answerClicked&&_self.data.currentQuestionInfo){_self.answerClicked=true;QuizService.validateAnswerAsync(publicQuestionId,answer,_self.elapsedTime,false).then(function(success){_self.data.currentQuestionValidationInfo=success.data;_self.data.currentQuestionHeaderData.ExtraLifePending=success.data.ExtraLifePending;_self.data.currentQuestionHeaderData.ExtraFiftyFiftyJokerPending=success.data.ExtraFiftyFiftyJokerPending;_self.data.currentQuestionHeaderData=success.data.HeaderData;}).catch(function(err){console.log(err);}).finally(function(){_self.data.remainingLives();_self.data.remainingJoker();_self.data.showQuestion=false;_self.selectedAnswerId=answer-1;console.log('Answer validated');QuizService.getLastQuestionDetails(_self.data.getGameQuizPublicId()).then(function(success){_self.data.currentQuestionDetails=success.data;}).catch(function(err){console.log(err);}).finally(function(){console.log('Last question details');$timeout(()=>{_self.data.timeIsUp.areTimeIsUp=false;_self.data.goToNextQuestion=true;$timeout(()=>{_self.data.goToGameFinishedScreens();},_self.data.questionDetailsStateTime)},1500);});});}}
_self.useJoker=function(publicAnswerId){var optionsBtns=document.querySelectorAll('.quiz-options-button');var useJokerBtn=document.querySelector('.use-joker-btn');$interval.cancel(_self.data.timeIsUp.timer);_self.data.timeIsUp.timer==null;if(!_self.jokerClicked){_self.jokerClicked=true;QuizService.getFiftyFiftyJoker(publicAnswerId).then(function(success){_self.data.getJokerInfo=success.data;}).catch(function(err){console.log(err);}).finally(function(){if(_self.data.currentQuestionInfo){_self.data.timeIsUp.restTime=_self.data.currentQuestionInfo.QuestionTimeout;}else{_self.data.timeIsUp.restTime=10;}
_self.lightbulbs.forEach((lightbulb,lightbulbIndex)=>{if(_self.data.currentQuestionHeaderData){if(_self.data.currentQuestionHeaderData.RemainingFiftyFiftyJokers-1>lightbulbIndex){lightbulb.classList.add('quiz-lightbulb--full');lightbulb.children[0].classList.add('quiz-lightbulb--life__full');}
else{lightbulb.classList.remove('quiz-lightbulb--full');lightbulb.children[0].classList.remove('quiz-lightbulb--life__full');}
if(lightbulbIndex+1==_self.data.currentQuestionHeaderData.RemainingFiftyFiftyJokers&&_self.data.currentQuestionHeaderData.NextAward==2&&_self.data.currentQuestionHeaderData.ConsecutiveCorrectAnswers>0){lightbulb.classList.add("quiz-lightbulb--progress");}
else{lightbulb.classList.remove("quiz-lightbulb--progress");}}});optionsBtns[_self.data.getJokerInfo.WrongAnswers[0]-1].classList.add("disabled");optionsBtns[_self.data.getJokerInfo.WrongAnswers[1]-1].classList.add("disabled");optionsBtns[_self.data.getJokerInfo.WrongAnswers[0]-1].setAttribute('disabled','');optionsBtns[_self.data.getJokerInfo.WrongAnswers[1]-1].setAttribute('disabled','');useJokerBtn.setAttribute('disabled','');useJokerBtn.classList.add("disabled","clicked");_self.data.timeIsUp.timer=$interval(_self.data.answerCountdown,1000);console.log('Joker used!');});}}
this.remainingjoker=function(){if(_self.data.currentquestionheaderdata){_self.lightbulbs.foreach((remainingjoker,index)=>{if(index<_self.data.currentquestionheaderdata.remainingfiftyfiftyjokers){remainingjoker.classlist.add('quiz-lightbulb--full');remainingjoker.children[0].classlist.add('quiz-lightbulb--life__full');}
else{remainingjoker.classlist.remove('quiz-lightbulb--full');remainingjoker.children[0].classlist.remove('quiz-lightbulb--life__full');}
if(index==_self.data.currentquestionheaderdata.remainingfiftyfiftyjokers&&_self.data.currentquestionheaderdata.nextaward==2&&_self.data.currentquestionheaderdata.consecutivecorrectanswers>0){remainingjoker.classlist.add("quiz-lightbulb--progress");}
else if(index==_self.data.currentquestionheaderdata.remainingfiftyfiftyjokers&&_self.data.currentquestionheaderdata.nextaward==1&&_self.data.currentquestionheaderdata.consecutivecorrectanswers>0&&_self.data.currentquestionheaderdata.remaininglives==5){remainingjoker.classlist.add("quiz-lightbulb--progress");}
else{remainingjoker.classlist.remove("quiz-lightbulb--progress");}
if(remainingjoker.classlist.contains('quiz-lightbulb--progress')&&_self.data.currentquestionheaderdata.extrafiftyfiftyjokerpending){remainingjoker.classlist.add('quiz-lightbulb--pending');}
else{remainingjoker.classlist.remove('quiz-lightbulb--pending');}})}}
_self.goToGameOverOrGameFinishedScreen=function(route){_self.data.changeState(route);_self.data.isLoading=false;}
$rootScope.$on('$destroy',function(){$interval.cancel(_self.data.timeIsUp.timer);_self.data.timeIsUp.timer==null;});}]);;angular.module('tasteatlas').component('taQuizQuestionDetails',{bindings:{data:'<',},templateUrl:'/content/scripts/app/components/quiz/question-screen/ta-quiz-question-details.html',controller:'taQuizQuestionDetailsController'}).controller("taQuizQuestionDetailsController",["constants",function(constants){var _self=this;_self.constants=constants;this.$onInit=function(){_self.data.remainingLives();};}]);;angular.module('tasteatlas').component('taQuizQuestionScreen',{bindings:{data:'<',},templateUrl:'/content/scripts/app/components/quiz/question-screen/ta-quiz-question-screen.html',controller:'taQuizQuestionScreenController'}).controller("taQuizQuestionScreenController",["QuizService","$timeout","$interval",function(QuizService,$timeout,$interval){var _self=this;this.$onInit=function(){if(!_self.data.continueGame){_self.data.nextQuestion();}
else{_self.data.isLoading=true;_self.data.timeIsUp.areTimeIsUp=false;QuizService.getLastQuestionDetails(_self.data.getGameQuizPublicId()).then(function(success){_self.data.currentQuestionDetails=success.data;}).catch(function(err){$interval.cancel(_self.data.timeIsUp.timer);_self.data.timeIsUp.timer==null;_self.data.timeIsUp.areTimeIsUp=false;_self.data.changeState('gamefinished');console.log('getLastQuestionDetails endpoint error '+err);}).finally(function(){_self.data.getGameQuizHeaderData();_self.data.showQuestion=false;_self.data.goToNextQuestion=true;_self.data.isLoading=false;_self.data.timeIsUp.restTime='null';if(_self.data.userHaveActiveQuiz===_self.data.getGameQuizPublicId()){$timeout(()=>{_self.data.goToGameFinishedScreens();},_self.data.questionDetailsStateTime||3000);}
else{_self.data.changeState('gamefinished');}});}};}]);;angular.module('tasteatlas').component('taQuizResultScreen',{bindings:{data:'<',},templateUrl:'/content/scripts/app/components/quiz/result-screen/ta-quiz-result-screen.html',controller:'taQuizResultScreenController'}).controller("taQuizResultScreenController",["$interval","$timeout","$rootScope","QuizService","LoginService","UserSubjectService","constants",function($interval,$timeout,$rootScope,QuizService,LoginService,UserSubjectService,constants){var _self=this;_self.constants=constants;_self.tempSecondHolder=null;_self.sharePath;_self.baseUrl=window.location.origin;_self.fbBaseUrl="https://www.facebook.com/sharer/sharer.php?u=";this.AllTimeScore=true;this.header=document.getElementById('header-id');this.$onInit=function(){_self.isInAnonymousRole=UserSubjectService.isInAnonymousRole();if(_self.data.getAnonymousUserId()&&_self.data.getGameQuizPublicId()||!_self.isInAnonymousRole){_self.getResultsHeader();_self.canPlayTimeInterval=$interval(_self.cantPlayUntilTimer,1000);}
_self.changeResultTabs('AllTime');};_self.getResultsHeader=function(){QuizService.getResultsHeader(_self.data.getAnonymousUserId()).then(function(success){_self.data.results.loginInfo={RemainingGames:success.data.RemainingGames,RemainingGamesString:success.data.RemainingGamesString,DailyGameResetTime:success.data.DailyGameResetTime,SecondUntilDailyGameReset:success.data.SecondUntilDailyGameReset};_self.data.results.lastGame=success.data.LastGame;_self.data.results.total=success.data.Total;}).catch(function(err){console.log(err);}).finally(function(){console.log('Get results header')})}
_self.cantPlayUntilTimer=function(){if(_self.data.results.loginInfo&&_self.data.results.loginInfo.SecondUntilDailyGameReset>0&&_self.data.results.loginInfo.RemainingGames<=0){if(_self.tempSecondHolder==null){_self.tempSecondHolder=_self.data.results.loginInfo.SecondUntilDailyGameReset;}
var hours=Math.floor(_self.tempSecondHolder/3600);var minutes=Math.floor((_self.tempSecondHolder%3600)/60);var remainingSeconds=_self.tempSecondHolder%60;var formattedTime=hours.toString().padStart(2,'0')+'h : '+
minutes.toString().padStart(2,'0')+'min : '+
remainingSeconds.toString().padStart(2,'0')+'sec';_self.hoursAndMinutes=formattedTime;_self.tempSecondHolder--;}}
_self.changeResultTabs=function(resultType){_self.data.isLoading=true;if(resultType=='AllTime'){QuizService.getAllTimeResults(_self.data.getAnonymousUserId()).then(function(success){_self.data.results.todayAllTime=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.AllTimeScore=true;$timeout(function(){_self.data.isLoading=false;},500);})}
if(resultType=='Today'){QuizService.getTodayResults(resultType,_self.data.getAnonymousUserId()).then(function(success){_self.data.results.todayAllTime=success.data;}).catch(function(err){console.log(err);}).finally(function(){_self.AllTimeScore=false;$timeout(function(){_self.data.isLoading=false;},500);});}}
_self.goToStartScreen=function(){_self.data.setNullToGameQuizPublicIdKey();$interval.cancel(_self.canPlayTimeInterval);_self.data.continueGame=false;_self.data.goToNextQuestion=false;_self.data.showQuestion=false;document.getElementById('header-id').style.top="0px";_self.data.changeState('start');}
_self.openLogin=function(){_self.data.checkLoginOnResultPage();_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});}
_self.shareResults=function(){if(_self.isInAnonymousRole){_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});_self.openLogin();}
else{QuizService.getLastGamePublicQuizId(_self.data.getAnonymousUserId()).then(function(success){localStorage.setItem('quizAnonymousUserId',success.data);if(success.data){_self.sharePath=_self.fbBaseUrl+_self.baseUrl+"/quiz?publicGameQuizId="+success.data;}
else{_self.sharePath=_self.fbBaseUrl+_self.baseUrl+"/quiz";}
$timeout(function(){window.open(_self.sharePath,'_blank');});}).catch(function(err){console.log(err);}).finally(function(){console.log('getLastGamePublicQuizId')})}}
$rootScope.$on('$destroy',function(){UserSubjectService.unsubscribe(_userDesktopLoginInfo);$interval.cancel(_self.canPlayTimeInterval);});}]);;angular.module('tasteatlas').component('taQuizStartScreen',{bindings:{data:'<',},templateUrl:'/content/scripts/app/components/quiz/start-screen/ta-quiz-start-screen.html',controller:'taQuizStartScreenController'}).controller("taQuizStartScreenController",["QuizService","LoginService","UserSubjectService","constants",function(QuizService,LoginService,UserSubjectService,constants){var _self=this;_self.constants=constants;this.header=document.getElementById('header-id');this.$onInit=function(){_self.isInAnonymousRole=UserSubjectService.isInAnonymousRole();_self.data.getUserLoginAndGameInfo();_self.checkContinueOrNewGame();};this.checkContinueOrNewGame=function(){if(localStorage.getItem('gameQuizPublicId')&&localStorage.getItem('gameQuizPublicId')!=='null'){_self.data.continueGame=true;_self.data.changeState('question');}
else{_self.data.getTransitionImageAndSlider();_self.data.continueGame=false;}}
_self.openLogin=function(){QuizService.assignQuizToUser(_self.data.getGameQuizPublicId(),_self.data.getAnonymousUserId()).then(function(){_self.isLoginProcess=true;_self.header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});}).then(function(success){console.log('success');console.log(success);}).catch(function(err){console.log(err);}).finally(function(){console.log('assignQuizToUser');_self.data.setNullToGameQuizPublicIdKey();});}
_self.startQuiz=function(){if(!_self.isLoading){_self.isLoading=true;QuizService.startQuiz(_self.data.getAnonymousUserId()).then(function(success){_self.data.startQuizInformation=success.data;localStorage.setItem('gameQuizPublicId',_self.data.startQuizInformation.GameQuizPublicId);_self.data.getGameQuizHeaderData();}).catch(function(err){console.log(err);}).finally(function(){_self.data.changeState('question');console.log('Quiz started');_self.isLoading=false;});}}
_self.viewRankings=function(){_self.data.changeState('gamefinished');}}]);;angular.module('tasteatlas').component('taRecipesFilter',{bindings:{isMobile:'<',isGroupType:'<',totalItemCounter:'<',foodGroups:'<',regionId:'<',dishGroupId:'<',ingredientGroupId:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/recipes/ta-recipes-filter-mobile.html','desktop':'/content/scripts/app/components/recipes/ta-recipes-filter-desktop.html',};return templates[$attrs.template];},controller:'taRecipesFilterController',}).controller("taRecipesFilterController",["RecipeService","constants","$timeout","$scope",function(RecipeService,constants,$timeout,$scope){var _self=this;this.constants=constants;_self.getRecipeTimeV2=RecipeService.getRecipeTimeV2;_self.isContentLoaded=false;_self.filtersExpanded=false;$scope.ingredientsFiltersExpanded=false;_self.ingredientsFiltersLoaded=false;_self.ingredientTimeAccordionExpanded=false;_self.loadingItems=false;_self.gridRow;_self.indexCounter=0;_self.ingredientCount;_self.topFilterItems=[{code:"mostpopular",name:"Most Popular"},{code:"new",name:"New"},{code:"bestRated",name:"Best rated"},{code:"alphabetically",name:"Alphabetically"}];_self.selectedBottomFilter="All";_self.selectedIngredientBottomFilter="All";_self.numberOfItems;_self.filterItemList=[];_self.numberOfItemsAfter;_self.lastGoogleAdsEnabled;this.RANGE_SLIDER_VALUES=[{name:'All'},{name:'15min'},{name:'30min'},{name:'45min'},{name:'1h'},{name:'2h'},{name:'3h'},{name:'>5h'}];this.CONVERT_RANGE_VAL_TO_MINUTES={'1':null,'2':15,'3':30,'4':45,'5':60,'6':120,'7':180,'8':300,}
this.$onInit=function(){_self.API_DATA={entityType:null,entityGroupId:null,order:"mostpopular",regionId:_self.regionId==0?null:_self.regionId,dishGroupId:_self.dishGroupId==0?null:_self.dishGroupId,ingredientGroupId:_self.ingredientGroupId==0?null:_self.ingredientGroupId,foodIngredients:[],cookingTo:null,totalTo:null,page:0,pageSize:12,}
if(Math.max(document.documentElement.clientWidth,window.innerWidth)<1281&&!_self.isMobile){_self.numberOfItems=9;}
else if(_self.isMobile){_self.numberOfItems=4;_self.gridRow=7;$scope.limitto=3;}
else{_self.numberOfItems=11;_self.gridRow=4;;$scope.limitto=9;}
if(_self.isMobile){_self.slidesPerView=1;_self.spaceBetween=0;}
else{_self.slidesPerView=1.4;_self.spaceBetween=15;}
_self.loadFoodTypeFilters(_self.numberOfItems);_self.loadItemsOnFilterChange(_self.API_DATA);_self.ingredientCount=_self.totalItemCounter;_self.selectedCategoryLength=_self.totalItemCounter;}
this.recipeItemVariationSlider=function(){_self.recipeItemVariationSwiper=[];$(".recipe-details-slider__slider:not(.slider-initialized)").each(function(i){const $this=$(this);$this.addClass('recipe-details-slider__slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("recipe-details-slider-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("recipe-details-slider-button-prev-"+i);angular.element(document).ready(function(){_self.recipeItemVariationSwiper[i]=new Swiper(".recipe-details-slider__slider-"+i,{slidesPerView:_self.slidesPerView,slidesPerGroup:1,speed:250,spaceBetween:_self.spaceBetween,preloadImages:false,navigation:{nextEl:'.recipe-details-slider-button-next-'+i,prevEl:'.recipe-details-slider-button-prev-'+i,}});});});}
this.changeTopFilter=function(filter){if(_self.API_DATA.order===filter){return}
_self.API_DATA.order=filter;_self.API_DATA.page=0;_self.loadItemsOnFilterChange(_self.API_DATA);};this.loadFoodTypeFilters=function(mainItemsCount){_self.displayedMainFoodTypeFilters=_self.foodGroups.slice(0,mainItemsCount);_self.expandedFoodTypeFilters=_self.foodGroups.slice(mainItemsCount);}
this.toggleFoodTypeFilters=function(){_self.filtersExpanded=!_self.filtersExpanded;};this.toggleIngredientTimeAccordion=function(){_self.ingredientTimeAccordionExpanded=!_self.ingredientTimeAccordionExpanded;_self.ingredientsFiltersLoaded=false;$scope.ingredientsFiltersExpanded=false;_self.FOOD_INGREDIENT_FILTER_DATA={regionId:_self.regionId==0?null:_self.regionId,dishGroupId:_self.dishGroupId==0?null:_self.dishGroupId,ingredientGroupId:_self.ingredientGroupId==0?null:_self.ingredientGroupId,}
RecipeService.getFoodInredientFilters(_self.FOOD_INGREDIENT_FILTER_DATA).then(function(success){_self.displayedMainIngredientTypeFilters=success.data;}).catch(function(error){console.error(error);}).finally(function(){_self.ingredientsFiltersLoaded=true;});};this.toggleIngredientTypeFilters=function(){$scope.ingredientsFiltersExpanded=!$scope.ingredientsFiltersExpanded;};$scope.$watch('ingredientsFiltersExpanded',function(newValue){if(newValue==false){_self.isMobile?$scope.limitto=3:$scope.limitto=9;}
else{_self.isMobile?$scope.limitto=20:$scope.limitto=1000;}});this.changeBottomFilter=function(filter){if(_self.selectedBottomFilter===filter){return}
if(filter==='All'){_self.selectedBottomFilter=filter;_self.API_DATA.entityGroupId=null;_self.API_DATA.entityType=null;_self.selectedCategoryLength=_self.totalItemCounter;_self.ingredientCount=_self.totalItemCounter;}
else{_self.selectedBottomFilter=filter.Name;_self.API_DATA.entityType=filter.EntityType;_self.API_DATA.entityGroupId=filter.EntityGroupId;_self.selectedCategoryLength=filter.SuitableDishes;_self.ingredientCount=filter.SuitableDishes;}
_self.indexCounter=0;_self.API_DATA.page=0;_self.loadItemsOnFilterChange(_self.API_DATA);};this.resetIngredientFilter=function(){_self.API_DATA.foodIngredients=[];document.querySelectorAll('.ingredients-round-filter').forEach((element)=>{element.classList.remove('search-results__round-filter--selected');});_self.selectedIngredientBottomFilter='All';_self.loadItemsOnFilterChange(_self.API_DATA);}
this.addInredientFilterItem=function(selectedFilter,itemIndex){_self.API_DATA.page=0;_self.selectedInredientFilterItems=document.querySelectorAll('.ingredients-round-filter');if(!_self.API_DATA.foodIngredients.length>0){_self.selectedIngredientBottomFilter='';_self.API_DATA.foodIngredients.push({Index:itemIndex,EntityId:selectedFilter.EntityId,EntityType:selectedFilter.EntityType,MaterializedPath:selectedFilter.MaterializedPath});_self.selectedInredientFilterItems[itemIndex].classList.add('search-results__round-filter--selected');_self.loadItemsOnFilterChange(_self.API_DATA);}
else{const foundIndex=_self.API_DATA.foodIngredients.findIndex((selectedElement)=>selectedElement.Index==itemIndex);if(foundIndex===-1)return[_self.selectedInredientFilterItems[itemIndex].classList.add('search-results__round-filter--selected'),_self.API_DATA.foodIngredients.push({Index:itemIndex,EntityId:selectedFilter.EntityId,EntityType:selectedFilter.EntityType,MaterializedPath:selectedFilter.MaterializedPath}),_self.setAllButtonState(),_self.loadItemsOnFilterChange(_self.API_DATA)]
return[_self.selectedInredientFilterItems[itemIndex].classList.remove('search-results__round-filter--selected'),_self.API_DATA.foodIngredients.splice(foundIndex,1),_self.setAllButtonState(),_self.loadItemsOnFilterChange(_self.API_DATA)]}}
this.setAllButtonState=function(){if(_self.API_DATA.foodIngredients.length===0){_self.selectedIngredientBottomFilter='All';_self.API_DATA.foodIngredients=[];}else{_self.selectedIngredientBottomFilter='';}}
this.loadItemsOnFilterChange=function(){_self.loadingItems=true;RecipeService.RecipeSingleFilters(_self.API_DATA).then(function(success){_self.filterItemList=success.data.Data;_self.selectedCategoryLength=success.data.Count;}).then(function(){if(_self.filterItemList.length<=12){_self.removeGoogleAdsFromList(_self.filterItemList.length);}
_self.appendGoogleAdsToList();_self.checkItemsHeadingWidth();if(_self.isMobile){_self.checkLastMobileAd()}}).catch(function(error){console.error(error);}).finally(function(){_self.loadingItems=false;$timeout(()=>{_self.recipeItemVariationSlider();});});}
this.loadMoreRecipesItems=function(){_self.isContentLoaded=true;_self.API_DATA.page=_self.API_DATA.page+1;RecipeService.RecipeSingleFilters(_self.API_DATA).then(function(success){_self.filterItemList=_self.filterItemList.concat(success.data.Data);if(_self.isMobile){_self.gridRow=_self.gridRow+7;}
else{_self.gridRow=_self.gridRow+4;}}).then(function(){_self.appendGoogleAdsToList();_self.checkItemsHeadingWidth();if(_self.isMobile){_self.checkLastMobileAd();}
else{$timeout(()=>{document.getElementById('recipe-list-wrapper').scrollTop=document.getElementById('recipe-list-wrapper').scrollHeight;});}}).catch(function(error){console.error(error);}).finally(function(){_self.isContentLoaded=false;$timeout(()=>{_self.recipeItemVariationSlider();});});}
this.appendGoogleAdsToList=function(){$timeout(()=>{[...document.querySelectorAll('.recipe-result-list__item')].map(function(listItem,index){var adGoogleNode=document.createElement('div');var adGoogleNodeId=crypto.randomUUID();if(_self.isMobile){_self.numberOfItemsAfter=12;adGoogleNode.style.cssText+='--grid-row:'+_self.gridRow+';--grid-col:'+(_self.gridRow+1);adGoogleNode.classList.add('recipe-result-list__item--ads',`recipe-result-list__item--ads-${adGoogleNodeId}`);adGoogleNode.innerHTML+=`<div class="promotion-recipe" angular-request-compile ta-google-ad id="recipes-ad-mobile-${adGoogleNodeId}" name="/21703950087/D_TA_300x250" platform="mobile"></div>`}
else{_self.numberOfItemsAfter=9;adGoogleNode.style.cssText+='--grid-row:'+_self.gridRow+';--grid-col:'+(_self.gridRow+1);adGoogleNode.classList.add('recipe-result-list__item--ads',`recipe-result-list__item--ads-${adGoogleNodeId}`);adGoogleNode.innerHTML+=`<div class='promotion promotion--fullwidth promotion--notoppadding' angular-request-compile ta-google-ad id="recipes-ad-desktop-${adGoogleNodeId}" name='/21703950087/D_TA_billboard' platform='desktop'></div>`}
if((parseInt(index+1)%_self.numberOfItemsAfter)==0&&_self.indexCounter<index){_self.indexCounter=_self.indexCounter+_self.numberOfItemsAfter;listItem.parentNode.insertBefore(adGoogleNode.cloneNode(true),listItem);}});});}
this.removeGoogleAdsFromList=function(itemNumber){$timeout(()=>{const googleAds=[...document.querySelectorAll('.recipes-result-list__item--ads')];if(_self.isMobile){_self.gridRow=7;}
else{_self.gridRow=4;}
googleAds.forEach((ad)=>{ad.remove()});});}
this.checkLastMobileAd=function(){$timeout(()=>{var lastMobileAd=Array.from(document.querySelectorAll('.recipes-result-list__item--ads')).pop();if(!lastMobileAd||lastMobileAd.hasAttribute('disabled-ads')){_self.lastGoogleAdsEnabled=true;}
else{_self.lastGoogleAdsEnabled=false;}});}
this.checkItemsHeadingWidth=function(){var inValid=/\s/;$timeout(()=>{var itemHeadings=document.querySelectorAll('.recipe-name');itemHeadings.forEach(itemHeading=>{if(!inValid.test(itemHeading.textContent)){itemHeading.classList.add("recipe-name__one-row-heading");}});});}
this.convertToMinutes=function(num,type){_self.API_DATA.page=0;if(type==1){_self.API_DATA.cookingTo=_self.CONVERT_RANGE_VAL_TO_MINUTES[num];return _self.loadItemsOnFilterChange(_self.API_DATA);}
else if(type==2){_self.API_DATA.totalTo=_self.CONVERT_RANGE_VAL_TO_MINUTES[num];return _self.loadItemsOnFilterChange(_self.API_DATA);}}
$scope.$on("cookingRangeSliderValue",function(evt,data){_self.convertToMinutes(data,1);});$scope.$on("totalRangeSliderValue",function(evt,data){_self.convertToMinutes(data,2);});}]);;angular.module('tasteatlas').component('taRecipesSearch',{bindings:{isMobile:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/recipes/ta-recipes-search-mobile.html','desktop':'/content/scripts/app/components/recipes/ta-recipes-search-desktop.html',};return templates[$attrs.template];},controller:'taRecipesSearchController',}).controller("taRecipesSearchController",["RecipeService","$window",function(RecipeService,$window){var _self=this;this.recipeAutocomplete=[];this.recipeQuery='';this.getSelectedItem=function(item){_self.selectedDropdownItem=item;_self.onDeleteAutocompleteQuery();_self.toggleDropdownOpen();_self.errorMessage.innerText='';}
this.searchRecipes=function(){if(!_self.recipeQuery||_self.recipeQuery.length<2)
return;RecipeService.RecipeSingleAutocomplete(_self.recipeQuery).then(function(success){_self.recipesAutocomplete=success.data;}).catch(function(error){console.log(error);});}
this.getSelectedRecipe=function(selectedRecipeUrlLink){if(selectedRecipeUrlLink){$window.location.href=`/${selectedRecipeUrlLink}`;_self.selectedRecipeUrlLink=null;}
_self.onDeleteAutocompleteQuery();}
this.onDeleteAutocompleteQuery=function(){_self.recipeQuery='';_self.recipeAutocomplete=[];}
this.closeRecipeseAutocomplete=function(){_self.onDeleteAutocompleteQuery();}}]);;angular.module('tasteatlas').component('taRestaurantMainDesktop',{bindings:{id:'<'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-desktop-overview/ta-restaurant-main-desktop.html',controller:'taRestaurantMainDesktopController'}).controller("taRestaurantMainDesktopController",['$q','$timeout','$rootScope','$scope','constants','RestaurantService','RegionService','ItemTypes','UserCommentStatusService','ProfileService','UserCacheService','MainHelper','$scope','SharingSubjectService','UserSubjectService','LoginService','RatingSharedService','BotInterceptor',function($q,$timeout,$rootScope,$scope,constants,RestaurantService,RegionService,ItemTypes,UserCommentStatusService,ProfileService,UserCacheService,MainHelper,$scope,SharingSubjectService,UserSubjectService,LoginService,RatingSharedService,BotInterceptor){var _self=this;this.constants=constants;this.isLoaded=false;this.iconicDishesLoading=false;this.servedDishesLoading=false;this.reviewsLoading=false;this.commentsLoading=false;this.pageType='Restaurant';this.details={};this.userCommentStatus={};this.iconicDishes=[];this.servedDishes=[];this.reviews=[];this.getWannaVisitRestaurantDetails;this.exploreMoreCache=[];this.exploreMoreMaxSize=48;this.exploreMorePageSize=8;this.exploreMoreRowSize=this.exploreMorePageSize/2;this.explorePageIndex=1;this.isExploreMoreLoaded=false;this.exploreLoading=false;this.exploreLastPage=false;this.MainFilter={PageSize:2,PageIndex:1};this.location={longitude:'',latitude:''};this.$onInit=function(){_self.details=angular.fromJson(window.ta.restaurant);_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.isLoaded=true;var promises=[RestaurantService.getRestaurantDishes(_self.id,{IsIconic:true,PageSize:6,PageIndex:1}),RestaurantService.getRestaurantDishes(_self.id,{IsIconic:false,PageSize:6,PageIndex:1}),RestaurantService.getRestaurantReviews(_self.id,{PageSize:10,PageIndex:1}),RestaurantService.getRestaurantComments(_self.id,{PageSize:10,PageIndex:1}),RestaurantService.exploreRegionRestaurants(_self.id,{MaxCountSize:_self.exploreMoreMaxSize,PageSize:_self.exploreMorePageSize,RowSize:_self.exploreMoreRowSize,PageIndex:1})];$q.all(promises).then(function(success){_self.iconicDishes=success[0].data;_self.servedDishes=success[1].data;_self.reviews=success[2].data;_self.comments=success[3].data;if(_self.reviews.Count<5){BotInterceptor.blockIndexing();}
var image=undefined;if(_self.details.PreviewImage&&_self.details.PreviewImage.Image)
image=_self.details.PreviewImage.Image;SharingSubjectService.dispatch({name:SharingSubjectService.SHARE_ITEM_CHANGED,payload:{pageType:MainHelper.RESTAURANT,name:_self.details.Name,region:_self.details.RegionName,country:_self.details.CountryName,image:image}});_self.exploreMoreCache=success[4].data;_self.explore=MainHelper.paginate(_self.exploreMoreCache.Data,_self.exploreMorePageSize,_self.explorePageIndex);_self.isExploreMoreLoaded=true;_self.exploreLoading=false;if(_self.exploreMoreCache.Count<_self.explorePageSize)_self.exploreLastPage=true;},function(error){console.log(error);});$timeout(()=>{getWannaVisitRestaurant();});};function waitingForDetailsData(x){return new Promise((resolve)=>{$timeout(()=>{resolve(x);});});}
async function getWannaVisitRestaurant(){_self.preloadedDetails=await waitingForDetailsData(window.ta.restaurant);if(_self.preloadedDetails.Id){_self.getWannaVisitRestaurantDetails=await waitingForDetailsData(UserCacheService.getWannaVisitRestaurant(_self.preloadedDetails.Id));}
if(await waitingForDetailsData(_self.getWannaVisitRestaurantDetails)&&_self.getWannaVisitRestaurantDetails!=null){_self.userCommentStatus.wantsToTry=!!_self.getWannaVisitRestaurantDetails.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.getWannaVisitRestaurantDetails.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
function refreshData(){return UserCacheService.refreshMyLists();}
function wannaTryClick(mainAction,secondaryAction,decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(_self.preloadedDetails.Id,_self.preloadedDetails.EntityType).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(_self.preloadedDetails.Id,_self.preloadedDetails.EntityType).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',3);};this.getWannaTryLabel=function(){var label="Wanna visit?";if(_self.userCommentStatus.comment){return "Wanna visit?";}
if(_self.userCommentStatus.wantsToTry){label="Wanna visit";}
return label;};this.wantsToTryDisabled=function(){if(_self.type==='singleItemOnPage'){return _self.userCommentStatus.comment;}
else if(_self.type==='collection'){return _self.getFoodRatingScore(_self.foodDetails);}};function _commentButtonObserver(data){_self.userCommentStatus=data;}
this.loadMoreIconicDishes=function(){_self.iconicDishes.PageIndex=_self.iconicDishes.PageIndex+1;if(_self.iconicDishes.PageIndex>_self.iconicDishes.NumberOfPages)
return;_self.iconicDishesLoading=true;RestaurantService.getRestaurantDishes(_self.id,{IsIconic:true,PageSize:_self.iconicDishes.PageSize,PageIndex:_self.iconicDishes.PageIndex}).then(function(success){_self.iconicDishes.Data=_self.iconicDishes.Data.concat(success.data.Data);_self.iconicDishesLoading=false;},function(error){console.log(error);});};this.loadMoreServedDishes=function(){_self.servedDishes.PageIndex=_self.servedDishes.PageIndex+1;if(_self.servedDishes.PageIndex>_self.servedDishes.NumberOfPages)
return;_self.servedDishesLoading=true;RestaurantService.getRestaurantDishes(_self.id,{IsIconic:false,PageSize:_self.servedDishes.PageSize,PageIndex:_self.servedDishes.PageIndex}).then(function(success){_self.servedDishes.Data=_self.servedDishes.Data.concat(success.data.Data);_self.servedDishesLoading=false;},function(error){console.log(error);});};this.loadMoreReviews=function(){_self.reviews.PageIndex=_self.reviews.PageIndex+1;if(_self.reviews.PageIndex>_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;RestaurantService.getRestaurantReviews(_self.id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;$scope.$broadcast(MainHelper.INIT_MASONRY);},function(error){console.log(error);});};this.loadMoreComments=function(){_self.comments.PageIndex=_self.comments.PageIndex+1;if(_self.comments.PageIndex>_self.comments.NumberOfPages)
return;_self.commentsLoading=true;RestaurantService.getRestaurantComments(_self.id,{PageSize:_self.comments.PageSize,PageIndex:_self.comments.PageIndex}).then(function(success){_self.comments.Data=_self.comments.Data.concat(success.data.Data);_self.commentsLoading=false;},function(error){console.log(error);});};this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.exploreMore=function(){if(_self.exploreMoreCache.PageIndex===_self.exploreMoreCache.NumberOfPages){return;}
_self.exploreLoading=true;_self.exploreMoreCache.PageIndex=_self.exploreMoreCache.PageIndex+1;_self.explore=_self.explore.concat(MainHelper.paginate(_self.exploreMoreCache.Data,_self.exploreMorePageSize,_self.exploreMoreCache.PageIndex));_self.exploreLoading=false;_self.exploreLastPage=MainHelper.checkLastPage(_self.exploreMoreCache.PageIndex,_self.exploreMoreCache.NumberOfPages);};this.parseCriticsInfo=MainHelper.parseDishCriticInfo;this.isTellUs=false;this.tellUsWhere=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.isTellUs=!_self.isTellUs;};this.tryOpenRating=function(item){item.details=item.details||{};RatingSharedService.tryOpenRating(item);};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(item){item.details.isRatingOpen=false;};}]);;angular.module('tasteatlas').component('taRestaurantMainMobile',{bindings:{id:'<'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-mobile-overview/ta-restaurant-main-mobile.html',controller:'taRestaurantMainMobileController'}).controller("taRestaurantMainMobileController",["$q","$timeout","constants","$window","RestaurantService","UserCommentStatusService","UserCacheService","ProfileService","MainHelper",'GeolocationService','UserSubjectService','SharingSubjectService','RatingSharedService','BotInterceptor','DistanceCalculator',function($q,$timeout,constants,$window,RestaurantService,UserCommentStatusService,UserCacheService,ProfileService,MainHelper,GeolocationService,UserSubjectService,SharingSubjectService,RatingSharedService,BotInterceptor,DistanceCalculator){var _self=this;this.constants=constants;this.getDistance=MainHelper.getDistance;this.isLoaded=false;this.iconicDishesLoading=false;this.servedDishesLoading=false;this.reviewsLoading=false;this.commentsLoading=false;this.pageType='Restaurant';this.sharingDetails={};this.userCommentStatus={};this.details={};this.iconicDishes=[];this.servedDishes=[];this.reviews=[];this.getWannaVisitRestaurantDetails;this.location={longitude:'',latitude:''};this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.$onInit=function(){_self.details=angular.fromJson(window.ta.restaurant);_self.isLoaded=true;UserCommentStatusService.subscribe(_commentButtonObserver);promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){_self.location={longitude:'',latitude:''};}
else{_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};}
afterLocationPromiseChain();});}else{afterLocationPromiseChain();}});});$timeout(()=>{getWannaVisitRestaurant();});};function promiseChain(){var promises=[RestaurantService.getRestaurantDishes(_self.id,{IsIconic:true,PageSize:10,PageIndex:1}),RestaurantService.getRestaurantDishes(_self.id,{IsIconic:false,PageSize:4,PageIndex:1}),RestaurantService.getRestaurantReviews(_self.id,{PageSize:10,PageIndex:1}),RestaurantService.getRestaurantComments(_self.id,{PageSize:10,PageIndex:1})];return $q.all(promises).then(function(success){_self.iconicDishes=success[0].data;_self.servedDishes=success[1].data;_self.reviews=success[2].data;_self.comments=success[3].data;if(_self.reviews.Count<5){BotInterceptor.blockIndexing();}}).catch(function(error){console.log(error);});}
function afterLocationPromiseChain(){var image=undefined;if(_self.details.PreviewImage&&_self.details.PreviewImage.Image)
image=_self.details.PreviewImage.Image;if(_self.details.Latitude!=null&&_self.details.Longitude!=null&&_self.location.latitude!=''){var calculatedDistance=DistanceCalculator.distanceBetweenPoints(_self.details.Latitude,_self.details.Longitude,_self.location.latitude,_self.location.longitude);_self.details.Distance=calculatedDistance.kilometers;_self.details.DistanceMiles=calculatedDistance.miles;}
SharingSubjectService.dispatch({name:SharingSubjectService.SHARE_ITEM_CHANGED,payload:{pageType:MainHelper.RESTAURANT,name:_self.details.Name,region:_self.details.RegionName,country:_self.details.CountryName,image:image}});}
function _commentButtonObserver(data){_self.userCommentStatus=data;}
function waitingForDetailsData(x){return new Promise((resolve)=>{$timeout(()=>{resolve(x);});});}
async function getWannaVisitRestaurant(){_self.preloadedDetails=await waitingForDetailsData(window.ta.restaurant);if(_self.preloadedDetails.Id){_self.getWannaVisitRestaurantDetails=await waitingForDetailsData(UserCacheService.getWannaVisitRestaurant(_self.preloadedDetails.Id));}
if(await waitingForDetailsData(_self.getWannaVisitRestaurantDetails)&&_self.getWannaVisitRestaurantDetails!=null){_self.userCommentStatus.wantsToTry=!!_self.getWannaVisitRestaurantDetails.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.getWannaVisitRestaurantDetails.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
function refreshData(){return UserCacheService.refreshMyLists();}
function refreshData(){return UserCacheService.refreshMyLists();}
function wannaTryClick(mainAction,secondaryAction,decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(_self.preloadedDetails.Id,_self.preloadedDetails.EntityType).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(_self.preloadedDetails.Id,_self.preloadedDetails.EntityType).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',3);};this.getWannaTryLabel=function(){var label="Wanna visit?";if(_self.userCommentStatus.comment){return "Wanna visit?";}
if(_self.userCommentStatus.wantsToTry){label="Wanna visit";}
return label;};this.wantsToTryDisabled=function(){if(_self.type==='singleItemOnPage'){return _self.userCommentStatus.comment;}
else if(_self.type==='collection'){return _self.getFoodRatingScore(_self.foodDetails);}};this.loadMoreIconicDishes=function(){_self.iconicDishes.PageIndex=_self.iconicDishes.PageIndex+1;if(_self.iconicDishes.PageIndex>_self.iconicDishes.NumberOfPages)
return;_self.iconicDishesLoading=true;RestaurantService.getRestaurantDishes(_self.id,{IsIconic:false,PageSize:_self.iconicDishes.PageSize,PageIndex:_self.iconicDishes.PageIndex}).then(function(success){_self.iconicDishes.Data=_self.iconicDishes.Data.concat(success.data.Data);_self.iconicDishesLoading=false;},function(error){console.log(error);});};this.goToIconicDish=function(dishLink){var urlLink='/'+_self.details.UrlLink+'/'+dishLink;$window.location.href=urlLink;};this.loadMoreServedDishes=function(){_self.servedDishes.PageIndex=_self.servedDishes.PageIndex+1;if(_self.servedDishes.PageIndex>_self.servedDishes.NumberOfPages)
return;_self.servedDishesLoading=true;RestaurantService.getRestaurantDishes(_self.id,{IsIconic:false,PageSize:_self.servedDishes.PageSize,PageIndex:_self.servedDishes.PageIndex}).then(function(success){_self.servedDishes.Data=_self.servedDishes.Data.concat(success.data.Data);_self.servedDishesLoading=false;},function(error){console.log(error);});};this.loadMoreReviews=function(){_self.reviews.PageIndex=_self.reviews.PageIndex+1;if(_self.reviews.PageIndex>_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;RestaurantService.getRestaurantReviews(_self.id,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;},function(error){console.log(error);});};this.loadMoreComments=function(){_self.comments.PageIndex=_self.comments.PageIndex+1;if(_self.comments.PageIndex>_self.comments.NumberOfPages)
return;_self.commentsLoading=true;RestaurantService.getRestaurantComments(_self.id,{PageSize:_self.comments.PageSize,PageIndex:_self.comments.PageIndex}).then(function(success){_self.comments.Data=_self.comments.Data.concat(success.data.Data);_self.commentsLoading=false;},function(error){console.log(error);});};this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.parseCriticsInfo=MainHelper.parseDishCriticInfo;this.isTellUs=false;this.isAnonymous=false;this.tellUsWhere=function(){_self.isTellUs=true;_self.isAnonymous=UserSubjectService.isInAnonymousRole();};this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};this.tryOpenRating=function(item){item.details=item.details||{};RatingSharedService.tryOpenRating(item);};this.isRestaurantRated=RatingSharedService.isRestaurantRated;this.getRestaurantAvgRating=RatingSharedService.getRestaurantAvgRating;this.closeRestaurantRating=function(item){item.details.isRatingOpen=false;};this.getRegionLabel=function(){if(_self.details.DistrictName){return _self.details.DistrictName+", "+_self.details.RegionName+(_self.details.CountryName&&(", "+_self.details.CountryName));}
return _self.details.RegionName+(_self.details.CountryName&&(", "+_self.details.CountryName));};}]);;angular.module('tasteatlas').component('taRestaurantCommentDesktop',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-desktop.html',controller:'taRestaurantCommentDesktopController'}).controller("taRestaurantCommentDesktopController",['$timeout','CommentService','constants','CommentHelper','$scope','$q','DishService','UserCacheService',function($timeout,CommentService,constants,CommentHelper,$scope,$q,DishService,UserCacheService){var _self=this;this.constants=constants;this.isAnonymous=true;this.isValid=false;this.isValidDish=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.Restaurant='Restaurant';this.Dish='Dish';this.Thanks='Thanks';this.current=_self.Restaurant;this.existingComment=null;this.initialDish={id:'',name:'',entityType:1};this.dish=_self.initialDish;this.query='';this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[],informations:[]};this.dishes=[];this.isDishSelected=false;this.$onInit=function(){_self.current=_self.Restaurant;_self.data.entityId2=_self.details.Id;_self.data.entityType=11;};this.closeModal=function(){_self.onCloseModal();};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.onInputDish=function(query){removeError();_self.isDishSelected=false;_self.dishes=[];_self.dish=_self.initialDish;_self.data.entityId='';DishService.searchDishes(query).then(function(success){_self.dishes=success.data;},function(error){console.log(error);});};this.onDishDelete=function(){$timeout(function(){removeError();_self.query='';_self.isValidDish=false;_self.dishes=[];_self.dish=_self.initialDish;});};this.onDishSelect=function(dish){$timeout(function(){_self.dishes=[];_self.data.entityId=dish.EntityId;_self.query=dish.Label;_self.dish.id=dish.EntityId;_self.dish.name=dish.Label;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);_self.isValidDish=true;});};this.submit=function(){$timeout(function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;commentAction();});};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){_self.current=_self.Thanks;_self.submitting=false;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();});};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){return commentExists(_self.data.entityId);}).then(function(commentExists){if(commentExists.data===true)
_self.current=_self.Thanks;else
_self.current=_self.Dish;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Restaurant;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function commentExists(id){var entityId=id;var entityType=1;return CommentService.commentExists({EntityId:entityId,EntityType:entityType});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.isDishSelected=false;_self.dishes=[];_self.query='';_self.dish=_self.initialDish;_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.isValid=false;_self.isValidDish=false;_self.submitting=false;}
function uploadPhotosProgressCallback(event){}}]);;angular.module('tasteatlas').component('taRestaurantCommentMobile',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-mobile.html',controller:'taRestaurantCommentMobileController'}).controller("taRestaurantCommentMobileController",['CommentService','constants','CommentHelper','$scope','$q','DishService','UserCacheService',function(CommentService,constants,CommentHelper,$scope,$q,DishService,UserCacheService){var _self=this;this.constants=constants;this.isAnonymous=true;this.isValid=false;this.isValidDish=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.Restaurant='Restaurant';this.Dish='Dish';this.Thanks='Thanks';this.current=_self.Restaurant;this.existingComment=null;this.initialDish={id:'',name:'',entityType:1};this.dish=_self.initialDish;this.query='';this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[],informations:[]};this.dishes=[];this.isDishSelected=false;this.$onInit=function(){_self.current=_self.Restaurant;_self.data.entityId2=_self.details.Id;_self.data.entityType=11;};this.closeModal=function(){_self.onCloseModal();};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.onInputDish=function(query){removeError();_self.isDishSelected=false;_self.dishes=[];_self.dish=_self.initialDish;_self.data.entityId='';DishService.searchDishes(query).then(function(success){_self.dishes=success.data;},function(error){console.log(error);});};this.onDishDelete=function(){removeError();_self.isDishSelected=false;_self.query='';_self.isValidDish=false;_self.dishes=[];_self.dish=_self.initialDish;};this.onDishSelect=function(dish){_self.dishes=[];_self.isDishSelected=true;_self.data.entityId=dish.EntityId;_self.query=dish.Label;_self.dish.id=dish.EntityId;_self.dish.name=dish.Label;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);_self.isValidDish=true;};this.submit=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;commentAction();};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){_self.current=_self.Thanks;_self.submitting=false;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();});};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){return commentExists(_self.data.entityId);}).then(function(commentExists){if(commentExists.data===true)
_self.current=_self.Thanks;else
_self.current=_self.Dish;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Restaurant;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function commentExists(id){var entityId=id;var entityType=1;return CommentService.commentExists({EntityId:entityId,EntityType:entityType});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.isDishSelected=false;_self.dishes=[];_self.query='';_self.dish=_self.initialDish;_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.isValid=false;_self.isValidDish=false;_self.submitting=false;}
function uploadPhotosProgressCallback(event){}
this.skipToThanks=function(){_self.current=_self.Thanks;};}]);;angular.module('tasteatlas').component('taRestaurantCommentModal',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-comment-modal.html',controller:'taRestaurantCommentModalController'}).controller("taRestaurantCommentModalController",['$timeout','CommentService','constants','CommentHelper','$scope','$q','DishService','UserCacheService',function($timeout,CommentService,constants,CommentHelper,$scope,$q,DishService,UserCacheService){var _self=this;this.constants=constants;this.isAnonymous=true;this.isValid=false;this.isValidDish=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.Restaurant='Restaurant';this.Dish='Dish';this.Thanks='Thanks';this.current=_self.Restaurant;this.existingComment=null;this.initialDish={id:'',name:'',entityType:1};this.dish=_self.initialDish;this.query='';this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[],informations:[]};this.dishes=[];this.isDishSelected=false;this.$onInit=function(){_self.current=_self.Restaurant;_self.data.entityId2=_self.details.Id;_self.data.entityType=11;};this.closeModal=function(){_self.onCloseModal();};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.onInputDish=function(query){removeError();_self.isDishSelected=false;_self.dishes=[];_self.dish=_self.initialDish;_self.data.entityId='';DishService.searchDishes(query).then(function(success){_self.dishes=success.data;},function(error){console.log(error);});};this.onDishDelete=function(){$timeout(function(){removeError();_self.query='';_self.isValidDish=false;_self.dishes=[];_self.dish=_self.initialDish;});};this.onDishSelect=function(dish){$timeout(function(){_self.dishes=[];_self.data.entityId=dish.EntityId;_self.query=dish.Label;_self.dish.id=dish.EntityId;_self.dish.name=dish.Label;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);_self.isValidDish=true;});};this.submit=function(){$timeout(function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;commentAction();});};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid&&!_self.isValidDish)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){_self.current=_self.Thanks;_self.submitting=false;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();});};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){return commentExists(_self.data.entityId);}).then(function(commentExists){if(commentExists.data===true)
_self.current=_self.Thanks;else
_self.current=_self.Dish;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Restaurant;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function commentExists(id){var entityId=id;var entityType=1;return CommentService.commentExists({EntityId:entityId,EntityType:entityType});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.isDishSelected=false;_self.dishes=[];_self.query='';_self.dish=_self.initialDish;_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.isValid=false;_self.isValidDish=false;_self.submitting=false;}
function uploadPhotosProgressCallback(event){}
this.skipToThanks=function(){$timeout(function(){_self.current=_self.Thanks;});};}]);;angular.module('tasteatlas').component('taRestaurantDishCommentDesktop',{bindings:{dish:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-desktop.html',controller:'taRestaurantDishCommentDesktopController'}).controller("taRestaurantDishCommentDesktopController",['CommentService','CommentHelper','$q','$timeout','UserCacheService',function(CommentService,CommentHelper,$q,$timeout,UserCacheService){var _self=this;this.Dish='Dish';this.Thanks='Thanks';this.Voted='Voted';this.current=_self.Dish;this.isAnonymous=true;this.isApproved=false;this.isValid=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[]};this.$onInit=function(){_self.data.entityId=_self.dish.id;_self.data.entityType=_self.dish.entityType;};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.submit=function(){$timeout(function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){resetDataToDefaults();_self.current=_self.Voted;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetDataToDefaults();_self.isCurrentCommentProcess=false;});});};function resetDataToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.submitting=false;_self.isValid=false;_self.data.rating='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
this.skip=function(){_self.current=_self.Thanks;};this.closeModal=function(){_self.onCloseModal();};}]);;angular.module('tasteatlas').component('taRestaurantDishCommentMobile',{bindings:{dish:'<',onSkip:'&',onClose:'&'},controller:'taRestaurantDishCommentMobileController',templateUrl:function($element,$attrs){var templates={'regular':'Content/Scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-mobile.html','modal':'Content/Scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-dish-comment-mobile-modal.html'};return templates[$attrs.template];},}).controller("taRestaurantDishCommentMobileController",['CommentService','CommentHelper','$scope','$q','FilePickerService',function(CommentService,CommentHelper,$scope,$q,FilePickerService){var _self=this;this.Dish='Dish';this.Thanks='Thanks';this.Voted='Voted';this.current=_self.Dish;this.isAnonymous=true;this.isApproved=false;this.isValid=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[]};this.$onInit=function(){_self.data.entityId=_self.dish.id;_self.data.entityType=_self.dish.entityType;};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.submit=function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){resetDataToDefaults();_self.current=_self.Voted;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetDataToDefaults();_self.isCurrentCommentProcess=false;});};function resetDataToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.submitting=false;_self.isValid=false;_self.data.rating='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
this.skip=function(){_self.onSkip();};this.closeModal=function(){_self.onClose();};}]);;angular.module('tasteatlas').component('taRestaurantErrorDesktop',{bindings:{id:'<',entityType:'<'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-error-desktop.html',controller:'taRestaurantErrorDesktopController'}).controller("taRestaurantErrorDesktopController",['CommentService',function(CommentService){var _self=this;this.isErrorFormShown=false;this.error='';this.isError=false;this.submitting=false;this.data={entityId:'',entityType:'',content:'',email:''};this.onErrorFormShow=function(){_self.isErrorFormShown=!_self.isErrorFormShown;};this.submit=function(){if(_self.errorForm.$valid===false)
return;if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;_self.data.entityId=_self.id;_self.data.entityType=_self.entityType;CommentService.errorPost(_self.data).then(function(success){resetData();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetData();});};function resetData(){_self.submitting=false;_self.data={entityId:'',entityType:'',content:'',email:''};_self.isErrorFormShown=false;}
this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};}]);;angular.module('tasteatlas').component('taRestaurantErrorMobile',{bindings:{id:'<',entityType:'<'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-error-mobile.html',controller:'taRestaurantErrorMobileController'}).controller("taRestaurantErrorMobileController",['CommentService',function(CommentService){var _self=this;this.isErrorFormShown=false;this.error='';this.isError=false;this.submitting=false;this.data={entityId:'',entityType:'',content:'',email:''};this.onErrorFormShow=function(){_self.isErrorFormShown=!_self.isErrorFormShown;};this.submit=function(){if(_self.errorForm.$valid===false)
return;if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;_self.data.entityId=_self.id;_self.data.entityType=_self.entityType;CommentService.errorPost(_self.data).then(function(success){resetData();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetData();});};function resetData(){_self.submitting=false;_self.data={entityId:'',entityType:'',content:'',email:''};_self.isErrorFormShown=false;}
this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};}]);;angular.module('tasteatlas').component('taRestaurantRatingControl',{bindings:{openRating:'&',isRated:'&',avgRating:'<'},templateUrl:'/content/scripts/app/components/restaurant-details/restaurant-shared/ta-restaurant-rating-control.html',controller:'taRestaurantRatingControlController'}).controller("taRestaurantRatingControlController",["CommentHelper",function(CommentHelper){var _self=this;this.viewScore;this.$onInit=function(){_self.viewScore=CommentHelper.recalculateRatingForView(_self.avgRating);};this.getUserRating=function(){return CommentHelper.recalculateRatingForView(_self.avgRating);};this.openRatingPopup=function(event,item){event.stopPropagation();event.preventDefault();_self.openRating(item);};}]);;angular.module('tasteatlas').component('taRestaurantDishDesktop',{bindings:{dishId:'<',restaurantId:'<'},templateUrl:'/content/scripts/app/components/restaurant-dish-details/ta-restaurant-dish-desktop.html',controller:'taRestaurantDishDesktopController'}).controller('taRestaurantDishDesktopController',['$q','constants','RestaurantDishService','MainHelper','$scope','UserSubjectService','SharingSubjectService','LoginService','BotInterceptor',function($q,constants,RestaurantDishService,MainHelper,$scope,UserSubjectService,SharingSubjectService,LoginService,BotInterceptor){var _self=this;this.constants=constants;this.isLoaded=false;this.filter={PageSize:10,PageIndex:1};this.moreFromFilter={PageSize:6,PageIndex:1};this.location={longitude:'',latitude:''};this.parseCriticsInfo=MainHelper.parseDishCriticInfo;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.$onInit=function(){_self.details=angular.fromJson(window.ta.dishRestaurant);_self.isLoaded=true;_self.isAnonymous=UserSubjectService.isInAnonymousRole();var promises=[RestaurantDishService.getRestaurantDishReviews(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getRestaurantDishComments(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getMoreRestaurantDishRestaurants(_self.restaurantId,_self.dishId,_self.moreFromFilter),RestaurantDishService.getMoreRestaurantDishDishes(_self.restaurantId,_self.dishId,_self.moreFromFilter),RestaurantDishService.getRestaurantDishUserComment(_self.restaurantId,_self.dishId)];$q.all(promises).then(function(success){_self.reviews=success[0].data;_self.comments=success[1].data;_self.restaurants=success[2].data;_self.dishes=success[3].data;_self.comment=success[4].data;if(_self.reviews.Count<5){BotInterceptor.blockIndexing();}
SharingSubjectService.dispatch({name:SharingSubjectService.SHARE_ITEM_CHANGED,payload:{pageType:MainHelper.RESTAURANT_DISH,name:_self.details.DishName,subName:_self.details.Name,region:_self.details.RegionName,country:_self.details.CountryName,image:_self.details.BackgroundImage}});}).catch(function(err){console.log(err);});};this.commentsLoading=false;this.loadMoreComments=function(){if(_self.comments.PageIndex===_self.comments.NumberOfPages)
return;_self.commentsLoading=true;_self.comments.PageIndex=_self.comments.PageIndex+1;RestaurantDishService.getRestaurantDishComments(_self.restaurantId,_self.dishId,{PageSize:_self.comments.PageSize,PageIndex:_self.comments.PageIndex}).then(function(success){_self.comments.Data=_self.comments.Data.concat(success.data.Data);_self.commentsLoading=false;},function(error){console.log(error);});};this.reviewsLoading=false;this.loadMoreReviews=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;RestaurantDishService.getRestaurantDishReviews(_self.restaurantId,_self.dishId,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;$scope.$broadcast(MainHelper.INIT_MASONRY);},function(error){console.log(error);});};this.restaurantsLoading=false;this.loadMoreRestaurants=function(){if(_self.restaurants.PageIndex===_self.restaurants.NumberOfPages)
return;_self.restaurantsLoading=true;_self.restaurants.PageIndex=_self.restaurants.PageIndex+1;RestaurantDishService.getMoreRestaurantDishRestaurants(_self.restaurantId,_self.dishId,{PageSize:_self.restaurants.PageSize,PageIndex:_self.restaurants.PageIndex}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.Data);_self.restaurantsLoading=false;},function(error){console.log(error);});};this.dishesLoading=false;this.loadMoreDishes=function(){if(_self.dishes.PageIndex===_self.dishes.NumberOfPages)
return;_self.dishesLoading=true;_self.dishes.PageIndex=_self.dishes.PageIndex+1;RestaurantDishService.getMoreRestaurantDishDishes(_self.restaurantId,_self.dishId,{PageSize:_self.dishes.PageSize,PageIndex:_self.dishes.PageIndex}).then(function(success){_self.dishes.Data=_self.dishes.Data.concat(success.data.Data);_self.dishesLoading=false;},function(error){console.log(error);});};this.isTellUs=false;this.tellUsWhere=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.isTellUs=!_self.isTellUs;};}]);;angular.module('tasteatlas').component('taRestaurantDishMobile',{bindings:{dishId:'<',restaurantId:'<'},templateUrl:'/content/scripts/app/components/restaurant-dish-details/ta-restaurant-dish-mobile.html',controller:'taRestaurantDishMobileController'}).controller('taRestaurantDishMobileController',['$q','RestaurantDishService','MainHelper','GeolocationService','UserSubjectService','SharingSubjectService','BotInterceptor','DistanceCalculator',function($q,RestaurantDishService,MainHelper,GeolocationService,UserSubjectService,SharingSubjectService,BotInterceptor,DistanceCalculator){var _self=this;this.isLoaded=false;this.filter={PageSize:10,PageIndex:1};this.location={longitude:'',latitude:''};this.pageType='Restaurant&Dish';this.parseCriticsInfo=MainHelper.parseDishCriticInfo;this.getDistance=MainHelper.getDistance;_self.loadedService=false;this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.details=angular.fromJson(window.ta.dishRestaurant);_self.isLoaded=true;promiseChain().then(function(){GeolocationService.handlePremission().then(function(data){if(data==='GRANTED'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'||data==='TROUBLE'){_self.location={longitude:'',latitude:''};}
else{_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};}
afterLocationPromiseChain();});}else{afterLocationPromiseChain();}});});};function promiseChain(){var promises=[RestaurantDishService.getRestaurantDishReviews(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getRestaurantDishComments(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getMoreRestaurantDishRestaurants(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getMoreRestaurantDishDishes(_self.restaurantId,_self.dishId,_self.filter),RestaurantDishService.getRestaurantDishUserComment(_self.restaurantId,_self.dishId)];return $q.all(promises).then(function(success){_self.reviews=success[0].data;_self.comments=success[1].data;_self.restaurants=success[2].data;_self.dishes=success[3].data;_self.comment=success[4].data;if(_self.reviews.Count<5){BotInterceptor.blockIndexing();}}).catch(function(err){console.log(err);});}
function afterLocationPromiseChain(){if(_self.details.Latitude!=null&&_self.details.Longitude!=null&&_self.location.latitude!=''){var calculatedDistance=DistanceCalculator.distanceBetweenPoints(_self.details.Latitude,_self.details.Longitude,_self.location.latitude,_self.location.longitude);_self.details.Distance=calculatedDistance.kilometers;_self.details.DistanceMiles=calculatedDistance.miles;}
SharingSubjectService.dispatch({name:SharingSubjectService.SHARE_ITEM_CHANGED,payload:{pageType:MainHelper.RESTAURANT_DISH,name:_self.details.DishName,subName:_self.details.Name,region:_self.details.RegionName,country:_self.details.CountryName,image:_self.details.BackgroundImage}});}
this.commentsLoading=false;this.loadMoreComments=function(){if(_self.comments.PageIndex===_self.comments.NumberOfPages)
return;_self.commentsLoading=true;_self.comments.PageIndex=_self.comments.PageIndex+1;RestaurantDishService.getRestaurantDishComments(_self.restaurantId,_self.dishId,{PageSize:_self.comments.PageSize,PageIndex:_self.comments.PageIndex}).then(function(success){_self.comments.Data=_self.comments.Data.concat(success.data.Data);_self.commentsLoading=false;},function(error){console.log(error);});};this.reviewsLoading=false;this.loadMoreReviews=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.reviewsLoading=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;RestaurantDishService.getRestaurantDishReviews(_self.restaurantId,_self.dishId,{PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.reviewsLoading=false;},function(error){console.log(error);});};this.restaurantsLoading=false;this.loadMoreRestaurants=function(){if(_self.restaurants.PageIndex===_self.restaurants.NumberOfPages)
return;_self.restaurantsLoading=true;_self.restaurants.PageIndex=_self.restaurants.PageIndex+1;RestaurantDishService.getMoreRestaurantDishRestaurants(_self.restaurantId,_self.dishId,{PageSize:_self.restaurants.PageSize,PageIndex:_self.restaurants.PageIndex}).then(function(success){_self.restaurants.Data=_self.restaurants.Data.concat(success.data.Data);_self.restaurantsLoading=false;},function(error){console.log(error);});};this.dishesLoading=false;this.loadMoreDishes=function(){if(_self.dishes.PageIndex===_self.dishes.NumberOfPages)
return;_self.dishesLoading=true;_self.dishes.PageIndex=_self.dishes.PageIndex+1;RestaurantDishService.getMoreRestaurantDishDishes(_self.restaurantId,_self.dishId,{PageSize:_self.dishes.PageSize,PageIndex:_self.dishes.PageIndex}).then(function(success){_self.dishes.Data=_self.dishes.Data.concat(success.data.Data);_self.dishesLoading=false;},function(error){console.log(error);});};this.redirectToGoogleMaps=function(lng,lat){MainHelper.redirectToGoogleMaps(_self.location,lng,lat);};this.isTellUs=false;this.isAnonymous=false;this.tellUsWhere=function(){_self.isTellUs=true;_self.isAnonymous=UserSubjectService.isInAnonymousRole();};this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};this.getRegionLabel=function(){if(_self.details.DistrictName){return _self.details.DistrictName+", "+_self.details.RegionName+(_self.details.CountryName&&(", "+_self.details.CountryName));}
return _self.details.RegionName+(_self.details.CountryName&&(", "+_self.details.CountryName));};}]);;angular.module('tasteatlas').component('taRestaurantAndDishCommentDesktop',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-dish-details/restaurant-dish-shared/ta-restaurant-and-dish-comment-desktop.html',controller:'taRestaurantAndDishCommentDesktopController'}).controller("taRestaurantAndDishCommentDesktopController",['CommentService','CommentHelper','$scope','$q','UserCacheService',function(CommentService,CommentHelper,$scope,$q,UserCacheService){var _self=this;this.isValid=false;this.isValidDish=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.Vote='Vote';this.Thanks='Thanks';this.current=_self.Vote;this.existingComment=null;this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[]};this.$onInit=function(){_self.current=_self.Vote;_self.data.entityId=_self.details.DishId;_self.data.entityId2=_self.details.Id;_self.data.entityType=11;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);};this.closeModal=function(){_self.onCloseModal();};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.submit=function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;commentAction();};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Vote;}).finally(function(){_self.submitting=false;});};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Vote;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.isValid=false;_self.submitting=false;}
function uploadPhotosProgressCallback(event){}}]);;angular.module('tasteatlas').component('taRestaurantAndDishCommentMobile',{bindings:{details:'<',onCloseModal:'&'},templateUrl:'/content/scripts/app/components/restaurant-dish-details/restaurant-dish-shared/ta-restaurant-and-dish-comment-mobile.html',controller:'taRestaurantAndDishCommentMobileController'}).controller("taRestaurantAndDishCommentMobileController",['CommentService','CommentHelper','$scope','$q','UserCacheService',function(CommentService,CommentHelper,$scope,$q,UserCacheService){var _self=this;this.isAnonymous=true;this.isValid=false;this.isValidDish=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isError=false;this.error='';this.Vote='Vote';this.Thanks='Thanks';this.current=_self.Vote;this.existingComment=null;this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[]};this.$onInit=function(){_self.current=_self.Vote;_self.data.entityId=_self.details.DishId;_self.data.entityId2=_self.details.Id;_self.data.entityType=11;_self.existingComment=UserCacheService.getRestaurantDishCommentById(_self.data.entityId,_self.data.entityId2);};this.closeModal=function(){_self.onCloseModal();};this.onChangeContent=function(){_self.isValid=CommentHelper.isCommentValid(_self.data);};this.vote=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isValid=CommentHelper.isCommentValid(_self.data);};this.submit=function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;commentAction();};this.canDelete=function(){return _self.existingComment&&_self.data.rating===1;};this.deleteComment=function(){if(_self.submitting&&!_self.isValid)
return;_self.submitting=true;return CommentService.deleteComment(_self.existingComment.CommentId).then(function(){resetToDefaults();_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Vote;}).finally(function(){_self.submitting=false;});};function commentAction(){var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(commentPosted){resetToDefaults();_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetToDefaults();_self.current=_self.Vote;});}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function removeError(){_self.error='';_self.isError=false;}
function resetToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.data.rating='';_self.data.content='';_self.data.photos=[];_self.isValid=false;_self.submitting=false;}
function uploadPhotosProgressCallback(event){}
this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};}]);;angular.module('tasteatlas').component('taMapImage',{bindings:{imageFilter:'<',regionId:'<'},templateUrl:'/content/scripts/app/components/shared/map-image-component.html',controller:'map-image-controller'}).controller("map-image-controller",["$scope","$httpParamSerializer","MainHelper",function($scope,$httpParamSerializer,MainHelper,$element){this.image=null;this.$onInit=function(){if(!this.imageFilter&&this.regionId){this.imageFilter=MainHelper.createImageFilter(this.regionId);}
$scope.width=this.imageFilter.width;$scope.height=this.imageFilter.height;this.imageFilter.width=this.imageFilter.width*2;this.imageFilter.height=this.imageFilter.height*2;var qs=$httpParamSerializer(this.imageFilter);this.image='regions/image?'+qs;this.imageFilter.width=$scope.width;this.imageFilter.height=$scope.height;};function arrayBufferToBase64(buffer){var binary='';var bytes=new Uint8Array(buffer);var len=bytes.byteLength;for(var i=0;i<len;i++){binary+=String.fromCharCode(bytes[i]);}
return window.btoa(binary);}}]);;angular.module('tasteatlas').component('taStarRatingPreview',{bindings:{isSelectable:'<',rating:'<',onRatingSelect:'&'},templateUrl:'/content/scripts/app/components/shared/star-rating-preview-component.html',controller:'star-rating-controller'}).controller("star-rating-controller",["$scope",function($scope){$scope.isSelectable=false;this.$onInit=function(){$scope.isSelectable=this.isSelectable;};this.selectStar=function(selectedStar){if(!this.isSelectable)
return;this.onRatingSelect({$event:{selectedRating:selectedStar}});};}]);;angular.module('tasteatlas').component('taCommentLikeMobile',{bindings:{review:'<',hideLabel:'<'},templateUrl:'/content/scripts/app/components/shared/ta-comment-like-mobile.html',controller:'taCommentLikeMobileController'}).controller("taCommentLikeMobileController",["CommentService","UserSubjectService",function(CommentService,UserSubjectService){var _self=this;this.IVote=function(data){if(data.length===0)
return false;var isAnonymous=UserSubjectService.isInAnonymousRole();if(isAnonymous===true)
return false;var id=UserSubjectService.getUserId();var userId=parseInt(id);return data.includes(userId)?true:false;};this.like=function(commentId){var isAnonymous=UserSubjectService.isInAnonymousRole();if(isAnonymous===true)
return;var id=UserSubjectService.getUserId();var userId=parseInt(id);CommentService.vote(commentId,1).then(function(success){_self.review.CountHelpful++;_self.review.Likes.push(userId);},function(error){console.log(error);});};this.dislike=function(commentId){var isAnonymous=UserSubjectService.isInAnonymousRole();if(isAnonymous===true)
return;var id=UserSubjectService.getUserId();var userId=parseInt(id);CommentService.vote(commentId,0).then(function(success){_self.review.CountNotHelpful++;_self.review.Dislikes.push(userId);},function(error){console.log(error);});};}]);;angular.module('tasteatlas').component('taItemLocationDesktop',{bindings:{region:'<'},templateUrl:'/content/scripts/app/components/shared/ta-item-location-desktop.html',controller:'taItemLocationDesktopController'}).controller("taItemLocationDesktopController",["MainHelper","constants",function(MainHelper,constants){var _self=this;this.constants=constants;this.image=undefined;this.$onInit=function(){if(_self.region.RegionId){_self.image=MainHelper.createImageFilter(_self.region.RegionId||_self.region.CountryId,200,200);}};}]);;angular.module('tasteatlas').component('taRatingControl',{bindings:{openRating:'&',isRated:'&',ratingData:'<',gray:'<',label:'<'},templateUrl:'/content/scripts/app/components/shared/ta-rating-control.html',controller:'taRatingControlController'}).controller("taRatingControlController",["CommentHelper","FoodTypesService","UserSubjectService",function(CommentHelper,FoodTypesService,UserSubjectService){var _self=this;this.isAnonymous=false;this.validScoreCount;this.viewScore;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.validScoreCount=_self.ratingData.ValidScoreCount||_self.ratingData.validScoreCount;_self.viewScore=CommentHelper.recalculateRatingForView(this.ratingData.Score||this.ratingData.commentRating);};this.getUserRating=function(){if(_self.ratingData&&_self.ratingData.comment&&_self.ratingData.comment.RatingScore){return CommentHelper.recalculateRatingForView(_self.ratingData.comment.RatingScore);}
return FoodTypesService.getFoodRatingScore(_self.ratingData);};}]);;angular.module('tasteatlas').component('taStarScoreLg',{bindings:{rating:'<'},templateUrl:'/content/scripts/app/components/shared/ta-star-score-lg.html',controller:'taStarScoreLgController'}).controller("taStarScoreLgController",['$scope','CommentHelper',function($scope,CommentHelper){var _self=this;this.starRange=CommentHelper.starRange;this.starClasses=CommentHelper.starClasses;this.checkRating=function checkRating(index){var rating=_self.rating;var temp=0;var isHalfStar=false;if(rating%2!==0){temp=rating+1;isHalfStar=true;}else{temp=rating;}
if(index<temp){return _self.starClasses[2];}else if(index===temp){if(isHalfStar){return _self.starClasses[1];}else{return _self.starClasses[2];}}else{return _self.starClasses[0];}};}]);;angular.module('tasteatlas').component('taStarScoreMobile',{bindings:{rating:'<',dividedRating:'<',},templateUrl:'/content/scripts/app/components/shared/ta-star-score-mobile.html',controller:'taEntityScoreMobileController'}).controller("taEntityScoreMobileController",['CommentHelper',function(CommentHelper){var _self=this;_self.starRange=CommentHelper.starRange;_self.starClasses=CommentHelper.starClasses;_self.emptyStarClass=_self.starClasses[0];_self.halfStarClass=_self.starClasses[1];_self.fullStarClass=_self.starClasses[2];_self.checkRating=function checkRating(index){var dividedIndex=index/2;var dividedRatingForCalculation=_self.dividedRating;if(_self.rating){dividedRatingForCalculation=(_self.rating/2).toFixed(1);}
var ratingWithoutDecimalPart=Math.floor(dividedRatingForCalculation);var ratingDecimalValue=(dividedRatingForCalculation%1).toFixed(1);if(ratingWithoutDecimalPart>=dividedIndex){return _self.fullStarClass}
if(ratingWithoutDecimalPart+1==dividedIndex){if(ratingDecimalValue>=0.6){return _self.fullStarClass}
else if(ratingDecimalValue>0){return _self.halfStarClass;}
else{return _self.emptyStarClass;}}
else{return _self.emptyStarClass;}}}]);;angular.module('tasteatlas').component('taStarVoteDesktop',{bindings:{rating:'<',ratingExists:'<',onRatingSelect:'&'},templateUrl:'/content/scripts/app/components/shared/ta-star-vote-desktop.html',controller:'taStarVoteDesktopController'}).controller("taStarVoteDesktopController",['CommentHelper','$scope','MiscellaneousHelper',function(CommentHelper,$scope,MiscellaneousHelper){var _self=this;this.viewText='';this.selectedIndex=0;this.isRatingSelected=false;this.$onInit=function(){if(_self.rating){var temp='#rating-';_self.selectedIndex=_self.rating;_self.isRatingSelected=true;if(_self.rating%2===0){temp=temp+_self.rating/2;angular.element(temp)[0].checked=true;}else{temp=temp+_self.rating/2*10;angular.element(temp)[0].checked=true;}}else{_self.rating=0;_self.selectedIndex=0;_self.isRatingSelected=false;}};this.starInfo=new MiscellaneousHelper.StarInfoDesktop().values;this.mouseEnter=function(value){if(value===0&&!_self.ratingExists){_self.viewText='';}
else{_self.viewText=_self.starInfo[value].description;}};this.onMouseLeaveRating=function(){_self.viewText='';};this.mouseLeave=function(value){_self.viewText=_self.starInfo[value].description;};this.vote=function(value){var info=_self.starInfo[value];_self.selectedIndex=value;_self.rating=info.value;_self.isRatingSelected=true;this.onRatingSelect({$event:{selectedRating:_self.rating}});};this.aboutToDelete=function(){return _self.rating===1&&_self.ratingExists;};$scope.$on(CommentHelper.ResetStarInfoEvent,function(){_self.rating=0;_self.isRatingSelected=false;_self.selectedIndex=0;_self.viewText='';});}]);;angular.module('tasteatlas').component('taStarVoteMobile',{bindings:{rating:'<',ratingExists:'<',onRatingSelect:'&'},templateUrl:'/content/scripts/app/components/shared/ta-star-vote-mobile.html',controller:'taStarVoteMobileController'}).controller("taStarVoteMobileController",['CommentHelper','$scope','MiscellaneousHelper',function(CommentHelper,$scope,MiscellaneousHelper){var _self=this;this.viewText=' ';this.halfStarText='TAP TO RATE';this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.starInfo=new MiscellaneousHelper.StarInfoMobile(this.starClasses).values;this.$onInit=function(){if(_self.rating){var seekPosition=0;if(_self.rating%2!==0){seekPosition=_self.rating+1;}else{seekPosition=_self.rating;}
var index=_self.starRange.indexOf(seekPosition);if(_self.rating%2===0){_self.starInfo[index].isTapped=true;}
if(_self.starInfo[index].isTapped===true){_self.rating=_self.starInfo[index].second;_self.viewText=_self.starInfo[index].firstDescription;_self.starInfo[index].currentClass=_self.starClasses[2];_self.starInfo[index].isTapped===false;_self.halfStarText='TAP AGAIN FOR HALF STAR';}else{_self.rating=_self.starInfo[index].first;_self.viewText=_self.starInfo[index].firstDescription;_self.starInfo[index].currentClass=_self.starClasses[1];_self.starInfo[index].isTapped===true;_self.halfStarText='TAP AGAIN FOR FULL STAR';}
for(var i=0;i<_self.starInfo.length;i++){if(i<index){_self.starInfo[i].currentClass=_self.starClasses[2];_self.starInfo[i].isTapped=false;}
if(i>index){_self.starInfo[i].currentClass=_self.starClasses[0];_self.starInfo[i].isTapped=false;}}}};$scope.$on(CommentHelper.ResetStarInfoEvent,function(){_self.starInfo=new MiscellaneousHelper.StarInfoMobile(_self.starClasses).values;_self.rating=0;_self.viewText=' ';_self.halfStarText='TAP TO RATE';});this.vote=function(vote){var index=_self.starRange.indexOf(vote);_self.starInfo[index].isTapped=!_self.starInfo[index].isTapped;if(_self.starInfo[index].isTapped===true){_self.rating=_self.starInfo[index].second;_self.viewText=_self.starInfo[index].secondDescription;_self.starInfo[index].currentClass=_self.starClasses[2];_self.starInfo[index].isTapped===false;_self.halfStarText='TAP AGAIN FOR HALF STAR';}else{_self.rating=_self.starInfo[index].first;_self.viewText=(vote===2&&!_self.ratingExists)?'':_self.starInfo[index].firstDescription;_self.starInfo[index].currentClass=_self.starClasses[1];_self.starInfo[index].isTapped===true;_self.halfStarText='TAP AGAIN FOR FULL STAR';}
for(var i=0;i<_self.starInfo.length;i++){if(i<index){_self.starInfo[i].currentClass=_self.starClasses[2];_self.starInfo[i].isTapped=false;}
if(i>index){_self.starInfo[i].currentClass=_self.starClasses[0];_self.starInfo[i].isTapped=false;}}
this.onRatingSelect({$event:{selectedRating:_self.rating}});};this.aboutToDelete=function(index){return _self.rating===1&&index===0;};}]);;angular.module('tasteatlas').component('taAddToList',{controller:'taAddToListController',bindings:{template:'@',selectedFood:'<',onClose:'&'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/add-to-list/ta-mobile-add-to-list.html','desktop':'/content/scripts/app/components/shared/add-to-list/ta-desktop-add-to-list.html'}
return templates[$attrs.template];}}).controller("taAddToListController",["constants","UserCacheService","ProfileService","UserSubjectService","ItemTypes",function(constants,UserCacheService,ProfileService,UserSubjectService,ItemTypes){var _self=this;this.constants=constants;this.listPosition=null;this.favoritedFood=null;this.favoritedFoodsList=[];this.me=null;this.addToListFlow='';this.foodImage=null;this.foodRegion=null;this.$onInit=function(){_self.selectedFoodEntityId=_self.selectedFood.Id||_self.selectedFood.RecipeVariationId||_self.selectedFood.EntityId;_self.favoritedFoodsList=getFoodsList();_self.me=UserSubjectService.getUser();_self.addToListFlow='selection';_self.foodImage=_self.selectedFood.Image||_self.selectedFood.PreviewImage;if((_self.selectedFood.RegionName||_self.selectedFood.Region!=null)||(_self.selectedFood.CountryName||_self.selectedFood.Region!=null)){_self.foodRegion={regionName:_self.selectedFood.RegionName||_self.selectedFood.Region.RegionName,countryName:_self.selectedFood.CountryName||_self.selectedFood.Region.CountryName}}else{_self.foodRegion=null;}
if(_self.selectedFood.EntityType===ItemTypes.Dish){_self.favoritedFood=UserCacheService.getFavoriteDish(_self.selectedFoodEntityId);}
else if(_self.selectedFood.EntityType===ItemTypes.Ingredient){_self.favoritedFood=UserCacheService.getFavoriteIngredient(_self.selectedFoodEntityId);}
else{_self.favoritedFood=UserCacheService.getFavoriteRecipe(_self.selectedFoodEntityId);}
if(_self.favoritedFood){_self.listPosition=_self.favoritedFood.Order;}
else{_self.listPosition=_self.favoritedFoodsList.length+1;}};function getFoodsList(){var list=[];if(_self.selectedFood.EntityType===ItemTypes.RecipeVariation){list=UserCacheService.getFavoriteRecipes();}
else{var favoritedDishes=UserCacheService.getFavoriteDishes();var favoritedIngredients=UserCacheService.getFavoriteIngredients();list=list.concat(favoritedDishes).concat(favoritedIngredients);}
return list;}
function refreshData(){return UserCacheService.refreshMyLists().then(function(){_self.favoritedFoodsList=getFoodsList();});}
this.addToList=function(type){if(!_self.listPosition||(type==='change'&&_self.favoritedFoodsList.length===1)){return;}
return ProfileService.AddOrUpdateFavorite(_self.selectedFoodEntityId,_self.selectedFood.EntityType,_self.listPosition).then(function(){var addedMessage='Added to favorite '+(_self.selectedFood.EntityType===ItemTypes.RecipeVariation?'recipes':'foods');_self.successText=type==='add'?addedMessage:'Position changed';_self.addToListFlow='post-action';refreshData();});};this.removeFromList=function(){return ProfileService.RemoveFavorite(_self.selectedFoodEntityId,_self.selectedFood.EntityType).then(function(){_self.successText='Removed from favorite '+(_self.selectedFood.EntityType===ItemTypes.RecipeVariation?'recipes':'foods');_self.addToListFlow='post-action';refreshData();});};}]);;angular.module('tasteatlas').component('taAdditionalRegions',{bindings:{text:'@',additionalRegions:'<',template:'@'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/additional-regions/ta-additional-regions-mobile.html','desktop':'/content/scripts/app/components/shared/additional-regions/ta-additional-regions-desktop.html'};return templates[$attrs.template];},controller:'ta-additional-regions-mobile-controller'}).controller("ta-additional-regions-mobile-controller",["constants","MainHelper",function(constants,MainHelper){var _self=this;this.constants=constants;this.regionsImageData=[];this.isOpen=false;this.showMoreRegions=function(){for(var i=0;i<_self.additionalRegions.length;i++){_self.regionsImageData.push(MainHelper.createImageFilter(_self.additionalRegions[i].RegionId||_self.additionalRegions[i].CountryId,50,50));}
_self.isOpen=true;};this.hideMoreRegions=function(){_self.regionsImageData=[];_self.isOpen=false;};}]);;angular.module('tasteatlas').component('taBadgeSsr',{bindings:{badges:'<',template:'@',platform:'@'},templateUrl:function($element,$attrs){var templates={'badge':'/content/scripts/app/components/shared/badge-ssr/ta-badge-ssr.html',};return templates[$attrs.template];},controller:'badge-controller-ssr'}).controller('badge-controller-ssr',['RatingCardService',function(RatingCardService){this.getBadgeExpanded=RatingCardService.getBadgeExpanded;this.$onInit=function(){};}]);;angular.module('tasteatlas').component('taExploreMoreButton',{bindings:{items:'<',buttonClass:'<',isButtonLoading:'<',onViewMore:'&'},templateUrl:'/content/scripts/app/components/shared/buttons/ta-explore-more-button.html',controller:'taExploreMoreButtonController'}).controller("taExploreMoreButtonController",['$scope',function($scope){var _self=this;this.$onInit=function(){if(!_self.buttonClass||_self.buttonClass===undefined)
_self.buttonClass='btn btn--black-border btn--noborder';};this.viewMore=function(){_self.onViewMore();};}]);;angular.module('tasteatlas').component('taViewMoreButton',{bindings:{items:'<',buttonClass:'<',isButtonLoading:'<',nextPageSize:'<',onViewMore:'&'},templateUrl:'/content/scripts/app/components/shared/buttons/ta-view-more-button.html',controller:'taViewMoreButtonController'}).controller("taViewMoreButtonController",['$scope',function($scope){var _self=this;this.$onInit=function(){if(!_self.buttonClass||_self.buttonClass===undefined)
_self.buttonClass='btn btn--black-border btn--noborder';};this.viewMore=function(){_self.onViewMore();};this.showItemNumber=function(){var totalNumber=_self.items.Count-_self.items.Data.length;if(totalNumber>=_self.items.PageSize){return _self.nextPageSize;}else{return totalNumber;}};}]);;angular.module('tasteatlas').component('taCollectionCommentProcessDesktop',{templateUrl:'/content/scripts/app/components/shared/comments/ta-collection-comment-process-desktop.html',controllerAs:'$ctrl',controller:'taCollectionCommentProcessDesktopController',bindings:{item:'<',details:'<',onRatingUpdate:'&'}}).controller("taCollectionCommentProcessDesktopController",['CommentService','UserSubjectService','CommentHelper','$scope','DishService','IngredientService','EventService','$timeout','EntityTypes','RecipeService','$rootScope',function(CommentService,UserSubjectService,CommentHelper,$scope,DishService,IngredientService,EventService,$timeout,EntityTypes,RecipeService,$rootScope){var _self=this;this.entityType="";this.entityTypes=EntityTypes;this.Regular='Regular';this.Vote='Vote';this.Voted='Voted';this.VotedIngredient='VotedIngredient';this.Thanks='Thanks';this.Restaurant='Restaurant';this.Login='Login';this.steps=CommentHelper.steps;this.current="";this.isAnonymous=true;this.isApproved=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.isCommentValid=false;this.isRateValid=false;this.commentStage=null;this.submitting=false;this.uploadPercentageCompleted=0;this.isValid=false;this.isError=false;this.error='';this.selectedRating=null;this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.viewRating=0;this.data={entityId:null,entityId2:null,entityType:null,rating:0,content:null,photos:[]};this.userCommentStatus={};function getUserCommentFetch(id){if(_self.details.EntityType===_self.entityTypes.DISH){return DishService.getUserDishComment(id);}
if(_self.details.EntityType===_self.entityTypes.INGREDIENT){return IngredientService.getUserIngredientComment(id);}
if(_self.details.EntityType===_self.entityTypes.EVENT){return EventService.GetEventUserComment(id);}
if(_self.details.EntityType===_self.entityTypes.RECIPE){return RecipeService.getUserReview(id);}}
this.$onInit=function(){getUserCommentFetch(_self.details.Id).then(function(comment){_self.userCommentStatus={dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating.Score,userRating:CommentHelper.recalculateRatingForView(comment.RatingScore),comment:comment.data};_self.data.entityId=_self.details.Id;_self.data.entityType=_self.details.EntityType;_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.isApproved=_self.details.Rating.IsApproved;_self.current=_self.isAnonymous?_self.Login:_self.Vote;if(_self.userCommentStatus.comment!==null){_self.data.rating=_self.userCommentStatus.comment.RatingScore;_self.data.content=_self.userCommentStatus.comment.Content;if(_self.userCommentStatus.comment.Images){_self.data.photos=_self.userCommentStatus.comment.Images.map(function(item){return{url:item,isUploaded:true};});}
_self.isRateValid=true;}});};this.onVoteChange=CommentHelper.onVoteChange;this.updateComment=function(){return CommentHelper.updateComment.call(_self,function(response){var comment=response.data;_self.commentId=comment.CommentId;_self.onRatingUpdate({rating:_self.data.rating});_self.resetDataToDefaults();if(_self.details.EntityType===_self.entityTypes.DISH){_self.current=_self.Voted;}
else if(_self.details.EntityType===_self.entityTypes.INGREDIENT){_self.current=_self.VotedIngredient;}
else _self.current=_self.Thanks;});};this.submit=function(){var successCallback=function(response){var comment=response.data;_self.commentId=comment.CommentId;_self.onRatingUpdate({rating:_self.data.rating});_self.resetDataToDefaults();if(_self.details.EntityType===_self.entityTypes.DISH){_self.current=_self.Voted;}
else if(_self.details.EntityType===_self.entityTypes.INGREDIENT){_self.current=_self.VotedIngredient;}
else _self.current=_self.Thanks;};var errorCallback=function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);_self.resetDataToDefaults();};$timeout(function(){return CommentHelper.submit.call(_self,successCallback,errorCallback);});};this.deleteComment=function(){if(_self.submitting&&!_self.isRateValid){return;}
_self.submitting=true;return CommentService.deleteComment(_self.userCommentStatus.comment.CommentId).then(function(){_self.onRatingUpdate({rating:_self.data.rating});_self.resetDataToDefaults();_self.current=_self.Thanks;})};this.resetDataToDefaults=CommentHelper.resetDataToDefaults;this.closeModal=CommentHelper.closeModal;this.exit=CommentHelper.exit;this.yes=CommentHelper.yes;this.onRegularClick=CommentHelper.onRegularClick;this.determineRedirect=CommentHelper.determineRedirect;_self.onCloseCommentProcess=function(){_self.details.isRatingOpen=false;};$scope.resetErrorOnChange=function(){if(_self.isError){_self.error='';_self.isError=false;}};}]);;angular.module('tasteatlas').component('taCollectionRatingDesktop',{bindings:{item:'<',source:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-collection-rating-desktop.html',controller:'taCollectionRatingDesktopController'}).controller("taCollectionRatingDesktopController",['constants','RatingSharedService','CommentHelper',function(constants,RatingSharedService,CommentHelper){var _self=this;this.constants=constants;this.isAnonymous=true;this.rating=0;this.dividedScore=0;this.viewRating="";this.isLoading=false;this.temporaryCommentId=null;this.commentId;this.comment;this.UserData;this.me;this.$onInit=RatingSharedService.onInit;this.openLogin=RatingSharedService.openLogin;this.toggleRatingOpen=RatingSharedService.toggleRatingOpen;this.updateRating=function(rating){sendGaEvent();_self.viewRating=rating/2;};function sendGaEvent(){var source=_self.source||'other';ga('send','event','rating',source+'-rated','');}}]);;angular.module('tasteatlas').component('taCommentButtonAlt',{bindings:{details:'<'},transclude:{comment:'?transcludeCommentProcess'},templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-button-alt.html',controller:'taCommentButtonAltController'}).controller("taCommentButtonAltController",['UserSubjectService','CommentHelper','UserCommentStatusService','$scope',function(UserSubjectService,CommentHelper,UserCommentStatusService,$scope){var _self=this;this.userCommentStatus={};this.IsCommented=false;this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.viewRating=0;this.data={entityId:'',entityId2:'',entityType:'',rating:'',content:'',photos:[]};this.updateVote=function(vote){_self.data.rating=vote;_self.viewRating=CommentHelper.recalculateRatingForView(vote);};this.$onInit=function(){UserCommentStatusService.subscribe(_commentButtonObserver);UserSubjectService.subscribe(_userCommentButtonAltObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.isAnonymous=UserSubjectService.isInAnonymousRole();};var _commentButtonObserver=function(data){_self.userCommentStatus=data;};var _userCommentButtonAltObserver=function(options){_self.isAnonymous=UserSubjectService.isInAnonymousRole();if(_self.isAnonymous)
_self.current=_self.Regular;};this.startCommentProcess=function(){_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};$scope.$on('$destroy',function(){UserCommentStatusService.unsubscribe(_commentButtonObserver);UserSubjectService.unsubscribe(_userCommentButtonAltObserver);});}]);;angular.module('tasteatlas').component('taCommentButton',{bindings:{details:'<',includeRatingControl:'<'},transclude:true,templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-button.html',controller:'taCommentButtonController'}).controller("taCommentButtonController",['UserSubjectService','constants','CommentHelper','UserCommentStatusService','LoginService',function(UserSubjectService,constants,CommentHelper,UserCommentStatusService,LoginService){var _self=this;this.constants=constants;this.isCommentProcess=false;this.userCommentStatus={};this.me={};this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.isAnonymous;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.me=UserSubjectService.getUser();};this.startCommentProcess=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};function _commentButtonObserver(data){_self.userCommentStatus=data;}}]);;angular.module('tasteatlas').component('taCommentLabel',{bindings:{userCommentStatus:'<'},transclude:true,templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-label.html',controller:'taCommentLabelController'}).controller("taCommentLabelController",[function(){var _self=this;this.isNumber=function(rating){return angular.isNumber(rating);};}]);;angular.module('tasteatlas').component('taCommentPhoto',{bindings:{data:'<',isValidPhotoNumber:'='},templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-photo.html',controller:'taCommentPhotoController'}).controller("taCommentPhotoController",['FilePickerService','$scope','TokenFactory','$rootScope',function(FilePickerService,$scope,TokenFactory,$rootScope){var _self=this;this.clickRemovePhoto=function(event,photo){event.stopPropagation();_self.data.photos=_self.data.photos.filter(function(val){return val!==photo;});if(_self.data.photos.length<=5){_self.isValidPhotoNumber=true;$scope.resetErrorOnChangeInfo();$scope.resetErrorOnChangeInfoMobile();$scope.resetErrorOnChangeComment();$scope.resetErrorOnChangeCommentMobile();$scope.resetErrorOnChangeCommentProcess();}};this.clickAddPhotos=function(event){$scope.resetErrorOnChangeInfo();$scope.resetErrorOnChangeInfoMobile();$scope.resetErrorOnChangeComment();$scope.resetErrorOnChangeCommentMobile();$scope.resetErrorOnChangeCommentProcess();if(_self.data.photos.length>=5)
return;TokenFactory.refreshIfSoonToExpire().then(function(){FilePickerService.triggerFilePicker(event);});};this.onFilePickerSelect=function(files){if(!files||!files.length)
return;[].forEach.call(files,readAndPreviewFile);};function readAndPreviewFile(file){if(!file)
return;FilePickerService.readAsDataUrl(file,$scope).then(function(result){_self.data.photos=_self.data.photos.concat(result);if(_self.data.photos.length>5)
_self.isValidPhotoNumber=false;else
_self.isValidPhotoNumber=true;}).catch(function(err){console.log(err);});}
$scope.resetErrorOnChangeInfo=function(){$rootScope.$emit("resetErrorOnChangeInfo",{});}
$scope.resetErrorOnChangeInfoMobile=function(){$rootScope.$emit("resetErrorOnChangeInfoMobile",{});}
$scope.resetErrorOnChangeComment=function(){$rootScope.$emit("resetErrorOnChangeComment",{});}
$scope.resetErrorOnChangeCommentMobile=function(){$rootScope.$emit("resetErrorOnChangeCommentMobile",{});}
$scope.resetErrorOnChangeCommentProcess=function(){$rootScope.$emit("resetErrorOnChangeCommentProcess",{});}}]);;angular.module('tasteatlas').component('taCommentProcessMobile',{templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-process-mobile.html',controllerAs:'$ctrl',transclude:true,controller:'taCommentProcessMobileController',bindings:{details:'<',ratingCallback:'&'}}).controller("taCommentProcessMobileController",['CommentService','UserSubjectService','CommentHelper','$scope','$q','GlobalStatusService','UserCommentStatusService','$timeout','$rootScope',function(CommentService,UserSubjectService,CommentHelper,$scope,$q,GlobalStatusService,UserCommentStatusService,$timeout,$rootScope){$scope.globalStatus=GlobalStatusService;var _self=this;this.mainPageType=$scope.globalStatus.mainPageType;this.Dish='DISH';this.Ingredient='INGREDIENT';this.Regular='Regular';this.Vote='Vote';this.Voted='Voted';this.VotedIngredient='VotedIngredient';this.Thanks='Thanks';this.Restaurant='Restaurant';this.Login='Login';this.steps=CommentHelper.steps;this.current=_self.Login;this.isAnonymous=true;this.isApproved=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.isCommentValid=false;this.isRateValid=false;this.commentStage=null;this.submitting=false;this.uploadPercentageCompleted=0;this.isValid=false;this.isError=false;this.error='';this.selectedRating=null;this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.viewRating=0;this.data={entityId:null,entityId2:null,entityType:null,rating:0,content:null,photos:[]};this.userCommentStatus={};this.$onInit=function(){UserCommentStatusService.subscribe(_commentProcessObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.data.entityId=_self.details.Id||_self.details.EntityId;_self.data.entityType=_self.details.EntityType;_self.mainPageType=$scope.globalStatus.mainPageType;_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.isApproved=_self.details.Rating.IsApproved;_self.current=_self.isAnonymous?_self.Login:_self.Vote;if(_self.userCommentStatus.comment!==null){_self.data.rating=_self.userCommentStatus.comment.RatingScore;_self.data.content=_self.userCommentStatus.comment.Content;if(_self.userCommentStatus.comment.Images){_self.data.photos=_self.userCommentStatus.comment.Images.map(function(item){return{url:item,isUploaded:true};});}
_self.isRateValid=true;}};this.onVoteChange=function(vote){removeError();if(vote===undefined)
return;_self.data.rating=vote;_self.isRateValid=CommentHelper.isRateValid(_self.data);_self.commentStage=CommentHelper.determineCommentStage(_self.isCommentValid,_self.isRateValid);};this.updateComment=function(){var photos=_self.data.photos||[];var photosToUpload=photos.filter(function(photo){return photo.isUploaded!==true;});var alreadyUploaded=photos.filter(function(photo){return photo.isUploaded===true;});_self.submitting=true;uploadPhotos({photos:photosToUpload}).then(function(uploadedPhotos){var uploaded=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl,isUploaded:false};});var updatePhotos=alreadyUploaded.concat(uploaded);return CommentService.updateContent(_self.userCommentStatus.comment.CommentId,{content:_self.data.content,rating:_self.data.rating,Photos:updatePhotos});}).then(function(response){var comment=response.data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating.Score,userRating:CommentHelper.recalculateRatingForView(comment.RatingScore),isCommentProcess:true,comment:comment,wantsToTry:_self.userCommentStatus.wantsToTry,doesntWantToTry:_self.userCommentStatus.doesntWantToTry});if(_self.ratingCallback){_self.ratingCallback({comment:comment});}
ga('send','event','rating','other-rated','');resetDataToDefaults();if(_self.mainPageType===_self.Dish){_self.current=_self.Voted;}
else if(_self.mainPageType===_self.Ingredient){_self.current=_self.VotedIngredient;}
else _self.current=_self.Thanks;});};this.submit=function(){$timeout(function(){if(_self.submitting&&!_self.isRateValid){return;}
_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment(photos);}).then(function(response){var comment=response.data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating,userRating:CommentHelper.recalculateRatingForView(comment.RatingScore),isCommentProcess:true,comment:comment,wantsToTry:_self.userCommentStatus.wantsToTry,doesntWantToTry:_self.userCommentStatus.doesntWantToTry});if(_self.ratingCallback){_self.ratingCallback({comment:comment});}
ga('send','event','rating','other-rated','');resetDataToDefaults();if(_self.mainPageType===_self.Dish){_self.current=_self.Voted;}
else if(_self.mainPageType===_self.Ingredient){_self.current=_self.VotedIngredient;}
else{_self.current=_self.Thanks;}}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetDataToDefaults();});});};this.deleteComment=function(){if(_self.submitting&&!_self.isRateValid){return;}
_self.submitting=true;return CommentService.deleteComment(_self.userCommentStatus.comment.CommentId).then(function(){UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating,userRating:CommentHelper.recalculateRatingForView(0),isCommentProcess:true,comment:null,wantsToTry:_self.userCommentStatus.wantsToTry,doesntWantToTry:_self.userCommentStatus.doesntWantToTry});if(_self.ratingCallback){_self.ratingCallback({comment:null});}
_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);resetDataToDefaults();});};function resetDataToDefaults(){if(_self.userCommentStatus.isCommented===true)
_self.isThanksVisible=true;_self.submitting=false;_self.isValid=false;_self.data.rating='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){_self.uploadPercentageCompleted=(event.loaded/event.total)*100;}
function postComment(uploadedPhotos){var rating=_self.data.rating;var photos=uploadedPhotos||[];var content=_self.data.content;var entityType=_self.data.entityType;var entityId=_self.data.entityId;var entityId2=_self.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
this.closeModal=function(){var index=_self.current;resetDataToDefaults();if(index===_self.Login){_self.current=_self.Login;_self.onCloseCommentProcess();}else if(index===_self.Vote){_self.current=_self.Login;_self.onCloseCommentProcess();}else if(index===_self.Voted){_self.current=_self.Voted;_self.onCloseCommentProcess();}else if(index===_self.VotedIngredient){_self.current=_self.VotedIngredient;_self.onCloseCommentProcess();}else if(index===_self.Thanks){_self.current=_self.Voted;_self.onCloseCommentProcess();}else if(index===_self.Restaurant){_self.current=_self.Voted;_self.onCloseCommentProcess();}};this.exit=function(){_self.onCloseCommentProcess();};this.yes=function(){_self.current=_self.Restaurant;};this.onRegularClick=function(){var isAnonymous=UserSubjectService.isInAnonymousRole();_self.current=isAnonymous?_self.Login:_self.Vote;};this.determineRedirect=function(){if(_self.mainPageType===_self.Dish)_self.current=_self.Voted;else _self.current=_self.Thanks;};this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};_self.onCloseCommentProcess=function(){_self.userCommentStatus.isCommentProcess=false;UserCommentStatusService.dispatch(_self.userCommentStatus);};var _commentProcessObserver=function(data){_self.userCommentStatus=data;};$scope.resetErrorOnChangeMobile=function(){if(_self.isError){_self.error='';_self.isError=false;}};$rootScope.$on("resetErrorOnChangeCommentMobile",function(){$scope.resetErrorOnChangeMobile();});}]);;angular.module('tasteatlas').component('taCommentProcess',{templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-process.html',controllerAs:'$ctrl',controller:'taCommentProcessController',bindings:{details:'<',ratingCallback:'&'}}).controller("taCommentProcessController",['CommentService','UserSubjectService','CommentHelper','$scope','$q','FilePickerService','GlobalStatusService','UserCommentStatusService','$timeout','$rootScope',function(CommentService,UserSubjectService,CommentHelper,$scope,$q,FilePickerService,GlobalStatusService,UserCommentStatusService,$timeout,$rootScope){$scope.globalStatus=GlobalStatusService;var _self=this;this.mainPageType=$scope.globalStatus.mainPageType;this.Dish='DISH';this.Ingredient='INGREDIENT';this.Regular='Regular';this.Vote='Vote';this.Voted='Voted';this.VotedIngredient='VotedIngredient';this.Thanks='Thanks';this.Restaurant='Restaurant';this.Login='Login';this.steps=CommentHelper.steps;this.current=_self.Login;this.isAnonymous=true;this.isApproved=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.isCommentValid=false;this.isRateValid=false;this.commentStage=null;this.submitting=false;this.uploadPercentageCompleted=0;this.isValid=false;this.isError=false;this.error='';this.selectedRating=null;this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.viewRating=0;this.data={entityId:null,entityId2:null,entityType:null,rating:0,content:null,photos:[]};this.userCommentStatus={};this.$onInit=function(){UserCommentStatusService.subscribe(_commentProcessObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.data.entityId=_self.details.Id||_self.details.EntityId;_self.data.entityType=_self.details.EntityType;_self.mainPageType=$scope.globalStatus.mainPageType;_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.isApproved=_self.details.Rating.IsApproved;_self.current=_self.isAnonymous?_self.Login:_self.Vote;if(_self.userCommentStatus.comment!==null){_self.data.rating=_self.userCommentStatus.comment.RatingScore;_self.data.content=_self.userCommentStatus.comment.Content;if(_self.userCommentStatus.comment.Images){_self.data.photos=_self.userCommentStatus.comment.Images.map(function(item){return{url:item,isUploaded:true};});}
_self.isRateValid=true;}};this.onVoteChange=CommentHelper.onVoteChange;this.updateComment=function(){return CommentHelper.updateComment.call(_self,function(response){var comment=response.data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating.Score,isCommentProcess:true,comment:comment,userRating:CommentHelper.recalculateRatingForView(comment.RatingScore),});if(_self.ratingCallback){_self.ratingCallback();}
ga('send','event','rating','other-rated','');_self.resetDataToDefaults();if(_self.mainPageType===_self.Dish){_self.current=_self.Voted;}
else if(_self.mainPageType===_self.Ingredient){_self.current=_self.VotedIngredient;}
else _self.current=_self.Thanks;});};this.submit=function(){var successCallback=function(response){var comment=response.data;UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating.Score,isCommentProcess:true,comment:comment,userRating:CommentHelper.recalculateRatingForView(comment.RatingScore),});if(_self.ratingCallback){_self.ratingCallback();}
ga('send','event','rating','other-rated','');_self.resetDataToDefaults();if(_self.mainPageType===_self.Dish){_self.current=_self.Voted;}
else if(_self.mainPageType===_self.Ingredient){_self.current=_self.VotedIngredient;}
else _self.current=_self.Thanks;};var errorCallback=function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);_self.resetDataToDefaults();};$timeout(function(){return CommentHelper.submit.call(_self,successCallback,errorCallback);});};this.deleteComment=function(){if(_self.submitting&&!_self.isRateValid){return;}
_self.submitting=true;return CommentService.deleteComment(_self.userCommentStatus.comment.CommentId).then(function(){UserCommentStatusService.dispatch({dividedScore:_self.details.Rating.DividedScore,validScoreCount:_self.details.Rating.ValidScoreCount,scoreCount:_self.details.Rating.ScoreCount,commentRating:_self.details.Rating,userRating:CommentHelper.recalculateRatingForView(0),isCommentProcess:true,comment:null});if(_self.ratingCallback){_self.ratingCallback();}
_self.current=_self.Thanks;}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
$scope.$broadcast(CommentHelper.ResetStarInfoEvent);_self.submitting=false;resetDataToDefaults();});};this.resetDataToDefaults=CommentHelper.resetDataToDefaults;this.closeModal=CommentHelper.closeModal;this.resetDataToDefaults=CommentHelper.resetDataToDefaults;this.closeModal=CommentHelper.closeModal;this.exit=CommentHelper.exit;this.yes=CommentHelper.yes;this.onRegularClick=CommentHelper.onRegularClick;this.determineRedirect=CommentHelper.determineRedirect;_self.onCloseCommentProcess=function(){_self.userCommentStatus.isCommentProcess=false;UserCommentStatusService.dispatch(_self.userCommentStatus);};var _commentProcessObserver=function(data){_self.userCommentStatus=data;};$scope.resetErrorOnChange=function(){if(_self.isError){_self.error='';_self.isError=false;}};$rootScope.$on("resetErrorOnChangeComment",function(){$scope.resetErrorOnChange();});}]);;angular.module('tasteatlas').component('taCommentSummary',{templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/comments/ta-comment-summary-mobile.html','desktop':'/content/scripts/app/components/shared/comments/ta-comment-summary-desktop.html'};return templates[$attrs.template];},controller:'taCommentSummaryController',bindings:{template:'@',foodDetails:'<',closeAction:'&'}}).controller("taCommentSummaryController",["RegionLevels","ProfileService","RatingCardService","TopListArticleSharedService","TopListArticleListRanges",function(RegionLevels,ProfileService,RatingCardService,TopListArticleSharedService,TopListArticleListRanges){var _self=this;this.TopListArticleListRanges=TopListArticleListRanges;this.triedFood;this.foodType="";this.region;this.country;this.categoryPlural;this.categoryUrlLink;this.toplistInfo;this.progressClasses={region:'',group:'',regionInGroup:''};this.toplistLabel;this.viewListLabel;this.regionUrlLink;this.isLoaded=false;this.$onInit=function(){_self.entityType=_self.foodDetails.EntityType||_self.foodDetails.entityType;_self.foodId=_self.foodDetails.EntityId||_self.foodDetails.Id||_self.foodDetails.id;_self.foodName=_self.foodDetails.Name||_self.foodDetails.name;_self.triedFood=getTriedFood();};function getTriedFood(){return ProfileService.getTriedFoodById(_self.entityType,_self.foodId).then(function(success){if(!success.data){_self.triedFood=null;return;}
_self.triedFood={region:success.data.TriedInRegion,group:success.data.TriedInGroup,regionInGroup:success.data.TriedInRegionAndGroup};_self.progressClasses.region="progress-"+_self.triedFood.region.PercentageTried;_self.progressClasses.group="progress-"+_self.triedFood.group.PercentageTried;_self.progressClasses.regionInGroup="progress-"+_self.triedFood.regionInGroup.PercentageTried;_self.toplistInfo=success.data.BestRatedListInfo;_self.region=success.data.Region;_self.country=success.data.Country;_self.categoryPlural=success.data.CategoryPlural;_self.categoryUrlLink=success.data.CategoryUrlLink;_self.foodType=RatingCardService.getFoodType(success.data.IsBeverage,success.data.EntityType);_self.toplistLabel=getToplistLabel();_self.viewListLabel=getViewListLabel();_self.regionUrlLink=getRegionUrlLink();}).catch(function(error){console.log(error);}).finally(function(){_self.isLoaded=true;});}
this.getOrigin=function(){var regionRegionLevel=_self.region.RegionLevel;var countryRegionLevel=_self.country.RegionLevel;if(regionRegionLevel<RegionLevels.Country&&(countryRegionLevel===RegionLevels.Country||countryRegionLevel===RegionLevels.CountryGroup)){return _self.country.Adjective;}
return _self.region.Adjective||_self.country.Adjective||"";};function getRegionUrlLink(){var regionRegionLevel=_self.region.RegionLevel;var countryRegionLevel=_self.country.RegionLevel;if(regionRegionLevel<RegionLevels.Country&&countryRegionLevel>=RegionLevels.Country){return _self.country.UrlLink;}
return _self.region.UrlLink;};function getToplistLabel(){if(!_self.toplistInfo){return "";}
var firstPart=_self.foodName+" is now ";var ranking=_self.toplistInfo.Place===1?"the ":"#"+_self.toplistInfo.Place;var toplistType=" "+TopListArticleSharedService.getTopListType(_self.toplistInfo.TopListArticleType);var foodType=_self.toplistInfo.CategoryName.toLowerCase()+" in the world";return{top:firstPart+ranking+toplistType,bottom:foodType};};function getViewListLabel(){if(!_self.toplistInfo){return "";}
if(_self.toplistInfo.CurrentItemCount&&_self.toplistInfo.CurrentItemCount>10){return "VIEW TOP "+_self.toplistInfo.CurrentItemCount;}
else{var listType=TopListArticleSharedService.getTopListType(_self.toplistInfo.TopListArticleType);var listRange=TopListArticleSharedService.findTopListCount.call(_self,_self.toplistInfo);if(listType==="best rated"){return "VIEW "+listRange;}
return "VIEW LIST";}};this.navigateToRateMore=function($event,urlLink){var currentPath=window.location.pathname.toLowerCase();var linkPath='/'+urlLink.toLowerCase();if(currentPath===linkPath){$event.preventDefault();_self.closeAction();}};}]);;angular.module('tasteatlas').component('taCommentThanks',{bindings:{isThanksVisible:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-comment-thanks.html',controller:'taCommentThanksController'}).controller("taCommentThanksController",['CommentHelper',function(CommentHelper){var _self=this;}]);;angular.module('tasteatlas').component('taCommentsList',{bindings:{comments:'<',template:'@',commentsType:'@',isMobile:'<',entityId:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/comments/ta-comments-list-mobile.html','desktop':'/content/scripts/app/components/shared/comments/ta-comments-list-desktop.html','redesign':'/content/scripts/app/components/shared/comments/ta-comments-list-redesign.html'};return templates[$attrs.template];},controller:'taCommentsListController'}).controller("taCommentsListController",['$scope','$timeout','constants','CommentService','UserSubjectService','UserCommentStatusService','LoginService','EntityTypes',function($scope,$timeout,constants,CommentService,UserSubjectService,UserCommentStatusService,LoginService,EntityTypes){var _self=this;this.constants=constants;this.userCommentStatus;this.userComment;this.isAnonymous=true;this.isLogged=false;this.articleComments;$scope.articleCommentStatus=false;this.preventMultipleSubmitBoolean=false;this.numberOfDisplayedItems=5;this.startDisplayedItems=5;this.showLoadMoreBtn=true;this.loadMoreRestaurantsData=false;this.infoTxt=angular.element(document.querySelector('#info-txt'));this.isDropdownOpen=false;this.dropdownIndex;this.data={entityId:'',entityType:'',content:''};function _commentButtonObserver(data){_self.userCommentStatus=data;_self.userComment=_self.userCommentStatus.comment;}
this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.userComment=_self.userCommentStatus.comment;UserCommentStatusService.subscribe(_commentButtonObserver);_self.getComments(_self.commentsType);};$scope.preventMultipleSubmit=function(){_self.preventMultipleSubmitBoolean=true;$timeout(function(){_self.preventMultipleSubmitBoolean=false;},3000)}
this.getComments=function(type){const TEMPLATE_TYPES={'top-list':'getTopListArticleComments','article':'getArticleComments',}
const apiFunction=TEMPLATE_TYPES[type];if(apiFunction){CommentService[apiFunction](_self.entityId).then(function(data){_self.articleComments=data.data;}).finally(function(){if(_self.startDisplayedItems>=_self.articleComments.Count){_self.showLoadMoreBtn=false;}else{_self.showLoadMoreBtn=true;}});}}
this.articleCommentProcess=function(){if(UserSubjectService.isInAnonymousRole()==true){LoginService.updateState({isLoginProcess:true});return;}
const TEMPLATE_TYPES={'top-list':EntityTypes.TOP_LIST_ARTICLE,'article':EntityTypes.ARTICLE,}
_self.loadMoreRestaurantsData=true;_self.data.entityId=_self.entityId
_self.data.entityType=TEMPLATE_TYPES[_self.commentsType];CommentService.commentsPost(_self.data).then(function(data){$scope.articleCommentStatus=true;if(data.status>=200&&data.status<=299){_self.infoTxt.html('Thank you! Your comment will be visible after review.');}
else if(data.status<=400&&data.status>=599){_self.infoTxt.html('Sorry! An error occurred, please try again later.');}}).catch(function(error){console.log('Comments Post Error: '+JSON.stringify(error));if(error.data.ExceptionType=="MaximumNumberOfCommentsReached"){$scope.articleCommentStatus=true;$scope.commentForm.$setValidity('disabled',false);_self.infoTxt.html("You have reached the maximum number of comments.");}}).finally(function(){_self.data.content='';_self.loadMoreRestaurantsData=false;_self.getComments(_self.commentsType);$timeout(function(){$scope.articleCommentStatus=false;},3000)});}
this.loadMoreComments=function(){_self.startDisplayedItems=_self.startDisplayedItems+_self.numberOfDisplayedItems;_self.loadMoreRestaurantsData=true;const TEMPLATE_TYPES={'top-list':'loadMoreTopListArticleComments','article':'loadMoreArticleComments',}
const apiFunction=TEMPLATE_TYPES[_self.commentsType];if(apiFunction){CommentService[apiFunction](_self.entityId,_self.startDisplayedItems).then(function(data){_self.articleComments=data.data;}).catch(function(error){console.log('Error: '+JSON.stringify(error));}).finally(function(){_self.loadMoreRestaurantsData=false;if(_self.startDisplayedItems>=_self.articleComments.Count){_self.showLoadMoreBtn=false;}else{_self.showLoadMoreBtn=true;}});}}
this.toggleDropdownUserCommentsMenu=function(event,index){if(event){_self.isDropdownOpen=!_self.isDropdownOpen;_self.dropdownIndex=index;return}
if(event!==null){_self.isDropdownOpen=false;return}}
this.editUserComment=function(){}
this.deleteUserComment=function(){}
this.reportUserComment=function(){}
this.startCommentProcess=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};this.articleLoginTextArea=function(){if(UserSubjectService.isInAnonymousRole()==true){LoginService.updateState({isLoginProcess:true});return;}}}]);;angular.module('tasteatlas').component('taFoodMobileComments',{bindings:{details:'<',rating:'<',getReviews:'<',promises:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-food-mobile-comments.html',controller:'ta-food-mobile-comments-controller'}).controller("ta-food-mobile-comments-controller",["$q","UserSubjectService","UserCommentStatusService","PageStatusSubjectService","RatingSharedService","BotInterceptor","CommentHelper",function($q,UserSubjectService,UserCommentStatusService,PageStatusSubjectService,RatingSharedService,BotInterceptor,CommentHelper){var _self=this;this.reviews=[];this.user={};this.isAnonymous=true;this.userCommentStatus={};this.ratingCardActions=null;this.$onInit=function(){BotInterceptor.blockIndexing();UserCommentStatusService.subscribe(_foodCommentPageObserver);_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.ratingCardActions=RatingSharedService.getRatingCardActions(_self.details);_self.ratingCardActions.hideDetailedInformation=true;var promises=_self.promises;$q.all(promises).then(function(success){_self.comment=success[0].data;var rating=success[1].data;_self.reviews=success[2].data;UserCommentStatusService.dispatch({dividedScore:rating.DividedScore,validScoreCount:rating.ValidScoreCount,scoreCount:rating.ScoreCount,commentRating:rating.Score,userRating:_self.comment?CommentHelper.recalculateRatingForView(_self.comment.RatingScore):0,isCommentProcess:false,comment:_self.comment});_self.userCommentStatus=UserCommentStatusService.getCurrentState();PageStatusSubjectService.dispatch({isSectionLoaded:true});}).catch(function(error){console.log(error);});};this.isLoadingComments=false;this.loadMoreComments=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.isLoadingComments=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;_self.getReviews(_self.details.EntityId,{IsCritic:false,PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isLoadingComments=false;}).catch(function(error){_self.isLoadingComments=false;});};var _foodCommentPageObserver=function(data){_self.comment=data.comment;};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_foodCommentPageObserver);};}]);;angular.module('tasteatlas').component('taOpinionListDesktop',{bindings:{opinion:'<',opinions:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-opinion-list-desktop.html',controller:'taOpinionListDesktopController'}).controller("taOpinionListDesktopController",['UserSubjectService','constants',function(UserSubjectService,constants){var _self=this;this.constants=constants;this.isAnonymous=true;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();};}]);;angular.module('tasteatlas').component('taOpinionListMobile',{bindings:{opinions:'<',opinion:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-opinion-list-mobile.html',controller:'taOpinionListMobileController'}).controller("taOpinionListMobileController",['UserSubjectService','constants',function(UserSubjectService,constants){var _self=this;this.constants=constants;this.isAnonymous=true;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();};this.getTitle=function(){var count=_self.opinions.Count;var returnQuery='';if(_self.opinion)
count++;returnQuery=count+' comment';if(count>=2){returnQuery+='s';}
return returnQuery;};}]);;angular.module('tasteatlas').component('taReviewDesktopList',{bindings:{reviews:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-review-desktop-list.html',controller:'taReviewDesktopListController'}).controller("taReviewDesktopListController",['CommentHelper','$scope','MainHelper','constants',function(CommentHelper,$scope,MainHelper,constants){var _self=this;this.constants=constants;this.msnry=null;var msnryOptions=MainHelper.msnry_options;$scope.$on(MainHelper.INIT_MASONRY,function(){initMsnry();});this.$onInit=function(){initMsnry();};function initMsnry(){setTimeout(function(){var elem=document.querySelector('.grid');_self.msnry=new Masonry(elem,msnryOptions);},100);}}]);;angular.module('tasteatlas').component('taReviewList',{bindings:{reviews:'<'},templateUrl:'/content/scripts/app/components/shared/comments/ta-review-list.html',controller:'taReviewListController'}).controller("taReviewListController",['CommentHelper','$scope','constants',function(CommentHelper,$scope,constants){var _self=this;this.constants=constants;}]);;angular.module('tasteatlas').component('taEntityCategoriesDesktop',{templateUrl:'/content/scripts/app/components/shared/entity-categories/ta-entity-categories-desktop.html',controller:'taEntityCategoriesDesktopController',bindings:{categoryName:'<',categoryUrlLink:'<',additionalCategories:'<'}}).controller('taEntityCategoriesDesktopController',function(){var _self=this;this.$onInit=function(){};});;angular.module('tasteatlas').component('taEntityCategoriesMobile',{templateUrl:'/content/scripts/app/components/shared/entity-categories/ta-entity-categories-mobile.html',controller:'taEntityCategoriesMobileController',bindings:{categoryName:'<',categoryUrlLink:'<',additionalCategories:'<'}}).controller('taEntityCategoriesMobileController',function(){var _self=this;this.firstItems=[];this.remainingItems=[];this.showAll=false;this.$onInit=function(){_self.firstItems=_self.additionalCategories.slice(0,2);_self.remainingItems=_self.additionalCategories.slice(2);_self.showAll=_self.remainingItems.length?false:true;};this.isLastItem=function(index){if(index===_self.firstItems.length-1&&_self.remainingItems.length===0){return true;}
else if(index===_self.firstItems.length-1&&_self.remainingItems.length>0&&!_self.showAll){return true;}
return false;};this.showRemainingItems=function(){_self.showAll=true;};});;angular.module('tasteatlas').service('EventHelperService',[function(){var _self=this;this.getDateClass=function(date,nowClass,upcomingClass){if(date.IsNow){return nowClass;}
if(date.UpcomingInDays){return upcomingClass;}};this.getExactTime=function(date){return date.IsNow?"Now":_self.getEventTimeFromNow(date);};var averageNumberOfDays={week:7,month:30.417,year:365.25};this.timeLimits={months:3,weeks:4,days:1};this.getEventTimeFromNow=function(date){var days=date.UpcomingInDays;if(date.UpcomingInDays<0){days=averageNumberOfDays.year-Math.abs(date.UpcomingInDays);}
var weeks=Math.abs(days/averageNumberOfDays.week);var months=Math.abs(days/averageNumberOfDays.month);var result="";if(months>_self.timeLimits.months){result="IN "+Math.ceil(months)+" MONTHS";}
else if(weeks>_self.timeLimits.weeks){result="IN "+Math.ceil(weeks)+" WEEKS";}
else if(days<_self.timeLimits.days){result="TOMORROW";}
else{result="IN "+Math.ceil(days)+" DAYS";}
return result;};this.getEventLocationName=function(country,region){var name="";if(country){name=region+', '+country;}
else{name=region;}
return name;};this.getExactDisplayDate=function(event){if(event&&event.Date&&event.Date.DisplayDate){var displayDate=event.Date.DisplayDate;if(event.Date.StartDate===event.Date.EndDate&&event.Date.UpcomingInDays!==null){displayDate=event.Date.DisplayDate.split('-')[0].trim();}
return displayDate;}
else{return "";}};this.getNow=function(){return moment();};this.addSoonestLabel=function(events){var now=_self.getNow();angular.forEach(events.Data,function(event){var eventTime=moment(event.Date.StartDate);var diff=moment.duration(eventTime.diff(now)).asDays();if(diff>=0){event.days=diff;}
else{event.days=Infinity;}});var soonestDays=Math.min.apply(Math,events.Data.map(function(item){return item.days;}));var soonestEvent=events.Data.find(function(e){return e.days===soonestDays;});if(soonestEvent&&!soonestEvent.label){soonestEvent.label="Soonest";}};this.addNearestLabel=function(events){var nearestLocation=Math.min.apply(Math,events.Data.map(function(item){return item.Distance;}));var nearestEvent=events.Data.find(function(e){return e.Distance===nearestLocation;});if(nearestEvent&&!nearestEvent.label){nearestEvent.label="Nearest";}};this.addMostPopularLabel=function(events){var mostPopularScore=Math.max.apply(Math,events.Data.map(function(item){return item.Popularity;}));var mostPopularEvent=events.Data.find(function(e){return e.Popularity===mostPopularScore;});if(mostPopularEvent&&!mostPopularEvent.label){mostPopularEvent.label="Most popular";}};this.addtEventsLabel=function(events){if(events.Data&&events.Data.length>1){_self.addMostPopularLabel(events);_self.addSoonestLabel(events);_self.addNearestLabel(events);}
return events;};}]);;angular.module('tasteatlas').component('taEventCardDesktop',{bindings:{event:'<'},templateUrl:'/content/scripts/app/components/shared/events/ta-event-card-desktop.html',controller:'taEventCardDesktopController'}).controller("taEventCardDesktopController",["EventHelperService","constants","UserCacheService","RatingSharedService",function(EventHelperService,constants,UserCacheService,RatingSharedService){var _self=this;this.constants=constants;this.$onInit=function(){var item=_self.event;_self.event.details={Name:item.Name,Id:item.Id,EntityType:item.EntityType,Rating:{Score:item.ScoreObject.Score,ScoreCount:item.ScoreObject.ScoreCount,ValidScoreCount:item.ScoreObject.ValidScoreCount,DividedScore:item.ScoreObject.DividedScore,IsApproved:true},Score:item.ScoreObject.Score,ScoreCount:item.ScoreObject.ScoreCount,ValidScoreCount:item.ScoreObject.ValidScoreCount};};this.isEventRated=function(){return!!UserCacheService.getEventCommentById(_self.event.Id);};this.getDateClass=EventHelperService.getDateClass;this.getExactTime=EventHelperService.getExactTime;this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;this.tryOpenRating=RatingSharedService.tryOpenRating;}]);;angular.module('tasteatlas').component('taEventDesktop',{bindings:{event:'<',regionLevel:'<'},templateUrl:'/content/scripts/app/components/shared/events/ta-event-desktop.html',controller:'taEventDesktopController'}).controller("taEventDesktopController",["EventHelperService","RegionLevels","constants",function(EventHelperService,RegionLevels,constants){this.constants=constants;this.regionLevels=RegionLevels;this.getDateClass=EventHelperService.getDateClass;this.getExactTime=EventHelperService.getExactTime;this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;var randomNumberBetween1and4=Math.floor(Math.random()*4)+1;this.randomImageUrl="/content/layout/images/thumbnail-no-photo-"+randomNumberBetween1and4+".jpg";this.getEventLocationName=EventHelperService.getEventLocationName;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;}]);;angular.module('tasteatlas').component('taEventHorizontalMobile',{bindings:{event:'<',regionLevel:'<'},templateUrl:'/content/scripts/app/components/shared/events/ta-event-horizontal-mobile.html',controller:'taEventHorizontalMobileController'}).controller("taEventHorizontalMobileController",["EventHelperService","RegionLevels","constants","UserCacheService","RatingSharedService",function(EventHelperService,RegionLevels,constants,UserCacheService,RatingSharedService){var _self=this;this.$onInit=function(){_self.event.details={Id:_self.event.Id,EntityType:_self.event.EntityType,Score:_self.event.ScoreObject.Score,ScoreCount:_self.event.ScoreObject.ScoreCount,ValidScoreCount:_self.event.ScoreObject.ValidScoreCount,Name:_self.event.Name};};this.isEventRated=function(){return!!UserCacheService.getEventCommentById(_self.event.Id);};this.constants=constants;this.regionLevels=RegionLevels;this.getDateClass=EventHelperService.getDateClass;this.getExactTime=EventHelperService.getExactTime;this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;this.getEventLocationName=EventHelperService.getEventLocationName;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;this.tryOpenRating=RatingSharedService.tryOpenRating;}]);;angular.module('tasteatlas').component('taEventMobile',{bindings:{event:'<',regionLevel:'<'},templateUrl:'/content/scripts/app/components/shared/events/ta-event-mobile.html',controller:'taEventMobileController'}).controller("taEventMobileController",["EventHelperService","RegionLevels","constants",function(EventHelperService,RegionLevels,constants){var _self=this;this.constants=constants;this.regionLevels=RegionLevels;this.getDateClass=EventHelperService.getDateClass;this.getExactTime=EventHelperService.getExactTime;this.getEventTimeFromNow=EventHelperService.getEventTimeFromNow;var randomNumberBetween1and4=Math.floor(Math.random()*4)+1;this.randomImageUrl="/content/layout/images/thumbnail-no-photo-"+randomNumberBetween1and4+".jpg";this.getEventLocationName=EventHelperService.getEventLocationName;this.getExactDisplayDate=EventHelperService.getExactDisplayDate;}]);;angular.module('tasteatlas').component('taExploreMoreListDesktop',{bindings:{items:'<',exploreLoading:'<',exploreLastPage:'<',onViewMore:'&'},templateUrl:'/content/scripts/app/components/shared/explore-more/ta-explore-more-list-desktop.html',controller:'taExploreMoreListDesktopController'}).controller("taExploreMoreListDesktopController",['$scope','constants',function($scope,constants){var _self=this;this.constants=constants;_self.viewMore=function(){_self.onViewMore();};}]);;angular.module('tasteatlas').component('taFoodIngredientsMini',{templateUrl:'/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-mini.html',controller:'taFoodIngredientsMiniController',bindings:{items:'<',limitTo:'<',includeName:'<'}}).controller("taFoodIngredientsMiniController",["constants","$filter",function(constants,$filter){var _self=this;this.constants=constants;this.$onInit=function(){findSiblings();};function findSiblings(){_self.eligibleItems=_self.limitTo?_self.items.slice(0,_self.limitTo):_self.items;var orderedItemsById=$filter('orderBy')(_self.eligibleItems,'FoodIngredientId');if(!orderedItemsById){return}
for(var i=0;i<orderedItemsById.length-1;i++){if(orderedItemsById[i+1].FoodIngredientId===orderedItemsById[i].FoodIngredientId){orderedItemsById[i].hasSibling=true;}}}}]);;angular.module('tasteatlas').component('taFoodIngredients',{bindings:{template:'@',items:'<',listId:'@',disableScroll:'<',isRecipe:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-mobile.html','desktop':'/content/scripts/app/components/shared/food-ingredients/ta-food-ingredients-desktop.html'};return templates[$attrs.template];},controller:'taFoodIngredientsController'}).controller("taFoodIngredientsController",["$scope","constants","$filter","$window","MainHelper",function($scope,constants,$filter,$window,MainHelper){var _self=this;this.constants=constants;this.$onInit=function(){_self.listId=_self.listId||'food-ingredients-list';findSiblings();angular.element($window).bind('resize',function(){$scope.$digest();});};function findSiblings(){var orderedItemsById=$filter('orderBy')(_self.items,'FoodIngredientId');for(var i=0;i<orderedItemsById.length-1;i++){if(orderedItemsById[i+1].FoodIngredientId&&(orderedItemsById[i+1].FoodIngredientId===orderedItemsById[i].FoodIngredientId)){orderedItemsById[i].hasSibling=true;}}}
this.includeHorizontalScroll=function(){if(_self.disableScroll){return false;}
return MainHelper.includeHorizontalScroll(_self.listId);};this.scroll=function(direction){var container=document.getElementById(_self.listId);MainHelper.sideScroll(container,direction,25,100,10);};}]);;angular.module('tasteatlas').component('taMobileFoodOrder',{templateUrl:'/content/scripts/app/components/shared/food-order/ta-mobile-food-order.html',controller:'taMobileFoodOrderController',bindings:{onOrderChange:'&',options:'<',overrideChange:'<'}}).controller("taMobileFoodOrderController",["$scope",function($scope){var _self=this;this.orderBy=0;this.isDropDownOpen=false;this.$onInit=function(){_self.selectedOption=_self.options[_self.orderBy].name;};this.$onChanges=function(changeObj){if(changeObj&&changeObj.overrideChange&&changeObj.overrideChange.currentValue&&changeObj.overrideChange.currentValue.length){_self.selectedOption=_self.options.find(function(option){return option.value===changeObj.overrideChange.currentValue;}).name;}};this.orderChanged=function(orderBy){_self.onOrderChange({orderBy:orderBy});_self.toggleDropdown();_self.selectedOption=_self.options.find(function(option){return option.value===orderBy;}).name;};this.toggleDropdown=function(event){_self.isDropdownOpen=!_self.isDropdownOpen;if(_self.isDropdownOpen){document.body.addEventListener("click",toggleDropdownoutside);}
else{document.body.removeEventListener("click",toggleDropdownoutside);return;}
var buttonBox=event.currentTarget;var dropdown=buttonBox.parentNode;function toggleDropdownoutside(e){if(dropdown.contains(e.target)===false){_self.isDropdownOpen=false;document.body.removeEventListener("click",toggleDropdownoutside);$scope.$apply();}}};}]);;angular.module('tasteatlas').component('taHorizontalLoader',{bindings:{percentage:'<'},templateUrl:'/content/scripts/app/components/shared/horizontal-loader/ta-horizontal-loader.html',controller:'taHorizontalLoaderController'}).controller("taHorizontalLoaderController",['$element',function($element){}]);;angular.module('tasteatlas').component('taImageGalleryDesktop',{bindings:{preview:'<',photos:'<',hideArrowsAndCredits:'<'},templateUrl:'/content/scripts/app/components/shared/image-gallery/ta-image-gallery-desktop.html',controller:'taImageGalleryDesktopController'}).controller('taImageGalleryDesktopController',['$scope',function($scope){var _self=this;this.altText="";this.$onInit=function(){if(_self.photos.length===0&&(_self.preview===undefined||_self.preview===null)){_self.isEmpty=true;return;}
if(_self.preview.Image!==null){_self.photos=_self.photos.filter(function(p){return p.Image!==_self.preview.Image;});_self.photos.push(_self.preview);_self.photos.reverse();}
if(document.title){_self.altText=document.title;}
angular.element(document).ready(function(){if(_self.photos.length>1){var swiper=new Swiper('.swiper-container',{slidesPerView:1,loop:_self.photos.length>1,watchOverflow:true,navigation:{nextEl:'.swiper-button-next',prevEl:'.swiper-button-prev'},pagination:{el:'.swiper-pagination'}});}});};}]);;angular.module('tasteatlas').component('taImageGalleryMobile',{bindings:{preview:'<',photos:'<',mobilePhotos:'<',rating:'<',hideImageCredits:'<',areRestaurantGallery:'<'},templateUrl:'/content/scripts/app/components/shared/image-gallery/ta-image-gallery-mobile.html',controller:'taImageGalleryMobileController'}).controller('taImageGalleryMobileController',['constants','UserCommentStatusService','UserSubjectService','LoginService',function(constants,UserCommentStatusService,UserSubjectService,LoginService){var _self=this;this.constants=constants;this.isEmpty=false;this.altText="";this.isAnonymous;this.autoHeight=false;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();if(_self.preview!==null){_self.photos=_self.photos.filter(function(p){return p.Image!==_self.preview.Image;});_self.photos.push(_self.preview);_self.photos.reverse();}
if(document.title){_self.altText=document.title;}
if(_self.areRestaurantGallery){if(_self.mobilePhotos&&_self.mobilePhotos.length){_self.photos=_self.mobilePhotos;_self.autoHeight=true;}
else{_self.photos=_self.photos;}}
else{if(_self.mobilePhotos&&_self.mobilePhotos.length){_self.photos=_self.mobilePhotos;_self.autoHeight=true;}}
if(_self.photos.length===0&&(_self.preview===undefined||_self.preview===null)){_self.isEmpty=true;return;}
angular.element(document).ready(function(){if(_self.photos.length>1){var swiper=new Swiper('.swiper-container',{slidesPerView:1,loop:_self.photos.length>1,watchOverflow:true,autoHeight:_self.autoHeight,pagination:{el:'.swiper-pagination',dynamicBullets:true,dynamicMainBullets:1}});}});if(_self.rating){UserCommentStatusService.subscribe(_commentButtonObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();}};this.startCommentProcess=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};function _commentButtonObserver(data){_self.userCommentStatus=data;}}]);;angular.module('tasteatlas').component('taPopupGalleryMobile',{bindings:{photos:'<',closeModal:'&'},templateUrl:'/content/scripts/app/components/shared/image-gallery/ta-popup-gallery-mobile.html',controller:'taPopupGalleryMobileController'}).controller('taPopupGalleryMobileController',['$scope','$timeout','constants','UserCommentStatusService','UserSubjectService','LoginService',function($scope,$timeout,constants,UserCommentStatusService,UserSubjectService,LoginService){var _self=this;this.constants=constants;this.isEmpty=false;this.altText="";this.$onInit=function(){if(document.title){_self.altText=document.title;}
angular.element(document).ready(function(){$timeout(function(){var swiper=new Swiper('.swiper-container',{slidesPerView:1,loop:_self.photos.length>1,watchOverflow:true,pagination:{el:'.swiper-pagination',type:'fraction'}});});});};}]);;angular.module('tasteatlas').component('taLocationPromptMobile',{templateUrl:'/content/scripts/app/components/shared/location-prompt/ta-location-prompt-mobile.html',controller:'taLocationPromptMobileController',bindings:{location:'<',onLocationActivated:'&'}}).controller('taLocationPromptMobileController',['GeolocationService',function(GeolocationService){var _self=this;var _granted='GRANTED';var _denied='DENIED';var _prompt='PROMPT';var _trouble='TROUBLE';this.locationState='';this.$onInit=function(){if(_self.location&&_self.location.latitude&&_self.location.longitude){_self.locationState=_granted;_self.onLocationActivated({location:_self.location});}
else{_self.locationState=_prompt;}};this.turnOnLocation=function(){GeolocationService.handlePremission().then(function(data){if(data==='PROMPT'){GeolocationService.getLocation({timeout:2000}).then(function(data){if(data==='DENIED'){_self.locationState=_denied;return;}
if(data==='TROUBLE'){_self.locationState=_trouble;return;}
_self.location={longitude:data.coords.longitude,latitude:data.coords.latitude};_self.locationState=_granted;_self.onLocationActivated({location:_self.location});});}
if(data==='DENIED'){_self.locationState=_denied;}});};}]);;angular.module('tasteatlas').component('taNotificationDialog',{templateUrl:'/content/scripts/app/components/shared/notifications/ta-notification-dialog.html',controller:'taNotificationDialogController',transclude:true,bindings:{showDialog:'&'}}).controller("taNotificationDialogController",["$scope",function($scope){var _self=this;}]);;angular.module('tasteatlas').component('taOtherNames',{templateUrl:'/content/scripts/app/components/shared/other-names/ta-other-names.html',controller:'taOtherNamesController',bindings:{items:'<'}}).controller('taOtherNamesController',function(){var _self=this;this.firstItems=[];this.remainingItems=[];this.showAll=false;this.$onInit=function(){_self.firstItems=_self.items.slice(0,3);_self.remainingItems=_self.items.slice(3);_self.showAll=_self.remainingItems.length?false:true;};this.isLastItem=function(index){if(index===_self.firstItems.length-1&&_self.remainingItems.length===0){return true;}
else if(index===_self.firstItems.length-1&&_self.remainingItems.length>0&&!_self.showAll){return true;}
return false;};this.showRemainingItems=function(){_self.showAll=true;};});;angular.module('tasteatlas').component('taPairingDesktopDynamic',{bindings:{title:'<',items:'<',loadMore:'&'},templateUrl:'/content/scripts/app/components/shared/pairings/ta-pairing-desktop-dynamic.html',controller:'taPairingDesktopDynamicController'}).controller("taPairingDesktopDynamicController",["constants",function(constants){var _self=this;this.constants=constants;}]);;angular.module('tasteatlas').component('taPairingDesktop',{bindings:{title:'<',pairings:'<'},templateUrl:'/content/scripts/app/components/shared/pairings/ta-pairing-desktop.html',controller:'taPairingDesktopController'}).controller("taPairingDesktopController",["constants",function(constants){var _self=this;this.constants=constants;this.maxNumberOfItems=4;this.pairingItems=[];this.$onInit=function(){if(_self.pairings.length>_self.maxNumberOfItems){_self.pairingItems=_self.pairings.slice(0,_self.maxNumberOfItems);}
else{_self.pairingItems=_self.pairings;}};this.loadMore=function(){var currentLength=_self.pairingItems.length;_self.pairingItems=_self.pairingItems.concat(_self.pairings.slice(currentLength,_self.maxNumberOfItems+currentLength));};}]);;angular.module('tasteatlas').component('taPairingMobile',{bindings:{title:'<',pairings:'<'},templateUrl:'/content/scripts/app/components/shared/pairings/ta-pairing-mobile.html',controller:'taPairingMobileController'}).controller("taPairingMobileController",["constants","FoodTypesService","RatingSharedService",function(constants,FoodTypesService,RatingSharedService){var _self=this;this.constants=constants;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.$onInit=function(){angular.forEach(_self.pairings,function(pair){pair.details={Id:pair.Id,EntityType:pair.EntityType,Score:pair.Score.Score,ScoreCount:pair.Score.ScoreCount,ValidScoreCount:pair.Score.ValidScoreCount,Name:pair.Name};});};}]);;angular.module('tasteatlas').component('taProgressBar',{bindings:{template:'@',userDash:'<',title:'<',total:'<',tried:'<',items:'<',averageScore:'<',itemsType:'<',isMobile:'<'},templateUrl:function($element,$attrs){var templates={'shared':'/content/scripts/app/components/shared/progress-bar/ta-progress-bar-shared.html'};return templates[$attrs.template];},controller:'progress-bar-controller'}).controller('progress-bar-controller',['LoginService','UserSubjectService','$timeout','$rootScope',function(LoginService,UserSubjectService,$timeout,$rootScope){var _self=this;this.dishCommentList=[];this.ingredientCommentList=[];this.dishComments=[];this.dishCommentsNumber=0;this.percent=0;this.commentListType;var header=document.getElementById('header-id');this.isLoginProcess=false;this.isLoginView=true;this.$onInit=function(){_self.isSignedIn=UserSubjectService.isInAnonymousRole;$timeout(()=>{if(_self.itemsType==1){_self.commentListType='DishCommentList';}
else if(_self.itemsType==2){_self.commentListType='IngredientCommentList';}
else{_self.commentListType=['DishCommentList','IngredientCommentList'];}
_self.calculateProgressBarWidth();})}
this.openLogin=function(){_self.isLoginProcess=true;_self.isLoginView=true;header.classList.add('header-top');document.body.classList.add('modal--open');LoginService.updateState({isLoginProcess:_self.isLoginProcess});};_self.calculateProgressBarWidth=function(){if(!_self.isSignedIn()){var myListsCache=JSON.parse(localStorage.getItem("myLists")).value;if(myListsCache!==null){if(_self.userDash==true){_self.dishCommentsNumber=_self.tried;}
else{if(_self.items!=null){if(_self.itemsType==3){_self.dishCommentList=myListsCache.UserComments[_self.commentListType[0]].filter((localItem)=>_self.items.some(comingItem=>localItem.Id===comingItem.EntityId))
_self.ingredientCommentList=myListsCache.UserComments[_self.commentListType[1]].filter((localItem)=>_self.items.some(comingItem=>localItem.Id===comingItem.EntityId))
_self.dishComments=_self.dishCommentList.concat(_self.ingredientCommentList);}
else{_self.dishComments=myListsCache.UserComments[_self.commentListType].filter((localItem)=>_self.items.some(comingItem=>localItem.Id===comingItem.EntityId))}
_self.dishCommentsNumber=_self.dishComments.length;}
else{if(_self.itemsType==3){_self.dishCommentsNumber=myListsCache.UserComments[_self.commentListType[0]].concat(myListsCache.UserComments[_self.commentListType[1]]).length;}
else{_self.dishCommentsNumber=myListsCache.UserComments[_self.commentListType].length;}}}
return _self.percent=parseInt(((_self.dishCommentsNumber/_self.total)*100).toFixed(2));}}};$rootScope.$on("ta.entityCommented",function(){return _self.calculateProgressBarWidth();});}]);;angular.module('tasteatlas').component('taProgressCircle',{bindings:{percentage:'<'},templateUrl:'/content/scripts/app/components/shared/progress-circle/ta-progress-circle.html',controller:'taProgressCircleController'}).controller("taProgressCircleController",[function(){var _self=this;this.percentageClass="";this.$onInit=function(){_self.percentageClass="progress-"+_self.percentage;};}]);;angular.module('tasteatlas').component('taRangeSlider',{bindings:{rangeSliderName:'@',uniqueClass:'@',maxSteps:'<',labels:'<',},templateUrl:'/content/scripts/app/components/shared/range-slider/ta-range-slider.html',controller:'taRangeSliderController'}).controller("taRangeSliderController",["$scope","$timeout",function($scope,$timeout){var _self=this;this.sheet=document.createElement('style');this.rangeInputs=document.querySelectorAll(".range-slider-wrapper .recipe-range-slider input");this.prefs=['webkit-slider-runnable-track','moz-range-track','ms-track'];this.rangeSliderStyle="";this.labelsCounter;this.$onInit=function(){document.body.appendChild(_self.sheet);};_self.getTrackStyle=function(rangeInput,index){_self.gradientValue=(rangeInput.value-1)*14.285714286;_self.selectedElementLabels=document.querySelectorAll('.range-slider-wrapper .range-labels')[index];_self.labelsCounter=0;if(index==0){_self.selectedElement='.recipe-range-slider--left input::-';}
else if(index==1){_self.selectedElement='.recipe-range-slider--right input::-';}
for(let i=0;i<_self.prefs.length;i++){_self.rangeSliderStyle+=_self.selectedElement+_self.prefs[i]+'{background: linear-gradient(to right, #F5533D 0%, #F5533D '+_self.gradientValue+'%, #D8D8D8 '+_self.gradientValue+'%, #D8D8D8 100%)}';}
_self.sheet.innerText=_self.rangeSliderStyle;rangeInput.parentElement.style.cssText+='background: linear-gradient(to right, #F5533D 0%, #F5533D '+_self.gradientValue+'%, #f8f8f8 '+_self.gradientValue+'%, #f8f8f8 100%)';for(let rangeLabel of _self.selectedElementLabels.children){if((_self.labelsCounter+1)<=rangeInput.value){rangeLabel.classList.add('selected');}
else if((_self.labelsCounter+1)<=rangeInput.value){rangeLabel.classList.add('active selected');}
else{rangeLabel.classList.remove('active','selected');}
_self.labelsCounter++;}
if(index==0){$scope.$emit("cookingRangeSliderValue",rangeInput.value);}
else if(index==1){$scope.$emit("totalRangeSliderValue",rangeInput.value);}}
_self.rangeInputs.forEach((rangeInput,index)=>{$timeout(()=>{rangeInput.addEventListener("change",(event)=>{_self.getTrackStyle(rangeInput,index);});},2000)});}]);;angular.module("tasteatlas").service("RatingCardService",["TopListArticleSharedService","$filter",function(TopListArticleSharedService,$filter){var _self=this;this.getBars=function(details){var likePercentage=details.LikePercentage+'%';var indifferentPercentage=details.IndifferentPercentage+'%';var dislikePercentage=details.DislikePercentage+'%';return{like:{level:getBarLevel('#95db94',likePercentage),value:likePercentage},indifferent:{level:getBarLevel('#e2e3e2',indifferentPercentage),value:indifferentPercentage},dontlike:{level:getBarLevel('#f8533d',dislikePercentage),value:dislikePercentage}};};function getBarLevel(color,value){return 'linear-gradient(to right, '+color+' '+value+', #f3f3f3 '+value+');';}
this.getSummaryCircle=function(type,width){if(!type){return;}
var triedPercentage=type.PercentageTried;if(!triedPercentage){return getSummaryCircleStyle(width,{top:'#e2e3e2',right:'#e2e3e2',bottom:'#e2e3e2',left:'#e2e3e2'});}
else if(triedPercentage<=25){return getSummaryCircleStyle(width,{top:'#e2e3e2',right:'#f8533d',bottom:'#e2e3e2',left:'#e2e3e2'});}
else if(triedPercentage<=50){return getSummaryCircleStyle(width,{top:'#e2e3e2',right:'#f8533d',bottom:'#f8533d',left:'#e2e3e2'});}
else if(triedPercentage<=75){return getSummaryCircleStyle(width,{top:'#e2e3e2',right:'#f8533d',bottom:'#f8533d',left:'#f8533d'});}
else{return getSummaryCircleStyle(width,{top:'#f8533d',right:'#f8533d',bottom:'#f8533d',left:'#f8533d'});}};function getSummaryCircleStyle(width,borderColors){var desiredWidth=width||'2px';return{'border-top':desiredWidth+' solid '+borderColors.top,'border-right':desiredWidth+' solid '+borderColors.right,'border-bottom':desiredWidth+' solid '+borderColors.bottom,'border-left':desiredWidth+' solid '+borderColors.left};}
this.getBadge=function(badge){var topListType=TopListArticleSharedService.getTopListTypeForBadge(badge.TopListArticleType);if(TopListArticleSharedService.isToplistArticleV2(badge.TopListArticleType)){return{position:"#"+badge.TopListItemPlace,text:topListType+" "+getBadgeGroupType(badge)}}
var result={position:"#"+badge.TopListItemPlace,text:topListType+" "};result.text+=getBadgeRegion(badge);return result;};this.getBadgeExpanded=function(badge){var topListType=TopListArticleSharedService.getTopListTypeForBadge(badge.TopListArticleType);if(TopListArticleSharedService.isToplistArticleV2(badge.TopListArticleType)){return{position:"#"+badge.TopListItemPlace+" "+topListType,text:getBadgeGroupType(badge)}}
var result={position:"#"+badge.TopListItemPlace+" "+topListType,text:getBadgeRegion(badge)};return result;};function findSpecialArticleGroupName(topListArticleType){var cityArticleEnums=TopListArticleSharedService.getCityArticleEnums();if(topListArticleType===cityArticleEnums.nationalDishesInCity){return "local dish";}
else if(topListArticleType===cityArticleEnums.localFoodInCity){return "local food";}
else{return TopListArticleSharedService.getSpecialArticleTypes(topListArticleType,{beverage:'beverage',dish:'dish',product:'food product'});}}
function getBadgeRegion(badge){var groupName=TopListArticleSharedService.getTopListFoodType(badge.TopListArticleType);if(badge.GroupName){groupName=badge.GroupName;}
if(!groupName){groupName=findSpecialArticleGroupName(badge.TopListArticleType);}
if(badge.RegionAdjective){return badge.RegionAdjective+" "+groupName;}
else if(badge.RegionName){return groupName+" in "+badge.RegionName;}
else{return groupName+" in the world";}}
function getBadgeGroupType(badge){var groupName=badge.GroupName||badge.GroupEntityName;if(TopListArticleSharedService.recipeArticleEnums.includes(badge.TopListArticleType)){groupName+=" recipe";}
if(TopListArticleSharedService.typeOfArticleEnum===badge.TopListArticleType){groupName=" type of "+groupName;}
if(TopListArticleSharedService.varietyArticleEnum===badge.TopListArticleType){groupName=" variety of "+groupName;}
if(badge.RegionAdjective){return badge.RegionAdjective+" "+groupName;}
else if(badge.RegionName){return groupName+" in "+badge.RegionName;}
else{return groupName;}}
this.getFoodType=function(isDrink,entityType){if(isDrink){return "beverages";}
else if(entityType===1){return "dishes";}
else{return "food products";}};this.getRateItText=function(){var details=this.foodDetails;if(details&&details.IsDrink){return "Rate it";}
else{return "Ate it? Rate it";}};}]);;angular.module('tasteatlas').component('taRatingActionsSsr',{bindings:{details:'<',ratingDataCard:'<',isMobile:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-mobile.html','mobile-redesign':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-mobile.html','desktop':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-desktop.html','desktop-redesign':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-desktop.html','rate-redesign':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-rate.html','basic-rate-redesign':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-rate-basic.html','bookmark-redesign':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-ssr-redesign-bookmark.html'};return templates[$attrs.template];},controller:'rating-actions-ssr-mobile-controller'}).controller('rating-actions-ssr-mobile-controller',['$scope','$rootScope','UserSubjectService','UserCommentStatusService','LoginService','RatingCardService','ProfileService','UserCacheService','ItemTypes','FoodTypesService','RatingSharedService',function($scope,$rootScope,UserSubjectService,UserCommentStatusService,LoginService,RatingCardService,ProfileService,UserCacheService,ItemTypes,FoodTypesService,RatingSharedService){var _self=this;this.wannaTryItem=null;this.foodDetails=null;this.isAnonymous;this.rateItText="";this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.getFoodRatingScore=FoodTypesService.getFoodRatingScore;this.getWannaTryFood=UserCacheService.getWannaTryFood;this.favoritedFoodsList=[];this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.foodDetails=_self.details;_self.rateItText=RatingCardService.getRateItText.apply(_self);_self.selectedFoodEntityId=_self.details.Id||_self.details.RecipeVariationId||_self.details.EntityId;_self.favoritedFoodsList=getFoodsList();if(typeof _self.foodDetails.Id==='undefined'||_self.foodDetails.Id===null){foodDetailsId=_self.foodDetails.RecipeVariationId;}else{foodDetailsId=_self.foodDetails.Id;}
if(typeof _self.ratingDataCard==='undefined'||_self.ratingDataCard===null){_self.ratingDataCard=0;}
if(_self.foodDetails.EntityType===ItemTypes.Dish){_self.favoritedFood=UserCacheService.getFavoriteDish(_self.selectedFoodEntityId);}
else if(_self.foodDetails.EntityType===ItemTypes.Ingredient){_self.favoritedFood=UserCacheService.getFavoriteIngredient(_self.selectedFoodEntityId);}
else{_self.favoritedFood=UserCacheService.getFavoriteRecipe(_self.selectedFoodEntityId);_self.favoritedRecipe=UserCacheService.getRecipeWannaTry(_self.selectedFoodEntityId);}
if(_self.favoritedFood){_self.listPosition=_self.favoritedFood.Order;}
else{_self.listPosition=_self.favoritedFoodsList.length+1;}
_self.foodDetails.details={Name:_self.foodDetails.Name,Id:foodDetailsId,EntityType:_self.foodDetails.EntityType,Score:_self.foodDetails.Score,ScoreCount:_self.foodDetails.ScoreCount,ValidScoreCount:_self.foodDetails.ValidScoreCount,Rating:{Score:_self.foodDetails.Score,ScoreCount:_self.foodDetails.ScoreCount,DividedScore:_self.foodDetails.DividedScore,ValidScoreCount:_self.foodDetails.ValidScoreCount,IsApproved:true}};$scope.$watch('$root.userTokenInitalized',function(){if($rootScope.userTokenInitalized){return loadWannaTryResult()}});};function _commentButtonObserver(data){_self.userCommentStatus=data;}
function loadWannaTryResult(){_self.wannaTryItem=_self.getWannaTryItem();if(_self.wannaTryItem){_self.userCommentStatus.wantsToTry=!!_self.wannaTryItem.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.wannaTryItem.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
this.getFavoritedFood=function(){if(_self.foodDetails.EntityType===ItemTypes.Dish){return UserCacheService.getFavoriteDish(_self.foodDetails.Id);}
else if(_self.foodDetails.EntityType===ItemTypes.Ingredient){return UserCacheService.getFavoriteIngredient(_self.foodDetails.Id);}
else if(_self.foodDetails.EntityType===ItemTypes.RecipeVariation){return UserCacheService.getFavoriteRecipe(_self.foodDetails.Id);}}
this.getWannaTryItem=function(){if(_self.details.EntityType===ItemTypes.Dish){return UserCacheService.getDishWannaTry(_self.details.Id);}
else if(_self.details.EntityType===ItemTypes.Ingredient){return UserCacheService.getIngredientWannaTry(_self.details.Id);}
else if(_self.details.EntityType===ItemTypes.RecipeVariation){return UserCacheService.getRecipeWannaTry(_self.details.Id);}}
this.startCommentProcess=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};function wannaTryClick(mainAction,secondaryAction,decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
var foodIds=_self.details;if(_self.getFoodRatingScore(foodIds)){return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(foodIds.Id,foodIds.EntityType).then(function(){return refreshData()});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(foodIds.Id,foodIds.EntityType).then(function(){return refreshData()});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',1);};this.getWannaTryLabel=function(){var label="Wanna try?";if(_self.userCommentStatus.comment){return "Wanna try?";}
if(_self.userCommentStatus.wantsToTry){label="Wanna try";}
return label;};this.wantsToTryClicked=function(action){loadWannaTryResult();};this.wantsToTryDisabled=function(){return _self.getFoodRatingScore(_self.foodDetails);};function getFoodsList(){var list=[];if(_self.foodDetails.EntityType===ItemTypes.RecipeVariation){list=UserCacheService.getFavoriteRecipes();}
else{var favoritedDishes=UserCacheService.getFavoriteDishes();var favoritedIngredients=UserCacheService.getFavoriteIngredients();list=list.concat(favoritedDishes).concat(favoritedIngredients);}
return list;}
function refreshData(){return UserCacheService.refreshMyLists().then(function(){_self.favoritedFoodsList=getFoodsList();_self.wannaTryItem=_self.getWannaTryItem();});}
this.addToList=function(type){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
if(!_self.listPosition||(type==='change'&&_self.favoritedFoodsList.length===1)){return;}
return ProfileService.AddOrUpdateFavorite(_self.foodDetails.Id,_self.foodDetails.EntityType,_self.favoritedFoodsList.length+1).then(function(){refreshData();});};this.removeFromList=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
return ProfileService.RemoveFavorite(_self.foodDetails.Id,_self.foodDetails.EntityType).then(function(){refreshData();});};this.getRatingSource=function(){if(_self.foodDetails.TopListItemNumber){return 'toplist';}
return 'other';};}]);;angular.module('tasteatlas').component('taRatingActions',{bindings:{template:'@',templateColumn:'<',actions:'<',userCommentStatus:'<',type:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-mobile.html','desktop-row':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-desktop-flex.html'};return templates[$attrs.template];},controller:'rating-actions-controller'}).controller('rating-actions-controller',['$timeout','UserSubjectService','UserCommentStatusService','LoginService','RatingCardService','ProfileService','UserCacheService','ItemTypes','FoodTypesService','RatingSharedService',function($timeout,UserSubjectService,UserCommentStatusService,LoginService,RatingCardService,ProfileService,UserCacheService,ItemTypes,FoodTypesService,RatingSharedService){var _self=this;this.wannaTryItem=null;this.foodDetails=null;this.isAnonymous;this.rateItText="";this.entityIds;this.countIteration=0;this.getWannaTryItemDetails;this.status;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.getFoodRatingScore=FoodTypesService.getFoodRatingScore;this.favoritedFoodsList=[];this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();$timeout(()=>{UserCommentStatusService.subscribe(_commentButtonObserver);getWannaTryFood();});_self.foodDetails=_self.actions.getDetails();_self.entityIds=_self.actions.getFoodIds();_self.rateItText=RatingCardService.getRateItText.apply(_self);_self.selectedFoodEntityId=_self.foodDetails.Id||_self.foodDetails.RecipeVariationId||_self.foodDetails.EntityId;_self.favoritedFoodsList=getFoodsList();if((_self.foodDetails.RegionName||_self.foodDetails.Region!=null)||(_self.foodDetails.CountryName||_self.foodDetails.Region!=null)){_self.foodRegion={regionName:_self.foodDetails.RegionName||_self.foodDetails.Region.RegionName,countryName:_self.foodDetails.CountryName||_self.foodDetails.Region.CountryName}}else{_self.foodRegion=null;}
if(_self.foodDetails.EntityType===ItemTypes.Dish){_self.favoritedFood=UserCacheService.getFavoriteDish(_self.selectedFoodEntityId);}
else if(_self.foodDetails.EntityType===ItemTypes.Ingredient){_self.favoritedFood=UserCacheService.getFavoriteIngredient(_self.selectedFoodEntityId);}
else{_self.favoritedFood=UserCacheService.getFavoriteRecipe(_self.selectedFoodEntityId);}
if(_self.favoritedFood){_self.listPosition=_self.favoritedFood.Order;}
else{_self.listPosition=_self.favoritedFoodsList.length+1;}};this.$onChanges=function(changes){if(changes.userCommentStatus){getWannaTryFood();}};function waitingForDetailsData(x){return new Promise((resolve)=>{$timeout(()=>{resolve(x);});});}
async function getWannaTryFood(){_self.preloadedDetails=await waitingForDetailsData(window.ta.details);if(_self.preloadedDetails.EntityType==ItemTypes.Dish){_self.getWannaTryItemDetails=await waitingForDetailsData(UserCacheService.getDishWannaTry(_self.preloadedDetails.EntityId));}
else if(_self.preloadedDetails.EntityType==ItemTypes.Ingredient){_self.getWannaTryItemDetails=await waitingForDetailsData(UserCacheService.getIngredientWannaTry(_self.preloadedDetails.EntityId));}
else if(_self.preloadedDetails.EntityType==ItemTypes.RecipeVariation){_self.getWannaTryItemDetails=await waitingForDetailsData(UserCacheService.getRecipeWannaTry(_self.preloadedDetails.EntityId));}
if(_self.getWannaTryItemDetails!=null){_self.userCommentStatus.wantsToTry=!!_self.getWannaTryItemDetails.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.getWannaTryItemDetails.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
function _commentButtonObserver(data){_self.userCommentStatus=data;}
this.getFavoritedFood=function(){if(_self.entityIds.entityTypeEnum===ItemTypes.Dish){return UserCacheService.getFavoriteDish(_self.entityIds.entityId);}
else if(_self.entityIds.entityTypeEnum===ItemTypes.Ingredient){return UserCacheService.getFavoriteIngredient(_self.entityIds.entityId);}
else if(_self.entityIds.entityTypeEnum===ItemTypes.RecipeVariation){return UserCacheService.getFavoriteRecipe(_self.entityIds.entityId);}}
this.startCommentProcess=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus)};function wannaTryClick(mainAction,secondaryAction,decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;var foodIds=_self.actions.getFoodIds();if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(foodIds.entityId,foodIds.entityTypeEnum).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(foodIds.entityId,foodIds.entityTypeEnum).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',1);};this.getWannaTryLabel=function(){var label="Wanna try?";if(_self.userCommentStatus.comment){label="Wanna try";}
if(_self.userCommentStatus.wantsToTry){label="Wanna try";}
return label;};this.wantsToTryDisabled=function(){if(_self.type==='singleItemOnPage'){return _self.userCommentStatus.comment||null;}
else if(_self.type==='collection'){return _self.getFoodRatingScore(_self.foodDetails||_self.preloadedDetails);}};function getFoodsList(){var list=[];if(_self.foodDetails.EntityType===ItemTypes.RecipeVariation){list=UserCacheService.getFavoriteRecipes();}
else{var favoritedDishes=UserCacheService.getFavoriteDishes();var favoritedIngredients=UserCacheService.getFavoriteIngredients();list=list.concat(favoritedDishes).concat(favoritedIngredients);}
return list;}
function refreshData(){return UserCacheService.refreshMyLists().then(function(){_self.favoritedFoodsList=getFoodsList();});}
this.addToList=function(type){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
if(!_self.listPosition||(type==='change'&&_self.favoritedFoodsList.length===1)){return;}
ProfileService.AddOrUpdateFavorite(_self.selectedFoodEntityId,_self.foodDetails.EntityType,_self.listPosition).then(function(){return refreshData();});};this.removeFromList=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
ProfileService.RemoveFavorite(_self.selectedFoodEntityId,_self.foodDetails.EntityType).then(function(){return refreshData();});};this.getRatingSource=function(){if(_self.actions.getRatingSource){return _self.actions.getRatingSource();}
return 'other';};}]);;angular.module('tasteatlas').component('taRatingCard',{bindings:{details:'<',badges:'<',actions:'<',template:'@',platform:'@'},templateUrl:function($element,$attrs){var templates={'basic':'/content/scripts/app/components/shared/rating-card/ta-rating-card-basic.html','expanded':'/content/scripts/app/components/shared/rating-card/ta-rating-card-expanded.html'};return templates[$attrs.template];},controller:'rating-card-controller'}).controller('rating-card-controller',['UserSubjectService','CommentHelper','UserCommentStatusService','LoginService','RatingCardService','ProfileService','$filter','RegionLevels',function(UserSubjectService,CommentHelper,UserCommentStatusService,LoginService,RatingCardService,ProfileService,$filter,RegionLevels){var _self=this;this.isCommentProcess=false;this.userCommentStatus={};this.bars={};this.summaryCircle=null;this.badgesForDisplay=[];this.orderedBadges=[];var numberOfDisplayedItems=3;var loadMoreNumberOfItems=15;this.starRange=CommentHelper.starRange;this.currentRange=_self.starRange[0];this.starClasses=CommentHelper.starClasses;this.isAnonymous;this.triedFood=null;this.foodDetails=null;this.foodType="";this.regionUrlLink;this.userDetails=[];this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.bars=RatingCardService.getBars(_self.details);_self.foodDetails=_self.actions.getDetails();_self.badgesForDisplay=loadBadgesForDisplay();_self.triedFood=getTriedFood();_self.foodType=RatingCardService.getFoodType(_self.foodDetails.IsDrink,_self.foodDetails.EntityType);_self.regionUrlLink=_self.actions.getRegionUrlLink();};function _commentButtonObserver(data){_self.userCommentStatus=data;}
function loadBadgesForDisplay(){if(_self.badges.length>numberOfDisplayedItems){return _self.badges.slice(0,numberOfDisplayedItems);}
else{return _self.badges;}}
this.loadMoreBadges=function(){var displayedBadgesLength=_self.badgesForDisplay.length;_self.badgesForDisplay=_self.badgesForDisplay.concat(_self.badges.slice(displayedBadgesLength,displayedBadgesLength+loadMoreNumberOfItems));};function getTriedFood(){if(_self.isAnonymous||_self.actions.hideDetailedInformation){return;}
var locationMaterializedPath=_self.foodDetails.RegionLevel>=RegionLevels.Country?_self.foodDetails.RegionMaterializedPath:_self.foodDetails.CountryMaterializedPath;return ProfileService.GetTriedFood(locationMaterializedPath,_self.foodDetails.CategoryMaterializedPath,_self.foodDetails.EntityType,_self.foodDetails.IsDrink).then(function(success){if(!success.data){_self.triedFood=null;return;}
_self.triedFood={region:success.data.TriedInRegion,group:success.data.TriedInGroup,regionInGroup:success.data.TriedInRegionAndGroup};_self.summaryCircle={region:_self.getSummaryCircle(_self.triedFood.region),group:_self.getSummaryCircle(_self.triedFood.group),regionInGroup:_self.getSummaryCircle(_self.triedFood.regionInGroup)};}).catch(function(error){console.log(error);});}
this.login=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}};this.isNumber=function(rating){return angular.isNumber(rating);};this.getSummaryCircle=RatingCardService.getSummaryCircle;this.getBadge=RatingCardService.getBadge;this.getBadgeExpanded=RatingCardService.getBadgeExpanded;}]);;angular.module('tasteatlas').component('taCookMode',{bindings:{template:'@',variation:'<',rating:'<',video:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-cook-mode-mobile.html',};return templates[$attrs.template];},controller:'taCookModeController'}).controller('taCookModeController',['$scope',function($scope){this.$onInit=function(){swlApiAndroidCheck();};swlApiAndroidCheck=function(){var userAgent=navigator.userAgent.toLowerCase();var isAndroid=userAgent.indexOf("android")>-1;if('wakeLock'in navigator&&isAndroid){$scope.isSupported=true;}else{$scope.isSupported=false;}}
$scope.cookModeSwitch={value:false};var wakeLock=null;$scope.cookMode=async function(cookModeSwitch){cookModeSwitch.value=!cookModeSwitch.value;if(cookModeSwitch.value==true){wakeLock=await navigator.wakeLock.request('screen');$scope.$apply();}else{wakeLock.release().then(()=>{wakeLock=null;});}}}]);;angular.module('tasteatlas').component('taCookingTips',{bindings:{tips:'<',template:'@'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-cooking-tips-mobile.html','desktop':'/content/scripts/app/components/shared/recipe/ta-cooking-tips-desktop.html',};return templates[$attrs.template];},controller:'taCookingTipsController'}).controller('taCookingTipsController',['constants','MainHelper','RecipeService',function(constants,MainHelper,RecipeService){var _self=this;this.constants=constants;this.cookingTips;this.cookingTipsLoading=false;this.$onInit=function(){_self.cookingTips={};_self.cookingTips.Data=MainHelper.paginate(_self.tips,10,1);_self.cookingTips.PageIndex=1;_self.cookingTips.PageSize=10;_self.cookingTips.Count=_self.tips.length;};this.paginate=MainHelper.paginate;this.loadMoreCookingTips=RecipeService.loadMoreCookingTips;}]);;angular.module('tasteatlas').component('taRecipeItemsFetch',{bindings:{url:'<',dishId:'<',recipeVariationId:'<',template:'@'},templateUrl:function($element,$attrs){return $attrs.url+'?id='+$attrs.dishId+'&recipeVariationId='+$attrs.recipeVariationId+'&template='+$attrs.template;}});;angular.module('tasteatlas').component('taRecipeVariation',{bindings:{template:'@',variation:'<',rating:'<',video:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-recipe-variation-mobile.html','desktop':'/content/scripts/app/components/shared/recipe/ta-recipe-variation-desktop.html',};return templates[$attrs.template];},controller:'taRecipeVariationController'}).controller('taRecipeVariationController',['constants','RecipeService','UserCommentStatusService','RatingCardService','LoginService','UserSubjectService','$scope',function(constants,RecipeService,UserCommentStatusService,RatingCardService,LoginService,UserSubjectService,$scope){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.ratingActions;this.userCommentStatus;this.ratingBars;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.ratingBars=RatingCardService.getBars(_self.rating.Rating);UserCommentStatusService.subscribe(_commentObserver);};this.isNumber=function(rating){return angular.isNumber(rating);};this.startCommentProcess=function(){if(_self.isAnonymous){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};this.hasComponentPart=function(key){return _self.variation.Components.some(function(item){return item[key].length;});};function _commentObserver(data){_self.userCommentStatus=data;}}]);;angular.module('tasteatlas').component('taRecipe',{bindings:{variationId:'<',entity:'@',template:'@'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-recipe-mobile.html','desktop':'/content/scripts/app/components/shared/recipe/ta-recipe-desktop.html',};return templates[$attrs.template];},controller:'ta-recipe-controller'}).controller('ta-recipe-controller',['constants','PageStatusSubjectService','RecipeService','$q','UserCommentStatusService','CommentHelper','EntityTypes','GlobalStatusService','RatingSharedService','$filter',function(constants,PageStatusSubjectService,RecipeService,$q,UserCommentStatusService,CommentHelper,EntityTypes,GlobalStatusService,RatingSharedService,$filter){var _self=this;this.constants=constants;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.recipe;this.variations;this.otherVariations;this.isGeneralRecipe;this.selectedVariation;this.introduction='';this.similar=[];this.rating;this.reviews;this.userCommentStatus;this.ratingDetails;this.isLoadingComments=false;this.pageStatus;this.urlLinks=[{link:'',preview:'Overview',isVisible:true},{link:'recipe',preview:'Recipe',isVisible:true},{link:'wheretoeat',preview:'Where to eat',isVisible:true},{link:'comments',preview:'Comments',isVisible:true}];var reviewsParams={PageSize:10,PageIndex:1,IsCritic:false};var _recipeObserver=function(data){_self.userCommentStatus=data;};var _recipePageStatusObserver=function(data){_self.pageStatus=data;};this.$onInit=function(){var recipeInit=window.ta.recipeInit;_self.urlLinks=[{link:'',preview:'Overview',isVisible:true},{link:'recipe',preview:'Recipe',isVisible:true},{link:_self.entity==='DISH'?'wheretoeat':'wheretobuy',preview:_self.entity==='DISH'?'Where to eat':'Where to buy',isVisible:true},{link:'comments',preview:'Comments',isVisible:true}];var recipeInit=window.ta.recipeInit;_self.pageStatus=PageStatusSubjectService.state;GlobalStatusService.setMainPageType("RECIPE");PageStatusSubjectService.subscribe(_recipePageStatusObserver);PageStatusSubjectService.dispatch({page:'recipe'});_self.recipe=recipeInit;_self.recipeId=recipeInit.RecipeId;_self.variations=recipeInit.Variations;_self.introduction=getIntroduction();_self.mainVariation=getMainVariation();_self.selectedVariation=recipeInit.SelectedVariation;_self.details={Name:recipeInit.Name,RegionName:recipeInit.Region.RegionName,CountryName:recipeInit.Region.CountryName,EntityUrlLink:recipeInit.EntityUrlLink,InfographicImage:recipeInit.InfographicImage};_self.navbarDetails={regionName:recipeInit.Region.RegionName,countryName:recipeInit.Region.CountryName,title:recipeInit.Name,urlLink:recipeInit.EntityUrlLink};if(recipeInit.FoodIngredients){_self.details.foodIngredients={data:recipeInit.FoodIngredients,cutData:recipeInit.FoodIngredients.slice(0,8),isValid:!!$filter('filter')(recipeInit.FoodIngredients,function(item){return item.Image&&item.Image.Image;})[0]}}
_self.isGeneralRecipe=_self.selectedVariation.IsMain;_self.rating=_self.selectedVariation.Score;_self.ratingDetails=mapVariationRating();_self.ratingCardActions=RatingSharedService.getRatingCardActionsRecipe(_self.selectedVariation);_self.ratingCardActions.hideDetailedInformation=true;_self.ratingCardActions.hideLikes=true;_self.otherVariations=_self.variations.filter(function(variation){return variation.RecipeVariationId!==_self.selectedVariation.RecipeVariationId;});_self.previewTitleData={type:'recipe',upper:'',main:{upper:'Authentic '+_self.details.Name+' recipe',},sub:_self.details.RegionName+', '+_self.details.CountryName,image:{Image:_self.recipe.Image.Image?_self.recipe.Image.Image:recipeInit.EntityPreviewImage.Image,ImageSource:_self.recipe.Image.Image?_self.recipe.Image.Source:recipeInit.EntityPreviewImage.Source,ImageAuthorUrl:_self.recipe.Image.Image?_self.recipe.Image.SourceUrl:recipeInit.EntityPreviewImage.SourceUrl,}};var promises=[RecipeService.getSimilar(_self.recipeId)];$q.all(promises).then(function(success){UserCommentStatusService.subscribe(_recipeObserver);_self.similar=success[0].data;getSelectedVariationData(_self.variationId||_self.mainVariation.RecipeVariationId).then(selectedVariationCallback).catch(function(error){console.log(error);}).finally(function(){PageStatusSubjectService.dispatch({isSectionLoaded:true});_self.isVariationLoaded=true;});}).catch(function(error){console.log(error);PageStatusSubjectService.dispatch({isSectionLoaded:true});});};function getIntroduction(){if(_self.recipe.Description&&_self.recipe.History){return _self.recipe.Description+'</br>'+_self.recipe.History;}
return _self.recipe.Description||_self.recipe.History;}
function getSelectedVariationData(selectedVariationId){_self.selectedVariationId=selectedVariationId;var variationPromises=[RecipeService.getReviews(selectedVariationId,reviewsParams),RecipeService.getUserReview(selectedVariationId)];return $q.all(variationPromises);}
function mapVariationRating(){return{Name:_self.selectedVariation.Name,Id:_self.selectedVariation.RecipeVariationId,EntityType:EntityTypes.RECIPE,Rating:_self.rating};}
function selectedVariationCallback(success){_self.reviews=success[0].data;_self.variationComment=success[1].data;UserCommentStatusService.dispatch({dividedScore:_self.rating.DividedScore,validScoreCount:_self.rating.ValidScoreCount,scoreCount:_self.rating.ScoreCount,commentRating:_self.rating.Score,userRating:_self.variationComment?CommentHelper.recalculateRatingForView(_self.variationComment.RatingScore):0,isCommentProcess:false,comment:_self.variationComment});}
function getMainVariation(){return _self.variations.filter(function(variation){return variation.IsMain;})[0];}
this.loadMoreComments=function(){if(_self.reviews.PageIndex===_self.reviews.NumberOfPages)
return;_self.isLoadingComments=true;_self.reviews.PageIndex=_self.reviews.PageIndex+1;RecipeService.getReviews(_self.selectedVariation.RecipeVariationId,{IsCritic:false,PageSize:_self.reviews.PageSize,PageIndex:_self.reviews.PageIndex}).then(function(success){_self.reviews.Data=_self.reviews.Data.concat(success.data.Data);_self.isLoadingComments=false;}).catch(function(error){_self.isLoadingComments=false;});};this.refreshUserReview=function(comment){RecipeService.getRating(_self.selectedVariation.RecipeVariationId).then(function(response){_self.variationComment=comment;_self.rating=response.data;_self.ratingDetails=mapVariationRating();}).catch(function(error){console.log(error);});};this.$onDestroy=function(){UserCommentStatusService.unsubscribe(_recipeObserver);PageStatusSubjectService.unsubscribe(_recipePageStatusObserver);GlobalStatusService.setMainPageType(null);};}]);;angular.module('tasteatlas').component('taSimilarRecipes',{bindings:{items:'<',template:'@'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-similar-recipes-mobile.html','desktop':'/content/scripts/app/components/shared/recipe/ta-similar-recipes-desktop.html'};return templates[$attrs.template];},controller:'taSimilarRecipesController'}).controller("taSimilarRecipesController",['constants','$q','FoodTypesService','RatingSharedService','EntityTypes','RecipeService',function(constants,$q,FoodTypesService,RatingSharedService,EntityTypes,RecipeService){var _self=this;this.constants=constants;this.displayedItems=[];this.similarItems=[];this.numberOfDisplayedItems=6;this.pageNum=0;this.recipeId;this.loadMoreSimilarData=false;this.showLoadMoreBtn=true;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.$onInit=function(){if(_self.template==='desktop'||_self.template==='desktop-redesign'){_self.numberOfDisplayedItems=8;}else{_self.numberOfDisplayedItems=6;}
if(_self.items=null||_self.items=='undefined'){angular.forEach(_self.items,(_self.template==='mobile'||_self.template==='mobile-redesign'?loadRatingDataMobile:loadRatingDataDesktop));_self.displayedItems=_self.items.slice(0,_self.numberOfDisplayedItems);}else{_self.recipeId=window.ta.detailsSecond.RecipeId;var promises=[RecipeService.getSimilarRedesign(_self.recipeId,_self.pageNum,_self.numberOfDisplayedItems)];}
$q.all(promises).then(function(success){_self.similarItemsSuccess=success[0].data.getSimilarRedesign||success[0].data;angular.forEach(_self.similarItemsSuccess.Data,(_self.template==='mobile'||_self.template==='mobile-redesign'?loadRatingDataMobile:loadRatingDataDesktop));if(_self.numberOfDisplayedItems>_self.similarItemsSuccess.Data.length){_self.showLoadMoreBtn=false;}}).then(function(){_self.similarItems=_self.similarItemsSuccess.Data;}).catch(function(error){console.log(error);});};this.loadMore=function(){_self.loadMoreSimilarData=true;_self.pageNum=_self.pageNum+1;RecipeService.getSimilarRedesign(_self.recipeId,_self.pageNum,_self.numberOfDisplayedItems).then(function(success){_self.LoadMoreSuccessItems=success.data;angular.forEach(_self.LoadMoreSuccessItems.Data,(_self.template==='mobile'||_self.template==='mobile-redesign'?loadRatingDataMobile:loadRatingDataDesktop));_self.similarItems=_self.similarItems.concat(_self.LoadMoreSuccessItems.Data);}).catch(function(error){console.log('Error: '+error);console.log('Error JSON: '+JSON.stringify(error));}).finally(function(){_self.loadMoreSimilarData=false;if((_self.numberOfDisplayedItems*(_self.pageNum+1))>_self.similarItems.length){_self.showLoadMoreBtn=false;}});};this.viewMore=function(){var displayedItemsLength=_self.displayedItems.length;_self.displayedItems=_self.displayedItems.concat(_self.items.slice(displayedItemsLength,displayedItemsLength+_self.numberOfDisplayedItems));};function loadRatingDataMobile(item){item.details={Name:item.Name,Id:item.EntityId,EntityType:item.EntityType,Score:item.Rating.Score||item.Rating.Score,ScoreCount:item.Rating.ScoreCount||item.Rating.ScoreCount,ValidScoreCount:item.Rating.ValidScoreCount||item.Rating.ValidScoreCount};}
function loadRatingDataDesktop(item){item.details={Name:item.Name,Id:item.EntityId,EntityType:item.EntityType,Rating:{Score:item.Score||item.Rating.Score,ScoreCount:item.ScoreCount||item.Rating.ScoreCount,ValidScoreCount:item.ValidScoreCount||item.Rating.ValidScoreCount,DividedScore:item.DividedScore||item.Rating.DividedScore,IsApproved:true},Score:item.Score||item.Rating.Score,ScoreCount:item.ScoreCount||item.Rating.ScoreCount,ValidScoreCount:item.ValidScoreCount||item.Rating.ValidScoreCount}}}]);;angular.module('tasteatlas').component('taVariationsList',{bindings:{items:'<',selectedVariationId:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/recipe/ta-variations-list.html','desktop':'/content/scripts/app/components/shared/recipe/ta-variations-list-desktop.html'};return templates[$attrs.template];},controller:'ta-variations-list-controller'}).controller('ta-variations-list-controller',['constants','MainHelper','FoodTypesService','RatingSharedService','EntityTypes','RecipeService',function(constants,MainHelper,FoodTypesService,RatingSharedService,EntityTypes,RecipeService){var _self=this;this.constants=constants;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.getRecipeTime=RecipeService.getRecipeTime;this.getRecipeTimeNoMin=RecipeService.getRecipeTimeNoMin;this.$onInit=function(){angular.forEach(_self.items,function(item){item.details={Name:item.Name,Id:item.RecipeVariationId,EntityType:EntityTypes.RECIPE,Rating:{Score:item.Score.Score,ScoreCount:item.Score.ScoreCount,ValidScoreCount:item.Score.ValidScoreCount,DividedScore:item.Score.DividedScore,IsApproved:true},Score:item.Score.Score,ScoreCount:item.Score.ScoreCount,ValidScoreCount:item.Score.ValidScoreCount};});_self.scrollToSection();};this.scrollToSection=function(){var matchUrl=window.location.href.split("/").pop();var recipeUrl=window.location.href;if(matchUrl!=="recipe"&&recipeUrl.match('/recipe')){var selectedVariation=document.getElementById('selected-variation');const scrollToVariation=selectedVariation.getBoundingClientRect().top+5;window.scrollTo({top:scrollToVariation,behavior:'smooth'});}}
this.includeHorizontalScroll=function(){return MainHelper.includeHorizontalScroll('recipe-variations-ul');};this.scroll=function(direction){var containers=document.querySelectorAll('#recipe-variations-ul');containers.forEach(container=>MainHelper.sideScroll(container,direction,15,618,15));};this.hasSomeImages=function(){return _self.items.some(function(item){return item.Image&&item.Image.Image;});};}]);;angular.module('tasteatlas').component('taRelatedNews',{bindings:{newsArticles:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/related-news/ta-related-news-mobile.html','desktop':'/content/scripts/app/components/shared/related-news/ta-related-news-desktop.html',};return templates[$attrs.template];},controller:'related-news-controller'}).controller('related-news-controller',[function(){var _self=this;}]);;angular.module('tasteatlas').component('taRelatedVideos',{bindings:{videos:'<'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/related-news/ta-related-videos-mobile.html','desktop':'/content/scripts/app/components/shared/related-news/ta-related-videos-desktop.html',};return templates[$attrs.template];},controller:'related-videos-controller'}).controller('related-videos-controller',['$sce',function($sce){var _self=this;this.mainVideo=null;this.secondaryVideos=[];this.openedVideoModal=false;this.selectedVideo=null;this.$onInit=function(){if(_self.videos.length===2){_self.secondaryVideos=_self.videos;}
else{_self.mainVideo=_self.videos[0];_self.secondaryVideos=_self.videos.slice(1);}};this.openVideoModal=function(event,video){event.stopPropagation();event.preventDefault();_self.selectedVideo=video;_self.openedVideoModal=true;};this.closeVideoModal=function(){_self.openedVideoModal=false;_self.selectedVideo=null;};this.trustSrc=function(src){return $sce.trustAsResourceUrl(src);};}]);;angular.module('tasteatlas').component('taSharedButton',{bindings:{type:'@',listItemsCounter:'=',showArrow:'<',buttonText:'@',listType:'=',isMobile:'<'},templateUrl:'/content/scripts/app/components/shared/shared-button/ta-shared-button.html',controller:'taSharedButtonController'}).controller("taSharedButtonController",["$scope","UserSubjectService","ProfileService","$timeout",function($scope,UserSubjectService,ProfileService,$timeout){var _self=this;_self.showShareIcons=false;_self.openShareListModal=false;_self.shareImage;_self.baseUrl=window.location.origin;_self.cdnUrl="https://cdn.tasteatlas.com";_self.me={}
this.$onInit=function(){_self.me=UserSubjectService.getUser();};this.openSharelinkByType=function(type){if(type=='facebook'){_self.socialLink="https://www.facebook.com/sharer/sharer.php?m2w&u="+_self.baseUrl+"/profile/"+_self.me.urlLink+"/"+angular.lowercase(_self.type)+"/"+_self.guidUrl;}
else if(type=='twitter'){_self.socialLink="https://twitter.com/intent/tweet?url="+_self.baseUrl+"/profile/"+_self.me.urlLink+"/"+angular.lowercase(_self.type)+"/"+_self.guidUrl;}
else if(type=='pinterest'){_self.socialLink="https://pinterest.com/pin/create/button/?url="+_self.baseUrl+"/profile/"+_self.me.urlLink+"/"+angular.lowercase(_self.type)+"/"+_self.guidUrl;}
else{_self.socialLink="https://www.linkedin.com/shareArticle?mini=true&url="+_self.baseUrl+"/profile/"+_self.me.urlLink+"/"+angular.lowercase(_self.type)+"/"+_self.guidUrl+"&title=Check my favorite foods list&summary=&source=";}
$timeout(function(){window.open(_self.socialLink,'_blank');});}
this.getRandomQuid=function(){ProfileService.GetRandomQuid().then(function(success){_self.guidUrl=success.data;}).catch(function(error){console.log(error);})}
this.openShareSocialIconsRow=function(event){if(event){if(_self.listItemsCounter>4){_self.getRandomQuid();_self.showShareIcons=!_self.showShareIcons;_self.getShareImageUrl(_self.me.urlLink,_self.me.userid,_self.listType);return}
else{_self.openShareListModal=true;_self.emitData={openShareListModal:_self.openShareListModal,type:_self.type}
$scope.$emit('openShareListModal',_self.emitData);document.body.classList.add('modal--open');return}}
if(event!==null){_self.showShareIcons=false;return}}
this.closeShareSocialIconsRow=function(event,closeBtn){if(event){if(closeBtn=='closeBtn'){_self.showShareIcons=false;}
else{$timeout(function(){_self.showShareIcons=false;},1000);}
return}}
this.getShareImageUrl=function(urlLink,userid,userListType){ProfileService.GetShareImageUrl(urlLink,userid,userListType).then(function(success){_self.shareImage=success.data;}).catch(function(error){console.error(error);});}
async function downloadSharedImage(imageUrl,imageName='my-favorite-list.jpeg',){const response=await fetch(imageUrl);const blobImage=await response.blob();const href=URL.createObjectURL(blobImage);const anchorElement=document.createElement('a');anchorElement.href=href;anchorElement.download=imageName;document.body.appendChild(anchorElement);anchorElement.click();document.body.removeChild(anchorElement);window.URL.revokeObjectURL(href);}
this.downloadSharedImageList=function(){if(!_self.shareImage){console.error('Share image is not available.');return}
downloadSharedImage(_self.cdnUrl+_self.shareImage,`my-favorite-${angular.lowercase(_self.type)}-list.jpeg`,).catch(err=>{console.log('Error downloading shared image: ',err);});}}]);;angular.module('tasteatlas').component('taSimilarListDesktop',{bindings:{items:'<',isRegion:'<'},templateUrl:'/content/scripts/app/components/shared/similar-list/ta-similar-list-desktop.html',controller:'taSimilarListDesktopController'}).controller("taSimilarListDesktopController",['constants','FoodTypesService','RatingSharedService',function(constants,FoodTypesService,RatingSharedService){var _self=this;this.constants=constants;this.displayedItems=[];this.numberOfDisplayedItems=8;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.$onInit=function(){FoodTypesService.loadItemRatingDetailsDesktop(_self.items);_self.displayedItems=_self.items.slice(0,_self.numberOfDisplayedItems);};this.viewMore=function(){var displayedItemsLength=_self.displayedItems.length;_self.displayedItems=_self.displayedItems.concat(_self.items.slice(displayedItemsLength,displayedItemsLength+_self.numberOfDisplayedItems));};this.getRegionName=function(region){if(region.RegionName&&region.CountryName){if(region.CountryRegionLevel==9){return region.RegionName}
return region.RegionName+", "+region.CountryName;}
else if(region.RegionName&&!region.CountryName){return region.RegionName;}
return region.CountryName||"";};}]);;angular.module('tasteatlas').component('taSimilarListMobile',{bindings:{items:'<',isRegion:'<'},templateUrl:'/content/scripts/app/components/shared/similar-list/ta-similar-list-mobile.html',controller:'taSimilarListMobileController'}).controller("taSimilarListMobileController",['$scope','constants','FoodTypesService','RatingSharedService',function($scope,constants,FoodTypesService,RatingSharedService){var _self=this;this.constants=constants;this.displayedItems=[];this.numberOfDisplayedItems=6;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.$onInit=function(){FoodTypesService.loadItemRatingDetailsMobile(_self.items);_self.displayedItems=_self.items.slice(0,_self.numberOfDisplayedItems);};this.viewMore=function(){var displayedItemsLength=_self.displayedItems.length;_self.displayedItems=_self.displayedItems.concat(_self.items.slice(displayedItemsLength,displayedItemsLength+_self.numberOfDisplayedItems));};this.getRegionName=function(region){if(region.RegionName&&region.CountryName){if(region.CountryRegionLevel==9){return region.RegionName}
return region.RegionName+", "+region.CountryName;}
else if(region.RegionName&&!region.CountryName){return region.RegionName;}
return region.CountryName||"";};}]);;angular.module('tasteatlas').component('taSubmitInformationDesktop',{bindings:{onCloseModal:'&'},templateUrl:'/content/scripts/app/components/shared/submit-information/ta-submit-information-desktop.html',controller:'taSubmitInformationDesktopController'}).controller("taSubmitInformationDesktopController",['CommentService','UserSubjectService','CommentHelper','$scope','$q','FilePickerService','MiscellaneousHelper','$timeout','$window','$rootScope',function(CommentService,UserSubjectService,CommentHelper,$scope,$q,FilePickerService,MiscellaneousHelper,$timeout,$window,$rootScope){var _self=this;this.isAnonymous=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isValid=false;this.isError=false;this.error='';this.emailPattern=MiscellaneousHelper.validators.email;this.data={email:'',content:'',photos:[]};this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();};this.closeModal=function(){_self.onCloseModal();};this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};this.submit=function(){$timeout(function(){if(_self.submitting)
return;_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return informationPost(photos);}).then(function(commentPosted){resetDataToDefaults();_self.onCloseModal();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetDataToDefaults();});});};function resetDataToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.submitting=false;_self.data.email='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){}
function informationPost(uploadedPhotos){var email=_self.data.email;var photos=uploadedPhotos||[];var content=_self.data.content+'\n'+$window.location.href.split('#modal')[0];return CommentService.informationPost({email:email,content:content,photos:photos});}
this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};_self.isLoginShown=false;this.toggleLogIn=function(){_self.isLoginShown=!_self.isLoginShown;};this.showSubmit=function(){if(_self.data.photos.length){return true&&!_self.submitting&&_self.informationForm.$valid;}
if(_self.informationForm.comment.$viewValue){return _self.informationForm.comment.$valid&&!_self.submitting&&_self.isValidPhotoNumber&&_self.informationForm.$valid;}
else if(!_self.informationForm.comment.$viewValue){return _self.data.photos.length&&!_self.submitting&&_self.informationForm.$valid;}};$scope.resetErrorOnChange=function(){if(_self.isError){_self.error='';_self.isError=false;}};$rootScope.$on("resetErrorOnChangeInfo",function(){$scope.resetErrorOnChange();});}]);;angular.module('tasteatlas').component('taSubmitInformationMobile',{templateUrl:'/content/scripts/app/components/shared/submit-information/ta-submit-information-mobile.html',controller:'taSubmitInformationMobileController'}).controller("taSubmitInformationMobileController",['CommentService','UserSubjectService','CommentHelper','$scope','$q','FilePickerService','MiscellaneousHelper','$timeout','$window','$rootScope',function(CommentService,UserSubjectService,CommentHelper,$scope,$q,FilePickerService,MiscellaneousHelper,$timeout,$window,$rootScope){var _self=this;this.isAnonymous=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isValid=false;this.isError=false;this.error='';this.emailPattern=MiscellaneousHelper.validators.email;this.isSubmitInformationShown=false;this.openModal=function(){_self.isSubmitInformationShown=true;};this.closeModal=function(){_self.isSubmitInformationShown=false;};this.data={email:'',content:'',photos:[]};this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();};this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};this.submit=function(){$timeout(function(){if(_self.submitting)
return;_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return informationPost(photos);}).then(function(commentPosted){_self.closeModal();resetDataToDefaults();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetDataToDefaults();});});};function resetDataToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.submitting=false;_self.data.email='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){}
function informationPost(uploadedPhotos){var email=_self.data.email;var photos=uploadedPhotos||[];var content=_self.data.content+'\n'+$window.location.href.split('#modal')[0];return CommentService.informationPost({email:email,content:content,photos:photos});}
this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};_self.isLoginShown=false;this.toggleLogIn=function(){_self.isLoginShown=!_self.isLoginShown;};this.showSubmit=function(){if(_self.data.photos.length){return true&&!_self.submitting&&_self.informationForm.$valid;}
if(_self.informationForm.comment.$viewValue){return _self.informationForm.comment.$valid&&!_self.submitting&&_self.isValidPhotoNumber&&_self.informationForm.$valid;}
else if(!_self.informationForm.comment.$viewValue){return _self.data.photos.length&&!_self.submitting&&_self.informationForm.$valid;}};$scope.resetErrorOnChangeMobile=function(){if(_self.isError){_self.error='';_self.isError=false;}};$rootScope.$on("resetErrorOnChangeInfoMobile",function(){$scope.resetErrorOnChangeMobile();});}]);;angular.module('tasteatlas').component('taSubmitInformationRecipe',{bindings:{onCloseModal:'&'},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-mobile.html','mobile-input':'/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-mobile-input.html','desktop':'/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe.html','desktop-input':'/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-input.html','header':'/content/scripts/app/components/shared/submit-information/ta-submit-information-recipe-header.html'};return templates[$attrs.template];},controller:'taSubmitInformationRecipeController'}).controller("taSubmitInformationRecipeController",['StatisticsService','CommentService','UserSubjectService','CommentHelper','$scope','$q','MiscellaneousHelper','$timeout','$window','$rootScope',function(StatisticsService,CommentService,UserSubjectService,CommentHelper,$scope,$q,MiscellaneousHelper,$timeout,$window,$rootScope){var _self=this;this.information=[];this.currentYear;var _self=this;this.isAnonymous=false;this.isValidPhotoNumber=true;this.isThanksVisible=false;this.submitting=false;this.isValid=false;this.isError=false;this.error='';this.emailPattern=MiscellaneousHelper.validators.email;this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();_self.currentYear=new Date().getFullYear();StatisticsService.getFooterStatistics().then(function success(response){_self.information=response.data;},function error(err){console.log(err);});};this.isSubmitInformationRecipeShown=false;this.toggleSubmitInformationRecipe=function(){_self.isSubmitInformationRecipeShown=!_self.isSubmitInformationRecipeShown;};this.closeModal=function(){_self.isSubmitInformationRecipeShown=false;};this.data={email:'',content:'',photos:[]};this.resetError=function(){if(_self.isError){_self.error='';_self.isError=false;}};this.submit=function(){$timeout(function(){if(_self.submitting)
return;_self.submitting=true;var photos=_self.data.photos||[];uploadPhotos({photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return informationPost(photos);}).then(function(commentPosted){_self.closeModal();resetDataToDefaults();}).catch(function(err){if(err.status===400){_self.isError=true;_self.error=err.data.ExceptionInformation;}else{_self.isError=false;_self.error='';}
resetDataToDefaults();});});};function resetDataToDefaults(){if(_self.data.content!==''||_self.data.photos.length>0)
_self.isThanksVisible=true;_self.submitting=false;_self.data.email='';_self.data.content='';_self.data.photos=[];}
function removeError(){_self.error='';_self.isError=false;}
function uploadPhotos(options){var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));return CommentService.imagesUpload({files:files,xhruploadprogress:uploadPhotosProgressCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
function uploadPhotosProgressCallback(event){}
function informationPost(uploadedPhotos){var email=_self.data.email;var photos=uploadedPhotos||[];var content=_self.data.content+'\n'+$window.location.href.split('#modal')[0];return CommentService.informationPost({email:email,content:content,photos:photos});}
this.isOtherOptionVisible=false;this.otherLoginOptions=function(){_self.isOtherOptionVisible=!_self.isOtherOptionVisible;};_self.isLoginShown=false;this.toggleLogIn=function(){_self.isLoginShown=!_self.isLoginShown;};this.showSubmit=function(){if(_self.data.photos.length){return true&&!_self.submitting&&_self.informationForm.$valid;}
if(_self.informationForm.comment.$viewValue){return _self.informationForm.comment.$valid&&!_self.submitting&&_self.isValidPhotoNumber&&_self.informationForm.$valid;}
else if(!_self.informationForm.comment.$viewValue){return _self.data.photos.length&&!_self.submitting&&_self.informationForm.$valid;}};$scope.resetErrorOnChangeMobile=function(){if(_self.isError){_self.error='';_self.isError=false;}};$rootScope.$on("resetErrorOnChangeInfoMobile",function(){$scope.resetErrorOnChangeMobile();});}]);;angular.module("tasteatlas").service("FoodTypesService",["UserCacheService","$filter","$window","ItemTypes",function(UserCacheService,$filter,$window,ItemTypes){var _self=this;this.loadDisplayItemsMobile=function(){_self.loadItemRatingDetailsMobile(this.data);findParentNamesForChildren(this.data);if(this.data.length>this.maxNumberOfItems){this.displayItems=this.data.slice(0,this.maxNumberOfItems);}
else{this.displayItems=this.data;}};this.loadDisplayItemsDesktop=function(){_self.loadItemRatingDetailsDesktop(this.data);findParentNamesForChildren(this.data);this.displayItems=this.data;};function findParentNamesForChildren(data){var parent;angular.forEach(data,function(item){parent=$filter('filter')(data,function(dataItem){return dataItem.Id===item.ParentId;})[0];if(parent){item.parentLabel=parent.Name;item.parentUrlLink=parent.UrlLink;}});}
this.loadItemRatingDetailsMobile=function(collection){angular.forEach(collection,function(item){item.details={Name:item.Name,Id:item.Id,EntityType:item.EntityType,Score:item.Score.Score,ScoreCount:item.Score.ScoreCount,ValidScoreCount:item.Score.ValidScoreCount,DividedScore:item.Score.DividedScore,IsApproved:true};if(item.Children&&item.Children.length){_self.loadItemRatingDetailsMobile(item.Children);}});};this.loadItemRatingDetailsDesktop=function(collection){angular.forEach(collection,function(item){item.details={Name:item.Name,Id:item.Id,EntityType:item.EntityType,Rating:{Score:item.Score.Score,ScoreCount:item.Score.ScoreCount,ValidScoreCount:item.Score.ValidScoreCount,DividedScore:item.Score.DividedScore,IsApproved:true},Score:item.Score.Score,ScoreCount:item.Score.ScoreCount,ValidScoreCount:item.Score.ValidScoreCount};if(item.Children&&item.Children.length){_self.loadItemRatingDetailsDesktop(item.Children);}});};this.onFoodTypesOrder=function(orderBy){this.onOrderChange({orderBy:orderBy});};this.loadMore=function(){var currentLength=this.displayItems.length;this.displayItems=this.displayItems.concat(this.data.slice(currentLength,this.maxNumberOfItems+currentLength));};this.getTypeOrigin=function(type){var region=type.Region;if(region.RegionName&&region.CountryName){return region.RegionName+", "+region.CountryName;}
else if(region.RegionName){return region.RegionName;}
return region.CountryName||"";};this.openTypeChildren=function(type){this.selectedType=type;this.typeChildrenOpened=true;};this.closeTypeChildren=function(){this.selectedType=null;this.typeChildrenOpened=false;};this.isFoodRated=function(food){if(food.EntityType===ItemTypes.Dish){return!!UserCacheService.getDishCommentById(food.Id);}
else if(food.EntityType===ItemTypes.Ingredient){return!!UserCacheService.getIngredientCommentById(food.Id);}
else if(food.EntityType===ItemTypes.RecipeVariation){return!!UserCacheService.getRecipeVariationCommentById(food.Id);}};this.getFoodRatingScore=function(food){var comment;if(food.EntityType===ItemTypes.Dish){comment=UserCacheService.getDishCommentById(food.Id);return comment?comment.DividedRating:null;}
else if(food.EntityType===ItemTypes.Ingredient){comment=UserCacheService.getIngredientCommentById(food.Id);return comment?comment.DividedRating:null;}
else if(food.EntityType===ItemTypes.Event){comment=UserCacheService.getEventCommentById(food.Id);return comment?comment.DividedRating:null;}
else if(food.EntityType===ItemTypes.RecipeVariation){comment=UserCacheService.getRecipeVariationCommentById(food.Id);return comment?comment.DividedRating:null;}};this.isFoodRatedV2=function(Id,EntityType){if(EntityType===ItemTypes.Dish){return!!UserCacheService.getDishCommentById(Id);}
else if(EntityType===ItemTypes.Ingredient){return!!UserCacheService.getIngredientCommentById(Id);}
else if(EntityType===ItemTypes.RecipeVariation){return!!UserCacheService.getRecipeVariationCommentById(Id);}};this.getFoodRatingScoreV2=function(Id,EntityType){var comment;if(EntityType===ItemTypes.Dish){comment=UserCacheService.getDishCommentById(Id);return comment?comment.Rating/2:null;}
else if(EntityType===ItemTypes.Ingredient){comment=UserCacheService.getIngredientCommentById(Id);return comment?comment.Rating/2:null;}
else if(EntityType===ItemTypes.Event){comment=UserCacheService.getEventCommentById(Id);return comment?comment.Rating/2:null;}
else if(EntityType===ItemTypes.RecipeVariation){comment=UserCacheService.getRecipeVariationCommentById(Id);return comment?comment.Score/2:null;}};this.siblingHasGroup=function(item,index){var isWideScreen=$window.innerWidth>=413;if(!isWideScreen){var currentItemIsFirstInRow=index%2===0;if(currentItemIsFirstInRow){var nextItemHasGroup=this.displayItems[index+1].Children.length;return nextItemHasGroup;}
else{var previousItemHasGroup=this.displayItems[index-1].Children.length;return previousItemHasGroup;}}
else{return _self.siblingHasGroupWideScreen.call(this,index);}};this.siblingHasGroupWideScreen=function(index){var currentItemIsFirstInRow=index%3===0;var currentItemIsSecondInRow=false;var currentItemIsThirdInRow=false;if(index>=1){currentItemIsSecondInRow=(index-1)%3===0;}
if(index>=2){currentItemIsThirdInRow=(index-2)%3===0;}
var nextItem=this.displayItems[index+1];var previousItem=this.displayItems[index-1];var secondNextItem=this.displayItems[index+2];var secondPreviousItem=this.displayItems[index-2];var nextItemHasGroup=nextItem&&nextItem.Children.length;var previousItemHasGroup=previousItem&&previousItem.Children.length;if(currentItemIsFirstInRow){var secondNextItemHasGroup=secondNextItem&&secondNextItem.Children.length;return nextItemHasGroup||secondNextItemHasGroup;}
if(currentItemIsSecondInRow){return nextItemHasGroup||previousItemHasGroup;}
if(currentItemIsThirdInRow){var secondPreviousItemHasGroup=secondPreviousItem&&secondPreviousItem.Children.length;return previousItemHasGroup||secondPreviousItemHasGroup;}};this.showItemCategorySmallScreen=function(index){var currentItemIsFirstInRow=index%2===0;var nextItem=this.displayItems[index+1];var previousItem=this.displayItems[index-1];if(currentItemIsFirstInRow){var nextItemCategory=nextItem&&nextItem.parentLabel;var nextItemHasGroup=nextItem&&nextItem.Children.length;return nextItemCategory||nextItemHasGroup;}
else{var previousItemCategory=previousItem&&previousItem.parentLabel;var previousItemHasGroup=previousItem&&previousItem.Children.length;return previousItemCategory||previousItemHasGroup;}};this.showItemCategoryWideScreen=function(index){var currentItemIsFirstInRow=index%3===0;var currentItemIsSecondInRow=false;var currentItemIsThirdInRow=false;if(index>=1){currentItemIsSecondInRow=(index-1)%3===0;}
if(index>=2){currentItemIsThirdInRow=(index-2)%3===0;}
var nextItem=this.displayItems[index+1];var previousItem=this.displayItems[index-1];var secondNextItem=this.displayItems[index+2];var secondPreviousItem=this.displayItems[index-2];var nextItemCategory=nextItem&&nextItem.parentLabel;var nextItemHasGroup=nextItem&&nextItem.Children.length;var previousItemCategory=previousItem&&previousItem.parentLabel;var previousItemHasGroup=previousItem&&previousItem.Children.length;if(currentItemIsFirstInRow){var secondNextItemCategory=secondNextItem&&secondNextItem.parentLabel;var secondNextItemHasGroup=secondNextItem&&secondNextItem.Children.length;return nextItemCategory||nextItemHasGroup||secondNextItemCategory||secondNextItemHasGroup;}
if(currentItemIsSecondInRow){return nextItemCategory||nextItemHasGroup||previousItemCategory||previousItemHasGroup;}
if(currentItemIsThirdInRow){var secondPreviousItemCategory=secondPreviousItem&&secondPreviousItem.parentLabel;var secondPreviousItemHasGroup=secondPreviousItem&&secondPreviousItem.Children.length;return previousItemCategory||previousItemHasGroup||secondPreviousItemCategory||secondPreviousItemHasGroup;}};this.showItemCategory=function(item,index){if(item.parentLabel){return true;}
if(item.Children.length){return false;}
var isWideScreen=$window.innerWidth>=413;if(!isWideScreen){return _self.showItemCategorySmallScreen.call(this,index);}
else{return _self.showItemCategoryWideScreen.call(this,index);}};}]);;angular.module('tasteatlas').component('taFoodTypesDesktop',{bindings:{data:'<',name:'<',onOrderChange:'&'},templateUrl:'/content/scripts/app/components/shared/types/ta-food-types-desktop.html',controller:'taFoodTypesDesktopController'}).controller('taFoodTypesDesktopController',['MainHelper','constants','FoodTypesService','RatingSharedService',function(MainHelper,constants,FoodTypesService,RatingSharedService){var _self=this;this.constants=constants;this.displayItems=[];this.maxNumberOfItems=4;this.foodOrderOptions=MainHelper.getOrderByArray();this.typeChildrenOpened=false;this.selectedType=null;this.loadDisplayItems=FoodTypesService.loadDisplayItemsDesktop;this.onFoodTypesOrder=FoodTypesService.onFoodTypesOrder;this.loadMore=FoodTypesService.loadMore;this.getTypeOrigin=FoodTypesService.getTypeOrigin;this.openTypeChildren=FoodTypesService.openTypeChildren;this.closeTypeChildren=FoodTypesService.closeTypeChildren;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.$onInit=function(){_self.loadDisplayItems();};this.$onChanges=function(changeObj){if(changeObj&&changeObj.data&&changeObj.data.currentValue){_self.loadDisplayItems();}};}]);;angular.module('tasteatlas').component('taFoodTypesMobile',{bindings:{data:'<',name:'<',onOrderChange:'&'},templateUrl:'/content/scripts/app/components/shared/types/ta-food-types-mobile.html',controller:'taFoodTypesMobileController'}).controller('taFoodTypesMobileController',['MainHelper','constants','FoodTypesService','$window','RatingSharedService',function(MainHelper,constants,FoodTypesService,$window,RatingSharedService){var _self=this;this.constants=constants;this.displayItems=[];this.maxNumberOfItems=8;this.foodOrderOptions=MainHelper.getOrderByArray();this.typeChildrenOpened=false;this.selectedType=null;this.loadDisplayItems=FoodTypesService.loadDisplayItemsMobile;this.onFoodTypesOrder=FoodTypesService.onFoodTypesOrder;this.loadMore=FoodTypesService.loadMore;this.getTypeOrigin=FoodTypesService.getTypeOrigin;this.openTypeChildren=FoodTypesService.openTypeChildren;this.closeTypeChildren=FoodTypesService.closeTypeChildren;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.$onInit=function(){_self.maxNumberOfItems=$window.innerWidth>=413?12:8;_self.loadDisplayItems();};this.$onChanges=function(changeObj){if(changeObj&&changeObj.data&&changeObj.data.currentValue){_self.loadDisplayItems();}};this.showItemCategory=FoodTypesService.showItemCategory;this.siblingHasGroup=FoodTypesService.siblingHasGroup;}]);;angular.module('tasteatlas').component('taTypesDesktop',{bindings:{data:'<',name:'<'},templateUrl:'/content/scripts/app/components/shared/types/ta-types-desktop.html',controller:'taTypesDesktopController'}).controller('taTypesDesktopController',['$scope','constants',function($scope,constants){var _self=this;this.constants=constants;this.$onInit=function(){setTimeout(function(){var elem=document.querySelector('.grid');var msnry=new Masonry(elem,{columnWidth:'.grid-sizer',gutter:'.gutter-sizer',itemSelector:'.grid-item',percentPosition:true,horizontalOrder:true});},50);hasAnyChildren();};this.hasChildren=false;function hasAnyChildren(){if(_self.data.length===0)
return;angular.forEach(_self.data,function(value,key){if(_self.data[key].Children.length>0){_self.hasChildren=true;return;}});}}]);;angular.module('tasteatlas').component('taToplistItemsFetch',{bindings:{id:'<',path:'<',isRecipeArticle:'<',template:'@'},templateUrl:function($element,$attrs){return '/toplistarticles/toplistitems?topListArticleId='+$attrs.id+'&isRecipeArticle='+$attrs.isRecipeArticle+'&template='+$attrs.template;}});;angular.module('tasteatlas').value('TopListArticleListRanges',{0:'',1:'Top10',2:'Top50',3:'Top100'});;angular.module("tasteatlas").service("TopListArticleSharedService",["RegionLevels",function(RegionLevels){var _self=this;var articleData={TopListArticleType:null};var cityArticleEnums=[35,37];cityArticleEnums.nationalDishesInCity=35;cityArticleEnums.localFoodInCity=37;this.typeOfArticleEnum=38;this.varietyArticleEnum=39;this.recipeArticleEnums=[40,41,42,43,44,45,46,47,48,49,50,51];this.ingredientArticleEnums=[52,53,54,55,56,57,58,59,60];var toplistArticlesV2Enums=[];toplistArticlesV2Enums.push(this.typeOfArticleEnum);toplistArticlesV2Enums.push(this.varietyArticleEnum);toplistArticlesV2Enums=toplistArticlesV2Enums.concat(this.recipeArticleEnums);toplistArticlesV2Enums=toplistArticlesV2Enums.concat(this.ingredientArticleEnums);this.setData=function setData(key,data){articleData[key]=data;};this.getCityArticleEnums=function(){return cityArticleEnums;};this.topListArticleTitlePrefixes={0:"",1:"Traditional ",2:"Local "};this.getTopListType=function(topListType){var bestRatedEnums=[1,2,3,4,5,6,19,22,23,24,25,39,40,43,44,49];var mostPopularEnums=[7,8,9,10,11,12,26,27,28,29,38,41,45,46,50,55,56,57];var worstRatedEnums=[13,14,15,16,17,18,21,30,31,32,33,42,47,48,51];if(bestRatedEnums.includes(topListType)){return "best rated";}
else if(mostPopularEnums.includes(topListType)){return "most popular";}
else if(worstRatedEnums.includes(topListType)){return "worst rated";}
else{return "";}};this.getTopListTypeForBadge=function(topListType){var result=_self.getTopListType(topListType);if(!result&&cityArticleEnums.includes(topListType)){result="best";}
return result;};this.getTopListFoodType=function(topListType){var foodEnums=[3,4,9,10,15,16,37];var dishEnums=[1,2,7,8,13,14,24,25,28,29,32,33,35];if(foodEnums.includes(topListType)){return "food";}
else if(dishEnums.includes(topListType)){return "dish";}
else{return "";}};this.getSpecialArticleTypes=function(topListType,names){var beveragesEnums=[19,20,21];var ingredientsEnums=[22,23,26,27,30,31];var dishesEnums=[24,25,28,29,32,33];if(beveragesEnums.includes(topListType)){return names.beverage;}
else if(ingredientsEnums.includes(topListType)){return names.product;}
else if(dishesEnums.includes(topListType)){return names.dish;}
else{return "";}};this.getMapLink=function(){if(this.details.CurrentArticle.Region&&this.group.UrlLink){return this.details.CurrentArticle.Region.UrlLink+"/"+this.group.UrlLink;}
else if(this.group.UrlLink){return this.group.UrlLink;}
else{return this.details.CurrentArticle.Region.UrlLink;}};this.getViewMapEntity=function(){var region=this.details.CurrentArticle.Region;var preferredAdjective=region&&(region.RegionAdjective||region.CountryAdjective);if(region&&preferredAdjective&&this.group.PluralName){return preferredAdjective+" "+this.group.PluralName;}
if(region&&region.RegionName&&this.group.PluralName){return this.group.PluralName+" in "+region.RegionName;}
if(region&&region.CountryName&&region.RegionLevel>RegionLevels.Undefined&&region.RegionLevel<=RegionLevels.CapitalCity){return region.CountryName;}
if(region){return region.RegionName;}
return "World "+this.group.PluralName;};this.createViewMapText=function(){return "View "+_self.getViewMapEntity.apply(this)+" "+_self.getMapOrListText.apply(this);};this.getMapOrListText=function(){var mapList="List and Map";if(this.details.CurrentArticle.Region&&!this.group.UrlLink){mapList="Map";}
return mapList;};this.createTitlePartsV2=function(article){var titleParts=article.Title.split('||');return{top:titleParts[0],middle:titleParts[1],bottom:titleParts[2]};};this.findTopListCount=function(article){var isTop10Article=this.TopListArticleListRanges[article.TopListArticleListRange]==="Top10"&&article.CurrentItemCount&&article.CurrentItemCount<10;var isUnspecifiedTopArticle=[_self.typeOfArticleEnum,_self.varietyArticleEnum].includes(article.TopListArticleType);if(isTop10Article||isUnspecifiedTopArticle){return "Top "+article.CurrentItemCount;}
return getListRangeForDisplay(this.TopListArticleListRanges[article.TopListArticleListRange]);};this.createNextTitleParts=function(article){var titleParts=_self.createTitlePartsV2(article);return{top:_self.getListRange.apply(this,[article.TopListArticleListRange]),middle:titleParts.middle+' '+(titleParts.bottom||''),bottom:''};};this.createRandomArticleTitlePartsV2=function(article){var titleParts=article.Title.split('||');return{top:titleParts[0],bottom:titleParts[1]+' '+(titleParts[2]||'')};};this.getFoodType=function(group,article){var specialArticleType=_self.getSpecialArticleTypes(article.TopListArticleType,{beverage:'beverages',dish:'dishes',product:'food products'});var topListArticlePrefix=_self.getTitlePrefix(article);if(article.TopListArticleType===cityArticleEnums.nationalDishesInCity){var cityFoods={specialType:"food products & drinks",normalType:"dishes & drinks",drinks:"drinks",dishes:"dishes"};return _self.getFoodTypeForRegionLevel.apply(this,[article,group,topListArticlePrefix,specialArticleType,cityFoods]);}
else if(article.TopListArticleType===cityArticleEnums.localFoodInCity){var cityLocalFoods={specialType:"foods & drinks",normalType:"foods & drinks",drinks:"drinks",dishes:"foods"};return _self.getFoodTypeForRegionLevel.apply(this,[article,group,topListArticlePrefix,specialArticleType,cityLocalFoods]);}
else{var regionFoods={specialType:"food products & beverages",normalType:"foods & beverages",drinks:"drinks",dishes:"foods"};return _self.getFoodTypeForRegionLevel.apply(this,[article,group,topListArticlePrefix,specialArticleType,regionFoods]);}};this.getFoodTypeForRegionLevel=function getFoodTypeForRegionLevel(article,group,topListArticlePrefix,specialArticleType,foods){if(group.PluralName){return topListArticlePrefix+group.PluralName.toLowerCase();}
else if(article.HasBeverage&&article.HasFood){return topListArticlePrefix+(specialArticleType?foods.specialType:foods.normalType);}
else if(article.HasBeverage&&!article.HasFood){return topListArticlePrefix+foods.drinks;}
else if(specialArticleType){return topListArticlePrefix+specialArticleType;}
else{return topListArticlePrefix+foods.dishes;}};this.getTitlePrefix=function(article){var topListArticlePrefix="";if((article.Region&&!article.Region.RegionAdjective)||cityArticleEnums.includes(article.TopListArticleType)){topListArticlePrefix=_self.topListArticleTitlePrefixes[article.TopListArticleTitlePrefix];}
if(article.SourceRegionAdjective){topListArticlePrefix=article.SourceRegionAdjective+" ";}
return topListArticlePrefix;};this.getListRange=function(listRange){if(this.TopListArticleListRanges[listRange]==="Top10"){return "(10-1)";}
else if(this.TopListArticleListRanges[listRange]==="Top50"){return "(50-11)";}
else if(this.TopListArticleListRanges[listRange]==="Top100"){return "(100-51)";}
else{return "";}};this.headerTitleVisible=function(){var hasRegion=!!this.details.CurrentArticle.Region;var isWorstRated=_self.getTopListType(this.details.CurrentArticle.TopListArticleType)==="worst rated";if(!hasRegion||isWorstRated){return false;}
if(this.details.CurrentArticle.Region.RegionLevel>RegionLevels.Undefined){return true;}
return false;};this.getWhereToEatTitle=function getWhereToEatTitle(name,region){var isRegionCountry=region&&(region.RegionLevel===RegionLevels.Country);var isCityArticle=cityArticleEnums.includes(articleData.TopListArticleType);if(isCityArticle||isRegionCountry){return "Where to eat the best "+name+" in "+region.RegionName;}
return "Where to eat the best "+name+" in the world";};this.getPreTitle=function getPreTitle(){var consumeAction="eat";var hasBeverage=this.details.CurrentArticle.HasBeverage;var hasFood=this.details.CurrentArticle.HasFood;if(hasBeverage&&!hasFood){consumeAction="drink";}
if(hasBeverage&&hasFood){consumeAction="eat & drink";}
if(cityArticleEnums.nationalDishesInCity===articleData.TopListArticleType){return "What to "+consumeAction+" in "+this.details.CurrentArticle.Region.RegionName+"? "+"Where to "+consumeAction+" in "+this.details.CurrentArticle.Region.RegionName+"?";}
return "What to "+consumeAction+" in "+(this.details.CurrentArticle.Region.RegionPrefix||"")+" "+this.details.CurrentArticle.Region.RegionName+"?";};this.getSummaryText=function getSummaryText(){if(this.details.CurrentArticle.TopListArticleType===cityArticleEnums.nationalDishesInCity){return "The best traditional "+(this.details.CurrentArticle.SourceRegionAdjective||"")+" dishes in "+this.details.CurrentArticle.Region.RegionName+" and the best authentic restaurants that make them, recommended by industry professionals.";}
return "";};this.isToplistArticleV2=function(topListArticleType){return toplistArticlesV2Enums.includes(topListArticleType);};this.findMapTitle=function findMapTitle(){var group=this.details.CurrentArticle.DishGroup||this.details.CurrentArticle.IngredientGroup||{};if(!this.details.CurrentArticle.Region){return{bottom:group.PluralName||""};}
var adjective=this.details.CurrentArticle.Region.RegionAdjective||this.details.CurrentArticle.Region.CountryAdjective;var aliment=group.PluralName||"Food";if(this.details.CurrentArticle.IngredientGroup&&this.details.CurrentArticle.IngredientGroup.UrlLink==="beverages"){aliment="Beverages";}
return{bottom:adjective+" "+aliment};};this.overrideValidScoreCountBestWorstRated=function(details){var articleType=_self.getTopListType(details.CurrentArticle.TopListArticleType);var isBestRatedArticleType=articleType==='best rated';var isWorstRatedArticleType=articleType==='worst rated';if(isBestRatedArticleType||isWorstRatedArticleType){angular.forEach(details.Items,function(item){if(item.ValidScoreCount<5){item.ValidScoreCount=5;}});}};this.getRecipeTime=function(recipeTimeHours,recipeTimeMinutes){if(recipeTimeHours){return recipeTimeHours+' h '+(recipeTimeMinutes?(recipeTimeMinutes+' min'):'');}
return recipeTimeMinutes+' min';};function getListRangeForDisplay(range){var parts=range.split("Top");if(range.indexOf("Top")>-1&&parts[1]){return "Top "+parts[1];}
return range;}
this.isMostPopularArticleWorldCountry=function(topListArticleType,region){var type=_self.getTopListType(topListArticleType);var isWorldArticle=!region;var isCountryArticle=false;if(!isWorldArticle){isCountryArticle=region.RegionLevel===RegionLevels.Country;}
return type==='most popular'&&(isWorldArticle||isCountryArticle);};this.getDescriptionChunkNumber=function(topListArticleType,region){if(_self.isMostPopularArticleWorldCountry(topListArticleType,region)){return 2;}
return 1;};}]);;angular.module('tasteatlas').config(['$httpProvider',function($httpProvider){$httpProvider.interceptors.push('AuthorizationInterceptorFactory');}]).constant('mapConfig',{basemapTilesUrl:'https://cdn.tasteatlas.com/api/basemap/light_blue/{z}/{x}/{y}.png',basemapTiles2xUrl:'https://cdn.tasteatlas.com/api/basemap/light_blue/{z}/{x}/{y}@2x.png',overlayTilesUrl:"https://taosm.tasteatlas.com/osm/{z}/{x}/{y}.png",selectedFeatureZIndex:1100000,pinZIndex:1000000,maxZoomLevel:9,minZoomLevel:3,zoomFactor:2}).constant('miscConfig',{});;angular.module('tasteatlas').directive('taBindHtmlUnsafe',function(){function link(scope,element,attrs){var update=function(){element.html(scope.taBindHtmlUnsafe);};attrs.$observe('taBindHtmlUnsafe',function(value){update();});}
return{link:link,scope:{taBindHtmlUnsafe:'='}};}).directive('taBindHtmlOnce',function(){function link(scope,element,attrs){element.html(scope.taBindHtmlOnce);}
return{link:link,scope:{taBindHtmlOnce:'='}};}).directive('taFileChange',[function($parse){return{restrict:'A',scope:{handler:'&'},link:function(scope,element){element.on('change',function(event){scope.$apply(function(){scope.handler({files:event.target.files});});});}};}]).directive('elemReady',["$parse",function($parse){return{restrict:'A',link:function($scope,elem,attrs){elem.ready(function(){var func=$parse(attrs.elemReady);func($scope);});}};}]);;angular.module('tasteatlas').directive('clickOutside',['$document','$timeout',function($document,$timeout){return{link:function postLink(scope,element,attrs){var onClick=function(event){var isExcluded=attrs.exclude&&event.target.className.includes(attrs.exclude);var isChild=$(element).has(event.target).length>0;var isSelf=element[0]===event.target;var isInside=isChild||isSelf;if(!isInside&&!isExcluded){scope.$apply(attrs.clickOutside);}};$timeout(function(){$document.bind('mousedown',onClick);});element.on('$destroy',function(){$document.unbind('mousedown',onClick);});}};}]);;angular.module('tasteatlas').directive('readMore',['$compile','TextTransformService',function($compile,TextTransformService){return{restrict:'A',scope:{readMoreTxt:"@",numberOfLetters:"@"},link:function(scope,element,attrs){scope.collapsed=false;var maxLength=scope.numberOfLetters;var text=scope.readMoreTxt;scope.firstPart=TextTransformService.findFirstPartByLetters(maxLength,text);scope.secondPart=String(text).substring(maxLength,text.length);if(maxLength>=scope.readMoreTxt.length){compileElements();}else{compileReadMoreElements();}
scope.toggle=function(){element.empty();var expanded=$compile('<div class="read-more--hidden">'+scope.readMoreTxt+'</div>')(scope);element.append(expanded);};function compileElements(){element.empty();var textContainer=$compile('<div class="read-more--hidden">'+scope.readMoreTxt+'</div>')(scope);element.append(textContainer);}
function compileReadMoreElements(){element.empty();var textContainer=$compile('<div class="read-more--hidden">'+scope.firstPart+'... <span class="read-more" ng-click="toggle()">Read more</span></div>')(scope);element.append(textContainer);}}};}]).directive('readMoreBySentence',['$compile','TextTransformService',function($compile,TextTransformService){function getFirstPartFunction(chunks){var initialChunkNumber=Number.parseInt(chunks);if(initialChunkNumber===1){return TextTransformService.getFirstPartOneChunk;}
else if(initialChunkNumber===2){return function(dotsInText,position){return TextTransformService.getFirstPartNChunks(dotsInText,position,1);};}
else{return function(dotsInText,position){return TextTransformService.getFirstPartNChunks(dotsInText,position,2);};}}
return{restrict:'A',scope:{readMoreTxt:"@",readMoreUrlLink:"@",initialChunkNumber:"@",visibleChunkSize:"@",readMoreLabel:"@",maxCharacters:"=",blockRenderHidden:"="},link:function(scope,element,attrs){var text=scope.readMoreTxt;var urlLink=scope.readMoreUrlLink;scope.collapsed=false;var maxCharacters=scope.maxCharacters||500;var visibleChunkSize=scope.visibleChunkSize||4;var readMoreLabel=scope.readMoreLabel||"Read more";if(scope.readMoreLabel==="NONE"){readMoreLabel="";}
var textTransformFunction=function(text){return TextTransformService.makeLineBreaks(text);};if(TextTransformService.findNumberOfChunks(text)<=visibleChunkSize){return compileElements();}
var dotsInText=TextTransformService.findAllSingleDots(text);var firstPartFunction=getFirstPartFunction(scope.initialChunkNumber);var endIndexOfFirstPart=firstPartFunction(dotsInText,0)+1;scope.firstPart=String(text).substring(0,endIndexOfFirstPart);scope.secondPart=String(text).substring(endIndexOfFirstPart,text.length);if(scope.secondPart.length===0||text.length<maxCharacters){compileElements();}else{compileReadMoreElements();}
scope.toggle=function(){element.empty();var expanded=$compile('<div class="read-more--hidden">'+textTransformFunction(scope.readMoreTxt)+'</div>')(scope);element.append(expanded);};function compileElements(){element.empty();var textContainer=$compile('<div class="read-more--hidden">'+textTransformFunction(scope.readMoreTxt)+'</div>')(scope);element.append(textContainer);}
function compileReadMoreElements(){element.empty();var textContainer;if(urlLink){textContainer=$compile('<div class="read-more--link">'+textTransformFunction(scope.firstPart)+'&nbsp; <a class="read-more" href="'+urlLink+'" target="_blank">'+readMoreLabel+'</a></div>')(scope);}
else{textContainer=$compile('<div class="read-more--hidden">'+textTransformFunction(scope.firstPart)+'&nbsp; <span class="read-more" ng-click="toggle()">'+readMoreLabel+'</span></div>')(scope);}
element.append(textContainer);if(!scope.blockRenderHidden){var hiddenTextContainer=$compile('<div class="read-more--hidden read-more--display-hidden">'+textTransformFunction(scope.secondPart))(scope);element.append(hiddenTextContainer);}}}};}]).directive('readMoreByQuizSentence',['$compile','TextTransformService',function($compile,TextTransformService){function getFirstPartFunction(chunks){var initialChunkNumber=Number.parseInt(chunks);if(initialChunkNumber===1){return TextTransformService.getFirstPartOneChunk;}
else if(initialChunkNumber===2){return function(dotsInText,position){return TextTransformService.getFirstPartNChunks(dotsInText,position,1);};}
else{return function(dotsInText,position){return TextTransformService.getFirstPartNChunks(dotsInText,position,2);};}}
return{restrict:'A',scope:{readMoreTxt:"@",readMoreUrlLink:"@",initialChunkNumber:"@",visibleChunkSize:"@",readMoreLabel:"@",learnMoreAbout:"@",bottomLearnMoreTxt:"@",maxCharacters:"=",blockRenderHidden:"="},link:function(scope,element,attrs){var text=scope.readMoreTxt;var urlLink=scope.readMoreUrlLink||"";scope.collapsed=false;var maxCharacters=scope.maxCharacters||50;var visibleChunkSize=scope.visibleChunkSize||1;var readMoreLabel=scope.readMoreLabel||"Read more";var learnMoreAbout=scope.learnMoreAbout||"";var bottomLearnMoreTxt=scope.bottomLearnMoreTxt||"(OPENS IN NEW TAB, READ LATER)";if(scope.readMoreLabel==="NONE"){readMoreLabel="";}
var textTransformFunction=function(text){return TextTransformService.makeLineBreaks(text);};var dotsInText=TextTransformService.findAllSingleDots(text);var firstPartFunction=getFirstPartFunction(scope.initialChunkNumber);var endIndexOfFirstPart=firstPartFunction(dotsInText,0)+1;scope.firstPart=String(text).substring(0,endIndexOfFirstPart);scope.secondPart=String(text).substring(endIndexOfFirstPart,text.length);compileReadMoreElements();scope.toggle=function(){element.empty();var expanded=$compile('<div class="read-more--hidden">'+textTransformFunction(scope.readMoreTxt)+'</div>')(scope);element.append(expanded);};function compileReadMoreElements(){element.empty();var textContainer=$compile('<div class="description-wrapper__description-link">'+scope.firstPart+'<br> <a class="description-wrapper__read-more" href="'+urlLink+'" target="_blank">'+readMoreLabel+' '+learnMoreAbout+'<span>'+bottomLearnMoreTxt+'</span></a></div>')(scope);element.append(textContainer);}}};}]).directive('readMoreArticle',['$compile','TextTransformService',function($compile,TextTransformService){return{restrict:'A',scope:{text:"@",numParagraphs:'='},link:function(scope,element){var text=scope.text;var numParagraphs=scope.numParagraphs||3;var readMoreLabel="Read more";var paragraphs=TextTransformService.findParagraphPositions(text);if(paragraphs.length<=numParagraphs){return compileEntireText();}
var parts=TextTransformService.breakToplistDescription(text,paragraphs[numParagraphs-1]);compileWithReadMore();scope.toggle=function(){element.empty();var expanded=$compile(text)(scope);element.append(expanded);};function compileEntireText(){element.empty();var textContainer=$compile('<div>'+text+'</div>')(scope);element.append(textContainer);}
function compileWithReadMore(){element.empty();var firstPartClosingTagTrimmed=parts.firstPart.substr(0,parts.firstPart.length-"</p>".length);var textContainer=$compile(firstPartClosingTagTrimmed+'&nbsp; <span class="read-more read-more--red" ng-click="toggle()">'+readMoreLabel+'</span></p>')(scope);var hiddenTextContainer=$compile('<div class="read-more--hidden read-more--display-hidden">'+parts.remainingPart)(scope);element.append(textContainer);element.append(hiddenTextContainer);}}};}]).directive('ddTextCollapse',['$compile',function($compile){return{restrict:'A',scope:true,link:function(scope,element,attrs){scope.collapsed=false;scope.toggle=function(){scope.collapsed=!scope.collapsed;};attrs.$observe('ddTextCollapseText',function(text){var maxLength=scope.$eval(attrs.ddTextCollapseMaxLength);if(text.length>maxLength){var firstPart=String(text).substring(0,maxLength);var secondPart=String(text).substring(maxLength,text.length);var firstSpan=$compile('<span>'+firstPart+'</span>')(scope);var secondSpan=$compile('<span ng-if="collapsed">'+secondPart+'</span>')(scope);var moreIndicatorSpan=$compile('<span ng-if="!collapsed"></span>')(scope);var lineBreak=$compile('<br/">')(scope);var toggleButton=$compile('<span class="read-more" ng-click="toggle()">Read more</span>')(scope);element.empty();element.append(firstSpan);element.append(secondSpan);element.append(moreIndicatorSpan);element.append(lineBreak);element.append(toggleButton);}
else{element.empty();element.append(text);}});}};}]);;angular.module('tasteatlas').filter('html',['$sce',function($sce){return function(text){return $sce.trustAsHtml(text);};}]);;angular.module('tasteatlas').directive('inputAutoFocus',[function(){return{restrict:'A',link:function(scope,element){element.focus();scope.$on('$destroy',function(event){element.blur();});}};}]);;angular.module('tasteatlas').directive('linkStateChanges',function(){return{scope:{enabled:'=linkStateChanges'},link:function(scope,element,attrs){element.bind('click',function(event){if(!scope.enabled){event.preventDefault();}});}};});;angular.module('tasteatlas').directive('modalDirective',['$window','$timeout',function($window,$timeout){return{restrict:'A',scope:{closeModal:'&'},link:function(scope){var closeModal=scope.closeModal;var modalIsOpen=true;var currentPath=$window.location.pathname;if(!currentPath.includes('modal')){history.pushState(null,"",currentPath+'#modal');}
document.body.classList.add('modal--open');scope.$on('$destroy',function(){if(modalIsOpen){history.back();modalIsOpen=false;}
document.querySelector('body').classList.remove('modal--open');window.onpopstate=null;});var popstateEventHandler=function(evt){if(modalIsOpen){$timeout(function(){evt.preventDefault();modalIsOpen=true;},0,false);}};window.onpopstate=popstateEventHandler;}};}]);;angular.module('tasteatlas').directive('noAnimate',['$animate',function($animate){return{restrict:'A',link:function(scope,element,attrs){$animate.enabled(false,element)
scope.$watch(function(){$animate.enabled(false,element)})}};}]);angular.module('tasteatlas').directive('showWhenScroll',['$window','$timeout',function($window,$timeout){function isElementInView(elementId,fullyInView){var windowElement=angular.element($window);var element=angular.element(elementId);if(element&&element.length){var pageTop=windowElement.scrollTop();var pageBottom=pageTop+windowElement.height();var elementTop=element.offset().top;var elementBottom=elementTop+element.height();if(fullyInView===true){return pageTop<elementTop&&pageBottom>elementBottom;}else{return elementTop<=pageBottom&&elementBottom>=pageTop;}}}
function isTopOfPage(){return angular.element($window).scrollTop()===0;}
return{link:function postLink(scope,element,attrs){var onScroll=function(){var showWhenOn=attrs.showOn;var hideWhenOn=attrs.hideOn;var filterElement=angular.element(element);var visibleWhenElement=false;angular.forEach(JSON.parse(showWhenOn),function(showElement){visibleWhenElement=visibleWhenElement||isElementInView(showElement,false);});var exceptionElement=isElementInView(hideWhenOn,false);var showFilterOnTop=visibleWhenElement&&!exceptionElement&&!isTopOfPage();if(!showFilterOnTop){if(filterElement.hasClass('animateIn'))
filterElement.removeClass('animateIn');filterElement.css("visibility","hidden");}else{filterElement.addClass("animateIn");filterElement.css("visibility","visible");}};$timeout(function(){angular.element($window).bind("scroll",onScroll);});element.on('$destroy',function(){angular.element($window).unbind("scroll",onScroll);});}};}]);;angular.module('tasteatlas').directive('autocompleteKeyboardNav',function(){function link(scope,element,attrs){var KEY_CODES={UP:38,DOWN:40,ENTER:13};element.bind("keydown",function(event){if(event.which===KEY_CODES.UP){var prevElement=angular.element(element).parent().prev().find(scope.itemClass);if(prevElement.hasClass('ng-hide')){prevElement=angular.element(prevElement).parent().prev().find(scope.itemClass);}
if(prevElement.length===0){angular.element(scope.inputContainer+' input').focus();return;}
prevElement.focus();}
if(event.which===KEY_CODES.DOWN){var nextElement=angular.element(element).parent().next().find(scope.itemClass);if(nextElement.hasClass('ng-hide')){nextElement=angular.element(nextElement).parent().next().find(scope.itemClass);}
nextElement.focus();}
if(event.which===KEY_CODES.ENTER){scope.navAction({item:scope.item});}});};return{link:link,scope:{item:'=',navAction:'&',itemClass:'<',inputContainer:'<'}};});;angular.module('tasteatlas').directive('taBackgroundSections',['$timeout','PageStatusSubjectService',function($timeout,PageStatusSubjectService){return{scope:{to:'<'},restrict:'A',link:function(scope,element){var setBackgrounds=function(){$timeout(function(){var backgroundSections=element.find(scope.to);if(backgroundSections.length){for(var i=0;i<backgroundSections.length;i++){i%2===0?$(backgroundSections[i]).css({'background-color':'#f9f9f9'}):$(backgroundSections[i]).css({'background-color':'#ffffff'});}}});};PageStatusSubjectService.subscribe(setBackgrounds);element.on('$destroy',function(){PageStatusSubjectService.unsubscribe(setBackgrounds);});}};}]);;(function(){'use strict';angular.module('tasteatlas').directive('taBindHtmlCompile',['$compile',function($compile){return{restrict:'A',link:function(scope,element,attrs){scope.$watch(function(){return scope.$eval(attrs.taBindHtmlCompile);},function(value){element.html(value);$compile(element.contents())(scope);});}};}]);}());;'use strict';angular.module('tasteatlas').directive("showFacebookButton",["$compile","$timeout","$window",function($compile,$timeout,$window){return{restrict:'A',replace:true,link:function(scope,element,attributes){FB.XFBML.parse();}};}]);;var googletag=googletag||{};googletag.cmd=googletag.cmd||[];angular.module('tasteatlas').constant('GoogleAdUrl','//securepubads.g.doubleclick.net/tag/js/gpt.js').factory('GoogleAd',['GoogleAdUrl','$q',function GoogleAdFactory(GoogleAdUrl,$q){function createTag(){console.log('create tag started')
var gads=document.createElement('script'),useSSL='https:'===document.location.protocol,node=document.getElementsByTagName('script')[0];gads.async=true;gads.type='text/javascript';gads.src=(useSSL?'https:':'http:')+GoogleAdUrl;node.parentNode.insertBefore(gads,node);gads.onreadystatechange=function(){if(this.readyState==='complete'){callback();}};gads.onload=onGoogleScriptLoad();}
function onGoogleScriptLoad(){console.log('google tag loaded')
var deferred=$q.defer();try{googletag.cmd.push(function(){googletag.pubads().disableInitialLoad();googletag.pubads().setCentering(true);googletag.pubads().enableSingleRequest();googletag.pubads().collapseEmptyDivs(true);googletag.pubads().setTargeting('projekt','tasteatlas');googletag.enableServices();adRenderedCallback();});deferred.resolve();}catch(err){deferred.reject(err);}}
function adRenderedCallback(){googletag.cmd.push(function(){googletag.pubads().addEventListener('slotRenderEnded',function(event){if(event.isEmpty===true){var slotElementId=event.slot.getSlotElementId();var element=document.getElementById(slotElementId);if(slotElementId=='TA_ARTICLE_DESKTOP_L_1'||slotElementId=='TA_ARTICLE_DESKTOP_R_1'){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId=='TA_ARTICLE_DESKTOP_SIDEBAR_1'){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId=='TA_ARTICLE_DESKTOP_L_BOTTOM'||slotElementId=='TA_ARTICLE_DESKTOP_R_BOTTOM'){element.parentNode.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('HOME-TA_tablet_')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId=='M_TA_article_top'||slotElementId=='M_TA_article_bottom'){element.parentNode.setAttribute('disabled-ads',true);document.querySelector('.more-from-slider').style.paddingTop='0px';}
if(slotElementId.indexOf('HOME_TA_mobile_')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('HOME_TA_mobile_')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('1574692848681-region')>-1){element.parentNode.setAttribute('disabled-ads',true);}
var promotionInfo=element.parentNode.querySelector('.promotion__info');if(promotionInfo){angular.element(element.parentNode.querySelector('.promotion__info')).css('display','none');}
if(slotElementId.indexOf('div-gpt-ad-1598870123608-0-')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('certificates-ad-')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('recipes-ad-')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('toplist-ad-')>-1){element.parentNode.setAttribute('disabled-ads',true);}
if(slotElementId.indexOf('top-list-article-ad-wrapper-')>-1){element.parentNode.setAttribute('disabled-ads',true);}}});});}
return{init:function(){window.didomiOnReady=window.didomiOnReady||[];window.didomiOnReady.push(function(){console.log('didomi ready')
createTag();});}};}]).directive("taGoogleAd",["$timeout","$window",function($timeout,$window){var unitsMapping={'/21703950087/M_TA_test':{sizes:[[300,250],[336,280]]},'/21703950087/D_TA_600x300':{sizes:[[300,600],[160,600]]},'/21703950087/D_TA_300x250':{sizes:[300,250]},'/21703950087/HOME_TA_300x250':{sizes:[300,250]},'/21703950087/D_TA_billboard':{sizes:[[728,90],[970,90],[970,250]]}};return{restrict:'A',replace:true,scope:{name:'@',id:'@',sizes:'<',platform:'@',profile:'@'},link:function(scope,element,attrs){attrs.$set('noPrerender',"true");var slot={};googletag.cmd.push(function(){var unitsSizeMapping={'tablet':{sizes:googletag.sizeMapping().addSize([851,300],[]).addSize([768,300],[300,250]).addSize([0,0],[]).build()},'desk-mob':{sizes:googletag.sizeMapping().addSize([851,300],scope.sizes||unitsMapping[scope.name].sizes).addSize([768,300],[]).addSize([0,0],scope.sizes||unitsMapping[scope.name].sizes).build()}}
var props={name:scope.name,id:scope.id,sizes:scope.sizes||unitsMapping[scope.name].sizes,platform:scope.platform,profile:scope.profile?unitsSizeMapping[scope.profile].sizes:false};if(!props.profile){slot=googletag.defineSlot(props.name,props.sizes,props.id).addService(googletag.pubads());}
else{slot=googletag.defineSlot(props.name,props.sizes,props.id).defineSizeMapping(props.profile).addService(googletag.pubads());}
$timeout(function(){googletag.display(props.id);googletag.pubads().refresh([slot]);console.log(props.id+" slot refreshed");});});scope.$on('$destroy',function(){googletag.destroySlots([slot]);});}};}]);;angular.module('tasteatlas').service('GoogleMapLibrary',["$http","$q",function($http,$q){var USER_ID='USERID';var TYPE_SHOP='SHOP';var TYPE_USER='USER';this.normalizeInput=normalizeInput;this.createGoogleMap=createGoogleMap;var _markers=[];this.triggerMarker=function(id){angular.forEach(_markers,function(value,key){if(value.place.Id===id){google.maps.event.trigger(value,'click');}});};function normalizeInput(locations,user){var data=[];angular.forEach(locations,function(item){data.push({Id:item.ShopId,Name:item.ShopName,Telephone:item.ShopPhoneNumber,Adress:item.ShopAdress,Latitude:item.Latitude,Longitude:item.Longitude,Type:TYPE_SHOP});});if(user.hasLocation===true){user={Id:USER_ID,Name:'',Telephone:'',Adress:'',Latitude:user.latitude,Longitude:user.longitude,Type:TYPE_USER};data.push(user);}
angular.forEach(data,function(item){if(!item.Latitude&&!item.Longitude)
return;item.position=getGoogleLocationFromLatLng(item.Latitude,item.Longitude);if(!item.position)
return;});data=data.filter(function(item){return item.position;});return data;}
function createGoogleMap(data,attributeId,showMarker){var bounds=new google.maps.LatLngBounds();angular.forEach(data,function(item){bounds.extend(item.position);});var map=new google.maps.Map(document.getElementById(attributeId),{center:bounds.getCenter(),zoom:17});createGoogleMapMakers(data,map,showMarker);if(data.length>1){map.fitBounds(bounds);}
return map;}
function createGoogleMapMakers(data,map,showMarker){angular.forEach(data,function(item,id){var iconImage={};if(item.Id===USER_ID){iconImage=getUserPinIconImageObj();}else{iconImage=getPlacePinIconImageObj();}
var marker=new google.maps.Marker({map:map,position:item.position,icon:iconImage});marker.place=item;item.marker=marker;_markers.push(marker);if(showMarker!==undefined&&item.Type===TYPE_SHOP){google.maps.event.addListener(marker,'click',showMarker);}});}
function getGoogleLocationFromLatLng(latitude,longitude){var location=undefined;try{location=new google.maps.LatLng(latitude,longitude);}catch(e){console.log(e);}
return location;}
function getPlacePinIconImageObj(){return{url:'/content/image/pin.png',scaledSize:new google.maps.Size(15,20),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(15,39)};}
function getUserPinIconImageObj(){return{url:'/Content/Image/User_Icon.svg',scaledSize:new google.maps.Size(15,20),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(15,39)};}}]).directive("taGoogleMap",['GoogleMapLibrary',function(GoogleMapLibrary){return{restrict:'E',scope:{establishmentData:'=',userLocation:'='},template:'<div></div>',replace:true,link:function(scope,element,attributes){scope.$watch('userLocation',function(userlocation){var data=GoogleMapLibrary.normalizeInput(scope.establishmentData,userlocation);GoogleMapLibrary.createGoogleMap(data,attributes.id,showMarkerInfo);var _openedInfowindow;function showMarkerInfo(){var marker=this;var location=scope.userLocation;if(!marker||!marker.place)
return;if(_openedInfowindow){_openedInfowindow.close();_openedInfowindow=null;}
var content=getMarkerInfoPopUp(marker.place);if(!content)
return;var infowindow=new google.maps.InfoWindow({content:content,closeBoxURL:""});infowindow.open(marker.getMap(),marker);_openedInfowindow=infowindow;marker.getMap().setOptions({draggable:true});function getMarkerInfoPopUp(establishment){if(!establishment)
return;var locationPath='';if(location.hasLocation===true){locationPath='http://maps.google.com/maps?saddr='+location.latitude+','+location.longitude+'&daddr='+establishment.Latitude+','+establishment.Longitude;}else{locationPath='http://maps.google.com/maps?q='+establishment.Latitude+','+establishment.Longitude;}
var infoContainer=document.createElement('div');var title=document.createElement('h4');title.innerHTML=establishment.Name;title.className+='h4 h4--bold h4--muli info-container__title';var directionButtonHref=document.createElement('a');directionButtonHref.href=locationPath;directionButtonHref.className='info-container__content';var directionButton=document.createElement('i');directionButton.className+='icon icon--direction';var directionTxt=document.createElement('span');directionTxt.className+='directions';directionTxt.innerText='Directions';directionButtonHref.appendChild(directionButton);directionButtonHref.appendChild(directionTxt);infoContainer.appendChild(title);infoContainer.appendChild(directionButtonHref);return infoContainer;}}},false);}};}]);;angular.module('tasteatlas').directive('taHomeMapButton',["MapOpenerService","MobileInteractionService","$timeout",function(MapOpenerService,MobileInteractionService,$timeout){function changeScroll(type){var html=angular.element('html');if(type==='disable'){html.addClass('disable-scroll');}
else{html.removeClass('disable-scroll');}}
function switchView(switchTo){var urlLink=window.location.pathname;if(switchTo==='map'){history.pushState({},null,urlLink+'/map');}
else if(switchTo==='list'&&urlLink.indexOf('map')>-1){urlLink=urlLink.slice(0,urlLink.indexOf('map')-1);history.pushState({},null,urlLink);}};return{restrict:'E',scope:{},replace:true,templateUrl:'/content/scripts/app/directives/ta-home-map-button.html',link:function(scope,element,attributes){var currentState=MapOpenerService.getCurrentState();scope.isMapOpen=currentState.isOpen;scope.isOpenedOnce=currentState.isOpenedOnce;scope.pendingAction=scope.isMapOpen?'close':'open';scope.mapAction=function(action){var isOpened;if(action==='open'){changeScroll('disable');scope.pendingAction='close';isOpened=true;scope.isOpenedOnce=true;window.scrollTo(0,0);switchView('map');}
else if(action==='close'){changeScroll('enable');scope.pendingAction='open';isOpened=false;switchView('list');}
MobileInteractionService.toggleResults();scope.isMapOpen=isOpened;MapOpenerService.dispatch({isOpen:scope.isMapOpen,isOpenedOnce:scope.isOpenedOnce,forceClose:false,page:''});};MapOpenerService.subscribe(function(state){scope.isOpenedOnce=state.isOpenedOnce;scope.isMapOpen=state.isOpen;scope.pendingAction=scope.isMapOpen?'close':'open';if(state.forceClose){scope.mapAction('close');}});}};}]);;angular.module('tasteatlas').directive('taHorizontalScrollDrag',[function(){return{restrict:'A',scope:{activeClass:'<',disabled:'<'},link:function(scope,element){if(scope.disabled){return;}
var slider=element[0];var isDown=false;var startX;var scrollLeft;var activeClass=scope.activeClass;slider.addEventListener('mousedown',function(e){isDown=true;startX=e.pageX-slider.offsetLeft;scrollLeft=slider.scrollLeft;});slider.addEventListener('mouseleave',function(){isDown=false;slider.classList.remove(activeClass);});slider.addEventListener('mouseup',function(){isDown=false;slider.classList.remove(activeClass);});slider.addEventListener('mousemove',function(e){if(!isDown)return;slider.classList.add(activeClass);e.preventDefault();var x=e.pageX-slider.offsetLeft;var walk=(x-startX);slider.scrollLeft=scrollLeft-walk;});}};}]);;angular.module('tasteatlas').directive('taHorizontalLoadMore',[function(){return{scope:{handler:'&'},restrict:'A',link:function(scope,element){element.on('scroll',function(event){var sum=event.currentTarget.scrollLeft+event.currentTarget.clientWidth;if(sum===event.currentTarget.scrollWidth)
scope.handler();});}};}]);;angular.module('tasteatlas').directive('taLazyLoad',['BotInterceptor',function(BotInterceptor){return{restrict:'A',link:function(scope,element,attrs){var isBot=BotInterceptor.isSearchEngineBot;var imageSource;var imageSrcset;if(attrs.lazySource==='random'){var randomNumberBetween1and4=Math.floor(Math.random()*4)+1;imageSource="/content/layout/images/thumbnail-no-photo-"+randomNumberBetween1and4+".jpg";}
else{imageSource=attrs.lazySource;imageSrcset=attrs.lazySrcset;}
var imageAlt=attrs.lazyAlt||"";var img=angular.element(element)[0];var disable=attrs.disable==='true';if(typeof IntersectionObserver!=='undefined'&&IntersectionObserver&&!disable){var observer=new IntersectionObserver(loadImg,{rootMargin:'800px',threshold:0});observer.observe(img);}
else{if(!isBot){if(imageSource)
img.src=imageSource;img.alt=imageAlt;if(imageSrcset)
img.srcset=imageSrcset;}}
function loadImg(changes){angular.forEach(changes,function(change){if(change.isIntersecting){if(imageSource)
change.target.src=imageSource;if(imageSrcset)
change.target.srcset=imageSrcset;change.target.alt=imageAlt;observer.unobserve(img);}});}}};}]);;angular.module('tasteatlas').directive('taNoResult',[function(){return{restrict:'A',scope:{searchInfo:'<'},link:function(scope,element){function determineSearchInfoTxt(searchInfo){var name=searchInfo.name?searchInfo.name:'';var region=searchInfo.region?searchInfo.region:'the world';var count=searchInfo.count?searchInfo.count:0;var result='';if(count===0){result="We're still collecting the most relevant info.";}else if(count===1)
result='Best '+name+' in '+region+'.';else{result='Top '+count+' '+name+' in '+region+'.';}
if(result.length>0){element[0].innerHTML=result;}}
scope.$watch('searchInfo',function(newValue,oldValue){if(newValue){determineSearchInfoTxt(newValue);}},true);}};}]);;angular.module('tasteatlas').directive('taPasswordStrength',[function(){return{restrict:'A',scope:{pwd:'='},replace:false,link:function(scope,element,attributes){function reverseString(s){if(!s)return '';var reverse;for(var i=s.length-1;i>=0;i--){reverse+=s[i];}
return reverse;}
function calculateStrength(p){var matches={pos:{},neg:{}};var counts={pos:{characters:0,lower:0,upper:0,numbers:0,symbols:0},neg:{lettersOnly:0,numbersOnly:0,seqLetter:0,seqNumber:0,seqSymbol:0}};var strength=0;var forward,back;var tmp;var letters='abcdefghijklmnopqrstuvwxyz';var numbers='01234567890';var symbols='\\!@#$%&/()=?¿';if(!p)return 0;var passwordLength=p.length;matches.pos.characters=p.match(/[a-zA-z]/g);matches.pos.upper=p.match(/[A-Z]/g);matches.pos.lower=p.match(/[a-z]/g);matches.pos.numbers=p.match(/\d/g);matches.pos.symbols=p.match(/[$-/:-?{-~!^_`\[\]]/g);matches.pos.middleNumber=p.slice(1,-1).match(/\d/g);matches.pos.middleSymbol=p.slice(1,-1).match(/[$-/:-?{-~!^_`\[\]]/g);if(passwordLength<6)return 0;counts.pos.characters=passwordLength*4;counts.pos.upper=matches.pos.upper?(passwordLength-matches.pos.upper.length)*2:0;counts.pos.lower=matches.pos.lower?(passwordLength-matches.pos.lower.length)*2:0;counts.pos.numbers=matches.pos.numbers?matches.pos.numbers.length*6:0;counts.pos.symbols=matches.pos.symbols?matches.pos.symbols.length*4:0;counts.pos.middleNumber=matches.pos.middleNumber?matches.pos.middleNumber.length:0;counts.pos.middleSymbol=matches.pos.middleSymbol?matches.pos.middleSymbol.length:0;matches.neg.conLower=p.match(/(?=([a-z]{2}))/g);matches.neg.conUpper=p.match(/(?=([A-Z]{2}))/g);matches.neg.conNumbers=p.match(/(?=(\d{2}))/g);matches.neg.onlyNumbers=p.match(/^[0-9]*$/g);matches.neg.onlyLetters=p.match(/^([a-z]|[A-Z])*$/g);if(matches.pos.characters)
counts.neg.lettersOnly=p===matches.pos.characters.join("")?passwordLength:0;if(matches.pos.numbers)
counts.neg.numbersOnly=p===matches.pos.numbers.join("")?passwordLength:0;for(i=0;i<letters.length-2;i++){var p2=p.toLowerCase();forth=letters.substring(i,parseInt(i+3));back=reverseString(forth);if(p2.indexOf(forth)!==-1||p2.indexOf(back)!==-1){counts.neg.seqLetter++;}}
for(i=0;i<numbers.length-2;i++){forth=numbers.substring(i,parseInt(i+3));back=reverseString(forth);if(p.indexOf(forth)!==-1||p.toLowerCase().indexOf(back)!==-1){counts.neg.seqNumber++;}}
for(i=0;i<symbols.length-2;i++){forth=symbols.substring(i,parseInt(i+3));back=reverseString(forth);if(p.indexOf(forth)!==-1||p.toLowerCase().indexOf(back)!==-1){counts.neg.seqSymbol++;}}
var positive=counts.pos.characters+
counts.pos.lower+
counts.pos.upper+
counts.pos.numbers+
counts.pos.symbols;var negative=counts.neg.lettersOnly+
counts.neg.numbersOnly+
counts.neg.seqLetter*3+
counts.neg.seqNumber*3+
counts.neg.seqSymbol*3;return positive-negative;}
scope.$watch('pwd',function(){scope.strength=calculateStrength(scope.pwd);if(scope.strength<25){element.css('borderBottom','3px solid red');}
else if(scope.strength>=25&&scope.strength<50){element.css('borderBottom','3px solid yellow');}else if(scope.strength>=50&&scope.strength<100){element.css('borderBottom','3px solid green');}else{element.css('borderBottom','3px solid blue');}});}};}]);;angular.module('tasteatlas').directive('taRecommendedBy',['$filter',function($filter){return{restrict:'A',scope:{name:'<',url:'<',count:'<',source:'<'},link:function(scope,element){var result='';var critic='';if(scope.url){critic='<span class="recommend-by-label">Recommended  by </span>'+'<a href="'+scope.url+'"><strong> '+scope.name+'</strong > </a>';}else if(scope.source){critic='<span class="recommend-by-label">Recommended  by </span>'+'<a target="_blank" href="'+$filter('acceptLink')(scope.source)+'"><strong> '+scope.name+'</strong > </a>';}
else{critic='<span class="recommend-by-label">Recommended  by </span>'+'<strong>'+scope.name+'</strong>';}
if(scope.count===0||scope.count===1){result=critic;}else if(scope.count===2){result=critic+' and 1 other food critic.';}else{result=critic+' '+'and '+(scope.count-1)+' other food critics.';}
element[0].innerHTML=result;}};}]);;angular.module('tasteatlas').directive('taShowNav',["$window","$timeout","$compile",function($window,$timeout,$compile){return{restrict:'A',scope:{details:"=",urlLinks:"=",activePage:"=",offset:"="},replace:true,templateUrl:'/content/scripts/app/directives/ta-show-nav.html',link:function(scope,element,attributes){scope.smallerMenu='';if(scope.urlLinks.length===3){scope.smallerMenu='about-food__menu--smaller';}
scope.$watch('urlLinks',function(newValue,oldValue){},true);scope.$watch('offset',function(newValue,oldValue){var isNegativeOffset=scope.offset<0;var searchItemHeader=angular.element(document.getElementsByClassName("search-item-preview__header"));var stickyNav=angular.element(document.getElementById(attributes.id));if(isNegativeOffset){stickyNav.css("display","block");stickyNav.addClass("sticky-nav");searchItemHeader.addClass("search-item-preview__header--expanded");}
else{stickyNav.css("display","none");stickyNav.removeClass('sticky-nav');}},true);angular.element(document).ready(function(){var SCROLL_FIX=70;var win=angular.element($window);var affixSibling=angular.element(document.getElementById("pg_content_holder"));var searchItemHeader=angular.element(document.getElementsByClassName("search-item-preview__header"));var stickyNav=angular.element(document.getElementById(attributes.id));var header=angular.element(document.getElementById("header-id"));var lastScrollPosition=win.scrollTop();var lastTopPosition=stickyNav.position().top;var _onWindowScroll=function(){var scrollTopOffset=angular.element(document.getElementById("pg_content_holder")).position().top;var stickyAndHeader=stickyNav.height()+header.outerHeight();var offSet=scrollTopOffset-SCROLL_FIX+(scope.offset?scope.offset:0);if(win.scrollTop()>offSet){stickyNav.addClass("animateIn");stickyNav.css("display","block");stickyNav.addClass("sticky-nav");searchItemHeader.addClass("search-item-preview__header--expanded");if(win.scrollTop()>lastScrollPosition){if(stickyNav.hasClass('animateIn'))
stickyNav.removeClass('animateIn');stickyNav.css("display","none");stickyNav.removeClass('sticky-nav');searchItemHeader.removeClass("search-item-preview__header--expanded");}else{stickyNav.addClass("animateIn");stickyNav.css("display","block");stickyNav.addClass("sticky-nav");searchItemHeader.addClass("search-item-preview__header--expanded");}}else{stickyNav.removeClass("animateIn");stickyNav.removeClass('sticky-nav');stickyNav.css("display","none");searchItemHeader.removeClass("search-item-preview__header--expanded");}
lastTopPosition=stickyNav.position().top;lastScrollPosition=win.scrollTop();};function debounceScrollEvent(func,wait){let timeout;return()=>{if(timeout){clearTimeout(timeout);}
timeout=setTimeout(func,wait)};}
debounceScrollEvent(win.on('scroll',_onWindowScroll),600);scope.$on("$destroy",function handleDestroyEvent(){angular.element(win).off('scroll',_onWindowScroll);});});document.addEventListener("DOMContentLoaded",function(){if(document.refreshForm.visited.value==""){stickyNav.css("display","none");stickyNav.removeClass('sticky-nav');searchItemHeader.removeClass("search-item-preview__header--expanded");}});}};}]).directive('taShowNavLayer',["$window","$timeout","$compile",function($window,$timeout,$compile){return{restrict:'A',scope:{details:"=",onPageChange:"&"},replace:true,templateUrl:'/content/scripts/app/directives/ta-show-nav-layer.html',link:function(scope,element,attributes){scope.changePage=function(page){scope.onPageChange({page:page});};var win=angular.element($window);var stickyNav=angular.element(document.getElementById(attributes.id));var header=angular.element(document.getElementById("header-id"));var lastScrollPosition=win.scrollTop();stickyNav.css("display","block");stickyNav.addClass("sticky-nav");win.on('scroll',function(e){if(win.scrollTop()>lastScrollPosition){if(stickyNav.hasClass('animateIn'))
stickyNav.removeClass('animateIn');stickyNav.css("display","none");stickyNav.removeClass('sticky-nav');}else{stickyNav.addClass("animateIn");stickyNav.css("display","block");stickyNav.addClass("sticky-nav");}
lastScrollPosition=win.scrollTop();});}};}]).directive('taShowNavArrow',["$window","$timeout","$compile",function($window,$timeout,$compile){return{restrict:'A',scope:{direction:"="},replace:true,templateUrl:'/content/scripts/app/directives/ta-show-nav-left-arrow.html',link:function(scope,element,attributes){var scrollable=angular.element(document.getElementById('about-food__nav-regular'));var navList=angular.element(document.getElementsByClassName('about-food__nav__list'));var leftMask=angular.element(document.getElementById('left-arrow-mask'));var rightMask=angular.element(document.getElementById('right-arrow-mask'));var navListWidth=navList.outerWidth();var elementSize=scrollable.outerWidth();var maxWidth=navListWidth-elementSize;if(maxWidth>0){rightMask.addClass('visible-class-r');}
scrollable.on("scroll",function(e){var scrollLeft=scrollable.scrollLeft();if(scrollLeft<maxWidth){if(rightMask.hasClass('hidden-class-r')){rightMask.removeClass('hidden-class-r');}}
if(scrollLeft>=maxWidth){if(rightMask.has('visiable-class-r')){rightMask.addClass('hidden-class-r');}else{return;}}});}};}]).directive('taShowNavStickyArrow',["$window","$timeout","$compile",function($window,$timeout,$compile){return{restrict:'A',scope:{direction:"="},replace:true,templateUrl:'/content/scripts/app/directives/ta-show-nav-right-arrow.html',link:function(scope,element,attributes){var scrollable=angular.element(document.getElementById('about-food__nav-sticky'));var navList=angular.element(document.getElementsByClassName('about-food__nav__list'));var leftMask=angular.element(document.getElementById('left-arrow-sticky-mask'));var rightMask=angular.element(document.getElementById('right-arrow-sticky-mask'));var navListWidth=navList.outerWidth();var regularScrollable=angular.element(document.getElementById('about-food__nav-regular'));var elementSize=regularScrollable.outerWidth();var maxWidth=navListWidth-elementSize;if(maxWidth>0){rightMask.addClass('visible-class-r');}
scrollable.on("scroll",function(e){elementSize=scrollable.outerWidth();maxWidth=navListWidth-elementSize;var scrollLeft=scrollable.scrollLeft();if(scrollLeft<maxWidth){if(rightMask.hasClass('hidden-class-r')){rightMask.removeClass('hidden-class-r');}}
if(scrollLeft>=maxWidth){if(rightMask.has('visiable-class-r')){rightMask.addClass('hidden-class-r');}}});}};}]);;angular.module('tasteatlas').directive('taVerticalLoadMore',[function(){return{scope:{handler:'&'},restrict:'A',link:function(scope,element){element.on('scroll',function(e){var sum=e.currentTarget.scrollHeight-e.currentTarget.clientHeight;if(sum===e.currentTarget.scrollTop)
scope.handler();});}};}]);;angular.module('tasteatlas').filter("acceptLink",function(){return function(link){var result;var startingUrl="http://";var httpsStartingUrl="https://";if(link.indexOf(startingUrl)===0||link.indexOf(httpsStartingUrl)===0){result=link;}
else{result=startingUrl+link;}
return result;};});;angular.module('tasteatlas').filter('convertSeconds',function(){return function(input){var minutes=parseInt(input/60,10);var seconds=input%60;if(minutes>0){return minutes+' m'+(seconds?' '+seconds+' s':'');}
else{return seconds+' s';}}});angular.module('tasteatlas').filter('range',function(){return function(list,total){total=parseInt(total,10);for(var i=0;i<total;i++){list.push(i);}
return list;};});;angular.module('tasteatlas').filter('splitAddress',['$sce',function($sce){return function(state){if(state){var splited=state.split(',');var last=splited.pop();var newString='';angular.forEach(splited,function(item,key){newString+=item+',';});var returnAddress='<strong>'+newString+'</strong>'+last;return $sce.trustAsHtml(returnAddress);}};}]).filter('fixRecipeIngredients',['$sce',function($sce){return function(query,order){var returnQuery='';if(query===query.toUpperCase()&&order===0){returnQuery='<strong>For '+query.toLowerCase()+'</strong>';}else if(query===query.toUpperCase()&&order!==0){returnQuery='<div style="height: 15px"></div><strong>For '+query.toLowerCase()+'</strong>';}else{returnQuery=query;}
return $sce.trustAsHtml(returnQuery);};}]).filter('accentSearchQuery',['$sce',function($sce){var removeDiacritics=function(str){if(String.prototype.normalize){return str.normalize('NFD').replace(/[\u0300-\u036f]/g,"");}
else{return str;}};return function(result,query){if(result===undefined)
return;if(result==='')
return;if(query===undefined||query.length<2)
return;function replacei(str,sub,f){var A=removeDiacritics(str).toLowerCase().split(removeDiacritics(sub).toLowerCase());var B=[];var x=0;for(var i=0;i<A.length;i++){var n=A[i].length;B.push(str.substr(x,n));if(i<A.length-1)
B.push(f(str.substr(x+n,sub.length)));x+=n+sub.length;}
return B.join('');}
if(query===''||result===null)
return;var returnQuery=replacei(result,query,function(sub){return '<span>'+sub+'</span>';});return $sce.trustAsHtml(returnQuery);};}]);;angular.module('tasteatlas').service('AccountService',['$http','UserSubjectService','DecodeTokenHelper','$q',function($http,UserSubjectService,DecodeTokenHelper,$q){this.url='account';this.login=function(params){var promise=$http({method:'POST',url:this.url+'/LoginAjax',data:params}).then(function(response){return response.data;});return promise;};this.signOut=function(){var promise=$http({method:'POST',url:this.url+'/SignOut',isAnonymous:true});return promise;};this.register=function(params){var promise=$http({method:'POST',url:this.url+'/RegisterAjax',data:params}).then(function(response){return response.data;});return promise;};var deferred=null;this.anonymous=function(){if(deferred){return deferred.promise;}
deferred=$q.defer();var promise=$http({method:'POST',url:this.url+'/Anonymous',isAnonymous:true});promise.then(function(response){deferred.resolve(mapTokenResponse(response));deferred=null;},function(error){deferred.reject(error);deferred=null;});return deferred.promise;};this.refreshToken=function(params){var promise=$http({method:'POST',url:this.url+'/RefreshToken',isAnonymous:true,data:{refresh_token:params}});return promise.then(mapTokenResponse);};this.sendResetEmail=function(data){var promise=$http({method:'POST',url:this.url+'/SendResetPasswordToken',data:data,isAnonymous:true});return promise;};this.resetPassword=function(data){var promise=$http({method:'POST',url:this.url+'/ResetPassword',data:data,isAnonymous:true});return promise;};this.submitMissingFacebookEmail=function(data){var promise=$http({method:'POST',url:this.url+'/SubmitMissingFacebookEmail',data:data,isAnonymous:true});return promise;};function mapTokenResponse(tokenResponse){if(tokenResponse&&tokenResponse.status===200){var jwtToken=tokenResponse.data.access_token;var decoded=DecodeTokenHelper.decodeJwtToken(jwtToken);var user={userid:decoded.nameid,username:decoded.unique_name,roles:decoded.role,firstname:decoded.FirstName,lastname:decoded.LastName,image:decoded.ProfilePicture,urlLink:decoded.UrlLink};UserSubjectService.dispatch(user);return jwtToken;}}}]);;angular.module('tasteatlas').service('CertificatesService',["$q","$http",function($q,$http){this.url='api/v3/certificate';this.getAllCertificates=function(){var promise=$http({method:'GET',url:this.url+`/autocomplete/certificates`,});return promise;}
this.getAllCertificatedRegions=function(query,certificateId){var promise=$http({method:'GET',url:this.url+`/autocomplete/regions?query=${query}&certificateId=${certificateId}`,});return promise;}
this.getCertificatesResults=function(entityType,entityGroupId,order,regionId,certificateId,page,pageSize){var promise=$http({method:'GET',url:this.url+`/foodentities?EntityType=`+entityType+'&EntityGroupId='+entityGroupId+'&order='+order+'&regionId='+regionId+'&certificateId='+certificateId+'&page='+page+'&pageSize='+pageSize,});return promise;}}]);;angular.module('tasteatlas').service('CommentService',["$q","$http","UserCacheService",function($q,$http,UserCacheService){this.url='api/v2/comments';this.topListUrl='api/v2/toplistarticles';this.articleUrl='api/v3/article';this.commentsPost=commentsPost;this.getArticleComments=getArticleComments;this.loadMoreArticleComments=loadMoreArticleComments;this.suggestionPost=suggestionPost;this.informationPost=informationPost;this.errorPost=errorPost;this.commentExists=commentExists;this.getComment=getComment;this.imagesUpload=imagesUpload;this.updateContent=updateContent;this.updateRating=updateRating;this.deleteComment=deleteComment;this.vote=vote;function vote(commentId,status){var promise=$http({method:'POST',url:this.url+'/'+commentId+'/vote/'+status});return promise;}
function updateContent(commentId,data){var promise=$http({method:'POST',url:this.url+'/'+commentId,data:data});return $q(function(resolve,reject){promise.then(function(success){return UserCacheService.refreshMyLists().then(function(){resolve(success);});}).catch(function(err){reject(err);});});}
function updateRating(commentId,params){var promise=$http({method:'POST',url:this.url+'/updaterating'+'/'+commentId,data:params});return $q(function(resolve,reject){promise.then(function(success){return UserCacheService.refreshMyLists().then(function(){resolve(success);});}).catch(function(err){reject(err);});});}
function deleteComment(commentId){var promise=$http({method:'DELETE',url:this.url+'/'+commentId});return $q(function(resolve,reject){promise.then(function(success){return UserCacheService.refreshMyLists().then(function(){resolve(success);});}).catch(function(err){reject(err);});});}
function commentsPost(params){var promise=$http({method:'POST',url:this.url,data:params});return $q(function(resolve,reject){promise.then(function(success){return UserCacheService.refreshMyLists().then(function(){resolve(success);});}).catch(function(err){reject(err);});});}
function suggestionPost(params){var promise=$http({method:'post',url:this.url+'/suggestion',data:params});return promise;}
function informationPost(params){var promise=$http({method:'post',url:this.url+'/information',data:params});return promise;}
function errorPost(data){var promise=$http({method:'post',url:this.url+'/report',data:data});return promise;}
function getComment(params){var promise=$http({method:'GET',url:this.url,params:params});return $q(function(resolve,reject){promise.then(function(success){return UserCacheService.refreshMyLists().then(function(){resolve(success);});}).catch(function(err){reject(err);});});}
function getArticleComments(articleId){var promise=$http({method:'GET',url:this.articleUrl+'/'+articleId+'/comments?page=0&pageSize=5',});return promise;}
this.getTopListArticleComments=function(id){var promise=$http({method:'GET',url:this.topListUrl+'/'+id+'/comments?page=0&pageSize=5'});return promise;}
function loadMoreArticleComments(articleId,pageSize){var promise=$http({method:'GET',url:this.articleUrl+'/'+articleId+'/comments?page=0&pageSize='+pageSize,});return promise;}
this.loadMoreTopListArticleComments=function(id,pageSize){var promise=$http({method:'GET',url:this.topListUrl+'/'+id+'/comments?page=0&pageSize='+pageSize,});return promise;}
function commentExists(data){var promise=$http({method:'POST',url:this.url+'/exists',data:data});return promise;}
function imagesUpload(params){params=params||{};var files=params.files||[];var xhruploadprogress=params.xhruploadprogress;var xhrprogress=params.xhrprogress;var eventHandlers=undefined;if(xhrprogress){eventHandlers={progress:xhrprogress};}
var uploadEventHandlers=undefined;if(xhruploadprogress){uploadEventHandlers={progress:xhruploadprogress};}
var formData=new FormData();for(var i=0;i<files.length;i++){var key='file['+i+']';var value=files[i];var blobname=files[i].name||key;formData.append(key,value,blobname);}
var promise=$http({method:'POST',url:'/api/v2/comments/images/upload',data:formData,transformRequest:angular.identity,headers:{'Content-Type':undefined},eventHandlers:eventHandlers,uploadEventHandlers:uploadEventHandlers}).then(function(response){return response.data;});return promise;}}]);;angular.module('tasteatlas').service('CompileComponentService',['$timeout','$interval',function($timeout,$interval){var _self=this;_self.listenForNewComponents=function(attributteName){if(!attributteName)
attributteName="angular-request-compile";const targetNode=document.getElementsByTagName('body')[0];$interval(function(){angular.element(`[${attributteName}]`).each(function(){var element=$(this);element.removeAttr(attributteName);$timeout(function(){angular.element(element).injector().invoke(["$compile",function($compile){var scope=angular.element(element).scope();$compile(element)(scope);}]);});})},100);}}]);;angular.module('tasteatlas').service('CriticService',["$http",function($http){this.url='api/v2/critics/';this.getCriticDetails=function(criticId){var promise=$http({method:'GET',url:this.url+criticId});return promise;};this.getCriticsReviews=function(criticId,filter){var promise=$http({method:'GET',url:this.url+criticId+'/reviews',params:filter});return promise;};}]);;angular.module('tasteatlas').service('DishGroupService',["$q","$http",function($q,$http){this.url='api/v2/dishgroup/';this.getDishGroupItems=function(params){var promise=$http({method:'GET',url:this.url+'/items',params:params});return promise;};this.getDishGroupChildren=function(id){var promise=$http({method:'GET',url:this.url+id+'/children'});return promise;};this.getDishGroupSiteMapParent=function(){var promise=$http({method:'GET',url:this.url+'parents/'});return promise;};this.GetDishGroupEvents=function(params){var promise=$http({method:'GET',url:this.url+'events',params:params});return promise;};this.getDishGroupDataNew=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/data',params:params});return promise;};this.getTopLists=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/toplists',params:params});return promise;};this.getDishesNew=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/dishes',params:params});return promise;};this.getDishesWhereToEat=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/wheretoeat',params:params});return promise;};this.getWhereToEatEvents=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/events',params:params});return promise;};this.getWhereToEatRestaurants=function(dishGroupId,params){var promise=$http({method:'GET',url:'api/v3/dishgroup/'+dishGroupId+'/restaurants',params:params});return promise;};}]);;angular.module('tasteatlas').service('DishService',["$http",function($http){this.url='api/v2/dishes/';this.urlV3='api/v3/dish/';this.autocompleteUrlV3='api/v3/autocomplete/';this.GetUserListAutocomplete=function(query,userListAutocompleteType){var promise=$http({method:'GET',url:this.autocompleteUrlV3+'getuserlistautocomplete?query='+query+'&userListAutocompleteType='+userListAutocompleteType});return promise;};this.searchItemsByType=function(query,type){var promise=$http({method:'GET',url:this.autocompleteUrlV3+'getautocompletebytype?query='+query+'&userListType='+type});return promise;}
this.getRandomDish=function(){var promise=$http({method:'GET',url:this.url+'random'});return promise;};this.getDishReviews=function(dishId,params){var promise=$http({method:'GET',url:this.url+dishId+'/review',params:params});return promise;};this.GetDishTypes=function(dishId,orderBy){var promise=$http({method:'GET',url:this.url+dishId+'/types?order='+orderBy});return promise;};this.searchDishes=function(query){var promise=$http({method:'GET',url:this.url+'search',params:{query:query}});return promise;};this.searchFood=function(query){var promise=$http({method:'GET',url:this.url+'search/food',params:{query:query}});return promise;};this.exploreDishes=function(dishId,filter){var promise=$http({method:'GET',url:this.url+dishId+'/explore',params:filter});return promise;};this.getUserDishComment=function(dishId){var promise=$http({method:'GET',url:this.url+dishId+'/usercomment'});return promise;};this.filterDishRestaurants=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/restaurants',params:params});return promise;};this.getNearbyDishRestaurants=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/nearbyrestaurants',params:params});return promise;};this.GetDishPairs=function(id){var promise=$http({method:'GET',url:this.url+id+'/pairs'});return promise;};this.GetDishPartOf=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/partof',params:params});return promise;};this.GetDishEvents=function(id,filter){var promise=$http({method:'GET',url:this.url+id+'/events',params:filter});return promise;};this.getDishRating=function(id){var promise=$http({method:'GET',url:this.url+id+'/rating'});return promise;};this.addToFavorites=function(id){var promise=$http({method:'POST',url:this.url+id+'/addtofavorites'});return promise;};this.getSimilarDishes=function(id){var promise=$http({method:'GET',url:this.url+id+'/similardishes'});return promise;};this.getSimilarDishesInRegion=function(params){var promise=$http({method:'GET',url:this.url+'/similardishesinregion',params:params});return promise;};this.getDishFoodIngredients=function(id){var promise=$http({method:'GET',url:this.url+id+'/foodingredients'});return promise;};this.getSiblings=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/siblings',params:params});return promise;};this.getMainRecipeVariationSimpleDetails=function(id){var promise=$http({method:'GET',url:this.url+id+'/mainvariationbasic',cache:true});return promise;};this.getRecipeVariations=function(id){var promise=$http({method:'GET',url:this.url+id+'/recipevariations',cache:true});return promise;};this.getDishOverview=function(dishId){var promise=$http({method:'GET',url:this.urlV3+'/'+dishId+'/overview'});return promise;};this.getMainRecipeVariationSimpleDetails=function(id){var promise=$http({method:'GET',url:this.url+id+'/mainvariationbasic',cache:true});return promise;};this.getRecipeVariations=function(id){var promise=$http({method:'GET',url:this.url+id+'/recipevariations',cache:true});return promise;};}]);;angular.module('tasteatlas').service('EventService',["$q","$http",function($q,$http){this.url='api/v2/events/';this.GetEventDetails=function(id){var promise=$http({method:'GET',url:this.url+id});return promise;};this.GetEventReviews=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/reviews',params:params});return promise;};this.GetEventUserComment=function(id){var promise=$http({method:'GET',url:this.url+id+'/usercomment'});return promise;};}]);;angular.module('tasteatlas').service('GlobalStatusService',function(){var userLocation;var status={mainPageType:null};status.setMainPageType=function(type){status.mainPageType=type;};status.setUserLocation=function(location){userLocation=location;};status.getUserLocation=function(location){return userLocation;};return status;});;angular.module('tasteatlas').service('IngredientGroupService',["$q","$http",function($q,$http){this.url='api/v2/ingredientgroup/';this.getIngredientGroupItems=function(params){var promise=$http({method:'GET',url:this.url+'items',params:params});return promise;};this.getIngredientGroupChildren=function(id){var promise=$http({method:'GET',url:this.url+id+'/children'});return promise;};this.getIngredientGroupSiteMapParent=function(){var promise=$http({method:'GET',url:this.url+'parents/'});return promise;};this.GetIngredientGroupEvents=function(params){var promise=$http({method:'GET',url:this.url+'events',params:params});return promise;};this.getIngredientGroupDataNew=function(ingredientGroupId,params){var promise=$http({method:'GET',url:'api/v3/ingredientgroup/'+ingredientGroupId+'/data',params:params});return promise;};this.getTopLists=function(ingredientGroupId,params){var promise=$http({method:'GET',url:'api/v3/ingredientgroup/'+ingredientGroupId+'/toplists',params:params});return promise;};this.getIngredientsNew=function(ingredientGroupId,params){var promise=$http({method:'GET',url:'api/v3/ingredientgroup/'+ingredientGroupId+'/ingredients',params:params});return promise;};this.getIngredientsWhereToEat=function(ingredientGroupId,params){var promise=$http({method:'GET',url:'api/v3/ingredientgroup/'+ingredientGroupId+'/wheretoeat',params:params});return promise;};this.getWhereToEatEvents=function(ingredientGroupId,params){var promise=$http({method:'GET',url:'api/v3/ingredientgroup/'+ingredientGroupId+'/events',params:params});return promise;};}]);;angular.module('tasteatlas').service('IngredientService',["$http",function($http){this.url='api/v2/ingredients/';this.urlV3='api/v3/ingredient/';this.getIngredientReviews=function(ingredientId,params){var promise=$http({method:'GET',url:this.url+ingredientId+'/review',params:params});return promise;};this.filterIngredientShops=function(ingredientId,params){var promise=$http({method:'GET',url:this.url+ingredientId+'/shops',params:params,cache:true});return promise;};this.getIngredientShopLocations=function(ingredientId){var promise=$http({method:'GET',url:this.url+ingredientId+'/shoplocations'});return promise;};this.exploreIngredients=function(ingredientId,filter){var promise=$http({method:'GET',url:this.url+ingredientId+'/explore',params:filter});return promise;};this.getUserIngredientComment=function(ingredientId){var promise=$http({method:'GET',url:this.url+ingredientId+'/usercomment'});return promise;};this.GetIngredientTypes=function(id,orderBy){var promise=$http({method:'GET',url:this.url+id+'/types?order='+orderBy});return promise;};this.GetIngredientPairs=function(id){var promise=$http({method:'GET',url:this.url+id+'/pairs'});return promise;};this.GetIngredientPartOf=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/partof',params:params});return promise;};this.GetIngredientEvents=function(id,filter){var promise=$http({method:'GET',url:this.url+id+'/events',params:filter});return promise;};this.getIngredientRating=function(id){var promise=$http({method:'GET',url:this.url+id+'/rating'});return promise;};this.addToFavorites=function(id){var promise=$http({method:'POST',url:this.url+id+'/addtofavorites'});return promise;};this.getSimilarIngredients=function(id){var promise=$http({method:'GET',url:this.url+id+'/similaringredients'});return promise;};this.getSimilarIngredientsInRegion=function(params){var promise=$http({method:'GET',url:this.url+'/similaringredientsinregion',params:params});return promise;};this.getIngredientFoodIngredients=function(id){var promise=$http({method:'GET',url:this.url+id+'/foodingredients'});return promise;};this.getSiblings=function(id,params){var promise=$http({method:'GET',url:this.url+id+'/siblings',params:params});return promise;};this.getMainRecipeVariationSimpleDetails=function(id){var promise=$http({method:'GET',url:this.url+id+'/mainvariationbasic',cache:true});return promise;};this.getRecipeVariations=function(id){var promise=$http({method:'GET',url:this.url+id+'/recipevariations',cache:true});return promise;};this.getIngredientOverview=function(ingredientId){var promise=$http({method:'GET',url:this.urlV3+'/'+ingredientId+'/overview'});return promise;};this.getMainRecipeVariationSimpleDetails=function(id){var promise=$http({method:'GET',url:this.url+id+'/mainvariationbasic',cache:true});return promise;};this.getRecipeVariations=function(id){var promise=$http({method:'GET',url:this.url+id+'/recipevariations',cache:true});return promise;};}]);;angular.module('tasteatlas').service('LoginService',function(){var _observers=[];var _state={isLoginProcess:false};this.subscribe=function(callback){_observers.push(callback);};this.unsubscribe=function(callback){_observers=_observers.filter(function(f){return f!==callback;});};this.updateState=function(state){_state=state;for(var i=0;i<_observers.length;i++){_observers[i](state);}};this.getState=function(){return Object.assign({},_state);};});;angular.module('tasteatlas').service('MapStatusService',function(){var status={};status={isMapReady:null};return status;});;angular.module('tasteatlas').service('MeService',["$q","$http",function($q,$http){this.url='api/v2/me';this.urlV3='api/v3/home';this.me=function(){var promise=$http({method:'GET',url:this.url,cache:true});return promise;};this.getUserLocation=function(){var promise=$http({method:'POST',url:this.url+'/country-code'});return promise;};this.getUserTriedData=function(params){var promise=$http({method:'GET',url:this.urlV3+'/user-data-you-tried',params:params});return promise;};}]);;angular.module('tasteatlas').service('MenuService',["$q","$http",function($q,$http){this.url='api/v3/mainmenu';this.getUserLocation=function(){var promise=$http({method:'GET',url:this.url+'/getcountries'});return promise;};this.getCountries=function(continentId){var promise=$http({method:'GET',url:this.url+'/getcountries/'+continentId,});return promise;};this.getRegions=function(continentId){var promise=$http({method:'GET',url:this.url+'/getregions/'+continentId,});return promise;};this.getDishGroups=function(parentGroupId){var promise=$http({method:'GET',url:this.url+'/getdishgroups/'+parentGroupId,});return promise;};this.getIngredientGroups=function(parentGroupId){var promise=$http({method:'GET',url:this.url+'/getingredientgroups/'+parentGroupId,});return promise;};this.getBeverageGroups=function(parentGroupId){var promise=$http({method:'GET',url:this.url+'/getbeveragegroups/'+parentGroupId,});return promise;};this.getNearMeV1=function(latitude,longitude){var promise=$http({method:'GET',url:this.url+'/getnearme?lat='+latitude+'&lon='+longitude,});return promise;};this.getNearMe=function(params){var promise=$http({method:'GET',url:this.url+'/getnearme',params:params});return promise;};this.getUserTriedData=function(params){var promise=$http({method:'GET',url:this.urlV3+'/user-data-you-tried',params:params});return promise;};}]);;angular.module('tasteatlas').service('NearMeService',["$http",function($http){this.url='api/v2/nearme/';this.getFood=function(params){var promise=$http({method:'GET',url:this.url+'food',params:params});return promise;};this.getRestaurants=function(params){var promise=$http({method:'GET',url:this.url+'restaurants',params:params});return promise;};this.getProducers=function(params){var promise=$http({method:'GET',url:this.url+'producers',params:params});return promise;};this.getRegions=function(params){var promise=$http({method:'GET',url:this.url+'regions',params:params});return promise;};}]);angular.module('tasteatlas').service('NearMeServiceV3',["$http",function($http){this.url='api/v3/nearme/';this.homeUrl='api/v3/home/near-me/';this.getFood=function(params){var promise=$http({method:'GET',url:this.url+'food',params:params});return promise;};this.getRestaurants=function(params){var promise=$http({method:'GET',url:this.url+'restaurants',params:params});return promise;};this.getHomeNearMe=function(params){var promise=$http({method:'GET',url:this.homeUrl,params:params});return promise;}}]);;angular.module('tasteatlas').service('ProfileService',["$http",function($http){var _self=this;this.url='api/v2/me/';this.urlV3Me='api/v3/me/';this.urlV3Profile='/api/v3/profile/'
this.GetShareImageUrl=function(userUrllink,userId,userListType){var promise=$http({method:'GET',url:this.urlV3Profile+'getshareimageurl?userUrllink='+userUrllink+'&userId='+userId+'&userListType='+userListType});return promise;};this.GetRandomQuid=function(){var promise=$http({method:'GET',url:this.urlV3Profile+'getrandomguid'});return promise;};this.GetProfileListByType=function(userId,userListType,page,pageSize){var promise=$http({method:'GET',url:this.urlV3Profile+'getlist?userId='+userId+'&userListType='+userListType+'&skip='+page+'&take='+pageSize});return promise;}
this.AddListItem=function(userListType,userId,entityId,entityTypeEnum,entityId2){var data={userListType:userListType,userId:userId,entityId:entityId,entityTypeEnum:entityTypeEnum,entityId2:entityId2}
var promise=$http({method:'POST',url:this.urlV3Me+'listmanipulation/add',data:data});return promise;};this.AddDishesInRestaurants=function(data){var promise=$http({method:'POST',url:this.urlV3Me+'listmanipulation/dishesinrestaurants/add',data:data});return promise;};this.UpdateItemsPosition=function(data){var promise=$http({method:'POST',url:this.urlV3Me+'listmanipulation/update',data:data});return promise;};this.DeleteListItem=function(userListType,userId,id){var promise=$http({method:'DELETE',url:this.urlV3Me+'listmanipulation?userListType='+userListType+'&userId='+userId+'&id='+id});return promise;};this.GetProfileDetails=function(userId){var promise=$http({method:'GET',url:this.urlV3Profile+'details?userId='+userId});return promise;};this.UpdateProfileDetails=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/update',data:data});return promise;};this.UploadProfileImage=function(file){var data=new FormData();data.append('file',file);var promise=$http({method:'POST',url:this.url+'uploadprofileimage',data:data,headers:{'Content-Type':undefined}});return promise;};this.GetProfileMapResults=function(userId){var promise=$http({method:'GET',url:this.url+userId+'/map'});return promise;};this.GetUserDishComments=function(userId,paginationInfo){var promise=$http({method:'GET',url:this.url+userId+'/comments/dish',params:paginationInfo});return promise;};this.GetUserIngredientComments=function(userId,paginationInfo){var promise=$http({method:'GET',url:this.url+userId+'/comments/ingredient',params:paginationInfo});return promise;};this.GetUserDishRestaurantComments=function(userId,paginationInfo){var promise=$http({method:'GET',url:this.url+userId+'/comments/dishrestaurant',params:paginationInfo});return promise;};this.AddFavoriteFood=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/food/add',data:data});return promise;};this.UpdateFavoriteFood=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/food/update',data:data});return promise;};this.DeleteFavoriteFood=function(requestedUserId,id){var promise=$http({method:'DELETE',url:this.url+requestedUserId+'/favorite/food/delete/'+id});return promise;};this.AddFavoriteCouisine=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/couisine/add',data:data});return promise;};this.UpdateFavoriteCouisine=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/couisine/update',data:data});return promise;};this.DeleteFavoriteCouisine=function(requestedUserId,id){var promise=$http({method:'DELETE',url:this.url+requestedUserId+'/favorite/couisine/delete/'+id});return promise;};this.AddFavoriteDishRestaurant=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/dishrestaurant/add',data:data});return promise;};this.UpdateFavoriteDishRestaurants=function(requestedUserId,data){var promise=$http({method:'POST',url:this.url+requestedUserId+'/favorite/dishrestaurant/update',data:data});return promise;};this.DeleteFavoriteDishRestaurant=function(requestedUserId,id){var promise=$http({method:'DELETE',url:this.url+requestedUserId+'/favorite/dishrestaurant/delete/'+id});return promise;};this.GetMyLists=function(){var promise=$http({method:'GET',url:this.url+'/mylists'});return promise;};this.AddWannaTry=function(entityId,entityTypeEnum){var promise=$http({method:'GET',url:this.url+'/addwannatry/?'+'entityId='+entityId+'&entityTypeEnum='+entityTypeEnum});return promise;};this.RemoveWannaTry=function(entityId,entityTypeEnum){var promise=$http({method:'GET',url:this.url+'/removewannatry/?'+'entityId='+entityId+'&entityTypeEnum='+entityTypeEnum});return promise;};this.AddOrUpdateFavorite=function(entityId,entityTypeEnum,order){var promise=$http({method:'GET',url:this.url+'/addorupdatefavorite/?'+'entityId='+entityId+'&entityTypeEnum='+entityTypeEnum+'&order='+order});return promise;};this.RemoveFavorite=function(entityId,entityTypeEnum){var promise=$http({method:'GET',url:this.url+'/removefavorite/?'+'entityId='+entityId+'&entityTypeEnum='+entityTypeEnum});return promise;};this.GetTriedFood=function(regionId,groupId,entityType,isBeverage){if(entityType===1){return this.GetTriedDishes(regionId,groupId);}
else{return this.GetTriedIngredients(regionId,groupId,isBeverage);}};this.GetTriedDishes=function(regionId,groupId){var promise=$http({method:'GET',url:this.url+'/trieddishes',params:{regionMaterializedPath:regionId,groupMaterializedPath:groupId}});return promise;};this.GetTriedIngredients=function(regionId,groupId,isBeverage){var promise=$http({method:'GET',url:this.url+'/triedingredients',params:{regionMaterializedPath:regionId,groupMaterializedPath:groupId,isBeverage:isBeverage}});return promise;};this.getTriedFoodById=function(entityType,foodId){if(entityType===1){return this.getTriedDishesById({dishId:foodId});}
else{return this.getTriedIngredientsById({ingredientId:foodId});}};this.getTriedDishesById=function(params){var promise=$http({method:'GET',url:this.url+'/trieddishes',params:params});return promise;};this.getTriedIngredientsById=function(params){var promise=$http({method:'GET',url:this.url+'/triedingredients',params:params});return promise;};}]);;angular.module('tasteatlas').service('QuizService',["$q","$http",function($q,$http){this.url='api/v3/gamequiz';this.getUserGameInfo=function(anonymousUserId){var date=new Date();var timeZoneOffsetInMinutes=date.getTimezoneOffset();var promise=$http({method:'POST',url:this.url+'/getusergameinfo',data:{anonymousUserId:anonymousUserId,timeZoneOffsetInMinutes:timeZoneOffsetInMinutes}});return promise;}
this.getActiveQuizAsync=function(anonymousUserId){var promise=$http({method:'POST',url:this.url+'/getactivequiz',data:{anonymousUserId:anonymousUserId}});return promise;}
this.startQuiz=function(anonymousUserId){var date=new Date();var timeZoneOffsetInMinutes=date.getTimezoneOffset();var promise=$http({method:'POST',url:this.url+'/startquiz',data:{anonymousUserId:anonymousUserId,timeZoneOffsetInMinutes:timeZoneOffsetInMinutes}});return promise;}
this.getNextQuestion=function(publicQuizId){var promise=$http({method:'POST',url:this.url+'/getnextquestion',data:{publicQuizId:publicQuizId}});return promise;}
this.validateAnswerAsync=function(publicQuestionId,answerId,elapsedTime,timeRunOut){var params={publicQuestionId:publicQuestionId,answer:answerId,elapsedTime:elapsedTime,timeRunOut:timeRunOut};var promise=$http({method:'POST',url:this.url+`/question/validate`,data:params});return promise;}
this.getLastQuestionDetails=function(publicQuizId){var promise=$http({method:'POST',url:this.url+`/getlastquestiondetails`,data:{publicQuizId:publicQuizId}});return promise;}
this.getFiftyFiftyJoker=function(publicQuestionId){var promise=$http({method:'POST',url:this.url+`/question/getfiftyfiftyjoker`,data:{publicQuestionId:publicQuestionId}});return promise;}
this.getTodayResults=function(resultType,anonymousUserId){var promise=$http({method:'POST',url:this.url+`/gettodayresults`,data:{resultType:resultType,anonymousUserId:anonymousUserId}});return promise;}
this.getAllTimeResults=function(anonymousUserId){var promise=$http({method:'POST',url:this.url+`/getalltimeresults`,data:{anonymousUserId:anonymousUserId}});return promise;}
this.getUserResult=function(resultType,anonymousUserId){var promise=$http({method:'POST',url:this.url+`/getlastuserquiz`,data:{resultType:resultType,anonymousUserId:anonymousUserId}});return promise;}
this.getLastGamePublicQuizId=function(anonymousUserId){var promise=$http({method:'POST',url:this.url+`/getlastgamequizpublicid`,data:{anonymousUserId:anonymousUserId}});return promise;}
this.getResultsHeader=function(anonymousUserId){var date=new Date();var timeZoneOffsetInMinutes=date.getTimezoneOffset();var promise=$http({method:'POST',url:this.url+`/getresultsheader`,data:{anonymousUserId:anonymousUserId,timeZoneOffsetInMinutes:timeZoneOffsetInMinutes}});return promise;}
this.getAnonymousUserId=function(){var promise=$http({method:'POST',url:this.url+`/getanonymoususerid`,});return promise;}
this.getTransitionImage=function(){var promise=$http({method:'GET',url:this.url+`/gettransitionimages`,});return promise;}
this.assignQuizToUser=function(publicQuizId,anonymousUserId){var promise=$http({method:'POST',url:this.url+`/assignquiztouser`,data:{publicQuizId:publicQuizId,anonymousUserId:anonymousUserId}});return promise;}
this.getUserBestScore=function(anonymousUserId){var promise=$http({method:'POST',url:this.url+'/getuserbestscore',data:{anonymousUserId:anonymousUserId}});return promise}
this.getGameQuizHeaderData=function(publicQuizId){var promise=$http({method:'POST',url:this.url+'/getgamequizheaderdata',data:{publicQuizId:publicQuizId}});return promise}}]);;angular.module('tasteatlas').service("RatingSharedService",['UserSubjectService','CommentService','CommentHelper','UserCacheService','LoginService','ItemTypes','UserCacheService','RegionLevels','EntityTypes',function(UserSubjectService,CommentService,CommentHelper,UserCacheService,LoginService,ItemTypes,UserCacheService,RegionLevels,EntityTypes){var _self=this;this.onInit=function(){this.isAnonymous=UserSubjectService.isInAnonymousRole();this.entityId=this.item.DishId||(this.item.IngredientId||this.item.Id);this.entityType=this.item.EntityType;this.score=this.item.Score;if(this.item.Rating){this.dividedScore=this.item.Rating.DividedScore;}
this.viewScore=this.item.DividedScore;this.scoreCount=this.item.ScoreCount;this.validScoreCount=this.item.ValidScoreCount;this.item.isRatingOpen=false;_self.getCommentData.call(this);this.isRateValid=CommentHelper.isRateValid({rating:this.rating});this.me=UserSubjectService.getUser();};this.getCommentData=function(){if(this.entityType===ItemTypes.Dish){this.comment=UserCacheService.getDishCommentById(this.entityId);}
if(this.entityType===ItemTypes.Ingredient){this.comment=UserCacheService.getIngredientCommentById(this.entityId);}
if(this.entityType===ItemTypes.Event){this.comment=UserCacheService.getEventCommentById(this.entityId);}
if(this.entityType===ItemTypes.RecipeVariation){this.comment=UserCacheService.getRecipeVariationCommentById(this.entityId);}
if(this.comment){this.isCommented=true;this.commentId=this.comment.CommentId;this.rating=this.comment.Rating;this.viewRating=CommentHelper.recalculateRatingForView(this.rating);this.initialRating=this.comment.Rating;}};this.openLogin=function(){LoginService.updateState({isLoginProcess:true});};this.toggleRatingOpen=function(){this.item.isRatingOpen=!this.item.isRatingOpen;if(this.item.details!=null&&this.item.details.isRatingOpen!=null){this.item.details.isRatingOpen=this.item.isRatingOpen;}};this.onVoteChange=function(vote){if(vote===undefined)
return;this.rating=vote;this.isRateValid=CommentHelper.isRateValid({rating:vote});};this.vote=function(){this.toggleRatingOpen();return postComment.apply(this);};function postComment(){var _self=this;if(this.rating===0)
return;this.isLoading=true;var rating=this.rating;var entityType=this.entityType;var entityId=this.entityId;if(!this.isCommented){return CommentService.commentsPost({entityType:entityType,entityId:entityId,score:rating,content:'',photos:[]}).then(function(success){_self.isCommented=true;_self.isLoading=false;var score=_self.score?_self.score:0;_self.commentId=success.data.CommentId;_self.score=score;_self.viewScore=CommentHelper.recalculateRatingForView(_self.rating);_self.scoreCount=_self.scoreCount+1;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);_self.initialRating=_self.rating;}).catch(function(error){_self.isCommented=false;_self.isLoading=false;});}
if(this.isCommented){return CommentService.updateRating(this.commentId,{rating:rating}).then(function(success){_self.isCommented=true;_self.isLoading=false;var count=_self.scoreCount;var score=_self.score?_self.score:0
var difference=_self.rating-_self.initialRating;var avg=score+(count?(difference/count):0);_self.score=avg;_self.viewScore=CommentHelper.recalculateRatingForView(avg);_self.initialRating=_self.rating;_self.viewRating=CommentHelper.recalculateRatingForView(_self.rating);}).catch(function(error){_self.isLoading=false;console.log(error);});}}
this.tryOpenRating=function(item){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});}
else{item.details.isRatingOpen=!item.details.isRatingOpen;item.isRatingOpen=item.details.isRatingOpen;}};this.tryOpenRatingCustom=function(callback){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});}
else{callback();}};this.isRestaurantRated=function(restaurantId){return UserCacheService.isRestaurantCommented(restaurantId);};this.getRestaurantAvgRating=function(restaurantId){var allRestaurantComments=UserCacheService.getAllRestaurantComments(restaurantId);var count=allRestaurantComments.length;if(count===0){return 0;}
var totalRating=allRestaurantComments.reduce(function(total,comment){return total+comment.Rating;},0);return totalRating/count;};this.deleteComment=function(commentId){var _self=this;return CommentService.deleteComment(commentId).then(function(){_self.isLoading=false;_self.isCommented=false;_self.rating=0;});};this.getRatingCardActions=function(details){return{getFoodIds:function(){return{entityId:details.EntityId,entityTypeEnum:details.EntityType};},displayFoodName:function(){return details.Name;},getOrigin:function(){var regionRegionLevel=details.Region.Current.RegionLevel;var countryRegionLevel=details.Region.Parent.RegionLevel;if(regionRegionLevel<RegionLevels.Country&&(countryRegionLevel===RegionLevels.Country||countryRegionLevel===RegionLevels.CountryGroup)){return details.Region.Parent.Adjective;}
return details.Region.Current.Adjective||details.Region.Parent.Adjective||"";},getRegionUrlLink:function(){var regionRegionLevel=details.Region.Current.RegionLevel;var countryRegionLevel=details.Region.Parent.RegionLevel;if(regionRegionLevel<RegionLevels.Country&&countryRegionLevel>=RegionLevels.Country){return details.Region.Parent.UrlLink;}
return details.Region.Current.UrlLink;},getWannaTryItem:function(){return UserCacheService.getDishWannaTry(details.EntityId);},getDetails:function(){return details;}};};this.getRatingCardActionsRecipe=function(variation){return{getFoodIds:function(){return{entityId:variation.RecipeVariationId,entityTypeEnum:EntityTypes.RECIPE};},displayFoodName:function(){return variation.Name;},getWannaTryItem:function(){return UserCacheService.getRecipeWannaTry(variation.RecipeVariationId);},getDetails:function(){return{EntityType:EntityTypes.RECIPE,details:variation.details,Image:variation.Image,Id:variation.RecipeVariationId,Name:variation.Name,Region:{RegionName:'',CountryName:''}};},getRegionUrlLink:function(){}};};}]);;angular.module('tasteatlas').service('RecipeService',["$http",function($http){this.url='api/v2/recipes/';this.urlV3='api/v3/recipes/';this.urlV3Single='api/v3/recipesingle/';this.RecipeSingleAutocomplete=function(query){var promise=$http({method:'GET',url:this.urlV3Single+'autocomplete/recipes?query='+query});return promise;};this.RecipeSingleFilters=function(data){var foodIngredientsObj=[];if(data.foodIngredients!==null&&data.foodIngredients.length>0){for(const[key]of Object.entries(data.foodIngredients)){foodIngredientsObj.push(`FoodIngredients[${key}].EntityId=${data.foodIngredients[key].EntityId}&FoodIngredients[${key}].EntityType=${data.foodIngredients[key].EntityType}&FoodIngredients[${key}].MaterializedPath=${data.foodIngredients[key].MaterializedPath}`)}
foodIngredientsObj=foodIngredientsObj.join("&");}
else{foodIngredientsObj=`foodIngredients=${null}`;}
var promise=$http({method:'GET',url:this.urlV3Single+`foodentities?CookingTo=`+data.cookingTo+'&totalTo='+data.totalTo+'&'+foodIngredientsObj+'&EntityGroup.EntityType='+data.entityType+'&EntityGroup.EntityGroupId='+data.entityGroupId+'&order='+data.order+'&regionId='+data.regionId+'&dishGroupId='+data.dishGroupId+'&ingredientGroupId='+data.ingredientGroupId+'&page='+data.page+'&pageSize='+data.pageSize,});return promise;};this.getFoodInredientFilters=function(data){var promise=$http({method:'GET',url:this.urlV3Single+`foodingredientfilters?regionId=`+data.regionId+'&dishGroupId='+data.dishGroupId+'&ingredientGroupId='+data.ingredientGroupId,});return promise;};this.GetRecipe=function(id){var promise=$http({method:'GET',url:this.urlV3+id,cache:true});return promise;};this.GetDishRecipeOverview=function(id){var promise=$http({method:'GET',url:this.url+'dish/'+id+'/overview'});return promise;};this.getRecipeTime=function(times){var recipeTimeHours=times.DisplayHours;var recipeTimeMinutes=times.DisplayMinutes;if(!times.FullMinutes){return 0;}
if(recipeTimeHours){return recipeTimeHours+'h '+(recipeTimeMinutes?(recipeTimeMinutes+'min '):'');}
return recipeTimeMinutes+'min ';};this.getRecipeTimeNoMin=function(times){var recipeTimeHours=times.DisplayHours;var recipeTimeMinutes=times.DisplayMinutes;var dayHours=24;if(!times.FullMinutes){return 0;}
if(recipeTimeHours){if(recipeTimeHours>dayHours){recipeDays=Math.floor(recipeTimeHours/dayHours);recipeTimeHours=(recipeTimeHours%dayHours);return recipeDays+'d '+recipeTimeHours+'h ';}
return recipeTimeHours+'h '+(recipeTimeMinutes?(recipeTimeMinutes+'min '):'');}
return recipeTimeMinutes+'min ';};this.getRecipeTimeV2=function(times){var recipeTimeMinutes=times;if(recipeTimeMinutes>60){const hours=Math.floor(recipeTimeMinutes/60);const minutes=recipeTimeMinutes%60;if(minutes>0){return hours+'h '+minutes+'min ';}
else{return hours+'h ';}}
return recipeTimeMinutes+'min ';};this.getSimilar=function(recipeId){var promise=$http({method:'GET',url:this.urlV3+recipeId+'/similar',cache:true});return promise;};this.getSimilarRedesign=function(recipeId,pageNum,numberOfDisplayedItems){var promise=$http({method:'GET',url:this.urlV3+recipeId+'/similar?page='+pageNum+'&pageSize='+numberOfDisplayedItems,cache:true});return promise;};this.getRating=function(variationId){var promise=$http({method:'GET',url:this.urlV3+'variation/'+variationId+'/rating'});return promise;}
this.getReviews=function(variationId,params){var promise=$http({method:'GET',url:this.urlV3+'variation/'+variationId+'/review',params:params});return promise;};this.getUserReview=function(variationId){var promise=$http({method:'GET',url:this.urlV3+'variation/'+variationId+'/userreview'});return promise;};this.loadMoreCookingTips=function(){if(this.cookingTips.Data.length===this.cookingTips.Count)
return;this.cookingTipsLoading=true;this.cookingTips.PageIndex=this.cookingTips.PageIndex+1;this.cookingTips.Data=this.cookingTips.Data.concat(this.paginate(this.tips,this.cookingTips.PageSize,this.cookingTips.PageIndex));this.cookingTipsLoading=false;};this.getRecipeIngredientsPreview=function(mainRecipeVariationComponents){var result=[];angular.forEach(mainRecipeVariationComponents,function(component){if(component.Ingredients.length){result.push({name:component.Name});result=result.concat(component.Ingredients);}});return result;};}]);;angular.module('tasteatlas').service('RegionService',["$http",function($http){this.url='api/v2/regions/';this.getCountryByLocationAsync=function(params){var promise=$http({method:'GET',url:'api/v2/regions/country',params:params});return promise;};this.getRegionsByLocation=function(params){var promise=$http({method:'GET',url:'api/v2/regions/location',params:params});return promise;};this.getNearbyRegions=function(params){var promise=$http({method:'GET',url:'api/v2/regions/nearby',params:params,cache:true});return promise;};this.getRegionFoodData=function(params){var promise=$http({method:'GET',url:this.url+'data',params:params});return promise;};this.getRegionFoodDataNew=function(id){var promise=$http({method:'GET',url:'api/v3/regions/'+id+'/info'});return promise;};this.getWhereToEat=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/wheretoeat',params:params});return promise;};this.getWhatToEat=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/data',params:params});return promise;};this.getTopLists=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/toplists',params:params});return promise;};this.getWhereToEatRestaurants=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/restaurants',params:params});return promise;};this.getWhereToEatEvents=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/events',params:params});return promise;};this.isInLocation=function(regionId,params){if(!params||!params.lat||!params.lon){return new Promise(function(resolve,reject){resolve({data:false});});}
var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/IsInLocation',params:params,cache:true});return promise;};this.getCurrentRegionId=function(params){var promise=$http({method:'GET',url:'api/v3/regions/getregion',params:params});return promise;};this.getFiltersForRegion=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/filters',params:params});return promise;};this.getRegionFoodCount=function(regionId){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/regioncount',cache:true});return promise;};this.getSimilarRegions=function(regionId,params){var promise=$http({method:'GET',url:'api/v3/regions/'+regionId+'/getsimilarregions',params:params});return promise;};this.getRegionRestaurants=function(regionId,params){var promise=$http({method:'GET',url:this.url+regionId+'/restaurants',params:params});return promise;};this.GetRegionEvents=function(params){var promise=$http({method:'GET',url:this.url+'events',params:params});return promise;};this.getRegionChildren=function(id){var promise=$http({method:'GET',url:this.url+'children/'+id});return promise;};this.getRegionSiteMapParent=function(){var promise=$http({method:'GET',url:this.url+'parents/'});return promise;};this.searchRegions=function(query){var promise=$http({method:'GET',url:'api/v2/regions/search?query='+query});return promise;};this.searchRegionsByCouisine=function(query){var promise=$http({method:'GET',url:'api/v2/regions/searchbycouisine?query='+query});return promise;};this.GetRegionLocalDishes=function(params){var promise=$http({method:'GET',url:'api/v2/regions/localdishes',params:params});return promise;};this.GetRegionPopularDishes=function(params){var promise=$http({method:'GET',url:'api/v2/regions/populardishes',params:params});return promise;};this.GetRegionTraditionalDishes=function(params){var promise=$http({method:'GET',url:'api/v2/regions/traditionaldishes',params:params});return promise;};this.GetRegionIngredients=function(params){var promise=$http({method:'GET',url:'api/v2/regions/ingredients',params:params});return promise;};this.GetRegionBeverages=function(params){var promise=$http({method:'GET',url:'api/v2/regions/beverages',params:params});return promise;};}]);;angular.module('tasteatlas').service('RestaurantDishService',["$http",function($http){this.url='api/v2/restaurantdish/';this.getRestaurantDishDetails=function(restaurantId,dishId,params){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId,params:params});return promise;};this.getRestaurantDishReviews=function(restaurantId,dishId,params){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId+'/reviews',params:params});return promise;};this.getRestaurantDishComments=function(restaurantId,dishId,params){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId+'/comments',params:params});return promise;};this.getMoreRestaurantDishRestaurants=function(restaurantId,dishId,params){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId+'/restaurants/',params:params});return promise;};this.getMoreRestaurantDishDishes=function(restaurantId,dishId,params){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId+'/dishes',params:params});return promise;};this.getRestaurantDishUserComment=function getRestaurantDishUserComment(restaurantId,dishId){var promise=$http({method:'GET',url:this.url+'restaurant/'+restaurantId+'/dish/'+dishId+'/usercomment'});return promise;};}]);;angular.module('tasteatlas').service('RestaurantService',["$http",function($http){this.url='api/v2/restaurants/';this.searchRestaurants=function(query){var promise=$http({method:'GET',url:'api/v2/restaurants/search',params:{query:query}});return promise;};this.searchRestaurantsByName=function(query){var promise=$http({method:'GET',url:'api/v2/restaurants/search/name',params:{query:query}});return promise;};this.getRestaurantDishes=function(id,filter){var promise=$http({method:'GET',url:this.url+id+'/dishes',params:filter});return promise;};this.getRestaurantReviews=function(id,filter){var promise=$http({method:'GET',url:this.url+id+'/reviews',params:filter});return promise;};this.getRestaurantComments=function(id,filter){var promise=$http({method:'GET',url:this.url+id+'/comments',params:filter});return promise;};this.getRestaurantDetails=function(id,filter){var promise=$http({method:'GET',url:this.url+id,params:filter});return promise;};this.exploreRegionRestaurants=function(restaurantId,params){var promise=$http({method:'GET',url:this.url+restaurantId+'/explore',params:params});return promise;};}]);;angular.module('tasteatlas').service('StatisticsService',["$q","$http",function($q,$http){this.url='api/v2/statistics';this.getFooterStatistics=function(){var promise=$http({method:'GET',url:this.url+'/footer',cache:true});return promise;};}]);;angular.module('tasteatlas').service('taServicesEntityModalHandler',['$http','$rootScope','LoginService','GeolocationService',function($http,$rootScope,LoginService,GeolocationService){var _self=this;var _granted='GRANTED';var _denied='DENIED';var _prompt='PROMPT';var _trouble='TROUBLE';this.getCallRoute=null;this.location=null;var params={};_self.openEntityRestaurantModal=function(entityRestaurantId,entityType,type){if(type=="restaurant"){GeolocationService.handlePremission().then(function(data){if(data===_granted){GeolocationService.getLocation({timeout:3000}).then(function(data){if(data===_trouble){_self.locationState=_trouble;return null;}
if(data===_denied){_self.locationState=_denied;return null;}
_self.locationState=_granted;_self.location=data.coords;}).catch(function(error){console.log(error);_self.locationState=_trouble;})}else if(data===_prompt){_self.locationState=_prompt;}else if(data===_denied){_self.locationState=_denied;}});if(_self.location!=null){params={restaurantId:entityRestaurantId,lat:_self.location.latitude,lon:_self.location.longitude}}else{params={restaurantId:entityRestaurantId}}
_self.getCallRoute="/restaurant-modal";}
else{params={entityId:entityRestaurantId,entityType:entityType};_self.getCallRoute="/entity-modal";}
if(_self.getCallRoute!=null){return $http.get(_self.getCallRoute,{params}).then(function success(response){angular.element('#entity-restaurant-modal').empty();if(!angular.element('#entity-restaurant-modal')){var entityRestaurantModalWrapper=angular.element('<div id="entity-restaurant-modal"></div>');angular.element(document.body).append(entityRestaurantModalWrapper);}
angular.element('#entity-restaurant-modal').html(response.data)}).catch(function(error){console.log(error);}).finally(function(){angular.element('#entity-restaurant-modal').removeClass("hidden-entity-restaurant-modal").css('visibility','visible');$('.modal--overlay').addClass('modal--overlay-active');$('body').addClass('modal--open');});}else{console.log(_self.getCallRoute)}}
_self.closeEntityRestaurantModal=function(){angular.element('#entity-restaurant-modal').addClass("hidden-entity-restaurant-modal").css('visibility','hidden');angular.element('#entity-restaurant-modal').empty();$('.modal--overlay').removeClass('modal--overlay-active');$('body').removeClass('modal--open');_self.oldURL=document.referrer;history.pushState("","",_self.oldURL);}
$rootScope.$watch('LoginService',function(){LoginService.subscribe(function(data){if(data.isLoginProcess){return _self.closeEntityRestaurantModal();}});});}]);;angular.module('tasteatlas').service('TagService',["$q","$http",function($q,$http){this.url='api/v2/tags/';this.getItemsV3=function(params){var promise=$http({method:'GET',url:'api/v3/tag/items',params:params});return promise;};}]);;angular.module('tasteatlas').service('TextTransformService',function(){var _self=this;var sentenceRegEx=new RegExp(/([.?!])\s*(?=[A-Z])/g);var abbreviations={" St.":" St#","(lit.":"(lit#","L.A.":"L#A#","Mr.":"Mr#","Mrs.":"Mrs#","a.k.a.":"a#k#a#","A.D.":"A#D#","b.c.":"b#c#","e.g.":"e#g#","i.e.":"i#e#","U.S.":"U#S#","Yolole<em>!":"Yolole<em>#","A. M.":"A# M#","O.":"O#","D.K.":"D#K#","F.":"F#"};this.chunkSize=250;this.excludeAbbreviations=function(text){if(text!=null){return text.replace(/\sSt\.|\(lit\.|L\.A\.|Mr\.|Mrs\.|a\.k\.a\.|A\.D\.|b\.c\.|e\.g\.|i\.e\.|U\.S\.|Yolole<em>\!|A\.\sM\.|O\.|D\.K\.|F\./g,function(matched){return abbreviations[matched];});}};this.includeAbbreviations=function(text){var keys=Object.keys(abbreviations);var reverseAbbrevations={};for(var i=0;i<keys.length;i++){reverseAbbrevations[abbreviations[keys[i]]]=keys[i];}
return text.replace(/\sSt#|\(lit#|L#A#|Mr#|Mrs#|a#k#a#|A#D#|b#c#|e#g#|i#e#|U#S#|Yolole<em>#|A#\sM#|O#|D#K#|F#/g,function(matched){return reverseAbbrevations[matched];});};this.findAllSingleDots=function(text){var textWithoutAbbreviations=_self.excludeAbbreviations(text);var arr=textWithoutAbbreviations.replace(sentenceRegEx,"$1|").split("|");var indices=[];for(var i=0;i<arr.length;i++){indices.push(textWithoutAbbreviations.indexOf(arr[i])+arr[i].length-1);}
return indices;};this.makeLineBreaks=function(text){var chunks=[];var textWithoutAbbreviations=_self.excludeAbbreviations(text);var arr=textWithoutAbbreviations.replace(sentenceRegEx,"$1|").split("|");var currentIndex=0;var chunk="";for(var i=0;i<arr.length;i++){chunk="<p>"+arr.slice(currentIndex,i).join(" ")+"</p><br class='read-more-br'>";if(chunk.replace("</p><br class='read-more-br'>","").length>=_self.chunkSize){chunks.push(chunk);currentIndex=i;}}
if(currentIndex!==arr.length){chunks.push(arr.slice(currentIndex,arr.length).join(" "));}
var joinedText=chunks.join("");return _self.includeAbbreviations(joinedText);};this.findNumberOfChunks=function(text){var chunks=[];var arr=text.replace(sentenceRegEx,"$1|").split("|");var currentIndex=0;var chunk="";for(var i=0;i<arr.length;i++){chunk="<p>"+arr.slice(currentIndex,i).join(" ")+"</p><br class='read-more-br'>";if(chunk.replace("</p><br class='read-more-br'>","").length>=_self.chunkSize){chunks.push(chunk);currentIndex=i;}}
if(currentIndex!==arr.length){chunks.push(arr.slice(currentIndex,arr.length).join(" "));}
return chunks.length;};this.getFirstPartOneChunk=function(dotsInText,position){var endOfFirstPartIndex=dotsInText[position];var next=position+1;if(endOfFirstPartIndex>=_self.chunkSize){return endOfFirstPartIndex;}
if(dotsInText[next]){return _self.getFirstPartOneChunk(dotsInText,next);}
return endOfFirstPartIndex;};var nthChunkOfFirstPart=0;this.getFirstPartNChunks=function(dotsInText,position,multiplier){var endOfFirstPartIndex=dotsInText[position];var next=position+1;if(nthChunkOfFirstPart&&endOfFirstPartIndex-nthChunkOfFirstPart>=_self.chunkSize){nthChunkOfFirstPart=0;return endOfFirstPartIndex;}
if(!nthChunkOfFirstPart&&endOfFirstPartIndex>=_self.chunkSize*multiplier){nthChunkOfFirstPart=endOfFirstPartIndex;}
if(dotsInText[next]){return _self.getFirstPartNChunks(dotsInText,next,multiplier);}
nthChunkOfFirstPart=0;return endOfFirstPartIndex;};function findEndOfTag(text,match,chunkLength){var ln=match.length;var temp=String(text).substring(0,chunkLength);for(var i=0;i<ln;i++){temp=String(text).substring(0,chunkLength+i);if(temp.indexOf(match)>-1){break;}}
return temp;}
this.findFirstPartByLetters=function(maxLength,text){var chunkLength=Number(maxLength);var regexpItalic=/<\s*em[^>]*>(.*?)<\s*\/\s*em>/g;var regexpBold=/<\s*strong[^>]*>(.*?)<\s*\/\s*strong>/g;var matchesItalic=text.match(regexpItalic)||[];var matchesBold=text.match(regexpBold)||[];var matches=matchesItalic.concat(matchesBold);var firstPart=String(text).substring(0,chunkLength);angular.forEach(matches,function(match){if(text.indexOf(match)<chunkLength&&firstPart.indexOf(match)===-1){firstPart=findEndOfTag(text,match,chunkLength);}});var lastCharIndex=firstPart.length-1;for(var i=lastCharIndex;i<text.length;i++){if(text[i].toLowerCase()===text[i].toUpperCase()){firstPart=String(text).substring(0,i+1);break;}}
return firstPart;};this.shortenDescription=function(text,params){var dotsInText=_self.findAllSingleDots(text);var endIndexOfFirstPart=_self.getFirstPartOneChunk(dotsInText,0)+1;if(endIndexOfFirstPart<=_self.chunkSize){var shortened=String(text).substring(0,endIndexOfFirstPart);if(params&&params.readMoreFunc){return shortened+" "+"<span class='read-more' ng-click='"+params.readMoreFunc+"'>READ MORE</span>";}
return shortened;}
else{var shortened=String(text).substring(0,_self.chunkSize);if(params&&params.readMoreFunc){return shortened+"... "+"<span class='read-more' ng-click='"+params.readMoreFunc+"'>READ MORE</span>";}
return shortened;}};this.findParagraphPositions=function(description){var regexp=/<\/p>/g;var match,matches=[];while((match=regexp.exec(description))!=null){matches.push(match.index);}
return matches;};this.breakToplistDescription=function(description,position){var firstPart=description.substr(0,position+"</p>".length);var remainingPart=description.substr(firstPart.length);return{firstPart:firstPart,remainingPart:remainingPart};};});;angular.module('tasteatlas').service('TopListArticleService',["$q","$http","UserCacheService",function($q,$http,UserCacheService){this.url='api/v2/toplistarticles/';this.getArticle=function(id){var promise=$http({method:'GET',url:this.url+id});return promise;};this.getArticleData=function(id){var promise=$http({method:'GET',url:this.url+'/data/'+id});return promise;};}]);;angular.module('tasteatlas').service('UserCommentStatusService',function(){_observers=[];var _state={isCommentProcess:false,commentRating:0,userRating:0,dividedScore:0,validScoreCount:0,scoreCount:0,comment:null,wantsToTry:false,};this.subscribe=function(callback){_observers.push(callback);};this.unsubscribe=function(callback){_observers=_observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_state=state;for(var i=0;i<_observers.length;i++){_observers[i](state);}};this.getCurrentState=function(){return Object.assign({},_state);};});;angular.module('tasteatlas').service('AccentFoldingHelper',[function(){this.accentFoldedHighlight=accentFoldedHighlight;var accentMap={'ẚ':"a",'Á':"a",'á':"a",'À':"a",'à':"a",'Ă':"a",'ă':"a",'Ắ':"a",'ắ':"a",'Ằ':"a",'ằ':"a",'Ẵ':"a",'ẵ':"a",'Ẳ':"a",'ẳ':"a",'Â':"a",'â':"a",'Ấ':"a",'ấ':"a",'Ầ':"a",'ầ':"a",'Ẫ':"a",'ẫ':"a",'Ẩ':"a",'ẩ':"a",'Ǎ':"a",'ǎ':"a",'Å':"a",'å':"a",'Ǻ':"a",'ǻ':"a",'Ä':"a",'ä':"a",'Ǟ':"a",'ǟ':"a",'Ã':"a",'ã':"a",'Ȧ':"a",'ȧ':"a",'Ǡ':"a",'ǡ':"a",'Ą':"a",'ą':"a",'Ā':"a",'ā':"a",'Ả':"a",'ả':"a",'Ȁ':"a",'ȁ':"a",'Ȃ':"a",'ȃ':"a",'Ạ':"a",'ạ':"a",'Ặ':"a",'ặ':"a",'Ậ':"a",'ậ':"a",'Ḁ':"a",'ḁ':"a",'Ⱥ':"a",'ⱥ':"a",'Ǽ':"a",'ǽ':"a",'Ǣ':"a",'ǣ':"a",'Ḃ':"b",'ḃ':"b",'Ḅ':"b",'ḅ':"b",'Ḇ':"b",'ḇ':"b",'Ƀ':"b",'ƀ':"b",'ᵬ':"b",'Ɓ':"b",'ɓ':"b",'Ƃ':"b",'ƃ':"b",'Ć':"c",'ć':"c",'Ĉ':"c",'ĉ':"c",'Č':"c",'č':"c",'Ċ':"c",'ċ':"c",'Ç':"c",'ç':"c",'Ḉ':"c",'ḉ':"c",'Ȼ':"c",'ȼ':"c",'Ƈ':"c",'ƈ':"c",'ɕ':"c",'Ď':"d",'ď':"d",'Ḋ':"d",'ḋ':"d",'Ḑ':"d",'ḑ':"d",'Ḍ':"d",'ḍ':"d",'Ḓ':"d",'ḓ':"d",'Ḏ':"d",'ḏ':"d",'Đ':"d",'đ':"d",'ᵭ':"d",'Ɖ':"d",'ɖ':"d",'Ɗ':"d",'ɗ':"d",'Ƌ':"d",'ƌ':"d",'ȡ':"d",'ð':"d",'É':"e",'Ə':"e",'Ǝ':"e",'ǝ':"e",'é':"e",'È':"e",'è':"e",'Ĕ':"e",'ĕ':"e",'Ê':"e",'ê':"e",'Ế':"e",'ế':"e",'Ề':"e",'ề':"e",'Ễ':"e",'ễ':"e",'Ể':"e",'ể':"e",'Ě':"e",'ě':"e",'Ë':"e",'ë':"e",'Ẽ':"e",'ẽ':"e",'Ė':"e",'ė':"e",'Ȩ':"e",'ȩ':"e",'Ḝ':"e",'ḝ':"e",'Ę':"e",'ę':"e",'Ē':"e",'ē':"e",'Ḗ':"e",'ḗ':"e",'Ḕ':"e",'ḕ':"e",'Ẻ':"e",'ẻ':"e",'Ȅ':"e",'ȅ':"e",'Ȇ':"e",'ȇ':"e",'Ẹ':"e",'ẹ':"e",'Ệ':"e",'ệ':"e",'Ḙ':"e",'ḙ':"e",'Ḛ':"e",'ḛ':"e",'Ɇ':"e",'ɇ':"e",'ɚ':"e",'ɝ':"e",'Ḟ':"f",'ḟ':"f",'ᵮ':"f",'Ƒ':"f",'ƒ':"f",'Ǵ':"g",'ǵ':"g",'Ğ':"g",'ğ':"g",'Ĝ':"g",'ĝ':"g",'Ǧ':"g",'ǧ':"g",'Ġ':"g",'ġ':"g",'Ģ':"g",'ģ':"g",'Ḡ':"g",'ḡ':"g",'Ǥ':"g",'ǥ':"g",'Ɠ':"g",'ɠ':"g",'Ĥ':"h",'ĥ':"h",'Ȟ':"h",'ȟ':"h",'Ḧ':"h",'ḧ':"h",'Ḣ':"h",'ḣ':"h",'Ḩ':"h",'ḩ':"h",'Ḥ':"h",'ḥ':"h",'Ḫ':"h",'ḫ':"h",'H':"h",'̱':"h",'ẖ':"h",'Ħ':"h",'ħ':"h",'Ⱨ':"h",'ⱨ':"h",'Í':"i",'í':"i",'Ì':"i",'ì':"i",'Ĭ':"i",'ĭ':"i",'Î':"i",'î':"i",'Ǐ':"i",'ǐ':"i",'Ï':"i",'ï':"i",'Ḯ':"i",'ḯ':"i",'Ĩ':"i",'ĩ':"i",'İ':"i",'i':"i",'Į':"i",'į':"i",'Ī':"i",'ī':"i",'Ỉ':"i",'ỉ':"i",'Ȉ':"i",'ȉ':"i",'Ȋ':"i",'ȋ':"i",'Ị':"i",'ị':"i",'Ḭ':"i",'ḭ':"i",'I':"i",'ı':"i",'Ɨ':"i",'ɨ':"i",'Ĵ':"j",'ĵ':"j",'J':"j",'̌':"j",'ǰ':"j",'ȷ':"j",'Ɉ':"j",'ɉ':"j",'ʝ':"j",'ɟ':"j",'ʄ':"j",'Ḱ':"k",'ḱ':"k",'Ǩ':"k",'ǩ':"k",'Ķ':"k",'ķ':"k",'Ḳ':"k",'ḳ':"k",'Ḵ':"k",'ḵ':"k",'Ƙ':"k",'ƙ':"k",'Ⱪ':"k",'ⱪ':"k",'Ĺ':"a",'ĺ':"l",'Ľ':"l",'ľ':"l",'Ļ':"l",'ļ':"l",'Ḷ':"l",'ḷ':"l",'Ḹ':"l",'ḹ':"l",'Ḽ':"l",'ḽ':"l",'Ḻ':"l",'ḻ':"l",'Ł':"l",'ł':"l",'Ł':"l",'̣':"l",'ł':"l",'̣':"l",'Ŀ':"l",'ŀ':"l",'Ƚ':"l",'ƚ':"l",'Ⱡ':"l",'ⱡ':"l",'Ɫ':"l",'ɫ':"l",'ɬ':"l",'ɭ':"l",'ȴ':"l",'Ḿ':"m",'ḿ':"m",'Ṁ':"m",'ṁ':"m",'Ṃ':"m",'ṃ':"m",'ɱ':"m",'Ń':"n",'ń':"n",'Ǹ':"n",'ǹ':"n",'Ň':"n",'ň':"n",'Ñ':"n",'ñ':"n",'Ṅ':"n",'ṅ':"n",'Ņ':"n",'ņ':"n",'Ṇ':"n",'ṇ':"n",'Ṋ':"n",'ṋ':"n",'Ṉ':"n",'ṉ':"n",'Ɲ':"n",'ɲ':"n",'Ƞ':"n",'ƞ':"n",'ɳ':"n",'ȵ':"n",'N':"n",'̈':"n",'n':"n",'̈':"n",'Ó':"o",'ó':"o",'Ò':"o",'ò':"o",'Ŏ':"o",'ŏ':"o",'Ô':"o",'ô':"o",'Ố':"o",'ố':"o",'Ồ':"o",'ồ':"o",'Ỗ':"o",'ỗ':"o",'Ổ':"o",'ổ':"o",'Ǒ':"o",'ǒ':"o",'Ö':"o",'ö':"o",'Ȫ':"o",'ȫ':"o",'Ő':"o",'ő':"o",'Õ':"o",'õ':"o",'Ṍ':"o",'ṍ':"o",'Ṏ':"o",'ṏ':"o",'Ȭ':"o",'ȭ':"o",'Ȯ':"o",'ȯ':"o",'Ȱ':"o",'ȱ':"o",'Ø':"o",'ø':"o",'Ǿ':"o",'ǿ':"o",'Ǫ':"o",'ǫ':"o",'Ǭ':"o",'ǭ':"o",'Ō':"o",'ō':"o",'Ṓ':"o",'ṓ':"o",'Ṑ':"o",'ṑ':"o",'Ỏ':"o",'ỏ':"o",'Ȍ':"o",'ȍ':"o",'Ȏ':"o",'ȏ':"o",'Ơ':"o",'ơ':"o",'Ớ':"o",'ớ':"o",'Ờ':"o",'ờ':"o",'Ỡ':"o",'ỡ':"o",'Ở':"o",'ở':"o",'Ợ':"o",'ợ':"o",'Ọ':"o",'ọ':"o",'Ộ':"o",'ộ':"o",'Ɵ':"o",'ɵ':"o",'Ṕ':"p",'ṕ':"p",'Ṗ':"p",'ṗ':"p",'Ᵽ':"p",'Ƥ':"p",'ƥ':"p",'P':"p",'̃':"p",'p':"p",'̃':"p",'ʠ':"q",'Ɋ':"q",'ɋ':"q",'Ŕ':"r",'ŕ':"r",'Ř':"r",'ř':"r",'Ṙ':"r",'ṙ':"r",'Ŗ':"r",'ŗ':"r",'Ȑ':"r",'ȑ':"r",'Ȓ':"r",'ȓ':"r",'Ṛ':"r",'ṛ':"r",'Ṝ':"r",'ṝ':"r",'Ṟ':"r",'ṟ':"r",'Ɍ':"r",'ɍ':"r",'ᵲ':"r",'ɼ':"r",'Ɽ':"r",'ɽ':"r",'ɾ':"r",'ᵳ':"r",'ß':"s",'Ś':"s",'ś':"s",'Ṥ':"s",'ṥ':"s",'Ŝ':"s",'ŝ':"s",'Š':"s",'š':"s",'Ṧ':"s",'ṧ':"s",'Ṡ':"s",'ṡ':"s",'ẛ':"s",'Ş':"s",'ş':"s",'Ṣ':"s",'ṣ':"s",'Ṩ':"s",'ṩ':"s",'Ș':"s",'ș':"s",'ʂ':"s",'S':"s",'̩':"s",'s':"s",'̩':"s",'Þ':"t",'þ':"t",'Ť':"t",'ť':"t",'T':"t",'̈':"t",'ẗ':"t",'Ṫ':"t",'ṫ':"t",'Ţ':"t",'ţ':"t",'Ṭ':"t",'ṭ':"t",'Ț':"t",'ț':"t",'Ṱ':"t",'ṱ':"t",'Ṯ':"t",'ṯ':"t",'Ŧ':"t",'ŧ':"t",'Ⱦ':"t",'ⱦ':"t",'ᵵ':"t",'ƫ':"t",'Ƭ':"t",'ƭ':"t",'Ʈ':"t",'ʈ':"t",'ȶ':"t",'Ú':"u",'ú':"u",'Ù':"u",'ù':"u",'Ŭ':"u",'ŭ':"u",'Û':"u",'û':"u",'Ǔ':"u",'ǔ':"u",'Ů':"u",'ů':"u",'Ü':"u",'ü':"u",'Ǘ':"u",'ǘ':"u",'Ǜ':"u",'ǜ':"u",'Ǚ':"u",'ǚ':"u",'Ǖ':"u",'ǖ':"u",'Ű':"u",'ű':"u",'Ũ':"u",'ũ':"u",'Ṹ':"u",'ṹ':"u",'Ų':"u",'ų':"u",'Ū':"u",'ū':"u",'Ṻ':"u",'ṻ':"u",'Ủ':"u",'ủ':"u",'Ȕ':"u",'ȕ':"u",'Ȗ':"u",'ȗ':"u",'Ư':"u",'ư':"u",'Ứ':"u",'ứ':"u",'Ừ':"u",'ừ':"u",'Ữ':"u",'ữ':"u",'Ử':"u",'ử':"u",'Ự':"u",'ự':"u",'Ụ':"u",'ụ':"u",'Ṳ':"u",'ṳ':"u",'Ṷ':"u",'ṷ':"u",'Ṵ':"u",'ṵ':"u",'Ʉ':"u",'ʉ':"u",'Ṽ':"v",'ṽ':"v",'Ṿ':"v",'ṿ':"v",'Ʋ':"v",'ʋ':"v",'Ẃ':"w",'ẃ':"w",'Ẁ':"w",'ẁ':"w",'Ŵ':"w",'ŵ':"w",'W':"w",'̊':"w",'ẘ':"w",'Ẅ':"w",'ẅ':"w",'Ẇ':"w",'ẇ':"w",'Ẉ':"w",'ẉ':"w",'Ẍ':"x",'ẍ':"x",'Ẋ':"x",'ẋ':"x",'Ý':"y",'ý':"y",'Ỳ':"y",'ỳ':"y",'Ŷ':"y",'ŷ':"y",'Y':"y",'̊':"y",'ẙ':"y",'Ÿ':"y",'ÿ':"y",'Ỹ':"y",'ỹ':"y",'Ẏ':"y",'ẏ':"y",'Ȳ':"y",'ȳ':"y",'Ỷ':"y",'ỷ':"y",'Ỵ':"y",'ỵ':"y",'ʏ':"y",'Ɏ':"y",'ɏ':"y",'Ƴ':"y",'ƴ':"y",'Ź':"z",'ź':"z",'Ẑ':"z",'ẑ':"z",'Ž':"z",'ž':"z",'Ż':"z",'ż':"z",'Ẓ':"z",'ẓ':"z",'Ẕ':"z",'ẕ':"z",'Ƶ':"z",'ƶ':"z",'Ȥ':"z",'ȥ':"z",'ʐ':"z",'ʑ':"z",'Ⱬ':"z",'ⱬ':"z",'Ǯ':"z",'ǯ':"z",'ƺ':"z",'２':"2",'６':"6",'Ｂ':"B",'Ｆ':"F",'Ｊ':"J",'Ｎ':"N",'Ｒ':"R",'Ｖ':"V",'Ｚ':"Z",'ｂ':"b",'ｆ':"f",'ｊ':"j",'ｎ':"n",'ｒ':"r",'ｖ':"v",'ｚ':"z",'１':"1",'５':"5",'９':"9",'Ａ':"A",'Ｅ':"E",'Ｉ':"I",'Ｍ':"M",'Ｑ':"Q",'Ｕ':"U",'Ｙ':"Y",'ａ':"a",'ｅ':"e",'ｉ':"i",'ｍ':"m",'ｑ':"q",'ｕ':"u",'ｙ':"y",'０':"0",'４':"4",'８':"8",'Ｄ':"D",'Ｈ':"H",'Ｌ':"L",'Ｐ':"P",'Ｔ':"T",'Ｘ':"X",'ｄ':"d",'ｈ':"h",'ｌ':"l",'ｐ':"p",'ｔ':"t",'ｘ':"x",'３':"3",'７':"7",'Ｃ':"C",'Ｇ':"G",'Ｋ':"K",'Ｏ':"O",'Ｓ':"S",'Ｗ':"W",'ｃ':"c",'ｇ':"g",'ｋ':"k",'ｏ':"o",'ｓ':"s",'ｗ':"w"};function accentFold(s){if(!s){return "";}
s=s.trim();var ret="";for(var i=0;i<s.length;i++){ret+=accentMap[s.charAt(i)]||s.charAt(i);}
return ret;}
function accentFoldedHighlight(str,q){var strFolded=accentFold(str).toLowerCase().replace(/[<>]+/g,"");var qFolded=accentFold(q).toLowerCase().replace(/[<>]+/g,"");var re=new RegExp(qFolded,"g");var highlightHints=strFolded.replace(re,"<"+qFolded+">");var spos=0;var highlighted="";for(var i=0;i<highlightHints.length;i++){var c=str.charAt(spos);var h=highlightHints.charAt(i);if(h==="<"){highlighted+="<strong>";}else if(h===">"){highlighted+="</strong>";}else{spos+=1;highlighted+=c;}}
return highlighted;}}]);;angular.module('tasteatlas').service('ApiService',["$q","$http",function($q,$http){this.mainSearchMap=mainSearchMap;this.mainSearchDrawer=mainSearchDrawer;this.mainAutocomplete=mainAutocomplete;this.mainAutoCompleteRegionCategory=mainAutoCompleteRegionCategory;this.mapRegionBorders=mapRegionBorders;this.commentsGet=commentsGet;this.commentsPost=commentsPost;this.commentsHelpful=commentsHelpful;this.commentsReport=commentsReport;this.profileRatingsGet=profileRatingsGet;this.profileTastingActivityGet=profileTastingActivityGet;this.profileMapGet=profileMapGet;this.profileUpdate=profileUpdate;this.mainAutoCompleteSuggestion=mainAutoCompleteSuggestion;this.imagesUpload=imagesUpload;function mainSearch(params){var promise=$http({method:'GET',url:'/api/search/search',params:params}).then(function(response){return response.data;});return promise;}
function mainSearchMap(params){var promise=$http({method:'GET',url:'/api/search/searchmap',params:params}).then(function(response){return response.data;});return promise;}
function mainAutoCompleteSuggestion(params){var promise=$http({method:'GET',url:'/api/search/AutocompleteSuggestion',params:params}).then(function(response){return response.data;});return promise;}
function mainAutoCompleteRegionCategory(params){var promise=$http({method:'GET',url:'/api/search/AutocompleteRegionCategory',params:params}).then(function(response){return response.data;});return promise;}
function mainSearchDrawer(params){var promise=$http({method:'GET',url:'/api/search/searchdrawer',params:params}).then(function(response){return response.data;});return promise;}
function mainAutocomplete(params){var promise=$http({method:'GET',url:'/api/search/autocomplete',params:params}).then(function(response){return response.data;});return promise;}
function mapRegionBorders(params){var promise=$http({method:'GET',url:'/api/regions/regionborders',params:params}).then(function(response){return response.data;});return promise;}
function commentsGet(params){var promise=$http({method:'GET',url:'/api/comments',params:params}).then(function(response){return response.data;});return promise;}
function commentsPost(params){var promise=$http({method:'POST',url:'/api/comments',data:params}).then(function(response){return response.data;});return promise;}
function commentsHelpful(params){var promise=$http({method:'POST',url:'/api/comment/helpful',params:params}).then(function(response){return response.data;});return promise;}
function commentsReport(params){var promise=$http({method:'POST',url:'/api/comment/report',params:params}).then(function(response){return response.data;});return promise;}
function profileRatingsGet(params){var promise=$http({method:'GET',url:'/api/profile/ratings',params:params}).then(function(response){return response.data;});return promise;}
function profileTastingActivityGet(params){var promise=$http({method:'GET',url:'/api/profile/activity',params:params}).then(function(response){return response.data;});return promise;}
function profileMapGet(params){var promise=$http({method:'GET',url:'/api/profile/map',params:params}).then(function(response){return response.data;});return promise;}
function profileUpdate(params){var promise=$http({method:'POST',url:'/api/profile/update',data:params}).then(function(response){return response.data;});return promise;}
function imagesUpload(params){params=params||{};var files=params.files||[];var xhruploadprogress=params.xhruploadprogress;var xhrprogress=params.xhrprogress;var eventHandlers=undefined;if(xhrprogress){eventHandlers={progress:xhrprogress};}
var uploadEventHandlers=undefined;if(xhruploadprogress){uploadEventHandlers={progress:xhruploadprogress};}
var formData=new FormData();for(var i=0;i<files.length;i++){var key='file['+i+']';var value=files[i];var blobname=files[i].name||key;formData.append(key,value,blobname);}
var promise=$http({method:'POST',url:'/api/images/upload',data:formData,transformRequest:angular.identity,headers:{'Content-Type':undefined},eventHandlers:eventHandlers,uploadEventHandlers:uploadEventHandlers}).then(function(response){return response.data;});return promise;}}]);;angular.module('tasteatlas').service('BotInterceptor',['$window',function($window){var userAgent=$window.navigator?$window.navigator.userAgent:null;function isBotUserAgent(botPattern){if(!botPattern){return false;}
if(botPattern&&botPattern.length){var botRegExp=new RegExp(botPattern.join('|'),'i');return botRegExp.test(userAgent);}}
this.isSearchEngineBot=isBotUserAgent(['googlebot','ta-prerender-bot']);this.blockIndexing=function(){var existingMeta=document.querySelector('[name="robots"]');if(existingMeta){existingMeta.content="noindex";return;}
var meta=document.createElement('meta');meta.name="robots";meta.content="noindex";document.getElementsByTagName('head')[0].appendChild(meta);};}]);;angular.module('tasteatlas').service('BrowserService',[function(){this.isOneTabBrowser=function(params){var ua=navigator.userAgent||navigator.vendor||window.opera;return(ua.indexOf("FBAN")>-1)||(ua.indexOf("FBAV")>-1)||(ua.indexOf("Instagram")>-1);};}]);;angular.module('tasteatlas').service('ChangeLabelSubjectService',[function(){var _self=this;this.CHANGE_LABEL='CHANGE_LABEL';this._observers=[];this._state={placeholder:'Italy'};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state=state;for(var i=0;i<_self._observers.length;i++){_self._observers[i](state);}};this.getCurrentState=function(){return Object.assign({},_self._state);};}]);;angular.module('tasteatlas').service('CommunicationService',['$q','ResultMapSubjectService','ResultListSubjectService','ChangeLabelSubjectService','ItemTypes',function($q,ResultMapSubjectService,ResultListSubjectService,ChangeLabelSubjectService,ItemTypes){var _self=this;var _searchMapPageUrl='/map';var _homePageUrl='/';var itemTypes=ItemTypes;this.SEARCH_URL=_searchMapPageUrl;this.HOME_URL=_homePageUrl;this.hasSearchMap=function(){var map=document.getElementById('main-map');return map?true:false;};this.OPEN_HAMBURGER_ACTION='OPEN_HAMBURGER_ACTION';_onOpenHamburgerAction=[];this.openHamburgerAction=openHamburgerAction;function onOpenHamburgerAction(callback){_onOpenHamburgerAction.push(callback);}
this.onOpenHamburgerAction=onOpenHamburgerAction;function openHamburgerAction(state){for(var i=0;i<_onOpenHamburgerAction.length;i++){_onOpenHamburgerAction[i](state);}}
var _initialSearchItems=[{label:'Italy',regionId:94,url:'italy',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/italy-image.jpg'},{label:'France',regionId:69,url:'france',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/france-image.jpg'},{label:'Paris',regionId:11914,url:'paris-1',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/paris-image.jpg'},{label:'Japan',regionId:97,url:'japan',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/japan-1-image.jpg'},{label:'New York',regionId:4452,url:'new-york',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/new-york-image.jpg'},{label:'Tuscany',regionId:12010,url:'tuscany',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/touscany-image.jpg'},{label:'California',regionId:4414,url:'california',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/california-image.jpg'}];this.getInitialItem=function(){return{label:'Italy',regionId:94,url:'italy',ingredientGroupId:null,dishGroupId:null,image:'/Content/layout-mobile/images/home-page/italy-image.jpg'};};this.createSearchUrl=createSearchUrl;function createSearchUrl(options){options=options||{};var qsArray=[];var qs='';if(options.url){options.url=options.url.replace(/\s+/g,'-');return _self.HOME_URL+options.url;}else{return _self.SEARCH_URL;}}
this.pushSearchUrl=pushSearchUrl;function pushSearchUrl(url){if(url===''||url===undefined)
url='';history.pushState({},null,url);}
this.navigateToUrl=navigateToUrl;function navigateToUrl(url){if(!url)
return;location.href=url;}
this.doSearch=doSearch;function doSearch(options){options=options||{};var item=options.item;if(item){ChangeLabelSubjectService.dispatch({name:ChangeLabelSubjectService.CHANGE_LABEL,placeholder:item.label});if(_self.hasSearchMap()){prepareHtmlForSearch();if(item.type===itemTypes.Dish){window.open(item.url);}else if(item.type===itemTypes.Ingredient){window.open(item.url);}else if(item.type===itemTypes.Restaurant){window.open(item.url);}
else if(item.type===itemTypes.TopListArticle){window.open(item.url);}
else if(item.type===itemTypes.Event){window.open(item.url);}else if(item.type===itemTypes.Region||item.type===itemTypes.AutocompleteEntity){history.pushState(item,"test",item.url+"/map");ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID,regionId:item.regionId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID,regionId:item.regionId});}else if(item.type===itemTypes.DishGroup&&!item.regionId){history.pushState(item,"test",item.url+"/map");ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_DGID,dishGroupId:item.dishGroupId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_DGID,dishGroupId:item.dishGroupId});}else if(item.type===itemTypes.IngredientGroup&&!item.regionId){history.pushState(item,"test",item.url+"/map");ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_IGID,ingredientGroupId:item.ingredientGroupId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_IGID,ingredientGroupId:item.ingredientGroupId});}else if((item.type===itemTypes.DishGroup||item.type===itemTypes.DishGroupInRegion)&&item.regionId){history.pushState(item,"test",item.url+"/map");ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_DGID,regionId:item.regionId,dishGroupId:item.dishGroupId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_DGID,regionId:item.regionId,dishGroupId:item.dishGroupId});}else if((item.type===itemTypes.IngredientGroup||item.type===itemTypes.IngredientGroupInRegion)&&item.regionId){history.pushState(item,"test",item.url+"/map");ResultMapSubjectService.dispatch({name:ResultMapSubjectService.SEARCH_RID_IGID,regionId:item.regionId,ingredientGroupId:item.ingredientGroupId});ResultListSubjectService.dispatch({name:ResultListSubjectService.SEARCH_RID_IGID,regionId:item.regionId,ingredientGroupId:item.ingredientGroupId});}else if(item.type===itemTypes.RegionPlace&&item.regionId!==null){url='';history.pushState(item,"test",item.url);}}
else{navigateToUrl(item.url);}}
else{console.log("aaaaaa");navigateToUrl(_self.SEARCH_URL);}}
function prepareHtmlForSearch(){var bodyDiv=angular.element(document.getElementById('bodyDiv'));var globalSearch=angular.element(document.getElementById('global-search'));var searchList=globalSearch.find('.search-list');var mainMapContainer=angular.element(document.getElementById('main-map-container'));bodyDiv.removeClass('js-hide');searchList.removeClass('js-show-list');mainMapContainer.addClass('js-map-full-size');}
this.prepareItemForSearchAction=prepareItemForSearchAction;function prepareItemForSearchAction(item){var itemType=item.type||item.EntityType;var itemLabel=item.name||item.Name;var itemUrl=item.url||item.UrlLink;var itemId=item.id||item.EntityId;mappedItem={};mappedItem.type=itemType;mappedItem.category=item.category;mappedItem.label=itemLabel;mappedItem.url=itemUrl;mappedItem.id=itemId;if(itemId&&(itemType===itemTypes.Region||itemType===itemTypes.RegionPlace||itemType===itemTypes.AutocompleteEntity)){mappedItem.regionId=itemId;mappedItem.url=itemUrl;}
else if(item.EntityId2&&(itemType===itemTypes.DishGroup||itemType===itemTypes.DishGroupInRegion)){mappedItem.regionId=item.EntityId2;mappedItem.dishGroupId=itemId;}else if(item.EntityId2&&(itemType===itemTypes.IngredientGroup||itemType===itemTypes.IngredientGroupInRegion)){mappedItem.regionId=item.EntityId2;mappedItem.ingredientGroupId=itemId;}
if(itemId&&!item.EntityId2&&itemType===itemTypes.DishGroup){mappedItem.dishGroupId=itemId;}
else if(itemId&&!item.EntityId2&&itemType===itemTypes.IngredientGroup){mappedItem.ingredientGroupId=itemId;}
return mappedItem;}
this.mapAutocompleteResults=function(autocompleteResults){if(!autocompleteResults){return{CustomItems:[],Items:[]};}
return autocompleteResults;};function getAutocompleteSectionItems(section,spliceLevel){var items=[];if(!section)
return items;section.Items.splice(spliceLevel,section.Items.length-spliceLevel);if(section.Title)
items.push({label:section.Title,section:true});return items.concat((section.Items||[]).map(mapAutocompleteItem));}
this.mapAutocompleteItem=mapAutocompleteItem;function mapAutocompleteItem(item){item.Name=item.Label;if(item.Type===itemTypes.Dish||item.Type===itemTypes.Ingredient){item.Label='';}
if(item.Type===itemTypes.DishGroup){item.Category='DISH';item.Label='';}
if(item.Type===itemTypes.IngredientGroup){item.Category='INGREDIENT';item.Label='';}
if(item.Type===itemTypes.Event||item.Type===itemTypes.Restaurant||item.Type===itemTypes.RegionPlace||item.Type===itemTypes.Region||item.Type===itemTypes.TopListArticle){item.Label=item.SecondaryLabel;}
if(item.Type===itemTypes.Region||item.Type===itemTypes.RegionPlace){if(item.Category==='Country'){item.Label='';}
item.Category='';}
return{id:item.Id,type:item.Type,regionId:item.RegionId,label:item.Label,name:item.Name,category:item.Category,image:item.Image,url:item.Url};}}]);;angular.module('tasteatlas').service('DesktopInteractionService',['$window',function($window){var _self=this;this.body=angular.element(document.getElementsByTagName('body'));this.openDesktopSearch=openDesktopSearch;function openDesktopSearch(){var body=angular.element(document.getElementsByTagName('body'));var globalSearch=angular.element(document.getElementById('global-search'));var inputSearch=globalSearch.find('input');var footer=angular.element(document.getElementById('footer'));var icon=angular.element(document.getElementsByClassName('icon--search-header'));globalSearch.addClass('js-show');setTimeout(function(){inputSearch.focus();},50);}
this.closeDesktopSearch=closeDesktopSearch;function closeDesktopSearch(){var body=angular.element(document.getElementsByTagName('body'));var globalSearch=angular.element(document.getElementById('global-search'));var inputSearch=globalSearch.find('input');var icon=angular.element(document.getElementsByClassName('icon--search-header'));body.removeClass('body--fixed');globalSearch.removeClass('js-show');icon.removeClass('js-hide');}
this.openAutocompleteList=openAutocompleteList;function openAutocompleteList(){var inputSearchContainer=angular.element(document.getElementsByClassName('input-container'));var inputSearch=_self.inputSearchContainer.find('input');var inputSearchList=angular.element(document.getElementsByClassName('search-list'));inputSearch.addClass('js-show-list');inputSearch.focus();}
this.openLoginPopup=openLoginPopup;function openLoginPopup(){var body=angular.element(document.getElementsByTagName('body')[0]);body.addClass('js-login-show');}
this.hideLoginPopup=hideLoginPopup;function hideLoginPopup(){var body=angular.element(document.getElementsByTagName('body')[0]);body.removeClass('js-login-show');}
this.openRegistrationPopup=openRegistrationPopup;function openRegistrationPopup(){var body=angular.element(document.getElementsByTagName('body')[0]);hideLoginPopup();body.addClass('js-registration-show');}
this.closeRegistrationPopup=closeRegistrationPopup;function closeRegistrationPopup(){var body=angular.element(document.getElementsByTagName('body')[0]);body.removeClass('js-registration-show');}}]);;angular.module('tasteatlas').service('DistanceCalculator',['$timeout',function($timeout){var _self=this;_self.distanceBetweenPoints=distanceBetweenPoints;function distanceBetweenPoints(lat1,lng1,lat2,lng2,miles){if(typeof miles==="undefined"){miles=false;}
function deg2rad(deg){return deg*(Math.PI/180);}
function square(x){return Math.pow(x,2);}
var r=6371;lat1=deg2rad(lat1);lat2=deg2rad(lat2);var lat_dif=lat2-lat1;var lng_dif=deg2rad(lng2-lng1);var a=square(Math.sin(lat_dif/2))+Math.cos(lat1)*Math.cos(lat2)*square(Math.sin(lng_dif/2));var d=2*r*Math.asin(Math.sqrt(a));return{miles:d*0.621371,kilometers:d}}}]);;angular.module('tasteatlas').service('FilePickerService',['$q',function($q){var _self=this;this.ProgressEvent='ProgressEvent';function onLoad(file,reader,deferred){return function(){var dataUrl=reader.result;var photo={type:'dataURL',url:dataUrl,description:'',file:file};deferred.resolve(photo);};}
function onError(reader,deferred){return function(){deferred.reject(reader.result);};}
function onProgress(reader,scope){return function(event){scope.$broadcast(_self.ProgressEvent,{total:event.total,loaded:event.loaded});};}
function getReader(file,deferred,scope){var reader=new FileReader();reader.onload=onLoad(file,reader,deferred);reader.onerror=onError(reader,deferred);reader.onprogress=onProgress(reader,scope);return reader;}
this.readAsDataUrl=function(file,scope){if(scope===undefined)
throw new Error('Scope is not defined.');var deferred=$q.defer();var reader=getReader(file,deferred,scope);reader.readAsDataURL(file);return deferred.promise;};this.triggerFilePicker=function(){angular.element(document.querySelector('.ta-file-upload')).trigger('click');};}]);;angular.module('tasteatlas').factory('GeolocationService',['$q','$rootScope','$window','$cookies',function($q,$rootScope,$window,$cookies){function getGeoLocationDecision(){return $cookies.get('geoAuth');}
function saveGeoLocationDecision(){return $cookies.put('geoAuth',1);}
function isFacebookApp(){var ua=navigator.userAgent||navigator.vendor||window.opera;return(ua.indexOf('FBAN')>-1)||(ua.indexOf('FBAV')>-1);}
return{granted:function(){return 'GRANTED';},prompt:function(){return 'PROMPT';},denided:function(){return 'DENIED';},getLocation:function(opts){var deferred=$q.defer();if($window.navigator&&$window.navigator.geolocation){$window.navigator.geolocation.getCurrentPosition(function(position){saveGeoLocationDecision();deferred.resolve(position);},function(error){if(error.code===error.TIMEOUT||error.code===error.POSITION_UNAVAILABLE){deferred.resolve('TROUBLE');}
else{deferred.resolve('DENIED');}},opts);}
else{console.log('Browser doesnt support geolocation.');}
return deferred.promise;},handlePremission:function(){var deferred=$q.defer();if(isFacebookApp()){deferred.resolve('DENIED');}
var geoAuth=getGeoLocationDecision();if(navigator.permissions===undefined){if(geoAuth==='1'){deferred.resolve('GRANTED');}
else if(geoAuth==='0'){deferred.resolve('DENIED');}
else{deferred.resolve('PROMPT');}}else{navigator.permissions.query({name:'geolocation'}).then(function(result){if(result.state==='granted'){saveGeoLocationDecision();deferred.resolve('GRANTED');}else if(result.state==='prompt'){deferred.resolve('PROMPT');}else if(result.state==='denied'){deferred.resolve('DENIED');}});}
return deferred.promise;}};}]);;angular.module('tasteatlas').service('LoaderService',['$timeout',function($timeout){var _self=this;this.body=angular.element(document.getElementsByTagName('body'));this.loader=angular.element(document.getElementById('loader'));this.barsDiv=this.loader.find('.bar > div');this.triggerStartLoader=triggerStartLoader;function triggerStartLoader(){this.body.addClass('loading');}
this.triggerStopLoader=triggerStopLoader;function triggerStopLoader(){this.body.removeClass('loading');this.body.addClass('loading-finish');$timeout(function(){var body=angular.element(document.getElementsByTagName('body'));body.removeClass('loading-finish');},2000);}}]);;angular.module('tasteatlas').service('MainHelper',['$q','$filter','$timeout','UserSubjectService','$window','GlobalStatusService',function($q,$filter,$timeout,UserSubjectService,$window,GlobalStatusService){var _self=this;this.fullScreenSearchResults=false;this.isFullScreenSearchResults=function(){return _self.fullScreenSearchResults;};this.mainProgressShow=mainProgressShow;this.mainProgressHide=mainProgressHide;this.mainProgressIsShown=mainProgressIsShown;this.createImageFilter=createImageFilter;this.getResizeImageUrl=getResizeImageUrl;this.closeAllChildren=closeAllChildren;var _mainProgressQueue=0;this.DISH_OVERVIEW='DISH_OVERVIEW';this.DISH_WHERETOEAT='DISH_WHERETOEAT';this.DISH_RECIPE='DISH_RECIPE';this.DISH_COMMENTS='DISH_COMMENTS';this.INGREDIENT_OVERVIEW='INGREDIENT_OVERVIEW';this.INGREDIENT_WHERETOBUY='INGREDIENT_WHERETOBUY';this.INGREDIENT_RECIPE='INGREDIENT_RECIPE';this.INGREDIENT_COMMENTS='INGREDIENT_COMMENTS';this.RESTAURANT='RESTAURANT';this.RESTAURANT_DISH='RESTAURANT_DISH';this.DISH_CATEGORY='DISH_CATEGORY';this.INGREDIENT_CATEGORY='INGREDIENT_CATEGORY';this.REGION='REGION';this.DISH_REGION='DISH_REGION';this.INGREDIENT_REGION='INGREDIENT_REGION';var _socialData=[{type:_self.DISH_OVERVIEW,msg:'Hey! Take a look at this page about '},{type:_self.DISH_WHERETOEAT,msg:'Hey! Take a look at the list of best places in the world to eat '},{type:_self.DISH_RECIPE,msg:'Hey! Take a look at the authentic recipe for '},{type:_self.DISH_COMMENTS,msg:'Hey! Take a look at this page about '},{type:_self.INGREDIENT_OVERVIEW,msg:'Hey! Take a look at this page about '},{type:_self.INGREDIENT_WHERETOBUY,msg:'Hey! Find out where to buy '},{type:_self.INGREDIENT_COMMENTS,msg:'Hey! Take a look at this page about '},{type:_self.RESTAURANT,msg:'Hey hey! Take a look at '},{type:_self.RESTAURANT_DISH,msg:'Hey hey! Take a look at '},{type:_self.DISH_CATEGORY,msg:'Hey! Take a look at this page about '},{type:_self.INGREDIENT_CATEGORY,msg:'Hey! Take a look at this page about '},{type:_self.REGION,msg:'Hey! Take a look at this page about '},{type:_self.DISH_REGION,msg:'Hey! Take a look at this page about '},{type:_self.INGREDIENT_REGION,msg:'Hey! Take a look at this page about '}];this.getOrderByArray=function(){return[{name:'Most popular',urlValue:'popularity',value:0},{name:'Best rated',urlValue:'rating',value:1},{name:'Alphabetically',urlValue:'alphabet',value:2},{name:'Location',urlValue:'location',value:3},{name:'Least popular',urlValue:'least_popular',value:4},{name:'Worst rated',urlValue:'worst_rating',value:5}];};this.getEventOrderByArray=function(location){var options=[{name:'Selection',value:0},{name:'Soonest',value:1},{name:'Most popular',value:3}];if(location&&location.longitude&&location.latitude){options.push({name:'Nearest',value:2});}
return options;};this.findOrderByFromParams=function(){var orderby=_self.getParameterByName('orderby');if(!orderby)
return 0;var orderByArray=_self.getOrderByArray();var order=orderByArray.find(function(c){return c.urlValue===orderby.toLowerCase();});if(order){return order.value;}else{return 0;}};this.getParameterByName=function(name,url){if(!url)url=window.location.href;name=name.replace(/[\[\]]/g,'\\$&');var regex=new RegExp('[?&]'+name+'(=([^&#]*)|&|#|$)'),results=regex.exec(url);if(!results)return null;if(!results[2])return '';return decodeURIComponent(results[2].replace(/\+/g,' '));};this.createSharingObject=function(options){var prefix='';_socialData.filter(function(data){if(data.type===options.pageType){prefix=data.msg;}
return data;});if(options.pageType===_self.INGREDIENT_REGION||options.pageType===_self.DISH_REGION){name=prefix+options.name+' in '+options.region;}else if(options.pageType===_self.RESTAURANT_DISH){name=prefix+options.name+' in '+options.subName+', '+options.country;}else if(options.pageType===_self.RESTAURANT){name=prefix+options.name+' in '+options.region+', '+options.country;}else{name=prefix+options.name;}
var image='';if(options.image!==undefined)
image=options.image;return{pageType:options.pageType,name:name,image:image,link:options.link};};this.determineDishPageType=function(page){var tempPage=_self.DISH_OVERVIEW;if(page===''){tempPage=_self.DISH_OVERVIEW;}else if(page==='wheretoeat'){tempPage=_self.DISH_WHERETOEAT;}else if(page==='recipe'){tempPage=_self.DISH_RECIPE;}else if(page==='comments'){tempPage=_self.DISH_COMMENTS;}else{tempPage=_self.DISH_OVERVIEW;}
return tempPage;};this.determineIngredientPageType=function(page){var tempPage=_self.INGREDIENT_OVERVIEW;if(page===''){tempPage=_self.INGREDIENT_OVERVIEW;}else if(page==='wheretobuy'){tempPage=_self.INGREDIENT_WHERETOBUY;}else if(page==='recipe'){tempPage=_self.INGREDIENT_RECIPE;}else if(page==='comments'){tempPage=_self.INGREDIENT_COMMENTS;}else{tempPage=_self.INGREDIENT_OVERVIEW;}
return tempPage;};this.INIT_MASONRY='INIT_MASONRY';this.msnry_options={columnWidth:'.grid-sizer',gutter:'.gutter-sizer',itemSelector:'.grid-item',percentPosition:true,horizontalOrder:true};function mainProgressShow(){if(_mainProgressQueue===0){$timeout(function(){$("#ta-main-page-loader").addClass("show");},0);}
_mainProgressQueue++;}
function mainProgressHide(options){options=options||{};var count=options.count>0?options.count:1;var forceHide=options.forceHide===true?true:false;if(_mainProgressQueue>count&&!forceHide)_mainProgressQueue=_mainProgressQueue-count;else _mainProgressQueue=0;if(_mainProgressQueue===0){$timeout(function(){$("#ta-main-page-loader").removeClass("show");},0);}}
function mainProgressIsShown(){return _mainProgressQueue>0;}
function getResizeImageUrl(image,options){if(!image)
return undefined;if(!options)
return image;var qsArray=[];if(options.width)qsArray.push('w='+encodeURIComponent(options.width));if(options.height)qsArray.push('h='+encodeURIComponent(options.height));if(options.crop)qsArray.push('c=c');if(!options.crop)qsArray.push('c=o');if(qsArray.length===0)
return image;var qs='?'+qsArray.join('&');return image+qs;}
function closeAllChildren(item){if(item===undefined)
return;angular.forEach(item,function(value,key){if(item[key].toggleChildren!==undefined){item[key].toggleChildren=false;}
if(item[key].child!==undefined)
closeAllChildren(item[key].child);});}
function createImageFilter(regionId,width,height,rootRegionBackgroundColor,borderColor,borderWidth,innerRegionFillColor){if(!regionId)
throw new Error('Region id not provided');if(!width)
width=52;if(!height)
height=52;if(!innerRegionFillColor)
innerRegionFillColor='#f8533d';if(!rootRegionBackgroundColor){rootRegionBackgroundColor='#d9d9d9';}
if(rootRegionBackgroundColor==='transparent'){rootRegionBackgroundColor=null;}
if(!borderColor){borderColor='#fff';}
var imageData={'regionid':regionId,'height':height,'width':width,'borderColor':borderColor,'borderWidth':borderWidth,'innerRegionFillColor':innerRegionFillColor,'rootregionbackgroundcolor':rootRegionBackgroundColor};return imageData;}
this.parseDishCriticInfo=function(restaurant){var name;var count=restaurant.CriticCount;var profile_url;var source_url;if(restaurant.Critic){name=restaurant.Critic.Name;profile_url=restaurant.Critic.ProfileUrl;source_url=restaurant.Critic.Source;}
if(name===undefined||name===null)
return;var info='';var parsedInfo='';if(profile_url){parsedInfo='Recommended  by '+'<a target="_blank" href="'+profile_url+'"><strong> '+name+'</strong > </a>';}
else if(source_url){parsedInfo='Recommended  by '+'<a target="_blank" href="'+$filter('acceptLink')(source_url)+'"><strong> '+name+'</strong > </a>';}
else{parsedInfo='Recommended  by '+'<strong>'+name+'</strong>';}
var addedInfo='';if(count===1){info=parsedInfo;}else if(count===2){addedInfo=' '+'and 1 other food critic.';info=parsedInfo+addedInfo;}else{count=count-1;addedInfo=' '+'and '+count+' other food critics.';info=parsedInfo+addedInfo;}
return info;};this.IVote=function(data){if(data.length===0)
return;var isAnonymous=UserSubjectService.isInAnonymousRole();if(isAnonymous===true)
return;var id=UserSubjectService.getUserId();var userId=parseInt(id);return data.includes(userId)?true:false;};this.redirectToGoogleMaps=function(location,lng,lat){if(lng===undefined||lat===undefined)
return;var url='';if(location.latitude!==''&&location.longitude!==''){alert('You are now leaving Tasteatlas');url='http://maps.google.com/maps?saddr='+location.latitude+','+location.longitude+'&daddr='+lat+','+lng;window.open(url,'_blank');}else{url='http://maps.google.com/maps?q='+lat+','+lng;window.open(url,'_blank');}};this.redirectToAddress=function(address){var url='http://maps.google.com/maps?q='+address;window.open(url,'_blank');};this.paginate=function(array,page_size,page_number){--page_number;return array.slice(page_number*page_size,(page_number+1)*page_size);};this.checkLastPage=function(PageIndex,NumberOfPages){if(PageIndex<NumberOfPages){return false;}
else{return true;}};this.redirect=function(url){location.pathname=url;};this.calculatePageSize=function(displayPageSize,bannerPosition,itemCount,PageIndex){var loadedBannerCount=parseInt(displayPageSize*PageIndex/bannerPosition);var maxSlots=displayPageSize*PageIndex;var pageSize=maxSlots-itemCount-loadedBannerCount;return pageSize;};this.determineTitleRegionType=function(regionLevel){var regionType=null;switch(regionLevel){case 0:regionType=null;return regionType;case 1:regionType='CITY';return regionType;case 2:regionType='CITY';return regionType;case 3:regionType='CAPITAL_CITY';return regionType;case 4:regionType='REGION';return regionType;case 5:regionType='REGION';return regionType;case 6:regionType='REGION';return regionType;case 7:regionType='COUNTRY';return regionType;case 8:regionType='COUNTRY';return regionType;case 9:regionType='CONTINENT';return regionType;}};this.calculateMobileOffset=function(){var scrollTopOffset=angular.element("#pg_content_holder").position().top;var stickyNavHeight=angular.element("#nav-stick").height();var offSet=scrollTopOffset-stickyNavHeight-20;return offSet;};this.addMobilePagePlaceholder=function(isSectionLoaded){var section=angular.element('#pg_content_holder');if(isSectionLoaded){section.removeClass('page__holder');}else{section.addClass('page__holder');}};this.addDesktopPagePlaceholder=function(isSectionLoaded,sectionName,placeholderClass){var section=angular.element(sectionName);if(isSectionLoaded){section.removeClass(placeholderClass);}else{section.addClass(placeholderClass);}};this.getMoreFromRegionTitle=function(region){var regionName=region.RegionName;var parentRegionName=region.ParentRegionName;if(!parentRegionName){return "More from "+regionName;}
else{return "More from "+regionName+" & "+parentRegionName;}};this.showBannerOnSearchResultsMobile=function($index,itemsCount){var oneRow=2;var itemPosition=$index+1;var twoRows=oneRow*2;var threeRows=oneRow*3;if(itemsCount<10){return false;}
if(itemsCount===itemPosition){return false;}
if(itemPosition===2*twoRows){return true;}
if(itemPosition>5*oneRow){var newItemPosition=itemPosition-twoRows;if(newItemPosition%threeRows===0){return true;}}
return false;};this.scrollToTargetAdjusted=function(id,offset){$timeout(function(){var element=document.getElementById(id);if(!element){return;}
var headerOffset=offset;var bodyRect=document.body.getBoundingClientRect().top;var elementRect=element.getBoundingClientRect().top;var elementPosition=elementRect-bodyRect;var offsetPosition=elementPosition-headerOffset;window.scrollTo({top:offsetPosition});});};this.getDistance=function(establishment){var userLocation=GlobalStatusService.getUserLocation();if(establishment==='undefined'||!establishment.DistanceMiles||!establishment.Distance){return}
if(userLocation==='US'){return establishment.DistanceMiles.toFixed(2)+' mi';}
return establishment.Distance.toFixed(2)+' km';};this.sideScroll=function(element,direction,speed,distance,step){scrollAmount=0;var slideTimer=setInterval(function(){if(direction=='left'){element.scrollLeft-=step;}else{element.scrollLeft+=step;}
scrollAmount+=step;if(scrollAmount>=distance){window.clearInterval(slideTimer);}},speed);};this.includeHorizontalScroll=function(elementId){var ingredientsList=document.getElementById(elementId);if(!ingredientsList){return false;}
var offsetWidth=ingredientsList.offsetWidth;var scrollWidth=ingredientsList.scrollWidth;return scrollWidth>offsetWidth;};function determineDishCountEqualityInRow(params){var currentIndex=params.currentIndex;var firstSiblingIndex=params.firstSiblingIndex;var secondSiblingIndex=params.secondSiblingIndex;var currentItemDishCount=params.list[currentIndex].Dishes.length;var currentItemHasContent=params.list[currentIndex].Critic||params.list[currentIndex].Description;var firstSibling=params.list[currentIndex+firstSiblingIndex];var firstSiblingDishCount=(firstSibling&&firstSibling.Dishes.length)?firstSibling.Dishes.length:currentItemDishCount;var firstSiblingHasContent=firstSibling.Critic||firstSibling.Description;var secondSibling=params.list[currentIndex+secondSiblingIndex];var secondSiblingDishCount=(secondSibling&&secondSibling.Dishes.length)?secondSibling.Dishes.length:currentItemDishCount;var secondSiblingHasContent=secondSibling.Critic||secondSibling.Description;var allItemsHaveContent=currentItemHasContent&&firstSiblingHasContent&&secondSiblingHasContent;return(currentItemDishCount===firstSiblingDishCount)&&(currentItemDishCount===secondSiblingDishCount)&&allItemsHaveContent;}
this.shouldAlignRecommendedDishesToBottom=function(index,restaurantsList){var isFirstInRow=index%3===0;var isSecondInRow=(index-1)%3===0;var isThirdInRow=(index-2)%3===0;if(isFirstInRow){return determineDishCountEqualityInRow({list:restaurantsList,currentIndex:index,firstSiblingIndex:1,secondSiblingIndex:2});}
if(isSecondInRow){return determineDishCountEqualityInRow({list:restaurantsList,currentIndex:index,firstSiblingIndex:-1,secondSiblingIndex:1});}
if(isThirdInRow){return determineDishCountEqualityInRow({list:restaurantsList,currentIndex:index,firstSiblingIndex:-1,secondSiblingIndex:-2});}
return false;};this.scrollToTop=function(){$window.scrollTo(0,0);};}]);;angular.module('tasteatlas').service('MainMapSearchService',["$q","TagService",function($q,TagService){this.searchTagResults=function(options){var orderBy=0;if(options.orderBy)orderBy=options.orderBy;var promise=TagService.getItemsV3({tag:options.TagName,page:0,pageSize:48,sort:orderBy,removeDescription:options.removeDescription});return $q.resolve(promise).then(mapTagDishResults);};function mapTagDishResults(dishGroupResults){return dishGroupResults.data;}}]);;angular.module('tasteatlas').service('MainMapService',["$q","$timeout","mapConfig","MapHelper","RegionService","CommunicationService","BrowserService",function($q,$timeout,mapConfig,MapHelper,RegionService,CommunicationService,BrowserService){this.initMap=initMap;this.getTarget=getTarget;this.changeTarget=changeTarget;this.updateSize=updateSize;this.clearBorderLayer=clearBorderLayer;this.setBorderLayer=setBorderLayer;this.setFeaturesLayer=setFeaturesLayer;this.getFeatureUnselectedStyle=getFeatureUnselectedStyle;this.getFeatureSelectedStyle=getFeatureSelectedStyle;this.getClusterUnselectedStyle=getClusterUnselectedStyle;this.getClusterSelectedStyle=getClusterSelectedStyle;var _mapId='main-map';var _mapIdOverride=null;var _maxZoomLevel=mapConfig.maxZoomLevel;var _minZoomLevel=mapConfig.minZoomLevel;var _zoomFactor=mapConfig.zoomFactor;var _selectedFeatureZIndex=mapConfig.selectedFeatureZIndex;var _maxExtent=ol.proj.get("EPSG:3857").getExtent();var _map;var _isMobile=false;var _featureItemsLayer;var _featureClusterLayer;var _featureSingleLayer;var _borderLayer;var _borderLayerAdditional;var _doodleLayer;var _selectedFeatureInteraction;var _selectedClusterInteraction;var _featureStyleCache={};var _clusterStyleCache={};var _selectedFeatureStyleCache={};var _selectedClusterStyleCache={};var _featureIconCache={};function elem_id(id){return document.getElementById(id);}
var _popup;var _popup_content;var _olpopup;var _distribution=6;var _radius=100;var _popupItemSize=80;var _externalRadius=0;var _angle=0;var _temporaryPopupFeature;var _maxHolderLevel=3;var _selectedTextColor='#FFFFFF';var _notSelectedTextColor='#6d6d6d';var _selectedRectColor='#E21800';var _notSelectedRectColor='#FEFEFE';var _textFont="Normal 10px 'Montserrat',Arial";var _textFontClose="Normal 14 px 'Montserrat', 'Arial'";var _overlayColor='#E21800';var _overlayOpacity=0.1;var _rectStroke="#FFFFFF";var _rectStrokeWidth=2;var _popupCloseRectFillNotSelected="#E21800";var _popupCloseTxtNotSelectedFill="#FFFFFF";var _popupCloseRectFillSelected="#6D6D6D";var _popupCloseTxtSelectedFill="#FFFFFF";var _popupCloseSize='30px';var _popupCloseOpacity=1;var _regionList;var _regionListContent;var _regionListPopup;var _regionListMapPinPopup;var _regionListMapPin;var _regionListMapPinContent;var _regionList_VertOffset;this.initLandingPageMap=function(options){_mapId=options.mapId;_maxZoomLevel=options.maxZoomLevel||_maxZoomLevel;_minZoomLevel=options.minZoomLevel||_minZoomLevel;_maxExtent=options.maxExtent||_maxExtent;_zoomFactor=options.zoomFactor||_zoomFactor;_isMobile=options.isMobile;var layers=MapHelper.getBaseLayers();var interactions=ol.interaction.defaults({dragPan:false,doubleClickZoom:false,mouseWheelZoom:false,pinchZoom:false,altShiftDragRotate:false,pinchRotate:false});_map=new ol.Map({layers:layers,controls:[],interactions:interactions,target:_mapId,rendered:"canvas",view:new ol.View({center:toMercatorCoordinate([0,25]),zoom:3,maxZoom:_maxZoomLevel,minZoom:_minZoomLevel,zoomFactor:_zoomFactor}),loadTilesWhileInteracting:true,loadTilesWhileAnimating:true});if(options.extent){MapHelper.fitExtentAnimation({map:_map,extent:options.extent});}
return $q.resolve(_map);};function initMap(options){options=options||{};_mapId=_mapIdOverride||options.mapId||_mapId;_maxZoomLevel=options.maxZoomLevel||_maxZoomLevel;_minZoomLevel=options.minZoomLevel||_minZoomLevel;_maxExtent=options.maxExtent||_maxExtent;_zoomFactor=options.zoomFactor||_zoomFactor;_maxHolderLevel=options.isMobile?1:3;_isMobile=options.isMobile;var layers=MapHelper.getBaseLayers();var interactions=ol.interaction.defaults({dragPan:true,altShiftDragRotate:false,pinchRotate:false});_popup=elem_id('popup');_popup_content=elem_id('popup-content-map-id');_olpopup=new ol.Overlay({element:_popup,autoPan:false});_regionList=elem_id('region-list');_regionList.classList.add('map-region-list');_regionListContent=elem_id('region-list-content');_regionListPopup=new ol.Overlay({element:_regionList,positioning:'center-left',offset:[25,0],autoPan:false});_regionListMapPin=elem_id('region-list-map-pin');_regionListMapPinContent=elem_id('region-list-map-pin-content');_regionListMapPinPopup=new ol.Overlay({element:_regionListMapPin,positioning:'center-center',offset:[0,0],autoPan:false});var zoomIn=document.createElement('i');zoomIn.classList.add('icon','icon__map-zoom-in');var zoomOut=document.createElement('i');zoomOut.classList.add('icon','icon__map-zoom-out');var zoomOptions={zoomInLabel:zoomIn,zoomOutLabel:zoomOut};_map=new ol.Map({layers:layers,controls:[new ol.control.Zoom(zoomOptions)],interactions:interactions,target:_mapId,rendered:"canvas",view:new ol.View({center:toMercatorCoordinate([0,25]),zoom:3,maxZoom:_maxZoomLevel,minZoom:_minZoomLevel,zoomFactor:_zoomFactor}),loadTilesWhileInteracting:true,loadTilesWhileAnimating:true});_map.addOverlay(_olpopup);_map.addOverlay(_regionListPopup);_map.addOverlay(_regionListMapPinPopup);initHoverStyle();initMapClick(options);initPopupRemove();if(options.extent){MapHelper.fitExtentAnimation({map:_map,extent:options.extent});}
return _map;}
function changeTarget(mapId){if(!mapId||_mapId===mapId)
return;if(!_map){_mapIdOverride=mapId;console.log('changeTarget:mapIdOverride: '+_mapIdOverride);return;}
_map.setTarget(mapId);_mapId=mapId;console.log('changeTarget:mapId: '+_mapId);}
function getTarget(){return _mapId;}
function updateSize(){if(!_map)
return;_map.updateSize();}
function initPopupRemove(){_map.on("movestart",function(e){deletePopupClusterItems();deleteRegionListPopup();e.stopPropagation();});}
function initHoverStyle(){var target=_map.getTarget();var jTarget=typeof target==="string"?$("#"+target):$(target);_map.on("pointermove",function(e){if(e.dragging){return;}
var pixel=_map.getEventPixel(e.originalEvent);var optionsHit={layerFilter:isHoverLayerFilter,hitTolerance:undefined};var hit=_map.hasFeatureAtPixel(pixel,optionsHit);jTarget.css("cursor",hit?"pointer":"");});}
function initMapClick(options){options=options||{};var isEnabledFeatureNavigate=options.navigateToItem||false;var isEnabledLocationTooltip=options.displayLocationTooltip||false;if(!isEnabledFeatureNavigate&&!isEnabledLocationTooltip)
return;_map.on("singleclick",function(e){var map=angular.element('#main-map-container');if(map.hasClass('js-map-no-event')){map.removeClass('js-map-no-event');return;}
var pixel=_map.getEventPixel(e.originalEvent);var optionsClusterClick={layerFilter:isClusterLayerFilter,hitTolerance:undefined};var featureCluster=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsClusterClick);var optionsItemsClick={layerFilter:isItemsLayerFilter,hitTolerance:undefined};var featureItem=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsItemsClick);if(featureCluster&&isEnabledFeatureNavigate){featureNavigate(featureCluster,'cluster');e.stopPropagation();}
else if(featureItem&&isEnabledFeatureNavigate){featureNavigate(featureItem,'item');e.stopPropagation();}
else if(!featureItem&&!featureCluster&&isEnabledLocationTooltip){showNerbyRegions(e.coordinate,false);e.stopPropagation();}else{e.stopPropagation();}});_map.on("dblclick",function(e){var map=angular.element('#main-map-container');if(map.hasClass('js-map-no-event')){map.removeClass('js-map-no-event');return;}
deletePopupClusterItems();deleteRegionListPopup();e.stopPropagation();});_map.on("pointerdown",function(e){if(e.originalEvent.which!==2)
return;var pixel=_map.getEventPixel(e.originalEvent);var optionsItemsClick={layerFilter:isItemsLayerFilter,hitTolerance:undefined};var featureItem=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsItemsClick);if(featureItem&&isEnabledFeatureNavigate){featureNavigate(featureItem,'item',true);e.stopPropagation();}});}
var _isFirstClickFinished=false;function featureNavigate(feature,type,newTab){if(!feature)
return;if(type==='cluster'){var singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);var coordinate=singleFeature.getGeometry().getCoordinates();var numberOfItemsInCluster=feature.getProperties().features.length;var zoomLevel=_map.getView().getZoom();if(zoomLevel>=_maxZoomLevel||numberOfItemsInCluster<=9){_isFirstClickFinished=false;var clusteredFeatures=MapHelper.getClusterFeatures(feature);deletePopupClusterItems();deleteRegionListPopup();createClusteredPopup(clusteredFeatures);_temporaryPopupFeature=feature;_featureClusterLayer.getSource().removeFeature(feature);_selectedFeatureInteraction.getFeatures().clear();_selectedClusterInteraction.getFeatures().clear();var geometry=feature.getGeometry();coordinate=geometry.getCoordinates();var pixel=_map.getPixelFromCoordinate(coordinate);var coord=_map.getCoordinateFromPixel(pixel);_olpopup.setPosition(coord);$timeout(function(){_isFirstClickFinished=true;},50);}
else{MapHelper.flyToAnimation({map:_map,coordinate:coordinate,zoomLevel:_maxZoomLevel});}}
else{singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);var payload=MapHelper.getMapFeatureData(singleFeature);if(payload===undefined)
return;if(payload.type===1||payload.type===2){if(BrowserService.isOneTabBrowser())
window.location.href=payload.url;else
window.open(payload.url);}
deleteRegionListPopup();}}
function isHoverLayerFilter(layerCandidate){return isItemsLayerFilter(layerCandidate)||isClusterLayerFilter(layerCandidate);}
function isItemsLayerFilter(layerCandidate){return layerCandidate===_featureItemsLayer||layerCandidate===_featureSingleLayer;}
function isClusterLayerFilter(layerCandidate){return layerCandidate===_featureClusterLayer;}
function featureCallbackReturnFeature(feature){return feature;}
function getFeatureUnselectedStyle(feature,resolution){return getFeatureIconStyle(feature,resolution,{selected:false});}
function getFeatureSelectedStyle(feature,resolution){var iconStyle=getFeatureIconStyle(feature,resolution,{selected:true,zindex:_selectedFeatureZIndex});var clusterStyle=getFeatureClusterStyle(feature,resolution,{selected:false,zindex:_selectedFeatureZIndex+1});if(!clusterStyle)
return iconStyle;return[].concat(iconStyle).concat(clusterStyle);}
function getClusterUnselectedStyle(feature,resolution){return getFeatureClusterStyle(feature,resolution,{selected:false});}
function getClusterSelectedStyle(feature,resolution){var iconStyle=getFeatureIconStyle(feature,resolution,{selected:false,zindex:_selectedFeatureZIndex});var clusterStyle=getFeatureClusterStyle(feature,resolution,{selected:true,zindex:_selectedFeatureZIndex+1});if(!clusterStyle)
return iconStyle;return[].concat(iconStyle).concat(clusterStyle);}
function getFeatureIconImage(iconUrl){var key=iconUrl;var icon=_featureIconCache[key];if(!icon){icon=_featureIconCache[key]=new ol.style.Icon({src:iconUrl,anchorOrigin:"bottom-right",anchor:[0.5,0],anchorXUnits:"fraction",anchorYUnits:"pixel",scale:1});}
return icon;}
function prettifyFeatureName(text){if(!text)
return text;var result=text.toUpperCase().replace(/\s+/,' ').replace('&','&amp;').trim();var textLength=result.length;if(textLength<=16)
return result;var split=result.split(' ');if(split.length>1){if(split.length===2){return split.join('\n');}
else{var halfMarker=(result.length/2)-2;var hasSplit=false;result='';for(var i=0;i<split.length;i++){var word=split[i];if(!hasSplit&&result.length+word.length>=halfMarker){if(i+1<split.length){result+=word+'\n';}
else{result+='\n'+word;}
hasSplit=true;}
else{result+=word+' ';}}
return result.trim();}}
return truncateString(result,16);}
function truncateString(str,maxChar){if(str.length<=maxChar)
return str;return str.substring(0,maxChar-3).trim()+"...";}
function getFeatureIconStyle(feature,resolution,options){options=options||{};var clusterSize=(feature.get('features')||[]).length||0;var singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);var selected=options.selected?true:false;var zindex=options.zindex||(!selected?(singleFeature.get('zindex')||1):_selectedFeatureZIndex);var geometry=singleFeature.getGeometry();var coordinate=geometry.getCoordinates();feature.getGeometry().setCoordinates(coordinate);var key=singleFeature.get("FId")+'-'+zindex+'-'+selected;var cache=!selected?_featureStyleCache:_selectedFeatureStyleCache;var style=cache[key];if(!style){var textColor=!selected?"#6d6d6d":"#FFFFFF";var rectColor=!selected?"#FEFEFE":"#E21800";var prettyText=prettifyFeatureName(singleFeature.get("Label"));var isMultiline=prettyText.indexOf('\n')>0?true:false;var imgElement=getSvgRect({text:prettyText,textFill:textColor,rectFill:rectColor,font:"Normal 10px 'Montserrat',Arial",minHeight:isMultiline?17:18,dropShadow:true});var icon=new ol.style.Icon({src:imgElement.src,size:[imgElement.width,imgElement.height],imgSize:[imgElement.width,imgElement.height],anchorOrigin:"top-left",anchor:[0.5,5],anchorXUnits:"fraction",anchorYUnits:"pixel"});style=[new ol.style.Style({image:getFeatureIconImage(singleFeature.get("Image")),zIndex:zindex}),new ol.style.Style({image:icon,zIndex:zindex+1,size:[imgElement.width,imgElement.height],imgSize:[imgElement.width,imgElement.height]})];cache[key]=style;}
return style;}
function getFeatureClusterStyle(feature,resolution,options){var clusterSize=(feature.get('features')||[]).length;if(clusterSize<=1)
return null;options=options||{};var singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);var selected=options.selected?true:false;var zindex=options.zindex||((!selected?(singleFeature.get('zindex')||2):_selectedFeatureZIndex)+1);var key=clusterSize+'-'+zindex+'-'+selected;var cache=!selected?_clusterStyleCache:_selectedClusterStyleCache;var style=cache[key];if(!style){var textColor=!selected?"#FFFFFF":"#FFFFFF";var rectColor=!selected?"rgba(33, 33, 33, 0.55)":"#E21800";var rectStroke="#FFFFFF";var text=clusterSize.toString();var imgElement=getSvgRect({text:text,rectFill:rectColor,rectStroke:rectStroke,rectStrokeWidth:2,font:"Normal 11px 'Montserrat',Arial",textFill:textColor,minWidth:20,minHeight:20});var icon=new ol.style.Icon({src:imgElement.src,size:[imgElement.width,imgElement.height],imgSize:[imgElement.width,imgElement.height],anchorOrigin:"bottom-right",anchor:[18+imgElement.width,-(6+imgElement.height)],anchorXUnits:"pixel",anchorYUnits:"pixel"});style=[new ol.style.Style({image:icon,zIndex:zindex})];cache[key]=style;}
return style;}
var _measureContext={};function getTextWidth(text,font){if(!text)
return 0;var context=_measureContext[font];if(!context){var canvas=document.createElement("canvas");context=_measureContext[font]=canvas.getContext("2d");}
context.font=font;var metrics=context.measureText(text);return metrics.width;}
function getSvgRectLine(options){options=options||{};var text=options.text||'';var rectFill=options.rectFill||"#E21800";var rectStroke=options.rectStroke||"#FFFFFF";var rectStrokeWidth=options.rectStrokeWidth||0;var strokePadding=options.strokePadding||0;var textFill=options.textFill||"#FFFFFF";var rectWidth=options.rectWidth||20;var rectHeight=options.rectHeight||20;var textWidth=options.textWidth||20;var textHeight=options.textHeight||20;var offsetY=options.offsetY||0;var offsetX=options.offsetX||0;var svgRectLine='<rect x="'+(offsetX)+'" y="'+offsetY+'" rx="10" ry="10" width="'+(rectWidth)+'" height="'+(rectHeight)+'" fill="'+(rectFill)+'" stroke="'+(rectStroke)+'" stroke-width="'+(rectStrokeWidth)+'"/>'+
'<text x="50%" y="'+(offsetY+((textHeight/2)+1))+'" text-anchor="middle" dominant-baseline="middle" fill="'+(textFill)+'" width="'+(textWidth)+'" height="'+(textHeight)+'">'+'TTT'+'</text>';svgRectLine=escape(svgRectLine).replace('TTT',text);return svgRectLine;}
function getSvgRect(options){options=options||{};var text=options.text||'';var font=options.font||"Normal 11px Arial";var rectFill=options.rectFill||"#E21800";var rectStroke=options.rectStroke||"#FFFFFF";var rectStrokeWidth=options.rectStrokeWidth||0;var textFill=options.textFill||"#FFFFFF";var minWidth=options.minWidth||20;var minHeight=options.minHeight||20;var dropShadow=options.dropShadow===true;var width=minWidth;var height=minHeight;var linesAndWidth=text.split('\n').map(function(textLine){textLine=textLine.trim();var textLineWidth=getTextWidth(textLine,font)+10;if(textLineWidth<minWidth){textLineWidth=minWidth;}
textLineWidth=textLineWidth-textLineWidth%1;if(textLineWidth>width){width=textLineWidth;}
return{text:textLine,width:textLineWidth};});var totalWidth=width+(rectStrokeWidth*2);var totalHeight=height+(rectStrokeWidth*2);var svgStyle='style="font:'+(font)+';"';if(dropShadow){totalWidth+=2;totalHeight+=2;}
var lineIndex=0;var svgRectLineArray=linesAndWidth.map(function(line){var offsetY=(lineIndex*totalHeight)+rectStrokeWidth;if(lineIndex>0)offsetY-=4;var offsetX=(totalWidth-line.width)/2;offsetY=offsetY-offsetY%1;offsetX=offsetX-offsetX%1;line=getSvgRectLine({text:line.text,textWidth:line.width,textHeight:height,textFill:textFill,rectWidth:line.width,rectHeight:height,rectFill:rectFill,rectStroke:rectStroke,rectStrokeWidth:rectStrokeWidth,offsetX:offsetX,offsetY:offsetY});lineIndex++;return line;});totalHeight*=lineIndex;var svgLines=svgRectLineArray.reverse().join('');var svg='<svg version="1.1" encoding="UTF-8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="'+(totalWidth)+'px" height="'+(totalHeight)+'px" '+(svgStyle)+'>'
+'<defs><style type="text/css">@import url(\'https://fonts.googleapis.com/css?family=Montserrat\');</style></defs>'
+'TTT'
+'</svg>';var src=('data:image/svg+xml,'+escape(svg)).replace('TTT',svgLines);return{src:src,width:totalWidth,height:totalHeight};}
function toMercatorCoordinate(coordinate){return MapHelper.toMercatorCoordinate(coordinate);}
function toLonLatCoordinate(coordinate){return MapHelper.toLonLatCoordinate(coordinate);}
function toLonLatExtent(extent){return MapHelper.toLonLatExtent(extent);}
function toMercatorExtent(extent){return MapHelper.toMercatorExtent(extent);}
function clearFeaturesLayer(){if(_featureItemsLayer){_map.removeLayer(_featureItemsLayer);_featureItemsLayer=undefined;}
if(_featureClusterLayer){_map.removeLayer(_featureClusterLayer);_featureClusterLayer=undefined;}
if(_featureSingleLayer){_map.removeLayer(_featureSingleLayer);_featureSingleLayer=undefined;}}
function clearSelectedFeatureInteractions(){if(_selectedFeatureInteraction){_map.removeInteraction(_selectedFeatureInteraction);_selectedFeatureInteraction=undefined;}
if(_selectedClusterInteraction){_map.removeInteraction(_selectedClusterInteraction);_selectedClusterInteraction=undefined;}}
function setFeaturesLayer(features){var numberOfItems=features.length;var mobileDistance=110;var desktopDistance=80;if(numberOfItems<=50){mobileDistance=40;desktopDistance=40;}
var featuresSource=new ol.source.Vector({features:features});var clusterSource=new ol.source.Cluster({distance:_isMobile?mobileDistance:desktopDistance,source:featuresSource});clearFeaturesLayer();_featureItemsLayer=new ol.layer.Vector({source:clusterSource,style:getFeatureUnselectedStyle,minResolution:10,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_featureClusterLayer=new ol.layer.Vector({source:clusterSource,style:getClusterUnselectedStyle,minResolution:10,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_featureSingleLayer=new ol.layer.Vector({source:featuresSource,style:getFeatureUnselectedStyle,maxResolution:10,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_map.addLayer(_featureItemsLayer);_map.addLayer(_featureClusterLayer);_map.addLayer(_featureSingleLayer);clearSelectedFeatureInteractions();_selectedFeatureInteraction=new ol.interaction.Select({layers:[_featureItemsLayer,_featureSingleLayer],style:getFeatureSelectedStyle,condition:ol.events.condition.pointerMove,multi:false});_selectedClusterInteraction=new ol.interaction.Select({layers:[_featureClusterLayer],style:getClusterSelectedStyle,condition:ol.events.condition.pointerMove,multi:false});_map.addInteraction(_selectedFeatureInteraction);_map.addInteraction(_selectedClusterInteraction);}
function clearBorderLayer(){if(_borderLayer){_map.removeLayer(_borderLayer);_map.removeLayer(_borderLayerAdditional);_borderLayer=undefined;_borderLayerAdditional=undefined;}
return $q.resolve();}
function setBorderLayer(options){options=options||{};clearBorderLayer();var borders=options.borders;var additionalBorders=options.additionalBorders;var location=options.location;if(!borders&&!location)
return $q.resolve();var wktParse=new ol.format.WKT();var feature;var additionalBordersfeature;if(borders){feature=wktParse.readFeature(borders,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});}else if(location){feature=wktParse.readFeature(location,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});}
if(additionalBorders)
additionalBordersfeature=wktParse.readFeature(additionalBorders,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});if(feature){_borderLayer=MapHelper.getBorderLayer({feature:feature});_map.addLayer(_borderLayer);}
if(additionalBordersfeature){_borderLayerAdditional=MapHelper.getAdditionalBorderLayer({feature:additionalBordersfeature});_map.addLayer(_borderLayerAdditional);}
return $q.resolve();}
function createClusteredPopup(features){var container=$('#popup-container-map-id');var clusterSize=features.length||0;var firstItem=features[0];createClusteredPopupItem(firstItem,container);var clusterArray=features.slice(1,features.length);var clusterArraySize=clusterArray.length;if(clusterArraySize===0)
return;_angle=0;if(clusterArraySize>6*_distribution)
clusterArraySize=6*_distribution;var distributionIncrementer=1;var distributionHolder=_distribution;for(var z=0;z<clusterArraySize;z++){if(z!==0&&z%distributionHolder===0){distributionIncrementer++;distributionHolder+=(distributionHolder*distributionIncrementer);}}
var holder=distributionIncrementer;if(holder>_maxHolderLevel)
holder=_maxHolderLevel;var start=0;for(var i=0;i<holder;i++){var modifier=i+1;var size=start+(modifier*_distribution);var tempArr=clusterArray.slice(start,size);start=size;var iterationBlockNumber=modifier*_distribution;if(clusterArraySize<iterationBlockNumber){iterationBlockNumber=clusterArraySize;}
_angle=0;for(var x=0;x<iterationBlockNumber;x++){var popupChild=createClusteredPopupStyle(modifier,iterationBlockNumber,tempArr[x]);container[0].appendChild(popupChild);_popup_content.appendChild(container[0]);}
tempArr=[];clusterArraySize-=iterationBlockNumber;}
_externalRadius=(_radius*holder);var overlay=createPopupOverlay();_popup_content.appendChild(overlay);}
function createPopupOverlay(){var overlay=elem_id('popup-opacity');overlay.style.height=(2*_externalRadius)+'px';overlay.style.width=(2*_externalRadius)+'px';overlay.style.marginTop=(-1)*(_externalRadius)+'px';overlay.style.marginLeft=(-1)*(_externalRadius)+'px';overlay.style.borderRadius=_externalRadius+'px';overlay.style.backgroundColor=_overlayColor;overlay.style.opacity=_overlayOpacity;return overlay;}
function createClusteredPopupItem(firstItem,container){var popupChild=createClusteredPopupStyle(0,1,firstItem);var closeTxt=getSvgRect({text:"X",rectFill:_popupCloseRectFillNotSelected,rectStroke:_rectStroke,rectStrokeWidth:_rectStrokeWidth,font:_textFont,textFill:_popupCloseTxtNotSelectedFill,minWidth:20,minHeight:20});var popupImgCloseWrapper=document.createElement('div');popupImgCloseWrapper.style.textAlign='center';var popupImgClose=document.createElement('img');popupImgClose.id='popup-close-id';popupImgClose.src=closeTxt.src;popupImgClose.style.height=_popupCloseSize;popupImgClose.style.width=_popupCloseSize;popupImgClose.style.borderRadius=_popupCloseSize;popupImgClose.style.opacity=_popupCloseOpacity;popupImgClose.style.position='absolute';popupImgClose.style.top='0px';popupImgClose.style.right='0px';popupImgCloseWrapper.appendChild(popupImgClose);popupImgCloseWrapper.onmouseenter=function(e){var targ=elem_id('popup-close-id');var selected=getSvgRect({text:"X",rectFill:_popupCloseRectFillSelected,rectStroke:_rectStroke,rectStrokeWidth:_rectStrokeWidth,font:_textFont,textFill:_popupCloseTxtSelectedFill,minWidth:20,minHeight:20});targ.src=selected.src;targ.style.opacity=1;e.stopPropagation();};popupImgCloseWrapper.onmouseleave=function(e){var targ=elem_id('popup-close-id');var selected=getSvgRect({text:"X",rectFill:_popupCloseRectFillNotSelected,rectStroke:_rectStroke,rectStrokeWidth:_rectStrokeWidth,font:_textFont,textFill:_popupCloseTxtNotSelectedFill,minWidth:20,minHeight:20});targ.src=selected.src;targ.style.opacity=_popupCloseOpacity;e.stopPropagation();};popupImgCloseWrapper.onclick=function(e){if(!_isFirstClickFinished){e.stopPropagation();return;}
var targ=elem_id('popup-close-id');if(!targ){e.stopPropagation();return;}
deletePopupClusterItems();e.stopPropagation();};popupChild.appendChild(popupImgCloseWrapper);container[0].appendChild(popupChild);_popup_content.appendChild(container[0]);}
function createClusteredPopupStyle(modifier,numberOfBlocks,item){var image=item.get('Image');var label=item.get('Label');var link=item.get('UrlLink');var payload=MapHelper.getMapFeatureData(item);var prettyText=prettifyFeatureName(label);var isMultiline=prettyText.indexOf('\n')>0?true:false;var svg=getSvgRect({text:prettyText,textFill:_notSelectedTextColor,rectFill:_notSelectedRectColor,font:_textFont,minHeight:isMultiline?17:18,dropShadow:true});var popupChild=document.createElement('div');popupChild.className+='popup-field';var popupChildWrapper=document.createElement('div');var popupImgWrapper=document.createElement('div');popupImgWrapper.style.textAlign='center';var popupImg=document.createElement('img');popupImg.src=image;popupImgWrapper.appendChild(popupImg);var popupImgWrapperTxt=document.createElement('div');popupImgWrapperTxt.style.textAlign='center';var popupImgTxt=document.createElement('img');popupImgTxt.src=svg.src;popupImgTxt.id=prettyText;popupImgWrapperTxt.appendChild(popupImgTxt);popupChildWrapper.appendChild(popupImgWrapper);popupChildWrapper.appendChild(popupImgWrapperTxt);popupChildWrapper.onclick=function(e){if(!_isFirstClickFinished){e.stopPropagation();return;}
e.stopPropagation();if(payload===undefined)
return;if(payload.type===1||payload.type===2)
window.open(payload.url);deleteRegionListPopup();};popupChildWrapper.onmouseenter=function(e){var targ=e.target.getElementsByTagName('img')[1];var txt=targ.id;var selected=getSvgRect({text:txt,textFill:_selectedTextColor,rectFill:_selectedRectColor,font:_textFont,minHeight:isMultiline?17:18,dropShadow:true});targ.src=selected.src;e.stopPropagation();};popupChildWrapper.onmouseleave=function(e){var targ=e.target.getElementsByTagName('img')[1];var txt=targ.id;var selected=getSvgRect({text:txt,textFill:_notSelectedTextColor,rectFill:_notSelectedRectColor,font:_textFont,minHeight:isMultiline?17:18,dropShadow:true});targ.src=selected.src;e.stopPropagation();};popupChild.appendChild(popupChildWrapper);popupChild.id='cluster-item';popupChild.style.height=_popupItemSize+'px';popupChild.style.width=_popupItemSize+'px';popupChild.style.zIndex=2;var step=(2*Math.PI)/numberOfBlocks;var x=Math.round(modifier*_radius*Math.sin(_angle)-_popupItemSize/2);var y=Math.round(modifier*_radius*Math.cos(_angle)-_popupItemSize/2);popupChild.style.position='absolute';popupChild.style.left=x+'px';popupChild.style.top=y+'px';popupChild.style.cursor="pointer";_angle+=step;return popupChild;}
this.deletePopupClusterItems=deletePopupClusterItems;function deletePopupClusterItems(){var ele=elem_id('popup-container-map-id');var overlay=elem_id('popup-opacity');if(!ele&&!_temporaryPopupFeature)
return;if(_temporaryPopupFeature){_featureClusterLayer.getSource().addFeature(_temporaryPopupFeature);_temporaryPopupFeature=undefined;}
if(ele){while(ele.firstChild){ele.removeChild(ele.firstChild);}}
if(overlay){overlay.removeAttribute("style");}}
var _isLoadingNearbyRegions=false;var _isRegionListOpened=false;this.showNerbyRegions=showNerbyRegions;function showNerbyRegions(coordinate,isFromCurrentLocation){if(_isRegionListOpened){deleteRegionListPopup();if(!isFromCurrentLocation)
return;}
if(_isLoadingNearbyRegions)
return;deleteRegionListPopup();deletePopupClusterItems();var container=angular.element('#main-map-container');if(container.hasClass('js-map-no-event'))
return;if(!coordinate)
return;var lonLatCoordinate=toLonLatCoordinate(coordinate);_isLoadingNearbyRegions=true;RegionService.getRegionsByLocation({lat:lonLatCoordinate[1],lon:lonLatCoordinate[0]}).then(function(success){createRegionListStyle(success.data);createMapRegionLocationPin(coordinate);_regionListPopup.setPosition(coordinate);_regionListMapPinPopup.setPosition(coordinate);_isLoadingNearbyRegions=false;_isRegionListOpened=true;}).catch(function(error){console.log(error);});}
function createRegionListStyle(regions){_regionListContent=elem_id('region-list-content');_regionListContent.classList.add('map-region-list__content');_regionListContent.classList.remove('js-hide');for(var i=0;i<regions.length;i++){var regionItem=createRegionItem(regions[i]);_regionListContent.appendChild(regionItem);regionItem.classList.add('map-region-list__item');}
var regionListCloseWrap=createRegionListCloseButton();_regionListContent.appendChild(regionListCloseWrap);_regionList.appendChild(_regionListContent);}
function createRegionListCloseButton(){var regionListCloseWrap=document.createElement('div');regionListCloseWrap.id='map-region-list-close-id';regionListCloseWrap.classList.add('icon','icon--close-label-map');regionListCloseWrap.onclick=function(){deleteRegionListPopup();_isRegionListOpened=false;};return regionListCloseWrap;}
function createRegionItem(region){var regionItem=document.createElement('div');var imageWrapper=document.createElement('div');imageWrapper.classList.add("map-region-list__item-image");var image=document.createElement('img');if(region.Emblem)
image.src=region.Emblem;imageWrapper.appendChild(image);var title=document.createElement('div');title.classList.add('map-region-list__item-title');var titlePrimary=document.createElement('span');titlePrimary.innerText=region.Name;title.appendChild(titlePrimary);regionItem.appendChild(imageWrapper);regionItem.appendChild(title);regionItem.onclick=function(){var item={type:4,regionId:region.Id,label:region.Name,url:region.UrlLink};CommunicationService.doSearch({item:item});deleteRegionListPopup();};if(region.HasItems===false){regionItem.classList.add('map-region-list__item--disabled');}
return regionItem;}
this.deleteRegionListPopup=deleteRegionListPopup;function deleteRegionListPopup(){var ele=elem_id('region-list-content');_isRegionListOpened=false;deleteMapRegionLocationPin();if(ele){while(ele.firstChild){ele.removeChild(ele.firstChild);}
ele.classList.add('js-hide');}}
function createMapRegionLocationPin(){var icon=document.createElement('i');icon.classList.add('icon','icon--pointer-gray');_regionListMapPinContent.appendChild(icon);_regionListMapPin.classList.remove('js-hide');}
function deleteMapRegionLocationPin(){if(_regionListMapPinContent){while(_regionListMapPinContent.firstChild){_regionListMapPinContent.removeChild(_regionListMapPinContent.firstChild);}
_regionListMapPin.classList.add('js-hide');}}}]);;angular.module('tasteatlas').service('MapHelper',["mapConfig","$q","$timeout","constants",function(mapConfig,$q,$timeout,constants){this.getBaseLayers=getBaseLayers;this.getBorderLayer=getBorderLayer;this.getAdditionalBorderLayer=getAdditionalBorderLayer;this.toMercatorCoordinate=toMercatorCoordinate;this.toGeographicCoordinate=toGeographicCoordinate;this.toMercatorExtent=toMercatorExtent;this.toGeographicExtent=toGeographicExtent;this.toBoundingExtentFromCoordinates=toBoundingExtentFromCoordinates;this.toLonLatCoordinate=toGeographicCoordinate;this.toLonLatExtent=toGeographicExtent;this.mapItemToFeature=mapItemToFeature;this.getMostPopularFeatureInCluster=getMostPopularFeatureInCluster;this.sortFeatures=sortFeatures;this.getClusterFeatures=getClusterFeatures;this.flyToAnimation=flyToAnimation;this.panToCoordinateAnimation=panToCoordinateAnimation;this.zoomToAnimation=zoomToAnimation;this.fitExtentAnimation=fitExtentAnimation;var _basemapTilesUrl=mapConfig.basemapTilesUrl;var _basemapTiles2xUrl=mapConfig.basemapTiles2xUrl;var _overlayTilesUrl=mapConfig.overlayTilesUrl;var _maxZoomLevel=mapConfig.maxZoomLevel;var _minZoomLevel=mapConfig.minZoomLevel;var _featureStyleCache={};var _wktParse=new ol.format.WKT();function getBaseLayers(){var basemapTilesUrl=window.devicePixelRatio>=2?_basemapTiles2xUrl:_basemapTilesUrl;var tilePixelRatio=basemapTilesUrl===_basemapTiles2xUrl?2:1;var baseLayer=new ol.layer.Tile({source:new ol.source.XYZ({tilePixelRatio:tilePixelRatio,url:basemapTilesUrl,attributions:[new ol.Attribution({html:['&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="https://www.mapbox.com/">Mapbox</a>']})]})});var layers=[baseLayer];return layers;}
function getBorderLayer(options){options=options||{};var feature=options.feature;var features=options.features||[];if(feature&&features.length===0)features.push(feature);var borderLayer=new ol.layer.Vector({source:new ol.source.Vector({features:features}),style:getBorderLayerStyle,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:true});return borderLayer;}
function getBorderLayerStyle(feature,resolution){var style=undefined;if(feature.getGeometry().getType()==='Point'){style=_featureStyleCache['default-point'];if(!style){style=_featureStyleCache['point']=new ol.style.Style({image:new ol.style.Icon({anchor:[0.5,1],anchorXUnits:"fraction",anchorYUnits:"fraction",opacity:1,src:"/Content/Image/pin.png"}),zIndex:mapConfig.pinZIndex});}}
else{style=_featureStyleCache['default-border-fill'];if(!style){style=_featureStyleCache['border-fill']=new ol.style.Style({fill:new ol.style.Fill({color:"rgba(70,70,70,0.1)"})});}}
return style;}
function getAdditionalBorderLayer(options){options=options||{};var feature=options.feature;var features=options.features||[];if(feature&&features.length===0)features.push(feature);var borderLayer=new ol.layer.Vector({source:new ol.source.Vector({features:features}),style:getAdditionalBorderLayerStyle,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:true});return borderLayer;}
function getAdditionalBorderLayerStyle(feature,resolution){var style=undefined;if(feature.getGeometry().getType()==='Point'){style=_featureStyleCache['default-point'];if(!style){style=_featureStyleCache['point']=new ol.style.Style({image:new ol.style.Icon({anchor:[0.5,1],anchorXUnits:"fraction",anchorYUnits:"fraction",opacity:1,src:"/Content/Image/pin.png"}),zIndex:mapConfig.pinZIndex});}}
else{style=_featureStyleCache['default-border-fill'];if(!style){style=_featureStyleCache['border-fill']=new ol.style.Style({fill:new ol.style.Fill({color:"rgba(70,70,70,0.2)"})});}}
return style;}
function toMercatorCoordinate(coordinate){return ol.proj.transform(coordinate,"EPSG:4326","EPSG:3857");}
function toGeographicCoordinate(coordinate){return ol.proj.transform(coordinate,"EPSG:3857","EPSG:4326");}
function toMercatorExtent(extent){return ol.proj.transformExtent(extent,"EPSG:4326","EPSG:3857");}
function toGeographicExtent(extent){return ol.proj.transformExtent(extent,"EPSG:3857","EPSG:4326");}
function toBoundingExtentFromCoordinates(coordinates){return ol.extent.boundingExtent(coordinates);}
function mapItemToFeature(item){if(!item.Location){return undefined;}
var feature=new ol.Feature(item);if(item.Image&&item.Image.indexOf("/default.png")<0){feature.set("Image",constants.cdnHost+item.Image+"?w=70&h=65&c=o&prevent_robots=true");}else{feature.set("Image","/Content/Image/map_item_fallback_06.png");}
feature.set("zindex",item.OrderBy*2);var coordinate=toMercatorCoordinate([item.Location.Longitude,item.Location.Latitude]);var geometry=new ol.geom.Point(coordinate);feature.setGeometry(geometry);return feature;}
function getClusterFeatures(feature){if(!feature)
return undefined;return(feature.get('features')||[]).sort(sortFeatures)||feature;}
function getMostPopularFeatureInCluster(feature){if(!feature)
return undefined;return(feature.get('features')||[]).sort(sortFeatures)[0]||feature;}
function sortFeatures(a,b){return b.get('OrderBy')-a.get('OrderBy');}
this.getMapFeatureData=function(item){var entityId=item.get('EntityId');var label=item.get('Label');var entityType=item.get('EntityType');var link=item.get('UrlLink');var payload={id:entityId,label:label,type:entityType,url:link,isFromMap:true};return payload;};function flyToAnimation(options){options=options||{};var promise=$q.resolve();if(!options.map)
return promise;if(options.extent){promise=promise.then(fitExtentAnimation.bind(null,options));}
if(options.coordinate){promise=promise.then(panToCoordinateAnimation.bind(null,options));}
if(options.zoomLevel){promise=promise.then(zoomToAnimation.bind(null,options));}
return promise;}
function panToCoordinateAnimation(options){options=options||{};var coordinate=options.coordinate;var duration=options.duration||500;var map=options.map;if(!coordinate||!map)
return $q.resolve();var source=map.getView().getCenter();if(source[0]===coordinate[0]&&source[1]===coordinate[1])
return $q.resolve();map.getView().animate({center:coordinate,duration:duration});return $timeout(function(){},duration);}
function zoomToAnimation(options){options=options||{};var zoomLevel=options.zoomLevel;var duration=options.duration||500;var map=options.map;if(!zoomLevel||!map)
return $q.resolve();if(map.getView().getZoom()===zoomLevel)
return $q.resolve();map.getView().animate({zoom:zoomLevel,duration:duration});return $timeout(function(){},duration+10).then(function(){var checkZoomLevel=map.getView().getZoom();if(!checkZoomLevel&&checkZoomLevel!==0){map.getView().setZoom(zoomLevel);return $q.resolve();}
return $q.resolve();});}
function fitExtentAnimation(options){options=options||{};var extent=options.extent;var duration=options.duration||0;var constrainResolution=options.constrainResolution===false?false:true;var padding=options.padding||[0,0,0,0];var map=options.map;var deferred=$q.defer();if(!extent||!map){deferred.resolve();return deferred.promise;}
var view=map.getView();view.fit(extent,{size:map.getSize(),maxZoom:_maxZoomLevel,duration:duration,constrainResolution:constrainResolution,padding:padding});view.cancelAnimations();return deferred.resolve();}}]);;angular.module('tasteatlas').service('MapOpenerService',[function(){var _self=this;_self._observers=[];_self._state={isOpen:false,isOpenedOnce:false,forceClose:false,page:''};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){if(state.isOpen!==undefined){_self._state.isOpen=state.isOpen;}
if(state.isOpenedOnce!==undefined){_self._state.isOpenedOnce=state.isOpenedOnce;}
if(state.forceClose!==undefined){_self._state.forceClose=state.forceClose;}
if(state.page!==undefined){_self._state.page=state.page;}
for(var i=0;i<_self._observers.length;i++){_self._observers[i](_self._state);}};this.state=Object.assign({},_self._state);this.getCurrentState=function(){return Object.assign({},_self._state);};}]);;angular.module('tasteatlas').service('MiniMapService',["$q","MapHelper","ApiService",function($q,MapHelper,ApiService){this.initMiniMapForSearchListExtraRegion=initMiniMapForSearchListExtraRegion;this.getMiniMapRegionData=getMiniMapRegionData;this.initMiniMapRegion=initMiniMapRegion;var _layerCountryCache={};var _layerRegionCache={};var _featureCache={};var _featureStyleCache={};var _wktParse=new ol.format.WKT();function initMiniMapForSearchListExtraRegion(options){options=options||{};var mapId=options.mapId;var country=options.country;var countryKey=options.countryKey;var region=options.region;var regionKey=options.regionKey;var extent=options.extent;if(!mapId||!country||!region||!extent)
return;var countryExtent=toMercatorExtent(extent);var map=new ol.Map({layers:[getCountryLayer({wkt:country,key:countryKey}),getRegionLayer({wkt:region,key:regionKey})],controls:[],interactions:[],target:mapId,rendered:"canvas",view:new ol.View({center:ol.extent.getCenter(countryExtent),zoom:0,extent:countryExtent,enableRotation:false}),loadTilesWhileInteracting:false,loadTilesWhileAnimating:false});map.getView().fit(countryExtent,{size:map.getSize(),duration:0,constrainResolution:false});return map;}
function getCountryLayer(options){options=options||{};if(!options.wkt)
return;var cache=_layerCountryCache;if(options.key){if(!cache[options.key])cache[options.key]=new ol.layer.Vector({source:new ol.source.Vector({features:[getFeature(options)]}),style:getSearchListExtraRegionCountryStyle});return cache[options.key];}
else{return new ol.layer.Vector({source:new ol.source.Vector({features:[getFeature(options)]}),style:getSearchListExtraRegionCountryStyle});}}
function getRegionLayer(options){options=options||{};if(!options.wkt)
return;var cache=_layerRegionCache;if(options.key){if(!cache[options.key])cache[options.key]=new ol.layer.Vector({source:new ol.source.Vector({features:[getFeature(options)]}),style:getSearchListExtraRegionRegionStyle});return cache[options.key];}
else{return new ol.layer.Vector({source:new ol.source.Vector({features:[getFeature(options)]}),style:getSearchListExtraRegionRegionStyle});}}
function getFeature(options){options=options||{};if(!options.wkt)
return;if(options.key){if(!_featureCache[options.key])_featureCache[options.key]=_wktParse.readFeature(options.wkt,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});return _featureCache[options.key];}
else{return _wktParse.readFeature(options.wkt,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});}}
function getSearchListExtraRegionCountryStyle(feature,resolution){var style=_featureStyleCache['border-stroke'];if(!style){style=_featureStyleCache['border-stroke']=new ol.style.Style({stroke:new ol.style.Stroke({color:"#f8533d",width:1})});}
return style;}
function getSearchListExtraRegionRegionStyle(feature,resolution){var style=undefined;if(feature.getGeometry().getType()==='Point'){style=_featureStyleCache['point'];if(!style){style=_featureStyleCache['point']=new ol.style.Style({image:new ol.style.Icon({anchor:[0.5,1],anchorXUnits:"fraction",anchorYUnits:"fraction",scale:0.4,src:"/Content/Image/pin.png"})});}}
else{style=_featureStyleCache['border-fill'];if(!style){style=_featureStyleCache['border-fill']=new ol.style.Style({fill:new ol.style.Fill({color:"#f8533d"})});}}
return style;}
function getMiniMapRegionData(options){options=options||{};var regionId=options.regionId;if(!regionId)
return $q.reject();return ApiService.mapRegionBorders({regionId:regionId}).then(function(regionResult){var extent=undefined;if(regionResult.Envelope&&regionResult.Envelope.BottomLeft&&regionResult.Envelope.TopRight){extent=[regionResult.Envelope.BottomLeft.Longitude,regionResult.Envelope.BottomLeft.Latitude,regionResult.Envelope.TopRight.Longitude,regionResult.Envelope.TopRight.Latitude];}
var borders=regionResult.Borders;var location=regionResult.Location;return{extent:extent,region:(borders||location)};});}
function initMiniMapRegion(options){options=options||{};var mapId=options.mapId;var region=options.region;var extent=options.extent;if(!mapId)
return;var feature;var featureExtent;var borderLayer;if(extent)featureExtent=toMercatorExtent(extent);if(region)feature=_wktParse.readFeature(region,{dataProjection:"EPSG:4326",featureProjection:"EPSG:3857"});if(feature)borderLayer=MapHelper.getBorderLayer({feature:feature});var baseLayers=MapHelper.getBaseLayers();var layers=[].concat(baseLayers);if(borderLayer)layers.push(borderLayer);var center=toMercatorCoordinate([16,48]);if(featureExtent)center=ol.extent.getCenter(featureExtent);if(feature&&!featureExtent)center=ol.extent.getCenter(feature.getGeometry().getExtent());var map=new ol.Map({layers:layers,controls:[],interactions:[],target:mapId,rendered:"canvas",view:new ol.View({center:center,zoom:4,extent:featureExtent,enableRotation:false}),loadTilesWhileInteracting:false,loadTilesWhileAnimating:false});var padding=[10,10,10,10];if(featureExtent)map.getView().fit(featureExtent,{size:map.getSize(),duration:0,constrainResolution:false,padding:padding});return map;}
function toMercatorExtent(options){return MapHelper.toMercatorExtent(options);}
function toMercatorCoordinate(options){return MapHelper.toMercatorCoordinate(options);}}]);;angular.module('tasteatlas').service('MobileInteractionService',['$window','MainMapService',function($window,MainMapService){var _self=this;this.hideBody=function(){var body=angular.element(document.getElementById('bodyDiv'));body.addClass('js-hide');};this.triggerMapEventClass=function($event){var mainMapContainer=angular.element(document.getElementById('main-map-container'));if($event==='add')
mainMapContainer.addClass('js-map-no-event');if($event==='remove')
mainMapContainer.removeClass('js-map-no-event');};this.triggerResizeMap=function($event){var mainMapContainer=angular.element(document.getElementById('main-map-container'));if($event==='add')
mainMapContainer.addClass('js-map-full-size');if($event==='remove')
mainMapContainer.removeClass('js-map-full-size');};this.triggerSearchInput=function(){var globalSearch=angular.element(document.getElementById('global-search'));var header=angular.element(document.getElementById('header-id'));var bodyDiv=angular.element(document.getElementById('bodyDiv'));var inputSearch=globalSearch.find('input');var footer=angular.element(document.getElementById('footer'));globalSearch.addClass('js-show');bodyDiv.addClass('js-hide');footer.addClass('js-hide');header.addClass('js-hide');$window.scrollTo(0,0);inputSearch.focus();var searchList=angular.element(document.getElementsByClassName('search-list'));searchList.addClass('js-show-list');};this.triggerCloseSearchInput=function(){var globalSearch=angular.element(document.getElementById('global-search'));var header=angular.element(document.getElementById('header-id'));var bodyDiv=angular.element(document.getElementById('bodyDiv'));var footer=angular.element(document.getElementById('footer'));globalSearch.removeClass('js-show');bodyDiv.removeClass('js-hide');bodyDiv.addClass('js-search-input');header.removeClass('js-hide');footer.removeClass('js-hide');};this.triggerOpenSearchDetail=function(){var searchDetails=angular.element(document.getElementsByClassName('search-details'));var map=angular.element('#main-map-container')[0];searchDetails.addClass('js-show');searchDetails.addClass('js-open');MainMapService.deleteRegionListPopup();MainMapService.deletePopupClusterItems();var searchDetail=angular.element(document.getElementsByClassName('search-detail'));var searchDetailH=searchDetail[0].clientHeight;var heightValueWithBorderMap=searchDetailH+4;var heightValueWithBorderSearchDetails=searchDetailH+14;searchDetail[0].style.top='calc(100% - '+heightValueWithBorderSearchDetails+'px)';MainMapService.updateSize();};this.triggerCloseSearchDetail=function(){var searchDetail=angular.element(document.getElementsByClassName('search-details'));var bodyDiv=angular.element(document.getElementById('bodyDiv'));bodyDiv.addClass('js-search-input');searchDetail.removeClass('js-open');recalculateSearchDetailHeight(searchDetail[0]);$window.scrollTo(0,0);};this.initialToggleResults=function(){var mapDrawerButton=angular.element(document.getElementById('map_toggler'));var drawer=angular.element(document.getElementById('search_details'));mapDrawerButton.addClass('map__toggler--hide');drawer.addClass('js-open');};this.toggleResults=function(){var mapDrawerButton=angular.element(document.getElementById('map_toggler'));var drawer=angular.element(document.getElementById('search_details'));drawer.toggleClass('js-open');};function recalculateSearchDetailHeight(searchDetails){var map=angular.element('#main-map-container')[0];var searchDetailH=angular.element('.search-detail')[0].clientHeight;var heightValueWithBorderMap=searchDetailH+4;var heightValueWithBorderSearchDetails=searchDetailH+14;MainMapService.updateSize();}
this.triggerOpenHomePageHeader=function(){var sectionHomePage=angular.element(document.getElementsByClassName('home-page'));sectionHomePage.removeClass('js-hide');var header=angular.element(document.getElementById('header-id'));header.removeClass('js-hide');header.addClass('header--home');var globalSearch=angular.element(document.getElementById('global-search'));globalSearch.removeClass('js-show');var searchDetail=angular.element(document.getElementsByClassName('search-details'));searchDetail.removeClass('js-show');var bodyDiv=angular.element(document.getElementById('bodyDiv'));bodyDiv.removeClass('js-hide');this.triggerResizeMap('remove');var overlay=angular.element('.main-map__trigger');overlay.removeClass('js-hide');var map=angular.element('#main-map-container');MainMapService.updateSize();};this.triggerCloseHomePageHeader=function(){var sectionHomePage=angular.element(document.getElementsByClassName('home-page'));sectionHomePage.addClass('js-hide');var header=angular.element(document.getElementById('header-id'));header.removeClass('header--home');var globalSearch=angular.element(document.getElementById('global-search'));globalSearch.addClass('js-show');var searchDetail=angular.element(document.getElementsByClassName('search-details'));searchDetail.addClass('js-show');this.triggerResizeMap('add');var overlay=angular.element('.main-map__trigger');overlay.addClass('js-hide');MainMapService.updateSize();};this.triggerUrlChangeAction=function(){var header=angular.element(document.getElementById('header-id'));header.removeClass('header-home');var globalSearch=angular.element(document.getElementById('global-search'));globalSearch.addClass('js-show');var bodyDiv=angular.element(document.getElementById('bodyDiv'));bodyDiv.addClass('js-search-input');var sectionHomePage=angular.element(document.getElementsByClassName('home-page'));sectionHomePage.addClass('js-hide');this.triggerResizeMap('add');MainMapService.updateSize();};}]);;angular.module('tasteatlas').service('PageStatusSubjectService',[function(){var _self=this;_self._observers=[];_self._state={isLoaded:false,isSectionLoaded:false,page:''};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){if(state.isLoaded!==undefined){_self._state.isLoaded=state.isLoaded;}
if(state.isSectionLoaded!==undefined){_self._state.isSectionLoaded=state.isSectionLoaded;}
if(state.page||state.page===''){_self._state.page=state.page?state.page:'';}
for(var i=0;i<_self._observers.length;i++){_self._observers[i](_self._state);}};this.state=Object.assign({},_self._state);}]);;angular.module('tasteatlas').service('ProfileMapService',["$q","mapConfig","MapHelper","ProfileService","MainMapService",function($q,mapConfig,MapHelper,ProfileService,MainMapService){this.initMap=initMap;this.getProfileMapData=getProfileMapData;var _mapId='profile-map';var _mapIdOverride=null;var _maxZoomLevel=13;var _minZoomLevel=3;var _maxExtent=ol.proj.get("EPSG:3857").getExtent();var _zoomFactor=2;var _selectedFeatureZIndex=mapConfig.selectedFeatureZIndex;var _map;var _featureItemsLayer;var _featureClusterLayer;var _featureSingleLayer;var _borderLayer;var _selectedFeatureInteraction;var _selectedClusterInteraction;var _featureStyleCache={};var _clusterStyleCache={};var _selectedFeatureStyleCache={};var _selectedClusterStyleCache={};var _featureIconCache={};var _wktParse=new ol.format.WKT();function initMap(options){options=options||{};_mapId=_mapIdOverride||options.mapId||_mapId;_maxZoomLevel=options.maxZoomLevel||_maxZoomLevel;_minZoomLevel=options.minZoomLevel||_minZoomLevel;_maxExtent=options.maxExtent||_maxExtent;_zoomFactor=options.zoomFactor||_zoomFactor;var layers=MapHelper.getBaseLayers();var interactions=ol.interaction.defaults({dragPan:true,altShiftDragRotate:false,pinchRotate:false});_map=new ol.Map({layers:layers,controls:[new ol.control.Zoom()],interactions:interactions,target:_mapId,rendered:"canvas",view:new ol.View({center:toMercatorCoordinate([0,25]),zoom:3,extent:_maxExtent,maxZoom:_maxZoomLevel,minZoom:_minZoomLevel,zoomFactor:_zoomFactor}),loadTilesWhileInteracting:true,loadTilesWhileAnimating:true});if(options.extent){MapHelper.fitExtentAnimation({map:_map,extent:options.extent});}
console.log('initProfileMap:mapId: '+_mapId);return _map;}
function isHoverLayerFilter(layerCandidate){return isItemsLayerFilter(layerCandidate)||isClusterLayerFilter(layerCandidate);}
function isItemsLayerFilter(layerCandidate){return layerCandidate===_featureItemsLayer||layerCandidate===_featureSingleLayer;}
function isClusterLayerFilter(layerCandidate){return layerCandidate===_featureClusterLayer;}
function initHoverStyle(){var target=_map.getTarget();var jTarget=typeof target==="string"?$("#"+target):$(target);_map.on("pointermove",function(e){if(e.dragging){return;}
var pixel=_map.getEventPixel(e.originalEvent);var optionsHit={layerFilter:isHoverLayerFilter,hitTolerance:undefined};var hit=_map.hasFeatureAtPixel(pixel,optionsHit);jTarget.css("cursor",hit?"pointer":"");});}
function initMapClick(){_map.on("click",function(e){var pixel=_map.getEventPixel(e.originalEvent);var optionsClusterClick={layerFilter:isClusterLayerFilter,hitTolerance:undefined};var featureCluster=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsClusterClick);var optionsItemsClick={layerFilter:isItemsLayerFilter,hitTolerance:undefined};var featureItem=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsItemsClick);if(featureCluster){featureNavigate(featureCluster,'cluster');e.stopPropagation();}
else if(featureItem){featureNavigate(featureItem,'item');e.stopPropagation();}});_map.on("pointerdown",function(e){if(e.originalEvent.which!==2)
return;var pixel=_map.getEventPixel(e.originalEvent);var optionsItemsClick={layerFilter:isItemsLayerFilter,hitTolerance:undefined};var featureItem=_map.forEachFeatureAtPixel(pixel,featureCallbackReturnFeature,optionsItemsClick);if(featureItem&&isEnabledFeatureNavigate){featureNavigate(featureItem,'item',true);e.stopPropagation();}});}
function featureCallbackReturnFeature(feature){return feature;}
function featureNavigate(feature,type,newTab){if(!feature)
return;var singleFeature;if(type==='cluster'){singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);var coordinate=singleFeature.getGeometry().getCoordinates();var zoomLevel=_map.getView().getZoom();if(zoomLevel>=_maxZoomLevel){console.log('Max zoom level reached.');}
else{if(_maxZoomLevel-zoomLevel===3){zoomLevel+=3;}
else{zoomLevel+=2;}
if(zoomLevel>=_maxZoomLevel)zoomLevel=_maxZoomLevel;MapHelper.flyToAnimation({map:_map,coordinate:coordinate,zoomLevel:zoomLevel});}}
else{var ratingScore=feature.get("ratingScore");if(!ratingScore){singleFeature=MapHelper.getMostPopularFeatureInCluster(feature);if(singleFeature){ratingScore=singleFeature.get("ratingScore");}}
if(!ratingScore)
return;alert("Score is: "+ratingScore);}}
function getProfileMapData(userId){return ProfileService.GetProfileMapResults(userId).then(mapProfileMap).then(setFeaturesLayer);}
function mapProfileMap(searchResults){var features=(searchResults.data||[]).map(mapItemToFeature).filter(function(feature){return feature;});return features;}
function mapItemToFeature(item){var feature=new ol.Feature(item);if(item.Image&&item.Image.indexOf("/default.png")<0){feature.set("url",item.Image+"?w=70&h=65&c=o");}else{feature.set("url","/Content/Image/map_item_fallback_06.png");}
feature.set("link","/"+item.UrlLink);feature.set("label",item.Label);feature.set("zindex",10);feature.set("fid",''+item.Fid);var coordinate=toMercatorCoordinate([item.Longitude,item.Latitude]);var geometry=new ol.geom.Point(coordinate);feature.setGeometry(geometry);return feature;}
function setFeaturesLayer(features){var featuresSource=new ol.source.Vector({features:features});var clusterSource=new ol.source.Cluster({distance:110,source:featuresSource});clearFeaturesLayer();_featureItemsLayer=new ol.layer.Vector({source:clusterSource,style:MainMapService.getFeatureUnselectedStyle,minResolution:100,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_featureClusterLayer=new ol.layer.Vector({source:clusterSource,style:MainMapService.getClusterUnselectedStyle,minResolution:100,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_featureSingleLayer=new ol.layer.Vector({source:featuresSource,style:MainMapService.getFeatureUnselectedStyle,maxResolution:100,renderBuffer:300,updateWhileInteracting:true,updateWhileAnimating:false});_map.addLayer(_featureItemsLayer);_map.addLayer(_featureClusterLayer);_map.addLayer(_featureSingleLayer);clearSelectedFeatureInteractions();_selectedFeatureInteraction=new ol.interaction.Select({layers:[_featureItemsLayer,_featureSingleLayer],style:MainMapService.getFeatureSelectedStyle,condition:ol.events.condition.pointerMove,multi:false});_selectedClusterInteraction=new ol.interaction.Select({layers:[_featureClusterLayer],style:MainMapService.getClusterSelectedStyle,condition:ol.events.condition.pointerMove,multi:false});_map.addInteraction(_selectedFeatureInteraction);_map.addInteraction(_selectedClusterInteraction);}
function clearFeaturesLayer(){if(_featureItemsLayer){_map.removeLayer(_featureItemsLayer);_featureItemsLayer=undefined;}
if(_featureClusterLayer){_map.removeLayer(_featureClusterLayer);_featureClusterLayer=undefined;}
if(_featureSingleLayer){_map.removeLayer(_featureSingleLayer);_featureSingleLayer=undefined;}}
function clearSelectedFeatureInteractions(){if(_selectedFeatureInteraction){_map.removeInteraction(_selectedFeatureInteraction);_selectedFeatureInteraction=undefined;}
if(_selectedClusterInteraction){_map.removeInteraction(_selectedClusterInteraction);_selectedClusterInteraction=undefined;}}
function toMercatorExtent(options){return MapHelper.toMercatorExtent(options);}
function toMercatorCoordinate(options){return MapHelper.toMercatorCoordinate(options);}}]);;angular.module('tasteatlas').service('RecentSearchService',['$cookies',function($cookies){var _self=this;var _recentSearchKey='recent';this._recent=[];this.put=function(item){_self._recent=_self.get();var stored=_self._recent.find(function(s){return s.id===item.id&&s.type===item.type&&s.regionId===item.regionId;});if(stored)return _self._recent;if(_self._recent.length===5){_self._recent.pop();}
_self._recent.unshift(item);$cookies.put(_recentSearchKey,JSON.stringify(_self._recent));return _self._recent;};this.get=function(){var items=$cookies.get(_recentSearchKey);if(!items)return[];return JSON.parse(items);};}]);;angular.module('tasteatlas').service('ResultListSubjectService',[function(){var _self=this;this.INITIAL_SEARCH='INITIAL_SEARCH';this.SEARCH_RID='SEARCH_RID';this.SEARCH_RID_IGID='SEARCH_RID_IGID';this.SEARCH_RID_DGID='SEARCH_RID_DGID';this.SEARCH_IGID='SEARCH_IGID';this.SEARCH_DGID='SEARCH_DGID';this.SEARCH_TAG='SEARCH_TAG';this.SEARCH_RP='SEARCH_RP';this.CLEAR_DATA='CLEAR_DATA';_self._observers=[];_self._state={name:undefined,orderBy:0,regionId:undefined,dishGroupId:undefined,ingredientGroupId:undefined};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state.name=state.name;_self._state.isLoading=state.isLoading;_self._state.orderBy=state.orderBy;if(state.regionId)
_self._state.regionId=state.regionId;if(state.dishGroupId)
_self._state.dishGroupId=state.dishGroupId;if(state.ingredientGroupId)
_self._state.ingredientGroupId=state.ingredientGroupId;if(state.orderBy)
_self._state.orderBy=state.orderBy;if(state.tagName)
_self._state.tagName=state.tagName;for(var i=0;i<_self._observers.length;i++){_self._observers[i](state);}};this.getCurrentState=function(){return Object.assign({},_self._state);};}]);;angular.module('tasteatlas').service('ResultMapSubjectService',[function(){var _self=this;this.INITIAL_SEARCH='INITIAL_SEARCH';this.SEARCH_RID='SEARCH_RID';this.SEARCH_RID_IGID='SEARCH_RID_IGID';this.SEARCH_RID_DGID='SEARCH_RID_DGID';this.SEARCH_IGID='SEARCH_IGID';this.SEARCH_DGID='SEARCH_DGID';this.SEARCH_TAG='SEARCH_TAG';this.SEARCH_RP='SEARCH_RP';_self._observers=[];_self._state={name:undefined,regionId:undefined,dishGroupId:undefined,ingredientGroupId:undefined};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state.name=state.name;if(state.regionId)
_self._state.regionId=state.regionId;if(state.dishGroupId)
_self._state.dishGroupId=state.dishGroupId;if(state.ingredientGroupId)
_self._state.ingredientGroupId=state.ingredientGroupId;if(state.tagName)
_self._state.tagName=state.tagName;for(var i=0;i<_self._observers.length;i++){_self._observers[i](state);}};this.getCurrentState=function(){return Object.assign({},_self._state);};}]);;angular.module('tasteatlas').service('SearchService',['$http',function($http){this.mainSearchMap=function(params){var promise=$http({method:'GET',url:'/api/search/searchmap',params:params}).then(function(response){return response.data;});return promise;};this.mainAutoCompleteSuggestion=function(params){var promise=$http({method:'GET',url:'/api/search/AutocompleteSuggestion',params:params}).then(function(response){return response.data;});return promise;};this.mainAutocomplete=function(params){var promise=$http({method:'GET',url:'/api/v3/autocomplete',params:params}).then(function(response){return response.data;});return promise;};this.getSimilar=function(params){var promise=$http({method:'GET',url:'/api/v3/autocomplete/GetSimilar',params:params}).then(function(response){return response.data;});return promise;};this.getRegions=function(params){var promise=$http({method:'GET',url:'/api/v3/autocomplete/GetRegions',params:params}).then(function(response){return response.data;});return promise;};}]);;angular.module('tasteatlas').service('SharingSubjectService',['MainHelper',function(MainHelper){var _self=this;this.SHARE_ITEM_CHANGED='SHARE_ITEM_CHANGED';_self._observers=[];_self._state={name:undefined,payload:undefined};this.subscribe=function(callback){_self._observers.push(callback);_self.dispatch(_self._state);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state.name=state.name;_self._state.payload=MainHelper.createSharingObject(state.payload);for(var i=0;i<_self._observers.length;i++){_self._observers[i](_self._state);}};this.getCurrentState=function(){return Object.assign({},_self._state);};}]);angular.module('tasteatlas').service('SharingSubjectAltService',['MainHelper',function(MainHelper){var _self=this;this.SHARE_ALT_ITEM_CHANGED='SHARE_ALT_ITEM_CHANGED';_self._observers=[];_self._state={name:undefined,payload:undefined};this.subscribe=function(callback){_self._observers.push(callback);_self.dispatch(_self._state);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state.name=state.name;_self._state.payload=MainHelper.createSharingObject(state.payload);for(var i=0;i<_self._observers.length;i++){_self._observers[i](_self._state);}};this.getCurrentState=function(){return Object.assign({},_self._state);};}]);;angular.module('tasteatlas').service('SocialSharingService',['$q','$timeout','$http',function($q,$timeout,$http){var fb_app_id='1827944954195705';var _self=this;this.fbShare=function(link,message){FB.ui({method:'share',display:'popup',href:link,quote:message},function(response){});};this.fbMessengerShare=function(link,message){window.open('fb-messenger://share?link='+encodeURIComponent(link)+'&app_id='+encodeURIComponent(fb_app_id));};this.whatsappShare=function(link,message){window.open('whatsapp://send?text='+message+', '+link);};this.pinterestShare=function(link,message,image){window.open('https://pinterest.com/pin/create/button/?url='+link+'&media=http://www.tasteatlas.com'+image+'&description='+message);};this.viberShare=function(link,message){window.open('viber://forward?text='+message+', '+link);};this.twitterShare=function(link,message){window.open('https://twitter.com/intent/tweet?text='+message+', '+link);};this.gplusShare=function(link){window.open('https://plus.google.com/share?url='+link);};this.linkedInShare=function(link,message){window.open('https://www.linkedin.com/shareArticle?mini=true&url='+link+' &title='+message);};this.mailShare=function(link,message){window.location='mailto:?subject=I wanted you to see this site&amp;&body='+message+', '+link+'.';};this.copyLink=function(element,link){var input=document.createElement('input');var container=element;container.appendChild(input);input.setAttribute('type','text');input.classList.add('link-input');input.value=link;input.select();document.execCommand('Copy');input.parentNode.removeChild(input);};this.getShareStatistics=function(url){var promise=$http({method:'GET',url:"api/v2/statistics/fb-stats?url="+url});return promise;};}]);;angular.module('tasteatlas').service('SuggestionService',['$http',function($http){this.mainAutoCompleteSuggestion=function(params){var promise=$http({method:'GET',url:'/api/search/UrlRecordSuggestion',params:params}).then(function(response){return response.data;});return promise;};this.randomAutocompleteSuggestion=function(){var promise=$http({method:'GET',url:'/api/v2/dishes/random'}).then(function(response){return response.data;});return promise;};}]);;angular.module('tasteatlas').service('TutorialService',['$cookies',function($cookies){var _self=this;this.cookieName='ta-tutorial_cookie';this.items=[{name:'Italy',id:94,regionId:94,type:4,category:'Country',url:'italy'},{name:'Cheese',id:37,regionId:null,type:9,category:'',url:'cheese'},{name:'Cheese in Italy',id:37,regionId:94,type:9,category:'',url:'cheese/italy'},{name:'Gorgonzola',id:1149,regionId:null,type:2,category:'',url:'gorgonzola'}];this.TUTORIAL_COMPLETED='COMPLETED';this.TUTORIAL_HIDE='HIDE';this.TUTORIAL_SHOW='SHOW';_onTutorialAction=[];this.onTutorialAction=onTutorialAction;function onTutorialAction(callback){_onTutorialAction.push(callback);}
this.tutorialAction=tutorialAction;function tutorialAction(item){var state={};state.name=item.name;for(var i=0;i<_onTutorialAction.length;i++){_onTutorialAction[i](state);}}
this.putTutorialCookie=function(){if(_self.hasCookies===true)
return;$cookies.put(_self.cookieName,true);};this.hasCookies=function(){var cookie=$cookies.get(_self.cookieName);if(cookie===undefined)
return false;else
return true;};}]);;angular.module('tasteatlas').service('UserCacheService',["$q","$rootScope","$filter","ProfileService","UserSubjectService","$timeout",function($q,$rootScope,$filter,ProfileService,UserSubjectService,$timeout){var _self=this;this.commentIds={DishCommentList:[],EventCommentList:[],IngredientCommentList:[],DishRestaurantCommentList:[],RecipeVariationCommentList:[]};this.myLists={UserComments:{DishCommentList:[],EventCommentList:[],IngredientCommentList:[],DishRestaurantCommentList:[],RecipeVariationCommentList:[]},UserFavoriteFood:{FavoriteDishList:[],FavoriteIngredientList:[],FavoriteRecipeVariationList:[]},UserWannaTries:{WannaTryDishList:[],WannaTryIngredientList:[],WannaTryRecipeVariationList:[],WannaVisitRestaurantList:[],}};this.USER_CACHE_SUCCESS='USER_CACHE_SUCCESS';this.USER_CACHE_FAIL='USER_CACHE_FAIL';this.initUserCacheService=function(){var userId=UserSubjectService.getUserId();if(!userId){setCacheAsInitialized();return _self.USER_CACHE_FAIL;}
if(userId==="0"){setCacheAsInitialized();return _self.USER_CACHE_FAIL;}
var myLists=_self.getItemWithExpiration('myLists');if(!myLists){return ProfileService.GetMyLists().then(function(response){_self.myLists=response.data;_self.commentIds=_self.myLists.UserComments;_self.setItemWithExpiration('myLists',_self.myLists,3*60*1000);setCacheAsInitialized();return _self.USER_CACHE_SUCCESS;}).catch(function(error){setCacheAsInitialized();return _self.USER_CACHE_FAIL;});}
else{_self.myLists=myLists;_self.commentIds=_self.myLists.UserComments;setCacheAsInitialized();}};this.refreshMyLists=function(){return ProfileService.GetMyLists().then(function(success){_self.myLists=success.data;_self.commentIds=_self.myLists.UserComments;_self.setItemWithExpiration('myLists',_self.myLists,3*60*1000);}).catch(function(error){console.log(error);});};this.setItemWithExpiration=function(key,value,duration){var now=new Date();var item={value:value,expiration:now.getTime()+duration};localStorage.setItem(key,JSON.stringify(item));};this.getItemWithExpiration=function(key){var itemStr=localStorage.getItem(key);if(!itemStr){return null;}
var item=JSON.parse(itemStr);var now=new Date();if(now.getTime()>item.expiration){localStorage.removeItem(key);return null;}
return item.value;};this.clearStorageByKey=function(key){localStorage.removeItem(key);};this.getIngredientCommentById=function(itemId){if(!_self.commentIds)
return null;if(_self.commentIds.IngredientCommentList.length===0)
return null;var item=_self.commentIds.IngredientCommentList.find(function(c){return c.Id===itemId;});return item;};this.getDishCommentById=function(itemId){if(!_self.commentIds)
return null;if(_self.commentIds.DishCommentList.length===0)
return null;var item=_self.commentIds.DishCommentList.find(function(c){return c.Id===itemId;});return item;};this.getEventCommentById=function(itemId){if(!_self.commentIds)
return null;if(_self.commentIds.EventCommentList.length===0)
return null;var item=_self.commentIds.EventCommentList.find(function(c){return c.Id===itemId;});return item;};this.getRecipeVariationCommentById=function(itemId){if(!_self.commentIds)
return null;if(_self.commentIds.RecipeVariationCommentList.length===0)
return null;var item=_self.commentIds.RecipeVariationCommentList.find(function(c){return c.Id===itemId;});return item?item:null;};function getWannaTryFood(type,id){if(!_self.myLists||!_self.myLists.UserWannaTries)
return null;if(_self.myLists.UserWannaTries[type].length===0)
return null;var item=_self.myLists.UserWannaTries[type].find(function(c){return c.Id===id;});return item;}
this.getDishWannaTry=function(dishId){return getWannaTryFood('WannaTryDishList',dishId);};this.getWannaVisitRestaurant=function(restaurantId){return getWannaTryFood('WannaVisitRestaurantList',restaurantId);};this.getIngredientWannaTry=function(ingredientId){return getWannaTryFood('WannaTryIngredientList',ingredientId);};this.getRecipeWannaTry=function(recipeId){return getWannaTryFood('WannaTryRecipeVariationList',recipeId);};this.setDishWannaTry=function(itemId,entityType,wannaTry){_self.myLists.UserWannaTries.WannaTryDishList.push({Id:itemId,EntityTypeEnum:entityType,WannaTryEnum:wannaTry});};this.setRestaurantWannaVisit=function(itemId,entityType,wannaTry){_self.myLists.UserWannaTries.WannaVisitRestaurantList.push({Id:itemId,EntityTypeEnum:entityType,WannaTryEnum:wannaTry});};this.setIngredientWannaTry=function(itemId,entityType,wannaTry){_self.myLists.UserWannaTries.WannaTryIngredientList.push({Id:itemId,EntityTypeEnum:entityType,WannaTryEnum:wannaTry});};this.setRecipeWannaTry=function(itemId,entityType,wannaTry){_self.myLists.UserWannaTries.WannaTryRecipeVariationList.push({Id:itemId,EntityTypeEnum:entityType,WannaTryEnum:wannaTry});};function removeWannaTryFood(type,item){var itemIndex=_self.myLists.UserWannaTries[type].indexOf(item);if(itemIndex>-1){_self.myLists.UserWannaTries[type].splice(itemIndex,1);}}
this.removeDishWannaTry=function(item){removeWannaTryFood('WannaTryDishList',item);};this.removeRestaurantWannaVisit=function(item){removeWannaTryFood('WannaVisitRestaurantList',item);};this.removeIngredientWannaTry=function(item){removeWannaTryFood('WannaTryIngredientList',item);};this.removeRecipeWannaTry=function(item){removeWannaTryFood('WannaTryRecipeVariationList',item);};function getFavoriteFood(type,id){if(!_self.myLists||!_self.myLists.UserFavoriteFood)
return null;if(_self.myLists.UserFavoriteFood[type].length===0)
return null;var item=_self.myLists.UserFavoriteFood[type].find(function(c){return c.Id===id;});return item;}
this.getFavoriteDish=function(dishId){return getFavoriteFood('FavoriteDishList',dishId);};this.getFavoriteIngredient=function(ingredientId){return getFavoriteFood('FavoriteIngredientList',ingredientId);};this.getFavoriteRecipe=function(recipeId){return getFavoriteFood('FavoriteRecipeVariationList',recipeId);};function getFavoriteFoodList(type){return _self.myLists.UserFavoriteFood[type];}
this.getFavoriteDishes=function(){return getFavoriteFoodList('FavoriteDishList');};this.getFavoriteIngredients=function(){return getFavoriteFoodList('FavoriteIngredientList');};this.getFavoriteRecipes=function(){return getFavoriteFoodList('FavoriteRecipeVariationList');};function setCacheAsInitialized(){$timeout(function(){$rootScope.userCacheServiceInitialized=true;})}
this.getFavoriteEvent=function(id){if(!_self.myLists||!_self.myLists.UserComments.EventCommentList)
return null;if(_self.myLists.UserComments.EventCommentList.length===0)
return null;var item=_self.myLists.UserComments.EventCommentList.find(function(c){return c.Id===id;});return item;};this.getRestaurantDishCommentById=function(dishId,restaurantId){if(!_self.myLists||!_self.myLists.UserComments.DishRestaurantCommentList)
return null;if(_self.myLists.UserComments.DishRestaurantCommentList.length===0)
return null;var item=_self.myLists.UserComments.DishRestaurantCommentList.find(function(comment){return comment.DishId===dishId&&comment.RestaurantId===restaurantId;});return item;};this.getAllRestaurantComments=function(restaurantId){if(!_self.myLists||!_self.myLists.UserComments.DishRestaurantCommentList)
return[];if(_self.myLists.UserComments.DishRestaurantCommentList.length===0)
return[];return $filter('filter')(_self.myLists.UserComments.DishRestaurantCommentList,function(comment){return comment.RestaurantId===restaurantId;});};this.isRestaurantCommented=function(restaurantId){if(!_self.myLists||!_self.myLists.UserComments.DishRestaurantCommentList)
return null;if(_self.myLists.UserComments.DishRestaurantCommentList.length===0)
return null;var item=_self.myLists.UserComments.DishRestaurantCommentList.find(function(comment){return comment.RestaurantId===restaurantId;});return!!item;};}]);;angular.module('tasteatlas').service('VoiceRecognitionService',['$q',function($q){var _self=this;this.recognition=undefined;this.query='';this.recognizing=false;this.VOICE_RECOGNITION_NOT_SUPPORTED='VOICE_RECOGNITION_NOT_SUPPORTED';this.VOICE_RECOGNITION_SUPPORTED='VOICE_RECOGNITION_SUPPORTED';this.VOICE_RECOGNITION_STARTED='VOICE_RECOGNITION_STARTED';this.VOICE_RECONGITION_ENDED='VOICE_RECOGNITION_ENDED';this.VOICE_RECOGNITION_COMPLETED='VOICE_RECOGNITION_COMPLETED';this.VOICE_RECOGNITION_TURNED_OFF='VOICE_RECOGNITION_TURNED_OFF';_onVoiceRecognitionAction=[];this.onVoiceRecognitionAction=function(callback){_onVoiceRecognitionAction.push(callback);};this.voiceRecognitionAction=function(item){var state={};state.name=item.name;state.query=item.query;for(var i=0;i<_onVoiceRecognitionAction.length;i++){_onVoiceRecognitionAction[i](state);}};this.initRecognition=function(){if(_self.isRecognitionSupported()===false){_self.voiceRecognitionAction({name:_self.VOICE_RECOGNITION_NOT_SUPPORTED,query:''});return;}else{_self.voiceRecognitionAction({name:_self.VOICE_RECOGNITION_SUPPORTED,query:''});}
_self.recognition=new webkitSpeechRecognition();_self.recognition.continuous=true;_self.recognition.interimResults=true;_self.recognition.lang="en-US";_self.recognition.maxAlternatives=1;_self.recognition.onstart=function(){_self.recognizing=true;_self.voiceRecognitionAction({name:_self.VOICE_RECOGNITION_STARTED,query:''});};_self.recognition.onend=function(){_self.recognizing=false;_self.query='';_self.voiceRecognitionAction({name:_self.VOICE_RECONGITION_ENDED,query:''});};_self.recognition.onerror=function(err){_self.recognizing=false;_self.query='';if(err.message==='no-speech'){_self.voiceRecognitionAction({name:_self.VOICE_RECONGITION_ENDED,query:''});}else if(err.message==='aborted'){_self.voiceRecognitionAction({name:_self.VOICE_RECOGNITION_TURNED_OFF,query:''});}else{_self.voiceRecognitionAction({name:_self.VOICE_RECONGITION_ENDED,query:''});}};_self.recognition.onresult=function(event){_self.query='';_self.queryArr=[];if(typeof event.results==='undefined'){_self.recognition.stop();return;}
for(var i=event.resultIndex;i<event.results.length;++i){if(event.results[i].isFinal){_self.query=event.results[i][0].transcript;_self.voiceRecognitionAction({name:_self.VOICE_RECOGNITION_COMPLETED,query:_self.query});}}
_self.recognition.stop();};return _self.recognition;};this.startRecognition=function(){if(_self.hasRecognition()===false)
return;_self.recognition.start();};this.stopRecognition=function(){if(_self.hasRecognition()===false)
return;_self.recognition.stop();};this.abortRecognition=function(){if(_self.hasRecognition()===false)
return;_self.recognition.abort();};this.hasRecognition=function(){return _self.recognition===undefined?false:true;};this.isRecognizing=function(){return _self.recognizing;};this.isRecognitionSupported=function(){return 'webkitSpeechRecognition'in window?true:false;};}]);;angular.module('tasteatlas').service('CommentHelper',['$q','CommentService','UserSubjectService',function($q,CommentService,UserSubjectService){var _self=this;this.steps=['Regular','Login','Vote','Voted','Thanks','Restaurant'];this.starClasses=['icon icon--star icon--star-empty','icon icon--star icon--star-half','icon icon--star icon--star-full'];this.starRange=[2,4,6,8,10];this.recalculateRatingForView=function(rating){if(rating===undefined)
return 0;var viewRate=_self.toFixed(rating/2,1);return viewRate;};this.triggerFilePicker=function(element){if(element){angular.element(element).siblings('.ta-file-upload').trigger('click');}
else{angular.element('.ta-file-upload').trigger('click');}};this.Unexpected='Unexpected';this.PhotoNumberExceded='PhotoNumberExceded';this.ResetStarInfoEvent='ResetStarInfoEvent';this.createException=function(type){switch(type){case 'Unexpected':return{ExceptionInformation:'Unexpected',ExceptionName:'CommentException',ExceptionType:'Unexpected'};case 'PhotoNumberExceded':return{ExceptionInformation:'Can\'t upload more than 5 photos.',ExceptionName:'CommentException',ExceptionType:'PhotoNumberExceded'};default:return{ExceptionInformation:'Unexpected',ExceptionName:'CommentException',ExceptionType:'Unexpected'};}};this.isCommentValid=function(data){if(data===undefined)
return false;if(data.content!==''){return true;}else{return false;}};this.isRateValid=function(data){if(data===undefined)
return false;if(data.rating>1){return true;}else{return false;}};this.determineCommentStage=function(isCommented,isRated){var error="Could not determine comment type";var rate='rate';var comment='comment';var both='rate&comment';if(isCommented===false&&isRated===true){return rate;}
else if(isCommented===true&&isRated===false){return comment;}
else if(isCommented===true&&isRated===true){return both;}
else{console.log(error);return null;}};this.toFixed=function(num,precision){return(+(Math.round(+(num+'e'+precision))+'e'+-precision)).toFixed(precision);};this.onVoteChange=function(vote){removeError();if(vote===undefined)
return;this.data.rating=vote;this.isRateValid=_self.isRateValid(this.data);this.commentStage=_self.determineCommentStage(this.isCommentValid,this.isRateValid);};function removeError(){_self.error='';_self.isError=false;}
this.updateComment=function(updateCallback){var _self=this;var photos=this.data.photos||[];var photosToUpload=photos.filter(function(photo){return photo.isUploaded!==true;});var alreadyUploaded=photos.filter(function(photo){return photo.isUploaded===true;});this.submitting=true;uploadPhotos({photos:photosToUpload}).then(function(uploadedPhotos){var uploaded=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl,isUploaded:false};});var updatePhotos=alreadyUploaded.concat(uploaded);return CommentService.updateContent(_self.userCommentStatus.comment.CommentId,{content:_self.data.content,rating:_self.data.rating,Photos:updatePhotos});}).then(updateCallback);};function uploadPhotos(options){var _self=this;var photos=options.photos||[];var files=photos.filter(function(photo){return photo&&photo.file;}).map(function(photo){photo.file.photo=photo;return photo.file;});if(!files.length)
return $q.resolve([]);if(files.length>5)
return $q.reject(CommentHelper.createException(CommentHelper.PhotoNumberExceded));var photoCallback=function(event){return uploadPhotosProgressCallback.call(_self,event);};return CommentService.imagesUpload({files:files,xhruploadprogress:photoCallback}).then(function(fileUrls){fileUrls=fileUrls||[];var photosResult=[];for(var i=0;i<files.length;i++){var photo=files[i].photo;var url=fileUrls[i];photo.uploadedUrl=url;photosResult.push(photo);}
return photosResult;});}
this.submit=function(submitCallback,submitError){var _self=this;if(this.submitting&&!this.isRateValid){return;}
this.submitting=true;var photos=this.data.photos||[];uploadPhotos.call(this,{photos:photos}).then(function(uploadedPhotos){var photos=(uploadedPhotos||[]).map(function(item){return{url:item.uploadedUrl};});return postComment.call(_self,photos);}).then(submitCallback).catch(submitError);};function postComment(uploadedPhotos){var rating=this.data.rating;var photos=uploadedPhotos||[];var content=this.data.content;var entityType=this.data.entityType;var entityId=this.data.entityId;var entityId2=this.data.entityId2;return CommentService.commentsPost({entityType:entityType,entityId:entityId,entityId2:entityId2,content:content,score:rating,photos:photos});}
function uploadPhotosProgressCallback(event){this.uploadPercentageCompleted=(event.loaded/event.total)*100;}
this.closeModal=function(){var index=this.current;_self.resetDataToDefaults.call(this);if(index===this.Login){this.current=this.Login;this.onCloseCommentProcess();}else if(index===this.Vote){this.current=this.Login;this.onCloseCommentProcess();}else if(index===this.Voted){this.current=this.Voted;this.onCloseCommentProcess();}
else if(index===this.VotedIngredient){this.current=this.VotedIngredient;this.onCloseCommentProcess();}
else if(index===this.Thanks){this.current=this.Voted;this.onCloseCommentProcess();}else if(index===this.Restaurant){this.current=this.Voted;this.onCloseCommentProcess();}};this.resetDataToDefaults=function(){if(this.userCommentStatus.isCommented===true)
this.isThanksVisible=true;this.submitting=false;this.isValid=false;this.data.rating='';this.data.content='';this.data.photos=[];};this.exit=function(){this.onCloseCommentProcess();};this.yes=function(){this.current=this.Restaurant;};this.onRegularClick=function(){var isAnonymous=UserSubjectService.isInAnonymousRole();this.current=isAnonymous?this.Login:this.Vote;};this.determineRedirect=function(){if(this.mainPageType===this.Dish)this.current=this.Voted;else this.current=this.Thanks;};}]);;angular.module('tasteatlas').value('constants',{cdnHost:'https://cdn.tasteatlas.com'});;angular.module('tasteatlas').service('DishHelper',['CommunicationService',function(CommunicationService){var _self=this;this.splitAddress=function(address){if(address===undefined||address==='')
return '';var add=address.split(',')[0];return add;};this.mapAutocompleteItems=function(items){if(items.length===0)
return;angular.forEach(items,function(value,key){var split=value.Label.split(',');items[key].Label=split[0];if(value.Group!=='Country'&&split.length>1){split.shift();items[key].Description=split.join();}});return items;};}]);;angular.module('tasteatlas').value('EntityTypes',{DISH:1,INGREDIENT:2,RESTAURANT:3,ARTICLE:5,DISH_RESTAURANT:11,EVENT:14,RECIPE:18,RECIPE_VARIATION:18,TOP_LIST_ARTICLE:17});;angular.module('tasteatlas').service('IngredientHelper',function(){var _self=this;});;angular.module('tasteatlas').value('ItemTypes',{Undefined:0,Dish:1,Ingredient:2,Restaurant:3,Region:4,Article:5,RecipeOverview:6,Recipe:7,DishGroup:8,IngredientGroup:9,RegionPlace:10,DishRestaurant:11,UserProfile:12,IngredientShop:13,Event:14,TopListArticle:17,RecipeVariation:18,AutocompleteEntity:19,DishGroupInRegion:20,IngredientGroupInRegion:21});angular.module('tasteatlas').value('ItemTypeLabels',{0:'',1:'Dish',2:'Ingredient',3:'Restaurant',4:'Region',5:'Article',6:'Recipe overview',7:'Recipe',8:'Dish group',9:'Ingredient group',10:'Region place',11:'',12:'',13:'Ingredient shop',14:'Event',17:'Toplist article'});;angular.module('tasteatlas').service('MiscellaneousHelper',function(){var _self=this;this.about='about';this.sitemap='sitemap';this.terms='terms';this.privacy='privacy';this.validators={email:/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i};this.StarInfoMobile=function(starClasses){this.values=[{first:1,firstDescription:'Cancel your rating',second:2,secondDescription:'I hate it',isTapped:false,currentClass:starClasses[0]},{first:3,firstDescription:'Very bad',second:4,secondDescription:'I don\'t like it',isTapped:false,currentClass:starClasses[0]},{first:5,firstDescription:'I don\'t quite like it',second:6,secondDescription:'Average',isTapped:false,currentClass:starClasses[0]},{first:7,firstDescription:'I like it',second:8,secondDescription:'More than ok',isTapped:false,currentClass:starClasses[0]},{first:9,firstDescription:'I like it a lot',second:10,secondDescription:'I love it',isTapped:false,currentClass:starClasses[0]}];};this.StarInfoDesktop=function(){this.values=[{value:1,description:'Cancel your rating'},{value:2,description:'I hate it'},{value:3,description:'Very bad'},{value:4,description:'I don\'t like it'},{value:5,description:'I don\'t quite like it'},{value:6,description:'Average'},{value:7,description:'I like it'},{value:8,description:'More than ok'},{value:9,description:'I like it a lot'},{value:10,description:'I love it'}];};});;angular.module('tasteatlas').value('RegionLevels',{Undefined:-1,District:0,City:1,RegionCapitalCity:2,CapitalCity:3,MicroRegion:4,Region:5,RegionGroup:6,Country:7,CountryGroup:8,Continent:9});;angular.module('tasteatlas').factory('AuthorizationInterceptorFactory',['$q','$injector','$cookies','$timeout','Tokens',function($q,$injector,$cookies,$timeout,Tokens){var authorizationInterceptorServiceFactory={};var $http;var _request=function(config){config.headers=config.headers||{};var jwtToken=$cookies.get(Tokens.jwtTokenKey);if(jwtToken&&!config.isAnonymous){config.headers.Authorization='Bearer '+jwtToken;}
return config;};var _responseError=function(rejection){var deferred=$q.defer();console.log(deferred);var accountService=$injector.get('AccountService');if(rejection.status===401){authorizationInterceptorServiceFactory.responseError=null;var refreshToken=$cookies.get(Tokens.refreshTokenKey);if(refreshToken===undefined){accountService.anonymous().then(function(){authorizationInterceptorServiceFactory.responseError=_responseError;_retryHttpRequest(rejection.config,deferred);}).catch(function(){deferred.reject(rejection);});}
else{accountService.refreshToken(refreshToken).then(function(response){authorizationInterceptorServiceFactory.responseError=_responseError;_retryHttpRequest(rejection.config,deferred);}).catch(function(){accountService.anonymous().then(function(){authorizationInterceptorServiceFactory.responseError=_responseError;_retryHttpRequest(rejection.config,deferred);}).catch(function(){deferred.reject(rejection);});});}}else{authorizationInterceptorServiceFactory.responseError=_responseError;deferred.reject(rejection);}
return deferred.promise;};var _retryHttpRequest=function(config,deferred){$http=$http||$injector.get('$http');$http(config).then(function(response){deferred.resolve(response);}).catch(function(response){deferred.reject(response);});};authorizationInterceptorServiceFactory.request=_request;authorizationInterceptorServiceFactory.responseError=_responseError;return authorizationInterceptorServiceFactory;}]);;angular.module('tasteatlas').service('TokenFactory',['$cookies','$timeout','DecodeTokenHelper','AccountService','UserSubjectService','Tokens',function($cookies,$timeout,DecodeTokenHelper,AccountService,UserSubjectService,Tokens){var _self=this;this._jwtTokenKey=Tokens.jwtTokenKey;this._refreshTokenKey=Tokens.refreshTokenKey;this.TOKEN_FACTORY_SUCCESS='TOKEN_FACTORY_SUCCESS';this.TOKEN_FACTORY_ERROR='TOKEN_FACTORY_ERROR';this.initTokenFactory=initTokenFactory;function initTokenFactory(){var jwtToken=$cookies.get(_self._jwtTokenKey);var refreshToken=$cookies.get(_self._refreshTokenKey);if(refreshToken===undefined){var shouldFetchNewAnonymous=false;if(jwtToken){var tokenExpirationDate=DecodeTokenHelper.getTokenExpirationDate(jwtToken);var now=moment();var minutesToExpiration=moment(tokenExpirationDate).diff(now,'minutes');if(minutesToExpiration<5){shouldFetchNewAnonymous=true;}}
if(jwtToken===undefined||shouldFetchNewAnonymous){return new Promise(function(resolve,reject){AccountService.anonymous().then(function success(response){resolve(_self.TOKEN_FACTORY_SUCCESS);});});}}
if(jwtToken===undefined){return new Promise(function(resolve,reject){AccountService.refreshToken(refreshToken).then(function success(response){resolve(_self.TOKEN_FACTORY_SUCCESS);}).catch(function(error){if(error.status===401){AccountService.anonymous().then(function success(response){resolve(_self.TOKEN_FACTORY_SUCCESS);});}});});}
return $timeout(function(){var decoded=DecodeTokenHelper.decodeJwtToken(jwtToken);var user={userid:decoded.nameid,username:decoded.unique_name,roles:decoded.role,firstname:decoded.FirstName,lastname:decoded.LastName,image:decoded.ProfilePicture,urlLink:decoded.UrlLink};UserSubjectService.dispatch(user);}).then(function(){return new Promise(function(resolve,reject){resolve(_self.TOKEN_FACTORY_SUCCESS);});});}
this.refreshIfSoonToExpire=function(){return new Promise(function(resolve,reject){var jwtToken=$cookies.get(_self._jwtTokenKey);var refreshToken=$cookies.get(_self._refreshTokenKey);if(!jwtToken&&refreshToken){return AccountService.refreshToken(refreshToken).then(function(success){resolve(success);});}
else if(refreshToken){var tokenExpirationDate=DecodeTokenHelper.getTokenExpirationDate(jwtToken);var now=moment();var minutesToExpiration=moment(tokenExpirationDate).diff(now,'minutes');return AccountService.refreshToken(refreshToken).then(function(success){resolve(success);});}
else{AccountService.anonymous().then(function success(response){resolve(_self.TOKEN_FACTORY_SUCCESS);});}});};}]);angular.module('tasteatlas').service('UserLocationFactory',['GlobalStatusService','MeService','$cookies',function(GlobalStatusService,MeService,$cookies){var _self=this;_self.initUserLocationFactory=initUserLocationFactory;_self.clearCountryCookie=clearCountryCookie;_self.userLocationCookieName='usr_cntry';function clearCountryCookie(){$cookies.remove(_self.userLocationCookieName);}
function initUserLocationFactory(){var userLocation=$cookies.get(_self.userLocationCookieName);if(userLocation){GlobalStatusService.setUserLocation(userLocation);return new Promise(function(resolve,reject){resolve(userLocation);});}
return MeService.getUserLocation().then(function(success){userLocation=success.data;var now=new Date();var exp=new Date(now.getFullYear(),now.getMonth(),now.getDate(),now.getHours()+1);$cookies.put(_self.userLocationCookieName,userLocation,{expires:exp});GlobalStatusService.setUserLocation(userLocation);return new Promise(function(resolve,reject){resolve(userLocation);});});}}]);;angular.module('tasteatlas').constant('Tokens',{jwtTokenKey:'ta_ath_tk',refreshTokenKey:'ta_ath_rf'});;angular.module('tasteatlas').service('UserSubjectService',[function(){var _self=this;this._observers=[];this._state={userid:'',username:'',roles:[],firstname:'',lastname:'',image:'',urlLink:'',};this.subscribe=function(callback){_self._observers.push(callback);};this.unsubscribe=function(callback){_self._observers=_self._observers.filter(function(f){return f!==callback;});};this.dispatch=function(state){_self._state=state;for(var i=0;i<_self._observers.length;i++){_self._observers[i](state);}};this.getUserId=function(){return _self._state.userid;};this.getUser=function(){return _self._state;};this.isInAnonymousRole=function(){return(_self._state.userid==="0")?true:false};}]);;angular.module('tasteatlas').service('DecodeTokenHelper',[function(){var _self=this;this.decodeJwtToken=decodeJwtToken;function decodeJwtToken(token){var parts=token.split('.');if(parts.length!==3){throw new Error('JWT must have 3 parts');}
var decoded=base64JwtDecodePayload(parts[1]);if(!decoded){throw new Error('Cannot decode the token');}
return angular.fromJson(decoded);}
function base64JwtDecodePayload(payload){var base64=payload.replace('-','+').replace('_','/');return JSON.parse(b64DecodeUnicode(base64));}
this.getTokenExpirationDate=getTokenExpirationDate;function getTokenExpirationDate(token){var decoded=decodeJwtToken(token);if(typeof decoded.exp==="undefined"){return null;}
var d=new Date(0);d.setUTCSeconds(decoded.exp);return d;}
this.getTokenNotBeforeDate=getTokenNotBeforeDate;function getTokenNotBeforeDate(token){var decoded=_decodeJwtToken(token);if(typeof decoded.nbf==='undefined')
return null;var d=new Date(0);d.setUTCSeconds(decoded.nbf);return d;}
this.isTokenExpired=isTokenExpired;function isTokenExpired(token,offsetSeconds){var d=getTokenExpirationDate(token);offsetSeconds=offsetSeconds||0;if(d===null){return false;}
return!(d.valueOf()>new Date().valueOf()+offsetSeconds*1000);}
this.parseJsonDate=parseJsonDate;function parseJsonDate(jsonDateString){return new Date(parseInt(jsonDateString));}
function b64DecodeUnicode(str){return decodeURIComponent(Array.prototype.map.call(atob(str),function(c){return '%'+('00'+c.charCodeAt(0).toString(16)).slice(-2);}).join(''));}}]);;angular.module('tasteatlas').component('tokenRefresherIframe',{bindings:{},templateUrl:'/content/scripts/app/shared/security/tokenrefresheriframe/tokenrefresheriframe.html',controller:'token-refresher-iframe-controller'}).controller("token-refresher-iframe-controller",["$cookies","$interval","AccountService","Tokens",function($cookies,$interval,AccountService,Tokens){var interval;this.$onInit=function(){timerCallback();interval=$interval(timerCallback,5000);};function timerCallback(){var jwtToken=$cookies.get(Tokens.jwtTokenKey);var refreshToken=$cookies.get(Tokens.refreshTokenKey);if(jwtToken===undefined){if(refreshToken!==undefined){AccountService.refreshToken(refreshToken).then(function(response){console.log("token refreshed");}).catch(function(){$interval.cancel(interval);alert("Error while refreshing session");window.parent.location.reload();});}
else{$interval.cancel(interval);alert("Session expired");window.parent.location.reload();}}}}]);;angular.module('tasteatlas').component('ta2Consumer',{templateUrl:'/content/scripts/app/v2/ta2-consumer.html',controller:'ta2ConsumerController',bindings:{layout:'@'}}).controller("ta2ConsumerController",['ta2ServicesEntityCommentHandler','$rootScope',function(ta2ServicesEntityCommentHandler,$rootScope){var _self=this;_self.$onInit=function(){console.log('CONSUMER INIT');console.log(this.layout);$rootScope.$on("ta.entityCommented",function(event,data){console.log(data);});document.addEventListener("ta.entityCommented",function(e){console.log(e.detail);});};_self.openRatingPopup=ta2ServicesEntityCommentHandler.openPopup;_self.nextFunction=function(data){console.log("This happens on success rating!");console.log(data)}}]);;angular.module('tasteatlas').service('ta2ImageResizeService',[function(){var _self=this;_self.resizedataURL=function(base64dataString,callback,config){var options={maxDimension:2000,quality:0.9,outputFormat:'image/jpeg'}
if(!config)
Object.assign(options,config);var img=document.createElement('img');img.onload=function(){var canvas=document.createElement('canvas');var ctx=canvas.getContext('2d');var dimensions=getImageDimensions(img,options.maxDimension);canvas.width=dimensions.width;canvas.height=dimensions.height;ctx.drawImage(this,0,0,dimensions.width,dimensions.height);var dataURI=canvas.toDataURL(options.outputFormat,options.outputFormat);console.log(dataURI)
callback(dataURI);};img.src=base64dataString;}
function getImageDimensions(img,maxDimension){var width=img.width;var height=img.height;if(width>height){if(width>maxDimension){height=height*(maxDimension/width);width=maxDimension;}}else{if(height>maxDimension){width=width*(maxDimension/height);height=maxDimension;}}
return{width,height};}}]);;angular.module('tasteatlas').component('ta2EntityComment',{template:'<div ng-include="$ctrl.getTemplate()"></div>',controller:'ta2EntityCommentController'}).controller("ta2EntityCommentController",['ta2ServicesEntityCommentHandler','$element','$scope',function(ta2ServicesEntityCommentHandler,$element,$scope){var _self=this;_self.data={};_self.interval;_self.$onInit=function(){console.log('innit comment');ta2ServicesEntityCommentHandler.initializePopupData();_self.data=ta2ServicesEntityCommentHandler.data
ta2ServicesEntityCommentHandler.validateDomElement();ta2ServicesEntityCommentHandler.openWindowFromHashIfExists();ta2ServicesEntityCommentHandler.initBackButtonListener();_self.interval=window.setInterval(function(){ta2ServicesEntityCommentHandler.createAndAppendRatingElemetIfDoesNotExists($scope);},1000);};_self.$onDestroy=function(){if(_self.interval){window.clearInterval(_self.interval);}};_self.getTemplate=function(){return `/content/scripts/app/v2/comments/ta2-entity-comment_${_self.data.initOptions.layout}.html`;}
_self.closePopup=ta2ServicesEntityCommentHandler.closePopup;_self.submitComment=ta2ServicesEntityCommentHandler.submitComment;_self.starScoreSelected=ta2ServicesEntityCommentHandler.starScoreSelected;}]);angular.module('tasteatlas').service('ta2ServicesEntityCommentHandler',['$http','$timeout','UserSubjectService','LoginService','TokenFactory','$location','UserCacheService','$rootScope','$compile',function($http,$timeout,UserSubjectService,LoginService,TokenFactory,$location,UserCacheService,$rootScope,$compile){var _self=this;_self.componentHtmlTagName='ta2-entity-comment';let defaultInitOptions=function(){return{layout:'desktop',nextAction:null,onSuccess:null,targetElementSelector:null,appendUrlHash:true}};let defaultUserComment=function(){return{Score:null,DividedScore:null,CommentText:null,Stage:null,Images:[],AddedImages:[]}};let defaultModel=function(){return{UserComment:defaultUserComment(),Entity:{Id:null,EntityType:null,Name:null}}};let defaultRenderOptions=function(){return{shouldDisplay:false,saveInProgress:false,shouldDisplayThankYouBox:false,shouldDisplayCommentBody:true,canSubmit:isCommentValid}};let loadRatingFromApi=function(entityId,entityType){return $http.get(`/api/v3/comment?entityId=${entityId}&entityType=${entityType}`).then(function(response){if(response.data.Entity.EntityType!=entityType)
throw "Requested entity type is different than one returned from server. EntityId "+_self.data.initOptions.entityId;if(!response.data.UserComment)
response.data.UserComment=defaultUserComment();Object.assign(_self.data.model,response.data);_self.data.renderOptions.shouldDisplay=true;appendHashIfNeeded();});};let saveCommentToApi=function(){if(_self.data.model.UserComment.Score===1)
_self.data.model.UserComment.Stage=3;return TokenFactory.refreshIfSoonToExpire().then(function(){return $http.post(`/api/v3/comment`,_self.data.model).then(function(response){var data=response.data;});});};let generateHash=function(){return `rating-window--${_self.data.model.Entity.Id}--${_self.data.model.Entity.EntityType}--${_self.data.initOptions.layout}`}
let appendHashIfNeeded=function(){if(!_self.data.initOptions.appendUrlHash)
return;var hash=generateHash();$location.hash(hash);}
let removeHashIfNeeded=function(){}
let emitRatedEvent=function(){let dataToEmit=_self.data.model;let eventName="ta.entityCommented";let event=new CustomEvent(eventName,{detail:dataToEmit});document.dispatchEvent(event);$rootScope.$emit(eventName,dataToEmit);}
let isCommentValid=function(){if(!_self.data)
return false;if(_self.data.model.UserComment.Score>=1&&_self.data.model.UserComment.Score<=10){return true;}
else{return false;}}
_self.initializePopupData=function(){_self.data={initOptions:defaultInitOptions(),renderOptions:defaultRenderOptions(),model:defaultModel()};}
_self.openWindowFromHashIfExists=function(){var hash=$location.hash(hash);if(hash&&hash.startsWith('rating-window')){var splittedValues=hash.split('--');if(splittedValues.length==4){var entityId=splittedValues[1];var entityType=splittedValues[2];var layout=splittedValues[3];_self.openPopup(entityId,entityType,{layout:layout})}}}
_self.initBackButtonListener=function(){window.onhashchange=function(){var hash=$location.hash(hash);if(!hash||!hash.startsWith('rating-window')){_self.closePopup();}
else{_self.openWindowFromHashIfExists();}}}
_self.openPopup=function(entityId,entityType,initOptions){_self.validateDomElement();$timeout(function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;};_self.data.initOptions=defaultInitOptions();if(initOptions)
Object.assign(_self.data.initOptions,initOptions);var allowedLayouts=['desktop','mobile','mobile-middle','inner-entity'];if(allowedLayouts.indexOf(_self.data.initOptions.layout)<0){throw _self.data.initOptions.layout+' is not allowed template for comment component';return;}
if(!entityId&&!entityType)
throw 'To open rating popup, provide entityId and entityType';if(_self.data.initOptions.targetElementSelector){var targetElement=angular.element(_self.data.initOptions.targetElementSelector);if(targetElement){targetElement.append(_self.getRatingElement())}}
loadRatingFromApi(entityId,entityType);});};_self.submitComment=function(){_self.data.renderOptions.saveInProgress=true;saveCommentToApi().then(function(){UserCacheService.refreshMyLists().then(function(){emitRatedEvent();_self.data.renderOptions.saveInProgress=false;if(_self.data.initOptions.onSuccess){_self.data.initOptions.onSuccess(_self.data.model);}
$timeout(function(){_self.data.renderOptions.shouldDisplayThankYouBox=true;_self.data.renderOptions.shouldDisplayCommentBody=false;})})})}
_self.starScoreSelected=function(selectedScore){_self.data.model.UserComment.Score=selectedScore.value;}
_self.closePopup=function(){$timeout(function(){_self.data.initOptions=defaultInitOptions();_self.data.renderOptions=defaultRenderOptions();removeHashIfNeeded();angular.element('body').prepend(_self.getRatingElement());});}
_self.getRatingElement=function(){return angular.element(_self.componentHtmlTagName);};_self.createAndAppendRatingElemetIfDoesNotExists=function(scope){var element=_self.getRatingElement();if(!element||element.length===0){var html=$compile(`<${_self.componentHtmlTagName}></${_self.componentHtmlTagName}>`)(scope);angular.element('body').prepend(html);}};_self.validateDomElement=function(){if(angular.element(_self.componentHtmlTagName).length==0){throw 'Please add <'+_self.componentHtmlTagName+'> component to DOM, otherwise rating popup will not work';}
else if(angular.element(_self.componentHtmlTagName).length>1){throw 'More than one '+_self.componentHtmlTagName+' component detected. Please remove one <'+_self.componentHtmlTagName+'> component to DOM';}}}]);;angular.module('tasteatlas').component('ta2Photo',{bindings:{existingPhotos:'<',addedPhotos:'<'},templateUrl:'/content/scripts/app/v2/comments/ta2-photo.html',controller:'ta2PhotoController'}).controller("ta2PhotoController",['FilePickerService','$scope','TokenFactory','$rootScope','constants','$timeout','ta2ImageResizeService',function(FilePickerService,$scope,TokenFactory,$rootScope,constants,$timeout,ta2ImageResizeService){var _self=this;_self.addedDisplayPhotos=[];_self.constants=constants;_self.$onInit=function(){if(!_self.existingPhotos){_self.existingPhotos=[];}
if(!_self.addedPhotos){_self.addedPhotos=[];}}
_self.getDisplayPhotos=function(){return _self.existingPhotos.concat(_self.addedDisplayPhotos);}
this.clickRemovePhoto=function(event,photo){event.stopPropagation();removeFromArray(_self.existingPhotos,photo);removeFromArray(_self.addedPhotos,photo);removeFromArray(_self.addedDisplayPhotos,photo);};this.clickAddPhotos=function(event){if(_self.getDisplayPhotos().length>=5)
return;FilePickerService.triggerFilePicker(event);};this.onFilePickerSelect=function(files){if(!files||!files.length)
return;var allowedFiles=5-_self.getDisplayPhotos().length;for(var i=0;i<allowedFiles;i++){readAndPreviewFile(files[i]);}};function readAndPreviewFile(file){if(!file)
return;if(_self.getDisplayPhotos().length>=5)
return;console.log(file);FilePickerService.readAsDataUrl(file,$scope).then(function(result){ta2ImageResizeService.resizedataURL(result.url,function(resizedDataUrl){$timeout(function(){_self.addedPhotos.push(resizedDataUrl.split(',')[1]);_self.addedDisplayPhotos.push(resizedDataUrl);});},{maxDimension:2000,quality:0.9,outputFormat:'image/jpeg'})}).catch(function(err){console.log(err);});}
function removeFromArray(arr,value){var index=arr.indexOf(value);if(index!=-1){arr.splice(index,1);}}}]);;angular.module('tasteatlas').component('ta2Stars',{bindings:{currentScore:'<',onStarScoreSelected:'&',layout:'@',entityModal:'<'},templateUrl:'/content/scripts/app/v2/comments/ta2-stars.html',controller:'ta2ComponentStarsController'}).controller("ta2ComponentStarsController",['CommentHelper','$scope','MiscellaneousHelper',function(CommentHelper,$scope,MiscellaneousHelper){var _self=this;_self.viewText=' ';_self.halfStarText='TAP TO RATE';_self.halfScoreHoverMode=false;_self.starInfo=[{value:1,description:'Cancel your rating',active:false},{value:2,description:'I hate it',active:false},{value:3,description:'Very bad',active:false},{value:4,description:'I don\'t like it',active:false},{value:5,description:'I don\'t quite like it',active:false},{value:6,description:'Average',active:false},{value:7,description:'I like it',active:false},{value:8,description:'More than ok',active:false},{value:9,description:'I like it a lot',active:false},{value:10,description:'I love it',active:false}];_self.$onInit=function(){if(!_self.layout){_self.layout='desktop'}
if(_self.layout!='desktop'&&_self.layout!='mobile'){throw 'Invalid layout value '+_self.layout+'. Allowed layouts for ta2 star component are desktop and mobile';}
if(_self.layout==='desktop'){_self.halfScoreHoverMode=true;}
if(_self.currentScore){_self.activateStarsForScore(_self.currentScore);}};_self.getStarInfoByScore=function(score){for(var i=0;i<_self.starInfo.length;i++){if(_self.starInfo[i].value==score)
return _self.starInfo[i];}}
_self.resetAllStars=function(){for(var i=0;i<_self.starInfo.length;i++){_self.starInfo[i].active=false;}}
_self.activateStarsForScore=function(score){for(var i=0;i<score;i++){_self.starInfo[i].active=true;}
var selectedStarInfo=_self.getStarInfoByScore(score);_self.viewText=selectedStarInfo.description;if(!_self.halfScoreHoverMode)
_self.getMobileTapText(score);}
_self.mouseEnterStar=function(score){if(_self.halfScoreHoverMode){_self.activateStarsForScore(score);}};_self.mouseLeaveStar=function(score){if(_self.halfScoreHoverMode){_self.resetAllStars();}};_self.onMouseLeaveComponent=function(){if(_self.halfScoreHoverMode){for(var i=0;i<_self.currentScore;i++){_self.starInfo[i].active=true;}
_self.viewText='';}};_self.getMobileTapText=function(score){if(score%2===0){_self.halfStarText='TAP AGAIN FOR HALF STAR';}
else{_self.halfStarText='TAP AGAIN FOR FULL STAR';}}
_self.vote=function(score){var selectedStarInfo=_self.getStarInfoByScore(score);var activeScore=score;if(_self.halfScoreHoverMode){_self.currentScore=score;}
else{var isFullStar=activeScore%2===0;if(isFullStar){if(selectedStarInfo.value===_self.currentScore){activeScore=activeScore-1;_self.currentScore=activeScore;}
else{_self.currentScore=activeScore;}}
else{if(selectedStarInfo.value===_self.currentScore-1){_self.currentScore=activeScore;}
else{activeScore=activeScore+1;_self.currentScore=activeScore;}}
_self.resetAllStars();_self.activateStarsForScore(activeScore);}
selectedStarInfo=_self.getStarInfoByScore(_self.currentScore);_self.onStarScoreSelected({selectedScore:selectedStarInfo});};}]);;angular.module('tasteatlas').component('ta2RatingActionsSsr',{bindings:{details:'<',entityId:'<',entityType:'<',validScoreCount:'<',ratingDataCard:'<',isMobile:'<'},templateUrl:function($element,$attrs){var templates={'rate-redesign-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-rate.html','basic-rate-redesign-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-rate-basic.html','bookmark-redesign-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-bookmark.html','entity-modal-desktop-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-entity-modal-desktop.html','entity-modal-mobile-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-entity-modal-mobile.html','mobile-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-mobile.html','mobile-redesign-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-mobile.html','desktop-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-desktop.html','desktop-redesign-v2':'/content/scripts/app/v2/shared/rating-card/ta2-rating-actions-ssr-redesign-desktop.html'};return templates[$attrs.template];},controller:'rating-actions-ssr-mobile-controller-v2'}).controller('rating-actions-ssr-mobile-controller-v2',['$timeout','UserSubjectService','UserCommentStatusService','LoginService','RatingCardService','ProfileService','UserCacheService','ItemTypes','FoodTypesService','RatingSharedService','ta2ServicesEntityCommentHandler',function($timeout,UserSubjectService,UserCommentStatusService,LoginService,RatingCardService,ProfileService,UserCacheService,ItemTypes,FoodTypesService,RatingSharedService,ta2ServicesEntityCommentHandler){var _self=this;this.wannaTryItem=null;this.foodDetails=null;this.isAnonymous;this.rateItText="";this.isAddToListProcess=false;this.isWantsToTryProcess=false;this.getWannaTryFood=UserCacheService.getWannaTryFood;this.tryOpenRating=RatingSharedService.tryOpenRating;this.isFoodRatedV2=FoodTypesService.isFoodRatedV2;this.getFoodRatingScoreV2=FoodTypesService.getFoodRatingScoreV2;this.favoritedFoodsList=[];this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.userCommentStatus=UserCommentStatusService.getCurrentState();_self.foodDetails=_self.details;_self.favoritedFoodsList=getFoodsList();_self.wannaTryItem=_self.getWannaTryItem();if(_self.wannaTryItem){_self.userCommentStatus.wantsToTry=!!_self.wannaTryItem.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.wannaTryItem.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}
_self.rateItText=RatingCardService.getRateItText.apply(_self);if(typeof _self.entityId==='undefined'||_self.entityId===null){foodDetailsId=_self.RecipeVariationId;}else{foodDetailsId=_self.entityId;}
if(typeof _self.ratingDataCard==='undefined'||_self.ratingDataCard===null){_self.ratingDataCard=0;}
if(_self.entityType===ItemTypes.Dish){_self.favoritedFood=UserCacheService.getFavoriteDish(_self.entityId);}
else if(_self.entityType===ItemTypes.Ingredient){_self.favoritedFood=UserCacheService.getFavoriteIngredient(_self.entityId);}
else{_self.favoritedFood=UserCacheService.getFavoriteRecipe(_self.entityId);_self.favoritedRecipe=UserCacheService.getRecipeWannaTry(_self.entityId);}
if(_self.favoritedFood){_self.listPosition=_self.favoritedFood.Order;}
else{_self.listPosition=_self.favoritedFoodsList.length+1;}};_self.openRating=function(entityId,entityType,layout,appendUrlHash=null,targetElementSelector=null){ta2ServicesEntityCommentHandler.openPopup(entityId,entityType,{layout:layout,targetElementSelector:targetElementSelector,appendUrlHash:appendUrlHash});}
function _commentButtonObserver(data){_self.userCommentStatus=data;}
function loadWannaTryResult(){_self.wannaTryItem=_self.getWannaTryItem();if(_self.wannaTryItem){_self.userCommentStatus.wantsToTry=!!_self.wannaTryItem.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.wannaTryItem.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
this.getFavoritedFood=function(){if(_self.entityType===ItemTypes.Dish){return UserCacheService.getFavoriteDish(_self.entityId);}
else if(_self.entityType===ItemTypes.Ingredient){return UserCacheService.getFavoriteIngredient(_self.entityId);}
else if(_self.entityType===ItemTypes.RecipeVariation){return UserCacheService.getFavoriteRecipe(_self.entityId);}}
this.getWannaTryItem=function(){if(_self.entityType===ItemTypes.Dish){return UserCacheService.getDishWannaTry(_self.entityId);}
else if(_self.entityType===ItemTypes.Ingredient){return UserCacheService.getIngredientWannaTry(_self.entityId);}
else if(_self.entityType===ItemTypes.RecipeVariation){return UserCacheService.getRecipeWannaTry(_self.entityId);}}
this.startCommentProcess=function(){_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};function wannaTryClick(mainAction,secondaryAction,_decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
if(_self.getFoodRatingScoreV2(_self.entityId,_self.entityType)){return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(_self.entityId,_self.entityType).then(function(){return refreshData()});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(_self.entityId,_self.entityType).then(function(){return refreshData()});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',1);};this.getWannaTryLabel=function(){var label="Wanna try?";if(_self.userCommentStatus.comment){return "Wanna try?";}
if(_self.userCommentStatus.wantsToTry){label="Wanna try";}
return label;};this.wantsToTryClicked=function(action){loadWannaTryResult();};this.wantsToTryDisabled=function(){return _self.getFoodRatingScoreV2(_self.entityId,_self.entityType);};function getFoodsList(){var list=[];if(_self.entityType===ItemTypes.RecipeVariation){list=UserCacheService.getFavoriteRecipes();}
else{var favoritedDishes=UserCacheService.getFavoriteDishes();var favoritedIngredients=UserCacheService.getFavoriteIngredients();list=list.concat(favoritedDishes).concat(favoritedIngredients);}
return list;}
function refreshData(){return UserCacheService.refreshMyLists().then(function(){_self.favoritedFoodsList=getFoodsList();_self.wannaTryItem=_self.getWannaTryItem();});}
this.addToList=function(type){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
if(!_self.listPosition||(type==='change'&&_self.favoritedFoodsList.length===1)){return;}
return ProfileService.AddOrUpdateFavorite(_self.entityId,_self.entityType,_self.favoritedFoodsList.length+1).then(function(){refreshData();});};this.removeFromList=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
return ProfileService.RemoveFavorite(_self.entityId,_self.entityType).then(function(){refreshData();});};this.getRatingSource=function(){if(_self.foodDetails.TopListItemNumber){return 'toplist';}
return 'other';};}]);;angular.module('tasteatlas').component('ta2RatingActions',{bindings:{template:'@',templateColumn:'<',actions:'<',userCommentStatus:'<',type:'<',},templateUrl:function($element,$attrs){var templates={'mobile':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-mobile.html','desktop-row':'/content/scripts/app/components/shared/rating-card/ta-rating-actions-desktop-flex.html'};return templates[$attrs.template];},controller:'rating-actions-controller-v2'}).controller('rating-actions-controller-v2',['$timeout','UserSubjectService','UserCommentStatusService','LoginService','RatingCardService','ProfileService','UserCacheService','ItemTypes','FoodTypesService','RatingSharedService',function($timeout,UserSubjectService,UserCommentStatusService,LoginService,RatingCardService,ProfileService,UserCacheService,ItemTypes,FoodTypesService,RatingSharedService){var _self=this;this.wannaTryItem=null;this.foodDetails=null;this.isAnonymous;this.rateItText="";this.entityIds;this.isFoodRated=FoodTypesService.isFoodRated;this.tryOpenRating=RatingSharedService.tryOpenRating;this.getFoodRatingScore=FoodTypesService.getFoodRatingScore;this.favoritedFoodsList=[];this.$onInit=function(){_self.isAnonymous=UserSubjectService.isInAnonymousRole();UserCommentStatusService.subscribe(_commentButtonObserver);_self.foodDetails=_self.actions.getDetails();_self.entityIds=_self.actions.getFoodIds();_self.rateItText=RatingCardService.getRateItText.apply(_self);_self.selectedFoodEntityId=_self.foodDetails.Id||_self.foodDetails.RecipeVariationId||_self.foodDetails.EntityId;_self.favoritedFoodsList=getFoodsList();if((_self.foodDetails.RegionName||_self.foodDetails.Region!=null)||(_self.foodDetails.CountryName||_self.foodDetails.Region!=null)){_self.foodRegion={regionName:_self.foodDetails.RegionName||_self.foodDetails.Region.RegionName,countryName:_self.foodDetails.CountryName||_self.foodDetails.Region.CountryName}}else{_self.foodRegion=null;}
if(_self.foodDetails.EntityType===ItemTypes.Dish){_self.favoritedFood=UserCacheService.getFavoriteDish(_self.selectedFoodEntityId);}
else if(_self.foodDetails.EntityType===ItemTypes.Ingredient){_self.favoritedFood=UserCacheService.getFavoriteIngredient(_self.selectedFoodEntityId);}
else{_self.favoritedFood=UserCacheService.getFavoriteRecipe(_self.selectedFoodEntityId);}
if(_self.favoritedFood){_self.listPosition=_self.favoritedFood.Order;}
else{_self.listPosition=_self.favoritedFoodsList.length+1;}
angular.element(document).ready(function(){$timeout(function(){return loadWannaTryResult()},1000)});};function _commentButtonObserver(data){_self.userCommentStatus=data;}
function loadWannaTryResult(){_self.wannaTryItem=_self.actions.getWannaTryItem();if(_self.wannaTryItem){_self.userCommentStatus.wantsToTry=!!_self.wannaTryItem.WannaTryEnum;_self.userCommentStatus.doesntWantToTry=!_self.wannaTryItem.WannaTryEnum;}
else{_self.userCommentStatus.wantsToTry=false;_self.userCommentStatus.doesntWantToTry=false;}}
this.getFavoritedFood=function(){if(_self.entityIds.entityTypeEnum===ItemTypes.Dish){return UserCacheService.getFavoriteDish(_self.entityIds.entityId);}
else if(_self.entityIds.entityTypeEnum===ItemTypes.Ingredient){return UserCacheService.getFavoriteIngredient(_self.entityIds.entityId);}
else if(_self.entityIds.entityTypeEnum===ItemTypes.RecipeVariation){return UserCacheService.getFavoriteRecipe(_self.entityIds.entityId);}}
this.startCommentProcess=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus.isCommentProcess=true;UserCommentStatusService.dispatch(_self.userCommentStatus);};function wannaTryClick(mainAction,secondaryAction,decision){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
_self.userCommentStatus[mainAction]=!_self.userCommentStatus[mainAction];_self.userCommentStatus[secondaryAction]=false;var foodIds=_self.actions.getFoodIds();if(!_self.userCommentStatus[secondaryAction]&&!_self.userCommentStatus[mainAction]){ProfileService.RemoveWannaTry(foodIds.entityId,foodIds.entityTypeEnum).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}
else if(_self.userCommentStatus[mainAction]){ProfileService.AddWannaTry(foodIds.entityId,foodIds.entityTypeEnum).then(function(){UserCommentStatusService.dispatch(_self.userCommentStatus);return refreshData();});}}
this.wantsToTryClick=function(){wannaTryClick('wantsToTry','doesntWantToTry',1);};this.getWannaTryLabel=function(){var label="Wanna try?";if(_self.userCommentStatus.comment){return "Wanna try?";}
if(_self.userCommentStatus.wantsToTry){label="Wanna try";}
return label;};this.wantsToTryDisabled=function(){if(_self.type==='singleItemOnPage'){return _self.userCommentStatus.comment;}
else if(_self.type==='collection'){return _self.getFoodRatingScore(_self.foodDetails);}};function getFoodsList(){var list=[];if(_self.foodDetails.EntityType===ItemTypes.RecipeVariation){list=UserCacheService.getFavoriteRecipes();}
else{var favoritedDishes=UserCacheService.getFavoriteDishes();var favoritedIngredients=UserCacheService.getFavoriteIngredients();list=list.concat(favoritedDishes).concat(favoritedIngredients);}
return list;}
function refreshData(){return UserCacheService.refreshMyLists().then(function(){_self.favoritedFoodsList=getFoodsList();});}
this.addToList=function(type){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
if(!_self.listPosition||(type==='change'&&_self.favoritedFoodsList.length===1)){return;}
ProfileService.AddOrUpdateFavorite(_self.selectedFoodEntityId,_self.foodDetails.EntityType,_self.listPosition).then(function(){return refreshData();});};this.removeFromList=function(){if(UserSubjectService.isInAnonymousRole()){LoginService.updateState({isLoginProcess:true});return;}
ProfileService.RemoveFavorite(_self.selectedFoodEntityId,_self.foodDetails.EntityType).then(function(){return refreshData();});};this.getRatingSource=function(){if(_self.actions.getRatingSource){return _self.actions.getRatingSource();}
return 'other';};}]);;angular.module('tasteatlas').component('ta2RestaurantBadges',{bindings:{additionalClass:'@',type:'@',layout:'@',item:'<',itemsPerColumn:'<',maxColumns:'<'},templateUrl:'/content/scripts/app/v2/shared/restaurant-badges/ta2-restaurant-badges.html',controller:'ta2RestaurantBadgesController'}).controller("ta2RestaurantBadgesController",["constants",function(constants){var _self=this;_self.constants=constants;_self.isScoreWrapperVisible=true;_self.$onInit=function(){_self.layout=_self.layout||"desktop";_self.itemsPerColumn=_self.itemsPerColumn||4;_self.maxColumns=_self.maxColumns||2;_self.badges=[];if(_self.item.Badges&&_self.item.Badges.length){_self.item.Badges=_self.item.Badges.filter(function(item,index){if(item.RestaurantAwardTypeString=='YearFounded'){if(item.Age>=50){return item;}}else{return item;}})
var chunks=_self.chunk(_self.item.Badges,_self.itemsPerColumn);chunks=chunks.slice(0,_self.maxColumns);var chunksReverse=chunks.reverse();_self.badges=chunksReverse;}}
_self.showScore=function(isParentLast,isChildFirst){if(isParentLast&&isChildFirst){_self.isScoreWrapperVisible=!_self.isScoreWrapperVisible;}}
_self.chunk=function(arr,chunkSize){if(chunkSize<=0)throw "Invalid chunk size";var R=[];for(var i=0,len=arr.length;i<len;i+=chunkSize)
R.push(arr.slice(i,i+chunkSize));return R;}}]);;angular.module('tasteatlas').component('ta2RestaurantTablecloths',{bindings:{item:'<',type:'@',layout:'@'},templateUrl:'/content/scripts/app/v2/shared/restaurant-tablecloths/ta2-restaurant-tablecloths.html',controller:'ta2RestaurantTableclothsController'}).controller("ta2RestaurantTableclothsController",[function(){var _self=this;_self.$onInit=function(){_self.tableclothNumber=_self.item.NumberOfTableclothAwards;}}]);;window.customServices=window.customServices||{};window.customServices.sharedHomeService=(function(){var public={};var feedPage=0;var bestRatedTopListFeedSlider=[];var foodAnatomySwiper=[];var countrySwiper=[];var pairingSwiper=[];var externalFeedItems=document.querySelectorAll('.external-feed-item-slider--slide');var authenticVariationSwiper=[];var authenticIngredientSwiper=[];var isMobile=window.innerWidth<=768;var nextFeedPageData={inProgress:false,html:''};var observerOptions={root:null,rootMargin:'200%',threshold:0};var observerOptions2={root:null,rootMargin:'10%',threshold:0};var observer=new IntersectionObserver(observerCallback,observerOptions);var observer2=new IntersectionObserver(observerCallback2,observerOptions2);public.getFeedData=getFeedData;public.feedLoadMore=feedLoadMore;public.buildBestRatedTopListArticleSliders=buildBestRatedTopListArticleSliders;public.initialCountrySlider=initialCountrySlider;public.initialFoodAnatomySlider=initialFoodAnatomySlider;public.initialPairingSlider=initialPairingSlider;public.toggleSharedBtn=toggleSharedBtn;public.toogleSharedBtnFirstLoad=toogleSharedBtnFirstLoad;public.checkFeedElementOrder=checkFeedElementOrder;public.createCustomEventGA4=createCustomEventGA4;public.externalFeedItemSlider=externalFeedItemSlider;public.initAll=initAll;function initAll(){getFeedData()
feedLoadMore()
toogleSharedBtnFirstLoad()
externalFeedItemSlider()}
function localStorageDate(){return localStorage.getItem('HomeFeedOrderIdentity');}
function prepareFeedNextPage(){nextFeedPageData.inProgress=true;feedPage=feedPage+1;var requestParams={page:feedPage,pageSize:32,orderIdentity:localStorageDate()};$.get('feed',requestParams,function(response){console.log("Next feed Page Loaded in the background");nextFeedPageData.html=response;nextFeedPageData.inProgress=false;})}
function observeLoadMoreButton(){console.log('Observer activated')
observer.observe(document.querySelector("#feed-load-more-btn"));}
function removeObserverFromLoadMoreButton(){console.log('Observer deactivated')
observer.disconnect();}
function observerCallback(entries){if(entries[0].isIntersecting===true){console.log('Loading next feed page');prepareFeedNextPage();removeObserverFromLoadMoreButton();}}
function createCustomEventGA4(category,parameter_name,parameter_value){gtag("event",category,{[parameter_name]:parameter_value});}
function handleGAcLick(element){var attributeName='data-tag';var closestElement=$(element.target).closest(`[${attributeName}]`);var attributeValue=closestElement.attr(attributeName);createCustomEventGA4(attributeValue,'event_label',attributeValue);}
function observeGAbutton(){var links=document.querySelectorAll('.js-ga-heading');links.forEach(el=>observer2.observe(el));}
function observerCallback2(entries){entries.forEach(el=>el.isIntersecting?el.target.addEventListener('click',handleGAcLick):el.target.removeEventListener('click',handleGAcLick));}
function getFeedData(){var requestParams={page:0,pageSize:32,orderIdentity:localStorageDate()};$('#home-feed-loader').show();$('#feed-load-more-btn').hide();$.ajax({type:"GET",async:true,data:requestParams,url:'feed',dataType:'html',success:function(data){$('#feed').append(data);console.log("Success Feed Load");observeLoadMoreButton();observeGAbutton()},error:function(){console.log("Error Feed Item");},complete:function(data){$('#home-feed-loader').hide();$('#feed-load-more-btn').show();if(!isMobile){buildBestRatedTopListArticleSliders()
initialCountrySlider()}
initialFoodAnatomySlider()
initialPairingSlider()
authenticRecipeSliders()
toggleSharedBtn()
checkFeedElementOrder()
floatingActionBtn()
externalFeedItemSlider()
console.log("Complete Feed Load");}});}
function feedLoadMore(){$('#feed-load-more-btn').click(function(){$('#home-feed-loader').show();$('#feed-load-more-btn').css('visibility','hidden');var interval=setInterval(function(){if(nextFeedPageData.inProgress){return;}
clearInterval(interval);$('#feed-load-more-section').append(nextFeedPageData.html);$('#home-feed-loader').hide();$('#feed-load-more-btn').css('visibility','visible');if(!isMobile){buildBestRatedTopListArticleSliders()
initialCountrySlider()}
initialFoodAnatomySlider()
initialPairingSlider()
authenticRecipeSliders()
toggleSharedBtn()
checkFeedElementOrder()
externalFeedItemSlider()
console.log("Complete Load More Feed Item");observeLoadMoreButton();observeGAbutton();},10);});}
function checkFeedElementOrder(){if($("#feed-load-more-section").children().last().hasClass('best-rated-top-list-article')||$("#feed").children().last().hasClass('best-rated-top-list-article')){$("#feed-load-more-section").children().last().remove();}
if($("#feed-load-more-section").children().first().hasClass('best-rated-top-list-article')||$("#feed").children().first().hasClass('best-rated-top-list-article')){$("#feed-load-more-section").children().first().remove();}}
function buildBestRatedTopListArticleSliders(){$(".best-rated-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('best-rated-slider-'+i).attr('data-id',i);$this.addClass('slider-initialized');$this.parent().find(".feed__slider--scroll-circle--right").addClass("best-rated-button-next-"+i).attr('id',i);$this.parent().find(".feed__slider--scroll-circle--left").addClass("best-rated-button-prev-"+i);bestRatedTopListFeedSlider[i]=new Swiper('.best-rated-slider-'+i,{slidesPerView:4,slidesPerGroup:3,freeMode:false,autoHeight:false,speed:400,spaceBetween:15,resistanceRatio:0,watchSlidesVisibility:true,preloadImages:false,navigation:{nextEl:'.best-rated-button-next-'+i,prevEl:'.best-rated-button-prev-'+i,},breakpoints:{1024:{slidesPerView:3.5,freeMode:true,slidesOffsetAfter:40},850:{slidesPerView:2.8,},768:{slidesOffsetAfter:15},},});});}
function initialCountrySlider(){$(".country-spotlight-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('country-spotlight-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("country-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("country-button-prev-"+i);countrySwiper[i]=new Swiper('.country-spotlight-slider-'+i,{slidesPerView:3,slidesPerGroup:1,spaceBetween:3,freeMode:false,preloadImages:false,speed:500,resistanceRatio:0,navigation:{nextEl:'.country-button-next-'+i,prevEl:'.country-button-prev-'+i,},breakpoints:{1024:{slidesPerView:2.6,freeMode:true,slidesOffsetAfter:40},850:{slidesPerView:2.15,},},});});}
function initialFoodAnatomySlider(){$(".food-anatomy-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('food-anatomy-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--left").addClass("food-anatomy-button-prev-"+i);$this.parent().find(".slider__scroll-circle--right").addClass("food-anatomy-button-next-"+i);foodAnatomySwiper[i]=new Swiper('.food-anatomy-slider-'+i,{slidesPerView:2,slidesPerGroup:2,freeMode:true,speed:500,spaceBetween:15,resistanceRatio:0,preloadImages:false,navigation:{nextEl:'.food-anatomy-button-next-'+i,prevEl:'.food-anatomy-button-prev-'+i,},breakpoints:{1140:{slidesPerView:3},991:{slidesPerView:3},768:{slidesPerView:2,resistanceRatio:1,},576:{slidesPerView:1.3,slidesPerGroup:1}}});});}
function initialPairingSlider(){$(".pairing-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('pairing-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("pairing-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("pairing-button-prev-"+i);pairingSwiper[i]=new Swiper('.pairing-slider-'+i,{slidesPerView:1,slidesPerGroup:1,freeMode:true,speed:500,spaceBetween:15,preloadImages:false,resistanceRatio:0,navigation:{nextEl:'.pairing-button-next-'+i,prevEl:'.pairing-button-prev-'+i,},breakpoints:{1140:{slidesPerView:2},991:{slidesPerView:1.5},768:{slidesPerView:1,resistanceRatio:1,},576:{slidesPerView:.75}}});});}
function authenticRecipeSliders(){initialVariationsSlider()
initialIngredientsSlider()}
function initialVariationsSlider(){$(".authentic-recipe-variations-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('authentic-recipe-variations-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("authentic-variations-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("authentic-variations-button-prev-"+i);authenticVariationSwiper[i]=new Swiper(".authentic-recipe-variations-slider-"+i,{slidesPerView:'auto',slidesPerGroup:1,freeMode:true,speed:500,spaceBetween:50,preloadImages:false,resistanceRatio:0,navigation:{nextEl:'.authentic-variations-button-next-'+i,prevEl:'.authentic-variations-button-prev-'+i,},breakpoints:{576:{slidesPerView:1.2,slidesPerGroup:1,spaceBetween:10,resistanceRatio:1,}}});});}
function initialIngredientsSlider(){$(".authentic-recipe-ingredients-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('authentic-recipe-ingredients-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("authentic-ingredients-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("authentic-ingredients-button-prev-"+i);authenticIngredientSwiper[i]=new Swiper(".authentic-recipe-ingredients-slider-"+i,{slidesPerView:'auto',slidesPerGroup:2,freeMode:true,speed:250,spaceBetween:15,preloadImages:false,resistanceRatio:0,navigation:{nextEl:'.authentic-ingredients-button-next-'+i,prevEl:'.authentic-ingredients-button-prev-'+i,},breakpoints:{768:{resistanceRatio:1,}}});});}
function externalFeedItemSlider(){var swiper=new Swiper('.external-feed-item-slider',{loop:externalFeedItems.length>1,slidesPerView:1,centeredSlides:true,centeredSlidesBounds:true,speed:500,resistanceRatio:0,preloadImages:false,navigation:{nextEl:'.external-feed-item--button-next',prevEl:'.external-feed-item--button-prev',}});}
function toogleSharedBtnFirstLoad(){$(".blog-posts-feed--first .share-btn").each(function(){$(this).click(function(){$(this).next().toggle();});});}
function toggleSharedBtn(){$(".home-feed .share-btn").each(function(){$(this).click(function(){$(this).next().toggle();});});}
window.addEventListener('click',function(e){let modalOverlay=$(".modal--overlay");let target=$(e.target);if(document.body.contains(document.getElementById('restaurant-entity-modal-container'))){if(!document.getElementById('restaurant-entity-modal-container').contains(e.target)&&e.target.nodeName!='I'){$('#entity-restaurant-modal').addClass("hidden-entity-restaurant-modal").css('visibility','hidden');$(modalOverlay).removeClass('modal--overlay-active');if($.contains(document.body,document.querySelector('.fab-wrapper'))){$('.fab-wrapper').css('display','block');}
e.stopPropagation();$('#entity-restaurant-modal').empty();$('body').removeClass('modal--open');history.back();}}
if(target.is(modalOverlay)){$("#fabCheckbox").prop("checked",false);modalOverlay.removeClass('modal--overlay-active');}})
function floatingActionBtn(){$('#fabCheckbox').change(function(){let deviceRail=400;$(".modal--overlay").toggleClass('modal--overlay-active');if(document.body.scrollTop>deviceRail||document.documentElement.scrollTop>deviceRail){$(".js-back-to-top").toggleClass('back-to-top--active');}});}
return public;}());;window.customServices=window.customServices||{};window.customServices.sharedQuizService=(function(){var public={};public.initAll=initAll;public.startQuiz=startQuiz;public.nextQuestion=nextQuestion;public.useJoker=useJoker;public.checkAnswer=checkAnswer;function initAll(){console.log('sharedQuizService');}
function startQuiz(){}
function nextQuestion(){}
function useJoker(){var optionsBtns=document.querySelectorAll('.quiz-options-button');var useJokerBtn=document.querySelector('.use-joker-btn');var firstRandomNumber=Math.floor(Math.random()*4);var secondRandomNumber=Math.floor(Math.random()*3);if(firstRandomNumber==secondRandomNumber){secondRandomNumber=secondRandomNumber+1;}
optionsBtns[firstRandomNumber].classList.add("disabled");optionsBtns[secondRandomNumber].classList.add("disabled");useJokerBtn.classList.add("disabled","clicked");optionsBtns[firstRandomNumber].setAttribute('disabled','');optionsBtns[secondRandomNumber].setAttribute('disabled','');useJokerBtn.setAttribute('disabled','');}
function checkAnswer(){}
function checkSeconds(){}
function timeIsUp(){}
function checkLevels(){}
function checkLevels(){}
return public;}());;window.customServices=window.customServices||{};window.customServices.sharedSertificatesService=(function(){var public={};var certificatesSwiper;var isMobile=window.innerWidth<=768;public.mainSlider=mainSlider;public.initAll=initAll;function initAll(){mainSlider();}
function mainSlider(){certificatesSwiper=new Swiper('.certificates-slider',{slidesPerView:6,slidesPerGroup:1,spaceBetween:30,loop:true,navigation:{nextEl:'.certificates-button-next',prevEl:'.certificates-button-prev',},breakpoints:{1024:{slidesPerView:4,spaceBetween:20,},850:{slidesPerView:3,spaceBetween:15,},},});}
$(document).ready(function(){$('#by-country-link').click(function(e){e.preventDefault();$('html, body').animate({scrollTop:$('#by-country').offset().top},250);});});return public;}());;window.customServices=window.customServices||{};window.customServices.sharedTopListsService=(function(){var public={};var itemVariationsSwiper=[];public.initAll=initAll;function initAll(){}
function initialItemVariationsSlider(){$(".item-variations-slider:not(.slider-initialized)").each(function(i,e){const $this=$(this);$this.addClass('item-variations-slider-'+i);$this.addClass('slider-initialized');$this.parent().find(".slider__scroll-circle--right").addClass("item-variations-button-next-"+i);$this.parent().find(".slider__scroll-circle--left").addClass("item-variations-button-prev-"+i);itemVariationsSwiper[i]=new Swiper('.item-variations-slider-'+i,{slidesPerView:6,slidesPerGroup:1,spaceBetween:30,loop:true,navigation:{nextEl:'.item-variations-button-next-'+i,prevEl:'.item-variations-button-prev-'+i,}});});}
function loadMoreTopListItems(topListArticleId,isRecipeArticle,template){var requestParams={topListArticleId:topListArticleId,isRecipeArticle:isRecipeArticle,template:template};$('#top-list-loader').show();$('#top-list-item-load-more-btn').hide();$.ajax({type:"GET",async:true,data:requestParams,url:'toplistarticles/toplistitemsloadall',dataType:'html',success:function(data){$('#top-list-load-more-section').append(data);console.log("Success Top List item load");},error:function(err){console.log("Error Top List Item load");},complete:function(data){$('#top-list-loader').hide();console.log("Complete Top List Items load");}});}
return public;}());;window.customServices=window.customServices||{};window.customServices.desktopArticleService=(function(){var public={};var sidebarSecondAds;var sidebarFirstAds;public.scrollSlider=scrollSlider;public.horizontalScroll=horizontalScroll;public.checkContentHeight=checkContentHeight;public.addStickyClass=addStickyClass;public.initAll=initAll;function initAll(){addStickyClass();checkContentHeight();}
function scrollSlider(element,direction){var containers=document.querySelectorAll('ul.more-from-slider-list');this.horizontalScroll(containers[element],direction)};function horizontalScroll(element,direction){var scrollAmount=0;var slideTimer=setInterval(function(){if(direction=='left'){element.scrollLeft-=18;element.offsetLeft;}
else{element.scrollLeft+=18;element.offsetRight;}
scrollAmount+=18;if(scrollAmount>=334){window.clearInterval(slideTimer);}},15);};function addStickyClass(){sidebarSecondAds=document.getElementById('article__google-ads--sidebar-second');sidebarFirstAds=document.getElementById('article__google-ads--sidebar-first');var shareWrapper=document.getElementById('article-share-icons-wrapper');var sidebarWrapper=document.querySelector('.article-container__main-content--desktop');var topOfSecondAd=(sidebarWrapper.offsetTop-document.body.scrollTop)+(sidebarSecondAds.offsetTop-document.body.scrollTop);var endOfContent=(document.getElementById('article-comments-component').offsetTop-document.body.scrollTop);var shareSctickyTop=(sidebarWrapper.offsetTop-document.body.scrollTop)-120;var additional;if(sidebarFirstAds.hasAttribute("disabled-ads")){additional=0;}else{additional=620;}
document.addEventListener('scroll',function(){if(window.scrollY>shareSctickyTop){shareWrapper.classList.add('article-share-sticky');}
else{shareWrapper.classList.remove('article-share-sticky');}
if(window.scrollY>=(topOfSecondAd+additional)){sidebarSecondAds.classList.add('article__google-ads--sidebar-sticky');}
else{sidebarSecondAds.classList.remove('article__google-ads--sidebar-sticky');}
if(window.scrollY>(endOfContent+700)){sidebarSecondAds.classList.remove('article__google-ads--sidebar-sticky');}});}
function checkContentHeight(){sidebarSecondAds=document.getElementById('article__google-ads--sidebar-second');var contentHeight=document.getElementById('article-main-content').offsetHeight;if(contentHeight<1000){sidebarSecondAds.setAttribute('disabled-ads',true);}
else if(sidebarSecondAds.hasAttribute("disabled-ads")){sidebarSecondAds.removeAttribute('disabled-ads');}}
return public;}());;