| 38 | var getXhr=function(callback){if(window.XMLHttpRequest){return callback(null,new XMLHttpRequest)}else if(window.ActiveXObject){try{return callback(null,new ActiveXObject("Msxml2.XMLHTTP"))}catch(e){return callback(null,new ActiveXObject("Microsoft.XMLHTTP"))}}return callback(new Error)};var encodeUsingUrlEncoding=function(data){if(typeof data==="string"){return data}var result=[];for(var dataItem in data){if(data.hasOwnProperty(dataItem)){result.push(encodeURIComponent(dataItem)+"="+encodeURIComponent(data[dataItem]))}}return result.join("&")};var utf8=function(text){text=text.replace(/\r\n/g,"\n");var result="";for(var i=0;i<text.length;i++){var c=text.charCodeAt(i);if(c<128){result+=String.fromCharCode(c)}else if(c>127&&c<2048){result+=String.fromCharCode(c>>6|192);result+=String.fromCharCode(c&63|128)}else{result+=String.fromCharCode(c>>12|224);result+=String.fromCharCode(c>>6&63|128);result+=String.fromCharCode(c&63|128)}}return result};var base64=function(text){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";text=utf8(text);var result="",chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;do{chr1=text.charCodeAt(i++);chr2=text.charCodeAt(i++);chr3=text.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}result+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);chr1=chr2=chr3="";enc1=enc2=enc3=enc4=""}while(i<text.length);return result};var mergeHeaders=function(){var result=arguments[0];for(var i=1;i<arguments.length;i++){var currentHeaders=arguments[i];for(var header in currentHeaders){if(currentHeaders.hasOwnProperty(header)){result[header]=currentHeaders[header]}}}return result};var ajax=function(method,url,options,callback){if(typeof options==="function"){callback=options;options={}}options.cache=options.cache||false;options.data=options.data||{};options.headers=options.headers||{};options.jsonp=options.jsonp||false;options.async=options.async===undefined?true:options.async;var headers=mergeHeaders({accept:"*/*","content-type":"application/x-www-form-urlencoded;charset=UTF-8"},ajax.headers,options.headers);var payload;if(headers["content-type"]==="application/json"){payload=JSON.stringify(options.data)}else{payload=encodeUsingUrlEncoding(options.data)}if(method==="GET"){var queryString=[];if(payload){queryString.push(payload);payload=null}if(!options.cache){queryString.push("_="+(new Date).getTime())}if(options.jsonp){queryString.push("callback="+options.jsonp);queryString.push("jsonp="+options.jsonp)}queryString=queryString.join("&");if(queryString.length>1){if(url.indexOf("?")>-1){url+="&"+queryString}else{url+="?"+queryString}}if(options.jsonp){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.type="text/javascript";script.src=url;head.appendChild(script);return}}getXhr((function(err,xhr){if(err)return callback(err);xhr.open(method,url,options.async);for(var header in headers){if(headers.hasOwnProperty(header)){xhr.setRequestHeader(header,headers[header])}}xhr.onreadystatechange=function(){if(xhr.readyState===4){var data=xhr.responseText||"";if(!callback){return}callback(xhr.status,{text:function(){return data},json:function(){try{return JSON.parse(data)}catch(e){f.error("Can not parse JSON. URL: "+url);return{}}}})}};xhr.send(payload)}))};var http={authBasic:function(username,password){ajax.headers["Authorization"]="Basic "+base64(username+":"+password)},connect:function(url,options,callback){return ajax("CONNECT",url,options,callback)},del:function(url,options,callback){return ajax("DELETE",url,options,callback)},get:function(url,options,callback){return ajax("GET",url,options,callback)},head:function(url,options,callback){return ajax("HEAD",url,options,callback)},headers:function(headers){ajax.headers=headers||{}},isAllowed:function(url,verb,callback){this.options(url,(function(status,data){callback(data.text().indexOf(verb)!==-1)}))},options:function(url,options,callback){return ajax("OPTIONS",url,options,callback)},patch:function(url,options,callback){return ajax("PATCH",url,options,callback)},post:function(url,options,callback){return ajax("POST",url,options,callback)},put:function(url,options,callback){return ajax("PUT",url,options,callback)},trace:function(url,options,callback){return ajax("TRACE",url,options,callback)}};var methode=options.type?options.type.toLowerCase():"get";http[methode](options.url,options,(function(status,data){if(status===200||status===0&&data.text()){options.success(data.json(),status,null)}else{options.error(data.text(),status,null)}}))}var _cookie={create:function(name,value,minutes,domain){var expires;if(minutes){var date=new Date;date.setTime(date.getTime()+minutes*60*1e3);expires="; expires="+date.toGMTString()}else expires="";domain=domain?"domain="+domain+";":"";document.cookie=name+"="+value+expires+";"+domain+"path=/"},read:function(name){var nameEQ=name+"=";var ca=document.cookie.split(";");for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==" ")c=c.substring(1,c.length);if(c.indexOf(nameEQ)===0)return c.substring(nameEQ.length,c.length)}return null},remove:function(name){this.create(name,"",-1)}};var cookie_noop={create:function(name,value,minutes,domain){},read:function(name){return null},remove:function(name){}};var f={extend:$?$.extend:_extend,deepExtend:_deepExtend,each:$?$.each:_each,ajax:$?$.ajax:typeof document!=="undefined"?_ajax:function(){},cookie:typeof document!=="undefined"?_cookie:cookie_noop,detectLanguage:detectLanguage,escape:_escape,log:function(str){if(o.debug&&typeof console!=="undefined")console.log(str)},error:function(str){if(typeof console!=="undefined")console.error(str)},getCountyIndexOfLng:function(lng){var lng_index=0;if(lng==="nb-NO"||lng==="nn-NO"||lng==="nb-no"||lng==="nn-no")lng_index=1;return lng_index},toLanguages:function(lng,fallbackLng){var log=this.log;fallbackLng=fallbackLng||o.fallbackLng;if(typeof fallbackLng==="string")fallbackLng=[fallbackLng];function applyCase(l){var ret=l;if(typeof l==="string"&&l.indexOf("-")>-1){var parts=l.split("-");ret=o.lowerCaseLng?parts[0].toLowerCase()+"-"+parts[1].toLowerCase():parts[0].toLowerCase()+"-"+parts[1].toUpperCase()}else{ret=o.lowerCaseLng?l.toLowerCase():l}return ret}var languages=[];var whitelist=o.lngWhitelist||false;var addLanguage=function(language){if(!whitelist||whitelist.indexOf(language)>-1){languages.push(language)}else{log("rejecting non-whitelisted language: "+language)}};if(typeof lng==="string"&&lng.indexOf("-")>-1){var parts=lng.split("-");if(o.load!=="unspecific")addLanguage(applyCase(lng));if(o.load!=="current")addLanguage(applyCase(parts[this.getCountyIndexOfLng(lng)]))}else{addLanguage(applyCase(lng))}for(var i=0;i<fallbackLng.length;i++){if(languages.indexOf(fallbackLng[i])===-1&&fallbackLng[i])languages.push(applyCase(fallbackLng[i]))}return languages},regexEscape:function(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexReplacementEscape:function(strOrFn){if(typeof strOrFn==="string"){return strOrFn.replace(/\$/g,"$$$$")}else{return strOrFn}},localStorage:{setItem:function(key,value){if(window.localStorage){try{window.localStorage.setItem(key,value)}catch(e){f.log('failed to set value for key "'+key+'" to localStorage.')}}},getItem:function(key,value){if(window.localStorage){try{return window.localStorage.getItem(key,value)}catch(e){f.log('failed to get value for key "'+key+'" from localStorage.');return undefined}}}}};function init(options,cb){if(typeof options==="function"){cb=options;options={}}options=options||{};f.extend(o,options);delete o.fixLng;if(o.functions){delete o.functions;f.extend(f,options.functions)}if(typeof o.ns=="string"){o.ns={namespaces:[o.ns],defaultNs:o.ns}}if(typeof o.fallbackNS=="string"){o.fallbackNS=[o.fallbackNS]}if(typeof o.fallbackLng=="string"||typeof o.fallbackLng=="boolean"){o.fallbackLng=[o.fallbackLng]}o.interpolationPrefixEscaped=f.regexEscape(o.interpolationPrefix);o.interpolationSuffixEscaped=f.regexEscape(o.interpolationSuffix);if(!o.lng)o.lng=f.detectLanguage();languages=f.toLanguages(o.lng);currentLng=languages[0];f.log("currentLng set to: "+currentLng);if(o.useCookie&&f.cookie.read(o.cookieName)!==currentLng){f.cookie.create(o.cookieName,currentLng,o.cookieExpirationTime,o.cookieDomain)}if(o.detectLngFromLocalStorage&&typeof document!=="undefined"&&window.localStorage){f.localStorage.setItem("i18next_lng",currentLng)}var lngTranslate=translate;if(options.fixLng){lngTranslate=function(key,options){options=options||{};options.lng=options.lng||lngTranslate.lng;return translate(key,options)};lngTranslate.lng=currentLng}pluralExtensions.setCurrentLng(currentLng);if($&&o.setJqueryExt){addJqueryFunct&&addJqueryFunct()}else{addJqueryLikeFunctionality&&addJqueryLikeFunctionality()}var deferred;if($&&$.Deferred){deferred=$.Deferred()}if(o.resStore){resStore=o.resStore;initialized=true;if(cb)cb(null,lngTranslate);if(deferred)deferred.resolve(lngTranslate);if(deferred)return deferred.promise();return}var lngsToLoad=f.toLanguages(o.lng);if(typeof o.preload==="string")o.preload=[o.preload];for(var i=0,l=o.preload.length;i<l;i++){var pres=f.toLanguages(o.preload[i]);for(var y=0,len=pres.length;y<len;y++){if(lngsToLoad.indexOf(pres[y])<0){lngsToLoad.push(pres[y])}}}i18n.sync.load(lngsToLoad,o,(function(err,store){resStore=store;initialized=true;if(cb)cb(err,lngTranslate);if(deferred)(!err?deferred.resolve:deferred.reject)(err||lngTranslate)}));if(deferred)return deferred.promise()}function isInitialized(){return initialized}function preload(lngs,cb){if(typeof lngs==="string")lngs=[lngs];for(var i=0,l=lngs.length;i<l;i++){if(o.preload.indexOf(lngs[i])<0){o.preload.push(lngs[i])}}return init(cb)}function addResourceBundle(lng,ns,resources,deep,overwrite){if(typeof ns!=="string"){resources=ns;ns=o.ns.defaultNs}else if(o.ns.namespaces.indexOf(ns)<0){o.ns.namespaces.push(ns)}resStore[lng]=resStore[lng]||{};resStore[lng][ns]=resStore[lng][ns]||{};if(deep){f.deepExtend(resStore[lng][ns],resources,overwrite)}else{f.extend(resStore[lng][ns],resources)}if(o.useLocalStorage){sync._storeLocal(resStore)}}function hasResourceBundle(lng,ns){if(typeof ns!=="string"){ns=o.ns.defaultNs}resStore[lng]=resStore[lng]||{};var res=resStore[lng][ns]||{};var hasValues=false;for(var prop in res){if(res.hasOwnProperty(prop)){hasValues=true}}return hasValues}function getResourceBundle(lng,ns){if(typeof ns!=="string"){ns=o.ns.defaultNs}resStore[lng]=resStore[lng]||{};return f.extend({},resStore[lng][ns])}function removeResourceBundle(lng,ns){if(typeof ns!=="string"){ns=o.ns.defaultNs}resStore[lng]=resStore[lng]||{};resStore[lng][ns]={};if(o.useLocalStorage){sync._storeLocal(resStore)}}function addResource(lng,ns,key,value){if(typeof ns!=="string"){resource=ns;ns=o.ns.defaultNs}else if(o.ns.namespaces.indexOf(ns)<0){o.ns.namespaces.push(ns)}resStore[lng]=resStore[lng]||{};resStore[lng][ns]=resStore[lng][ns]||{};var keys=key.split(o.keyseparator);var x=0;var node=resStore[lng][ns];while(keys[x]){if(x==keys.length-1)node[keys[x]]=value;else{if(node[keys[x]]==null)node[keys[x]]={};node=node[keys[x]]}x++}if(o.useLocalStorage){sync._storeLocal(resStore)}}function addResources(lng,ns,resources){if(typeof ns!=="string"){resources=ns;ns=o.ns.defaultNs}else if(o.ns.namespaces.indexOf(ns)<0){o.ns.namespaces.push(ns)}for(var m in resources){if(typeof resources[m]==="string")addResource(lng,ns,m,resources[m])}}function setDefaultNamespace(ns){o.ns.defaultNs=ns}function loadNamespace(namespace,cb){loadNamespaces([namespace],cb)}function loadNamespaces(namespaces,cb){var opts={dynamicLoad:o.dynamicLoad,resGetPath:o.resGetPath,getAsync:o.getAsync,customLoad:o.customLoad,ns:{namespaces:namespaces,defaultNs:""}};var lngsToLoad=f.toLanguages(o.lng);if(typeof o.preload==="string")o.preload=[o.preload];for(var i=0,l=o.preload.length;i<l;i++){var pres=f.toLanguages(o.preload[i]);for(var y=0,len=pres.length;y<len;y++){if(lngsToLoad.indexOf(pres[y])<0){lngsToLoad.push(pres[y])}}}var lngNeedLoad=[];for(var a=0,lenA=lngsToLoad.length;a<lenA;a++){var needLoad=false;var resSet=resStore[lngsToLoad[a]];if(resSet){for(var b=0,lenB=namespaces.length;b<lenB;b++){if(!resSet[namespaces[b]])needLoad=true}}else{needLoad=true}if(needLoad)lngNeedLoad.push(lngsToLoad[a])}if(lngNeedLoad.length){i18n.sync._fetch(lngNeedLoad,opts,(function(err,store){var todo=namespaces.length*lngNeedLoad.length;f.each(namespaces,(function(nsIndex,nsValue){if(o.ns.namespaces.indexOf(nsValue)<0){o.ns.namespaces.push(nsValue)}f.each(lngNeedLoad,(function(lngIndex,lngValue){resStore[lngValue]=resStore[lngValue]||{};resStore[lngValue][nsValue]=store[lngValue][nsValue];todo--;if(todo===0&&cb){if(o.useLocalStorage)i18n.sync._storeLocal(resStore);cb()}}))}))}))}else{if(cb)cb()}}function setLng(lng,options,cb){if(typeof options==="function"){cb=options;options={}}else if(!options){options={}}options.lng=lng;return init(options,cb)}function lng(){return currentLng}function dir(){var rtlLangs=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam"];if(rtlLangs.some((function(lang){return new RegExp("^"+lang).test(currentLng)}))){return"rtl"}return"ltr"}function reload(cb){resStore={};setLng(currentLng,cb)}function noConflict(){window.i18next=window.i18n;if(conflictReference){window.i18n=conflictReference}else{delete window.i18n}}function addJqueryFunct(){$.t=$.t||translate;function parse(ele,key,options){if(key.length===0)return;var attr="text";if(key.indexOf("[")===0){var parts=key.split("]");key=parts[1];attr=parts[0].substr(1,parts[0].length-1)}if(key.indexOf(";")===key.length-1){key=key.substr(0,key.length-2)}var optionsToUse;if(attr==="html"){optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.html()},options):options;ele.html($.t(key,optionsToUse))}else if(attr==="text"){optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.text()},options):options;ele.text($.t(key,optionsToUse))}else if(attr==="prepend"){optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.html()},options):options;ele.prepend($.t(key,optionsToUse))}else if(attr==="append"){optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.html()},options):options;ele.append($.t(key,optionsToUse))}else if(attr.indexOf("data-")===0){var dataAttr=attr.substr("data-".length);optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.data(dataAttr)},options):options;var translated=$.t(key,optionsToUse);ele.data(dataAttr,translated);ele.attr(attr,translated)}else{optionsToUse=o.defaultValueFromContent?$.extend({defaultValue:ele.attr(attr)},options):options;ele.attr(attr,$.t(key,optionsToUse))}}function localize(ele,options){var key=ele.attr(o.selectorAttr);if(!key&&typeof key!=="undefined"&&key!==false)key=ele.text()||ele.val();if(!key)return;var target=ele,targetSelector=ele.data("i18n-target");if(targetSelector){target=ele.find(targetSelector)||ele}if(!options&&o.useDataAttrOptions===true){options=ele.data("i18n-options")}options=options||{};if(key.indexOf(";")>=0){var keys=key.split(";");$.each(keys,(function(m,k){if(k!=="")parse(target,k,options)}))}else{parse(target,key,options)}if(o.useDataAttrOptions===true){var clone=$.extend({lng:"non",lngs:[],_origLng:"non"},options);delete clone.lng;delete clone.lngs;delete clone._origLng;ele.data("i18n-options",clone)}}$.fn.i18n=function(options){return this.each((function(){localize($(this),options);var elements=$(this).find("["+o.selectorAttr+"]");elements.each((function(){localize($(this),options)}))}))}}function addJqueryLikeFunctionality(){function parse(ele,key,options){if(key.length===0)return;var attr="text";if(key.indexOf("[")===0){var parts=key.split("]");key=parts[1];attr=parts[0].substr(1,parts[0].length-1)}if(key.indexOf(";")===key.length-1){key=key.substr(0,key.length-2)}if(attr==="html"){ele.innerHTML=translate(key,options)}else if(attr==="text"){ele.textContent=translate(key,options)}else if(attr==="prepend"){ele.insertAdjacentHTML(translate(key,options),"afterbegin")}else if(attr==="append"){ele.insertAdjacentHTML(translate(key,options),"beforeend")}else{ele.setAttribute(attr,translate(key,options))}}function localize(ele,options){var key=ele.getAttribute(o.selectorAttr);if(!key&&typeof key!=="undefined"&&key!==false)key=ele.textContent||ele.value;if(!key)return;var target=ele,targetSelector=ele.getAttribute("i18n-target");if(targetSelector){target=ele.querySelector(targetSelector)||ele}if(key.indexOf(";")>=0){var keys=key.split(";"),index=0,length=keys.length;for(;index<length;index++){if(keys[index]!=="")parse(target,keys[index],options)}}else{parse(target,key,options)}}i18n.translateObject=function(object,options){var elements=object.querySelectorAll("["+o.selectorAttr+"]");var index=0,length=elements.length;for(;index<length;index++){localize(elements[index],options)}}}function applyReplacement(str,replacementHash,nestedKey,options){if(!str)return str;options=options||replacementHash;if(str.indexOf(options.interpolationPrefix||o.interpolationPrefix)<0)return str;var prefix=options.interpolationPrefix?f.regexEscape(options.interpolationPrefix):o.interpolationPrefixEscaped,suffix=options.interpolationSuffix?f.regexEscape(options.interpolationSuffix):o.interpolationSuffixEscaped,keyseparator=options.keyseparator||o.keyseparator;var hash=replacementHash.replace&&typeof replacementHash.replace==="object"?replacementHash.replace:replacementHash;var replacementRegex=new RegExp([prefix,"(.+?)","(HTML)?",suffix].join(""),"g");var escapeInterpolation=options.escapeInterpolation||o.escapeInterpolation;return str.replace(replacementRegex,(function(wholeMatch,keyMatch,htmlMatched){var objectMatching=hash;var keyLeaf=keyMatch;while(keyLeaf.indexOf(keyseparator)>=0&&typeof objectMatching==="object"&&objectMatching){var propName=keyLeaf.slice(0,keyLeaf.indexOf(keyseparator));keyLeaf=keyLeaf.slice(keyLeaf.indexOf(keyseparator)+1);objectMatching=objectMatching[propName]}if(objectMatching&&typeof objectMatching==="object"&&objectMatching.hasOwnProperty(keyLeaf)){var value=objectMatching[keyLeaf];if(escapeInterpolation&&!htmlMatched){return f.escape(objectMatching[keyLeaf])}else{return objectMatching[keyLeaf]}}else{return wholeMatch}}))}f.applyReplacement=applyReplacement;function applyReuse(translated,options){var comma=",";var options_open="{";var options_close="}";var opts=f.extend({},options);delete opts.postProcess;delete opts.isFallbackLookup;while(translated.indexOf(o.reusePrefix)!=-1){replacementCounter++;if(replacementCounter>o.maxRecursion){break}var index_of_opening=translated.lastIndexOf(o.reusePrefix);var index_of_end_of_closing=translated.indexOf(o.reuseSuffix,index_of_opening)+o.reuseSuffix.length;var token=translated.substring(index_of_opening,index_of_end_of_closing);var token_without_symbols=token.replace(o.reusePrefix,"").replace(o.reuseSuffix,"");if(index_of_end_of_closing<=index_of_opening){f.error("there is an missing closing in following translation value",translated);return""}if(token_without_symbols.indexOf(comma)!=-1){var index_of_token_end_of_closing=token_without_symbols.indexOf(comma);if(token_without_symbols.indexOf(options_open,index_of_token_end_of_closing)!=-1&&token_without_symbols.indexOf(options_close,index_of_token_end_of_closing)!=-1){var index_of_opts_opening=token_without_symbols.indexOf(options_open,index_of_token_end_of_closing);var index_of_opts_end_of_closing=token_without_symbols.indexOf(options_close,index_of_opts_opening)+options_close.length;try{opts=f.extend(opts,JSON.parse(token_without_symbols.substring(index_of_opts_opening,index_of_opts_end_of_closing)));token_without_symbols=token_without_symbols.substring(0,index_of_token_end_of_closing)}catch(e){}}}var translated_token=_translate(token_without_symbols,opts);translated=translated.replace(token,f.regexReplacementEscape(translated_token))}return translated}function hasContext(options){return options.context&&(typeof options.context=="string"||typeof options.context=="number")}function needsPlural(options,lng){return options.count!==undefined&&typeof options.count!="string"}function needsIndefiniteArticle(options){return options.indefinite_article!==undefined&&typeof options.indefinite_article!="string"&&options.indefinite_article}function exists(key,options){options=options||{};var notFound=_getDefaultValue(key,options),found=_find(key,options);return found!==undefined||found===notFound}function translate(key,options){if(!initialized){f.log("i18next not finished initialization. you might have called t function before loading resources finished.");if(options&&options.defaultValue){return options.detaultValue}else{return""}}replacementCounter=0;return _translate.apply(null,arguments)}function _getDefaultValue(key,options){return options.defaultValue!==undefined?options.defaultValue:key}function _injectSprintfProcessor(){var values=[];for(var i=1;i<arguments.length;i++){values.push(arguments[i])}return{postProcess:"sprintf",sprintf:values}}function _translate(potentialKeys,options){if(typeof options!=="undefined"&&typeof options!=="object"){if(o.shortcutFunction==="sprintf"){options=_injectSprintfProcessor.apply(null,arguments)}else if(o.shortcutFunction==="defaultValue"){options={defaultValue:options}}}else{options=options||{}}if(typeof o.defaultVariables==="object"){options=f.extend({},o.defaultVariables,options)}if(potentialKeys===undefined||potentialKeys===null||potentialKeys==="")return"";if(typeof potentialKeys==="number"){potentialKeys=String(potentialKeys)}if(typeof potentialKeys==="string"){potentialKeys=[potentialKeys]}var key=potentialKeys[0];if(potentialKeys.length>1){for(var i=0;i<potentialKeys.length;i++){key=potentialKeys[i];if(exists(key,options)){break}}}var notFound=_getDefaultValue(key,options),found=_find(key,options),nsseparator=options.nsseparator||o.nsseparator,lngs=options.lng?f.toLanguages(options.lng,options.fallbackLng):languages,ns=options.ns||o.ns.defaultNs,parts;if(key.indexOf(nsseparator)>-1){parts=key.split(nsseparator);ns=parts[0];key=parts[1]}if(found===undefined&&o.sendMissing&&typeof o.missingKeyHandler==="function"){if(options.lng){o.missingKeyHandler(lngs[0],ns,key,notFound,lngs)}else{o.missingKeyHandler(o.lng,ns,key,notFound,lngs)}}var postProcessorsToApply,postProcessor,j;if(typeof o.postProcess==="string"&&o.postProcess!==""){postProcessorsToApply=[o.postProcess]}else if(typeof o.postProcess==="array"||typeof o.postProcess==="object"){postProcessorsToApply=o.postProcess}else{postProcessorsToApply=[]}if(typeof options.postProcess==="string"&&options.postProcess!==""){postProcessorsToApply=postProcessorsToApply.concat([options.postProcess])}else if(typeof options.postProcess==="array"||typeof options.postProcess==="object"){postProcessorsToApply=postProcessorsToApply.concat(options.postProcess)}if(found!==undefined&&postProcessorsToApply.length){for(j=0;j<postProcessorsToApply.length;j+=1){postProcessor=postProcessorsToApply[j];if(postProcessors[postProcessor]){found=postProcessors[postProcessor](found,key,options)}}}var splitNotFound=notFound;if(notFound.indexOf(nsseparator)>-1){parts=notFound.split(nsseparator);splitNotFound=parts[1]}if(splitNotFound===key&&o.parseMissingKey){notFound=o.parseMissingKey(notFound)}if(found===undefined){notFound=applyReplacement(notFound,options);notFound=applyReuse(notFound,options);if(postProcessorsToApply.length){found=_getDefaultValue(key,options);for(j=0;j<postProcessorsToApply.length;j+=1){postProcessor=postProcessorsToApply[j];if(postProcessors[postProcessor]){found=postProcessors[postProcessor](found,key,options)}}}}return found!==undefined?found:notFound}function _find(key,options){options=options||{};var optionWithoutCount,translated,notFound=_getDefaultValue(key,options),lngs=languages;if(!resStore){return notFound}if(lngs[0].toLowerCase()==="cimode")return notFound;if(options.lngs)lngs=options.lngs;if(options.lng){lngs=f.toLanguages(options.lng,options.fallbackLng);if(!resStore[lngs[0]]){var oldAsync=o.getAsync;o.getAsync=false;i18n.sync.load(lngs,o,(function(err,store){f.extend(resStore,store);o.getAsync=oldAsync}))}}var ns=options.ns||o.ns.defaultNs;var nsseparator=options.nsseparator||o.nsseparator;if(key.indexOf(nsseparator)>-1){var parts=key.split(nsseparator);ns=parts[0];key=parts[1]}if(hasContext(options)){optionWithoutCount=f.extend({},options);delete optionWithoutCount.context;optionWithoutCount.defaultValue=o.contextNotFound;var contextKey=ns+nsseparator+key+"_"+options.context;translated=translate(contextKey,optionWithoutCount);if(translated!=o.contextNotFound){return applyReplacement(translated,{context:options.context})}}if(needsPlural(options,lngs[0])){optionWithoutCount=f.extend({lngs:[lngs[0]]},options);delete optionWithoutCount.count;optionWithoutCount._origLng=optionWithoutCount._origLng||optionWithoutCount.lng||lngs[0];delete optionWithoutCount.lng;optionWithoutCount.defaultValue=o.pluralNotFound;var pluralKey;if(!pluralExtensions.needsPlural(lngs[0],options.count)){pluralKey=ns+nsseparator+key}else{pluralKey=ns+nsseparator+key+o.pluralSuffix;var pluralExtension=pluralExtensions.get(lngs[0],options.count);if(pluralExtension>=0){pluralKey=pluralKey+"_"+pluralExtension}else if(pluralExtension===1){pluralKey=ns+nsseparator+key}}translated=translate(pluralKey,optionWithoutCount);if(translated!=o.pluralNotFound){return applyReplacement(translated,{count:options.count,interpolationPrefix:options.interpolationPrefix,interpolationSuffix:options.interpolationSuffix})}else if(lngs.length>1){var clone=lngs.slice();clone.shift();options=f.extend(options,{lngs:clone});options._origLng=optionWithoutCount._origLng;delete options.lng;translated=translate(ns+nsseparator+key,options);if(translated!=o.pluralNotFound)return translated}else{optionWithoutCount.lng=optionWithoutCount._origLng;delete optionWithoutCount._origLng;translated=translate(ns+nsseparator+key,optionWithoutCount);return applyReplacement(translated,{count:options.count,interpolationPrefix:options.interpolationPrefix,interpolationSuffix:options.interpolationSuffix})}}if(needsIndefiniteArticle(options)){var optionsWithoutIndef=f.extend({},options);delete optionsWithoutIndef.indefinite_article;optionsWithoutIndef.defaultValue=o.indefiniteNotFound;var indefiniteKey=ns+nsseparator+key+(options.count&&!needsPlural(options,lngs[0])||!options.count?o.indefiniteSuffix:"");translated=translate(indefiniteKey,optionsWithoutIndef);if(translated!=o.indefiniteNotFound){return translated}}var found;var keyseparator=options.keyseparator||o.keyseparator;var keys=key.split(keyseparator);for(var i=0,len=lngs.length;i<len;i++){if(found!==undefined)break;var l=lngs[i];var x=0;var value=resStore[l]&&resStore[l][ns];while(keys[x]){value=value&&value[keys[x]];x++}if(value!==undefined&&(!o.showKeyIfEmpty||value!=="")){var valueType=Object.prototype.toString.apply(value);if(typeof value==="string"){value=applyReplacement(value,options);value=applyReuse(value,options)}else if(valueType==="[object Array]"&&!o.returnObjectTrees&&!options.returnObjectTrees){value=value.join("\n");value=applyReplacement(value,options);value=applyReuse(value,options)}else if(value===null&&o.fallbackOnNull===true){value=undefined}else if(value!==null){if(!o.returnObjectTrees&&!options.returnObjectTrees){if(o.objectTreeKeyHandler&&typeof o.objectTreeKeyHandler=="function"){value=o.objectTreeKeyHandler(key,value,l,ns,options)}else{value="key '"+ns+":"+key+" ("+l+")' "+"returned an object instead of string.";f.log(value)}}else if(valueType!=="[object Number]"&&valueType!=="[object Function]"&&valueType!=="[object RegExp]"){var copy=valueType==="[object Array]"?[]:{};f.each(value,(function(m){copy[m]=_translate(ns+nsseparator+key+keyseparator+m,options)}));value=copy}}if(typeof value==="string"&&value.trim()===""&&o.fallbackOnEmpty===true)value=undefined;found=value}}if(found===undefined&&!options.isFallbackLookup&&(o.fallbackToDefaultNS===true||o.fallbackNS&&o.fallbackNS.length>0)){options.isFallbackLookup=true;if(o.fallbackNS.length){for(var y=0,lenY=o.fallbackNS.length;y<lenY;y++){found=_find(o.fallbackNS[y]+nsseparator+key,options);if(found||found===""&&o.fallbackOnEmpty===false){var foundValue=found.indexOf(nsseparator)>-1?found.split(nsseparator)[1]:found,notFoundValue=notFound.indexOf(nsseparator)>-1?notFound.split(nsseparator)[1]:notFound;if(foundValue!==notFoundValue)break}}}else{options.ns=o.ns.defaultNs;found=_find(key,options)}options.isFallbackLookup=false}return found}function detectLanguage(){var detectedLng;var whitelist=o.lngWhitelist||[];var userLngChoices=[];if(typeof window!=="undefined"){(function(){var query=window.location.search.substring(1);var params=query.split("&");for(var i=0;i<params.length;i++){var pos=params[i].indexOf("=");if(pos>0){var key=params[i].substring(0,pos);if(key==o.detectLngQS){userLngChoices.push(params[i].substring(pos+1))}}}})()}if(o.useCookie&&typeof document!=="undefined"){var c=f.cookie.read(o.cookieName);if(c)userLngChoices.push(c)}if(o.detectLngFromLocalStorage&&typeof window!=="undefined"&&window.localStorage){var lang=f.localStorage.getItem("i18next_lng");if(lang){userLngChoices.push(lang)}}if(typeof navigator!=="undefined"){if(navigator.languages){for(var i=0;i<navigator.languages.length;i++){userLngChoices.push(navigator.languages[i])}}if(navigator.userLanguage){userLngChoices.push(navigator.userLanguage)}if(navigator.language){userLngChoices.push(navigator.language)}}(function(){for(var i=0;i<userLngChoices.length;i++){var lng=userLngChoices[i];if(lng.indexOf("-")>-1){var parts=lng.split("-");lng=o.lowerCaseLng?parts[0].toLowerCase()+"-"+parts[1].toLowerCase():parts[0].toLowerCase()+"-"+parts[1].toUpperCase()}if(whitelist.length===0||whitelist.indexOf(lng)>-1){detectedLng=lng;break}}})();if(!detectedLng){detectedLng=o.fallbackLng[0]}return detectedLng}var _rules=[["ach","Acholi",[1,2],1],["af","Afrikaans",[1,2],2],["ak","Akan",[1,2],1],["am","Amharic",[1,2],1],["an","Aragonese",[1,2],2],["ar","Arabic",[0,1,2,3,11,100],5],["arn","Mapudungun",[1,2],1],["ast","Asturian",[1,2],2],["ay","Aymará",[1],3],["az","Azerbaijani",[1,2],2],["be","Belarusian",[1,2,5],4],["bg","Bulgarian",[1,2],2],["bn","Bengali",[1,2],2],["bo","Tibetan",[1],3],["br","Breton",[1,2],1],["bs","Bosnian",[1,2,5],4],["ca","Catalan",[1,2],2],["cgg","Chiga",[1],3],["cs","Czech",[1,2,5],6],["csb","Kashubian",[1,2,5],7],["cy","Welsh",[1,2,3,8],8],["da","Danish",[1,2],2],["de","German",[1,2],2],["dev","Development Fallback",[1,2],2],["dz","Dzongkha",[1],3],["el","Greek",[1,2],2],["en","English",[1,2],2],["eo","Esperanto",[1,2],2],["es","Spanish",[1,2],2],["es_ar","Argentinean Spanish",[1,2],2],["et","Estonian",[1,2],2],["eu","Basque",[1,2],2],["fa","Persian",[1],3],["fi","Finnish",[1,2],2],["fil","Filipino",[1,2],1],["fo","Faroese",[1,2],2],["fr","French",[1,2],9],["fur","Friulian",[1,2],2],["fy","Frisian",[1,2],2],["ga","Irish",[1,2,3,7,11],10],["gd","Scottish Gaelic",[1,2,3,20],11],["gl","Galician",[1,2],2],["gu","Gujarati",[1,2],2],["gun","Gun",[1,2],1],["ha","Hausa",[1,2],2],["he","Hebrew",[1,2],2],["hi","Hindi",[1,2],2],["hr","Croatian",[1,2,5],4],["hu","Hungarian",[1,2],2],["hy","Armenian",[1,2],2],["ia","Interlingua",[1,2],2],["id","Indonesian",[1],3],["is","Icelandic",[1,2],12],["it","Italian",[1,2],2],["ja","Japanese",[1],3],["jbo","Lojban",[1],3],["jv","Javanese",[0,1],13],["ka","Georgian",[1],3],["kk","Kazakh",[1],3],["km","Khmer",[1],3],["kn","Kannada",[1,2],2],["ko","Korean",[1],3],["ku","Kurdish",[1,2],2],["kw","Cornish",[1,2,3,4],14],["ky","Kyrgyz",[1],3],["lb","Letzeburgesch",[1,2],2],["ln","Lingala",[1,2],1],["lo","Lao",[1],3],["lt","Lithuanian",[1,2,10],15],["lv","Latvian",[1,2,0],16],["mai","Maithili",[1,2],2],["mfe","Mauritian Creole",[1,2],1],["mg","Malagasy",[1,2],1],["mi","Maori",[1,2],1],["mk","Macedonian",[1,2],17],["ml","Malayalam",[1,2],2],["mn","Mongolian",[1,2],2],["mnk","Mandinka",[0,1,2],18],["mr","Marathi",[1,2],2],["ms","Malay",[1],3],["mt","Maltese",[1,2,11,20],19],["nah","Nahuatl",[1,2],2],["nap","Neapolitan",[1,2],2],["nb","Norwegian Bokmal",[1,2],2],["ne","Nepali",[1,2],2],["nl","Dutch",[1,2],2],["nn","Norwegian Nynorsk",[1,2],2],["no","Norwegian",[1,2],2],["nso","Northern Sotho",[1,2],2],["oc","Occitan",[1,2],1],["or","Oriya",[2,1],2],["pa","Punjabi",[1,2],2],["pap","Papiamento",[1,2],2],["pl","Polish",[1,2,5],7],["pms","Piemontese",[1,2],2],["ps","Pashto",[1,2],2],["pt","Portuguese",[1,2],2],["pt_br","Brazilian Portuguese",[1,2],2],["rm","Romansh",[1,2],2],["ro","Romanian",[1,2,20],20],["ru","Russian",[1,2,5],4],["sah","Yakut",[1],3],["sco","Scots",[1,2],2],["se","Northern Sami",[1,2],2],["si","Sinhala",[1,2],2],["sk","Slovak",[1,2,5],6],["sl","Slovenian",[5,1,2,3],21],["so","Somali",[1,2],2],["son","Songhay",[1,2],2],["sq","Albanian",[1,2],2],["sr","Serbian",[1,2,5],4],["su","Sundanese",[1],3],["sv","Swedish",[1,2],2],["sw","Swahili",[1,2],2],["ta","Tamil",[1,2],2],["te","Telugu",[1,2],2],["tg","Tajik",[1,2],1],["th","Thai",[1],3],["ti","Tigrinya",[1,2],1],["tk","Turkmen",[1,2],2],["tr","Turkish",[1,2],1],["tt","Tatar",[1],3],["ug","Uyghur",[1],3],["uk","Ukrainian",[1,2,5],4],["ur","Urdu",[1,2],2],["uz","Uzbek",[1,2],1],["vi","Vietnamese",[1],3],["wa","Walloon",[1,2],1],["wo","Wolof",[1],3],["yo","Yoruba",[1,2],2],["zh","Chinese",[1],3]];var _rulesPluralsTypes={1:function(n){return Number(n>1)},2:function(n){return Number(n!=1)},3:function(n){return 0},4:function(n){return Number(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)},5:function(n){return Number(n===0?0:n==1?1:n==2?2:n%100>=3&&n%100<=10?3:n%100>=11?4:5)},6:function(n){return Number(n==1?0:n>=2&&n<=4?1:2)},7:function(n){return Number(n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)},8:function(n){return Number(n==1?0:n==2?1:n!=8&&n!=11?2:3)},9:function(n){return Number(n>=2)},10:function(n){return Number(n==1?0:n==2?1:n<7?2:n<11?3:4)},11:function(n){return Number(n==1||n==11?0:n==2||n==12?1:n>2&&n<20?2:3)},12:function(n){return Number(n%10!=1||n%100==11)},13:function(n){return Number(n!==0)},14:function(n){return Number(n==1?0:n==2?1:n==3?2:3)},15:function(n){return Number(n%10==1&&n%100!=11?0:n%10>=2&&(n%100<10||n%100>=20)?1:2)},16:function(n){return Number(n%10==1&&n%100!=11?0:n!==0?1:2)},17:function(n){return Number(n==1||n%10==1?0:1)},18:function(n){return Number(n==0?0:n==1?1:2)},19:function(n){return Number(n==1?0:n===0||n%100>1&&n%100<11?1:n%100>10&&n%100<20?2:3)},20:function(n){return Number(n==1?0:n===0||n%100>0&&n%100<20?1:2)},21:function(n){return Number(n%100==1?1:n%100==2?2:n%100==3||n%100==4?3:0)}};var pluralExtensions={rules:function(){var l,rules={};for(l=_rules.length;l--;){rules[_rules[l][0]]={name:_rules[l][1],numbers:_rules[l][2],plurals:_rulesPluralsTypes[_rules[l][3]]}}return rules}(),addRule:function(lng,obj){pluralExtensions.rules[lng]=obj},setCurrentLng:function(lng){if(!pluralExtensions.currentRule||pluralExtensions.currentRule.lng!==lng){var parts=lng.split("-");pluralExtensions.currentRule={lng:lng,rule:pluralExtensions.rules[parts[0]]}}},needsPlural:function(lng,count){var parts=lng.split("-");var ext;if(pluralExtensions.currentRule&&pluralExtensions.currentRule.lng===lng){ext=pluralExtensions.currentRule.rule}else{ext=pluralExtensions.rules[parts[f.getCountyIndexOfLng(lng)]]}if(ext&&ext.numbers.length<=1){return false}else{return this.get(lng,count)!==1}},get:function(lng,count){var parts=lng.split("-");function getResult(l,c){var ext;if(pluralExtensions.currentRule&&pluralExtensions.currentRule.lng===lng){ext=pluralExtensions.currentRule.rule}else{ext=pluralExtensions.rules[l]}if(ext){var i;if(ext.noAbs){i=ext.plurals(c)}else{i=ext.plurals(Math.abs(c))}var number=ext.numbers[i];if(ext.numbers.length===2&&ext.numbers[0]===1){if(number===2){number=-1}else if(number===1){number=1}}return number}else{return c===1?"1":"-1"}}return getResult(parts[f.getCountyIndexOfLng(lng)],count)}};var postProcessors={};var addPostProcessor=function(name,fc){postProcessors[name]=fc};var sprintf=function(){function get_type(variable){return Object.prototype.toString.call(variable).slice(8,-1).toLowerCase()}function str_repeat(input,multiplier){for(var output=[];multiplier>0;output[--multiplier]=input){}return output.join("")}var str_format=function(){if(!str_format.cache.hasOwnProperty(arguments[0])){str_format.cache[arguments[0]]=str_format.parse(arguments[0])}return str_format.format.call(null,str_format.cache[arguments[0]],arguments)};str_format.format=function(parse_tree,argv){var cursor=1,tree_length=parse_tree.length,node_type="",arg,output=[],i,k,match,pad,pad_character,pad_length;for(i=0;i<tree_length;i++){node_type=get_type(parse_tree[i]);if(node_type==="string"){output.push(parse_tree[i])}else if(node_type==="array"){match=parse_tree[i];if(match[2]){arg=argv[cursor];for(k=0;k<match[2].length;k++){if(!arg.hasOwnProperty(match[2][k])){throw sprintf('[sprintf] property "%s" does not exist',match[2][k])}arg=arg[match[2][k]]}}else if(match[1]){arg=argv[match[1]]}else{arg=argv[cursor++]}if(/[^s]/.test(match[8])&&get_type(arg)!="number"){throw sprintf("[sprintf] expecting number but found %s",get_type(arg))}switch(match[8]){case"b":arg=arg.toString(2);break;case"c":arg=String.fromCharCode(arg);break;case"d":arg=parseInt(arg,10);break;case"e":arg=match[7]?arg.toExponential(match[7]):arg.toExponential();break;case"f":arg=match[7]?parseFloat(arg).toFixed(match[7]):parseFloat(arg);break;case"o":arg=arg.toString(8);break;case"s":arg=(arg=String(arg))&&match[7]?arg.substring(0,match[7]):arg;break;case"u":arg=Math.abs(arg);break;case"x":arg=arg.toString(16);break;case"X":arg=arg.toString(16).toUpperCase();break}arg=/[def]/.test(match[8])&&match[3]&&arg>=0?"+"+arg:arg;pad_character=match[4]?match[4]=="0"?"0":match[4].charAt(1):" ";pad_length=match[6]-String(arg).length;pad=match[6]?str_repeat(pad_character,pad_length):"";output.push(match[5]?arg+pad:pad+arg)}}return output.join("")};str_format.cache={};str_format.parse=function(fmt){var _fmt=fmt,match=[],parse_tree=[],arg_names=0;while(_fmt){if((match=/^[^\x25]+/.exec(_fmt))!==null){parse_tree.push(match[0])}else if((match=/^\x25{2}/.exec(_fmt))!==null){parse_tree.push("%")}else if((match=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt))!==null){if(match[2]){arg_names|=1;var field_list=[],replacement_field=match[2],field_match=[];if((field_match=/^([a-z_][a-z_\d]*)/i.exec(replacement_field))!==null){field_list.push(field_match[1]);while((replacement_field=replacement_field.substring(field_match[0].length))!==""){if((field_match=/^\.([a-z_][a-z_\d]*)/i.exec(replacement_field))!==null){field_list.push(field_match[1])}else if((field_match=/^\[(\d+)\]/.exec(replacement_field))!==null){field_list.push(field_match[1])}else{throw"[sprintf] huh?"}}}else{throw"[sprintf] huh?"}match[2]=field_list}else{arg_names|=2}if(arg_names===3){throw"[sprintf] mixing positional and named placeholders is not (yet) supported"}parse_tree.push(match)}else{throw"[sprintf] huh?"}_fmt=_fmt.substring(match[0].length)}return parse_tree};return str_format}();var vsprintf=function(fmt,argv){argv.unshift(fmt);return sprintf.apply(null,argv)};addPostProcessor("sprintf",(function(val,key,opts){if(!opts.sprintf)return val;if(Object.prototype.toString.apply(opts.sprintf)==="[object Array]"){return vsprintf(val,opts.sprintf)}else if(typeof opts.sprintf==="object"){return sprintf(val,opts.sprintf)}return val}));i18n.init=init;i18n.isInitialized=isInitialized;i18n.setLng=setLng;i18n.preload=preload;i18n.addResourceBundle=addResourceBundle;i18n.hasResourceBundle=hasResourceBundle;i18n.getResourceBundle=getResourceBundle;i18n.addResource=addResource;i18n.addResources=addResources;i18n.removeResourceBundle=removeResourceBundle;i18n.loadNamespace=loadNamespace;i18n.loadNamespaces=loadNamespaces;i18n.setDefaultNamespace=setDefaultNamespace;i18n.t=translate;i18n.translate=translate;i18n.exists=exists;i18n.detectLanguage=f.detectLanguage;i18n.pluralExtensions=pluralExtensions;i18n.sync=sync;i18n.functions=f;i18n.lng=lng;i18n.dir=dir;i18n.addPostProcessor=addPostProcessor;i18n.applyReplacement=f.applyReplacement;i18n.options=o;i18n.noConflict=noConflict})(exports)}));var data$3={en:{opening_hours:{pretty:{off:"closed",SH:"school holidays",PH:"public holidays"}}},de:{opening_hours:{texts:{"unexpected token":'Unerwartetes Zeichen: "__token__" Das bedeutet, dass die Syntax an dieser Stelle nicht erkannt werden konnte.',"no string":"Der Wert (erster Parameter) ist kein String",nothing:"Der Wert enthält nichts, was ausgewertet werden könnte.","nothing useful":"Diese Regel enthält nichts nützliches. Bitte entferne diese leere Regel.","combine rules":'Getrennte Regeln erkannt welche jeweils nur aus einer Zeit Bereichsdefinition bestehen. Diese Regeln sollten mittels "__ok__" zu einer Regel kombiniert werden.',"value ends with token":'Der Wert endet mit "__token__". Bitte ergänze den Wert nach "__token__" oder lösche "__token__".',"programmers joke":"Kann es sein, dass du ein Programmierer bist und das Hinzufügen eines Semikolons nach jedem Statement ist zwanghaft ;) ? Es ist so, dass das Semikolon in der opening_hours-Syntax als Trenner für Regeln definiert ist. Bitte verzichte an dieser Stelle auf ein Semikolon.","interpreted as year":'Die Zahl __number__ wird als Jahr interpretiert. Vermutlich ist das nicht beabsichtigt. Uhrzeiten werden als "12:00" angegeben.',"rule before fallback empty":"Die Regel vor der Fallback-Regel enthält nichts nützliches","hour min separator":'Bitte benutze ":" als Stunden/Minuten-Trenner',"warnings severity":'Der Parameter optional_conf_parm["warnings_severity"] muss eine ganze Zahl zwischen (einschließlich) 0 und (einschließlich) 7 sein. Gegeben: __severity__, erwartet: Eine der Zahlen: __allowed__.',"optional conf parm type":"Der optional_conf_parm Parameter hat einen unbekannten Typ. Gegeben: __given__","conf param tag key missing":'Der optional_conf_parm["tag_key"] fehlt, ist aber notwendig wegen optional_conf_parm["map_value"].',"conf param mode invalid":'Der optional_conf_parm["mode"]-Parameter ist eine ungültige Zahl. Gegeben: __given__, erwartet: Eine der Zahlen: __allowed__.',"conf param unknown type":'Der optional_conf_parm["__key__"] Parameter hat einen unbekannten Typ. Gegeben: __given__, erwartet: __expected__.',"library bug":'Bei der Auswertung des Wertes "__value__" ist ein Fehler aufgetreten. Bitte melde diesen Fehler oder korrigiere diesen mittels eines Pull Requests oder Patches: __url__.__message__',"library bug PR only":'Bei der Auswertung des Wertes "__value__" ist ein Fehler aufgetreten. Du kannst dies korrigieren, indem du das Problem löst und in Form eines Pull Requests oder Patches zum Projekt beiträgst: __url__.__message__',"use multi":'Du hast __count__ __part2__ Einzelne Regeln können mit ";" getrennt werden.',"selector multi 2a":"__what__ in einer Regel benutzt. Du kannst nur einen davon je Regel verwenden","selector multi 2b":'nicht verbundene __what__ in einer Regel benutzt. Das ist vermutlich ein Fehler. Gleiche Selektoren können (und sollten) immer zusammen und durch Kommas getrennt geschrieben werden. Beispiel für Zeitspannen "12:00-13:00,15:00-18:00". Beispiel für Wochentage "Mo-We,Fr".',"selector state":"Status-Schlüsselwörter (offen, geschlossen)",comments:"Kommentare",months:"Monate",weekdays:"Wochentage",ranges:"Zeitspannen","default state":"Diese Regel, welche den Standard-Status (d.h. geschlossen) für alle folgenden Regeln ändert, ist nicht die erste Regel. Diese Regel überschreibt alle vorherigen Regeln. Es kann legitim sein, den Standard-Status z.B. auf geöffnet festzulegen und dann nur die Zeiten, zu denen geschlossen ist, anzugeben.",vague:'Diese Regel ist nicht sehr aussagekräftig, da kein Zeit Selektor angegeben wurde. Ein Zeit Selektor ist die Komponente die angibt, zu welcher Tageszeit ein Objekt geöffnet hat, zum Beispiel "10:00-19:00". Bitte füge eine Zeitangabe oder einen Kommentar hinzu, um dies zu verbessern.',"empty comment":'Du hast einen leeren Kommentar verwendet." Bitte schreibe entweder einen Kommentar-Text oder benutze stattdessen das Schlüsselwort "unknown".',separator_for_readability:"Du hast das optionale Symbol <separator_for_readability> an der falschen Stelle benutzt. Bitte lies die Syntax-Spezifikation um zu sehen, wo es verwendet werden kann, oder entferne es.","strange 24/7":'Du hast 24/7 in einer Art verwendet, welche wahrscheinlich nicht als "24 Stunden, 7 Tage die Woche" interpretiert wird. Der Richtigkeit halber solltest du "open" oder "closed" für diese Regel verwenden und dann die Ausnahmen angeben um das selbe Ziel zu erreichen. So ist es klarer – zum Beispiel "open; Mo 12:00-14:00 off".',"public holiday":'Es wurde keine Regel für "PH" (feiertags) angegeben. Dies ist nicht sehr aussagekräftig.__part2__ Bitte füge die Regel "PH off" an, wenn die Einrichtung an allen Feiertagen geschlossen ist oder schreibe "Sa,Su,PH 12:00-16:00" um auszudrücken, dass Samstags, Sonntags und feiertags von 12:00-16:00 geöffnet ist. Falls die Einrichtung täglich und an Feiertagen geöffnet ist, kann dies explizit mittels "Mo-Su,PH" ausgedrückt werden. Wenn du dir im Unklaren bist, versuche die Öffnungszeit zu klären. Falls das nicht möglich ist, lass die Angabe weg und ignoriere diese Warnung.',"public holiday part2":' Leider ist der "tag key" (beispielsweise "opening_hours", oder "lit") in opening_hours.js nicht bekannt. Diese Warnung betrifft nur die Keys: __keys__. Falls deine Angabe nicht für einen dieser ist, ignoriere bitte folgenden Hinweis:',"additional_rule_separator not used after time wrapping midnight":'Diese Regel überschreibt Teile der vorherigen Regel. Der Grund dafür ist, dass normale Regeln auf den ganzen Tag zutreffen und alle Definitionen von vorhergehenden Regeln für diesen Tag überschreiben. Du kannst diese Regel als additive Regel deklarieren indem du ein "," anstelle des üblichen ";" für diese Regel verwendest. Beachte das die Überschreibung auch gewünscht sein kann und in so einem Fall diese Warnung ignoriert werden kann.',"additional rule which evaluates to closed":'Diese Regel wird als geschlossen ausgewertet aber wurde als additive Regel angegeben. Sie sollte als normale Regel mittels ";" definiert sein. Siehe https://wiki.openstreetmap.org/wiki/DE:Key:opening_hours/specification#explain:rule_modifier:closed.',switched:'Der Selektor "__first__" wurde für eine bessere Lesbarkeit und der Vollständigkeit halber mit "__second__" getauscht.',"no colon after":'Bitte Benutze kein ":" nach dem Token __token__.',"number -5 to 5":"Zahl zwischen -5 und 5 (außer 0) erwartet.","one weekday constraint":"Du kannst höchstens einen beschränkten Wochentag in einer Monats-Spanne verwenden","range constrained weekdays":"Du kannst keine Wochentags-Spanne als Beschränkung in einer Monats-Spanne verwenden",expected:'"__symbol__" erwartet.',"range zero":'Du kannst keine __type__-Spanne mit Periode "0" verwenden.',"period one year+":'Bitte verwende keine __type__-Spannen mit Periode "1". Wenn du ausdrücken willst, das eine Einrichtung ab einem bestimmten Jahr immer offen ist, benutze bitte "<year>+".',"period one":'Bitte verwende keine __type__-Spannen mit Periode "1".',"month 31":"Die Tagesangabe für __month__ muss zwischen 1 und 31 liegen.","month 30":"Der Monat __month__ hat keine 31 Tage. Der letzte Tag von __month__ ist Tag 30.","month feb":'"Der Monat __month__ hat entweder 28 oder 29 Tage (Schaltjahre)."',"point in time":"Erwarte Bindestrich (-) oder offenes Ende (+) in der Zeitspanne __calc__. Um mit Zeitpunkten zu arbeiten, muss der Modus für __libraryname__ umgestellt werden. Vielleicht falsches OSM-tag verwendet?",calculation:"Berechnung","time range continue":"Die Zeitspanne geht nicht wie erwartet weiter","period continue":'Die Zeitspannen-Periode geht nicht wie erwartet weiter. Beispiel "/01:30".',"time range mode":'__libraryname__ wurde im "Zeitspannen-Modus" aufgerufen. Zeitpunkt gefunden.',"point in time mode":'__libraryname__ wurde im "Zeitpunkt-Modus" aufgerufen. Zeitspanne gefunden.',"outside current day":"Zeitspanne beginnt außerhalb des aktuellen Tages","two midnights":"Zeitspanne welche mehrmals Mitternacht beinhaltet wird nicht unterstützt","without minutes":'Zeitspanne ohne Minutenangabe angegeben. Das ist nicht sehr eindeutig! Bitte verwende stattdessen folgende Syntax "__syntax__".',"outside day":"Die Zeitspanne beginnt außerhalb des aktuellen Tages","zero calculation":'Das Hinzufügen von 0 in einer variablen Zeitberechnung ändert die variable Zeit nicht. Bitte entferne die Zeitberechnung (Beispiel: "sunrise-(sunset-00:00)").',"calculation syntax":"Berechnung mit variabler Zeit hat nicht die korrekte Syntax",missing:'Fehlendes "__symbol__"',"(time)":"(Zeit)","bad range":"Ungültige Zeitspanne: __from__-__to__","] or more numbers":'"]" oder weitere Zahlen erwartet.',"additional rule no sense":'Eine weitere Regel an dieser Stelle ergibt keinen Sinn. Benutze einfach ";" als Trenner für Regeln. Siehe https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator',"unexpected token weekday range":"Unerwartes Token in Tages-Spanne: __token__","max differ":"Es sollte keinen Grund geben, mehr als __maxdiffer__ Tage von einem __name__ abzuweichen. Wenn nötig, teile uns dies bitte mit …","adding 0":"Addition von 0 verändert das Datum nicht. Bitte weglassen.","unexpected token holiday":"Unerwarteter Token (in Feiertags-Auswertung): __token__","no holiday definition":"__name__ ist für das Land __cc__ nicht definiert.","no holiday definition state":"__name__ ist für das Land __cc__ und Bundesland __state__ nicht definiert.","no country code":"Der Ländercode fehlt. Dieser wird benötigt um die korrekten Feiertage zu bestimmen (siehe in der README wie dieser anzugeben ist)","no SH definition":"Die Schulferien __name__sind für das Jahr __year__ nicht definiert","movable no formula":"Der bewegliche Feiertag __name__ kann nicht berechnet werden. Bitte füge eine entsprechende Formel hinzu.","movable not in year":"Der bewegliche Feiertag __name__ plus __days__ Tage befindet sich nicht mehr im selben Jahr. Aktuell nicht unterstützt.","year range one year":'Eine Jahres-Spanne mit gleichem Jahr als Beginn und Ende ergibt keinen Sinn. Bitte entferne das Ende-Jahr. zum Beispiel: "__year__ May 23"',"year range reverse":"Eine Jahres-Spanne mit Beginn größer als Ende ergibt keinen Sinn. Bitte umdrehen.","year past":"Das Jahr liegt in der Vergangenheit.","unexpected token year range":"Unerwartetes Token in der Jahres-Spanne: __token__","week range reverse":"Du hast eine Wochen-Spanne in umgekehrter Reihenfolge oder mehrere Jahre umfassende angegeben. Dies ist aktuell nicht unterstützt.","week negative":"Du hast eine Kalenderwoche kleiner 1 angegeben. Korrekte Angaben sind 1-53.","week exceed":"Du hast eine Kalenderwoche größer als 53 angegeben. Korrekte Angaben sind 1-53.","week period less than 2":'Du hast eine Wochenperiode kleiner 2 angegeben. Wenn du die gesamte Spanne von __weekfrom__ bis __weekto__ angeben willst, lasse "/__period__" einfach weg.',"week period greater than 26":'Du hast eine Wochen-Periode größer als 26 angegeben. 26,5 ist die Hälfte des Maximums von 53 Wochen pro Jahr. Damit würde eine Periode größer als 26 nur einmal pro Jahr auftreten. Bitte gibt den Wochen-Selektor als "week __weekfrom__" an, wenn es das ist, was du ausdrücken möchtest.',"unexpected token week range":"Unerwartetes Token in Wochen-Spanne: __token__","unexpected token month range":"Unerwartetes Token in Monats-Spanne: __token__","day range reverse":"Zeitspanne in falscher Reihenfolge. Beginn ist größer als Ende.","open end":'Angegeben als "open end". Schließzeit wurde geraten.',"date parameter needed":"Datumsparameter nötig.","assuming ok for ko":'"__ko__" wird als "__ok__" interpretiert.',"please use ok for ko":'Bitte verwende "__ok__" anstelle von "__ko__".',"please use ok for similar looking ko":'Please use notation "__ok__" for "__ko__". Those characters look very similar but are not the same!',"rant degree sign used for zero":"Beachte das dies ein Gradzeichen ist, welches als (hochgestellte) Null missbraucht wurde. Eine hochgestellte Null ist in Unicode definiert (°) und wäre angebrachter/einheitlicher an dieser Stelle. Allerdings ist die Verwendung von nicht ASCII Ziffern nicht erlaubt.","please use English written ok for ko":'Bitte benutze die englische Schreibweise "__ok__" für "__ko__".',"please use English abbreviation ok for ko":'Bitte benutze die englische Abkürzung "__ok__" für "__ko__".',"please use English abbreviation ok for so":'Bitte benutze die englische Abkürzung "__ok__" für "__ko__". Beachte das Samstag in Polnisch gemeint sein kann.',"please use off for ko":'Bitte benutze "__ok__" für "__ko__". Beispiel: "Mo-Fr 08:00-12:00; Tu off".',"please use ok for workday":'"__ko__" wird als "__ok__" interpretiert. Werktag sollte nicht verwendet werden. Siehe https://wiki.openstreetmap.org/wiki/Talk:Key:opening_hours#need_syntax_for_holidays_and_workingdays',"omit hour keyword":'Bitte lasse "__ko__" weg oder verwende einen Doppelpunkt. Beispiel: "12:00-14:00".',"omit ko":'Bitte verzichte auf "__ko__".',"omit tag key":'Bitte lasse "__ko__" weg. Der Tag Schlüssel darf nicht im Tag Wert sein.',"omit wrong keyword open end":'Bitte lasse "__ko__" weg. Falls du "open end" ausdrücken möchtest verwende bitte ein "+". Beispiel: "12:00+".',"assuming open end for ko":'"__ko__" wird als "__ok__" ("open end") interpretiert. Example: "12:00+".',"please use ok for uncertainty":'Bitte verwende "__ok__" für "__ko__". Falls der begründete Verdacht der Ungewissheit vorliegt ziehe die Verwendung eines Kommentars in Betracht. Beispiel: 12:00-14:00 "only on sunshine".',"please use fallback rule":'Bitte verwende "__ok__" (Fallback Regel) für "__ko__". Beispiel: Mo-Fr 12:00-14:00; PH off || "nach Vereinbarung"',"please use ok for missing data":"Bitte verwende eine FIXME Notiz.","please use 24 hours time for ko":"Bitte verwende 24 Stunden Zeitangaben anstelle der veralteten 12 Stunden Variante. Falls die 12 Stunden Variante verwendet wird ist eventuelle eine Konvertierung notwendig.","please use restriction comment time for ko":'Es sieht so aus also möchtest du zusätzliche Einschränkungen für eine Öffnungszeit geben. Falls sich dies nicht mit der Syntax ausdrücken lässt können Kommentare verwendet werden. Zusätzlich sollte eventuell das Schlüsselwort `open` benutzt werden. Beispiel: open "Nur Frauen".',"please use ok for typographically correct":'Bitte verwende "__ok__" für "__ko__". Auch wenn "__ko__" typografisch korrekt ist, ist dies in der opening_hours Syntax nicht definiert. Korrekte Typographie sollte auf Anwendungsebene sichergestellt werden …'},pretty:{off:"geschlossen",SH:"Schulferien",PH:"Feiertags"}}},fr:{opening_hours:{texts:{"assuming ok for ko":'S\'il vous plaît utiliser "<ok>" pour "<ko>".',"please use ok for ko":'S\'il vous plaît utiliser "__ok__" pour "__ko__".',"please use English abbreviation ok for ko":'S\'il vous plaît utiliser l\'abréviation "__ok__" pour "__ko__".'}}},nl:{opening_hours:{texts:{"please use English abbreviation ok for ko":'Neem de engelse afkorting "__ok__" voor "__ko__" alstublieft.'}}}};if(!i18next.isInitialized()){i18next.init({fallbackLng:"en",resStore:data$3,getAsync:true,useCookie:true})}else{for(var lang in data$3){i18next.addResourceBundle(lang,"opening_hours",data$3[lang]["opening_hours"],true)}}function index(value,nominatim_object,optional_conf_parm){var word_value_replacement={dawn:60*5+30,sunrise:60*6,sunset:60*18,dusk:60*18+30};var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var weekdays=["Su","Mo","Tu","We","Th","Fr","Sa"];var string_to_token_map={su:[0,"weekday"],mo:[1,"weekday"],tu:[2,"weekday"],we:[3,"weekday"],th:[4,"weekday"],fr:[5,"weekday"],sa:[6,"weekday"],jan:[0,"month"],feb:[1,"month"],mar:[2,"month"],apr:[3,"month"],may:[4,"month"],jun:[5,"month"],jul:[6,"month"],aug:[7,"month"],sep:[8,"month"],oct:[9,"month"],nov:[10,"month"],dec:[11,"month"],day:["day","calcday"],days:["days","calcday"],sunrise:["sunrise","timevar"],sunset:["sunset","timevar"],dawn:["dawn","timevar"],dusk:["dusk","timevar"],easter:["easter","event"],week:["week","week"],open:["open","state"],closed:["closed","state"],off:["off","state"],unknown:["unknown","state"]};var default_prettify_conf={zero_pad_hour:true,one_zero_if_hour_zero:false,leave_off_closed:true,keyword_for_off_closed:"off",rule_sep_string:" ",print_semicolon:true,leave_weekday_sep_one_day_betw:true,sep_one_day_between:",",zero_pad_month_and_week_numbers:true,locale:"en"};var osm_tag_defaults={opening_hours:{mode:0,warn_for_PH_missing:true},collection_times:{mode:2},"opening_hours:.+":{mode:0},".+:opening_hours":{mode:0},".+:opening_hours:.+":{mode:0},smoking_hours:{mode:0},service_times:{mode:2},happy_hours:{mode:0},lit:{mode:0,map:{yes:'sunset-sunrise open "specified as yes: At night (unknown time schedule or daylight detection)"',automatic:'unknown "specified as automatic: When someone enters the way the lights are turned on."',no:'off "specified as no: There are no lights installed."',interval:'unknown "specified as interval"',limited:'unknown "specified as limited"'}}};var minutes_in_day=60*24;var msec_in_day=1e3*60*minutes_in_day;var library_name="opening_hours.js";var repository_url="https://github.com/opening-hours/"+library_name;var locale="en";if(typeof i18next==="object"){locale=i18next.lng()}var t=function(str,variables){if(typeof i18next==="object"&&typeof i18next.t==="function"&&typeof locale==="string"&&["de"].indexOf(locale)!==-1){var global_locale=i18next.lng();if(global_locale!==locale){i18next.setLng(locale)}var text=i18next.t("opening_hours:texts."+str,variables);if(global_locale!==locale){i18next.setLng(global_locale)}return text}var text=data$2[str];if(typeof text==="undefined"){text=str}return text.replace(/__([^_]*)__/g,(function(match,c){return typeof variables[c]!=="undefined"?variables[c]:match}))};var location_cc,location_state,lat,lon;if(typeof nominatim_object==="object"&&nominatim_object!==null){if(typeof nominatim_object.address==="object"){if(typeof nominatim_object.address.country_code==="string"){location_cc=nominatim_object.address.country_code}if(typeof nominatim_object.address.state==="string"){location_state=nominatim_object.address.state}else if(typeof nominatim_object.address.county==="string"){location_state=nominatim_object.address.county}}if(typeof nominatim_object.lon==="string"&&typeof nominatim_object.lat==="string"){lat=nominatim_object.lat;lon=nominatim_object.lon}}else if(nominatim_object===null){location_cc="de";location_state="Baden-Württemberg";lat="49.5400039";lon="9.7937133"}else if(typeof nominatim_object!=="undefined"){throw"The nominatim_object parameter is of unknown type."+" Given "+typeof nominatim_object+", expected object."}var warnings_severity=4;var oh_mode;var oh_map_value=false;var oh_key,oh_regex_key;if(typeof optional_conf_parm==="number"){oh_mode=optional_conf_parm}else if(typeof optional_conf_parm==="object"){locale=optional_conf_parm["locale"];if(checkOptionalConfParm("mode","number")){oh_mode=optional_conf_parm["mode"]}if(checkOptionalConfParm("warnings_severity","number")){warnings_severity=optional_conf_parm["warnings_severity"];if([0,1,2,3,4,5,6,7].indexOf(warnings_severity)===-1){throw t("warnings severity",{severity:warnings_severity,allowed:"[ 0, 1, 2, 3, 4, 5, 6, 7 ]"})}}if(checkOptionalConfParm("tag_key","string")){oh_key=optional_conf_parm["tag_key"]}if(checkOptionalConfParm("map_value","boolean")){oh_map_value=optional_conf_parm.map_value}}else if(typeof optional_conf_parm!=="undefined"){throw t("optional conf parm type",{given:typeof optional_conf_parm})}if(typeof oh_key==="string"){oh_regex_key=getRegexKeyForKeyFromOsmDefaults(oh_key);if(oh_map_value&&typeof osm_tag_defaults[oh_regex_key]==="object"&&typeof osm_tag_defaults[oh_regex_key]["map"]==="object"&&typeof osm_tag_defaults[oh_regex_key]["map"][value]==="string"){value=osm_tag_defaults[oh_regex_key]["map"][value]}}else if(oh_map_value){throw t("conf param tag key missing")}if(typeof oh_mode==="undefined"){if(typeof oh_key==="string"){if(typeof osm_tag_defaults[oh_regex_key]["mode"]==="number"){oh_mode=osm_tag_defaults[oh_regex_key]["mode"]}else{oh_mode=0}}else{oh_mode=0}}else if([0,1,2].indexOf(oh_mode)===-1){throw t("conf param mode invalid",{given:oh_mode,allowed:"[ 0, 1, 2 ]"})}if(typeof value!=="string"){throw t("no string")}if(/^(?:\s*;?)+$/.test(value)){throw t("nothing")}var parsing_warnings=[];var done_with_warnings=false;var done_with_selector_reordering=false;var done_with_selector_reordering_warnings=false;var tokens=tokenize(value);var prettified_value="";var week_stable=true;var rules=[];var rule_infos={};var new_tokens=[];for(var nrule=0;nrule<tokens.length;nrule++){if(tokens[nrule][0].length===0){parsing_warnings.push([nrule,-1,t("nothing useful")+(nrule===tokens.length-1&&nrule>0&&!tokens[nrule][1]?" "+t("programmers joke"):"")]);continue}var continue_at=0;var next_rule_is_additional=false;do{if(continue_at===tokens[nrule][0].length){break}var rule={time:[],wraptime:[],weekday:[],holiday:[],week:[],month:[],monthday:[],year:[],date:[],fallback:tokens[nrule][1],additional:continue_at?true:false,meaning:true,unknown:false,comment:undefined,build_from_token_rule:undefined};rule.build_from_token_rule=[nrule,continue_at,new_tokens.length];continue_at=parseGroup(tokens[nrule][0],continue_at,rule,nrule);if(typeof continue_at==="object"){continue_at=continue_at[0]}else{continue_at=0}new_tokens.push([tokens[nrule][0].slice(rule.build_from_token_rule[1],continue_at===0?tokens[nrule][0].length:continue_at),tokens[nrule][1],tokens[nrule][2]]);if(next_rule_is_additional&&new_tokens.length>1){new_tokens[new_tokens.length-1][0].unshift(new_tokens[new_tokens.length-2][0].pop())}next_rule_is_additional=continue_at===0?false:true;var optimal_selector_order=["year","holiday","month","monthday","week","weekday"];optimal_selector_order.forEach((function(element){if(rule[element].length>0){rule.date.push(rule[element]);rule[element]=[]}}));rules.push(rule);if(rule.wraptime.length>0){var wrapselectors={time:rule.wraptime,date:[],meaning:rule.meaning,unknown:rule.unknown,comment:rule.comment,wrapped:true,build_from_token_rule:rule.build_from_token_rule};for(var dselg=0;dselg<rule.date.length;dselg++){wrapselectors.date.push([]);for(var dsel=0;dsel<rule.date[dselg].length;dsel++){wrapselectors.date[wrapselectors.date.length-1].push(generateDateShifter(rule.date[dselg][dsel],-msec_in_day))}}rules.push(wrapselectors)}}while(continue_at)}function getRegexKeyForKeyFromOsmDefaults(key){var regex_key;var exact_match=false;Object.keys(osm_tag_defaults).forEach((function(osm_key){if(exact_match===true){return}if(key===osm_key){regex_key=osm_key;exact_match=true}else if(new RegExp(osm_key).test(key)){regex_key=osm_key}}));return regex_key}function checkOptionalConfParm(key,expected_type){if(typeof optional_conf_parm[key]===expected_type){return true}else if(typeof optional_conf_parm[key]!=="undefined"){throw t("conf param unknown type",{key:key,given:typeof optional_conf_parm[key],expected:expected_type})}return false}function formatWarnErrorMessage(nrule,at,message,tokens_to_use){if(typeof tokens_to_use==="undefined"){tokens_to_use=tokens}if(typeof nrule==="number"){var pos=0;if(nrule===-1){pos=value.length-at}else{if(typeof tokens_to_use[nrule][0][at]==="undefined"){if(typeof tokens_to_use[nrule][0]&&at===-1){pos=value.length;if(typeof tokens_to_use[nrule+1]==="object"&&typeof tokens_to_use[nrule+1][2]==="number"){pos-=tokens_to_use[nrule+1][2]}else if(typeof tokens_to_use[nrule][2]==="number"){pos-=tokens_to_use[nrule][2]}}else{formatLibraryBugMessage("Bug in warning generation code which could not determine the exact position of the warning or error in value.");pos=value.length;if(typeof tokens_to_use[nrule][2]==="number"){pos-=tokens_to_use[nrule][2];console.warn("Last token for rule: "+JSON.stringify(tokens_to_use[nrule]));console.log(value.substring(0,pos)+" <--- ("+message+")");console.log("\n")}{console.warn("tokens_to_use[nrule][2] is undefined. This is ok if nrule is the last rule.")}}}else{pos=value.length;if(typeof tokens_to_use[nrule][0][at+1]==="object"){pos-=tokens_to_use[nrule][0][at+1][2]}else if(typeof tokens_to_use[nrule][2]==="number"){pos-=tokens_to_use[nrule][2]}}}return value.substring(0,pos)+" <--- ("+message+")"}else if(typeof nrule==="string"){return nrule.substring(0,at)+" <--- ("+message+")"}}function formatLibraryBugMessage(message,text_template){if(typeof message==="undefined"){message=""}else{message=" "+message}if(typeof text_template!=="string"){text_template="library bug"}message=t(text_template,{value:value,url:repository_url,message:message});console.error(message);return message}function tokenize(value){var all_tokens=[];var curr_rule_tokens=[];var last_rule_fallback_terminated=false;while(value!==""){var tmp=value.match(/^([a-z]{2,})\b((?:[.]| before| after)?)/i);var token_from_map=undefined;if(tmp&&tmp[2]===""){token_from_map=string_to_token_map[tmp[1].toLowerCase()]}if(typeof token_from_map==="object"){curr_rule_tokens.push(token_from_map.concat([value.length]));value=value.substr(tmp[1].length)}else if(tmp=value.match(/^\s+/)){value=value.substr(tmp[0].length)}else if(tmp=value.match(/^24\/7/)){curr_rule_tokens.push([tmp[0],tmp[0],value.length]);value=value.substr(tmp[0].length)}else if(/^;/.test(value)){all_tokens.push([curr_rule_tokens,last_rule_fallback_terminated,value.length]);value=value.substr(1);curr_rule_tokens=[];last_rule_fallback_terminated=false}else if(/^[:.]/.test(value)){if(value[0]==="."&&!done_with_warnings){parsing_warnings.push([-1,value.length-1,t("hour min separator")])}curr_rule_tokens.push([":","timesep",value.length]);value=value.substr(1)}else if(tmp=value.match(/^(?:PH|SH)/i)){curr_rule_tokens.push([tmp[0].toUpperCase(),"holiday",value.length]);value=value.substr(2)}else if(tmp=value.match(/^[°\u2070-\u209F\u00B2\u00B3\u00B9]{1,2}/)){var unicode_code_point_to_digit={176:0,8304:0,185:1,178:2,179:3};var regular_number=tmp[0].split("").map((function(ch){var code_point=ch.charCodeAt(0);if(typeof unicode_code_point_to_digit[code_point]==="number"){return unicode_code_point_to_digit[code_point]}else if(8308<=code_point&&code_point<=8313){return code_point-8304}else if(8320<=code_point&&code_point<=8329){return code_point-8320}})).join("");var ok="";if(curr_rule_tokens.length>0&&matchTokens(curr_rule_tokens,curr_rule_tokens.length-1,"number")){ok+=":"}ok+=regular_number;if(!done_with_warnings){for(var i=0;i<=tmp[0].length;i++){if(value.charCodeAt(i)===176){parsing_warnings.push([-1,value.length-(1+i),t("rant degree sign used for zero")])}}parsing_warnings.push([-1,value.length-tmp[0].length,t("please use ok for ko",{ko:tmp[0],ok:ok})])}value=ok+value.substr(tmp[0].length)}else if(tmp=value.match(/^(&|_|→|–|−|—|ー|=|·|öffnungszeit(?:en)?:?|opening_hours\s*=|\?|~|~|:|always (?:open|closed)|24x7|24 hours 7 days a week|24 hours|7 ?days(?:(?: a |\/)week)?|7j?\/7|all days?|every day|(?:bis|till?|-|–)? ?(?:open ?end|late)|(?:(?:one )?day (?:before|after) )?(?:school|public) holidays?|days?\b|до|рм|ам|jours fériés|on work days?|sonntags?|(?:nur |an )?sonn-?(?:(?: und |\/)feiertag(?:s|en?)?)?|(?:an )?feiertag(?:s|en?)?|(?:nach|on|by) (?:appointments?|vereinbarung|absprache)|p\.m\.|a\.m\.|[_a-zäößàáéøčěíúýřПнВсо]+\b|à|á|mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)(\.?)/i)){var correct_val=returnCorrectWordOrToken(tmp[1].toLowerCase(),value.length);if(typeof correct_val==="object"){curr_rule_tokens.push([correct_val[0],correct_val[1],value.length]);value=value.substr(tmp[0].length)}else if(typeof correct_val==="string"){if(correct_val==="am"||correct_val==="pm"){var hours_token_at=curr_rule_tokens.length-1;var hours_token;if(hours_token_at>=0){if(hours_token_at-2>=0&&matchTokens(curr_rule_tokens,hours_token_at-2,"number","timesep","number")){hours_token_at-=2;hours_token=curr_rule_tokens[hours_token_at]}else if(matchTokens(curr_rule_tokens,hours_token_at,"number")){hours_token=curr_rule_tokens[hours_token_at]}if(typeof hours_token==="object"){if(correct_val==="pm"&&hours_token[0]<12){hours_token[0]+=12}if(correct_val==="am"&&hours_token[0]===12){hours_token[0]=0}curr_rule_tokens[hours_token_at]=hours_token}}correct_val=""}var correct_tokens=tokenize(correct_val)[0];if(correct_tokens[1]===true){throw formatLibraryBugMessage()}for(var i=0;i<correct_tokens[0].length;i++){curr_rule_tokens.push([correct_tokens[0][i][0],correct_tokens[0][i][1],value.length])}value=value.substr(tmp[0].length)}else{curr_rule_tokens.push([value[0].toLowerCase(),value[0].toLowerCase(),value.length-1]);value=value.substr(1)}if(typeof tmp[2]==="string"&&tmp[2]!==""&&!done_with_warnings){parsing_warnings.push([-1,value.length,t("omit ko",{ko:tmp[2]})])}}else if(tmp=value.match(/^(\d+)(?:([.])([^\d]))?/)){if(Number(tmp[1])>1900){curr_rule_tokens.push([Number(tmp[1]),"year",value.length]);if(Number(tmp[1])>=2100)parsing_warnings.push([-1,value.length-1,t("interpreted as year",{number:Number(tmp[1])})])}else{curr_rule_tokens.push([Number(tmp[1]),"number",value.length])}value=value.substr(tmp[1].length+(typeof tmp[2]==="string"?tmp[2].length:0));if(typeof tmp[2]==="string"&&tmp[2]!==""&&!done_with_warnings){parsing_warnings.push([-1,value.length,t("omit ko",{ko:tmp[2]})])}}else if(/^\|\|/.test(value)){if(curr_rule_tokens.length===0){throw formatWarnErrorMessage(-1,value.length-2,t("rule before fallback empty"))}all_tokens.push([curr_rule_tokens,last_rule_fallback_terminated,value.length]);curr_rule_tokens=[];value=value.substr(2);last_rule_fallback_terminated=true}else if(tmp=value.match(/^"([^"]+)"/)){curr_rule_tokens.push([tmp[1],"comment",value.length]);value=value.substr(tmp[0].length)}else if(tmp=value.match(/^(["'„“‚‘’«「『])([^"'“”‘’»」』;|]*)(["'”“‘’»」』])/)){for(var pos=1;pos<=3;pos+=2){var correct_val=returnCorrectWordOrToken(tmp[pos],value.length-(pos===3?tmp[1].length+tmp[2].length:0));if(typeof correct_val!=="string"&&tmp[pos]!=='"'){throw formatLibraryBugMessage("A character for error tolerance was allowed in the regular expression"+" but is not covered by word_error_correction"+" which is needed to format a proper message for the user.")}}curr_rule_tokens.push([tmp[2],"comment",value.length]);value=value.substr(tmp[0].length)}else if(/^(?:␣|\s)/.test(value)){value=value.substr(1)}else{curr_rule_tokens.push([value[0].toLowerCase(),value[0].toLowerCase(),value.length]);value=value.substr(1)}}all_tokens.push([curr_rule_tokens,last_rule_fallback_terminated]);return all_tokens}function returnCorrectWordOrToken(word,value_length){var correctWordOrToken;var token_from_map=string_to_token_map[word];if(typeof token_from_map==="object"){return token_from_map}Object.keys(data$1).forEach((function(comment){if(correctWordOrToken){return}Object.keys(data$1[comment]).forEach((function(old_val){if(correctWordOrToken){return}if(new RegExp("^"+old_val+"$").test(word)){var val=data$1[comment][old_val];if(!done_with_warnings){parsing_warnings.push([-1,value_length-word.length,t(comment,{ko:word,ok:val})])}correctWordOrToken=val}}))}));return correctWordOrToken}function getWarnings(it){if(warnings_severity<4){return[]}if(!done_with_warnings&&typeof it==="object"){var wide_range_selector_order=["year","month","week","holiday"];var small_range_selector_order=["weekday","time","24/7","state","comment"];var used_selectors=[];var used_selectors_types_array=[];var has_token={};for(var nrule=0;nrule<new_tokens.length;nrule++){if(new_tokens[nrule][0].length===0)continue;var selector_start_end_type=[0,0,undefined];used_selectors[nrule]={};used_selectors_types_array[nrule]=[];do{selector_start_end_type=getSelectorRange(new_tokens[nrule][0],selector_start_end_type[1]);for(var token_pos=0;token_pos<=selector_start_end_type[1];token_pos++){if(typeof new_tokens[nrule][0][token_pos]==="object"&&new_tokens[nrule][0][token_pos][0]==="PH"){has_token["PH"]=true}}if(selector_start_end_type[0]===selector_start_end_type[1]&&new_tokens[nrule][0][selector_start_end_type[0]][0]==="24/7"){has_token["24/7"]=true}if(typeof used_selectors[nrule][selector_start_end_type[2]]!=="object"){used_selectors[nrule][selector_start_end_type[2]]=[selector_start_end_type[1]]}else{used_selectors[nrule][selector_start_end_type[2]].push(selector_start_end_type[1])}used_selectors_types_array[nrule].push(selector_start_end_type[2]);selector_start_end_type[1]++}while(selector_start_end_type[1]<new_tokens[nrule][0].length)}for(var nrule=0;nrule<used_selectors.length;nrule++){Object.keys(used_selectors[nrule]).forEach((function(selector_type){if(used_selectors[nrule][selector_type].length>1){parsing_warnings.push([nrule,used_selectors[nrule][selector_type][used_selectors[nrule][selector_type].length-1],t("use multi",{count:used_selectors[nrule][selector_type].length,part2:/^(?:comment|state)/.test(selector_type)?t("selector multi 2a",{what:selector_type==="state"?t("selector state"):t("comments")}):t("selector multi 2b",{what:t(selector_type+(/^(?:month|weekday)$/.test(selector_type)?"s":" ranges"))})})]);done_with_selector_reordering=true}}));if(typeof used_selectors[nrule].state==="object"&&Object.keys(used_selectors[nrule]).length===1){if(nrule!==0){parsing_warnings.push([nrule,new_tokens[nrule][0].length-1,t("default state")])}}else if(typeof used_selectors[nrule].time==="undefined"){if(typeof used_selectors[nrule].state==="object"&&new_tokens[nrule][0][used_selectors[nrule].state[0]][0]==="open"&&typeof used_selectors[nrule].comment==="undefined"||typeof used_selectors[nrule].comment==="undefined"&&typeof used_selectors[nrule].state==="undefined"&&typeof used_selectors[nrule]["24/7"]==="undefined"){parsing_warnings.push([nrule,new_tokens[nrule][0].length-1,t("vague")])}}if(typeof used_selectors[nrule].comment==="object"&&new_tokens[nrule][0][used_selectors[nrule].comment[0]][0].length===0){parsing_warnings.push([nrule,used_selectors[nrule].comment[0],t("empty comment")])}for(var i=0;i<used_selectors_types_array[nrule].length-1;i++){var selector_type=used_selectors_types_array[nrule][i];var next_selector_type=used_selectors_types_array[nrule][i+1];if(wide_range_selector_order.indexOf(selector_type)!==-1&&wide_range_selector_order.indexOf(next_selector_type)!==-1||small_range_selector_order.indexOf(selector_type)!==-1&&small_range_selector_order.indexOf(next_selector_type)!==-1){if(new_tokens[nrule][0][used_selectors[nrule][selector_type][0]][0]===":"){parsing_warnings.push([nrule,used_selectors[nrule][selector_type][0],t("separator_for_readability")])}}}if(typeof rule_infos[nrule]==="object"&&typeof rule_infos[nrule]["time_wraps_over_midnight"]==="boolean"&&rule_infos[nrule]["time_wraps_over_midnight"]===true&&typeof used_selectors[nrule+1]==="object"&&typeof used_selectors[nrule+1]["rule separator"]==="undefined"&&new_tokens[nrule+1][1]===false){var rules_too_complex=[nrule,nrule+1].map((function(nrule){for(var i=0;i<wide_range_selector_order.length-1;i++){if(typeof used_selectors[nrule][wide_range_selector_order[i]]==="object"){return true}}return false}));var rules_too_complex_count=rules_too_complex.filter((function(el){return el})).length;var next_rule_selects_next_day=false;if(typeof rule_infos[nrule]==="object"&&typeof rule_infos[nrule]==="object"&&typeof rule_infos[nrule]["week_days"]==="object"&&typeof rule_infos[nrule+1]==="object"&&typeof rule_infos[nrule+1]["week_days"]==="object"){for(var i=0;i<rule_infos[nrule]["week_days"].length;i++){var week_day=rule_infos[nrule]["week_days"][i];if(rule_infos[nrule+1]["week_days"].indexOf(week_day===6?0:week_day+1)!==-1){next_rule_selects_next_day=true;break}}}else{next_rule_selects_next_day=true}var additional_rule_separator_enabled=(optional_conf_parm||{}).additional_rule_separator!==false;if(rules_too_complex_count<2&&next_rule_selects_next_day&&additional_rule_separator_enabled){parsing_warnings.push([nrule+1,new_tokens[nrule+1][0].length-1,t("additional_rule_separator not used after time wrapping midnight"),new_tokens])}}if(typeof new_tokens[nrule][0][0]==="object"&&new_tokens[nrule][0][0][0]===","&&new_tokens[nrule][0][0][1]==="rule separator"&&typeof used_selectors[nrule].state==="object"&&(new_tokens[nrule][0][used_selectors[nrule].state[0]][0]==="closed"||new_tokens[nrule][0][used_selectors[nrule].state[0]][0]==="off")){parsing_warnings.push([nrule,new_tokens[nrule][0].length-1,t("additional rule which evaluates to closed"),new_tokens])}}var has_advanced=it.advance();if(has_advanced===true&&has_token["24/7"]&&!done_with_warnings){parsing_warnings.push([-1,0,t("strange 24/7")])}if(warnings_severity>=5&&!has_token["PH"]&&!has_token["24/7"]&&!done_with_warnings&&(typeof oh_key==="string"&&osm_tag_defaults[oh_regex_key]["warn_for_PH_missing"]||typeof oh_key!=="string")){var keys_with_warn_for_PH_missing=[];Object.keys(osm_tag_defaults).forEach((function(key){if(osm_tag_defaults[key]["warn_for_PH_missing"]){keys_with_warn_for_PH_missing.push(key)}}));parsing_warnings.push([-1,0,t("public holiday",{part2:typeof oh_key!=="string"?t("public holiday part2",{keys:keys_with_warn_for_PH_missing.join(", ")}):""})])}if(used_selectors_types_array.length>1&&used_selectors_types_array.filter((function(el){return el.length===1&&el[0]==="time"})).length===used_selectors_types_array.length){parsing_warnings.push([-1,0,t("combine rules",{ok:","})])}prettifyValue()}done_with_warnings=true;var warnings=[];for(var i=0;i<parsing_warnings.length;i++){warnings.push(formatWarnErrorMessage(parsing_warnings[i][0],parsing_warnings[i][1],parsing_warnings[i][2],parsing_warnings[i][3]))}return warnings}function tokenIsTheBeginOfSelector(tokens,at){if(typeof tokens[at][3]==="string"){return 3}else if(tokens[at][1]==="comment"||tokens[at][1]==="state"||tokens[at][1]==="24/7"||tokens[at][1]==="rule separator"){return 1}else{return false}}function getSelectorRange(tokens,at){var selector_start=at,selector_end,pos_in_token_array;for(;selector_start>=0;selector_start--){pos_in_token_array=tokenIsTheBeginOfSelector(tokens,selector_start);if(pos_in_token_array)break}selector_end=selector_start;if(pos_in_token_array===1){if(selector_end+1<tokens.length&&tokens[selector_end+1][0]===":")selector_end++;return[selector_start,selector_end,tokens[selector_start][pos_in_token_array]]}for(selector_end++;selector_end<tokens.length;selector_end++){if(tokenIsTheBeginOfSelector(tokens,selector_end))return[selector_start,selector_end-1,tokens[selector_start][pos_in_token_array]]}return[selector_start,selector_end-1,tokens[selector_start][pos_in_token_array]]}function prettifyValue(argument_hash){var user_conf={};var get_internals=false;var rule_index;prettified_value="";var prettified_value_array=[];if(typeof argument_hash==="object"){if(typeof argument_hash.conf==="object"){user_conf=argument_hash.conf}if(typeof argument_hash.rule_index==="number"){rule_index=argument_hash.rule_index}if(argument_hash.get_internals===true){get_internals=true}}Object.keys(default_prettify_conf).forEach((function(key){if(typeof user_conf[key]==="undefined"){user_conf[key]=default_prettify_conf[key]}}));var _is_en_or_all=user_conf["locale"]==="en"||user_conf["locale"]==="all";var months_local=_is_en_or_all?months:[1,2,3,4,5,6,7,8,9,10,11,12].map((function(month){return new Date(2018,month-1,1).toLocaleString(user_conf["locale"],{month:"short"})}));var weekdays_local=_is_en_or_all?weekdays:[1,2,3,4,5,6,7].map((function(weekday){return new Date(2017,0,weekday).toLocaleString(user_conf["locale"],{weekday:"short"})}));for(var nrule=0;nrule<new_tokens.length;nrule++){if(new_tokens[nrule][0].length===0)continue;if(typeof rule_index==="number"){if(rule_index!==nrule)continue}else{if(nrule!==0)prettified_value+=new_tokens[nrule][1]?user_conf.rule_sep_string+"|| ":(new_tokens[nrule][0][0][1]==="rule separator"?",":user_conf.print_semicolon?";":"")+user_conf.rule_sep_string}var selector_start_end_type=[0,0,undefined];var prettified_group_value=[];var count=0;do{selector_start_end_type=getSelectorRange(new_tokens[nrule][0],selector_start_end_type[1]);if(count>50){throw formatLibraryBugMessage("Infinite loop.")}if(selector_start_end_type[2]!=="rule separator"){prettified_group_value.push([selector_start_end_type,prettifySelector(new_tokens[nrule][0],selector_start_end_type[0],selector_start_end_type[1],selector_start_end_type[2],user_conf)])}selector_start_end_type[1]++;count++}while(selector_start_end_type[1]<new_tokens[nrule][0].length);var not_sorted_prettified_group_value=prettified_group_value.slice();if(!done_with_selector_reordering){prettified_group_value.sort((function(a,b){var selector_order=["year","month","week","holiday","weekday","time","24/7","state","comment"];return selector_order.indexOf(a[0][2])-selector_order.indexOf(b[0][2])}))}var old_prettified_value_length=prettified_value.length;if(typeof user_conf["locale"]==="string"&&user_conf["locale"]!=="en"){var global_locale=i18next.lng();if(global_locale!==user_conf["locale"]){i18next.setLng(user_conf["locale"])}for(var i=0;i<prettified_group_value.length;i++){var type=prettified_group_value[i][0][2];if(type==="weekday"){weekdays.forEach((function(weekday,key){prettified_group_value[i][1]=prettified_group_value[i][1].replace(new RegExp(weekday,"g"),weekdays_local[key])}))}else if(type==="month"){months.forEach((function(month,key){prettified_group_value[i][1]=prettified_group_value[i][1].replace(new RegExp(month,"g"),months_local[key])}))}else{prettified_group_value[i][1]=i18next.t(["opening_hours:pretty."+prettified_group_value[i][1],prettified_group_value[i][1]])}}if(global_locale!==locale){i18next.setLng(global_locale)}}prettified_value+=prettified_group_value.map((function(array){return array[1]})).join(" ");prettified_value_array.push(prettified_group_value);if(!done_with_selector_reordering_warnings){for(var i=0,l=not_sorted_prettified_group_value.length;i<l;i++){if(not_sorted_prettified_group_value[i]!==prettified_group_value[i]){var length=i+old_prettified_value_length;for(var x=0;x<=i;x++){length+=prettified_group_value[x][1].length}parsing_warnings.push([prettified_value,length,t("switched",{first:prettified_group_value[i][0][2],second:not_sorted_prettified_group_value[i][0][2]})])}}}}done_with_selector_reordering_warnings=true;if(get_internals){return[prettified_value_array,new_tokens]}else{return prettified_value}}function matchTokens(tokens,at){if(at+arguments.length-2>tokens.length)return false;for(var i=0;i<arguments.length-2;i++){if(tokens[at+i][1]!==arguments[i+2]){return false}}return true}function generateDateShifter(func,shift){return function(date){var res=func(new Date(date.getTime()+shift));if(typeof res[1]==="undefined")return res;return[res[0],new Date(res[1].getTime()-shift)]}}function parseGroup(tokens,at,rule,nrule){var rule_modifier_specified=false;var last_selector=[];while(at<tokens.length){if(matchTokens(tokens,at,"weekday")){at=parseWeekdayRange(tokens,at,rule,undefined,nrule)}else if(matchTokens(tokens,at,"24/7")){rule.time.push((function(){return[true]}));at++}else if(matchTokens(tokens,at,"holiday")){if(matchTokens(tokens,at+1,",")){at=parseHoliday(tokens,at,rule,true)}else{at=parseHoliday(tokens,at,rule,false)}week_stable=false}else if(matchTokens(tokens,at,"month","number")||matchTokens(tokens,at,"month","weekday")||matchTokens(tokens,at,"year","month","number")||matchTokens(tokens,at,"year","event")||matchTokens(tokens,at,"event")){at=parseMonthdayRange(tokens,at,nrule);week_stable=false}else if(matchTokens(tokens,at,"year")){at=parseYearRange(tokens,at);week_stable=false}else if(matchTokens(tokens,at,"month")){at=parseMonthRange(tokens,at)}else if(matchTokens(tokens,at,"week")){tokens[at][3]="week";at=parseWeekRange(tokens,at)}else if(at!==0&&at!==tokens.length-1&&tokens[at][0]===":"&&!(typeof last_selector[1]==="string"&&last_selector[1]==="time")){if(!done_with_warnings&&matchTokens(tokens,at-1,"holiday")){parsing_warnings.push([nrule,at,t("no colon after",{token:tokens[at-1][1]})])}at++}else if(matchTokens(tokens,at,"number","timesep")||matchTokens(tokens,at,"timevar")||matchTokens(tokens,at,"(","timevar")||matchTokens(tokens,at,"number","-")){at=parseTimeRange(tokens,at,rule,false,nrule);last_selector=[at,"time"]}else if(matchTokens(tokens,at,"state")){if(tokens[at][0]==="open"){rule.meaning=true}else if(tokens[at][0]==="closed"||tokens[at][0]==="off"){rule.meaning=false}else{rule.meaning=false;rule.unknown=true}rule_modifier_specified=true;at++;if(typeof tokens[at]==="object"&&tokens[at][0]===",")at=[at+1]}else if(matchTokens(tokens,at,"comment")){rule.comment=tokens[at][0];if(!rule_modifier_specified){rule.meaning=false;rule.unknown=true}rule_modifier_specified=true;at++;if(typeof tokens[at]==="object"&&tokens[at][0]===","){at=[at+1]}}else if((at===0||at===tokens.length-1)&&matchTokens(tokens,at,"rule separator")){at++}else{var warnings=getWarnings();throw formatWarnErrorMessage(nrule,at,t("unexpected token",{token:tokens[at][1]}))+(warnings?" "+warnings.join("; "):"")}if(typeof at==="object"){tokens[at[0]-1][1]="rule separator";break}if(typeof last_selector[0]==="number"&&last_selector[0]!==at){last_selector=[]}}return at}function dateAtDayMinutes(date,minutes){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,minutes)}function dateAtNextWeekday(date,weekday){var delta=weekday-date.getDay();return new Date(date.getFullYear(),date.getMonth(),date.getDate()+delta+(delta<0?7:0))}function parseNumRange(tokens,at,func){for(;at<tokens.length;at++){if(matchTokens(tokens,at,"number","-","number")){func(tokens[at][0],tokens[at+2][0],at);at+=3}else if(matchTokens(tokens,at,"-","number")){func(-tokens[at+1][0],-tokens[at+1][0],at);at+=2}else if(matchTokens(tokens,at,"number")){func(tokens[at][0],tokens[at][0],at);at++}else{throw formatWarnErrorMessage(nrule,at+matchTokens(tokens,at,"-"),"Unexpected token in number range: "+tokens[at][1])}if(!matchTokens(tokens,at,","))break}return at}function getConstrainedWeekday(tokens,at){var number=0;var endat=parseNumRange(tokens,at,(function(from,to,at){if(from===0||from<-5||from>5)throw formatWarnErrorMessage(nrule,at,t("number -5 to 5"));if(from===to){if(number!==0)throw formatWarnErrorMessage(nrule,at,t("one weekday constraint"));number=from}else{throw formatWarnErrorMessage(nrule,at+2,t("range constrained weekdays"))}}));if(!matchTokens(tokens,endat,"]"))throw formatWarnErrorMessage(nrule,endat,t("expected",{symbol:"]"}));return[number,endat+1]}function checkPeriod(at,period,period_type,parm_string){if(done_with_warnings)return;if(period===0){throw formatWarnErrorMessage(nrule,at,t("range zero",{type:period_type}))}else if(period===1){if(typeof parm_string==="string"&&parm_string==="no_end_year")parsing_warnings.push([nrule,at,t("period one year+",{type:period_type})]);else parsing_warnings.push([nrule,at,t("period one",{type:period_type})])}}function getDateForConstrainedWeekday(year,month,weekday,constrained_weekday,add_days){var tmp_date=dateAtNextWeekday(new Date(year,month+(constrained_weekday[0]>0?0:1),1),weekday);tmp_date.setDate(tmp_date.getDate()+(constrained_weekday[0]+(constrained_weekday[0]>0?-1:0))*7);if(typeof add_days==="object"&&add_days[1])tmp_date.setDate(tmp_date.getDate()+add_days[0]);return tmp_date}function checkIfDateIsValid(month,day,nrule,at){if(day<1||day>31){throw formatWarnErrorMessage(nrule,at,t("month 31",{month:months[month]}))}else if((month===3||month===5||month===8||month===10)&&day===31){throw formatWarnErrorMessage(nrule,at,t("month 30",{month:months[month]}))}else if(month===1&&day===30){throw formatWarnErrorMessage(nrule,at,t("month feb",{month:months[month]}))}}function parseTimeRange(tokens,at,rule,extended_open_end,nrule){if(!extended_open_end)tokens[at][3]="time";for(;at<tokens.length;at++){var has_time_var_calc=[],has_normal_time=[];has_normal_time[0]=matchTokens(tokens,at,"number","timesep","number");has_time_var_calc[0]=matchTokens(tokens,at,"(","timevar");var minutes_from,minutes_to;if(has_normal_time[0]||matchTokens(tokens,at,"timevar")||has_time_var_calc[0]){var is_point_in_time=false;var has_open_end=false;var timevar_add=[0,0];var timevar_string=[];var point_in_time_period;if(has_normal_time[0]){minutes_from=getMinutesByHoursMinutes(tokens,nrule,at+has_time_var_calc[0])}else{timevar_string[0]=tokens[at+has_time_var_calc[0]][0];minutes_from=word_value_replacement[timevar_string[0]];if(has_time_var_calc[0]){timevar_add[0]=parseTimevarCalc(tokens,at);minutes_from+=timevar_add[0]}}var at_end_time=at+(has_normal_time[0]?3:has_time_var_calc[0]?7:1)+1;if(!matchTokens(tokens,at_end_time-1,"-")){if(matchTokens(tokens,at_end_time-1,"+")){has_open_end=true}else{if(oh_mode===0){throw formatWarnErrorMessage(nrule,at+(has_normal_time[0]?typeof tokens[at+3]==="object"?3:2:has_time_var_calc[0]?2:typeof tokens[at+1]==="object"?1:0),t("point in time",{calc:has_time_var_calc[0]?t("calculation")+" ":"",libraryname:library_name}))}else{minutes_to=minutes_from+1;is_point_in_time=true}}}if(has_open_end){if(extended_open_end===1){minutes_from+=minutes_in_day}if(minutes_from>=22*60){minutes_to=minutes_from+8*60}else if(minutes_from>=17*60){minutes_to=minutes_from+10*60}else{minutes_to=minutes_in_day}}else if(!is_point_in_time){has_normal_time[1]=matchTokens(tokens,at_end_time,"number","timesep","number");has_time_var_calc[1]=matchTokens(tokens,at_end_time,"(","timevar");if(!has_normal_time[1]&&!matchTokens(tokens,at_end_time,"timevar")&&!has_time_var_calc[1]){throw formatWarnErrorMessage(nrule,at_end_time-(typeof tokens[at_end_time]==="object"?0:1),t("time range continue"))}else{if(has_normal_time[1]){minutes_to=getMinutesByHoursMinutes(tokens,nrule,at_end_time)}else{timevar_string[1]=tokens[at_end_time+has_time_var_calc[1]][0];minutes_to=word_value_replacement[timevar_string[1]]}if(has_time_var_calc[1]){timevar_add[1]=parseTimevarCalc(tokens,at_end_time);minutes_to+=timevar_add[1]}}}at=at_end_time+(is_point_in_time?-1:has_normal_time[1]?3:has_time_var_calc[1]?7:!has_open_end);if(matchTokens(tokens,at,"/","number")){if(matchTokens(tokens,at+2,"timesep","number")){point_in_time_period=getMinutesByHoursMinutes(tokens,nrule,at+1);at+=4}else{point_in_time_period=tokens[at+1][0];at+=2;if(matchTokens(tokens,at,"timesep"))throw formatWarnErrorMessage(nrule,at,t("period continue"))}if(oh_mode===0){throw formatWarnErrorMessage(nrule,at-1,t("time range mode",{libraryname:library_name}))}is_point_in_time=true}else if(matchTokens(tokens,at,"+")){parseTimeRange(tokens,at_end_time,rule,minutes_to<minutes_from?1:true,nrule);at++}else if(oh_mode===1&&!is_point_in_time){throw formatWarnErrorMessage(nrule,at_end_time,t("point in time mode",{libraryname:library_name}))}if(typeof lat==="string"){if(!has_normal_time[0]||!(has_normal_time[1]||has_open_end||is_point_in_time)){week_stable=false}}else{timevar_string=[]}if(!extended_open_end&&minutes_from>=minutes_in_day){throw formatWarnErrorMessage(nrule,at_end_time-2,t("outside current day"))}if(minutes_to<minutes_from||has_normal_time[0]&&has_normal_time[1]&&minutes_from===minutes_to){minutes_to+=minutes_in_day}if(minutes_to>minutes_in_day*2){throw formatWarnErrorMessage(nrule,at_end_time+(has_normal_time[1]?4:has_time_var_calc[1]?7:1)-2,t("two midnights"))}if(minutes_from===0&&minutes_to===minutes_in_day){rule.time.push((function(){return[true]}))}else{if(minutes_to>minutes_in_day){rule.time.push(function(minutes_from,minutes_to,timevar_string,timevar_add,has_open_end,is_point_in_time,point_in_time_period,extended_open_end){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(timevar_string[0]){var date_from=suncalc.getTimes(date,lat,lon)[timevar_string[0]];minutes_from=date_from.getHours()*60+date_from.getMinutes()+timevar_add[0]}if(timevar_string[1]){var date_to=suncalc.getTimes(date,lat,lon)[timevar_string[1]];minutes_to=date_to.getHours()*60+date_to.getMinutes()+timevar_add[1];minutes_to+=minutes_in_day}else if(is_point_in_time&&typeof point_in_time_period!=="number"){minutes_to=minutes_from+1}if(typeof point_in_time_period==="number"){if(ourminutes<minutes_from){return[false,dateAtDayMinutes(date,minutes_from)]}else if(ourminutes<=minutes_to){for(var cur_min=minutes_from;ourminutes+point_in_time_period>=cur_min;cur_min+=point_in_time_period){if(cur_min===ourminutes){return[true,dateAtDayMinutes(date,ourminutes+1)]}else if(ourminutes<cur_min){return[false,dateAtDayMinutes(date,cur_min)]}}}return[false,dateAtDayMinutes(date,minutes_in_day)]}else{if(ourminutes<minutes_from)return[false,dateAtDayMinutes(date,minutes_from)];else return[true,dateAtDayMinutes(date,minutes_to),has_open_end,extended_open_end]}}}(minutes_from,minutes_to,timevar_string,timevar_add,has_open_end,is_point_in_time,point_in_time_period,extended_open_end));if(minutes_to-minutes_in_day>0){if(typeof rule_infos[nrule]==="undefined"){rule_infos[nrule]={}}rule_infos[nrule]["time_wraps_over_midnight"]=true;rule.wraptime.push(function(minutes_from,minutes_to,timevar_string,timevar_add,has_open_end,point_in_time_period,extended_open_end){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(timevar_string[0]){var date_from=suncalc.getTimes(date,lat,lon)[timevar_string[0]];minutes_from=date_from.getHours()*60+date_from.getMinutes()+timevar_add[0]}if(timevar_string[1]){var date_to=suncalc.getTimes(date,lat,lon)[timevar_string[1]];minutes_to=date_to.getHours()*60+date_to.getMinutes()+timevar_add[1]}if(typeof point_in_time_period==="number"){if(ourminutes<=minutes_to){for(var cur_min=0;ourminutes+point_in_time_period>=cur_min;cur_min+=point_in_time_period){if(cur_min===ourminutes){return[true,dateAtDayMinutes(date,ourminutes+1)]}else if(ourminutes<cur_min){return[false,dateAtDayMinutes(date,cur_min)]}}}}else{if(ourminutes<minutes_to)return[true,dateAtDayMinutes(date,minutes_to),has_open_end,extended_open_end]}return[false,undefined]}}(minutes_from,minutes_to-minutes_in_day,timevar_string,timevar_add,has_open_end,point_in_time_period,extended_open_end))}}else{rule.time.push(function(minutes_from,minutes_to,timevar_string,timevar_add,has_open_end,is_point_in_time,point_in_time_period){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(timevar_string[0]){var date_from=suncalc.getTimes(date,lat,lon)[timevar_string[0]];minutes_from=date_from.getHours()*60+date_from.getMinutes()+timevar_add[0]}if(timevar_string[1]){var date_to=suncalc.getTimes(date,lat,lon)[timevar_string[1]];minutes_to=date_to.getHours()*60+date_to.getMinutes()+timevar_add[1]}else if(is_point_in_time&&typeof point_in_time_period!=="number"){minutes_to=minutes_from+1}if(typeof point_in_time_period==="number"){if(ourminutes<minutes_from){return[false,dateAtDayMinutes(date,minutes_from)]}else if(ourminutes<=minutes_to){for(var cur_min=minutes_from;ourminutes+point_in_time_period>=cur_min;cur_min+=point_in_time_period){if(cur_min===ourminutes){return[true,dateAtDayMinutes(date,ourminutes+1)]}else if(ourminutes<cur_min){return[false,dateAtDayMinutes(date,cur_min)]}}}return[false,dateAtDayMinutes(date,minutes_in_day)]}else{if(ourminutes<minutes_from)return[false,dateAtDayMinutes(date,minutes_from)];else if(ourminutes<minutes_to)return[true,dateAtDayMinutes(date,minutes_to),has_open_end];else return[false,dateAtDayMinutes(date,minutes_from+minutes_in_day)]}}}(minutes_from,minutes_to,timevar_string,timevar_add,has_open_end,is_point_in_time,point_in_time_period))}}}else if(matchTokens(tokens,at,"number","-","number")){minutes_from=tokens[at][0]*60;minutes_to=tokens[at+2][0]*60;if(!done_with_warnings){parsing_warnings.push([nrule,at+2,t("without minutes",{syntax:(tokens[at][0]<10?"0":"")+tokens[at][0]+":00-"+(tokens[at+2][0]<10?"0":"")+tokens[at+2][0]+":00"})])}if(minutes_from>=minutes_in_day)throw formatWarnErrorMessage(nrule,at,t("outside day"));if(minutes_to<minutes_from)minutes_to+=minutes_in_day;if(minutes_to>minutes_in_day*2)throw formatWarnErrorMessage(nrule,at+2,t("two midnights"));if(minutes_to>minutes_in_day){rule.time.push(function(minutes_from,minutes_to){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(ourminutes<minutes_from)return[false,dateAtDayMinutes(date,minutes_from)];else return[true,dateAtDayMinutes(date,minutes_to)]}}(minutes_from,minutes_to));if(minutes_to-minutes_in_day>0){if(typeof rule_infos[nrule]==="undefined"){rule_infos[nrule]={}}rule_infos[nrule]["time_wraps_over_midnight"]=true;rule.wraptime.push(function(minutes_to){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(ourminutes<minutes_to){return[true,dateAtDayMinutes(date,minutes_to)]}else{return[false,undefined]}}}(minutes_to-minutes_in_day))}}else{rule.time.push(function(minutes_from,minutes_to){return function(date){var ourminutes=date.getHours()*60+date.getMinutes();if(ourminutes<minutes_from)return[false,dateAtDayMinutes(date,minutes_from)];else if(ourminutes<minutes_to)return[true,dateAtDayMinutes(date,minutes_to),has_open_end];else return[false,dateAtDayMinutes(date,minutes_from+minutes_in_day)]}}(minutes_from,minutes_to))}at+=3}else{if(matchTokens(tokens,at,"("))throw formatWarnErrorMessage(nrule,at,'Missing variable time (e.g. sunrise) after: "'+tokens[at][1]+'"');if(matchTokens(tokens,at,"number","timesep"))throw formatWarnErrorMessage(nrule,at+1,'Missing minutes in time range after: "'+tokens[at+1][1]+'"');if(matchTokens(tokens,at,"number"))throw formatWarnErrorMessage(nrule,at+(typeof tokens[at+1]==="object"?1:0),'Missing time separator in time range after: "'+tokens[at][1]+'"');return[at]}if(!matchTokens(tokens,at,",")){break}if(typeof tokens[at+1]==="undefined"&&!done_with_warnings){parsing_warnings.push([nrule,at,t("value ends with token",{token:tokens[at][1]})])}}return at}function getMinutesByHoursMinutes(tokens,nrule,at){if(tokens[at+2][0]>59)throw formatWarnErrorMessage(nrule,at+2,"Minutes are greater than 59.");return tokens[at][0]*60+tokens[at+2][0]}function parseTimevarCalc(tokens,at){var error;if(matchTokens(tokens,at+2,"+")||matchTokens(tokens,at+2,"-")){if(matchTokens(tokens,at+3,"number","timesep","number")){if(matchTokens(tokens,at+6,")")){var add_or_subtract=tokens[at+2][0]==="+"?"1":"-1";var minutes=getMinutesByHoursMinutes(tokens,nrule,at+3)*add_or_subtract;if(minutes===0)parsing_warnings.push([nrule,at+5,t("zero calculation")]);return minutes}else{error=[at+6,". "+t("missing",{symbol:")"})+"."]}}else{error=[at+5," "+t("(time)")+"."]}}else{error=[at+2,". "+t("expected",{symbol:'+" or "-'})]}if(error)throw formatWarnErrorMessage(nrule,error[0],t("calculation syntax")+error[1])}function parseWeekdayRange(tokens,at,rule,in_holiday_selector,nrule){if(!in_holiday_selector){in_holiday_selector=true;tokens[at][3]="weekday"}for(;at<tokens.length;at++){if(matchTokens(tokens,at,"weekday","[")){var numbers=[];var endat=parseNumRange(tokens,at+2,(function(from,to,at){if(from===0||from<-5||from>5)throw formatWarnErrorMessage(nrule,at,t("number -5 to 5"));if(from===to){numbers.push(from)}else if(from<to){for(var i=from;i<=to;i++){if(i===0||i<-5||i>5)throw formatWarnErrorMessage(nrule,at+2,t("number -5 to 5"));numbers.push(i)}}else{throw formatWarnErrorMessage(nrule,at+2,t("bad range",{from:from,to:to}))}}));if(!matchTokens(tokens,endat,"]")){throw formatWarnErrorMessage(nrule,endat+(typeof tokens[endat]==="object"?0:-1),t("] or more numbers"))}var add_days=getMoveDays(tokens,endat+1,6,"constrained weekdays");week_stable=false;for(var nnumber=0;nnumber<numbers.length;nnumber++){rule.weekday.push(function(weekday,number,add_days){return function(date){var date_num=getValueForDate(date,false);var start_of_this_month=new Date(date.getFullYear(),date.getMonth(),1);var start_of_next_month=new Date(date.getFullYear(),date.getMonth()+1,1);var target_day_this_month;target_day_this_month=getDateForConstrainedWeekday(date.getFullYear(),date.getMonth(),weekday,[number]);var target_day_with_added_days_this_month=new Date(target_day_this_month.getFullYear(),target_day_this_month.getMonth(),target_day_this_month.getDate()+add_days);if(target_day_with_added_days_this_month.getTime()<start_of_this_month.getTime()){if(target_day_this_month.getTime()>=start_of_this_month.getTime()){target_day_with_added_days_this_month=dateAtNextWeekday(new Date(date.getFullYear(),date.getMonth()+(number>0?0:1)+1,1),weekday);target_day_this_month.setDate(target_day_with_added_days_this_month.getDate()+(number+(number>0?-1:0))*7+add_days)}else{return[false,start_of_next_month]}}else if(target_day_with_added_days_this_month.getTime()>=start_of_next_month.getTime()){if(target_day_this_month.getTime()>=start_of_next_month.getTime())return[false,start_of_next_month]}var target_day_with_added_moved_days_this_month;if(add_days>0){target_day_with_added_moved_days_this_month=dateAtNextWeekday(new Date(date.getFullYear(),date.getMonth()+(number>0?0:1)-1,1),weekday);target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate()+(number+(number>0?-1:0))*7+add_days);if(date_num===getValueForDate(target_day_with_added_moved_days_this_month,false))return[true,dateAtDayMinutes(date,minutes_in_day)]}else if(add_days<0){target_day_with_added_moved_days_this_month=dateAtNextWeekday(new Date(date.getFullYear(),date.getMonth()+(number>0?0:1)+1,1),weekday);target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate()+(number+(number>0?-1:0))*7+add_days);if(target_day_with_added_moved_days_this_month.getTime()>=start_of_next_month.getTime()){if(target_day_with_added_days_this_month.getTime()>=start_of_next_month.getTime())return[false,target_day_with_added_moved_days_this_month]}else{if(target_day_with_added_days_this_month.getTime()<start_of_next_month.getTime()&&getValueForDate(target_day_with_added_days_this_month,false)===date_num)return[true,dateAtDayMinutes(date,minutes_in_day)];target_day_with_added_days_this_month=target_day_with_added_moved_days_this_month}}if(date.getDate()===target_day_with_added_days_this_month.getDate()){return[true,dateAtDayMinutes(date,minutes_in_day)]}if(date.getDate()<target_day_with_added_days_this_month.getDate()){return[false,target_day_with_added_days_this_month]}return[false,start_of_next_month]}}(tokens[at][0],numbers[nnumber],add_days[0]))}at=endat+1+add_days[1]}else if(matchTokens(tokens,at,"weekday")){var is_range=matchTokens(tokens,at+1,"-","weekday");var weekday_from=tokens[at][0];var weekday_to=is_range?tokens[at+2][0]:weekday_from;var inside=true;if(weekday_to<weekday_from){var tmp=weekday_to;weekday_to=weekday_from-1;weekday_from=tmp+1;inside=false}var weekday_list=Array.apply(0,Array(weekday_to-weekday_from+1)).map((function(_,index){return index+weekday_to}));if(typeof rule_infos[nrule]==="undefined"){rule_infos[nrule]={}}if(typeof rule_infos[nrule]["week_days"]==="object"){Array.prototype.push.apply(rule_infos[nrule]["week_days"],weekday_list)}else{rule_infos[nrule]["week_days"]=weekday_list}if(weekday_to<weekday_from){rule.weekday.push((function(){return[true]}))}else{rule.weekday.push(function(weekday_from,weekday_to,inside){return function(date){var ourweekday=date.getDay();if(ourweekday<weekday_from||ourweekday>weekday_to){return[!inside,dateAtNextWeekday(date,weekday_from)]}else{return[inside,dateAtNextWeekday(date,weekday_to+1)]}}}(weekday_from,weekday_to,inside))}at+=is_range?3:1}else if(matchTokens(tokens,at,"holiday")){week_stable=false;return parseHoliday(tokens,at,rule,true,in_holiday_selector)}else if(matchTokens(tokens,at-1,",")){throw formatWarnErrorMessage(nrule,at-1,t("additional rule no sense"))}else{throw formatWarnErrorMessage(nrule,at,t("unexpected token weekday range",{token:tokens[at][1]}))}if(!matchTokens(tokens,at,",")){break}}return at}function getMoveDays(tokens,at,max_differ,name){var add_days=[0,0];add_days[0]=matchTokens(tokens,at,"+")||(matchTokens(tokens,at,"-")?-1:0);if(add_days[0]!==0&&matchTokens(tokens,at+1,"number","calcday")){if(tokens[at+1][0]>max_differ)throw formatWarnErrorMessage(nrule,at+2,t("max differ",{maxdiffer:max_differ,name:name}));add_days[0]*=tokens[at+1][0];if(add_days[0]===0&&!done_with_warnings)parsing_warnings.push([nrule,at+2,t("adding 0")]);add_days[1]=3}else{add_days[0]=0}return add_days}function parseHoliday(tokens,at,rule,push_to_weekday,in_holiday_selector){if(!in_holiday_selector){if(push_to_weekday)tokens[at][3]="weekday";else tokens[at][3]="holiday"}for(;at<tokens.length;at++){if(matchTokens(tokens,at,"holiday")){if(tokens[at][0]==="PH"){var applying_holidays=getMatchingHoliday(tokens[at][0]);var add_days=getMoveDays(tokens,at+1,1,"public holiday");var selector=function(applying_holidays,add_days){return function(date){var holidays=getApplyingHolidaysForYear(applying_holidays,date.getFullYear(),add_days);var date_num=getValueForDate(date,true);for(var i=0;i<holidays.length;i++){var next_holiday_date_num=getValueForDate(holidays[i][0],true);if(date_num<next_holiday_date_num){if(add_days[0]>0){var holidays_last_year=getApplyingHolidaysForYear(applying_holidays,date.getFullYear()-1,add_days);var last_holiday_last_year=holidays_last_year[holidays_last_year.length-1];var last_holiday_last_year_num=getValueForDate(last_holiday_last_year[0],true);if(date_num<last_holiday_last_year_num){return[false,last_holiday_last_year[0]]}else if(date_num===last_holiday_last_year_num){return[true,dateAtDayMinutes(last_holiday_last_year[0],minutes_in_day),"Day after "+last_holiday_last_year[1]]}}return[false,holidays[i][0]]}else if(date_num===next_holiday_date_num){return[true,new Date(date.getFullYear(),date.getMonth(),date.getDate()+1),(add_days[0]>0?"Day after ":add_days[0]<0?"Day before ":"")+holidays[i][1]]}}if(add_days[0]<0){var holidays_next_year=getApplyingHolidaysForYear(applying_holidays,date.getFullYear()+1,add_days);var first_holidays_next_year=holidays_next_year[0];var first_holidays_next_year_num=getValueForDate(first_holidays_next_year[0],true);if(date_num===first_holidays_next_year_num){return[true,dateAtDayMinutes(first_holidays_next_year[0],minutes_in_day),"Day before "+first_holidays_next_year[1]]}}return[false,new Date(holidays[0][0].getFullYear()+1,holidays[0][0].getMonth(),holidays[0][0].getDate())]}}(applying_holidays,add_days);if(push_to_weekday)rule.weekday.push(selector);else rule.holiday.push(selector);at+=1+add_days[1]}else if(tokens[at][0]==="SH"){var applying_holidays=getMatchingHoliday(tokens[at][0]);var selector=function(applying_holidays){return function(date){var date_num=getValueForDate(date);for(var i=0;i<applying_holidays.length;i++){var holiday=getSHForYear(applying_holidays[i],date.getFullYear(),false);if(typeof holiday==="undefined"){continue}for(var h=0;h<holiday.length;h+=4){var holiday_to_plus=new Date(date.getFullYear(),holiday[2+h]-1,holiday[3+h]+1);var holiday_from=(holiday[0+h]-1)*100+holiday[1+h];var holiday_to=(holiday[2+h]-1)*100+holiday[3+h];holiday_to_plus=getValueForDate(holiday_to_plus);var holiday_ends_next_year=holiday_to<holiday_from;if(date_num<holiday_from){var last_year_holiday=getSHForYear(applying_holidays[applying_holidays.length-1],date.getFullYear()-1,false);if(typeof last_year_holiday==="object"){var last_year_holiday_from=(last_year_holiday[last_year_holiday.length-4]-1)*100+last_year_holiday[last_year_holiday.length-3];var last_year_holiday_to=(last_year_holiday[last_year_holiday.length-2]-1)*100+last_year_holiday[last_year_holiday.length-1];if(last_year_holiday_from>last_year_holiday_to&&date_num<=last_year_holiday_to){return[true,new Date(date.getFullYear(),last_year_holiday[last_year_holiday.length-2]-1,last_year_holiday[last_year_holiday.length-1]+1),applying_holidays[applying_holidays.length-1].name]}else{return[false,new Date(date.getFullYear(),holiday[0+h]-1,holiday[1+h])]}}else{return[false,new Date(date.getFullYear(),holiday[0+h]-1,holiday[1+h])]}}else if(holiday_from<=date_num&&(date_num<=holiday_to||holiday_ends_next_year)){return[true,new Date(date.getFullYear()+holiday_ends_next_year,holiday[2+h]-1,holiday[3+h]+1),applying_holidays[i].name]}else if(holiday_to_plus===date_num){if(h+4<holiday.length){h+=4;return[false,new Date(date.getFullYear(),holiday[0+h]-1,holiday[1+h])]}else{return[false,new Date(date.getFullYear(),holiday[2+h]-1,holiday[3+h]+2)]}}}}throw formatLibraryBugMessage(t("no SH definition",{name:"",year:date.getFullYear()}),"library bug PR only")}}(applying_holidays);if(push_to_weekday)rule.weekday.push(selector);else rule.holiday.push(selector);at+=1}}else if(matchTokens(tokens,at,"weekday")){return parseWeekdayRange(tokens,at,rule,true,nrule)}else if(matchTokens(tokens,at-1,",")){throw formatWarnErrorMessage(nrule,at-1,t("additional rule no sense"))}else{throw formatWarnErrorMessage(nrule,at,t("unexpected token holiday",{token:tokens[at][1]}))}if(!matchTokens(tokens,at,","))break}return at}function getValueForDate(date,include_year){return(include_year?date.getFullYear()*1e4:0)+date.getMonth()*100+date.getDate()}function getSHForYear(SH_hash,year,fatal){if(typeof fatal!=="boolean"){fatal=true}var holiday=SH_hash[year];if(typeof holiday==="undefined"){holiday=SH_hash["default"];if(typeof holiday==="undefined"){if(fatal){throw formatLibraryBugMessage(t("no SH definition",{name:SH_hash.name+" ",year:year}),"library bug PR only")}else{return undefined}}}return holiday}function getMatchingHoliday(type_of_holidays){if(typeof location_cc!=="string"){throw t("no country code")}if(!holiday_definitions[location_cc]){throw formatLibraryBugMessage(t("no holiday definition",{name:type_of_holidays,cc:location_cc}),"library bug PR only")}var matching_holiday=[];if(typeof location_state==="string"&&typeof holiday_definitions[location_cc][location_state]==="object"&&typeof holiday_definitions[location_cc][location_state][type_of_holidays]==="object"){var country_holidays=holiday_definitions[location_cc][type_of_holidays]||[];var state_holidays=holiday_definitions[location_cc][location_state][type_of_holidays];if(type_of_holidays==="PH"){matching_holiday=state_holidays}else if(!country_holidays.length){matching_holiday=state_holidays}else{var country_holiday_names=country_holidays.map((function(country_holiday){return country_holiday.name}));var matching_holiday=[];matching_holiday.push.apply(matching_holiday,country_holidays);matching_holiday.push.apply(matching_holiday,state_holidays.filter((function is_not_a_country_holiday(state_holiday){return country_holiday_names.indexOf(state_holiday.name)===-1})));matching_holiday.sort((function(h1,h2){var h1_year=Object.keys(h1).find((function(k){return k!=="name"}));var h2_year=Object.keys(h2).find((function(k){return k!=="name"}));var h1_date=h1[h1_year];var h2_date=h2[h2_year];return h1_date[0]-h2_date[0]||h1_date[1]-h2_date[1]}))}}else if(holiday_definitions[location_cc][type_of_holidays]){var applying_holidays_for_country=holiday_definitions[location_cc][type_of_holidays];switch(type_of_holidays){case"PH":applying_holidays_for_country.forEach((function(holiday_item){if("only_states"in holiday_item){if(-1===holiday_item.only_states.indexOf(location_state)){return}}matching_holiday.push(holiday_item)}));break;case"SH":matching_holiday=applying_holidays_for_country;break}}else{throw formatLibraryBugMessage(t("no holiday definition state",{name:type_of_holidays,cc:location_cc,state:location_state}),"library bug PR only")}if(matching_holiday.length===0){throw formatLibraryBugMessage(t("no holiday definition",{name:type_of_holidays,cc:location_cc}),"library bug PR only")}return matching_holiday}function getMovableEventsForYear(year){var C=Math.floor(year/100);var N=year-19*Math.floor(year/19);var K=Math.floor((C-17)/25);var I=C-Math.floor(C/4)-Math.floor((C-K)/3)+19*N+15;I=I-30*Math.floor(I/30);I=I-Math.floor(I/28)*(1-Math.floor(I/28)*Math.floor(29/(I+1))*Math.floor((21-N)/11));var J=year+Math.floor(year/4)+I+2-C+Math.floor(C/4);J=J-7*Math.floor(J/7);var L=I-J;var M=3+Math.floor((L+40)/44);var D=L+28-31*Math.floor(M/4);var oA=year%4;var oB=year%7;var oC=year%19;var oD=(19*oC+15)%30;var oE=(2*oA+4*oB-oD+34)%7;var oF=oD+oE;var oDate;if(oF<9){oDate=new Date(year,4-1,oF+4)}else{if(oF+4<31){oDate=new Date(year,4-1,oF+4)}else{oDate=new Date(year,5-1,oF-26)}}var lastFebruaryDay=new Date(year,2,0);var lastFebruarySunday=lastFebruaryDay.getDate()-lastFebruaryDay.getDay();var may_24=new Date(year,4,24);var victoriaDay=24-(6+may_24.getDay())%7;var july_1=new Date(year,6,1);var canadaDay=july_1.getDay()===0?2:1;function firstWeekdayOfMonth(month,weekday){var first=new Date(year,month,1);return 1+(7+weekday-first.getDay())%7}function lastWeekdayOfMonth(month,weekday){var last=new Date(year,month+1,0);var offset=(7+last.getDay()-weekday)%7;return last.getDate()-offset}function getDateOfWeekdayInDateRange(weekday,start_date){var days_to_dest_date=weekday-start_date.getDay();if(days_to_dest_date<0){days_to_dest_date+=7}start_date.setDate(start_date.getDate()+days_to_dest_date);return start_date}function getDateOfNextWeekdayRange(first_weekday,last_weekday,start_date){if(first_weekday>=last_weekday){throw formatLibraryBugMessage("Not implemented yet.")}if(first_weekday<=start_date.getDay()&&start_date.getDay()<=last_weekday){return start_date}else{var days_to_dest_date=first_weekday-start_date.getDay();if(days_to_dest_date<0){days_to_dest_date+=7}start_date.setDate(start_date.getDate()+days_to_dest_date);return start_date}}return{easter:new Date(year,M-1,D),"orthodox easter":oDate,victoriaDay:new Date(year,4,victoriaDay),canadaDay:new Date(year,6,canadaDay),firstJanuaryMonday:new Date(year,0,firstWeekdayOfMonth(0,1)),firstFebruaryMonday:new Date(year,1,firstWeekdayOfMonth(1,1)),lastFebruarySunday:new Date(year,1,lastFebruarySunday),firstMarchMonday:new Date(year,2,firstWeekdayOfMonth(2,1)),firstAprilMonday:new Date(year,3,firstWeekdayOfMonth(3,1)),firstMayMonday:new Date(year,4,firstWeekdayOfMonth(4,1)),firstJuneMonday:new Date(year,5,firstWeekdayOfMonth(5,1)),firstJulyMonday:new Date(year,6,firstWeekdayOfMonth(6,1)),firstAugustMonday:new Date(year,7,firstWeekdayOfMonth(7,1)),firstSeptemberMonday:new Date(year,8,firstWeekdayOfMonth(8,1)),firstSeptemberTuesday:new Date(year,8,firstWeekdayOfMonth(8,2)),firstSeptemberSunday:new Date(year,8,firstWeekdayOfMonth(8,0)),firstOctoberMonday:new Date(year,9,firstWeekdayOfMonth(9,1)),firstNovemberMonday:new Date(year,10,firstWeekdayOfMonth(10,1)),firstNovemberTuesday:new Date(year,10,firstWeekdayOfMonth(10,2)),firstMarchTuesday:new Date(year,2,firstWeekdayOfMonth(2,2)),firstAugustTuesday:new Date(year,7,firstWeekdayOfMonth(7,2)),firstAugustFriday:new Date(year,7,firstWeekdayOfMonth(7,5)),firstNovemberThursday:new Date(year,10,firstWeekdayOfMonth(10,4)),lastMayMonday:new Date(year,4,lastWeekdayOfMonth(4,1)),lastMarchMonday:new Date(year,2,lastWeekdayOfMonth(2,1)),lastAprilMonday:new Date(year,3,lastWeekdayOfMonth(3,1)),lastAprilFriday:new Date(year,3,lastWeekdayOfMonth(3,5)),lastAugustMonday:new Date(year,7,lastWeekdayOfMonth(7,1)),lastSeptemberMonday:new Date(year,8,lastWeekdayOfMonth(8,1)),lastSeptemberFriday:new Date(year,8,lastWeekdayOfMonth(8,5)),lastOctoberMonday:new Date(year,9,lastWeekdayOfMonth(9,1)),lastOctoberFriday:new Date(year,9,lastWeekdayOfMonth(9,5)),nextSaturday20Jun:getDateOfWeekdayInDateRange(6,new Date(year,5,20)),nextSaturday31Oct:getDateOfWeekdayInDateRange(6,new Date(year,9,31)),nextWednesday16Nov:getDateOfWeekdayInDateRange(3,new Date(year,10,16)),"nextMo-Fr17March":getDateOfNextWeekdayRange(1,5,new Date(year,2,17)),"nextMo-Sa01May":getDateOfNextWeekdayRange(1,6,new Date(year,4,1)),"nextMo-Sa07August":getDateOfNextWeekdayRange(1,6,new Date(year,7,7)),"nextMo-Sa25December":getDateOfNextWeekdayRange(1,6,new Date(year,11,25))}}function getApplyingHolidaysForYear(applying_holidays,year,add_days){var movableDays=getMovableEventsForYear(year);var sorted_holidays=[];var next_holiday;applying_holidays.forEach((function(holiday_item){if("fixed_date"in holiday_item){next_holiday=new Date(year,holiday_item.fixed_date[0]-1,holiday_item.fixed_date[1])}else if("variable_date"in holiday_item){var selected_movableDay=movableDays[holiday_item.variable_date];if(!selected_movableDay){throw t("movable no formula",{name:holiday_item.name})}var date_offset=0;if("offset"in holiday_item){date_offset=holiday_item.offset}next_holiday=new Date(selected_movableDay.getFullYear(),selected_movableDay.getMonth(),selected_movableDay.getDate()+date_offset);if(year!==next_holiday.getFullYear()){throw t("movable not in year",{name:holiday_item.variable_date,days:date_offset})}}else{throw formatLibraryBugMessage("Unexpected object: "+JSON.stringify(holiday_item,null," "))}if(add_days[0]){next_holiday.setDate(next_holiday.getDate()+add_days[0])}sorted_holidays.push([next_holiday,holiday_item.name])}));sorted_holidays=sorted_holidays.sort((function(a,b){if(a[0].getTime()<b[0].getTime())return-1;if(a[0].getTime()>b[0].getTime())return 1;return 0}));return sorted_holidays}function parseYearRange(tokens,at){tokens[at][3]="year";for(;at<tokens.length;at++){if(matchTokens(tokens,at,"year")){var is_range=false,has_period,period;if(matchTokens(tokens,at+1,"-","year","/","number")){is_range=true;has_period=true;period=parseInt(tokens[at+4][0]);checkPeriod(at+4,period,"year")}else{is_range=matchTokens(tokens,at+1,"-","year");has_period=matchTokens(tokens,at+1,"/","number");if(has_period){period=parseInt(tokens[at+2][0]);checkPeriod(at+2,period,"year","no_end_year")}else if(matchTokens(tokens,at+1,"+")){period=1;has_period=2}}var year_from=parseInt(tokens[at][0]);if(is_range&&tokens[at+2][0]<=year_from){if(tokens[at+2][0]===year_from){throw formatWarnErrorMessage(nrule,at,t("year range one year",{year:year_from}))}else{throw formatWarnErrorMessage(nrule,at,t("year range reverse"))}}if(!is_range&&year_from<(new Date).getFullYear()){parsing_warnings.push([nrule,at,t("year past")])}if(is_range&&tokens[at+2][0]<(new Date).getFullYear()){parsing_warnings.push([nrule,at+2,t("year past")])}rule.year.push(function(tokens,at,year_from,is_range,has_period,period){return function(date){var ouryear=date.getFullYear();var year_to=is_range?parseInt(tokens[at+2][0]):year_from;if(ouryear<year_from){return[false,new Date(year_from,0,1)]}else if(has_period){if(year_from<=ouryear){if(is_range&&ouryear>year_to)return[false];if(period>0){if((ouryear-year_from)%period===0){return[true,new Date(ouryear+1,0,1)]}else{return[false,new Date(ouryear+period-1,0,1)]}}}}else if(is_range){if(ouryear<=year_to)return[true,new Date(year_to+1,0,1)]}else if(ouryear===year_from){return[true]}return[false]}}(tokens,at,year_from,is_range,has_period,period));at+=1+(is_range?2:0)+(has_period?has_period===2?1:2:0)}else if(matchTokens(tokens,at-1,",")){throw formatWarnErrorMessage(nrule,at-1,t("additional rule no sense"))}else{throw formatWarnErrorMessage(nrule,at,t("unexpected token year range",{token:tokens[at][1]}))}if(!matchTokens(tokens,at,","))break}return at}function parseWeekRange(tokens,at){for(;at<tokens.length;at++){if(matchTokens(tokens,at,"week")){at++}if(matchTokens(tokens,at,"number")){var is_range=matchTokens(tokens,at+1,"-","number"),period=0;var week_from=tokens[at][0];var week_to=is_range?tokens[at+2][0]:week_from;if(week_from>week_to){throw formatWarnErrorMessage(nrule,at+2,t("week range reverse"))}if(week_from<1){throw formatWarnErrorMessage(nrule,at,t("week negative"))}if(week_to>53){throw formatWarnErrorMessage(nrule,is_range?at+2:at,t("week exceed"))}if(is_range){period=matchTokens(tokens,at+3,"/","number");if(period){period=tokens[at+4][0];if(period<2){throw formatWarnErrorMessage(nrule,at+4,t("week period less than 2",{weekfrom:week_from,weekto:week_to,period:period}))}else if(period>26){throw formatWarnErrorMessage(nrule,at+4,t("week period greater than 26",{weekfrom:week_from}))}}}if(week_stable&&(!(week_from<=1&&week_to>=53)||period)){week_stable=false}if(!period&&week_from===1&&week_to===53){rule.week.push((function(){return[true]}))}else{rule.week.push(function(week_from,week_to,period){return function(date){var ourweek=getWeekNumber(date);if(ourweek<week_from){return[false,getNextDateOfISOWeek(week_from,date)]}if(ourweek>week_to){return[false,getNextDateOfISOWeek(week_from,date)]}if(period){var in_period=(ourweek-week_from)%period===0;if(in_period){return[true,getNextDateOfISOWeek(ourweek+1,date)]}else{return[false,getNextDateOfISOWeek(ourweek+period-1,date)]}}return[true,getNextDateOfISOWeek(week_to===53?1:week_to+1,date)]}}(week_from,week_to,period))}at+=1+(is_range?2:0)+(period?2:0)}else if(matchTokens(tokens,at-1,",")){throw formatWarnErrorMessage(nrule,at-1,t("additional rule no sense"))}else{throw formatWarnErrorMessage(nrule,at,t("unexpected token week range",{token:tokens[at][1]}))}if(!matchTokens(tokens,at,","))break}return at}function getWeekNumber(d){d=new Date(+d);d.setHours(0,0,0,0);d.setDate(d.getDate()+4-(d.getDay()||7));var yearStart=new Date(d.getFullYear(),0,1);return Math.ceil(((d-yearStart)/864e5+1)/7)}function getDateOfISOWeek(w,year){var simple=new Date(year,0,1+(w-1)*7);var dow=simple.getDay();var ISOweekStart=simple;if(dow<=4)ISOweekStart.setDate(simple.getDate()-simple.getDay()+1);else ISOweekStart.setDate(simple.getDate()+8-simple.getDay());return ISOweekStart}function getNextDateOfISOWeek(week,date){var next_date;for(var i=-1;i<=1;i++){next_date=getDateOfISOWeek(week,date.getFullYear()+i);if(next_date.getTime()>date.getTime()){return next_date}}throw formatLibraryBugMessage()}function parseMonthRange(tokens,at,push_to_monthday,in_selector){if(!in_selector)tokens[at][3]="month";for(;at<tokens.length;at++){if(matchTokens(tokens,at,"month","number")&&!matchTokens(tokens,at+2,"timesep","number")){return parseMonthdayRange(tokens,at,nrule,true)}else if(matchTokens(tokens,at,"month")){var is_range=matchTokens(tokens,at+1,"-","month");var month_from=tokens[at][0];var month_to=is_range?tokens[at+2][0]:month_from;if(is_range&&week_stable){if(month_from!==(month_to+1)%12)week_stable=false}else{week_stable=false}var inside=true;if(month_to<month_from){var tmp=month_to;month_to=month_from-1;month_from=tmp+1;inside=false}var selector=function(month_from,month_to,inside){return function(date){var ourmonth=date.getMonth();if(month_to<month_from){return[!inside]}if(ourmonth<month_from||ourmonth>month_to){return[!inside,dateAtNextMonth(date,month_from)]}else{return[inside,dateAtNextMonth(date,month_to+1)]}}}(month_from,month_to,inside);if(push_to_monthday===true)rule.monthday.push(selector);else rule.month.push(selector);at+=is_range?3:1}else{throw formatWarnErrorMessage(nrule,at,t("unexpected token month range",{token:tokens[at][1]}))}if(!matchTokens(tokens,at,","))break}return at}function dateAtNextMonth(date,month){return new Date(date.getFullYear(),month<date.getMonth()?month+12:month)}function parseMonthdayRange(tokens,at,nrule,push_to_month){if(!push_to_month)tokens[at][3]="month";for(;at<tokens.length;at++){var has_year=[],has_month=[],has_event=[],has_calc=[],has_constrained_weekday=[];has_year[0]=matchTokens(tokens,at,"year");has_month[0]=matchTokens(tokens,at+has_year[0],"month","number");has_event[0]=matchTokens(tokens,at+has_year[0],"event");if(has_event[0])has_calc[0]=getMoveDays(tokens,at+has_year[0]+1,200,"event like easter");var at_range_sep;if(matchTokens(tokens,at+has_year[0],"month","weekday","[")){has_constrained_weekday[0]=getConstrainedWeekday(tokens,at+has_year[0]+3);has_calc[0]=getMoveDays(tokens,has_constrained_weekday[0][1],6,"constrained weekdays");at_range_sep=has_constrained_weekday[0][1]+(typeof has_calc[0]==="object"&&has_calc[0][1]?3:0)}else{at_range_sep=at+has_year[0]+(has_event[0]?typeof has_calc[0]==="object"&&has_calc[0][1]?4:1:2)}var at_sec_event_or_month;if((has_month[0]||has_event[0]||has_constrained_weekday[0])&&matchTokens(tokens,at_range_sep,"-")){has_year[1]=matchTokens(tokens,at_range_sep+1,"year");at_sec_event_or_month=at_range_sep+1+has_year[1];has_month[1]=matchTokens(tokens,at_sec_event_or_month,"month","number");if(!has_month[1]){has_event[1]=matchTokens(tokens,at_sec_event_or_month,"event");if(has_event[1]){has_calc[1]=getMoveDays(tokens,at_sec_event_or_month+1,366,"event like easter")}else if(matchTokens(tokens,at_sec_event_or_month,"month","weekday","[")){has_constrained_weekday[1]=getConstrainedWeekday(tokens,at_sec_event_or_month+3);has_calc[1]=getMoveDays(tokens,has_constrained_weekday[1][1],6,"constrained weekdays")}}}if(has_year[0]===has_year[1]&&(has_month[1]||has_event[1]||has_constrained_weekday[1])){if(has_month[0])checkIfDateIsValid(tokens[at+has_year[0]][0],tokens[at+has_year[0]+1][0],nrule,at+has_year[0]+1);if(has_month[1])checkIfDateIsValid(tokens[at_sec_event_or_month][0],tokens[at_sec_event_or_month+1][0],nrule,at_sec_event_or_month+1);var selector=function(tokens,at,nrule,has_year,has_event,has_calc,at_sec_event_or_month,has_constrained_weekday){return function(date){var start_of_next_year=new Date(date.getFullYear()+1,0,1);var movableDays,from_date;if(has_event[0]){movableDays=getMovableEventsForYear(has_year[0]?parseInt(tokens[at][0]):date.getFullYear());from_date=movableDays[tokens[at+has_year[0]][0]];if(typeof has_calc[0]==="object"&&has_calc[0][1]){var from_year_before_calc=from_date.getFullYear();from_date.setDate(from_date.getDate()+has_calc[0][0]);if(from_year_before_calc!==from_date.getFullYear())throw formatWarnErrorMessage(nrule,at+has_year[0]+has_calc[0][1]*3,t("movable not in year",{name:tokens[at+has_year[0]][0],days:has_calc[0][0]}))}}else if(has_constrained_weekday[0]){from_date=getDateForConstrainedWeekday(has_year[0]?tokens[at][0]:date.getFullYear(),tokens[at+has_year[0]][0],tokens[at+has_year[0]+1][0],has_constrained_weekday[0],has_calc[0])}else{from_date=new Date(has_year[0]?tokens[at][0]:date.getFullYear(),tokens[at+has_year[0]][0],tokens[at+has_year[0]+1][0])}var to_date;if(has_event[1]){movableDays=getMovableEventsForYear(has_year[1]?parseInt(tokens[at_sec_event_or_month-1][0]):date.getFullYear());to_date=movableDays[tokens[at_sec_event_or_month][0]];if(typeof has_calc[1]==="object"&&has_calc[1][1]){var to_year_before_calc=to_date.getFullYear();to_date.setDate(to_date.getDate()+has_calc[1][0]);if(to_year_before_calc!==to_date.getFullYear()){throw formatWarnErrorMessage(nrule,at_sec_event_or_month+has_calc[1][1],t("movable not in year",{name:tokens[at_sec_event_or_month][0],days:has_calc[1][0]}))}}}else if(has_constrained_weekday[1]){to_date=getDateForConstrainedWeekday(has_year[1]?tokens[at_sec_event_or_month-1][0]:date.getFullYear(),tokens[at_sec_event_or_month][0],tokens[at_sec_event_or_month+1][0],has_constrained_weekday[1],has_calc[1])}else{to_date=new Date(has_year[1]?tokens[at_sec_event_or_month-1][0]:date.getFullYear(),tokens[at_sec_event_or_month][0],tokens[at_sec_event_or_month+1][0]+1)}var inside=true;if(to_date<from_date){var tmp=to_date;to_date=from_date;from_date=tmp;inside=false}if(date.getTime()<from_date.getTime()){return[!inside,from_date]}else if(date.getTime()<to_date.getTime()){return[inside,to_date]}else{if(has_year[0]){return[!inside]}else{return[!inside,start_of_next_year]}}}}(tokens,at,nrule,has_year,has_event,has_calc,at_sec_event_or_month,has_constrained_weekday);if(push_to_month===true)rule.month.push(selector);else rule.monthday.push(selector);at=(has_constrained_weekday[1]?has_constrained_weekday[1][1]:at_sec_event_or_month+(has_event[1]?1:2))+(typeof has_calc[1]==="object"?has_calc[1][1]:0)}else if(has_month[0]){has_year=has_year[0];var year=tokens[at][0];var month=tokens[at+has_year][0];var first_round=true;do{var range_from=tokens[at+1+has_year][0];var is_range=matchTokens(tokens,at+2+has_year,"-","number");var period=undefined;var range_to=tokens[at+has_year+(is_range?3:1)][0]+1;if(is_range&&matchTokens(tokens,at+has_year+4,"/","number")){period=tokens[at+has_year+5][0];checkPeriod(at+has_year+5,period,"day")}if(first_round){var at_timesep_if_monthRange=at+has_year+1+(is_range?2:0)+(period?2:0)+!(is_range||period);if(matchTokens(tokens,at_timesep_if_monthRange,"timesep","number")&&(matchTokens(tokens,at_timesep_if_monthRange+2,"+")||matchTokens(tokens,at_timesep_if_monthRange+2,"-")||oh_mode!==0)){return parseMonthRange(tokens,at,true,true)}}if(range_to<range_from)throw formatWarnErrorMessage(nrule,at+has_year+3,t("day range reverse"));checkIfDateIsValid(month,range_from,nrule,at+1+has_year);checkIfDateIsValid(month,range_to-1,nrule,at+has_year+(is_range?3:1));var selector=function(year,has_year,month,range_from,range_to,period){return function(date){var start_of_next_year=new Date(date.getFullYear()+1,0,1);var from_date=new Date(has_year?year:date.getFullYear(),month,range_from);if(month===1&&range_from!==from_date.getDate())return[false];var to_date=new Date(from_date.getFullYear(),month,range_to);if(month===1&&is_range&&range_to!==to_date.getDate())return[false];if(date.getTime()<from_date.getTime())return[false,from_date];else if(date.getTime()>=to_date.getTime())return[false,start_of_next_year];else if(!period)return[true,to_date];var nday=Math.floor((date.getTime()-from_date.getTime())/msec_in_day);var in_period=nday%period;if(in_period===0)return[true,new Date(date.getFullYear(),date.getMonth(),date.getDate()+1)];else return[false,new Date(date.getFullYear(),date.getMonth(),date.getDate()+period-in_period)]}}(year,has_year,month,range_from,range_to,period);if(push_to_month===true)rule.month.push(selector);else rule.monthday.push(selector);at+=2+has_year+(is_range?2:0)+(period?2:0);first_round=false}while(matchTokens(tokens,at,",","number"))}else if(has_event[0]){var selector=function(tokens,at,nrule,has_year,add_days){return function(date){var movableDays=getMovableEventsForYear(has_year?tokens[at][0]:date.getFullYear());var event_date=movableDays[tokens[at+has_year][0]];if(!event_date)throw t("movable no formula",{name:tokens[at+has_year][0]});if(add_days[0]){event_date.setDate(event_date.getDate()+add_days[0]);if(date.getFullYear()!==event_date.getFullYear())throw formatWarnErrorMessage(nrule,at+has_year+add_days[1],t("movable not in year",{name:tokens[at+has_year][0],days:add_days[0]}))}if(date.getTime()<event_date.getTime())return[false,event_date];else if(event_date.getMonth()*100+event_date.getDate()===date.getMonth()*100+date.getDate())return[true,new Date(date.getFullYear(),date.getMonth(),date.getDate()+1)];else return[false,new Date(date.getFullYear()+1,0,1)]}}(tokens,at,nrule,has_year[0],has_calc[0]);if(push_to_month===true)rule.month.push(selector);else rule.monthday.push(selector);at+=has_year[0]+has_event[0]+(typeof has_calc[0][1]==="number"&&has_calc[0][1]?3:0)}else if(has_constrained_weekday[0]){at=parseMonthRange(tokens,at)}else if(matchTokens(tokens,at,"month")){return parseMonthRange(tokens,at,true,true)}else{return at}if(!matchTokens(tokens,at,","))break}return at}this.getStatePair=function(date){var resultstate=false;var changedate;var unknown=false;var comment;var match_rule;var date_matching_rules=[];for(var nrule=0;nrule<rules.length;nrule++){var matching_date_rule=true;for(var ndateselector=0;ndateselector<rules[nrule].date.length;ndateselector++){var dateselectors=rules[nrule].date[ndateselector];var has_matching_selector=false;for(var datesel=0;datesel<dateselectors.length;datesel++){var res=dateselectors[datesel](date);if(res[0]){has_matching_selector=true;if(typeof res[2]==="string"){comment=[res[2],nrule]}}if(typeof changedate==="undefined"||typeof res[1]==="object"&&res[1].getTime()<changedate.getTime())changedate=res[1]}if(!has_matching_selector){matching_date_rule=false;break}}if(matching_date_rule){if((rules[nrule].date.length>0||nrule>0&&rules[nrule].meaning&&rules[nrule-1].date.length===0)&&(rules[nrule].meaning||rules[nrule].unknown)&&!rules[nrule].wrapped&&!rules[nrule].additional&&!rules[nrule].fallback){date_matching_rules=[]}date_matching_rules.push(nrule)}}for(var nrule=0;nrule<date_matching_rules.length;nrule++){var rule=date_matching_rules[nrule];if(rules[rule].time.length===0){if(!rules[rule].fallback||rules[rule].fallback&&!(resultstate||unknown)){resultstate=rules[rule].meaning;unknown=rules[rule].unknown;match_rule=rule}}for(var timesel=0;timesel<rules[rule].time.length;timesel++){var res=rules[rule].time[timesel](date);if(res[0]){if(!rules[rule].fallback||rules[rule].fallback&&!(resultstate||unknown)){resultstate=rules[rule].meaning;unknown=rules[rule].unknown;match_rule=rule;if(typeof comment==="object"&&comment[0]===t("open end"))comment=undefined;if(res[2]===true&&(resultstate||unknown)){comment=[t("open end"),match_rule];resultstate=false;unknown=true;if(typeof rules[rule].time[timesel+1]==="function"){var next_res=rules[rule].time[timesel+1](date);if(!next_res[0]&&typeof next_res[1]==="object"&&rules[rule].time[timesel](new Date(date.getTime()-1))[0]){resultstate=false;unknown=false}}}if(rules[rule].fallback){if(typeof changedate==="undefined"||typeof res[1]!=="undefined"&&res[1]<changedate){changedate=res[1]}}}}if(typeof changedate==="undefined"||typeof res[1]==="object"&&res[1]<changedate)changedate=res[1]}}if(typeof rules[match_rule]==="object"&&typeof rules[match_rule].comment==="string"){comment=rules[match_rule].comment}else if(typeof comment==="object"){if(comment[1]===match_rule){comment=comment[0]}else{comment=undefined}}return[resultstate,changedate,unknown,comment,match_rule]};function prettifySelector(tokens,selector_start,selector_end,selector_type,conf){var prettified_value="";var at=selector_start;while(at<=selector_end){if(matchTokens(tokens,at,"weekday")){if(!conf.leave_weekday_sep_one_day_betw&&at-selector_start>1&&(matchTokens(tokens,at-1,",")||matchTokens(tokens,at-1,"-"))&&matchTokens(tokens,at-2,"weekday")&&tokens[at][0]===(tokens[at-2][0]+1)%7){prettified_value=prettified_value.substring(0,prettified_value.length-1)+conf.sep_one_day_between}prettified_value+=weekdays[tokens[at][0]]}else if(at-selector_start>0&&selector_type==="time"&&matchTokens(tokens,at-1,"timesep")&&matchTokens(tokens,at,"number")){prettified_value+=(tokens[at][0]<10?"0":"")+tokens[at][0].toString()}else if(selector_type==="time"&&conf.zero_pad_hour&&at!==tokens.length&&matchTokens(tokens,at,"number")&&matchTokens(tokens,at+1,"timesep")){prettified_value+=(tokens[at][0]<10?tokens[at][0]===0&&conf.one_zero_if_hour_zero?"":"0":"")+tokens[at][0].toString()}else if(selector_type==="time"&&at+2<=selector_end&&matchTokens(tokens,at,"number")&&matchTokens(tokens,at+1,"-")&&matchTokens(tokens,at+2,"number")){prettified_value+=(tokens[at][0]<10?tokens[at][0]===0&&conf.one_zero_if_hour_zero?"":"0":"")+tokens[at][0].toString();prettified_value+=":00-"+(tokens[at+2][0]<10?"0":"")+tokens[at+2][0].toString()+":00";at+=2}else if(matchTokens(tokens,at,"comment")){prettified_value+='"'+tokens[at][0].toString()+'"'}else if(matchTokens(tokens,at,"closed")){prettified_value+=conf.leave_off_closed?tokens[at][0]:conf.keyword_for_off_closed}else if(at-selector_start>0&&matchTokens(tokens,at,"number")&&(matchTokens(tokens,at-1,"month")&&selector_type==="month"||matchTokens(tokens,at-1,"week")&&selector_type==="week")){prettified_value+=" "+(conf.zero_pad_month_and_week_numbers&&tokens[at][0]<10?"0":"")+tokens[at][0]}else if(at-selector_start>0&&matchTokens(tokens,at,"month")&&matchTokens(tokens,at-1,"year")){prettified_value+=" "+months[[tokens[at][0]]]}else if(at-selector_start>0&&matchTokens(tokens,at,"event")&&matchTokens(tokens,at-1,"year")){prettified_value+=" "+tokens[at][0]}else if(matchTokens(tokens,at,"month")){prettified_value+=months[[tokens[at][0]]];if(at+1<=selector_end&&matchTokens(tokens,at+1,"weekday"))prettified_value+=" "}else if(at+2<=selector_end&&(matchTokens(tokens,at,"-")||matchTokens(tokens,at,"+"))&&matchTokens(tokens,at+1,"number","calcday")){prettified_value+=" "+tokens[at][0]+tokens[at+1][0]+" day"+(Math.abs(tokens[at+1][0])===1?"":"s");at+=2}else if(at===selector_end&&selector_type==="weekday"&&tokens[at][0]===":");else if(at===selector_end&&selector_type==="time"&&tokens[at][0]===",");else{prettified_value+=tokens[at][0].toString()}at++}return prettified_value}this.getState=function(date){var it=this.getIterator(date);return it.getState()};this.getUnknown=function(date){var it=this.getIterator(date);return it.getUnknown()};this.getStateString=function(date,past){var it=this.getIterator(date);return it.getStateString(past)};this.getComment=function(date){var it=this.getIterator(date);return it.getComment()};this.getMatchingRule=function(date){var it=this.getIterator(date);return it.getMatchingRule()};this.getWarnings=function(){var it=this.getIterator();return getWarnings(it)};this.prettifyValue=function(argument_hash){this.getWarnings();return prettifyValue(argument_hash)};this.getNextChange=function(date,maxdate){var it=this.getIterator(date);if(!it.advance(maxdate))return undefined;return it.getDate()};this.isWeekStable=function(){return week_stable};this.isEqualTo=function(second_oh_object,start_date){if(typeof start_date==="undefined"){var start_date=new Date}var datelimit;if(this.isWeekStable()&&second_oh_object.isWeekStable()){datelimit=new Date(start_date.getTime()+msec_in_day*10)}else{datelimit=new Date(start_date.getTime()+msec_in_day*366*5)}var first_it=this.getIterator(start_date);var second_it=second_oh_object.getIterator(start_date);while(first_it.advance(datelimit)){second_it.advance(datelimit);var not_equal=[];if(first_it.getDate().getTime()!==second_it.getDate().getTime()){not_equal.push("getDate")}if(first_it.getState()!==second_it.getState()){not_equal.push("getState")}if(first_it.getUnknown()!==second_it.getUnknown()){not_equal.push("getUnknown")}if(first_it.getComment()!==second_it.getComment()){not_equal.push("getComment")}if(not_equal.length){var deviation_for_time={};deviation_for_time[first_it.getDate().getTime()]=not_equal;return[false,{matching_rule:first_it.getMatchingRule(),matching_rule_other:second_it.getMatchingRule(),deviation_for_time:deviation_for_time}]}}return[true]};this.getOpenIntervals=function(from,to){var res=[];var it=this.getIterator(from);if(it.getState()||it.getUnknown()){res.push([from,undefined,it.getUnknown(),it.getComment()])}while(it.advance(to)){if(it.getState()||it.getUnknown()){if(res.length!==0&&typeof res[res.length-1][1]==="undefined"){res[res.length-1][1]=it.getDate()}res.push([it.getDate(),undefined,it.getUnknown(),it.getComment()])}else{if(res.length!==0&&typeof res[res.length-1][1]==="undefined"){res[res.length-1][1]=it.getDate()}}}if(res.length>0&&typeof res[res.length-1][1]==="undefined"){res[res.length-1][1]=to}return res};this.getOpenDuration=function(from,to){var open=0;var unknown=0;var it=this.getIterator(from);var prevdate=it.getState()||it.getUnknown()?from:undefined;var prevstate=it.getState();var prevunknown=it.getUnknown();while(it.advance(to)){if(it.getState()||it.getUnknown()){if(typeof prevdate==="object"){if(prevunknown)unknown+=it.getDate().getTime()-prevdate.getTime();else if(prevstate)open+=it.getDate().getTime()-prevdate.getTime()}prevdate=it.getDate();prevstate=it.getState();prevunknown=it.getUnknown()}else{if(typeof prevdate==="object"){if(prevunknown)unknown+=it.getDate().getTime()-prevdate.getTime();else open+=it.getDate().getTime()-prevdate.getTime();prevdate=undefined}}}if(typeof prevdate==="object"){if(prevunknown)unknown+=to.getTime()-prevdate.getTime();else open+=to.getTime()-prevdate.getTime()}return[open,unknown]};this.getIterator=function(date){return new function(oh){if(typeof date==="undefined")date=new Date;var prevstate=[undefined,date,undefined,undefined,undefined];var state=oh.getStatePair(date);this.getDate=function(){return prevstate[1]};this.setDate=function(date){if(typeof date!=="object")throw t("date parameter needed");prevstate=[undefined,date,undefined,undefined,undefined];state=oh.getStatePair(date)};this.getState=function(){return state[0]};this.getUnknown=function(){return state[2]};this.getStateString=function(past){return state[0]?"open":state[2]?"unknown":past?"closed":"close"};this.getComment=function(){return state[3]};this.getMatchingRule=function(){if(typeof state[4]==="undefined")return undefined;return rules[state[4]].build_from_token_rule[2]};this.advance=function(datelimit){if(typeof datelimit==="undefined"){datelimit=new Date(prevstate[1].getTime()+msec_in_day*366*5)}else if(datelimit.getTime()<=prevstate[1].getTime()){return false}do{if(typeof state[1]==="undefined"){return false}if(state[1].getTime()<=prevstate[1].getTime()){throw"Fatal: infinite loop in nextChange"}if(state[1].getTime()>=datelimit.getTime()){return false}prevstate=state;state=oh.getStatePair(prevstate[1])}while(state[0]===prevstate[0]&&state[2]===prevstate[2]&&state[3]===prevstate[3]);return true}}(this)}}return index}));
|
|---|