{"version":3,"file":"./scripts/accommodationfrontpagelocation.js","mappings":";;;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACO,MAAMA,gBAAgB,GAAGA,CAAA,KAAM;EACpC,MAAMC,aAAa,GAAG,+BAAiCC,QAAQ,CAACC,cAAc,CAAC,8BAA8B,CAAE;EAC/G,MAAMC,cAAc,GAAG,8BAAgCF,QAAQ,CAACC,cAAc,CAAC,oCAAoC,CAAE;EACrH,MAAME,qBAAqB,GAAG,8BAAgCH,QAAQ,CAACC,cAAc,CAAC,uCAAuC,CAAE;EAC/H,MAAMG,gBAAgB,GAAG,8BAAgCJ,QAAQ,CAACC,cAAc,CAAC,6BAA6B,CAAE;EAChH,MAAMI,kBAAkB,GAAG,8BAAgCL,QAAQ,CAACC,cAAc,CAAC,wCAAwC,CAAE;EAC7H,MAAMK,qBAAqB,GAAG,8BAAgCN,QAAQ,CAACC,cAAc,CAAC,6BAA6B,CAAE;EAErH,OAAO;IACL;AACJ;AACA;AACA;IACIM,eAAe,EAAGC,SAAS,IAAK;MAC9BT,aAAa,CAACU,KAAK,GAAGD,SAAS;MAC/BN,cAAc,CAACO,KAAK,GAAG,IAAI;MAC3BN,qBAAqB,CAACM,KAAK,GAAG,IAAI;MAClCV,aAAa,CAACW,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;QAAEC,UAAU,EAAE,IAAI;QAAEC,OAAO,EAAE;MAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAEA,CAACN,SAAS,EAAEO,WAAW,EAAEC,aAAa,KAAK;MAC1DjB,aAAa,CAACU,KAAK,GAAGD,SAAS;MAC/BF,qBAAqB,CAACG,KAAK,GAAGD,SAAS;MACvC,IAAIO,WAAW,IAAI,IAAI,IAAIA,WAAW,KAAK,EAAE,IAAIA,WAAW,KAAK,MAAM,EAAE;QACvEb,cAAc,CAACO,KAAK,GAAGO,aAAa;QACpCZ,gBAAgB,CAACK,KAAK,GAAGM,WAAW;QACpCV,kBAAkB,CAACI,KAAK,GAAGO,aAAa;MAC1C;MAEAd,cAAc,CAACQ,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;QAAEC,UAAU,EAAE,IAAI;QAAEC,OAAO,EAAE;MAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F;EACF,CAAC;AACH,CAAC;;;;;;;;;;;;;;;AC3CD;AACyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAASK,SAASA,CAACC,CAAC,EAAE;EACpB,OAAOA,CAAC,GAAG,GAAG,GAAG,CAAC,GAAGA,CAAC,GAAGA,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAGA,CAAC,IAAIA,CAAC,CAAC,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,WAAW,EAAE;EACzE;EACA,MAAMC,KAAK,GAAG,6BAA+BzB,QAAQ,CAAC0B,eAAe,CAAC,4BAA4B,EAAE,QAAQ,CAAE;EAC9GD,KAAK,CAACE,YAAY,CAAC,IAAI,EAAEL,aAAa,CAACM,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAC;EACpDJ,KAAK,CAACE,YAAY,CAAC,IAAI,EAAEL,aAAa,CAACQ,CAAC,CAACD,QAAQ,CAAC,CAAC,CAAC;EACpDJ,KAAK,CAACE,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;;EAEpCJ,UAAU,CAACQ,WAAW,CAACN,KAAK,CAAC;EAE7B,MAAMO,SAAS,GAAGP,KAAK,CAACQ,qBAAqB,CAAC,CAAC;EAC/C,MAAMC,QAAQ,GAAGV,WAAW,CAACS,qBAAqB,CAAC,CAAC;EAEpD,MAAME,IAAI,GAAGH,SAAS,CAACG,IAAI,GAAGD,QAAQ,CAACC,IAAI,GAAId,MAAM,CAACe,WAAW,GAAG,CAAE;EACtE,IAAIC,GAAG,GAAGL,SAAS,CAACK,GAAG,GAAGH,QAAQ,CAACG,GAAG,GAAIhB,MAAM,CAACiB,YAAY,GAAG,CAAE;EAElEjB,MAAM,CAACkB,KAAK,CAACJ,IAAI,GAAG,GAAGA,IAAI,IAAI;EAC/Bd,MAAM,CAACkB,KAAK,CAACF,GAAG,GAAG,GAAGA,GAAG,IAAI;;EAE7B;EACApB,qDAAa,CAACQ,KAAK,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASe,WAAWA,CAACC,OAAO,EAAE;EAC5B,OAAOA,OAAO,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IAC5B,MAAMC,SAAS,GAAG,EAAE;IACpB;IACA,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACL,CAAC,CAACM,SAAS,GAAGL,CAAC,CAACK,SAAS,CAAC;IACjD,IAAIH,KAAK,GAAGD,SAAS,EAAE;MACrB,OAAOF,CAAC,CAACM,SAAS,GAAGL,CAAC,CAACK,SAAS,CAAC,CAAC;IACpC;;IAEA;IACA,OAAON,CAAC,CAACO,UAAU,GAAGN,CAAC,CAACM,UAAU,CAAC,CAAC;EACtC,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,oBAAoBA,CAAC9B,MAAM,EAAE+B,OAAO,GAAG,CAAC,EAAE;EACjD,MAAMC,WAAW,GAAGC,MAAM,CAACC,gBAAgB,CAAClC,MAAM,CAAC;EACnD,MAAMmC,UAAU,GAAGF,MAAM,CAACC,gBAAgB,CAAClC,MAAM,EAAE,QAAQ,CAAC;EAE5D,MAAMoC,KAAK,GAAGC,UAAU,CAACF,UAAU,CAACC,KAAK,CAAC;EAC1C,MAAME,MAAM,GAAGD,UAAU,CAACF,UAAU,CAACG,MAAM,CAAC;EAC5C,MAAMxB,IAAI,GAAGuB,UAAU,CAACF,UAAU,CAACrB,IAAI,CAAC,GAAGuB,UAAU,CAACL,WAAW,CAAClB,IAAI,CAAC;EACvE,MAAME,GAAG,GAAGqB,UAAU,CAACF,UAAU,CAACnB,GAAG,CAAC,GAAGqB,UAAU,CAACL,WAAW,CAAChB,GAAG,CAAC;EAEpE,OAAO;IACLF,IAAI,EAAEA,IAAI,GAAGiB,OAAO;IACpBf,GAAG,EAAEA,GAAG,GAAGe,OAAO;IAClBQ,KAAK,EAAEzB,IAAI,GAAGsB,KAAK,GAAGL,OAAO;IAC7BS,MAAM,EAAExB,GAAG,GAAGsB,MAAM,GAAGP;EACzB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,SAASU,cAAcA,CAACzC,MAAM,EAAE;EAC9B,MAAM;IAAE6B,UAAU;IAAED,SAAS;IAAEb,WAAW;IAAEE;EAAa,CAAC,GAAGjB,MAAM,CAAC,CAAC;EACrE,OAAO;IACLc,IAAI,EAAEe,UAAU;IAChBb,GAAG,EAAEY,SAAS;IACdW,KAAK,EAAEV,UAAU,GAAGd,WAAW;IAC/ByB,MAAM,EAAEZ,SAAS,GAAGX;EACtB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMyB,YAAY,GAAGA,CAACC,EAAE,EAAEC,EAAE,KAAK;EAC/B,MAAMC,UAAU,GAAGF,EAAE,CAAC7B,IAAI,GAAG8B,EAAE,CAACL,KAAK,IAAII,EAAE,CAACJ,KAAK,GAAGK,EAAE,CAAC9B,IAAI;EAC3D,MAAMgC,QAAQ,GAAGH,EAAE,CAAC3B,GAAG,GAAG4B,EAAE,CAACJ,MAAM,IAAIG,EAAE,CAACH,MAAM,GAAGI,EAAE,CAAC5B,GAAG;EACzD,OAAO6B,UAAU,IAAIC,QAAQ;AAC/B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAACC,OAAO,EAAEC,OAAO,EAAEC,aAAa,EAAE;EACvD,MAAMC,KAAK,GAAGrB,oBAAoB,CAACkB,OAAO,EAAE,CAAC,CAAC;EAC9C,MAAMI,KAAK,GAAGtB,oBAAoB,CAACmB,OAAO,CAAC;EAE3C,MAAMI,IAAI,GAAGZ,cAAc,CAACO,OAAO,CAAC,CAAC,CAAC;EACtC,MAAMM,IAAI,GAAGb,cAAc,CAACQ,OAAO,CAAC,CAAC,CAAC;;EAEtC,MAAMM,iBAAiB,GAAGb,YAAY,CAACS,KAAK,EAAEC,KAAK,CAAC,CAAC,CAAC;EACtD,MAAMI,iBAAiB,GAAGd,YAAY,CAACS,KAAK,EAAEG,IAAI,CAAC,CAAC,CAAC;EACrD,MAAMG,aAAa,GAAGf,YAAY,CAACW,IAAI,EAAEC,IAAI,CAAC,CAAC,CAAC;;EAEhD;EACAJ,aAAa,GAAG,CAACO,aAAa;EAE9B,MAAMC,SAAS,GAAGR,aAAa,GAAGK,iBAAiB,IAAIC,iBAAiB,GAAGD,iBAAiB;EAE5F,OAAO;IACLG,SAAS;IACTC,QAAQ,EAAEC,iBAAiB,CAACT,KAAK,EAAEG,IAAI;EACzC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASM,iBAAiBA,CAACT,KAAK,EAAEG,IAAI,EAAE;EACtC,MAAMO,WAAW,GAAGnC,IAAI,CAACoC,GAAG,CAAC,CAAC,EAAEpC,IAAI,CAACoC,GAAG,CAACX,KAAK,CAACrC,IAAI,EAAEwC,IAAI,CAACxC,IAAI,CAAC,GAAGY,IAAI,CAACqC,GAAG,CAACZ,KAAK,CAACZ,KAAK,EAAEe,IAAI,CAACf,KAAK,CAAC,CAAC;EACpG,MAAMyB,SAAS,GAAGtC,IAAI,CAACoC,GAAG,CAAC,CAAC,EAAEpC,IAAI,CAACoC,GAAG,CAACX,KAAK,CAACnC,GAAG,EAAEsC,IAAI,CAACtC,GAAG,CAAC,GAAGU,IAAI,CAACqC,GAAG,CAACZ,KAAK,CAACX,MAAM,EAAEc,IAAI,CAACd,MAAM,CAAC,CAAC;EAClG,MAAMyB,WAAW,GAAGvC,IAAI,CAACwC,IAAI,CAACL,WAAW,IAAI,CAAC,GAAGG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;EAClE,OAAOC,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,oBAAoBA,CAACC,QAAQ,EAAEC,QAAQ,EAAEnB,aAAa,EAAEoB,eAAe,EAAE;EAChF,MAAMC,SAAS,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC;EACxI,MAAMC,eAAe,GAAG,EAAE;EAE1B,KAAK,MAAMxB,OAAO,IAAIoB,QAAQ,EAAE;IAC9B,MAAMK,YAAY,GAAG,EAAE;;IAEvB;IACA,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;MAChC,IAAIb,SAAS,GAAG,KAAK;MACrB,MAAMiB,SAAS,GAAG,EAAE;MACpB;MACA,KAAK,MAAM1B,OAAO,IAAIoB,QAAQ,EAAE;QAC9B,IAAIrB,OAAO,KAAKC,OAAO,EAAE;UACvB;UACAD,OAAO,CAAC4B,SAAS,CAACC,MAAM,CAAC,GAAGN,SAAS,CAAC;UACtCvB,OAAO,CAAC4B,SAAS,CAACE,GAAG,CAACJ,QAAQ,CAAC;UAE/B,MAAMK,WAAW,GAAGhC,cAAc,CAACC,OAAO,EAAEC,OAAO,EAAEC,aAAa,CAAC;UACnE,IAAI6B,WAAW,CAACrB,SAAS,EAAE;YACzBA,SAAS,GAAG,IAAI;YAChB,MAAM,CAAC;UACT,CAAC,MAAM;YACLiB,SAAS,CAACK,IAAI,CAACD,WAAW,CAACpB,QAAQ,CAAC;UACtC;QACF;MACF;;MAEA;MACA,IAAI,CAACD,SAAS,EAAE;QACde,YAAY,CAACO,IAAI,CAAC;UAAEN,QAAQ;UAAEf,QAAQ,EAAEjC,IAAI,CAACqC,GAAG,CAAC,GAAGY,SAAS;QAAE,CAAC,CAAC;MACnE;IACF;;IAEA;IACA3B,OAAO,CAAC4B,SAAS,CAACC,MAAM,CAAC,GAAGN,SAAS,CAAC;IAEtC,IAAIE,YAAY,CAACQ,MAAM,GAAG,CAAC,EAAE;MAC3B,IAAIX,eAAe,EAAE;QACnBtB,OAAO,CAAC4B,SAAS,CAACE,GAAG,CAACL,YAAY,CAACpD,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACoC,QAAQ,GAAGrC,CAAC,CAACqC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAEe,QAAQ,CAAC,CAAC,CAAC;MAC5F,CAAC,MAAM;QACL1B,OAAO,CAAC4B,SAAS,CAACE,GAAG,CAACL,YAAY,CAAC,CAAC,CAAC,EAAEC,QAAQ,CAAC;MAClD;IACF,CAAC,MAAM;MACLF,eAAe,CAACQ,IAAI,CAAChC,OAAO,CAAC;IAC/B;EACF;EAEA,OAAOwB,eAAe;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASU,2BAA2BA,CAAC9D,OAAO,EAAEkD,eAAe,EAAE;EAC7D,MAAMa,aAAa,GAAGhE,WAAW,CAACC,OAAO,CAAC;EAC1C,MAAMoD,eAAe,GAAGL,oBAAoB,CAACgB,aAAa,EAAEA,aAAa,EAAE,IAAI,EAAEb,eAAe,CAAC;EAEjG,IAAIE,eAAe,CAACS,MAAM,GAAG,CAAC,EAAE;IAC9B,MAAMG,kBAAkB,GAAGjB,oBAAoB,CAACK,eAAe,EAAEW,aAAa,EAAE,KAAK,EAAEb,eAAe,CAAC,CAAC,CAAC;;IAEzG;IACAc,kBAAkB,CAACC,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACpE,KAAK,CAACqE,OAAO,GAAG,KAAK,CAAC;EAC1D;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASC,YAAYA,CAACC,GAAG,EAAE;EACzB,MAAMC,WAAW,GAAG,0CAA0C;EAE9D,MAAMC,aAAa,GAAGA,CAAA,KAAM;IAC1B,OAAO,8BAAgC,CAAC,GAAGF,GAAG,CAACG,gBAAgB,CAAC,IAAIF,WAAW,EAAE,CAAC,CAAC;EACrF,CAAC;EAED,OAAO;IACL;AACJ;AACA;AACA;AACA;IACIG,aAAa,EAAEA,CAACnG,WAAW,EAAEP,SAAS,KAAK;MACzCO,WAAW,GAAGA,WAAW,IAAI,MAAM;MACnCP,SAAS,GAAGA,SAAS,IAAI,MAAM;MAC/B,OAAOsG,GAAG,CAACK,aAAa,CAAC,IAAIJ,WAAW,uBAAuBhG,WAAW,uBAAuBP,SAAS,IAAI,CAAC;IACjH,CAAC;IAED;AACJ;AACA;IACIwG,aAAa;IAEb;AACJ;AACA;IACII,qBAAqB,EAAEA,CAAA,KAAM;MAC3BJ,aAAa,CAAC,CAAC,CAACN,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACV,SAAS,CAACC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImB,iBAAiB,EAAEA,CAACC,eAAe,EAAEC,KAAK,EAAE/G,SAAS,EAAEO,WAAW,EAAEO,aAAa,KAAK;MACpF,MAAMD,MAAM,GAAGrB,QAAQ,CAACwH,aAAa,CAAC,KAAK,CAAC;MAC5CnG,MAAM,CAAC4E,SAAS,CAACE,GAAG,CAACY,WAAW,EAAEO,eAAe,KAAK,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC;MAC5FjG,MAAM,CAACoG,OAAO,CAACF,KAAK,GAAGA,KAAK;MAC5BlG,MAAM,CAACoG,OAAO,CAACjH,SAAS,GAAGA,SAAS;MACpCa,MAAM,CAACoG,OAAO,CAAC1G,WAAW,GAAGA,WAAW;MACxCM,MAAM,CAACoG,OAAO,CAACnG,aAAa,GAAGoG,IAAI,CAACC,SAAS,CAACrG,aAAa,CAAC;MAC5DwF,GAAG,CAAC/E,WAAW,CAACV,MAAM,CAAC;MACvB,OAAOA,MAAM;IACf,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIuG,gBAAgB,EAAGC,OAAO,IAAK;MAC7B,OAAO,4BAA8BA,OAAO,CAACC,OAAO,CAAC,IAAIf,WAAW,EAAE,CAAC;IACzE;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgB,YAAYA,CAACC,GAAG,EAAElB,GAAG,EAAEmB,KAAK,EAAE;EAC5C,MAAM;IAAEjB,aAAa;IAAEE,aAAa;IAAEE,qBAAqB;IAAEC,iBAAiB;IAAEO;EAAiB,CAAC,GAAGf,YAAY,CAACC,GAAG,CAAC;;EAEtH;AACF;EACE,IAAIoB,qBAAqB;EACzB,MAAMC,aAAa,GAAIC,KAAK,IAAK;IAC/BhB,qBAAqB,CAAC,CAAC;IAEvB,MAAM/F,MAAM,GAAGuG,gBAAgB,CAACQ,KAAK,CAACC,MAAM,CAAC;IAC7ChH,MAAM,CAAC4E,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;IACjC+B,qBAAqB,CAAC7G,MAAM,CAACoG,OAAO,CAAC;EACvC,CAAC;EAED,OAAO;IACL;AACJ;AACA;AACA;IACIU,aAAa,EAAGG,QAAQ,IAAK;MAC3BJ,qBAAqB,GAAGI,QAAQ;IAClC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAEA,CAACC,aAAa,EAAEC,QAAQ,EAAEC,YAAY,KAAK;MACzD,IAAIC,SAAS,GAAG,CAAC;MACjB,MAAMC,cAAc,GAAGZ,GAAG,CAACa,YAAY,CAAC,SAAS,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAAChC,GAAG,CAACiC,MAAM,CAAC;;MAEzE;AACN;AACA;MACM,SAASC,OAAOA,CAACC,IAAI,EAAE;QACrB,IAAIN,SAAS,KAAK,CAAC,EAAE;UACnBA,SAAS,GAAGM,IAAI;QAClB;QAEA,MAAMC,OAAO,GAAGD,IAAI,GAAGN,SAAS;QAChC,MAAMQ,QAAQ,GAAGpG,IAAI,CAACqC,GAAG,CAAC8D,OAAO,GAAGT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;;QAElD;QACA,MAAMW,aAAa,GAAGlI,SAAS,CAACiI,QAAQ,CAAC;;QAEzC;QACA,MAAME,UAAU,GAAGT,cAAc,CAAC9B,GAAG,CAAC,CAACwC,KAAK,EAAEC,KAAK,KAAK;UACtD,OAAOD,KAAK,GAAG,CAACd,aAAa,CAACe,KAAK,CAAC,GAAGD,KAAK,IAAIF,aAAa;QAC/D,CAAC,CAAC;;QAEF;QACApB,GAAG,CAACrG,YAAY,CAAC,SAAS,EAAE0H,UAAU,CAACG,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAIL,QAAQ,GAAG,CAAC,EAAE;UAChBM,qBAAqB,CAACT,OAAO,CAAC;UAC9B;QACF;QAEA,IAAIN,YAAY,IAAI,IAAI,EAAE;UACxBA,YAAY,CAAC,CAAC;QAChB;MACF;MAEAe,qBAAqB,CAACT,OAAO,CAAC;IAChC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIU,UAAU,EAAGpC,eAAe,IAAK;MAC/B;MACA,MAAMqC,YAAY,GAAG1B,KAAK,CAACnB,GAAG,CAAC8C,EAAE,KAAK;QAAEpJ,SAAS,EAAEoJ,EAAE,CAACpJ,SAAS;QAAEqJ,IAAI,EAAED,EAAE,CAACE,WAAW;QAAElI,CAAC,EAAEgI,EAAE,CAACG,eAAe,CAACnI,CAAC;QAAEE,CAAC,EAAE8H,EAAE,CAACG,eAAe,CAACjI,CAAC;QAAEf,WAAW,EAAE,IAAI;QAAEiJ,cAAc,EAAEJ,EAAE,CAACI;MAAe,CAAC,CAAC,CAAC;;MAEjM;MACA,IAAI7I,CAAC,GAAGmG,eAAe,KAAK,KAAK,GAC7BqC,YAAY,GACZ1B,KAAK,CAACgC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACF,cAAc,CAACG,WAAW,CAAC,CAAC,KAAK7C,eAAe,CAAC6C,WAAW,CAAC,CAAC,CAAC,CAAClC,KAAK;;MAE3F;MACA,IAAI9G,CAAC,CAACmF,MAAM,KAAK,CAAC,EAAE;QAClBnF,CAAC,GAAGwI,YAAY,CAACS,MAAM,CAACF,CAAC,IAAIA,CAAC,CAACF,cAAc,CAACG,WAAW,CAAC,CAAC,KAAK7C,eAAe,CAAC6C,WAAW,CAAC,CAAC,CAAC;MAChG;MAEAhJ,CAAC,CAACuF,OAAO,CAAEkD,EAAE,IAAK;QAChB,MAAMtI,aAAa,GAAG;UAAEM,CAAC,EAAEgI,EAAE,CAAChI,CAAC;UAAEE,CAAC,EAAE8H,EAAE,CAAC9H;QAAE,CAAC;QAC1C,MAAMT,MAAM,GAAGgG,iBAAiB,CAACC,eAAe,EAAEsC,EAAE,CAACC,IAAI,EAAED,EAAE,CAACpJ,SAAS,EAAEoJ,EAAE,CAAC7I,WAAW,EAAEO,aAAa,CAAC;QACvGF,iBAAiB,CAACC,MAAM,EAAEC,aAAa,EAAE0G,GAAG,EAAElB,GAAG,CAACuD,aAAa,CAAC;QAChEhJ,MAAM,CAACiJ,gBAAgB,CAAC,OAAO,EAAEnC,aAAa,CAAC;MACjD,CAAC,CAAC;MAEF,MAAM1F,OAAO,GAAGuE,aAAa,CAAC,CAAC;MAE/BT,2BAA2B,CAAC9D,OAAO,EAAE6E,eAAe,KAAK,KAAK,CAAC;MAE/D7E,OAAO,CAACiE,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACV,SAAS,CAACE,GAAG,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;AACJ;AACA;IACIoE,0BAA0B,EAAEA,CAAA,KAAM;MAChC,MAAM9H,OAAO,GAAGuE,aAAa,CAAC,CAAC;MAC/BvE,OAAO,CAACiE,OAAO,CAAErF,MAAM,IAAK;QAC1BD,iBAAiB,CAACC,MAAM,EAAEqG,IAAI,CAAC8C,KAAK,CAACnJ,MAAM,CAACoG,OAAO,CAACnG,aAAa,CAAC,EAAE0G,GAAG,EAAElB,GAAG,CAACuD,aAAa,CAAC;MAC7F,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;IACII,aAAa,EAAEA,CAAA,KAAM;MACnB,MAAMhI,OAAO,GAAGuE,aAAa,CAAC,CAAC;MAC/BvE,OAAO,CAACiE,OAAO,CAAErF,MAAM,IAAK;QAC1BA,MAAM,CAACqJ,mBAAmB,CAAC,OAAO,EAAEvC,aAAa,CAAC;QAClDlH,qDAAa,CAACI,MAAM,CAAC;MACvB,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIsJ,eAAe,EAAEA,CAAC5J,WAAW,EAAEP,SAAS,KAAK;MAC3C4G,qBAAqB,CAAC,CAAC;MAEvB,MAAM/F,MAAM,GAAG6F,aAAa,CAACnG,WAAW,EAAEP,SAAS,CAAC;MACpD,IAAIa,MAAM,IAAI,IAAI,EAAE;QAClBA,MAAM,CAAC4E,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;MACnC;IACF;EACF,CAAC;AACH;AAAC;;;;;;;;;;;;;;;ACvbD;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMyE,KAAK,GAAG,SAAAA,CAAUC,EAAE,EAAE;EACjC;EACA,IAAI,OAAOA,EAAE,KAAK,UAAU,EAAE;IAC5B;EACF;;EAEA;EACA,IAAI7K,QAAQ,CAAC8K,UAAU,KAAK,UAAU,EAAE;IACtC,OAAOD,EAAE,CAAC,CAAC;EACb;;EAEA;EACA7K,QAAQ,CAACsK,gBAAgB,CAAC,kBAAkB,EAAEO,EAAE,EAAE,KAAK,CAAC;AAC1D,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAM5J,aAAa,GAAI8J,EAAE,IAAK;EACnC,IAAI,OAAOA,EAAE,CAAC7E,MAAM,KAAK,WAAW,EAAE;IACpC6E,EAAE,CAAC7E,MAAM,CAAC,CAAC;EACb,CAAC,MAAM;IACL6E,EAAE,CAACC,UAAU,CAACC,WAAW,CAACF,EAAE,CAAC;EAC/B;AACF,CAAC;;;;;;UChCD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;ACNA;;AAEA;AACA;AACA;AACA;;AAE0C;AACuB;AACO;AAExE,MAAMG,8BAA8B,GAAGA,CAAA,KAAM;EAC3C,MAAMC,IAAI,GAAG,4BAA8BnL,QAAQ,CAACmH,aAAa,CAAC,mCAAmC,CAAE;EACvG,MAAMiE,OAAO,GAAG,4BAA8BpL,QAAQ,CAACmH,aAAa,CAAC,oCAAoC,CAAE;EAC3G,MAAML,GAAG,GAAG,4BAA8BqE,IAAI,CAAChE,aAAa,CAAC,wCAAwC,CAAE;EACvG,MAAMa,GAAG,GAAG,yBAA2BmD,IAAI,CAAChE,aAAa,CAAC,wCAAwC,CAAE;EAEpG,MAAMc,KAAK,GAAG,gCAAkC3E,MAAM,CAAC,oCAAoC,CAAC,CAAC2E,KAAM;EACnG,MAAMoD,UAAU,GAAG/H,MAAM,CAAC,oCAAoC,CAAC,CAAC+H,UAAU;EAC1E,IAAIC,oBAAoB,GAAGhI,MAAM,CAAC,oCAAoC,CAAC,CAACiI,iBAAiB;EAEzF,MAAM;IAAEhL,eAAe;IAAEO;EAAgB,CAAC,GAAGhB,qFAAgB,CAAC,CAAC;EAC/D,MAAM;IAAEyI,cAAc;IAAEmB,UAAU;IAAEa,0BAA0B;IAAEE,aAAa;IAAEE,eAAe;IAAExC;EAAc,CAAC,GAAGJ,6EAAY,CAACC,GAAG,EAAElB,GAAG,EAAEmB,KAAK,CAAC;EAE/IyB,UAAU,CAAC4B,oBAAoB,CAAC;;EAEhC;AACF;AACA;AACA;EACE,MAAME,gBAAgB,GAAG,MAAOxB,cAAc,IAAK;IACjD,OAAO,IAAIyB,OAAO,CAAEC,OAAO,IAAK;MAC9B,IAAIJ,oBAAoB,KAAKtB,cAAc,EAAE;QAC3C0B,OAAO,CAAC,CAAC;QACT;MACF;MAEAjB,aAAa,CAAC,CAAC;MACfa,oBAAoB,GAAGtB,cAAc;MAErC,MAAM2B,cAAc,GAAGL,oBAAoB,KAAK,KAAK,GACjDD,UAAU,GACVpD,KAAK,CAACgC,IAAI,CAACL,EAAE,IAAIA,EAAE,CAACI,cAAc,CAACG,WAAW,CAAC,CAAC,KAAKmB,oBAAoB,CAACnB,WAAW,CAAC,CAAC,CAAC,CAACwB,cAAc;MAE3GpD,cAAc,CAACoD,cAAc,EAAE,GAAG,EAAE,MAAM;QACxCjC,UAAU,CAAC4B,oBAAoB,CAAC;QAChCI,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;MAEF1D,GAAG,CAACf,gBAAgB,CAAC,oBAAoB,CAAC,CAACP,OAAO,CAACkF,CAAC,IAAIA,CAAC,CAAC3F,SAAS,CAACC,MAAM,CAAC,WAAW,CAAC,CAAC;MACxF,IAAIoF,oBAAoB,KAAK,KAAK,EAAE;QAClCtD,GAAG,CAACf,gBAAgB,CAAC,oBAAoB,CAAC,CAACP,OAAO,CAACkF,CAAC,IAAIA,CAAC,CAAC3F,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC,CAAC;MACvF,CAAC,MAAM;QACLnG,QAAQ,CAACC,cAAc,CAACqL,oBAAoB,CAACO,WAAW,CAAC,CAAC,CAAC,CAAC5F,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;MACxF;MAEAiF,OAAO,CAACnE,gBAAgB,CAAC,YAAY,CAAC,CAACP,OAAO,CAACkF,CAAC,IAAIA,CAAC,CAAC3F,SAAS,CAACC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;MAClGkF,OAAO,CAACnE,gBAAgB,CAAC,UAAU,CAAC,CAACP,OAAO,CAACkF,CAAC,IAAIA,CAAC,CAAC3F,SAAS,CAACC,MAAM,CAAC,WAAW,CAAC,CAAC;MAClF,IAAIoF,oBAAoB,KAAK,KAAK,EAAE;QAClCF,OAAO,CAACnE,gBAAgB,CAAC,YAAY,CAAC,CAACP,OAAO,CAACkF,CAAC,IAAIA,CAAC,CAAC3F,SAAS,CAACE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;MACjG,CAAC,MAAM;QACLiF,OAAO,CAACjE,aAAa,CAAC,eAAemE,oBAAoB,EAAE,CAAC,EAAErF,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;MAC1F;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAM2F,gBAAgB,GAAI/K,WAAW,IAAK;IACxCqK,OAAO,CAACnE,gBAAgB,CAAC,UAAU,CAAC,CAACP,OAAO,CAACvF,CAAC,IAAIA,CAAC,CAAC8E,SAAS,CAACC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClFkF,OAAO,CAACjE,aAAa,CAAC,+BAA+BpG,WAAW,IAAI,CAAC,EAAEkF,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;EACnG,CAAC;EAEDgF,IAAI,CAAClE,gBAAgB,CAAC,oBAAoB,CAAC,CAACP,OAAO,CAAEkF,CAAC,IAAK;IACzDA,CAAC,CAACtB,gBAAgB,CAAC,OAAO,EAAGlC,KAAK,IAAK;MACrC,MAAMC,MAAM,GAAG,6BAA8BD,KAAK,CAACC,MAAO;MAC1D9H,eAAe,CAAC0H,KAAK,CAACgC,IAAI,CAAC9I,CAAC,IAAIA,CAAC,CAAC6I,cAAc,CAACG,WAAW,CAAC,CAAC,KAAK9B,MAAM,CAAC0D,EAAE,CAAC5B,WAAW,CAAC,CAAC,CAAC,CAAC3J,SAAS,CAAC;IACxG,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACAR,QAAQ,CAACgM,IAAI,CAAC1B,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,yBAAyB2B,CAAC,KAAK;IACjG,IAAIC,SAAS,GAAG,IAAI;IACpB,IAAID,CAAC,CAACE,MAAM,CAACC,UAAU,IAAI,IAAI,EAAE;MAC/BF,SAAS,GAAGD,CAAC,CAACE,MAAM,CAACC,UAAU,CAACC,SAAS;IAC3C,CAAC,MAAM,IAAIJ,CAAC,CAACE,MAAM,CAACG,MAAM,IAAI,IAAI,EAAE;MAClCJ,SAAS,GAAGD,CAAC,CAACE,MAAM,CAACG,MAAM,CAACD,SAAS;IACvC;IAEA,IAAIH,SAAS,KAAK,IAAI,EAAE;MACtB;IACF;IAEA,MAAM1L,SAAS,GAAG0L,SAAS,CAACK,kBAAkB,CAAC,CAAC;IAChD,MAAMxL,WAAW,GAAGmL,SAAS,CAACM,WAAW,CAAC1F,GAAG,CAACoD,CAAC,IAAIA,CAAC,CAACuC,EAAE,CAAC,CAACrC,MAAM,CAACsC,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;IAE5E,IAAIlM,SAAS,IAAI,IAAI,IAAIA,SAAS,KAAK,EAAE,EAAE;MACzC,MAAMgL,gBAAgB,CAACvD,KAAK,CAACgC,IAAI,CAAC9I,CAAC,IAAIA,CAAC,CAACX,SAAS,KAAKA,SAAS,CAAC,CAACwJ,cAAc,CAAC;IACnF,CAAC,MAAM;MACLwB,gBAAgB,CAAC,KAAK,CAAC;IACzB;IAEAb,eAAe,CAAC5J,WAAW,EAAEP,SAAS,CAAC;IACvCsL,gBAAgB,CAAC/K,WAAW,CAAC;EAC/B,CAAC,CAAC;EAEFoK,IAAI,CAAChE,aAAa,CAAC,iDAAiD,CAAC,CAACmD,gBAAgB,CAAC,OAAO,EAAE,MAAM;IACpG/J,eAAe,CAAC,EAAE,CAAC;EACrB,CAAC,CAAC;EAEF6K,OAAO,CAACnE,gBAAgB,CAAC,UAAU,CAAC,CAACP,OAAO,CAAEvF,CAAC,IAAK;IAClDA,CAAC,CAACmJ,gBAAgB,CAAC,OAAO,EAAG2B,CAAC,IAAK;MACjC,MAAM5D,MAAM,GAAG,6BAA8B4D,CAAC,CAAC5D,MAAO;MACtDA,MAAM,CAACpC,SAAS,CAACE,GAAG,CAAC,WAAW,CAAC;MACjCrF,eAAe,CAACuH,MAAM,CAACZ,OAAO,CAACjH,SAAS,EAAE6H,MAAM,CAACZ,OAAO,CAAC1G,WAAW,EAAEsH,MAAM,CAACZ,OAAO,CAACF,KAAK,CAAC;IAC7F,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFY,aAAa,CAAEwE,OAAO,IAAK;IACzB7L,eAAe,CAAC6L,OAAO,CAACnM,SAAS,EAAEmM,OAAO,CAAC5L,WAAW,EAAE4L,OAAO,CAACpF,KAAK,CAAC;EACxE,CAAC,CAAC;EAEF,IAAIqF,IAAI,GAAGtJ,MAAM,CAACuJ,UAAU,CAAC,qBAAqB,CAAC;EACnDD,IAAI,CAACtC,gBAAgB,CAAC,QAAQ,EAAEC,0BAA0B,CAAC;EAC3D,IAAIuC,IAAI,GAAGxJ,MAAM,CAACuJ,UAAU,CAAC,oBAAoB,CAAC;EAClDC,IAAI,CAACxC,gBAAgB,CAAC,QAAQ,EAAGqC,OAAO,IAAK;IAC3C,IAAIA,OAAO,CAACI,OAAO,EAAE;MACnBtC,aAAa,CAAC,CAAC;MACff,UAAU,CAAC4B,oBAAoB,CAAC;IAClC;EACF,CAAC,CAAC;AACJ,CAAC;AAEDV,uDAAK,CAAC,MAAM;EACVM,8BAA8B,CAAC,CAAC;AAClC,CAAC,CAAC,C","sources":["webpack://holiday24/./Webpack/holiday24/helpers/searchFormHelper.js","webpack://holiday24/./Webpack/holiday24/helpers/svgMapHelper.js","webpack://holiday24/./Webpack/holiday24/utils.js","webpack://holiday24/webpack/bootstrap","webpack://holiday24/webpack/runtime/define property getters","webpack://holiday24/webpack/runtime/hasOwnProperty shorthand","webpack://holiday24/webpack/runtime/make namespace object","webpack://holiday24/./Webpack/accommodation-frontpage-location.js"],"sourcesContent":["// @ts-check\r\n\r\n/**\r\n * Methods that manipulates searchform on frontpage and handles search is being updated\r\n */\r\nexport const searchFormHelper = () => {\r\n const countrySelect = /** @type{HTMLSelectElement} */ (document.getElementById('Geography_GeographyCountryId'));\r\n const geographyInput = /** @type{HTMLInputElement} */ (document.getElementById('Geography_Geographies_0__Geography'));\r\n const geographySuggestionId = /** @type{HTMLInputElement} */ (document.getElementById('Geography_Geographies_0__SuggestionId'));\r\n const geographyInputId = /** @type{HTMLInputElement} */ (document.getElementById('Geography_Geographies_0__Id'));\r\n const geographyInputLong = /** @type{HTMLInputElement} */ (document.getElementById('Geography_Geographies_0__GeographyLong'));\r\n const previousCountrySelect = /** @type{HTMLInputElement} */ (document.getElementById('Geography_PreviousCountryId'));\r\n\r\n return {\r\n /**\r\n * Sets country on select in the main form and triggers an update\r\n * @param {string} countryId\r\n */\r\n updateCountryId: (countryId) => {\r\n countrySelect.value = countryId;\r\n geographyInput.value = null;\r\n geographySuggestionId.value = null;\r\n countrySelect.dispatchEvent(new Event('change', { cancelable: true, bubbles: true })); // Force form to update and make ajax request\r\n },\r\n\r\n /**\r\n * Sets geography in the main form and triggers an update\r\n * @param {string} countryId\r\n * @param {string} geographyId,\r\n * @param {string} geographyName\r\n */\r\n updateGeography: (countryId, geographyId, geographyName) => {\r\n countrySelect.value = countryId;\r\n previousCountrySelect.value = countryId;\r\n if (geographyId != null && geographyId !== '' && geographyId !== 'null') {\r\n geographyInput.value = geographyName;\r\n geographyInputId.value = geographyId;\r\n geographyInputLong.value = geographyName;\r\n }\r\n\r\n geographyInput.dispatchEvent(new Event('change', { cancelable: true, bubbles: true })); // Force form to update and make ajax request\r\n },\r\n };\r\n};\r\n","// @ts-check\r\nimport { removeElement } from '../utils';\r\n\r\n/**\r\n * @typedef {[number, number, number, number]} ViewBox [min-x, min-y, width, height]\r\n * @typedef {{ countryId: string, geographyId: string, title: string }} MarkerClickPayload\r\n * @typedef {{ countryId: string, geographyId: string, name: string, x: number, y: number, countryIsoCode?: string }} TermModel\r\n * @typedef {{ countryId: string, countryIsoCode: string, countryName: string, countryPosition: { x: number, y: number }, countryViewBox: ViewBox, terms: TermModel[] }} CountryTermModel\r\n */\r\n\r\n/**\r\n * @param {number} t\r\n * @returns {number}\r\n */\r\nfunction easeInOut(t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t; // Ease-in-out function\r\n}\r\n\r\n/**\r\n * @param {HTMLDivElement} marker\r\n * @param {{ x: number, y: number }} positionOnSvg\r\n * @param {SVGElement} svgElement\r\n * @param {HTMLElement} mainElement\r\n */\r\nfunction setMarkerPosition(marker, positionOnSvg, svgElement, mainElement) {\r\n // Add point to svg. We are using it to calculate the markers position\r\n const point = /** @type{SVGCircleElement}*/ (document.createElementNS('http://www.w3.org/2000/svg', 'circle'));\r\n point.setAttribute('cx', positionOnSvg.x.toString());\r\n point.setAttribute('cy', positionOnSvg.y.toString());\r\n point.setAttribute('r', '0.00001'); // Should be a small value, otherwise it does not calculate in firefox\r\n\r\n svgElement.appendChild(point);\r\n\r\n const pointRect = point.getBoundingClientRect();\r\n const mainRect = mainElement.getBoundingClientRect();\r\n\r\n const left = pointRect.left - mainRect.left - (marker.offsetWidth / 2);\r\n let top = pointRect.top - mainRect.top - (marker.offsetHeight / 2);\r\n\r\n marker.style.left = `${left}px`;\r\n marker.style.top = `${top}px`;\r\n\r\n // Remove the point again, it is not used anymore.\r\n removeElement(point);\r\n}\r\n\r\n/**\r\n * Sort markers from top left to bottom right\r\n * @param {HTMLDivElement[]} markers markers to be sorted\r\n * @returns {HTMLDivElement[]} Sorted markers\r\n */\r\nfunction sortMarkers(markers) {\r\n return markers.sort((a, b) => {\r\n const tolerance = 10;\r\n // Sammenlign y-koordinaterne med tolerance\r\n const yDiff = Math.abs(a.offsetTop - b.offsetTop);\r\n if (yDiff > tolerance) {\r\n return a.offsetTop - b.offsetTop; // Sortér fra top til bund\r\n }\r\n\r\n // Hvis y-koordinaterne er ens, sammenlign x-koordinaterne\r\n return a.offsetLeft - b.offsetLeft; // Sortér fra venstre til højre\r\n });\r\n}\r\n\r\n/**\r\n * Gets size of a pseudo element (:after)\r\n * @param {HTMLDivElement} marker\r\n * @param {number} [padding]\r\n * @return {{ left: number, top: number, right: number, bottom: number }}\r\n */\r\nfunction getPseudoElementSize(marker, padding = 0) {\r\n const markerStyle = window.getComputedStyle(marker);\r\n const afterStyle = window.getComputedStyle(marker, ':after');\r\n\r\n const width = parseFloat(afterStyle.width);\r\n const height = parseFloat(afterStyle.height);\r\n const left = parseFloat(afterStyle.left) + parseFloat(markerStyle.left);\r\n const top = parseFloat(afterStyle.top) + parseFloat(markerStyle.top);\r\n\r\n return {\r\n left: left - padding,\r\n top: top - padding,\r\n right: left + width + padding,\r\n bottom: top + height + padding,\r\n };\r\n}\r\n\r\n/**\r\n * @param {HTMLDivElement} marker\r\n * @return {{ left: number, top: number, right: number, bottom: number }}\r\n */\r\nfunction getElementSize(marker) {\r\n const { offsetLeft, offsetTop, offsetWidth, offsetHeight } = marker; // Get size of marker2' mark/dot\r\n return {\r\n left: offsetLeft,\r\n top: offsetTop,\r\n right: offsetLeft + offsetWidth,\r\n bottom: offsetTop + offsetHeight,\r\n };\r\n}\r\n\r\n/**\r\n * @param {{ left: number, top: number, right: number, bottom: number }} d1\r\n * @param {{ left: number, top: number, right: number, bottom: number }} d2\r\n * @returns {boolean} True if collides\r\n */\r\nconst hasCollision = (d1, d2) => {\r\n const horizontal = d1.left < d2.right && d1.right > d2.left;\r\n const vertical = d1.top < d2.bottom && d1.bottom > d2.top;\r\n return horizontal && vertical;\r\n};\r\n\r\n/**\r\n * Check if a point1' tooltip collides with point2' tooltip and marker\r\n * @param {HTMLDivElement} marker1 Marker consists of a dot and a tooltip\r\n * @param {HTMLDivElement} marker2 Marker consists of a dot and a tooltip\r\n * @param {boolean} doMarkerCheck Set to true to check if markers hit each others\r\n * @returns {{ collision: boolean, distance: number }}\r\n */\r\nfunction checkCollision(marker1, marker2, doMarkerCheck) {\r\n const rect1 = getPseudoElementSize(marker1, 3);\r\n const rect2 = getPseudoElementSize(marker2);\r\n\r\n const dot1 = getElementSize(marker1); // Get size of marker1' mark/dot\r\n const dot2 = getElementSize(marker2); // Get size of marker2' mark/dot\r\n\r\n const tooltipsCollision = hasCollision(rect1, rect2); // Check collision between the 2 tooltips\r\n const tooltip1Collision = hasCollision(rect1, dot2); // Check if tooltip1 hits dot2\r\n const dotsCollision = hasCollision(dot1, dot2); // Maybe some tolerance???? Eller skal den kigge på cirkel i stedet for firkant, not det er dot dot, se screenshot på anden skærm.\r\n\r\n // If marker1' dot collides with marker2' dot, then do not check if marker1' tooltip hits marker2' dot\r\n doMarkerCheck = !dotsCollision;\r\n\r\n const collision = doMarkerCheck ? tooltipsCollision || tooltip1Collision : tooltipsCollision;\r\n\r\n return {\r\n collision,\r\n distance: calculateDistance(rect1, dot2),\r\n };\r\n}\r\n\r\n/**\r\n * Calculates distance to another element.\r\n * @param {{ left: number, top: number, right: number, bottom: number }} rect1\r\n * @param {{ left: number, top: number, right: number, bottom: number }} dot2\r\n * @returns {number}\r\n */\r\nfunction calculateDistance(rect1, dot2) {\r\n const horizontalD = Math.max(0, Math.max(rect1.left, dot2.left) - Math.min(rect1.right, dot2.right));\r\n const verticalD = Math.max(0, Math.max(rect1.top, dot2.top) - Math.min(rect1.bottom, dot2.bottom));\r\n const distanceDot = Math.sqrt(horizontalD ** 2 + verticalD ** 2); // ** = eksponentoperatoren: 73 ** 2 Dette er 73 opløftet i anden potens, hvilket er 5329\r\n return distanceDot;\r\n}\r\n\r\n/**\r\n * Tries to find a good position for tooltip on the marker\r\n * @param {HTMLDivElement[]} markers1\r\n * @param {HTMLDivElement[]} markers2\r\n * @param {boolean} doMarkerCheck Set to true to check if markers hit each others\r\n * @param {boolean} useFurthestAway Set to true to take position furthest away\r\n * @return {HTMLDivElement[]} Markers where tooltip could not be placed\r\n */\r\nfunction findTooltipPositions(markers1, markers2, doMarkerCheck, useFurthestAway) {\r\n const positions = ['top-center', 'left-top', 'right-top', 'left-center', 'left-bottom', 'right-center', 'bottom-center', 'right-bottom'];\r\n const tryAgainMarkers = [];\r\n\r\n for (const marker1 of markers1) {\r\n const newPositions = [];\r\n\r\n // Run through all positions to see if they can be used\r\n for (const position of positions) {\r\n let collision = false;\r\n const distances = [];\r\n // Check collisions with other points\r\n for (const marker2 of markers2) {\r\n if (marker1 !== marker2) {\r\n // Add new position to marker1\r\n marker1.classList.remove(...positions);\r\n marker1.classList.add(position);\r\n\r\n const checkResult = checkCollision(marker1, marker2, doMarkerCheck);\r\n if (checkResult.collision) {\r\n collision = true;\r\n break; // Vi har en kollision med imellem marker 1' nye postion og marker 2. Så bare stop her\r\n } else {\r\n distances.push(checkResult.distance);\r\n }\r\n }\r\n }\r\n\r\n // Hvis ingen kollision, så put position i array med de positioner som kan benyttes\r\n if (!collision) {\r\n newPositions.push({ position, distance: Math.min(...distances) });\r\n }\r\n }\r\n\r\n // Tag den første og bedste ny position og giv den til marker1\r\n marker1.classList.remove(...positions);\r\n\r\n if (newPositions.length > 0) {\r\n if (useFurthestAway) {\r\n marker1.classList.add(newPositions.sort((a, b) => b.distance - a.distance)[0]?.position); // Tag den position som er længst væk fra de andre tooltips\r\n } else {\r\n marker1.classList.add(newPositions[0]?.position);\r\n }\r\n } else {\r\n tryAgainMarkers.push(marker1);\r\n }\r\n }\r\n\r\n return tryAgainMarkers;\r\n}\r\n\r\n/**\r\n * Tries to find a good position for tooltip on the marker\r\n * @param {HTMLDivElement[]} markers\r\n * @param {boolean} useFurthestAway Set to true to take position furthest away\r\n */\r\nfunction findOptimalTooltipPositions(markers, useFurthestAway) {\r\n const sortedMarkers = sortMarkers(markers);\r\n const tryAgainMarkers = findTooltipPositions(sortedMarkers, sortedMarkers, true, useFurthestAway);\r\n\r\n if (tryAgainMarkers.length > 0) {\r\n const removeTheseMarkers = findTooltipPositions(tryAgainMarkers, sortedMarkers, false, useFurthestAway); // Try to position tooltip igain.\r\n\r\n // TODO: What to do\r\n removeTheseMarkers.forEach(m => m.style.opacity = '0.2');\r\n }\r\n}\r\n\r\n/**\r\n * Helper funktions to markers\r\n * @param {HTMLDivElement} map Map div that wraps the svg\r\n */\r\nfunction markerHelper(map) {\r\n const markerClass = 'accommodation-frontpage-location__marker';\r\n\r\n const getAllMarkers = () => {\r\n return /** @type{HTMLDivElement[]} */ ([...map.querySelectorAll(`.${markerClass}`)]);\r\n };\r\n\r\n return {\r\n /**\r\n * @param {string} geographyId\r\n * @param {string} countryId\r\n * @returns {HTMLDivElement}\r\n */\r\n getMarkerById: (geographyId, countryId) => {\r\n geographyId = geographyId ?? 'null';\r\n countryId = countryId ?? 'null';\r\n return map.querySelector(`.${markerClass}[data-geography-id=\"${geographyId}\"][data-country-id=\"${countryId}\"]`);\r\n },\r\n\r\n /**\r\n * @returns {HTMLDivElement[]}\r\n */\r\n getAllMarkers,\r\n\r\n /**\r\n * Removes '.is-active' from all markers\r\n */\r\n setAllMarkersInactive: () => {\r\n getAllMarkers().forEach(m => m.classList.remove('is-active'));\r\n },\r\n\r\n /**\r\n * Create html div marker on map div\r\n * @param {string} activeCountryId\r\n * @param {string} title\r\n * @param {string} countryId\r\n * @param {string} geographyId\r\n * @param {{ x: number, y: number }} positionOnSvg\r\n * @returns {HTMLDivElement}\r\n */\r\n createMarkerOnMap: (activeCountryId, title, countryId, geographyId, positionOnSvg) => {\r\n const marker = document.createElement('div');\r\n marker.classList.add(markerClass, activeCountryId === 'all' ? 'top-center' : 'right-center');\r\n marker.dataset.title = title;\r\n marker.dataset.countryId = countryId;\r\n marker.dataset.geographyId = geographyId;\r\n marker.dataset.positionOnSvg = JSON.stringify(positionOnSvg);\r\n map.appendChild(marker);\r\n return marker;\r\n },\r\n\r\n /**\r\n * Get closest marker to element\r\n * @param {Element} element\r\n * @returns {HTMLDivElement}\r\n */\r\n getClosestMarker: (element) => {\r\n return /** @type{HTMLDivElement} */ (element.closest(`.${markerClass}`));\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Svgmap helpers to frontpagemap\r\n * @param {SVGElement} svg\r\n * @param {HTMLDivElement} map Map div that wraps the svg\r\n * @param {CountryTermModel[]} terms Terms\r\n */\r\nexport function svgMapHelper(svg, map, terms) {\r\n const { getAllMarkers, getMarkerById, setAllMarkersInactive, createMarkerOnMap, getClosestMarker } = markerHelper(map);\r\n\r\n /**\r\n */\r\n let onMarkerClickCallback;\r\n const onMarkerClick = (event) => {\r\n setAllMarkersInactive();\r\n\r\n const marker = getClosestMarker(event.target);\r\n marker.classList.add('is-active');\r\n onMarkerClickCallback(marker.dataset);\r\n };\r\n\r\n return {\r\n /**\r\n * Whenever a point is clicked, callback is called\r\n * @param {(arg0: MarkerClickPayload) => void} callback\r\n */\r\n onMarkerClick: (callback) => {\r\n onMarkerClickCallback = callback;\r\n },\r\n\r\n /**\r\n * @param {ViewBox} targetViewBox New viewBox to navigate to\r\n * @param {number} duration How long the animation should be. In miliseconds\r\n * @param {() => void} [doneCallback] When animation is done\r\n */\r\n animateViewBox: (targetViewBox, duration, doneCallback) => {\r\n let startTime = 0;\r\n const initialViewBox = svg.getAttribute('viewBox').split(' ').map(Number);\r\n\r\n /**\r\n * @param {number} time\r\n */\r\n function animate(time) {\r\n if (startTime === 0) {\r\n startTime = time;\r\n }\r\n\r\n const elapsed = time - startTime;\r\n const progress = Math.min(elapsed / duration, 1); // Clamp to 1\r\n\r\n // Apply effect\r\n const easedProgress = easeInOut(progress);\r\n\r\n // Calculate new viewBox values\r\n const newViewBox = initialViewBox.map((start, index) => {\r\n return start + (targetViewBox[index] - start) * easedProgress;\r\n });\r\n\r\n // Set the new viewBox\r\n svg.setAttribute('viewBox', newViewBox.join(' '));\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n return;\r\n }\r\n\r\n if (doneCallback != null) {\r\n doneCallback();\r\n }\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n },\r\n\r\n /**\r\n * Adds markers to the map.\r\n * It gets markers from visible circles with class .point in the svg\r\n * @param {string} activeCountryId The isocode like DE\r\n */\r\n addMarkers: (activeCountryId) => {\r\n /** @type TermModel[] */\r\n const countryTerms = terms.map(tt => ({ countryId: tt.countryId, name: tt.countryName, x: tt.countryPosition.x, y: tt.countryPosition.y, geographyId: null, countryIsoCode: tt.countryIsoCode }));\r\n\r\n /** @type TermModel[] */\r\n let t = activeCountryId === 'all'\r\n ? countryTerms\r\n : terms.find(d => d.countryIsoCode.toLowerCase() === activeCountryId.toLowerCase()).terms;\r\n\r\n // If no terms, then show the country dot/tooltip\r\n if (t.length === 0) {\r\n t = countryTerms.filter(d => d.countryIsoCode.toLowerCase() === activeCountryId.toLowerCase());\r\n }\r\n\r\n t.forEach((tt) => {\r\n const positionOnSvg = { x: tt.x, y: tt.y };\r\n const marker = createMarkerOnMap(activeCountryId, tt.name, tt.countryId, tt.geographyId, positionOnSvg);\r\n setMarkerPosition(marker, positionOnSvg, svg, map.parentElement);\r\n marker.addEventListener('click', onMarkerClick);\r\n });\r\n\r\n const markers = getAllMarkers();\r\n\r\n findOptimalTooltipPositions(markers, activeCountryId !== 'all');\r\n\r\n markers.forEach(m => m.classList.add('is-ready'));\r\n },\r\n\r\n /**\r\n * Called when browser window changes. (Media query)\r\n */\r\n recalculateMarkerPositions: () => {\r\n const markers = getAllMarkers();\r\n markers.forEach((marker) => {\r\n setMarkerPosition(marker, JSON.parse(marker.dataset.positionOnSvg), svg, map.parentElement);\r\n });\r\n },\r\n\r\n /**\r\n * Removes all markers on the map. Also removes eventlisteners\r\n */\r\n removeMarkers: () => {\r\n const markers = getAllMarkers();\r\n markers.forEach((marker) => {\r\n marker.removeEventListener('click', onMarkerClick);\r\n removeElement(marker);\r\n });\r\n },\r\n\r\n /**\r\n * Sets all markers inactive and\r\n * sets marker active if it can find a marker with geographyId\r\n * @param {string} geographyId\r\n * @param {string} countryId\r\n */\r\n setMarkerActive: (geographyId, countryId) => {\r\n setAllMarkersInactive();\r\n\r\n const marker = getMarkerById(geographyId, countryId);\r\n if (marker != null) {\r\n marker.classList.add('is-active');\r\n }\r\n },\r\n };\r\n};\r\n","// @ts-check\r\n\r\n/**\r\n * Something like jQuery' $.ready function.\r\n * @param {() => any} fn\r\n * @returns {any}\r\n */\r\nexport const ready = function (fn) {\r\n // Sanity check\r\n if (typeof fn !== 'function') {\r\n return;\r\n }\r\n\r\n // If document is already loaded, run method\r\n if (document.readyState === 'complete') {\r\n return fn();\r\n }\r\n\r\n // Otherwise, wait until document is loaded\r\n document.addEventListener('DOMContentLoaded', fn, false);\r\n};\r\n\r\n/**\r\n * Fjerner et element fra dom'en\r\n * @param {Element} el\r\n */\r\nexport const removeElement = (el) => {\r\n if (typeof el.remove !== 'undefined') {\r\n el.remove();\r\n } else {\r\n el.parentNode.removeChild(el);\r\n }\r\n};\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// @ts-check\r\n\r\n/**\r\n * @typedef {import('./holiday24/helpers/svgMapHelper').ViewBox} ViewBox\r\n * @typedef {import('./holiday24/helpers/svgMapHelper').CountryTermModel} CountryTermModel\r\n */\r\n\r\nimport { ready } from './holiday24/utils';\r\nimport { svgMapHelper } from './holiday24//helpers/svgMapHelper';\r\nimport { searchFormHelper } from './holiday24/helpers/searchFormHelper';\r\n\r\nconst accommodationFrontpageLocation = () => {\r\n const main = /** @type{HTMLDivElement} */ (document.querySelector('.accommodation-frontpage-location'));\r\n const mainGeo = /** @type{HTMLDivElement} */ (document.querySelector('.accommodation-frontpage-geography'));\r\n const map = /** @type{HTMLDivElement} */ (main.querySelector('.accommodation-frontpage-location__map'));\r\n const svg = /** @type{SVGAElement} */ (main.querySelector('.accommodation-frontpage-location__svg'));\r\n\r\n const terms = /** @type{CountryTermModel[]} */ (window['accommodationFrontpageLocationData'].terms);\r\n const allViewBox = window['accommodationFrontpageLocationData'].allViewBox;\r\n let activeCountryIsoCode = window['accommodationFrontpageLocationData'].initActiveCountry;\r\n\r\n const { updateCountryId, updateGeography } = searchFormHelper();\r\n const { animateViewBox, addMarkers, recalculateMarkerPositions, removeMarkers, setMarkerActive, onMarkerClick } = svgMapHelper(svg, map, terms);\r\n\r\n addMarkers(activeCountryIsoCode);\r\n\r\n /**\r\n * @param {string} countryIsoCode\r\n * @return {Promise<void>} Await animation is done.\r\n */\r\n const setActiveCountry = async (countryIsoCode) => {\r\n return new Promise((resolve) => {\r\n if (activeCountryIsoCode === countryIsoCode) {\r\n resolve();\r\n return;\r\n }\r\n\r\n removeMarkers();\r\n activeCountryIsoCode = countryIsoCode;\r\n\r\n const countryViewBox = activeCountryIsoCode === 'all'\r\n ? allViewBox\r\n : terms.find(tt => tt.countryIsoCode.toLowerCase() === activeCountryIsoCode.toLowerCase()).countryViewBox;\r\n\r\n animateViewBox(countryViewBox, 500, () => {\r\n addMarkers(activeCountryIsoCode);\r\n resolve();\r\n });\r\n\r\n svg.querySelectorAll('.land--activatable').forEach(l => l.classList.remove('is-active'));\r\n if (activeCountryIsoCode === 'all') {\r\n svg.querySelectorAll('.land--activatable').forEach(l => l.classList.add('is-active'));\r\n } else {\r\n document.getElementById(activeCountryIsoCode.toUpperCase()).classList.add('is-active');\r\n }\r\n\r\n mainGeo.querySelectorAll('.geography').forEach(l => l.classList.remove('is-active', 'show-title'));\r\n mainGeo.querySelectorAll('.geoterm').forEach(l => l.classList.remove('is-active'));\r\n if (activeCountryIsoCode === 'all') {\r\n mainGeo.querySelectorAll('.geography').forEach(l => l.classList.add('is-active', 'show-title'));\r\n } else {\r\n mainGeo.querySelector(`.geography--${activeCountryIsoCode}`)?.classList.add('is-active');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets geography is-active in the list with all geographies\r\n * @param {string} geographyId\r\n */\r\n const setGeotermActive = (geographyId) => {\r\n mainGeo.querySelectorAll('.geoterm').forEach(t => t.classList.remove('is-active'));\r\n mainGeo.querySelector(`.geoterm[data-geography-id=\"${geographyId}\"]`)?.classList.add('is-active');\r\n };\r\n\r\n main.querySelectorAll('.land--activatable').forEach((l) => {\r\n l.addEventListener('click', (event) => {\r\n const target = /** @type {SVGPathElement} */(event.target);\r\n updateCountryId(terms.find(t => t.countryIsoCode.toLowerCase() === target.id.toLowerCase()).countryId);\r\n });\r\n });\r\n\r\n // When search is updated, accommodationSearchUpdated is triggered and we move to new position\r\n document.body.addEventListener('accommodationSearchUpdated', async (/** @type{CustomEvent} */e) => {\r\n let geography = null;\r\n if (e.detail.Adjustment != null) {\r\n geography = e.detail.Adjustment.Geography;\r\n } else if (e.detail.Search != null) {\r\n geography = e.detail.Search.Geography;\r\n }\r\n\r\n if (geography === null) {\r\n return;\r\n }\r\n\r\n const countryId = geography.GeographyCountryId; // GUID\r\n const geographyId = geography.Geographies.map(d => d.Id).filter(_ => _)[0]; // GUID - remove empty and take the first\r\n\r\n if (countryId != null && countryId !== '') {\r\n await setActiveCountry(terms.find(t => t.countryId === countryId).countryIsoCode);\r\n } else {\r\n setActiveCountry('all');\r\n }\r\n\r\n setMarkerActive(geographyId, countryId);\r\n setGeotermActive(geographyId);\r\n });\r\n\r\n main.querySelector('.accommondation-frontpage-map__buttons .showall').addEventListener('click', () => {\r\n updateCountryId('');\r\n });\r\n\r\n mainGeo.querySelectorAll('.geoterm').forEach((t) => {\r\n t.addEventListener('click', (e) => {\r\n const target = /** @type {HTMLDivElement} */(e.target);\r\n target.classList.add('is-active');\r\n updateGeography(target.dataset.countryId, target.dataset.geographyId, target.dataset.title);\r\n });\r\n });\r\n\r\n onMarkerClick((payload) => {\r\n updateGeography(payload.countryId, payload.geographyId, payload.title);\r\n });\r\n\r\n var mql1 = window.matchMedia('(min-width: 1200px)');\r\n mql1.addEventListener('change', recalculateMarkerPositions);\r\n var mql2 = window.matchMedia('(min-width: 992px)');\r\n mql2.addEventListener('change', (payload) => {\r\n if (payload.matches) {\r\n removeMarkers();\r\n addMarkers(activeCountryIsoCode);\r\n }\r\n });\r\n};\r\n\r\nready(() => {\r\n accommodationFrontpageLocation();\r\n});\r\n"],"names":["searchFormHelper","countrySelect","document","getElementById","geographyInput","geographySuggestionId","geographyInputId","geographyInputLong","previousCountrySelect","updateCountryId","countryId","value","dispatchEvent","Event","cancelable","bubbles","updateGeography","geographyId","geographyName","removeElement","easeInOut","t","setMarkerPosition","marker","positionOnSvg","svgElement","mainElement","point","createElementNS","setAttribute","x","toString","y","appendChild","pointRect","getBoundingClientRect","mainRect","left","offsetWidth","top","offsetHeight","style","sortMarkers","markers","sort","a","b","tolerance","yDiff","Math","abs","offsetTop","offsetLeft","getPseudoElementSize","padding","markerStyle","window","getComputedStyle","afterStyle","width","parseFloat","height","right","bottom","getElementSize","hasCollision","d1","d2","horizontal","vertical","checkCollision","marker1","marker2","doMarkerCheck","rect1","rect2","dot1","dot2","tooltipsCollision","tooltip1Collision","dotsCollision","collision","distance","calculateDistance","horizontalD","max","min","verticalD","distanceDot","sqrt","findTooltipPositions","markers1","markers2","useFurthestAway","positions","tryAgainMarkers","newPositions","position","distances","classList","remove","add","checkResult","push","length","findOptimalTooltipPositions","sortedMarkers","removeTheseMarkers","forEach","m","opacity","markerHelper","map","markerClass","getAllMarkers","querySelectorAll","getMarkerById","querySelector","setAllMarkersInactive","createMarkerOnMap","activeCountryId","title","createElement","dataset","JSON","stringify","getClosestMarker","element","closest","svgMapHelper","svg","terms","onMarkerClickCallback","onMarkerClick","event","target","callback","animateViewBox","targetViewBox","duration","doneCallback","startTime","initialViewBox","getAttribute","split","Number","animate","time","elapsed","progress","easedProgress","newViewBox","start","index","join","requestAnimationFrame","addMarkers","countryTerms","tt","name","countryName","countryPosition","countryIsoCode","find","d","toLowerCase","filter","parentElement","addEventListener","recalculateMarkerPositions","parse","removeMarkers","removeEventListener","setMarkerActive","ready","fn","readyState","el","parentNode","removeChild","accommodationFrontpageLocation","main","mainGeo","allViewBox","activeCountryIsoCode","initActiveCountry","setActiveCountry","Promise","resolve","countryViewBox","l","toUpperCase","setGeotermActive","id","body","e","geography","detail","Adjustment","Geography","Search","GeographyCountryId","Geographies","Id","_","payload","mql1","matchMedia","mql2","matches"],"sourceRoot":""}