{"version":3,"file":"js_utils_ha-searcbar-functions_js.chunk.js","mappings":"qkCASO,SAASA,IACZC,EAAE,mCAAmCC,OAAM,SAAUC,GAgBjD,IAAKC,gBAAgBC,gCAA+B,GAGhD,OAFAF,EAAMG,sBACNH,EAAMI,kBAGV,IAAIC,GAAW,EAoBf,GAnBIJ,gBAAgBK,YAEuB,MAAnCL,gBAAgBM,iBAA2D,MAAhCN,gBAAgBO,aAC3DV,EAAE,+BAA+BW,OAEjCX,EAAE,+BAA+BY,OAErCL,EAAWJ,gBAAgBU,oBAY1BV,gBAAgBW,iCAAgC,GAGjD,OAFAZ,EAAMG,sBACNH,EAAMI,kBAGV,IAAKH,gBAAgBY,+CAA8C,GAI/D,OAFAb,EAAMG,sBACNH,EAAMI,kBA+BV,IAAIU,GAAeb,gBAAgBc,WAC/BV,IAGAS,GAAc,GAsBdA,EAGAE,OAAOC,SAAWhB,gBAAgBiB,gBAyClClB,EAAMG,iBACNH,EAAMI,mBAEDH,gBAAgBK,WAAaa,QAAQC,eAAeC,gBACrDC,EAAAA,EAAAA,KAAsB,GAEtBrB,gBAAgBK,WAAaa,QAAQC,eAAeC,gBAIb,oBAA5BE,0BACPC,UAAUC,KAAI,WACVF,0BAAyB,EAC7B,IAEJC,UAAUC,KAAI,YACVC,EAAAA,EAAAA,IAAoB,EAAG,IAC3B,GAAG,MAEPC,EAAAA,EAAAA,MACA1B,gBAAgB2B,eAAc,GAItC,IAEA9B,EAAE+B,UAAUC,GAAG,QAAS,8BAA8B,WAAY,IAAAC,EAC1DC,EAASlC,EAAEmC,MACXC,EAAgBC,IAAAJ,EAAAC,EAAOI,UAAQC,KAAAN,EAAM,wBACpCC,EAAOM,SAAS,SACjBJ,EAAcK,QAAQ,QAE9B,IAEAzC,EAAE+B,UAAUC,GAAG,QAAS,wBAAwB,WAC5ChC,EAAE,kBAAkB0C,YAAY,QAChC,IAAIN,EAAgBpC,EAAEmC,MAClBG,EAAStC,EAAEmC,MAAMQ,QAAQ,kBACzBC,EAAiBR,EAAcO,QAAQ,kBAC3CC,EAAeC,SAAS,QACxB,IAAIC,EAAqBT,IAAAC,GAAMC,KAAND,EAAY,8BAGjCS,EAAU,iBACVC,EAAUZ,EAAcO,QAAQ,WAChCK,EAAQC,OAAS,IACZD,EAAQR,SAAS,gBAClBO,GAAW,WAGnBA,GAAW,iBACPX,EAAcI,SAAS,sBACvBO,GAAW,qBAGf,IAAIG,EAAQ,aACRC,EAAQ,gBACRC,EAAQ,EACRC,EAASrD,EAAEmC,MAAMmB,KAAK,UACtBD,EAAOJ,OAAS,IAChBC,EAAQ,WACRC,EAAQ,cACRC,GAA+B,EAAvBC,EAAOE,cAGnB,IAAIC,EAAOpB,EAAcoB,KAAK,OAM9B,SAASC,EAAcrB,EAAesB,GAElC,IAAIC,EAAMvB,EAAcoB,KAAK,OAM7B,GAJKE,IACDA,EAA6BC,EAAIC,SAASC,SAE5BH,EAA2BlB,SAAS,SAElDmB,EAAIG,IAAI,oBAAqB,GAC7BJ,EAA2BK,IAAI,CAAE,MAAS,KAC1CL,EAA2BK,IAAI,CAAE,SAAY,SAC1C,CACH,IAAIC,EAAQ5B,EAAcO,QAAQ,2BAC9BsB,EAAWD,EAAME,SAASC,KAC1BC,EAAahC,EAAc8B,SAASC,KACpCE,EAAWJ,EAAWG,EAMtBE,GAJuBN,EAAMT,aACFnB,EAAcmB,YAAW,GAGzCS,EAAMT,YAAW,KACjBgB,EAAAA,EAAAA,KAGfZ,EAAIG,IAAI,cAAe,YACvBH,EAAIG,IAAI,cAAe,eACvBH,EAAIG,IAAI,oBAAqBO,GAuD7BX,EAA2BK,IAAI,CAAE,MAASO,IAC1CZ,EAA2BK,IAAI,CAAE,SAAYO,GACjD,CAEJ,CAiDA,SAASE,EAAoBC,EAAcd,EAAKe,GACxCD,GACAzE,EAAE,wBAAwB6C,SAAS,SACnC7C,EAAE,QAAQ6C,SAAS,YAEnB7C,EAAE,+BAA+B2E,IAAI,SACrC3E,EAAE,qCAAqCgC,GAAG,SAAS,SAAU4C,GACrDjB,GACAA,EAAI/C,MAEZ,MAEAZ,EAAE,QAAQ0C,YAAY,YACtB1C,EAAE,wBAAwB0C,YAAY,SAEtC1C,EAAE,qCAAqC2E,IAAI,SAC3C3E,EAAE,+BAA+BgC,GAAG,SAAS,SAAU4C,GAC/CjB,GACAA,EAAI/C,MAEZ,IAGR,CAEA,SAASiE,IACL,IAAIC,EAAe9E,EAAE,oCACjB+E,EAAiBD,EAAaxC,OAAO,mBACzC,GAA6B,GAAzByC,EAAe9B,OAAa,CAC5B,IAAI+B,EAAUhF,EAAE,eACb6C,SAAS,kBAEViC,EAAaG,QAAQD,GACrBD,EAAiBD,EAAaxC,OAAO,kBAC3C,CACAyC,EAAehB,IAAI,SAAUe,EAAaI,aAAY,GAC1D,CAGA,SAASC,IACL,IAAI3B,EAAOpB,EAAcoB,KAAK,OAC9B,GAAIA,GAAQA,EAAK4B,UAAW,CAExB,IAAIV,EAAyB1E,EAAE,wBAC3BqF,EAAcX,EAAuBlC,SAAS,SAC9CiC,GAAeF,EAAAA,EAAAA,KAAuB,IAEtCE,GAAgBY,GAChBb,EAAoBC,EAAcjB,GAGtCqB,IACApB,EAAcrB,EAClB,CACJ,CAnMIoB,GAAQpB,EAAcI,SAAS,QAC/BgB,EAAK5C,QAiLTiE,IAmBA7E,EAAEmC,MAAMqB,KAAK,CACT7C,KAAM,CACFT,MAAO,QACPoF,OAAO,EACPC,MAAM,GAEVC,UAAW,QACX5E,KAAM,UACN6E,QAAS,CACLC,KAAM1F,EAAE,wBAAwB2F,QAEpCC,SAAU,CACNC,OAAQ7F,EAAEmC,MACV2D,GAAI5C,EACJ6C,GAAI5C,EACJU,QAAS,YAGTmC,OAAQ,CACJC,EAAG7C,EACH8C,EAAG,GAGPC,OAAQ,SAAUxC,EAAKyC,GAKnB,GAAIzC,EAAIC,SAASiC,OAAOrD,SAAS,oBAAqB,CAClD,IAAI6D,EAAarG,EAAEkB,QAAQoF,YAC3BF,EAAIG,IAAMF,EAAa,EAC3B,CACArG,EAAEmC,MAAMqE,QAAQJ,EAAK,CAAEK,SAAU,EAAGC,OAAO,GAC/C,GAEJC,MAAO,CACH5D,QAASA,EACT6D,KAAK,GAETC,OAAQ,CACJjG,KAAM,SAAUV,EAAOyD,GACnB3D,EAAE,qCAAqC2E,IAAI,SAC3C3E,EAAE,+BAA+B2E,IAAI,SACrC3E,EAAE,wBAAwB8G,SAC1B1E,EAAcM,YAAY,QAC1BE,EAAeF,YAAY,QAC3B1C,EAAE,QAAQ0C,YAAY,YACtBqE,KAAW,WACPjE,EAAmBJ,YAAY,OACnC,GAAG,KAEH1C,EAAEkB,QAAQyD,IAAI,SAAUQ,GACpBxB,IAAKA,EAAIyB,WAAY,EAC7B,EACA4B,OAAQ,SAAU9G,EAAOyD,GAAK,IAAAsD,EAC1BC,EAAGC,cAAchH,gBAAiBwD,EAAIC,SAASC,QAAQ,IAEvDzB,EAAcS,SAAS,QACvBC,EAAmBD,SAAS,QAE5BuE,IAAAH,EAAAtD,EAAIE,SAAOtB,KAAA0E,EAAM,UAAU,WAEvB,GAER,EACAtG,KAAM,SAAUT,EAAOyD,GAEfA,IAAKA,EAAIyB,WAAY,GACzB,IAAIV,EAAyB1E,EAAE,wBAC3ByE,GAAeF,EAAAA,EAAAA,KAAuB,IAC1CC,EAAoBC,EAAcd,GAE9Bc,EACAsC,KAAW,WACPlC,GACJ,GAAG,KAlLnB,SAA0BlB,GACtB,GAAKA,EAAL,CAGA,IAAI0D,EAAS1D,EAAIkC,OACbyB,EAAetH,EAAEkB,QAAQqG,SACzBrD,EAASoD,EAAe,EAE5B,KAAID,EAAOnC,eAAiBhB,GAKXlE,EAAEkB,QAAQoF,YACDpC,EACVmD,EAAOnD,SAASqC,KAEhC,CAQA,IAAIiB,EAAqC,GAAfF,EAAqB,GAG3CG,EAAYC,IAAS/D,EAAIE,QAAQE,IAAI,eAKrC4D,EAAYL,GADAD,EAAOnC,cAAgBuC,EAAYD,EAAsB,IAGrEI,EAAa1D,EAAS,EAEtBA,EADA0D,EAAaD,EACJA,EAEAC,EAGb5H,EAAE,cAAc6H,OAAOrB,QAAQ,CAC3BF,UAAWe,EAAOnD,SAASqC,IAAMrC,GAClC,IAxBH,CAlBU,CA2Cd,CA4IgB4D,CAAiBnE,GAErBF,EAAcrB,EAAesC,GAC7B1E,EAAEkB,QAAQ6G,OAAO5C,EACrB,KAGZ,IAEAnF,EAAE+B,UAAUC,GAAG,QAAS,gCAAgC,WACpD,IAAIuC,EAAAA,EAAAA,KAAuB,KAAOpE,gBAAgBc,WAC9CjB,EAAE,sCAAsCC,YACrC,KAqCMwD,EAAT,SAAuBuE,EAA4BC,GAE/C,IAAItE,EAAMqE,EAA2BxE,KAAK,OAM1C,GAJKyE,IACDA,EAA0CtE,EAAIC,SAASC,SAEzCoE,EAAwCzF,SAAS,SAE/DmB,EAAIG,IAAI,oBAAqB,GAC7BmE,EAAwClE,IAAI,CAAE,MAAS,KACvDkE,EAAwClE,IAAI,CAAE,SAAY,SACvD,CACH,IAAIC,EAAQgE,EAA2BrF,QAAQ,2BAC3CsB,EAAWD,EAAME,SAASC,KAC1BC,EAAa4D,EAA2B9D,SAASC,KACjDE,EAAWJ,EAAWG,EAMtBE,GAJuBN,EAAMT,aACFyE,EAA2BzE,YAAW,GAGtDS,EAAMT,YAAW,KACjBgB,EAAAA,EAAAA,KAGfZ,EAAIG,IAAI,cAAe,YACvBH,EAAIG,IAAI,cAAe,eACvBH,EAAIG,IAAI,oBAAqBO,GAE7B4D,EAAwClE,IAAI,CAAE,MAASO,IACvD2D,EAAwClE,IAAI,CAAE,SAAYO,GAC9D,CAEJ,EAuESO,EAAT,WACI,IAAIC,EAAe9E,EAAE,6CACrB8E,EAAaxC,OAAO,mBAAmByB,IAAI,SAAUe,EAAaI,aAAY,GAClF,EAGSC,EAAT,WACI,IAAI3B,EAAOwE,EAA2BxE,KAAK,OAC3C,GAAIA,GAAQA,EAAK4B,UAAW,CAEKpF,EAAE,qDACUwC,SAAS,SAElDqC,IACApB,EAAcuE,EAClB,CACJ,EA7JAhI,EAAE,kBAAkB0C,YAAY,QAChC,IAAIsF,EAA6BhI,EAAEmC,MAC/BG,EAAStC,EAAEmC,MAAMQ,QAAQ,8BACzBC,EAAiBoF,EAA2BrF,QAAQ,kBACxDC,EAAeC,SAAS,QACxB,IAAIC,EAAqBT,IAAAC,GAAMC,KAAND,EAAY,uCAGjCS,EAAU,0BACVC,EAAUgF,EAA2BrF,QAAQ,WAC7CK,EAAQC,OAAS,IACZD,EAAQR,SAAS,gBAClBO,GAAW,WAGnBA,GAAW,iBACPiF,EAA2BxF,SAAS,sBACpCO,GAAW,qBAGf,IAAIG,EAAQ,aACRC,EAAQ,gBACRC,EAAQ,EACRC,EAASrD,EAAEmC,MAAMmB,KAAK,UACtBD,EAAOJ,OAAS,IAChBC,EAAQ,WACRC,EAAQ,cACRC,GAA+B,EAAvBC,EAAOE,cAGnB,IAAIC,EAAOwE,EAA2BxE,KAAK,OAC3C,GAAIA,GAAQwE,EAA2BxF,SAAS,QAE5C,YADAgB,EAAK5C,OAiHTiE,IAcA7E,EAAEmC,MAAMqB,KAAK,CACT7C,KAAM,CACFT,MAAO,QACPoF,OAAO,EACPC,MAAM,GAEVC,UAAW,QACX5E,KAAM,UACN6E,QAAS,CACLC,KAAM1F,EAAE,uCAAuC2F,QAEnDC,SAAU,CACNC,OAAQ7F,EAAEmC,MACV2D,GAAI5C,EACJ6C,GAAI5C,EACJU,QAAS,YACTmC,OAAQ,CACJC,EAAG7C,EACH8C,EAAG,GAGPC,OAAQ,SAAUxC,EAAKyC,GAInB,GAAIzC,EAAIC,SAASiC,OAAOrD,SAAS,oBAAqB,CAClD,IAAI6D,EAAarG,EAAEkB,QAAQoF,YAC3BF,EAAIG,IAAMF,EAAa,EAC3B,CACArG,EAAEmC,MAAMqE,QAAQJ,EAAK,CAAEK,SAAU,EAAGC,OAAO,GAC/C,GAEJC,MAAO,CACH5D,QAASA,EACT6D,KAAK,GAETC,OAAQ,CACJjG,KAAM,SAAUV,EAAOyD,GACnB3D,EAAE,kEAAkE2E,IAAI,SACxE3E,EAAE,4DAA4D2E,IAAI,SAClE3E,EAAE,qDAAqD8G,SACvDkB,EAA2BtF,YAAY,QACvCE,EAAeF,YAAY,QAC3B1C,EAAE,QAAQ0C,YAAY,YACtBqE,KAAW,WACPjE,EAAmBJ,YAAY,OACnC,GAAG,KACH1C,EAAEkB,QAAQyD,IAAI,SAAUQ,GACpBxB,IAAKA,EAAIyB,WAAY,EAC7B,EACA4B,OAAQ,SAAU9G,EAAOyD,GAAK,IAAAuE,EAC1BhB,EAAGC,cAAchH,gBAAiBwD,EAAIC,SAASC,QAAQ,IACvDmE,EAA2BnF,SAAS,QACpCC,EAAmBD,SAAS,QAE5BuE,IAAAc,EAAAvE,EAAIE,SAAOtB,KAAA2F,EAAM,UAAU,WACvB,GAER,EACAvH,KAAM,SAAUT,EAAOyD,GAEfA,IAAKA,EAAIyB,WAAY,GACIpF,EAAE,qDAA/B,IACIyE,GAAeF,EAAAA,EAAAA,KAAuB,KA1GtD,SAA6BE,EAAcd,GACnCc,GACAzE,EAAE,iCAAiC6C,SAAS,SAC5C7C,EAAE,QAAQ6C,SAAS,YAEnB7C,EAAE,6CAA6C2E,IAAI,SACnD3E,EAAE,8CAA8CgC,GAAG,SAAS,SAAU4C,GAC9DjB,GACAA,EAAI/C,MAEZ,MAEAZ,EAAE,QAAQ0C,YAAY,YACtB1C,EAAE,iCAAiC0C,YAAY,SAE/C1C,EAAE,8CAA8C2E,IAAI,SACpD3E,EAAE,6CAA6CgC,GAAG,SAAS,SAAU4C,GAC7DjB,GACAA,EAAI/C,MAEZ,IAGR,CAoFY4D,CAAoBC,EAAcd,GAE9Bc,EACAsC,KAAW,WACPlC,GACJ,GAAG,KA5JnB,SAA0BlB,GACtB,GAAKA,EAAL,CAGA,IAAI0D,EAAS1D,EAAIkC,OACbyB,EAAetH,EAAEkB,QAAQqG,SACzBrD,EAASoD,EAAe,EAE5B,KAAID,EAAOnC,eAAiBhB,GAKXlE,EAAEkB,QAAQoF,YACDpC,EACVmD,EAAOnD,SAASqC,KAEhC,CAKA,IAAIiB,EAAqC,GAAfF,EAAqB,GAG3CG,EAAYC,IAAS/D,EAAIE,QAAQE,IAAI,eAKrC4D,EAAYL,GADAD,EAAOnC,cAAgBuC,EAAYD,EAAsB,IAGrEI,EAAa1D,EAAS,EAEtBA,EADA0D,EAAaD,EACJA,EAEAC,EAGb5H,EAAE,cAAc6H,OAAOrB,QAAQ,CAC3BF,UAAWe,EAAOnD,SAASqC,IAAMrC,GAClC,IArBH,CAlBU,CAwCd,CAyHgB4D,CAAiBnE,GAErBF,EAAcuE,GACdhI,EAAEkB,QAAQ6G,OAAO5C,EACrB,IAGZ,CACJ,IAEAnF,EAAE+B,UAAUC,GAAG,QAAS,qCAAqC,SAAU4C,GACnEA,EAAEvE,iBACF,IAAI8H,EAAQnI,EAAEmC,MAEd,GAAKhC,iBAAoBA,gBAAgBiI,2BAAzC,CAGA,IAAIC,EAAuBF,EAAMG,KAAK,6BAClCD,GAAgD,IAAxBA,GACxBlI,gBAAgBoI,+BAA+BF,GAGnD,IAAIG,EAAmBL,EAAMG,KAAK,0BAC9BG,EAAazI,EAAE4E,EAAEiB,QAAQ6C,QAAQ,WAWrC,GAVID,EAAWxF,OAAS,GAAKuF,GAAwC,IAApBA,GAA8C,SAApBA,IAGnEC,EAAazI,EADM,QAApBwI,GAAkD,SAApBA,EACd,gBACU,QAApBA,EACU,eAEAA,MAGnBC,EAAWxF,OAAS,GAAxB,CAGA,IAAI0F,EAAYtG,IAAAoG,GAAUlG,KAAVkG,EAAgB,4CAChC,KAAIE,EAAU1F,OAAS,GAAvB,CAIA,IAAI2F,EAAWT,EAAMG,KAAK,kBACtBO,EAAiBV,EAAMG,KAAK,wBAChC,IAAInG,KAAK2G,aAAa,mBAAkC,IAAbF,GAA6C,UAA3BA,EAASG,gBAS9DC,sCAAiF,KAAzCA,qCAThD,CAcA,IAAIC,EAAiBd,EAAMG,KAAK,wBAChC,GAAInG,KAAK2G,aAAa,yBAA8C,IAAnBG,GAAyD,UAAjCA,EAAeF,cAA2B,CAC/G,IAAI1B,EAASrH,EAAE,qCACfkJ,EAAAA,EAAAA,GAAY7B,GAAQ,EACxB,CAEA,IAAI8B,EAA+B,WAM/B,GALKR,EAAUnG,SAAS,UACpBoC,EAAEtE,kBACFqI,EAAUlG,QAAQ,UAGlB0F,EAAM,GAAGW,aAAa,yBAA8C,IAAnBD,GAAyD,UAAjCA,EAAeE,cACxF,IAAIK,EAAejJ,gBAAgBiI,2BAA2BiB,QAAQC,kBAAiB,SAAUC,EAAUC,GACvG,IAAIJ,EAAaK,aAGA,IAAbD,IAAkC,IAAbD,EAAoB,CAEzCH,EAAaM,UAKb3C,KAHsB,WAClB/G,EAAE,iBAAiByC,QAAQ,QAC/B,GAC4B,IAChC,CACJ,GAER,OAE2C,IAAhCkH,EAAAA,GACPA,EAAAA,EAAAA,GAA6BhB,GAAW,EAAMQ,GAE9CA,GAnCJ,CAjBU,CAJA,CApBA,CA+Ed,IAEAnJ,EAAE+B,UAAUC,GAAG,QAAS,6BAA6B,SAAU4C,GAC3DA,EAAEvE,iBACF,IAAI8H,EAAQnI,EAAEmC,MAEd,GAAKhC,gBAAL,CAGA,IAAIqI,EAAmBL,EAAMG,KAAK,0BAC9BG,EAAazI,EAAE4E,EAAEiB,QAAQ6C,QAAQ,WAWrC,GAVID,EAAWxF,OAAS,GAAKuF,GAAwC,IAApBA,GAA8C,SAApBA,IAGnEC,EAAazI,EADM,QAApBwI,GAAkD,SAApBA,EACd,gBACU,QAApBA,EACU,eAEAA,MAGnBC,EAAWxF,OAAS,GAAxB,CAKA,IAAI0F,EAAYtG,IAAAoG,GAAUlG,KAAVkG,EAAgB,uCAChC,KAAIE,EAAU1F,OAAS,GAAvB,CAGA,IAAI2F,EAAWT,EAAMG,KAAK,kBACtBO,EAAiBV,EAAMG,KAAK,wBAC5BnG,KAAK2G,aAAa,mBAAkC,IAAbF,GAAkBA,EAASG,cAiBtE,IAAIa,EAAwB,WAKxB,IAAIC,EAAMlB,EAAUmB,KAAK,mBACrBD,IACgBA,EAAIzE,WAAayE,EAAIE,UAAUC,GAAG,aAA+C,QAAhCH,EAAIE,UAAUhG,IAAI,aAI/Ea,EAAEtE,kBAGFuJ,EAAIlJ,SAIZ,GAAIwH,EAAM,GAAGW,aAAa,yBAA8C,IAAnBD,GAAyD,UAAjCA,EAAeE,cAA2B,CAEnH,IAAIkB,EAAyB,SAAU/J,EAAOgK,GAE1CvB,EAAUhE,IAAI,wBAAyBsF,GAMvClD,KAHsB,WAClB/G,EAAE,iBAAiByC,QAAQ,QAC/B,GAC4B,IAChC,EAEAkG,EAAU3G,GAAG,wBAAyBiI,EAC1C,CACJ,OAE2C,IAAhCN,EAAAA,GACPA,EAAAA,EAAAA,GAA6BhB,GAAW,EAAMiB,GAE9CA,GA3DM,CANA,CAfA,CAmFd,GAIJ,CAEO,SAASO,IACZ,IAAIC,EAAI,EAMJC,GAAW9F,EAAAA,EAAAA,KACXkE,EAAazI,EAAE,qBAUnB,OATIyI,EAAWxF,OAAS,IAAoC,SAA9BwF,EAAW1E,IAAI,aAA0BsG,GAAY,QAM/ED,EAAI,KAGDA,CACX,CAEO,SAASE,EAAiCC,GAC7C,IAAI5B,EAAY3I,EAAE,8CAClB,KAAI2I,EAAU1F,OAAS,GAAvB,CAGA,IAAIuH,EAA0B,WACrB7B,EAAUnG,SAAS,SAEpBmG,EAAU8B,QAAQhI,QAAQ,SAEA,mBAAnB8H,GACPA,EAAe5B,EAEvB,OAE2C,IAAhCgB,EAAAA,GACPA,EAAAA,EAAAA,GAA6BhB,EAAU8B,SAAS,EAAMD,GAEtDA,GAfM,CAiBd,CAEO,SAASE,EAAsCH,GAClD,IAAI5B,EAAY3I,EAAE,oDAClB,KAAI2I,EAAU1F,OAAS,GAAvB,CAGA,IAAI0H,EAA+B,WAC1BhC,EAAUnG,SAAS,SAEpBmG,EAAU8B,QAAQhI,QAAQ,SAEA,mBAAnB8H,GACPA,EAAe5B,EAEvB,OAE2C,IAAhCgB,EAAAA,GACPA,EAAAA,EAAAA,GAA6BhB,EAAU8B,SAAS,EAAME,GAEtDA,GAfM,CAiBd,CAEO,SAASC,EAA0BL,GACtC,IAAI5B,EAAY3I,EAAE,gCAClB,KAAI2I,EAAU1F,OAAS,GAAvB,CAGA,IAAI4H,EAAmB,WACdlC,EAAUnG,SAAS,SAEpBmG,EAAU8B,QAAQhI,QAAQ,SAEA,mBAAnB8H,GACPA,EAAe5B,EAEvB,OAE2C,IAAhCgB,EAAAA,GACPA,EAAAA,EAAAA,GAA6BhB,EAAU8B,SAAS,EAAMI,GAEtDA,GAfM,CAiBd,CAEO,SAASC,EAA6CC,GAC3C/K,EAAEmC,MAAhB,IACIwG,EAAY3I,EAAE+K,GAEF5K,gBAAgB6K,YAE5BrC,EAAU9F,SAAS,iBAEnB8F,EAAUjG,YAAY,gBAE9B,C,gnBC5gCO,SAASuI,IACP9K,gBAAgB+K,sBAGrBlL,EAAE+B,UAAUC,GAAG,QAAS,cAAc,SAAU4C,GAG5C,IAFAA,EAAEvE,iBAEGF,oBAGDA,gBAAgBgL,oBAGHnL,EAAE,WACJiD,OAAS,GAAxB,CAGA2B,EAAEtE,kBAEF,IAAI6H,EAAQnI,EAAEmC,MACVyG,EAAWT,EAAMG,KAAK,kBAC1B,GAAInG,KAAK2G,aAAa,mBAAkC,IAAbF,GAA6C,UAA3BA,EAASG,cAA2B,CAI7F,GAHAH,EAAWlB,IAASS,EAAMG,KAAK,qBAC3B8C,MAAMxC,KACNA,EAAW,GACXA,EAAW,EACX,OAEAT,EAAMG,KAAK,mBAAoBM,EAAW,EAElD,CAOA7B,KAJsB,WAClB/G,EAAE,iBAAiByC,QAAQ,SAC3BjB,GAAsB,EAC1B,GAC4B,IAtBlB,CAuBd,IAEIrB,gBAAgB+K,qBAAuB/K,gBAAgBkL,eAEvDrL,EAAE+B,UAAUC,GAAG,SAAU,uDAAuD,SAAU4C,GACtF,IAAIL,EAAAA,EAAAA,MAAwB,IAAK,CAE7B,IAAI4D,EAAQnI,EAAEmC,MAEd,GAAIgG,EAAM2B,KAAK,YAAc3B,EAAM2B,KAAK,aAAe3J,gBAAgBmL,mBAAoB,CACvFnD,EAAM2B,KAAK,WAAW,GAGlB3B,EAAM1F,QAAQ,SAId0F,EAAM2B,KAAK,WAAW,EAI9B,CACK3B,EAAM2B,KAAK,WAAc3B,EAAM2B,KAAK,YAGG,oBAA7ByB,2BACPA,2BAA0B,EAItC,CACJ,IAOR,CAEO,SAASC,EAAe3F,GAC3B,GAAKA,GAA2B,GAAjBA,EAAO5C,OAAtB,CACK4C,EAAO4F,MAAM,QACT5F,EAAO4F,MAAM,QACd5F,EAAS,IAAMA,GAEdA,EAAO4F,MAAM,aACd5F,GAAU,WAIlB,IAAIwB,EAASrH,EAAE6F,GACf,GAAIwB,GAAUA,EAAOpE,OAAS,EAAG,CAC7B,IAAIyI,EAAU1L,EAAE,aACZkE,EAAS,EACb,GAAIwH,EAAQzI,OAAS,EACjBiB,EAASwH,EAAQxG,cAAgB,MAEhC,CACD,IAAIyG,EAAgB3L,EAAE,mBAClB2L,EAAc1I,QAAU,IACxB0I,EAAgB3L,EAAE,oBAElB2L,EAAc1I,QAAU,IACxB0I,EAAgB3L,EAAE,8BAKlBkE,EAFmByH,EAAc1I,OAAS,GAAK0I,EAAcnJ,SAAS,WAAamJ,EAAcnJ,SAAS,kBAEjG,GAEA,CACjB,CAEAxC,EAAE,cAAc6H,OAAOrB,QAAQ,CAC3BF,UAAWe,EAAOnD,SAASqC,IAAMrC,GAClC,IACP,CApCyC,CAqC7C,CAEO,SAAS1C,EAAsBoK,GAClC,IAAKzL,gBAAgB0L,uBAEZD,KAEJzL,gBAAgB2L,yBAEZF,GAFT,CAIA,IAAID,EAAgB3L,EAAE,mBAOtB,GANI2L,EAAc1I,QAAU,IACxB0I,EAAgB3L,EAAE,oBAElB2L,EAAc1I,QAAU,IACxB0I,EAAgB3L,EAAE,8BAElB2L,EAAc1I,OAAS,EAAG,CAG1B,IAAIyI,EAAU1L,EAAE,aACZ+L,EAAgB,EACpB,GAAIL,EAAQzI,OAAS,EACjB8I,EAAgBL,EAAQxG,cAAgB,OAKpC6G,EAFmBJ,EAAcnJ,SAAS,WAAamJ,EAAcnJ,SAAS,kBAE9D,EAEA,GAGxBxC,EAAE,cAAc6H,OAAOrB,QAAQ,CAG3BF,UAAWqF,EAAczH,SAASqC,IAAMwF,GACzC,IACP,CA7BA,CAiCJ,CAoCO,SAASC,IAEZ,CAQG,SAASC,EAA0BC,IAKlC3H,EAAAA,EAAAA,MAAwB,OAASpE,gBAAgBmL,oBACT,oBAA7BC,2BACPA,2BAA0B,EAKtC,CAEO,SAASY,EAA6BD,GACzC,IAAIE,EAAuBjM,gBAAgBkM,uBACvCD,GACArF,KAAW,YA7DZ,SAAsCuF,GACzC,IAAIC,EAAMvM,EAAE,kBAAoBsM,GAChC,GAAIC,EAAItJ,OAAS,EAAG,CAChB,IAAIuJ,EAAmBD,EAAI7D,QAAQ,qBAE/BtC,EAAMmG,EAAIrI,SAASqC,IAAMiG,EAAiBtI,SAASqC,IAAMiG,EAAiBlG,YAE9EkG,EAAiB3E,OAAOrB,QAAQ,CAC5BF,UAAWF,GACZ,IACP,CACJ,CAmDYqG,CAA6BL,EACjC,GAAG,IAGX,C","sources":["webpack:///./js/utils/ha-searcbar-functions.js","webpack:///./js/utils/ha-search-results-functions.js"],"sourcesContent":["import 'qtip2/dist/basic/jquery.qtip';\r\nimport { GetBreakpointWidth } from 'Utils/globals-bp';\r\nimport { updateQueryStringWithoutHistory } from 'Utils/global';\r\nimport { /*showSection,*/ hideSection } from 'Utils/section';\r\nimport { scrollToSearchResults } from 'Utils/ha-search-results-functions';\r\nimport { scrollToHotelPrices } from 'Utils/ha-search-single-result-functions';\r\nimport { ScrollToSearchBarForDropDown } from 'Vendors/groupedSelect/groupedSelect-functions.js';\r\n\r\n\r\nexport function InitScript_searchbar() {\r\n $('.searchbutton, .view-all-hotels').click(function (event) {\r\n //var result = true;\r\n //var a = searchViewModel.Rooms();\r\n //$.each(searchViewModel.Rooms(), function (i, r) {\r\n // if (r.Children().length > 0) {\r\n // var arr = $.grep(r.Children(), function (c) { return c.Age() === \"\" });\r\n // result &= arr.length == 0;\r\n // }\r\n //});\r\n //if (!result) {\r\n // //not valid\r\n // alert(AppData.Translations[\"set_children_ages\"]);\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // return;\r\n //}\r\n if (!searchViewModel.ValidateSearchConditions_Rooms(true)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n var flgHotel = false;\r\n if (searchViewModel.IsHotel()) {\r\n // Make sure dates are filled\r\n if (searchViewModel.DepartureDate() == null || searchViewModel.ReturnDate() == null) {\r\n $('.hotel-search-box .validate').show();\r\n } else {\r\n $('.hotel-search-box .validate').hide();\r\n }\r\n flgHotel = searchViewModel.IsCurrentPageId();\r\n }\r\n /* // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID \r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(true);\r\n } else { */\r\n //if (searchViewModel.PageID() == \"\") {\r\n // alert(AppData.Translations[\"choose_country_or_destination\"]);\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // return;\r\n //}\r\n if (!searchViewModel.ValidateSearchConditions_PageID(true)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n if (!searchViewModel.ValidateSearchConditions_DepartureAirportCode(true)) {\r\n //FIXME 2019-10-15 :EA: disabled search because \"Flight+Hotel\" (hotelonly == false) is default and DepartureAirportCode is empty\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n\r\n /*\r\n // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID \r\n var hasViewForResults = document.getElementById('search-results') || document.getElementById('prices');\r\n \r\n // TODO 2017-12-28 ST Temporary back to version without redirecttion to '/search'\r\n if (!hasViewForResults || searchViewModel.PageID() != AppData.CurrentPageId) {\r\n\r\n var slug = \"\";\r\n if (searchViewModel.DestinationSelector())\r\n {\r\n var page = searchViewModel.DestinationSelector().GetDestinationById(searchViewModel.PageID());\r\n if (page) {\r\n slug = page.DataSlug();\r\n }\r\n }\r\n\r\n // We cannot show search results on this page. Send user to the selected destination and do the search there.\r\n window.location = \"/\" + slug + searchViewModel.GetCurrentQuery() + \"#search-results\";\r\n } else {\r\n if (!searchViewModel.IsHotel()) {\r\n scrollToSearchResults();\r\n };\r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(false);\r\n }\r\n */\r\n\r\n var flgRedirect = !searchViewModel.IsSearch();\r\n if (flgHotel) {\r\n // Don't redirect to Search page \r\n // when selected DestinationID is CurrentHotelPage on HotelPage \r\n flgRedirect = false;\r\n }\r\n //var hasViewForResults = document.getElementById('search-results') || document.getElementById('prices');\r\n //if (hasViewForResults && searchViewModel.PageID() == AppData.CurrentPageId) {\r\n // // Don't redirect to Search page \r\n // // when selected DestinationID is CurrentPage and this page has search-results view \r\n // flgRedirect = false;\r\n //}\r\n //// ST flow: don't redirect if it's pressed 'in section'\r\n //var flgInSection = $(this).hasClass('searchbutton-in-section');\r\n //if (!flgHotel && !flgInSection && !searchViewModel.IsFrontPage() && !searchViewModel.IsSearch()) {\r\n // // Redirect to Search page in new tab\r\n // // when searchbutton-in-header was clicked\r\n // flgRedirect = true;\r\n //}\r\n //\r\n //// HW flow: don't redirect if same page\r\n //if ($(this).closest('.searchbar-sticky').length > 0 && !searchViewModel.IsSearch()) {\r\n // flgRedirect = searchViewModel.PageID() != AppData.CurrentPageId;\r\n //}\r\n\r\n\r\n if (flgRedirect) {\r\n //window.location = \"/search\" + searchViewModel.GetCurrentQuery() /*+ \"#search-results\"*/;\r\n\r\n window.location = searchViewModel.GetSearchUrl();\r\n\r\n /* //2018-02-07 \"Open in same tab\" with SearchPage\r\n var url = \"\";\r\n // On FrontPage try open country/destination page\r\n if (searchViewModel.IsFrontPage() && searchViewModel.DestinationSelector()) {\r\n var page = searchViewModel.DestinationSelector().GetDestinationById(searchViewModel.PageID());\r\n if (page && page.DataSlug() && page.DataSlug() != \"\") {\r\n // We cannot show search results on this page. Send user to the selected destination and do the search there.\r\n url = \"/\" + page.DataSlug() + searchViewModel.GetCurrentQuery(true, true) + \"#search-results\";\r\n }\r\n }\r\n // In all other cases we send user to search page\r\n // even if could not get DataSlug on prev.condition\r\n if (!url || url == \"\") {\r\n url = \"/search\" + searchViewModel.GetCurrentQuery() /-*+ \"#search-results\"*-/;\r\n }\r\n window.location = url;\r\n */\r\n\r\n /* //2018-02-07 \"Open in new tab\"\r\n //var url = window.location.protocol + \"//\" + window.location.host + \"/search\" + searchViewModel.GetCurrentQuery() /-*+ \"#search-results\"*-/;\r\n var url = $(this).attr('href');\r\n \r\n //On Front page \"Open in same tab\"\r\n //On other pages \"Open in new tab\"\r\n if (searchViewModel.IsFrontPage()) {\r\n //event.preventDefault();\r\n //event.stopPropagation();\r\n //window.location = url;\r\n } else {\r\n // There is a possibility that a user will have his or her browser security settings such that all pop-ups, \r\n // which includes windows opened with window.open(), will be blocked even if the action is initiated by the user.\r\n // If the window opens, the expression evaluates as, and returns, false.\r\n // If it fails to open, the expression evaluates as, and returns, true -- meaning that the link opens normally (but in the same window).\r\n return !window.open(url, '_blank');\r\n }\r\n */\r\n // ... \"Open in new tab\" as simple link ...\r\n // exclude FrontPage --> \"Open in same tab\"\r\n } else {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!searchViewModel.IsHotel() && AppData.ScrollSettings.SearchResults) {\r\n scrollToSearchResults(true);\r\n };\r\n if (searchViewModel.IsHotel() && AppData.ScrollSettings.SearchResults) {\r\n // uses rAF (requestAnimationFrame) \r\n // for catching correct postion of scrollTop in 2nd 'animation'\r\n // after 1st 'animation' where there are hide-show sections\r\n if (typeof setVisibleSearchCriteria != \"undefined\") {\r\n AppLoader.raf(function () {\r\n setVisibleSearchCriteria(true);\r\n });\r\n }\r\n AppLoader.raf(function () {\r\n scrollToHotelPrices(0, 500);\r\n }, 64);\r\n };\r\n updateQueryStringWithoutHistory();\r\n searchViewModel.RequestSearch(false);\r\n }\r\n\r\n /*} // 2018-01-15 Use CurrentPageId to show HotelName in SearchBar.DestinationID */\r\n });\r\n\r\n $(document).on('click', '.show-rooms-selector-label', function () {\r\n var $label = $(this);\r\n var $roomSelector = $label.parent().find('.show-rooms-selector');\r\n if (!$label.hasClass('open')) {\r\n $roomSelector.trigger('click');\r\n }\r\n });\r\n\r\n $(document).on('click', '.show-rooms-selector', function () {\r\n $(\".input-wrapper\").removeClass('open');\r\n var $roomSelector = $(this);\r\n var parent = $(this).parents('.rooms-persons');\r\n var $input_wrapper = $roomSelector.parents(\".input-wrapper\");\r\n $input_wrapper.addClass('open');\r\n var $labelRoomSelector = parent.find('.show-rooms-selector-label');\r\n\r\n // qtip classes with '.faded'\r\n var classes = 'rooms-selector';\r\n var $header = $roomSelector.parents('.header');\r\n if ($header.length > 0) {\r\n if (!$header.hasClass('searchpage')) {\r\n classes += \" faded\";\r\n }\r\n }\r\n classes += \" vh-max-height\";\r\n if ($roomSelector.hasClass('is-sticky-parent')) {\r\n classes += \" is-sticky-parent\";\r\n }\r\n\r\n var posMy = 'top center';\r\n var posAt = 'bottom center';\r\n var pLeft = 0;\r\n var $addon = $(this).prev('.addon');\r\n if ($addon.length > 0) {\r\n posMy = 'top left';\r\n posAt = 'bottom left';\r\n pLeft = $addon.outerWidth() * -1;\r\n }\r\n\r\n var qtip = $roomSelector.qtip('api');\r\n if (qtip && $roomSelector.hasClass('open')) {\r\n qtip.hide();\r\n return;\r\n }\r\n\r\n function fixQtipAdjust($roomSelector, $roomSelectorContainerQtip) {\r\n //$roomSelector\r\n var api = $roomSelector.qtip('api');\r\n\r\n if (!$roomSelectorContainerQtip) {\r\n $roomSelectorContainerQtip = api.elements.tooltip;\r\n }\r\n var isModalMode = $roomSelectorContainerQtip.hasClass(\"modal\");\r\n if (isModalMode) {\r\n api.set('position.adjust.x', 0);\r\n $roomSelectorContainerQtip.css({ \"width\": '' });\r\n $roomSelectorContainerQtip.css({ \"maxWidth\": '' });\r\n } else {\r\n var $form = $roomSelector.parents(\".search .searchbar-body\"); // use 'fieldset'\r\n var leftForm = $form.offset().left;\r\n var leftTarget = $roomSelector.offset().left;\r\n var currLeft = leftForm - leftTarget;\r\n\r\n var rightForm = leftForm + $form.outerWidth(); // without margin (on HW form is centered by margin)\r\n var rightTarget = leftTarget + $roomSelector.outerWidth(true);\r\n var currRight = rightForm - rightTarget;\r\n\r\n var newWidth = $form.outerWidth(true);\r\n var bp_Width = GetBreakpointWidth();\r\n\r\n\r\n api.set('position.my', 'top left');\r\n api.set('position.at', 'bottom left');\r\n api.set('position.adjust.x', currLeft);\r\n\r\n //if (bp_Width < 1024) {\r\n // //options for bp2 and down\r\n // //Note: HW version is temporarily solution while we have date-pickers with HW-style\r\n // if ($roomSelector.hasClass('qtip-left')) {\r\n // //HW version uses extra class \"qtip-left\"\r\n // if (bp_Width >= 768) {\r\n // api.set('position.my', 'top right');\r\n // api.set('position.at', 'bottom right');\r\n // api.set('position.adjust.x', currRight);\r\n // //for not-small screen use half of width\r\n // newWidth = newWidth / 2;\r\n // } else {\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', currLeft);\r\n // }\r\n // } else {\r\n // //ST version\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', currLeft);\r\n\r\n // if (bp_Width >= 768) {\r\n // //options for bp2\r\n // //for not-small screen use width of parent\r\n // newWidth = $roomSelector.parents(\".input-wrapper\").outerWidth(true);\r\n // } else {\r\n // //for small screen use full width\r\n // //newWidth = newWidth / 2;\r\n // }\r\n // }\r\n //} else {\r\n // //options for bp3 and up\r\n // //Note: HW version is temporarily solution while we have date-pickers with HW-style\r\n // //Check if use HW version\r\n // var flgHWversion = $roomSelector.hasClass('qtip-left') && ((rightForm - leftTarget) >= 360);\r\n // if (flgHWversion) {\r\n // //HW version uses extra class \"qtip-left\"\r\n // api.set('position.my', 'top left');\r\n // api.set('position.at', 'bottom left');\r\n // api.set('position.adjust.x', 0);\r\n // //for not-small screen use space between leftTarget and rightForm\r\n // newWidth = rightForm - leftTarget;\r\n // } else {\r\n // //ST version\r\n // api.set('position.my', 'top right');\r\n // api.set('position.at', 'bottom right');\r\n // api.set('position.adjust.x', currRight);\r\n // //for not-small screen use half of width\r\n // newWidth = newWidth / 2;\r\n // }\r\n //}\r\n\r\n $roomSelectorContainerQtip.css({ \"width\": newWidth });\r\n $roomSelectorContainerQtip.css({ \"maxWidth\": newWidth });\r\n }\r\n\r\n }\r\n\r\n function fixQtipScrollTop(api) {\r\n if (!api)\r\n return;\r\n\r\n var holder = api.target;\r\n var windowHeight = $(window).height();\r\n var offset = windowHeight / 2;\r\n\r\n if (holder.outerHeight() >= offset) {\r\n // no sence to scroll\r\n return;\r\n }\r\n\r\n var currentTop = $(window).scrollTop();\r\n var minTop = currentTop + offset;\r\n var holderTop = holder.offset().top;\r\n\r\n if (minTop > holderTop) {\r\n // don't scroll if holder is located near top of screen\r\n return;\r\n }\r\n\r\n // height of dropdown's inner-view: 70vh;\r\n // padding-bottom of dropdown: 16px;\r\n //var maxHeightOfDropdown = api.tooltip.outerHeight();\r\n var maxHeightOfDropdown = windowHeight * 0.7 + 16;\r\n\r\n // space between control and dropdown: ~29-30px\r\n var marginTop = parseInt(api.tooltip.css(\"margin-top\"));\r\n //var marginTop = 30;\r\n\r\n // chat's space at window's bottom: 40px (height 30px + 10px bottom)\r\n var maxHeight = holder.outerHeight() + marginTop + maxHeightOfDropdown + 40;\r\n var maxOffset = windowHeight - maxHeight;\r\n\r\n var halfOffset = offset / 2;\r\n if (halfOffset > maxOffset) {\r\n offset = maxOffset;\r\n } else {\r\n offset = halfOffset;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n\r\n function updateQtipModalMode(useModalMode, api, $dropdownContainerQtip) {\r\n if (useModalMode) {\r\n $('.qtip.rooms-selector').addClass(\"modal\");\r\n $('html').addClass(\"noscroll\");\r\n\r\n $('.qtip.rooms-selector .close').off('click');\r\n $('.qtip.rooms-selector .modal-close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n } else {\r\n $('html').removeClass(\"noscroll\");\r\n $('.qtip.rooms-selector').removeClass(\"modal\");\r\n\r\n $('.qtip.rooms-selector .modal-close').off('click');\r\n $('.qtip.rooms-selector .close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function fixModalHeadHeight() {\r\n var $contentHead = $('.qtip.rooms-selector .modal-head');\r\n var $stickyWrapper = $contentHead.parent('.sticky-wrapper');\r\n if ($stickyWrapper.length == 0) {\r\n var wrapper = $('
')\r\n .addClass('sticky-wrapper');\r\n \r\n $contentHead.wrapAll(wrapper)\r\n $stickyWrapper = $contentHead.parent('.sticky-wrapper');\r\n }\r\n $stickyWrapper.css('height', $contentHead.outerHeight(true));\r\n };\r\n fixModalHeadHeight();\r\n\r\n function resizer() {\r\n let qtip = $roomSelector.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n\r\n var $dropdownContainerQtip = $('.qtip.rooms-selector');\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n\r\n if (useModalMode != isModalMode) {\r\n updateQtipModalMode(useModalMode, qtip, $dropdownContainerQtip);\r\n }\r\n\r\n fixModalHeadHeight();\r\n fixQtipAdjust($roomSelector);\r\n }\r\n };\r\n\r\n $(this).qtip({\r\n show: {\r\n event: 'click',\r\n ready: true,\r\n solo: true,\r\n },\r\n overwrite: 'false',\r\n hide: 'unfocus',\r\n content: {\r\n text: $('#rooms-selector-temp').html() //text: $('.rooms-selector').html()\r\n },\r\n position: {\r\n target: $(this), //$('.rooms-persons'),\r\n my: posMy, //my: 'top center',\r\n at: posAt, //at: 'bottom center',\r\n tooltip: 'topMiddle',\r\n //viewport: $(window),\r\n //viewport:true,\r\n adjust: {\r\n x: pLeft,\r\n y: 0\r\n },\r\n //effect: false //no-animation\r\n effect: function (api, pos) {\r\n //The default animation callback\r\n //$(this).animate(pos, { duration: 200, queue: FALSE });\r\n\r\n //fix animation when searchbar becomes sticky => no-sticky\r\n if (api.elements.target.hasClass('is-sticky-parent')) {\r\n var window_top = $(window).scrollTop();\r\n pos.top = window_top + 51;\r\n }\r\n $(this).animate(pos, { duration: 0, queue: false });\r\n }\r\n },\r\n style: {\r\n classes: classes,\r\n def: false,\r\n },\r\n events: {\r\n hide: function (event, api) {\r\n $('.qtip.rooms-selector .modal-close').off('click');\r\n $('.qtip.rooms-selector .close').off('click');\r\n $('.qtip.rooms-selector').remove();\r\n $roomSelector.removeClass('open');\r\n $input_wrapper.removeClass('open');\r\n $('html').removeClass(\"noscroll\");\r\n setTimeout(function () {\r\n $labelRoomSelector.removeClass('open');\r\n }, 300);\r\n //$('.qtip.rooms-selector .modal-head').unstick();\r\n $(window).off(\"resize\", resizer);\r\n if (api) api.isShowing = false;\r\n },\r\n render: function (event, api) {\r\n ko.applyBindings(searchViewModel, api.elements.tooltip[0]);\r\n //ko.applyBindings(searchViewModel, $('.rooms-selector')[0]);\r\n $roomSelector.addClass('open');\r\n $labelRoomSelector.addClass('open');\r\n //$('.qtip.rooms-selector .modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n api.tooltip.bind('remove', function () {\r\n //console.log('unstick ' + $('.qtip.rooms-selector .modal-head').length + ' items');\r\n //$('.qtip.rooms-selector .modal-head').unstick();\r\n });\r\n },\r\n show: function (event, api) {\r\n //event.preventDefault(); // Stop it!\r\n if (api) api.isShowing = true;\r\n var $dropdownContainerQtip = $('.qtip.rooms-selector');\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n updateQtipModalMode(useModalMode, api, $dropdownContainerQtip);\r\n\r\n if (useModalMode) {\r\n setTimeout(function () {\r\n fixModalHeadHeight();\r\n }, 100);\r\n\r\n /* On some mobile browser when the overlay was previously\r\n opened and scrolled, if you open it again it doesn't \r\n reset its scrollTop property */\r\n //$dropdownContainerQtip.scrollTop = 0;\r\n } else {\r\n fixQtipScrollTop(api);\r\n }\r\n fixQtipAdjust($roomSelector, $dropdownContainerQtip);\r\n $(window).resize(resizer);\r\n }\r\n }\r\n });\r\n });\r\n\r\n $(document).on('click', '.additional-options-selector', function () {\r\n if (GetBreakpointWidth() < 768 && searchViewModel.IsSearch()) {\r\n $('#sidebarSearchResults .item-filter').click();\r\n } else {\r\n $(\".input-wrapper\").removeClass('open');\r\n var $additionalOptionsSelector = $(this);\r\n var parent = $(this).parents('.additional-search-options');\r\n var $input_wrapper = $additionalOptionsSelector.parents(\".input-wrapper\");\r\n $input_wrapper.addClass('open');\r\n var $labelRoomSelector = parent.find('.show-additional-options-qtip-label');\r\n\r\n // qtip classes with '.faded'\r\n var classes = 'additional-options-qtip';\r\n var $header = $additionalOptionsSelector.parents('.header');\r\n if ($header.length > 0) {\r\n if (!$header.hasClass('searchpage')) {\r\n classes += \" faded\";\r\n }\r\n }\r\n classes += \" vh-max-height\";\r\n if ($additionalOptionsSelector.hasClass('is-sticky-parent')) {\r\n classes += \" is-sticky-parent\";\r\n }\r\n\r\n var posMy = 'top center';\r\n var posAt = 'bottom center';\r\n var pLeft = 0;\r\n var $addon = $(this).prev('.addon');\r\n if ($addon.length > 0) {\r\n posMy = 'top left';\r\n posAt = 'bottom left';\r\n pLeft = $addon.outerWidth() * -1;\r\n }\r\n\r\n var qtip = $additionalOptionsSelector.qtip('api');\r\n if (qtip && $additionalOptionsSelector.hasClass('open')) {\r\n qtip.hide();\r\n return;\r\n }\r\n\r\n function fixQtipAdjust($additionalOptionsSelector, $additionalOptionsSelectorContainerQtip) {\r\n //$additionalOptionsSelector\r\n var api = $additionalOptionsSelector.qtip('api');\r\n\r\n if (!$additionalOptionsSelectorContainerQtip) {\r\n $additionalOptionsSelectorContainerQtip = api.elements.tooltip;\r\n }\r\n var isModalMode = $additionalOptionsSelectorContainerQtip.hasClass(\"modal\");\r\n if (isModalMode) {\r\n api.set('position.adjust.x', 0);\r\n $additionalOptionsSelectorContainerQtip.css({ \"width\": '' });\r\n $additionalOptionsSelectorContainerQtip.css({ \"maxWidth\": '' });\r\n } else {\r\n var $form = $additionalOptionsSelector.parents(\".search .searchbar-body\"); // use 'fieldset'\r\n var leftForm = $form.offset().left;\r\n var leftTarget = $additionalOptionsSelector.offset().left;\r\n var currLeft = leftForm - leftTarget;\r\n\r\n var rightForm = leftForm + $form.outerWidth(); // without margin (on HW form is centered by margin)\r\n var rightTarget = leftTarget + $additionalOptionsSelector.outerWidth(true);\r\n var currRight = rightForm - rightTarget;\r\n\r\n var newWidth = $form.outerWidth(true);\r\n var bp_Width = GetBreakpointWidth();\r\n\r\n\r\n api.set('position.my', 'top left');\r\n api.set('position.at', 'bottom left');\r\n api.set('position.adjust.x', currLeft);\r\n\r\n $additionalOptionsSelectorContainerQtip.css({ \"width\": newWidth });\r\n $additionalOptionsSelectorContainerQtip.css({ \"maxWidth\": newWidth });\r\n }\r\n\r\n }\r\n\r\n function fixQtipScrollTop(api) {\r\n if (!api)\r\n return;\r\n\r\n var holder = api.target;\r\n var windowHeight = $(window).height();\r\n var offset = windowHeight / 2;\r\n\r\n if (holder.outerHeight() >= offset) {\r\n // no sence to scroll\r\n return;\r\n }\r\n\r\n var currentTop = $(window).scrollTop();\r\n var minTop = currentTop + offset;\r\n var holderTop = holder.offset().top;\r\n\r\n if (minTop > holderTop) {\r\n // don't scroll if holder is located near top of screen\r\n return;\r\n }\r\n\r\n var maxHeightOfDropdown = windowHeight * 0.7 + 16;\r\n\r\n // space between control and dropdown: ~29-30px\r\n var marginTop = parseInt(api.tooltip.css(\"margin-top\"));\r\n //var marginTop = 30;\r\n\r\n // chat's space at window's bottom: 40px (height 30px + 10px bottom)\r\n var maxHeight = holder.outerHeight() + marginTop + maxHeightOfDropdown + 40;\r\n var maxOffset = windowHeight - maxHeight;\r\n\r\n var halfOffset = offset / 2;\r\n if (halfOffset > maxOffset) {\r\n offset = maxOffset;\r\n } else {\r\n offset = halfOffset;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n\r\n function updateQtipModalMode(useModalMode, api, $dropdownContainerQtip) {\r\n if (useModalMode) {\r\n $('.qtip.additional-options-qtip').addClass(\"modal\");\r\n $('html').addClass(\"noscroll\");\r\n\r\n $('.qtip.additional-options-qtip .close-qtip').off('click');\r\n $('.qtip.additional-options-qtip .modal-close').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n } else {\r\n $('html').removeClass(\"noscroll\");\r\n $('.qtip.additional-options-qtip').removeClass(\"modal\");\r\n\r\n $('.qtip.additional-options-qtip .modal-close').off('click');\r\n $('.qtip.additional-options-qtip .close-qtip').on('click', function (e) {\r\n if (api) {\r\n api.hide();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function fixModalHeadHeight() {\r\n var $contentHead = $('.qtip.additional-options-qtip .modal-head');\r\n $contentHead.parent('.sticky-wrapper').css('height', $contentHead.outerHeight(true));\r\n };\r\n fixModalHeadHeight();\r\n\r\n function resizer() {\r\n let qtip = $additionalOptionsSelector.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n\r\n var $dropdownContainerQtip = $('.additional-filtering-container .filter-container');\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n\r\n fixModalHeadHeight();\r\n fixQtipAdjust($additionalOptionsSelector);\r\n }\r\n };\r\n\r\n $(this).qtip({\r\n show: {\r\n event: 'click',\r\n ready: true,\r\n solo: true,\r\n },\r\n overwrite: 'false',\r\n hide: 'unfocus',\r\n content: {\r\n text: $('#additional-search-options-selector').html()\r\n },\r\n position: {\r\n target: $(this),\r\n my: posMy, //my: 'top center',\r\n at: posAt, //at: 'bottom center',\r\n tooltip: 'topMiddle',\r\n adjust: {\r\n x: pLeft,\r\n y: 0\r\n },\r\n //effect: false //no-animation\r\n effect: function (api, pos) {\r\n //The default animation callback\r\n\r\n //fix animation when searchbar becomes sticky => no-sticky\r\n if (api.elements.target.hasClass('is-sticky-parent')) {\r\n var window_top = $(window).scrollTop();\r\n pos.top = window_top + 51;\r\n }\r\n $(this).animate(pos, { duration: 0, queue: false });\r\n }\r\n },\r\n style: {\r\n classes: classes,\r\n def: false,\r\n },\r\n events: {\r\n hide: function (event, api) {\r\n $('.additional-filtering-container .filter-container .modal-close').off('click');\r\n $('.additional-filtering-container .filter-container .close').off('click');\r\n $('.additional-filtering-container .filter-container').remove();\r\n $additionalOptionsSelector.removeClass('open');\r\n $input_wrapper.removeClass('open');\r\n $('html').removeClass(\"noscroll\");\r\n setTimeout(function () {\r\n $labelRoomSelector.removeClass('open');\r\n }, 300);\r\n $(window).off(\"resize\", resizer);\r\n if (api) api.isShowing = false;\r\n },\r\n render: function (event, api) {\r\n ko.applyBindings(searchViewModel, api.elements.tooltip[0]);\r\n $additionalOptionsSelector.addClass('open');\r\n $labelRoomSelector.addClass('open');\r\n //$('.additional-filtering-container .filter-container .modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n api.tooltip.bind('remove', function () {\r\n //$('.qtip.additional-options-qtip .modal-head').unstick();\r\n });\r\n },\r\n show: function (event, api) {\r\n //event.preventDefault(); // Stop it!\r\n if (api) api.isShowing = true;\r\n var $dropdownContainerQtip = $('.additional-filtering-container .filter-container');\r\n var useModalMode = GetBreakpointWidth() < 768;\r\n updateQtipModalMode(useModalMode, api, $dropdownContainerQtip);\r\n\r\n if (useModalMode) {\r\n setTimeout(function () {\r\n fixModalHeadHeight();\r\n }, 100);\r\n\r\n /* On some mobile browser when the overlay was previously\r\n opened and scrolled, if you open it again it doesn't \r\n reset its scrollTop property */\r\n //$dropdownContainerQtip.scrollTop = 0;\r\n } else {\r\n fixQtipScrollTop(api);\r\n }\r\n fixQtipAdjust($additionalOptionsSelector);\r\n $(window).resize(resizer);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n $(document).on('click', '.open-departure-airports-selector', function (e) {\r\n e.preventDefault();\r\n var $this = $(this);\r\n\r\n if (!searchViewModel || !searchViewModel.DepartureAirportSelector())\r\n return;\r\n\r\n var departureAirportCode = $this.attr(\"data-departureAirportCode\");\r\n if (departureAirportCode && departureAirportCode != '') {\r\n searchViewModel.SetDefaultDepartureAirportCode(departureAirportCode);\r\n }\r\n\r\n var searchbarOutside = $this.attr(\"data-searchbar-outside\");\r\n var $searchbar = $(e.target).closest('.search');\r\n if ($searchbar.length < 1 && searchbarOutside && searchbarOutside != '' && searchbarOutside != 'false')\r\n {\r\n if(searchbarOutside == 'true' || searchbarOutside == 'first')\r\n $searchbar = $('.search:first');\r\n else if (searchbarOutside == 'last')\r\n $searchbar = $('.search:last');\r\n else \r\n $searchbar = $(searchbarOutside);\r\n }\r\n \r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n var $dropdown = $searchbar.find('.grouped-select.departure-airport-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n var autosearchOnce = $this.attr(\"data-autosearch-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n //onlyOnce = parseInt($this.attr(\"data-open-once\"));\r\n //if (isNaN(onlyOnce))\r\n // onlyOnce = 0;\r\n //if (onlyOnce > 0) {\r\n // return;\r\n //} else {\r\n // $this.attr(\"data-open-once\", onlyOnce+1);\r\n //}\r\n if (searchbarLastDepartureAirportClicked && searchbarLastDepartureAirportClicked !== \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var hideValidation = $this.attr(\"data-hide-validation\");\r\n if (this.hasAttribute(\"data-hide-validation\") && hideValidation !== 0 && hideValidation.toLowerCase() !== \"false\") {\r\n var holder = $('.departureAirportCode-validation');\r\n hideSection(holder, true);\r\n }\r\n\r\n var openDepartureAirportselector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n e.stopPropagation();\r\n $dropdown.trigger('click');\r\n }\r\n\r\n if ($this[0].hasAttribute(\"data-autosearch-once\") && autosearchOnce !== 0 && autosearchOnce.toLowerCase() !== \"false\") {\r\n var subscription = searchViewModel.DepartureAirportSelector().Visible.subscribeChanged(function (newValue, oldValue) {\r\n if (subscription.isDisposed) {\r\n return;\r\n }\r\n if (oldValue === true && newValue === false) {\r\n // unsubscribe current event, because 'autosearch-once'\r\n subscription.dispose();\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n }\r\n });\r\n }\r\n };\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown, true, openDepartureAirportselector);\r\n } else {\r\n openDepartureAirportselector();\r\n }\r\n\r\n });\r\n\r\n $(document).on('click', '.open-date-range-selector', function (e) {\r\n e.preventDefault();\r\n var $this = $(this);\r\n\r\n if (!searchViewModel)\r\n return;\r\n\r\n var searchbarOutside = $this.attr(\"data-searchbar-outside\");\r\n var $searchbar = $(e.target).closest('.search');\r\n if ($searchbar.length < 1 && searchbarOutside && searchbarOutside != '' && searchbarOutside != 'false')\r\n {\r\n if(searchbarOutside == 'true' || searchbarOutside == 'first')\r\n $searchbar = $('.search:first');\r\n else if (searchbarOutside == 'last')\r\n $searchbar = $('.search:last');\r\n else \r\n $searchbar = $(searchbarOutside);\r\n }\r\n\r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n // $(\".input-wrapper\").removeClass('open');\r\n\r\n var $dropdown = $searchbar.find('.grouped-select.date-range-selector');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n var autosearchOnce = $this.attr(\"data-autosearch-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n //onlyOnce = parseInt($this.attr(\"data-open-once\"));\r\n //if (isNaN(onlyOnce))\r\n // onlyOnce = 0;\r\n //if (onlyOnce > 0) {\r\n // return;\r\n //} else {\r\n // $this.attr(\"data-open-once\", onlyOnce+1);\r\n //}\r\n }\r\n\r\n //var hideValidation = $this.attr(\"data-hide-validation\");\r\n //if (this.hasAttribute(\"data-hide-validation\") && hideValidation !== 0 && hideValidation.toLowerCase() !== \"false\") {\r\n // var holder = $('.dateRange-validation');\r\n // hideSection(holder, true);\r\n //}\r\n\r\n var openDateRangeSelector = function () {\r\n //if (!$dropdown.hasClass('open')) {\r\n // e.stopPropagation();\r\n // $dropdown.trigger('click');\r\n //}\r\n var drp = $dropdown.data('daterangepicker');\r\n if (drp) {\r\n var isShowing = drp.isShowing || drp.container.is(\":visible\") || drp.container.css(\"display\") != 'none';\r\n if (isShowing) {\r\n // $this.parents(\".input-wrapper\").addClass('open');\r\n } else {\r\n e.stopPropagation();\r\n //$dropdown.trigger('click');\r\n //drp.showCalendars();\r\n drp.show();\r\n }\r\n }\r\n\r\n if ($this[0].hasAttribute(\"data-autosearch-once\") && autosearchOnce !== 0 && autosearchOnce.toLowerCase() !== \"false\") {\r\n\r\n var cbApplyDateRangePicker = function (event, picker) {\r\n // unsubscribe current event, because 'autosearch-once'\r\n $dropdown.off('apply.daterangepicker', cbApplyDateRangePicker);\r\n\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n };\r\n\r\n $dropdown.on('apply.daterangepicker', cbApplyDateRangePicker);\r\n }\r\n };\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown, true, openDateRangeSelector);\r\n } else {\r\n openDateRangeSelector();\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n};\r\n\r\nexport function searchbarFixedHeight() {\r\n var h = 0;\r\n //var holder = $(\".searchbar-fixed\");\r\n //if (holder && (holder.is(':visible') || $(window).width() > 1024)) {\r\n // h = h + holder.outerHeight(true);\r\n //}\r\n\r\n var maxWidth = GetBreakpointWidth();\r\n var $searchbar = $(\".searchbar-sticky\");\r\n if ($searchbar.length > 0 && ($searchbar.css('position') == 'fixed' || maxWidth >= 1280)) {\r\n //h = h + $searchbar.outerHeight();\r\n // FIXME: after 'searchbar' re-styling may be other values\r\n // height of searchbar-sticky:\r\n // standard mode: 125px;\r\n // sticky mode: 80px;\r\n h = 90 + 12;\r\n }\r\n\r\n return h;\r\n};\r\n\r\nexport function OpenSearchBarDestinationSelector(callbackOpened) {\r\n var $dropdown = $('.search .grouped-select.destination-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openDestinationSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openDestinationSelector);\r\n } else {\r\n openDestinationSelector();\r\n }\r\n};\r\n\r\nexport function OpenSearchBarDepartureAirportSelector(callbackOpened) {\r\n var $dropdown = $('.search .grouped-select.departure-airport-select');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openDepartureAirportSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openDepartureAirportSelector);\r\n } else {\r\n openDepartureAirportSelector();\r\n }\r\n};\r\n\r\nexport function OpenSearchBarRoomSelector(callbackOpened) {\r\n var $dropdown = $('.search .show-rooms-selector');\r\n if ($dropdown.length < 1)\r\n return;\r\n\r\n var openRoomSelector = function () {\r\n if (!$dropdown.hasClass('open')) {\r\n //e.stopPropagation();\r\n $dropdown.first().trigger('click');\r\n }\r\n if (typeof callbackOpened === \"function\") {\r\n callbackOpened($dropdown);\r\n }\r\n }\r\n\r\n if (typeof ScrollToSearchBarForDropDown != \"undefined\") {\r\n ScrollToSearchBarForDropDown($dropdown.first(), true, openRoomSelector);\r\n } else {\r\n openRoomSelector();\r\n }\r\n};\r\n\r\nexport function AfterUpdateSearchBarDepartureAirportSelector(sender) {\r\n let $select = $(this);\r\n let $dropdown = $(sender);\r\n\r\n let hotelOnly = searchViewModel.HotelOnly();\r\n if (hotelOnly) {\r\n $dropdown.addClass('has-hotelonly');\r\n } else {\r\n $dropdown.removeClass('has-hotelonly');\r\n }\r\n};\r\n","import 'Vendors/jquery.inview';\r\nimport { GetBreakpointWidth } from 'Utils/globals-bp';\r\n//import { searchbarFixedHeight } from 'Utils/ha-searcbar-functions';\r\n\r\nexport function InitScript_searchResults() {\r\n if (!searchViewModel.isMultipleResults())\r\n return;\r\n\r\n $(document).on('click', '.do-search', function (e) {\r\n e.preventDefault();\r\n\r\n if (!searchViewModel)\r\n return;\r\n\r\n if (searchViewModel.SearchInProgress())\r\n return;\r\n\r\n var $searchbar = $('.search');\r\n if ($searchbar.length < 1)\r\n return;\r\n\r\n e.stopPropagation();\r\n\r\n var $this = $(this);\r\n var onlyOnce = $this.attr(\"data-only-once\");\r\n if (this.hasAttribute(\"data-only-once\") && onlyOnce !== 0 && onlyOnce.toLowerCase() !== \"false\") {\r\n onlyOnce = parseInt($this.attr(\"data-search-once\"));\r\n if (isNaN(onlyOnce))\r\n onlyOnce = 0;\r\n if (onlyOnce > 0) {\r\n return;\r\n } else {\r\n $this.attr(\"data-search-once\", onlyOnce + 1);\r\n }\r\n }\r\n\r\n // start search, give some time for animation\r\n var startAutoSearch = function () {\r\n $('.searchbutton').trigger('click');\r\n scrollToSearchResults(true);\r\n };\r\n setTimeout(startAutoSearch, 300);\r\n });\r\n\r\n if (searchViewModel.isMultipleResults() && searchViewModel.UseAutoLoad()) {\r\n // Automatic load more hotels in search result on scrolling\r\n $(document).on('inview', '.autoload-more-container > .show-more-hotel-results', function (e) {\r\n if (GetBreakpointWidth() >= 768) {\r\n //e.preventDefault();\r\n var $this = $(this);\r\n //console.log(\">>>> $this.data('running') = \" + $this.data('running') + \" *** $this.data('inview') = \" + $this.data('inview') + ' <>');\r\n if ($this.data('inview') && !$this.data('running') && !searchViewModel.FilterInProgress()) {\r\n $this.data('running', true);\r\n function autoloadMoreHotels() {\r\n //console.log(\">>>> >>> autoloadMoreHotels \");\r\n $this.trigger('click'); //$this.click();\r\n //if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n // UpdateSidebarSearchFilter(true);\r\n //}\r\n $this.data('running', false);\r\n }\r\n //setTimeout(autoloadMoreHotels, 500);\r\n autoloadMoreHotels();\r\n }\r\n if (!$this.data('inview') && !$this.data('running')) {\r\n //console.log(\">>>> >>> UpdateSidebarSearchFilter \");\r\n //alert(\"$this.data('running') = \" + $this.data('running') + \" \\n$this.data('inview') = \" + $this.data('inview'));\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 250, true);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //if (searchViewModel.isMultipleResults() && typeof UpdateSearchMap != \"undefined\") {\r\n // UpdateSearchMap(false);\r\n //}\r\n\r\n};\r\n\r\nexport function ScrollToTarget(target) {\r\n if (!target || target.length == 0) return;\r\n if (!target.match(\"^#\")) {\r\n if (!target.match(\"^\\.\")) {\r\n target = \".\" + target;\r\n }\r\n if (!target.match(\":first$\")) {\r\n target += \":first\";\r\n }\r\n }\r\n\r\n var holder = $(target);\r\n if (holder && holder.length > 0) {\r\n var topMenu = $(\".page-nav\");\r\n var offset = 0;\r\n if (topMenu.length > 0) {\r\n offset = topMenu.outerHeight() - 1;\r\n }\r\n else {\r\n var searchResults = $(\"#search-results\");\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\".search-results\");\r\n }\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\"#search-results-container\");\r\n }\r\n\r\n var flgWithSearchBar = searchResults.length > 0 && searchResults.hasClass('anchor') && searchResults.hasClass('with-searchbar');\r\n if (flgWithSearchBar)\r\n offset = 90;\r\n else\r\n offset = 0;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n scrollTop: holder.offset().top - offset\r\n }, 300);\r\n }\r\n};\r\n\r\nexport function scrollToSearchResults(forceScrolling) {\r\n if (!searchViewModel.RetrievingDataReady()) {\r\n //console.log(\"scrollToSearchResults: RetrievingDataReady is false.\");\r\n if (!forceScrolling) return;\r\n }\r\n if (!searchViewModel.UseScrollingToResults()) {\r\n //console.log(\"scrollToSearchResults: UseScrollingToResults is false.\");\r\n if (!forceScrolling) return;\r\n }\r\n var searchResults = $(\"#search-results\");\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\".search-results\");\r\n }\r\n if (searchResults.length <= 0) {\r\n searchResults = $(\"#search-results-container\");\r\n }\r\n if (searchResults.length > 0) {\r\n //console.log(\"scrollToSearchResults: searchResults.offset().top = \" + searchResults.offset().top + \" searchbarFixedHeight() = \" + searchbarFixedHeight());\r\n\r\n var topMenu = $(\".page-nav\");\r\n var topMenuHeight = 0;\r\n if (topMenu.length > 0) {\r\n topMenuHeight = topMenu.outerHeight() - 1;\r\n }\r\n else {\r\n var flgWithSearchBar = searchResults.hasClass('anchor') && searchResults.hasClass('with-searchbar');\r\n if (flgWithSearchBar)\r\n topMenuHeight = 0;\r\n else\r\n topMenuHeight = 80;\r\n }\r\n\r\n $('html, body').stop().animate({\r\n //scrollTop: searchResults.offset().top - searchbarFixedHeight() - 16\r\n //scrollTop: searchResults.offset().top /*Used CSS Padding/Marging for anchor position*/\r\n scrollTop: searchResults.offset().top - topMenuHeight/* - 80*/ // disabled -80px for all versions\r\n }, 300);\r\n }\r\n else {\r\n //console.log(\"scrollToSearchResults: '#search-results' no found.\");\r\n }\r\n};\r\n\r\nexport function scrollToSearchResultByPageId(id) {\r\n let $el = $('#hotel-page-id-' + id);\r\n if ($el.length > 0) {\r\n let $scrollContainer = $el.closest('#sidebarMapResult');\r\n\r\n let pos = $el.offset().top - $scrollContainer.offset().top + $scrollContainer.scrollTop();\r\n\r\n $scrollContainer.stop().animate({\r\n scrollTop: pos\r\n }, 1000);\r\n }\r\n};\r\n\r\n\r\n\r\nexport function clampHotelDescription() {\r\n //var elements = document.getElementsByClassName(\"clamp-roomdesc\");\r\n ////var readMore = '' + '
Read more
';\r\n //\r\n //Array.prototype.forEach.call(elements, function (element, index, array) {\r\n // var link = $(element).next();\r\n // var text = link.text();\r\n // var readMore = \"... \"+link.outerHTML();\r\n // link.hide();\r\n //\r\n // element.innerHTML = text + element.innerHTML;\r\n //\r\n // var clamping = $clamp(element, { clamp: 2, useNativeClamp: false, splitOnChars: ['.', ',', ' ']/*, truncationChar: '_', truncationHTML: readMore */});\r\n // $(element).find('.clamp-link').show();\r\n // var txt1 = clamping.originalText;\r\n // var txt2 = clamping.clampedText;\r\n //});\r\n};\r\n\r\nexport function AfterRenderSearchResults() {\r\n //console.log('AfterRenderSearchResults');\r\n /*if (GetBreakpointWidth() >= 1024) {\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 16, true);\r\n }\r\n }*/\r\n};\r\n\r\nexport function AfterForeachSearchResults(hotelResults) {\r\n //console.log('AfterForeachSearchResults >> ' + (hotelResults != null ? hotelResults.length : -1) + ' <>');\r\n\r\n\r\n\r\n if (GetBreakpointWidth() >= 1024 && !searchViewModel.FilterInProgress()) {\r\n if (typeof UpdateSidebarSearchFilter != \"undefined\") {\r\n UpdateSidebarSearchFilter(true);\r\n //setTimeout(UpdateSidebarSearchFilter, 16, true);\r\n }\r\n }\r\n\r\n};\r\n\r\nexport function AfterForeachSearchResultsMap(hotelResults) {\r\n var selectedMarkerPageId = searchViewModel.SelectedMarkerPageId();\r\n if (selectedMarkerPageId) {\r\n setTimeout(function () {\r\n scrollToSearchResultByPageId(selectedMarkerPageId);\r\n }, 300);\r\n }\r\n\r\n};\r\n"],"names":["InitScript_searchbar","$","click","event","searchViewModel","ValidateSearchConditions_Rooms","preventDefault","stopPropagation","flgHotel","IsHotel","DepartureDate","ReturnDate","show","hide","IsCurrentPageId","ValidateSearchConditions_PageID","ValidateSearchConditions_DepartureAirportCode","flgRedirect","IsSearch","window","location","GetSearchUrl","AppData","ScrollSettings","SearchResults","scrollToSearchResults","setVisibleSearchCriteria","AppLoader","raf","scrollToHotelPrices","updateQueryStringWithoutHistory","RequestSearch","document","on","_context","$label","this","$roomSelector","_findInstanceProperty","parent","call","hasClass","trigger","removeClass","parents","$input_wrapper","addClass","$labelRoomSelector","classes","$header","length","posMy","posAt","pLeft","$addon","prev","outerWidth","qtip","fixQtipAdjust","$roomSelectorContainerQtip","api","elements","tooltip","set","css","$form","leftForm","offset","left","leftTarget","currLeft","newWidth","GetBreakpointWidth","updateQtipModalMode","useModalMode","$dropdownContainerQtip","off","e","fixModalHeadHeight","$contentHead","$stickyWrapper","wrapper","wrapAll","outerHeight","resizer","isShowing","isModalMode","ready","solo","overwrite","content","text","html","position","target","my","at","adjust","x","y","effect","pos","window_top","scrollTop","top","animate","duration","queue","style","def","events","remove","_setTimeout","render","_context2","ko","applyBindings","_bindInstanceProperty","holder","windowHeight","height","maxHeightOfDropdown","marginTop","_parseInt","maxOffset","halfOffset","stop","fixQtipScrollTop","resize","$additionalOptionsSelector","$additionalOptionsSelectorContainerQtip","_context3","$this","DepartureAirportSelector","departureAirportCode","attr","SetDefaultDepartureAirportCode","searchbarOutside","$searchbar","closest","$dropdown","onlyOnce","autosearchOnce","hasAttribute","toLowerCase","searchbarLastDepartureAirportClicked","hideValidation","hideSection","openDepartureAirportselector","subscription","Visible","subscribeChanged","newValue","oldValue","isDisposed","dispose","ScrollToSearchBarForDropDown","openDateRangeSelector","drp","data","container","is","cbApplyDateRangePicker","picker","searchbarFixedHeight","h","maxWidth","OpenSearchBarDestinationSelector","callbackOpened","openDestinationSelector","first","OpenSearchBarDepartureAirportSelector","openDepartureAirportSelector","OpenSearchBarRoomSelector","openRoomSelector","AfterUpdateSearchBarDepartureAirportSelector","sender","HotelOnly","InitScript_searchResults","isMultipleResults","SearchInProgress","isNaN","UseAutoLoad","FilterInProgress","UpdateSidebarSearchFilter","ScrollToTarget","match","topMenu","searchResults","forceScrolling","RetrievingDataReady","UseScrollingToResults","topMenuHeight","AfterRenderSearchResults","AfterForeachSearchResults","hotelResults","AfterForeachSearchResultsMap","selectedMarkerPageId","SelectedMarkerPageId","id","$el","$scrollContainer","scrollToSearchResultByPageId"],"sourceRoot":""}