{"version":3,"file":"vendors_groupedSelect_knockout_groupedSelect_js.build.js","mappings":"qWAGO,SAASA,EAA6BC,EAAWC,EAAqBC,GAGzE,IAAIC,GAAc,EACdC,EAAMJ,EAAYA,EAAUK,KAAK,OAAS,KAC1CC,EAAgC,MAAPF,EAAcA,EAAIG,QAAU,KAMzD,IAJKN,GAAuBK,GAA0BA,EAAuBE,OAAS,IAClFL,EAAcG,EAAuBG,SAAS,UAG9CN,OAOG,CACH,IAAIO,EAAMC,EAAEC,QAAQC,aAAeF,EAAE,cAAcE,YAC/CC,EAAUd,EAAYA,EAAUe,QAAQ,WAAaJ,EAAE,iBAC3D,IAAKG,GAAYA,GAAWA,EAAQN,OAAS,EAEzC,OAEJ,IAAIK,EAAYC,EAAQE,SAASN,IAEjC,IAAI,UAAwB,IAAK,CAM7B,IAAIO,EAAcN,EAAE,gBACpB,GAA2B,MAAvB,EAAAO,EAAOC,cAAwBF,EAAYT,OAAS,EAEpDK,GADIO,EAASH,EAAYI,aAGjC,KAAO,CAEH,IAAIC,EAAWX,EAAE,aACjB,GAAIW,EAASd,OAAS,EAAG,CACrB,IAAIe,EAAiBD,EAASP,QAAQ,mBACtC,GAAIQ,EAAef,OAAS,EAAG,CAC3B,IAAIQ,EAASO,EAAeP,SAASN,IACjCU,EAASG,EAAeF,cAExBR,EAAYG,GAAUI,EAAS,IAG/BP,GAAcO,EAAS,KAE/B,CACJ,CACJ,CAGA,GAAIV,EAAMG,EAAW,CAQjB,IAAIW,GAAc,EAalB,YAHAb,EAAE,cAAcc,OAAOC,MAAM,KAAKC,QAAQ,CACtCd,UAAWA,GACZ,KAXoB,WACfW,IAEJA,GAAc,GAETtB,GAAgC,mBAAbA,IAExBA,EAAS0B,MAAMC,KAAMC,WACzB,GAKJ,CACJ,CAEI5B,GAAgC,mBAAbA,GACnBA,GAER,CAEO,SAAS6B,EAAsCC,GAClD,SAAKA,GAAiB,KAATA,KAGD,oBAARA,EACO,qBAGC,aAARA,GACO,mBAIf,C,0QChGC,SAAUrB,GAEP,IAAIsB,EAAyB,GAE7B,SAASC,IACL,OAAO,SAAuB,GAClC,CAEAvB,EAAEwB,GAAGC,cAAgB,SAAUC,GAC3B,IAAIC,EAAOT,KAGX,GAAsB,iBAAXQ,EAAqB,CAC5B,IAAIE,EAASF,EACb,GAAc,WAAVE,EACAV,KAAKW,MAAK,WAENC,EADc9B,EAAEkB,MAEpB,SACG,GAAc,kBAAVU,EACPV,KAAKW,MAAK,WAEN,IAAIxC,EAAYW,EAAEkB,MAAMa,KAAK,mBAC1B1C,EAAUQ,OAAS,GAClBmC,EAAe3C,EAEvB,SACG,GAAc,WAAVuC,GAAiC,UAAVA,EAAoB,CAClD,IAAIK,EAAqB,UAAVL,EACfV,KAAKW,MAAK,WAEN,IAAIxC,EAAYW,EAAEkB,MAAMa,KAAK,mBAC1B1C,EAAUQ,OAAS,IAClBqC,EAAW7C,EAAW,KAAM4C,GAC5BD,EAAe3C,GAEvB,GACJ,KAAqB,WAAVuC,GACPV,KAAKW,MAAK,WACN,IAAIM,EAAUnC,EAAEkB,MACZ7B,EAAYW,EAAEkB,MAAMa,KAAK,mBAEzB1C,EAAUQ,SACVR,EAAU+C,SACVD,EAAQE,IAAI,UAAW,IAE/B,IACmC,GAA/BrC,EAAE,mBAAmBH,QACrBG,EAAEsC,UAAUC,IAAI,oBAGpBC,QAAQC,IAAI,WAAab,EAAS,qBAEtC,OAAOV,IACX,CA0KA,SAASY,EAAeK,GACpB,IAAI9C,EAAY8C,EAAQJ,KAAK,mBAClB1C,EAAUS,SAAS,QAE9B,GAAIT,EAAUQ,OAAQ,CAClB,IAAI6C,EAAYP,EAAQQ,KAAK,mBACzBC,EAAO,GACPF,EAAU7C,OAAS,IACnB+C,EAAOF,EAAUrB,KAAK,YAAcqB,EAAUE,QAElD,IAAIC,EAAiBC,EAAkBzD,GACnCwD,EAAeE,SAASC,cAGxB3D,EAAUsD,KAAK,YAAYM,KAAKL,GAGpC,IAAIM,EAAcL,EAAeE,SAASG,YACf,mBAAhBA,GACPA,EAAYjC,MAAMkB,EAAQ,GAAI,CAAC9C,EAAU,KAEzCqD,EAAUS,MACV9D,EAAUsD,KAAK,YAAYS,YAAY,SAEvC/D,EAAUsD,KAAK,YAAYU,SAAS,QAE5C,CACJ,CAEA,SAASnB,EAAW7C,EAAWwD,EAAgBZ,GAC3C,GAAK5C,EAAL,CAGqB,MAAlBwD,QAAmD,IAAlBA,IAChCA,EAAiBC,EAAkBzD,IAEvCwD,EAAeE,SAASd,QAAUA,EAElC,IAAIqB,EAAiBtD,EAAE6C,EAAeU,iBAAiBC,QAAQ,kBAE3DX,EAAeE,SAASd,SACxB5C,EAAU+D,YAAY,YACtBE,EAAeF,YAAY,cAE3B/D,EAAUgE,SAAS,YACnBC,EAAeD,SAAS,YAdlB,CAgBd,CAGA,SAASrB,EAAe3C,EAAWwD,GAC/B,IAAKxD,EACD,YAEwB,IAAlBwD,IACNA,EAAiBC,EAAkBzD,IAEvC,IAAIK,EAAOL,EAAUK,KAAK,OAC1B,GAAIA,GAAQA,EAAK+D,UAAW,CACxB,IAAI9D,EAAyBK,EAAE,IAAM6C,EAAeE,SAASW,uBACzDlE,EAAcG,EAAuBG,SAAS,SAC9C6D,IAAed,EAAeE,SAASa,eAAerC,IAEtDoC,GAAgBnE,GAChBqE,EAAoBF,EAAcjE,EAAMC,GAI5CmE,EADiB9D,EAAE6C,EAAeE,SAASgB,oBAE3CC,EAAc3E,GACd4E,EAAsB5E,EAAWM,EACrC,CACJ,CAEA,SAASuE,EAAoBC,GACzB,IAAIC,EAAmB,KAQvB,YAPgD,IAArCD,EAAQpB,SAASqB,kBAAwE,MAArCD,EAAQpB,SAASqB,mBAExEA,EAD4C,mBAArCD,EAAQpB,SAASqB,iBACLD,EAAQpB,SAASqB,mBAEjBD,EAAQpB,SAASqB,kBAGrCA,CACX,CAEA,SAASC,EAA2BD,EAAkBE,GAC7CF,QAEkC,IAA5BA,EAAiBG,UAGW,mBAA5BH,EAAiBG,QACxBH,EAAiBG,QAAQD,GAEzBF,EAAiBG,QAAUD,EAEnC,CAaA,SAASxB,EAAkBzD,GACvB,IAAIkB,EAAIP,EAAEwE,KAAKlD,GAAwB,SAAUmD,GAM7C,OAHYzE,EAAEwE,KAAKC,EAAKC,OAAO,SAAUC,GAAY,OAAOA,EAAStF,UAAUuF,GAAGvF,EAAY,IAChFQ,OAAS,CAG3B,IACA,OAAIU,EAAEV,OAAS,EACJU,EAAE,IAETiC,QAAQC,IAAI,2BAA6BpD,GAClC,KAEf,CAEA,SAASyE,EAAmBe,GACxB,IAAIC,EAAeD,EAAWlC,KAAK,eAC/BoC,EAAiBD,EAAaE,OAAO,mBACzC,GAA6B,GAAzBD,EAAelF,OAAa,CAC5B,IAAIoF,EAAUjF,EAAE,eACXqD,SAAS,kBAEVyB,EAAaI,SAAQ,WACb,OAAOD,CACf,IACAF,EAAiBD,EAAaE,OAAO,kBAC7C,CACAD,EAAe1C,IAAI,SAAUyC,EAAapE,aAAY,GAC1D,CAEA,SAASsD,EAAc3E,EAAWM,GAC9B,IAAIkD,EAAiBC,EAAkBzD,GAClCM,IACDA,EAAyBK,EAAE,IAAM6C,EAAeE,SAASW,wBAE7D,IAAIjE,EAAMJ,EAAUK,KAAK,OAEzB,GADkBC,EAAuBG,SAAS,SAE9CL,EAAI0F,IAAI,oBAAqB,GAC7BxF,EAAuB0C,IAAI,CAAE,MAAS,KACtC1C,EAAuB0C,IAAI,CAAE,SAAY,SACtC,CACH,IAAI+C,EAAQ/F,EAAUmE,QAAQ,2BAC9B,GAAI4B,EAAMvF,OAAS,EAAG,CAClB,IAEIwF,EAFWD,EAAM/E,SAASiF,KACbjG,EAAUgB,SAASiF,KAEhCC,EAAWH,EAAMI,aACrB/F,EAAI0F,IAAI,oBAAqBE,GAC7B1F,EAAuB0C,IAAI,CAAE,MAASkD,IACtC5F,EAAuB0C,IAAI,CAAE,SAAYkD,GAC7C,CAEA,GAAI1C,EAAeE,SAAS0C,kBAAmB,CACvCF,EAAWlG,EAAUmG,aACzB/F,EAAI0F,IAAI,oBAAqB,GAC7BxF,EAAuB0C,IAAI,CAAE,MAASkD,IACtC5F,EAAuB0C,IAAI,CAAE,SAAYkD,GAC7C,CACJ,CAEJ,CAEA,SAAStB,EAAsB5E,EAAWM,GACtC,IAAKA,EAAwB,CACzB,IAAIkD,EAAiBC,EAAkBzD,GACvCM,EAAyBK,EAAE,IAAM6C,EAAeE,SAASW,sBAC7D,CACA,IAAIjE,EAAMJ,EAAUK,KAAK,OACrBC,EAAuBE,OAAS,GAAKJ,EAAIG,SAAWH,EAAIG,QAAQC,OAAS,IAEzEF,EAAyBF,EAAIG,SAEjC,IAAIJ,EAAcG,EAAuBG,SAAS,SAC9C4F,EAAkB,IAAI/F,EAAuBgG,KAAK,MAClDhG,EAAuBE,OAAS,IAEhC6F,EAAkB,KAAMjG,EAAIG,QAAQ+F,KAAK,OAASlG,EAAImG,MAGtCjG,EAAuBgD,KAAK,0BAClCd,MAAK,SAAUgE,EAAGC,GAC5B,IAAIC,EAAQ/F,EAAE8F,GACVE,EAAUD,EAAME,aAAa,UAC7BF,EAAME,aAAa,SAAU,aAAeP,GAC5CK,EAAME,aAAa,SAAU,WAAYP,GAEzClG,GACAuG,EAAM1C,SAAS,SACf2C,EAAQ3C,SAAS,SACjB0C,EAAME,aAAa,SAAU,WAAY,CAAEC,GAAK,aAAcC,GAAI,gBAAiBC,UAAW,eAE9FL,EAAM3C,YAAY,SAClB4C,EAAQ5C,YAAY,SACpB2C,EAAME,aAAa,SAAU,WAAY,CAAEC,GAAK,WAAYC,GAAI,cAAeC,UAAW,aAE1FC,YAAW,WACPP,EAAKQ,OACT,GAAG,MAEH3G,EAAuBG,SAAS,sBAChCiG,EAAM1C,SAAS,oBACf2C,EAAQ3C,SAAS,oBAEzB,GACJ,CAEA,SAASkD,EAAiB9G,EAAK+G,GAC3B,IAAIC,EAAuBD,GAA+B,mBAAZA,EAA0BA,EAAW,WAAc,EAEjG,GAAK/G,EAAL,CAKA,IAAIiH,EAASjH,EAAIkH,OACbC,EAAe5G,EAAEC,QAAQQ,SACzBJ,EAASuG,EAAe,EAE5B,GAAIF,EAAOhG,eAAiBL,EAExBoG,SAQJ,GAJiBzG,EAAEC,QAAQC,YACDG,EACVqG,EAAOrG,SAASN,IAI5B0G,QAFJ,CASA,IAAII,EAAqC,GAAfD,EAAqB,GAG3CE,EAAYrH,EAAIG,QAAUmH,SAAStH,EAAIG,QAAQyC,IAAI,eAAiB,EAKpE2E,EAAYJ,GADAF,EAAOhG,cAAgBoG,EAAYD,EAAsB,IAGrEI,EAAa5G,EAAS,EAEtBA,EADA4G,EAAaD,EACJA,EAEAC,EAGbjH,EAAE,cAAcc,OAAOE,QAAQ,CAC3Bd,UAAWwG,EAAOrG,SAASN,IAAMM,GAClC,IAAKoG,EAxBR,CApBA,MAFIA,GA+CR,CAEA,SAAS5C,EAAoBF,EAAclE,EAAKE,GACxCgE,GACAhE,EAAuB0D,SAAS,SAChCrD,EAAE,QAAQqD,SAAS,YACnB5D,EAAI0F,IAAI,aAAc,WAGtBnF,EAAE,QAAQoD,YAAY,YACtBzD,EAAuByD,YAAY,SACnC3D,EAAI0F,IAAI,aAAc,WAG9B,CAuTA,OA1vBAxD,EAAKoB,SAAW/C,EAAEkH,OAAO,CACrBxD,sBAAuB,KACvBK,kBAAmB,KACnBoD,cAAe,KACf/C,iBAAkB,KAClBgD,2BAA2B,EAC3BC,iBAAiB,EACjBC,WAAY,WAAc,OAAO,CAAM,EACvCpE,YAAa,SAAUqE,GAAU,OAAO,CAAM,EAC9CC,GAAI,GACJxE,cAAc,EACdyE,YAAa,GACbhC,mBAAmB,EACnBiC,cAAc,EACd9D,eAAe,EACf3B,SAAS,GACVP,GACHC,EAAK4B,gBAAkB,kBACnB5B,EAAKoB,SAASoE,gBACdxF,EAAK4B,gBAAkB5B,EAAKoB,SAASoE,eAEzCxF,EAAKgG,mBAAqB,kBACtBhG,EAAKoB,SAASyE,KACd7F,EAAKgG,oBAAsB,mBAAqBhG,EAAKoB,SAASyE,IAElE7F,EAAKoB,SAASW,sBAAwB/B,EAAKoB,SAASgB,kBAAkB6D,UAAU,GAAK,QACrFjG,EAAKoB,SAASgB,kBAAoBpC,EAAKoB,SAASgB,kBAAoB,IAAMpC,EAAKoB,SAASyE,GAGxF7F,EAAKkB,eAAiB,CAClBE,SAAUpB,EAAKoB,SACfQ,gBAAiB5B,EAAK4B,gBACtBoE,mBAAoBhG,EAAKgG,mBACzBjD,MAAO,IAEXpD,EAAuBuG,KAAKlG,EAAKkB,gBAGjC7C,EAAEsC,UAAUC,IAAI,mBAAqBZ,EAAKoB,SAASyE,IAGnDtG,KAAK4G,OAGL5G,KAAKW,MAAK,WACN,IAAIM,EAAUnC,EAAEkB,MAEXiB,EAAQJ,OAAOjC,SAAS,mBAKjC,SAA+BqC,EAASgC,GACpC,IAAI4D,EAAY5F,EAAQwD,KAAK,MAAQ,WACrCxD,EAAQ6F,MAAMhI,EAAE,eACXqD,SAAS,kBACTA,SAASc,EAAQpB,SAASC,aAAe,oBAAsB,IAC/DK,SAASlB,EAAQwD,KAAK,UAAY,IAClCtC,SAASlB,EAAQwD,KAAK,YAAc,WAAa,IACjDA,KAAK,WAAYxD,EAAQwD,KAAK,YAAc,KAAO,KACnD1C,KAAKkB,EAAQpB,SAASC,aAAe,0BAA4B+E,EAAY,qCAAuC,kCAGzH,IAAI1I,EAAY8C,EAAQJ,OACpBoC,EAAQpB,SAASyE,IACjBnI,EAAUgE,SAAS,kBAAoBc,EAAQpB,SAASyE,IAI5DtF,EAAW7C,EAAW8E,EAASA,EAAQpB,SAASd,SAEjCE,EAAQQ,KAAK,UAA5B,IACID,EAAYP,EAAQQ,KAAK,mBAEzBwB,EAAQpB,SAASC,aACjB3D,EAAUsD,KAAK,kBAAkBgD,KAAK,cAAexB,EAAQpB,SAAS0E,aAEtEpI,EAAUsD,KAAK,YAAYM,KAAKP,EAAUrB,KAAK,YAAcqB,EAAUE,QAG3E5C,EAAEsC,UAAU2F,GAAG,yBAA2B9D,EAAQpB,SAASyE,GAAIrF,GAAS,SAAU+F,GAC9EpG,EAAe9B,EAAEkI,EAAMvB,QAC3B,IAEiB3G,EAAEmE,EAAQpB,SAASgB,mBACpC/D,EAAEsC,UAAU2F,GAAG,wBAA0B9D,EAAQpB,SAASyE,GAAIrD,EAAQpB,SAASgB,kBAAoB,6BAA6B,SAAUmE,GA2B1I,IACAlI,EAAEsC,UAAU2F,GAAG,wBAA0B9D,EAAQpB,SAASyE,GAAIrD,EAAQpB,SAASgB,kBAAoB,2BAA2B,SAAUmE,GACtHlI,EAAEkB,MAAhB,IACIkD,EAAmBF,EAAoBC,GAIvCzE,EAAOL,EAAUK,KAAK,OACtBA,IACAA,EAAKoI,QACL,OAA6BzI,GAC7BW,EAAE,kBAAkBoD,YAAY,SAEpCpD,EAAE,mBAAmBoD,YAAY,QACjCiB,EAA2BD,GAAkB,EAEjD,IACApE,EAAEsC,UAAU2F,GAAG,wBAA0B9D,EAAQpB,SAASyE,GAAIrD,EAAQpB,SAASgB,kBAAjBI,kBAA6DA,EAAQpB,SAASgB,kBAAoB,WAAW,SAAUmE,GAEjL,IAAI9D,EAAmBF,EAAoBC,GAIvCzE,EAAOL,EAAUK,KAAK,OACtBA,GACAA,EAAKoI,OACT9H,EAAE,mBAAmBoD,YAAY,QACjCpD,EAAE,kBAAkBoD,YAAY,QAChCiB,EAA2BD,GAAkB,EACjD,IAIApE,EAAEsC,UAAU2F,GAAG,wBAA0B9D,EAAQpB,SAASyE,GAAIrD,EAAQpB,SAASgB,kBAAoB,6CAA6C,SAAUmE,GAa1J,IAEA/D,EAAQO,MAAMmD,KAAK,CACf1F,QAASA,EACT9C,UAAWA,GAGnB,CArHQ8I,CAAsBhG,EAASR,EAAKkB,eAE5C,IAsmBA7C,EAAEsC,UAAU2F,GAAG,wBAA0BtG,EAAKoB,SAASyE,GAAI7F,EAAKgG,oBAAoB,SAAUO,GAC1F,IAAI7I,EAAYW,EAAEkB,MACdoC,EAAiBjE,EAAUmE,QAAQ,kBACnCX,EAAiBC,EAAkBzD,GAEvCW,EAAE,mBAAmBoI,IAAI/I,GAAW+D,YAAY,QAChDpD,EAAE,kBAAkBoD,YAAY,QAE5BP,EAAeE,SAASd,QACxB5C,EAAUgJ,YAAY,QAEtBhJ,EAAU+D,YAAY,QAE1B,IAAIyB,EAAa7E,EAAE6C,EAAeE,SAASgB,mBAEvCK,EAAmBF,EAAoBrB,GAEvCnD,EAAOL,EAAUK,KAAK,OAK1B,GAJKA,IACDA,EAtOR,SAAkBL,GACd,IAAIwD,EAAiBC,EAAkBzD,GAGnCiJ,EAAUzF,EAAeE,SAASW,sBAClC6E,EAAUlJ,EAAUmE,QAAQ,WAWhC,GAVI+E,EAAQ1I,OAAS,IACZ0I,EAAQzI,SAAS,gBAClBwI,GAAW,WAGnBA,GAAW,iBACPjJ,EAAUS,SAAS,sBACnBwI,GAAW,qBAGXzF,EAAeE,SAASsE,gBACxB,cAAexE,EAAeE,SAASsE,iBACnC,IAAK,UACDiB,EAAU,gCAAkCA,EAC5C,MACJ,IAAK,SACDA,EAAUzF,EAAeE,SAASsE,gBAAkB,IAAMiB,EAQtE,IACIE,EAAQ,aACRC,EAAQ,gBACRC,EAAQ,EACRC,EAJUtJ,EAAUmE,QAAQ,kBAIXb,KAAK,UACtBgG,EAAO9I,OAAS,IAChB2I,EAAQ,WACRC,EAAQ,cACRC,GAAmC,EAA3BC,EAAOnD,YAAW,IAE9B,IAAIX,EAAa7E,EAAE6C,EAAeE,SAASgB,mBAG3CD,EAAmBe,GAEnB7E,EAAEC,QAAQ2I,QAAO,WACb5G,EAAe3C,EAAWwD,EAgB9B,IAGA,IAAIgG,GAAoB,EACxB,GAAIhG,EAAeE,SAASqE,0BAA2B,CACnD,IAAI0B,EAAMjG,EAAeE,SAASqE,0BAG1ByB,EAFU,iBAAPC,EACH,mBAAmBC,eAAiBD,EAAIC,cACpBlE,EAAWG,SACxB8D,EAAIE,WAAW,MAAQF,EAAIE,WAAW,KAEzBhJ,EAAE8I,GAGFA,EAGJA,CAE5B,CA6HA,OA3HAzJ,EAAUK,KAAK,CACXuJ,KAAM,CACFf,MAAO,GACPgB,OAAO,EACPC,MAAM,GAEVC,UAAW,QACXtB,KAAM,UAQNuB,QAAS,CACLzG,KAAMiC,GAEVyE,SAAU,CACN3C,OAAQtH,EACRkK,UAAWV,EACX3C,GAAIsC,EACJrC,GAAIsC,EACJ7I,QAAS,YAGT4J,OAAQ,CACJC,EAAGf,EACHgB,EAAG,GAGPC,OAAQ,SAAUlK,EAAKmK,GAKnB,GAAInK,EAAIoK,SAASlD,OAAO7G,SAAS,oBAAqB,CAClD,IAAIgK,EAAa9J,EAAEC,QAAQC,YAC3B0J,EAAI7J,IAAM+J,EAAa,EAC3B,CACA9J,EAAEkB,MAAMF,QAAQ4I,EAAK,CACjBG,SAAU,EACVC,OAAO,EACPC,SAAU,WAGcxK,EAAIG,QAAQ+C,KAAK,0BACvBd,MAAK,SAAUgE,EAAGC,GAC5B,IAAIC,EAAQ/F,EAAE8F,GACAC,EAAME,aAAa,UAErBrB,GAAG,aACXmB,EAAME,aAAa,SAE3B,GACJ,GAER,GAEJiE,MAAO,CAGH5B,QAASA,EACT6B,KAAK,GAETC,OAAQ,CACJtC,KAAM,SAAUI,EAAOzI,IACnB,SACAO,EAAE6C,EAAeU,iBAAiBH,YAAY,QACzBpD,EAAE6C,EAAeU,iBAAiBC,QAAQ,kBAChDJ,YAAY,QAC3BpD,EAAE,QAAQoD,YAAY,YAEtB,IAAIlD,EAAYb,EAAUsG,KAAK,kBAAoB,KAClC,MAAbzF,GAAqBF,EAAEqK,UAAUnK,IAAcA,GAAa,GAC5DF,EAAE,cAAcc,OAAOC,MAAM,IAAIC,QAAQ,CACrCd,UAAW6G,SAAS7G,IACrB,GAGPmE,EADuBH,EAAoBrB,IACE,GAEzCpD,IAAKA,EAAIgE,WAAY,EAC7B,EACA6G,OAAQ,SAAUpC,EAAOzI,GASzB,EACAwJ,KAAM,SAAUf,EAAOzI,GAEfA,IAAKA,EAAIgE,WAAY,GACzB,IAAI9D,EAAyBK,EAAE,IAAM6C,EAAeE,SAASW,uBACzDC,IAAed,EAAeE,SAASa,eAAgBrC,IAC3DsC,EAAoBF,EAAclE,EAAKE,GAEnCgE,GAC2B,MAAvB,EAAApD,EAAOC,cACP,EAAAD,EAAOC,aAAa+J,UAGxBlE,YAAW,WACPvC,EAAmBe,EACvB,GAAG,MAOH0B,EAAiB9G,GAGrBuE,EAAc3E,EAAWM,GACzBsE,EAAsB5E,EAAWM,EACrC,KAGDN,EAAUK,KAAK,MAC1B,CAuBe8K,CAASnL,IAGhBA,EAAUS,SAAS,QAAS,CAM5B,GALAwD,EAAeD,SAAS,QACxBR,EAAeE,SAASuE,aACxBjD,EAA2BD,GAAkB,GAvarD,SAAsCA,GAC7BA,QAEiC,IAA3BA,EAAiBqG,QAGU,mBAA3BrG,EAAiBqG,QACxBrG,EAAiBqG,QAEzB,CA+ZQC,CAA6BtG,GAC7BS,EAAWxD,KAAK,eAAgBwB,EAAeE,SAASyE,IACpD9H,EAAM,CACuBM,EAAE,IAAM6C,EAAeE,SAASW,uBAA7D,IAEI3D,IADW8C,EAAeE,SAASa,eAAgBrC,IACjCvB,EAAEC,QAAQC,aAAeF,EAAE,cAAcE,YAAe,GAC9Eb,EAAUsG,KAAK,gBAAiB5F,GAChC,IAAIgB,EAAQ,GACO8B,EAAeE,SAAS2E,cACtBhI,EAAKiL,QAAUjL,EAAKiL,OAAO1B,MAAQvJ,EAAKiL,OAAO1B,KAAO,IACvElI,EAAQgG,SAASrH,EAAKiL,OAAO1B,MAAQ,IASrClI,EAAQ,EACRsF,YAAW,WACPE,EAAiB7G,GAAM,WAEnBA,EAAKuJ,MACT,GACJ,GAAGlI,GAEHwF,EAAiB7G,GAAM,WAEnBA,EAAKuJ,MACT,GAER,CACA5J,EAAUsD,KAAK,WACftD,EAAUsD,KAAK,UAAUS,YAAY,SACrC/D,EAAUsD,KAAK,aAAaU,SAAS,QAEzC,MACIhE,EAAUiH,QACN5G,GACAA,EAAKoI,OACTjD,EAAWxD,KAAK,eAAgB,IAChCgD,EAA2BD,GAAkB,GAC7Cd,EAAeF,YAAY,QAI/B,IAAIwH,EAASvL,EAAUsD,KAAK,kBAExBiI,EAAO/K,OAAS,GAAK+K,EAAO3E,aAAa,UAAUrB,GAAG,aACtDgG,EAAO3E,aAAa,QAE5B,IAEItE,EAAKoB,SAASC,cAGdhD,EAAE2B,EAAKgG,mBAAqB,mBAAmBM,GAAG,wBAA0BtG,EAAKoB,SAASyE,IAAI,SAAUU,GACpG,IAAI0C,EAAS5K,EAAEkB,MAIf,GAHAgH,EAAM2C,kBACN3C,EAAM4C,iBACNzL,UAAYuL,EAAO5F,OAAO,mBACtB3F,UAAUQ,OAAS,EAAG,CACtB,IAAIH,EAAOL,UAAUK,KAAK,OACtBA,GACAA,EAAKoI,OACTzI,UAAU+D,YAAY,QACtBE,eAAeF,YAAY,OAC/B,CACJ,IAGGlC,IACX,CAEJ,CAtzBA,C,iTCJA,wKAaA6J,EAAGC,gBAAgBvJ,cAAgB,CAI/BwJ,iBAAkB,SAAUC,EAAYC,EAASC,GAC7C,IAAIC,EAASN,EAAGO,MAAMC,iBAElBC,EAASH,EAAOH,GAChBO,EAAYJ,EAAOF,EAAQO,cAY/B,OAVmBX,EAAGO,MAAMK,WAAWH,GAAQ,SAAU/G,GACrD,IAAImH,EAAQP,EAAO5G,EAAKgH,IACxB,QAAKG,IAES,KAAVA,GAA0B,IAAVA,IAEhBA,IAAUR,QAAd,GAEJ,GAAGlK,KAGP,EACA2K,gBAAiB,SAAUX,EAAYY,EAAWL,GAC9C,IAAIJ,EAASN,EAAGO,MAAMC,iBAElBC,EAAST,EAAGO,MAAMS,YAAYV,EAAOH,IAAa,SAAUzG,GAC5D,IAAImH,EAAQP,EAAO5G,EAAKgH,IACxB,QAAKG,IAES,KAAVA,GAA0B,IAAVA,EAGxB,IAOA,OANab,EAAGO,MAAMU,SAASR,GAAQ,SAAU/G,GAC7C,IAAIwH,EAAS,CAAC,EAGd,OAFAA,EAAOC,MAAQJ,EAAYT,EAAO5G,EAAKqH,IAAcT,EAAO5G,GAAM0H,WAClEF,EAAOL,MAAQH,EAAYJ,EAAO5G,EAAKgH,IAAcJ,EAAO5G,GAAM0H,WAC3DF,CACX,GAEJ,EACAG,qBAAsB,SAAUlB,EAAYC,EAASkB,GACjD,IAAIhB,EAASN,EAAGO,MAAMC,iBAElBC,EAASH,EAAOH,GAChBoB,EAAWjB,EAAOF,EAAQoB,aAW9B,OAVmBxB,EAAGO,MAAMK,WAAWH,GAAQ,SAAU/G,GACrD,IAAI7B,EAAOyI,EAAO5G,EAAK6H,IACvB,QAAK1J,IAEQ,KAATA,IAEAA,IAASyJ,QAAb,GAEJ,GAAGnL,KAGP,EAGA8G,MAAO,CAAC,UAAW,WACnBwE,KAAM,SAAUC,EAASC,EAAeC,EAAqBC,EAAWC,GACpE,GAAI7M,EAAEyM,GAAS7H,GAAG,UAAW,CACzB,IAAIqH,EACAvK,EAAUiL,IAAsBG,sBAAwB,CAAC,EACrCpL,EAAQqC,kBAChC,IAAIgJ,EAAgB,GAGpBhC,EAAGO,MAAM0B,gBAAgBC,mBAAmBR,GAAS,SAAUS,GAO3DlN,EAAEyM,GAAShL,cAAc,WAEzB,IAAK,IAAIoE,EAAI,EAAGA,EAAIkH,EAAclN,OAAQgG,IAAK,CAC3C,IAAIsH,EAAeJ,EAAclH,GAC7BsH,GACAA,EAAaC,SAErB,CACJ,IAEApN,EAAEyM,GAASpJ,SAAS,iBAAiB5B,cAAcC,GAM/CqJ,EAAGsC,aAAaX,OAEhBT,EAASlB,EAAGC,gBAAgBY,MAAMY,KAAKvL,MAAMC,KAAMC,YAGvD,IAAIyJ,EAAS5K,EAAEyM,GAAS1K,KAAK,mBAAmBY,KAAK,kBACrD,GAAIjB,EAAQsB,cAAgB4H,EAAO/K,OAAS,EAAG,CAY3C,IAAIwL,EAASN,EAAGO,MAAMC,iBAElBJ,EAAUwB,IACVlB,EAAYJ,EAAOF,EAAQO,cAC3BI,EAAYT,EAAOF,EAAQoB,cAAgBd,EAG3C6B,EAAsB,CAAC,EAEvBpC,EAAaC,EAAQzJ,QACrB6L,EAAiB3C,EAEjB4C,GADY5C,EAAOjF,KAAK,MACX+G,KAejB,GAbIvB,EAAQmC,sBACRA,EAAsBtN,EAAEkH,OAAOoG,EAAqBnC,EAAQmC,sBAW5DE,EAAad,IACD,CACZ,IAAIe,EAAoB,SAAUC,GAC1B3C,EAAG4C,sBAAsBH,GAGzBA,EAAWE,GAEPvC,EAA8B,sBAAKA,EAA8B,qBAAS,QAC1EA,EAA8B,qBAAS,MAAEuC,GAGzCH,EAAepK,IAAIyK,cACnB5N,EAAEyM,GAAStJ,IAAIuK,GAG3B,EAEIG,EAAoB,SAAU3F,EAAO4F,GACrC,IAAIF,EAAeE,EAAGrJ,KAAOqJ,EAAGrJ,KAAKyH,MAAQ,KACzCwB,EAAeI,EAAGrJ,KAAOqJ,EAAGrJ,KAAKmH,MAAQ,KAC7C,GAAIgC,GAAgBF,EAIhBD,EAAkBC,OAwBjB,CAED,IAAIrB,EAAoBrM,EAAEkI,EAAMvB,QAAQxD,MACpC4K,EAAehD,EAAGC,gBAAgBvJ,cAAc2K,qBAAqBlB,EAAYC,EAASkB,GAU9F,GAAI0B,EAAc,CACdL,EAAerC,EAAO0C,EAAatC,IACnCgC,EAAkBC,GAClB,IAAIM,EAAclC,EAAYT,EAAO0C,EAAajC,IAAcT,EAAO0C,GAAc5B,WACrFoB,EAAepK,IAAI6K,EACvB,MACIP,EAAkB,KAG1B,CAEA,OAAO,CACX,EAOAH,EAAoBW,OAASJ,EAC7BP,EAAoBY,OAASL,EAC7BP,EAAoBhH,MAPF,SAAU4B,EAAO4F,GAE/B,OADA9N,EAAEuN,GAAgBpK,IAAI2K,EAAGrJ,KAAKyH,QACvB,CACX,EAMAoB,EAAoBa,WAAa,SAAUC,EAAI1J,GAC3C1E,EAAEoO,GAAI/K,SAAS,uBAAuBD,YAAY,iBAC9CpD,EAAEuN,GAAgBzN,SAAS,qBAC3BE,EAAEoO,GAAI/K,SAAS,mBAEvB,CACJ,CAMA,IAAIgL,EAAetD,EAAGuD,qBAAoB,WACtC,OAAOvD,EAAGC,gBAAgBvJ,cAAcoK,gBAAgBX,EAAYY,EAAWL,EACnF,GAAGmB,GAEHyB,EAAaE,WAAU,SAAUC,GAC7BjB,EAAetH,aAAa,SAAU,SAAUuI,EACpD,IAEAlB,EAAoB9B,OAAS6C,IAE7Bd,EAAetH,aAAaqH,EAChC,CAEA,IAAImB,EAA+B9B,IAAsB+B,2BAAwBC,EACjF,QAA2C,IAAhCF,EAA6C,CACpD,IAAIG,EAAa,SAAUJ,GACnBA,IAAyB,IAAbA,EACZxO,EAAEyM,GAAShL,cAAc,UAEzBzB,EAAEyM,GAAShL,cAAc,UAEjC,EAIA,GAFAmN,EAAW7D,EAAGM,OAAOoD,IAEjB1D,EAAGsC,aAAaoB,GAA+B,CAC/C,IAAItB,EAAesB,EAA6BF,UAAUK,GAC1D7B,EAAclF,KAAKsF,EACvB,CACJ,CAEA,OAAOlB,CACX,CACJ,EACA4C,OAAQ,SAAUpC,EAASC,EAAeC,EAAqBE,GAC5C9B,EAAGM,OAAOqB,KACzB,GAAI1M,EAAEyM,GAAS7H,GAAG,UAAW,CACzB,IAAIkK,EAAgBrC,EAAQsC,cACxB9C,EAASlB,EAAGC,gBAAgBY,MAAMiD,OAAO5N,MAAMC,KAAMC,WACrDO,EAAUiL,IAAsBG,sBAAwB,CAAC,EAEzDgC,IAAkBrC,EAAQsC,eAC1BhE,EAAGO,MAAM0D,aAAavC,EAAS,UAEnCzM,EAAEyM,GAAShL,cAAc,WAEzB,IAAImJ,EAAS5K,EAAEyM,GAAS1K,KAAK,mBAAmBY,KAAK,kBACrD,GAAIjB,EAAQsB,cAAgB4H,EAAO/K,OAAS,EAAG,CAE3C,IAAIwL,EAASN,EAAGO,MAAMC,iBAElBJ,EAAUwB,IACVlB,EAAYJ,EAAOF,EAAQO,cAC3BI,EAAYT,EAAOF,EAAQoB,cAAgBd,EAI3CP,EAAaC,EAAQzJ,QACrB6L,EAAiB3C,EAEjB4C,GADY5C,EAAOjF,KAAK,MACX+G,KAEjB,GAAIc,EAAY,CACZ,IAAIyB,EAAoB5D,EAAOmC,GAE/BxN,EAAEyM,GAAStJ,IAAI8L,GAEf,IAAIC,EAAenE,EAAGC,gBAAgBvJ,cAAcwJ,iBAAiBC,EAAYC,EAAS8D,GAC1F,GAAIC,EAAc,CACd,IAAIlB,EAAclC,EAAYT,EAAO6D,EAAapD,IAAcT,EAAO6D,GAAc/C,WACrFoB,EAAepK,IAAI6K,EACvB,MACIT,EAAepK,IAAI,GAE3B,CACJ,CAGA,OAAO8I,CACX,CACJ,GAIJlB,EAAGC,gBAAgBhI,aAAe,CAI9BiI,iBAAkB,SAAUC,EAAYC,EAASC,GAC7C,IAAIC,EAASN,EAAGO,MAAMC,iBAElBC,EAASH,EAAOH,GAChBO,EAAYJ,EAAOF,EAAQO,cAY/B,OAVmBX,EAAGO,MAAMK,WAAWH,GAAQ,SAAU/G,GACrD,IAAImH,EAAQP,EAAO5G,EAAKgH,IACxB,QAAKG,IAES,KAAVA,GAA0B,IAAVA,IAEhBA,IAAUR,QAAd,GAEJ,GAAGlK,KAGP,EACA2K,gBAAiB,SAAUX,EAAYY,EAAWL,GAC9C,IAAIJ,EAASN,EAAGO,MAAMC,iBAElBC,EAAST,EAAGO,MAAMS,YAAYV,EAAOH,IAAa,SAAUzG,GAC5D,IAAImH,EAAQP,EAAO5G,EAAKgH,IACxB,QAAKG,IAES,KAAVA,GAA0B,IAAVA,EAGxB,IAOA,OANab,EAAGO,MAAMU,SAASR,GAAQ,SAAU/G,GAC7C,IAAIwH,EAAS,CAAC,EAGd,OAFAA,EAAOC,MAAQJ,EAAYT,EAAO5G,EAAKqH,IAAcT,EAAO5G,GAAM0H,WAClEF,EAAOL,MAAQH,EAAYJ,EAAO5G,EAAKgH,IAAcJ,EAAO5G,GAAM0H,WAC3DF,CACX,GAEJ,EACAG,qBAAsB,SAAUlB,EAAYC,EAASkB,GACjD,IAAIhB,EAASN,EAAGO,MAAMC,iBAElBC,EAASH,EAAOH,GAChBoB,EAAWjB,EAAOF,EAAQoB,aAY9B,OAVmBxB,EAAGO,MAAMK,WAAWH,GAAQ,SAAU/G,GACrD,IAAI7B,EAAOyI,EAAO5G,EAAK6H,IACvB,QAAK1J,IAEQ,KAATA,IAEAA,IAASyJ,QAAb,GAEJ,GAAGnL,KAGP,EACAsL,KAAM,SAAUC,EAASC,EAAeC,EAAqBC,GACzD,IA2BIW,EA3BAlC,EAASN,EAAGO,MAAMC,iBAClBL,EAAawB,IACbvB,EAAUwB,IACVlB,EAAYJ,EAAOF,EAAQO,cAC3BI,EAAYT,EAAOF,EAAQoB,cAAgBd,EAC3C1D,EAAY/H,EAAEyM,GAAS9G,KAAK,MAAQ,WAEpCjE,EAAU,CAAC,EAEXyN,EAAc,KAEdhE,EAAQmC,sBACR5L,EAAU1B,EAAEkH,OAAOxF,EAASyJ,EAAQmC,sBAMpCnC,EAAQiE,0BACRD,EAAcnP,EAAEkH,OAAO,CAAC,EAAGiI,EAAahE,EAAQiE,0BAKpDpP,EAAEyM,GAAS3E,QAGPyF,EAAiBvN,EAAE,YAAY2F,KAAK,CAAE0J,KAAM,OAAQC,GAAIvH,EAAWwH,KAAMxH,KAC9D1E,SAASrD,EAAEyM,GAAS9G,KAAK,UAAY,IACpD4H,EAAe5H,KAAK,cAAe3F,EAAEyM,GAAS9G,KAAK,gBAAkB,IACrE3F,EAAEyM,GAASzE,MAAMuF,GAEjB,IAAIiC,EAASnE,EAAOF,EAAQsE,yBAA2B,GACzC,MAAVD,GAA4B,IAAVA,IAClBjC,EAAe5H,KAAK,YAAa,cAAgB6J,GACjDzE,EAAG2E,cAAc9C,EAAWW,EAAe,KAG/C,IAAIoC,EAAmBtE,EAAOF,EAAQwE,mBAAqB,GAIvD9B,EAAoB,KACpB+B,EAAmC,WACnC,GAAwB,IAApBD,EAAwB,CACxB,IAAIE,EAAiB7P,EAAEyM,GAASjJ,QAAQ,SACxC,GAAIqM,EAAehQ,OAAS,EAAG,CAC3B,IAAIiQ,EAASD,EAAexO,KAAK,WAC7B0O,EAAQ,KACRxP,EAAIP,EAAEwE,KAAKxE,EAAE2P,IAAmB,SAAUlL,GAE1C,OADYzE,EAAEyE,GACDpD,KAAK,YAAcyO,CACpC,IAKA,GAJIvP,GAAKA,EAAEV,OAAS,IAChBkQ,EAAQ/P,EAAEO,EAAE,KAGZwP,GAASA,EAAMlQ,OAAS,EAAG,CAC3B,IAAIH,EAAOqQ,EAAMrQ,KAAK,OAClBA,IACAA,EAAKoI,QACL,OAA6BiI,GAErC,CACJ,CACJ,CAEJ,EACIvC,EAAarC,EAAQS,MACzB,GAAI4B,EAAY,CACZ,IAAIC,EAAoB,SAAUC,GAC1B3C,EAAG4C,sBAAsBH,GAGzBA,EAAWE,GAEPvC,EAA8B,sBAAKA,EAA8B,qBAAS,QAC1EA,EAA8B,qBAAS,MAAEuC,GAGzCH,EAAepK,IAAIyK,cACnB5N,EAAEyM,GAAStJ,IAAIuK,GAG3B,EAEAG,EAAoB,SAAU3F,EAAO4F,GACjC,IAAIF,EAAeE,EAAGrJ,KAAOqJ,EAAGrJ,KAAKyH,MAAQ,KACzCwB,EAAeI,EAAGrJ,KAAOqJ,EAAGrJ,KAAKmH,MAAQ,KAC7C,GAAIgC,GAAgBF,EAIhBD,EAAkBC,GAKdvC,EAAQ6E,yBACsC,mBAAnC7E,EAAQ6E,yBACf7E,EAAQ6E,wBAAwBpC,OA2BvC,CAED,IAAIvB,EAAoBrM,EAAEkI,EAAMvB,QAAQxD,MACpC4K,EAAehD,EAAGC,gBAAgBhI,aAAaoJ,qBAAqBlB,EAAYC,EAASkB,GAU7F,GAAI0B,EAAc,CACdL,EAAerC,EAAO0C,EAAatC,IACnCgC,EAAkBC,GAClB,IAAIM,EAAclC,EAAYT,EAAO0C,EAAajC,IAAcT,EAAO0C,GAAc5B,WACrFoB,EAAepK,IAAI6K,EACvB,CAIJ,CAGA,OADA4B,KACO,CACX,CACJ,CAEA,IAAIK,EAAoB9E,EAAQ+E,yBAChC,GAAID,EAAmB,CACfxC,EAAoB,SAAUC,GAC1B3C,EAAG4C,sBAAsBsC,IAGzBA,EAAkBvC,EAW1B,EAEAG,EAAoB,SAAU3F,EAAO4F,GACjC,IAAIF,EAAeE,EAAGrJ,KAAOqJ,EAAGrJ,KAAKyH,MAAQ,KACzCwB,EAAeI,EAAGrJ,KAAOqJ,EAAGrJ,KAAKmH,MAAQ,KAEzCuE,EAAe,KAEnB,GAAIvC,GAAgBF,GAChB,GAAI3C,EAAG4C,sBAAsBsC,GAAoB,CAC7C,IAAIf,EAAenE,EAAGC,gBAAgBhI,aAAaiI,iBAAiBC,EAAYC,EAASuC,GACzFD,EAAkByB,GAClBiB,EAAejB,CACnB,MACG,CAEH,IAAI7C,EAAoBrM,EAAEkI,EAAMvB,QAAQxD,MACpC4K,EAAehD,EAAGC,gBAAgBhI,aAAaoJ,qBAAqBlB,EAAYC,EAASkB,GAE7F,GAAI0B,EAAc,CACdN,EAAkBM,GAClB,IAAIC,EAAclC,EAAYT,EAAO0C,EAAajC,IAAcT,EAAO0C,GAAc5B,WACrFoB,EAAepK,IAAI6K,EACvB,CAGAmC,EAAepC,CACnB,CAWA,OATI5C,EAAQ6E,yBAEsC,mBAAnC7E,EAAQ6E,yBACf7E,EAAQ6E,wBAAwBG,EAAcvC,GAItDgC,KAEO,CACX,CAEJ,CAwDA,GAjDI/B,IACAnM,EAAQuM,OAASJ,EACjBnM,EAAQwM,OAASL,GAErBnM,EAAQ4E,MATU,SAAU4B,EAAO4F,GAE/B,OADA9N,EAAEuN,GAAgBpK,IAAI2K,EAAGrJ,KAAKyH,QACvB,CACX,EAQAxK,EAAQyM,WAAa,SAAUC,EAAI1J,GAO/B,GAAwB,IAApBiL,EAAwB,CACxB,IAAIE,EAAiB7P,EAAEyM,GAASrM,QAAQ,SACxC,GAAIyP,EAAehQ,OAAS,EAkBNgQ,EAAe/P,SAAS,SAEtCE,EAAEoO,GAAI/K,SAAS,SAEfrD,EAAEoO,GAAIhL,YAAY,QAG9B,CAGJ,EAMK+H,EAAQiF,oBAA2D,mBAA9BjF,EAAQiF,mBAe9C1O,EAAQ8J,OAAS,SAAU6E,EAASC,GAMhCnF,EAAQiF,mBAAmBC,GALN,SAAU3L,GAC3BwG,EAAaxG,EACb4L,EAASvF,EAAGC,gBAAgBhI,aAAa6I,gBAAgBX,EAAYY,EAAWL,GACpF,GAGJ,MAtBgF,CAKhF,IAAI4C,EAAetD,EAAGuD,qBAAoB,WACtC,OAAOvD,EAAGC,gBAAgBhI,aAAa6I,gBAAgBX,EAAYY,EAAWL,EAClF,GAAGmB,GAEHyB,EAAaE,WAAU,SAAUC,GAC7BjB,EAAetH,aAAa,SAAU,SAAUuI,EACpD,IAEA9M,EAAQ8J,OAAS6C,GACrB,CAWAd,EAAetH,aAAavE,GAE5B,IAAIuE,EAAesH,EAAelM,KAAK,mBACnC8N,GAAelJ,GAAgBA,EAAasK,MAC5CtK,EAAasK,KAAKC,YAAYrB,EAGtC,EACAN,OAAQ,SAAUpC,EAASC,EAAeC,EAAqBC,GAE3D,IAAIvB,EAASN,EAAGO,MAAMC,iBAClBL,EAAawB,IACbvB,EAAUwB,IACVlB,EAAYJ,EAAOF,EAAQO,cAC3BI,EAAYT,EAAOF,EAAQoB,cAAgBd,EAC3C1D,EAAY/H,EAAEyM,GAAS9G,KAAK,MAAQ,WACpC4H,EAAiBvN,EAAE,IAAM+H,GACzByF,EAAarC,EAAQS,MAEzB,GAAI4B,EAAY,CACZ,IAAIyB,EAAoB5D,EAAOmC,GAE/BxN,EAAEyM,GAAStJ,IAAI8L,GAEf,IAAIC,EAAenE,EAAGC,gBAAgBhI,aAAaiI,iBAAiBC,EAAYC,EAAS8D,GACzF,GAAIC,EAAc,CACd,IAAIlB,EAAclC,EAAYT,EAAO6D,EAAapD,IAAcT,EAAO6D,GAAc/C,WAEjFqD,EAASnE,EAAOF,EAAQsE,yBAA2B,GACzC,MAAVD,GAA4B,IAAVA,EAClBjC,EAAepK,IAAI,IAEnBoK,EAAepK,IAAI6K,EAE3B,CAGJ,CACJ,E,+CCttBJ,UAeQ,EAAO,CAAC,+CAAW,EAQzB,SAAUhO,GACR,IAAIyQ,EAAQC,MAAMC,UAAUF,MACxBG,EAASF,MAAMC,UAAUC,OAE3BC,EAAW,CACXC,WAAY,EACZC,cAAe,EACfC,UAAW,YACXC,iBAAkB,iBAClBC,QAAQ,EACRC,aAAc,GACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,kBAAkB,EAClBC,OAAQ,WAEVC,EAAUxR,EAAEC,QACZwR,EAAYzR,EAAEsC,UACdoP,EAAU,GACVC,EAAa,SAAUC,GAKnB,IAJA,IAAIC,EAAI,KAGJhM,GAFiB7F,EAAE4R,GAEfF,EAAQ7R,QACTgG,KAAM,GACL6L,EAAQ7L,GAAG+L,cAAcE,IAAI,KAAOF,IAEpCC,EAAIH,EAAQ7L,IAGpB,OAAOgM,CACX,EACAjL,EAAe4K,EAAQ/Q,SACvBsR,EAAW,WAMT,IALA,IAAI7R,EAAYsR,EAAQtR,YACtB8R,EAAiBP,EAAUhR,SAC3BwR,EAAMD,EAAiBpL,EACvBsL,EAAShS,EAAY+R,EAAOA,EAAM/R,EAAY,EAEvC2F,EAAI,EAAGsM,EAAIT,EAAQ7R,OAAQgG,EAAIsM,EAAGtM,IAAK,CAC9C,IAAIgM,EAAIH,EAAQ7L,GAEduM,EADaP,EAAEQ,cAAchS,SAASN,IAClB8R,EAAEf,WAAaoB,EAOrC,GAJIL,EAAEP,kBACJO,EAAEQ,cAAchQ,IAAI,SAAUwP,EAAED,cAAclR,eAG5CR,GAAakS,EACM,OAAjBP,EAAES,aACJT,EAAED,cACCvP,IAAI,CACH,MAAS,GACT,SAAY,GACZ,IAAO,GACP,UAAW,KAEfwP,EAAED,cAAc5M,SAAS5B,YAAYyO,EAAEb,WACvCa,EAAED,cAAcW,QAAQ,aAAc,CAACV,IACvCA,EAAES,WAAa,UAGd,CACH,IAQM/M,EARFiN,EAASR,EAAiBH,EAAED,cAAclR,cAC1CmR,EAAEf,WAAae,EAAEd,cAAgB7Q,EAAYgS,EAC7CM,EAAS,EACXA,GAAkBX,EAAEf,WAEpB0B,EAASX,EAAEf,WAETe,EAAES,aAAeE,IAEfX,EAAEV,cACFsB,QAAWZ,EAAED,cAAcc,aAAeb,EAAED,cAAce,QAC1DpN,EAAWvF,EAAE6R,EAAEV,cAAcwB,QAAUF,SAAW,MAC3CZ,EAAET,mBACT7L,EAAWsM,EAAEQ,cAAcM,SAEf,MAAZpN,IACAA,EAAWsM,EAAED,cAAce,SAE/Bd,EAAED,cACCvP,IAAI,QAASkD,GACblD,IAAI,WAAY,SAChBA,IAAI,MAAOmQ,GACXnQ,IAAI,UAAWwP,EAAEN,QAEpBM,EAAED,cAAc5M,SAAS3B,SAASwO,EAAEb,WAEf,OAAjBa,EAAES,WACJT,EAAED,cAAcW,QAAQ,eAAgB,CAACV,IAGzCA,EAAED,cAAcW,QAAQ,gBAAiB,CAACV,IAGxCA,EAAES,aAAeT,EAAEf,YAAce,EAAES,WAAaE,GAA2B,OAAjBX,EAAES,YAAuBE,EAASX,EAAEf,WAEhGe,EAAED,cAAcW,QAAQ,wBAAyB,CAACV,IACzB,OAAjBA,EAAES,YAAuBE,IAAWX,EAAEf,YAAce,EAAES,WAAaE,GAE3EX,EAAED,cAAcW,QAAQ,0BAA2B,CAACV,IAGtDA,EAAES,WAAaE,GAIjB,IAAII,EAAyBf,EAAEQ,cAAcrN,SAC9B6M,EAAED,cAAcvR,SAASN,IAAM8R,EAAED,cAAclR,eAAiBkS,EAAuBvS,SAASN,IAAM6S,EAAuBlS,eAAmBmR,EAAED,cAAcvR,SAASN,KAAO8R,EAAEf,WAG/Le,EAAED,cACCvP,IAAI,WAAY,YAChBA,IAAI,MAAO,IACXA,IAAI,SAAU,GACdA,IAAI,UAAW,IAElBwP,EAAED,cACCvP,IAAI,WAAY,SAChBA,IAAI,MAAOmQ,GACXnQ,IAAI,SAAU,IACdA,IAAI,UAAWwP,EAAEN,OAExB,CACF,CACF,EACAsB,EAAU,WACRjM,EAAe4K,EAAQ/Q,SAEvB,IAAK,IAAIoF,EAAI,EAAGsM,EAAIT,EAAQ7R,OAAQgG,EAAIsM,EAAGtM,IAAK,CAC9C,IAAIgM,EAAIH,EAAQ7L,GACZN,EAAW,KACXsM,EAAEV,aACEU,EAAER,kBACF9L,EAAWvF,EAAE6R,EAAEV,cAAcwB,SAE3Bd,EAAET,mBACR7L,EAAWsM,EAAEQ,cAAcM,SAEf,MAAZpN,GACAsM,EAAED,cAAcvP,IAAI,QAASkD,EAEnC,CACF,EACAuN,EAAU,CACRtG,KAAM,SAAS9K,GACb,OAAOR,KAAKW,MAAK,WACf,IAAIkR,EAAI/S,EAAEkH,OAAO,CAAC,EAAG2J,EAAUnP,GAC3BkQ,EAAgB5R,EAAEkB,MAElB8R,EAAWpB,EAAcjM,KAAK,MAC9BsN,EAAYD,EAAWA,EAAW,IAAMnC,EAASI,iBAAmBJ,EAASI,iBAC7EhM,EAAUjF,EAAE,eACb2F,KAAK,KAAMsN,GACX5P,SAAS0P,EAAE9B,kBAEdW,EAAc1M,SAAQ,WACpB,GAA8C,GAA1ClF,EAAEkB,MAAM8D,OAAO,IAAMiO,GAAWpT,OAC5B,OAAOoF,CAE3B,IAEU,IAAIoN,EAAgBT,EAAc5M,SAE9B+N,EAAE7B,QACJmB,EAAchQ,IAAI,CAACsQ,MAAMf,EAAcpM,aAAa0N,WAAW,OAAOC,YAAY,SAGjD,UAA/BvB,EAAcvP,IAAI,UACpBuP,EAAcvP,IAAI,CAAC,MAAQ,SAAS2C,SAAS3C,IAAI,CAAC,MAAQ,UAG5D0Q,EAAEnB,cAAgBA,EAClBmB,EAAEV,cAAgBA,EAClBU,EAAET,WAAgB,KAElBZ,EAAQ7J,KAAKkL,GAEbD,EAAQM,iBAAiBlS,MACzB4R,EAAQO,qBAAqBnS,KAC/B,GACF,EAEAkS,iBAAkB,SAAUxB,GAC1B,IAAIC,EAAIF,EAAWC,GACfnF,EAAUzM,EAAE4R,GACZS,EAAgB5F,EAAQzH,SACxBqN,IACER,GAAKA,EAAEP,iBACTe,EAAchQ,IAAI,SAAUoK,EAAQ/L,eAEpC2R,EAAchQ,IAAI,SAAU,IAGlC,EAEAgR,qBAAsB,SAASzB,GACzB3R,OAAOqT,iBACc,IAAIrT,OAAOqT,kBAAiB,SAASC,IACtDA,EAAU,GAAGC,WAAW3T,QAAU0T,EAAU,GAAGE,aAAa5T,SAC9DiT,EAAQM,iBAAiBxB,EAE7B,IACiB8B,QAAQ9B,EAAe,CAAC+B,SAAS,EAAMC,WAAW,IAE/D3T,OAAO4T,kBACTjC,EAAciC,iBAAiB,mBAAmB,WAChDf,EAAQM,iBAAiBxB,EAC3B,IAAG,GACHA,EAAciC,iBAAiB,kBAAkB,WAC/Cf,EAAQM,iBAAiBxB,EAC3B,IAAG,IACM3R,OAAO6T,cAChBlC,EAAckC,YAAY,qBAAqB,WAC7ChB,EAAQM,iBAAiBxB,EAC3B,IACAA,EAAckC,YAAY,oBAAoB,WAC5ChB,EAAQM,iBAAiBxB,EAC3B,IAGN,EACA/C,OAAQkD,EACRnJ,OAAQiK,EACRkB,QAAS,SAASrS,GAChB,OAAOR,KAAKW,MAAK,WAMf,IALA,IAAImS,EAAO9S,KACP+S,EAAkBjU,EAAEgU,GAEpBE,GAAa,EACbrO,EAAI6L,EAAQ7R,OACTgG,KAAM,GACX,GAAI6L,EAAQ7L,GAAG+L,cAAcE,IAAI,KAAOkC,EAAM,CAC1C,IAAInC,EAAIH,EAAQ7L,GAChBgM,EAAED,cAAcW,QAAQ,gBAAiB,CAACV,IAC1CjB,EAAOuD,KAAKzC,EAAQ7L,EAAE,GACtBqO,EAAYrO,CAChB,EAEgB,IAAfqO,IACDD,EAAgB5I,SAChB4I,EACG5R,IAAI,CACH,MAAS,GACT,SAAY,GACZ,IAAO,GACP,MAAS,GACT,UAAW,KAInB,GACF,GAIApC,OAAO4T,kBACT5T,OAAO4T,iBAAiB,SAAU9B,GAAU,GAC5C9R,OAAO4T,iBAAiB,SAAUhB,GAAS,IAClC5S,OAAO6T,cAChB7T,OAAO6T,YAAY,WAAY/B,GAC/B9R,OAAO6T,YAAY,WAAYjB,IAGjC7S,EAAEwB,GAAG4S,OAAS,SAASxS,GACrB,OAAIkR,EAAQlR,GACHkR,EAAQlR,GAAQX,MAAMC,KAAMuP,EAAM0D,KAAKhT,UAAW,IAC9B,iBAAXS,GAAwBA,OAGxC5B,EAAEqU,MAAM,UAAYzS,EAAS,oCAFtBkR,EAAQtG,KAAKvL,MAAOC,KAAMC,UAIrC,EAEAnB,EAAEwB,GAAGuS,QAAU,SAASnS,GACtB,OAAIkR,EAAQlR,GACHkR,EAAQlR,GAAQX,MAAMC,KAAMuP,EAAM0D,KAAKhT,UAAW,IAC9B,iBAAXS,GAAwBA,OAGxC5B,EAAEqU,MAAM,UAAYzS,EAAS,oCAFtBkR,EAAQiB,QAAQ9S,MAAOC,KAAMC,UAIxC,EACAnB,GAAE,WACAqG,WAAW0L,EAAU,EACvB,GACF,OAxSkC,0D","sources":["webpack:///./vendors/groupedSelect/groupedSelect-functions.js","webpack:///./vendors/groupedSelect/groupedSelect.js","webpack:///./vendors/groupedSelect/knockout.groupedSelect.js","webpack:///./vendors/jquery.sticky.js"],"sourcesContent":["import { GetBreakpointWidth } from 'Utils/globals-bp';\r\nimport { PAGE_NAV_SHADOW_HEIGHT } from 'Utils/constants';\r\n\r\nexport function ScrollToSearchBarForDropDown($dropdown, forceModalScrolling, callBack) {\r\n // This function is used after qtip.hide() \r\n // when select dropdown-option or autocomplete-item inside dropdown\r\n var isModalMode = false;\r\n var api = $dropdown ? $dropdown.qtip('api') : null;\r\n var $dropdownContainerQtip = api != null ? api.tooltip : null;\r\n\r\n if (!forceModalScrolling && $dropdownContainerQtip && $dropdownContainerQtip.length > 0) {\r\n isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n }\r\n\r\n if (isModalMode) {\r\n //var scrollTop = $dropdown.attr(\"data-last-top\") || null;\r\n //if (scrollTop != null && $.isNumeric(scrollTop) && scrollTop >= 0) {\r\n // $('html, body').stop().delay(10).animate({\r\n // scrollTop: parseInt(scrollTop)\r\n // }, 0);\r\n //}\r\n } else {\r\n var top = $(window).scrollTop() || $('html, body').scrollTop();\r\n var $search = $dropdown ? $dropdown.closest(\".search\") : $(\".search:first\");\r\n if (!$search || ($search && $search.length < 1)) {\r\n // Get quit if parent searchBar is not found\r\n return;\r\n }\r\n var scrollTop = $search.offset().top;\r\n\r\n if (GetBreakpointWidth() <= 768) {\r\n //Remark: \r\n // 1) siteHeadRoom works while GetBreakpointWidth() < 768\r\n // 2) '.site-header' is fixed to top until GetBreakpointWidth() <= 768\r\n\r\n // Give space for siteHeadRoom if it's used\r\n let $siteHeader = $('.site-header');\r\n if (global.siteHeadRoom != null && $siteHeader.length > 0) {\r\n var height = $siteHeader.outerHeight();\r\n scrollTop -= height;\r\n }\r\n } else {\r\n //check Page-Nav sticky\r\n var $pageNav = $(\".page-nav\");\r\n if ($pageNav.length > 0) {\r\n let $stickyPageNav = $pageNav.closest(\".sticky-wrapper\");\r\n if ($stickyPageNav.length > 0) {\r\n var offset = $stickyPageNav.offset().top;\r\n var height = $stickyPageNav.outerHeight();\r\n //check if $search before/after $pageNav\r\n if (scrollTop > offset && height > 0) {\r\n // In case when current searchBar is located after pageNav and pageNav is visible (sticky.height > 0)\r\n // cut height on scrolling\r\n scrollTop -= (height + PAGE_NAV_SHADOW_HEIGHT);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //check searchBar is out of screen and scroll if need it\r\n if (top > scrollTop) {\r\n // Details: http://api.jquery.com/animate/\r\n //complete\r\n // Type: Function()\r\n //A function to call once the animation is complete, called once per matched element.\r\n //var completeCallback = (callBack && typeof callBack === 'function') ? callBack : function () { };\r\n // 1) keep 'html, body' because some browsers work only with one of this HTML tags\r\n // 2) anyway, 'callBack' must be executed only once\r\n var flgExecuted = false;\r\n var completeCallback = function () {\r\n if (flgExecuted)\r\n return;\r\n flgExecuted = true;\r\n\r\n if (!callBack && typeof callBack !== 'function')\r\n return;\r\n callBack.apply(this, arguments);\r\n };\r\n $('html, body').stop().delay(100).animate({\r\n scrollTop: scrollTop\r\n }, 100, completeCallback);\r\n return;\r\n }\r\n }\r\n\r\n if (callBack && typeof callBack === 'function')\r\n callBack();\r\n\r\n};\r\n\r\nexport function GetPositionContainerOfDropDownPricing(data) {\r\n if (!data || data === '')\r\n return false;\r\n\r\n if (data == 'filtering-on-map') {\r\n return \"#sidebarMapFilters\"\r\n }\r\n\r\n if (data == 'filtering') {\r\n return \"PARENT_CONTAINER\";\r\n }\r\n\r\n return false;\r\n};\r\n","import 'qtip2/dist/basic/jquery.qtip';\r\nimport { GetBreakpointWidth } from 'Utils/globals-bp';\r\nimport { UpdateSiteHeaderSticky } from 'Modules/headroom.js';\r\nimport { ScrollToSearchBarForDropDown } from './groupedSelect-functions.js';\r\n\r\n/* jQuery plugin groupedSelect\r\n*/\r\n(function ($) {\r\n\r\n var created_grouped_select = [];\r\n\r\n function useModalDropDown() {\r\n return GetBreakpointWidth() < 768;\r\n }\r\n\r\n $.fn.groupedSelect = function (options) {\r\n var self = this;\r\n\r\n // Methods\r\n if (typeof options == 'string') {\r\n var method = options;\r\n if (method == 'refresh') {\r\n this.each(function () {\r\n var $select = $(this);\r\n setCurrentText($select);\r\n });\r\n } else if (method == 'updateDropdown') {\r\n this.each(function () {\r\n //var $select = $(this);\r\n var $dropdown = $(this).next('.grouped-select');\r\n if($dropdown.length > 0) {\r\n updateDropdown($dropdown);\r\n }\r\n });\r\n } else if (method == 'disable' || method == 'enable') {\r\n let enabled = (method == 'enable') ? true : false;\r\n this.each(function () {\r\n //var $select = $(this);\r\n var $dropdown = $(this).next('.grouped-select');\r\n if($dropdown.length > 0) {\r\n setEnabled($dropdown, null, enabled);\r\n updateDropdown($dropdown);\r\n }\r\n });\r\n } else if (method == 'destroy') {\r\n this.each(function () {\r\n var $select = $(this);\r\n var $dropdown = $(this).next('.grouped-select');\r\n\r\n if ($dropdown.length) {\r\n $dropdown.remove();\r\n $select.css('display', '');\r\n }\r\n });\r\n if ($('.grouped-select').length == 0) {\r\n $(document).off('.grouped_select');\r\n }\r\n } else {\r\n console.log('Method \"' + method + '\" does not exist.')\r\n }\r\n return this;\r\n }\r\n\r\n\r\n self.settings = $.extend({\r\n dropdownContainerQtip: null,\r\n dropdownContainer: null,\r\n dropdownGroup: null,\r\n dropdownSelector: null,\r\n dropdownPositionContainer: false, // position of container in DOM; // Defaults to $(document.body)\r\n dropdownClasses: false, // add 'dropdown-list-container-qtip' classes\r\n beforeOpen: function () { return true; },\r\n afterUpdate: function (sender) { return true; },\r\n nm: '',\r\n autoComplete: false,\r\n placeholder: '',\r\n dropdownSameWidth: false,\r\n ignoreTimers: true, // ignore qtip.timers.show if set true\r\n dropdownModal: true,\r\n enabled: true\r\n }, options);\r\n self.jqDropDownGroup = '.grouped-select';\r\n if (self.settings.dropdownGroup) {\r\n self.jqDropDownGroup = self.settings.dropdownGroup;\r\n }\r\n self.jqDropDownSelector = '.grouped-select';\r\n if (self.settings.nm) {\r\n self.jqDropDownSelector += '.grouped-select-' + self.settings.nm;\r\n }\r\n self.settings.dropdownContainerQtip = self.settings.dropdownContainer.substring(1) + '-qtip'\r\n self.settings.dropdownContainer = self.settings.dropdownContainer + '.' + self.settings.nm;\r\n\r\n\r\n self.currentContext = {\r\n settings: self.settings,\r\n jqDropDownGroup: self.jqDropDownGroup,\r\n jqDropDownSelector: self.jqDropDownSelector,\r\n items: []\r\n };\r\n created_grouped_select.push(self.currentContext);\r\n\r\n // Unbind existing events in case that the plugin has been initialized before\r\n $(document).off('.grouped_select_' + self.settings.nm);\r\n\r\n // Hide native select\r\n this.hide();\r\n\r\n // Create custom markup\r\n this.each(function () {\r\n var $select = $(this);\r\n\r\n if (!$select.next().hasClass('grouped-select')) {\r\n create_grouped_select($select, self.currentContext);\r\n }\r\n });\r\n\r\n function create_grouped_select($select, context) {\r\n var displayId = $select.attr('id') + '-display';\r\n $select.after($('
')\r\n .addClass('grouped-select')\r\n .addClass(context.settings.autoComplete ? 'with-autocomplete' : '')\r\n .addClass($select.attr('class') || '')\r\n .addClass($select.attr('disabled') ? 'disabled' : '')\r\n .attr('tabindex', $select.attr('disabled') ? null : '0')\r\n .html(context.settings.autoComplete ? '' : '')\r\n );\r\n\r\n var $dropdown = $select.next();\r\n if (context.settings.nm) {\r\n $dropdown.addClass('grouped-select-' + context.settings.nm);\r\n }\r\n\r\n // init state of 'enabled' option\r\n setEnabled($dropdown, context, context.settings.enabled);\r\n\r\n var $options = $select.find('option');\r\n var $selected = $select.find('option:selected');\r\n\r\n if (context.settings.autoComplete) {\r\n $dropdown.find('.grouped-input').attr(\"placeholder\", context.settings.placeholder);\r\n } else {\r\n $dropdown.find('.current').html($selected.data('display') || $selected.text());\r\n }\r\n\r\n $(document).on('change.grouped_select_' + context.settings.nm, $select, function (event) {\r\n setCurrentText($(event.target));\r\n });\r\n\r\n var $container = $(context.settings.dropdownContainer);\r\n $(document).on('click.grouped_select_' + context.settings.nm, context.settings.dropdownContainer + ' .optgroup:not(.disabled)', function (event) {\r\n //2017-11-28 moved to 'data-bind' in template\r\n //var $optgroup = $(this);\r\n //$container.find('.optgroup.selected').removeClass('selected');\r\n //$optgroup.addClass('selected');\r\n\r\n //2017-12-20 same as on '.option' click\r\n //$select.trigger('change');\r\n\r\n //2018-01-27 disabled \"same as on '.option' click\"\r\n //var $option = $(this);\r\n //var dropdownSelector = getDropdownSelector(context);\r\n ////$dropdown.focus();\r\n ////if ($container.data('opened-by-nm') == settings.nm)\r\n //// $dropdown.focus();\r\n //if (event) {\r\n // //prevent event if there is bubbling from '.drop-icon'\r\n // var $target = $(event.target);\r\n // if ($target.hasClass('drop-icon'))\r\n // return;\r\n //}\r\n //\r\n //var qtip = $dropdown.qtip('api');\r\n //if (qtip)\r\n // qtip.hide();\r\n //$('.grouped-select').removeClass('open');\r\n //setVisibleDropdownSelector(dropdownSelector, false);\r\n });\r\n $(document).on('click.grouped_select_' + context.settings.nm, context.settings.dropdownContainer + ' .option:not(.disabled)', function (event) {\r\n var $option = $(this);\r\n var dropdownSelector = getDropdownSelector(context);\r\n //$dropdown.focus();\r\n //if ($container.data('opened-by-nm') == settings.nm)\r\n // $dropdown.focus();\r\n var qtip = $dropdown.qtip('api');\r\n if (qtip) {\r\n qtip.hide();\r\n ScrollToSearchBarForDropDown($dropdown);\r\n $('.input-wrapper').removeClass('open');\r\n }\r\n $('.grouped-select').removeClass('open');\r\n setVisibleDropdownSelector(dropdownSelector, false);\r\n\r\n });\r\n $(document).on('click.grouped_select_' + context.settings.nm, context.settings.dropdownContainer + ' .modal-close' + ', '+ context.settings.dropdownContainer + ' .close', function (event) {\r\n //var $this = $(this);\r\n var dropdownSelector = getDropdownSelector(context);\r\n //$dropdown.focus();\r\n //if ($container.data('opened-by-nm') == settings.nm)\r\n // $dropdown.focus();\r\n var qtip = $dropdown.qtip('api');\r\n if (qtip)\r\n qtip.hide();\r\n $('.grouped-select').removeClass('open');\r\n $('.input-wrapper').removeClass('open');\r\n setVisibleDropdownSelector(dropdownSelector, false);\r\n });\r\n\r\n\r\n // Open/close sub-items\r\n $(document).on('click.grouped_select_' + context.settings.nm, context.settings.dropdownContainer + ' .optgroup:not(.disabled) label.drop-icon', function (event) {\r\n //2018-03-03 moved to 'data-bind' in template\r\n ////event.stopPropagation();\r\n ////event.preventDefault();\r\n //var $label = $(this);\r\n //var $group = $label.parent('.optgroup');\r\n ////var $container = $(context.settings.dropdownContainer);\r\n ////$container.find('.optgroup').not($group).removeClass('open');\r\n //$group.toggleClass('open');\r\n //var checkId = '#' + $label.attr('for');\r\n //var $check = $label.closest('li').find(checkId) || $(checkId);\r\n ////$check.prop('checked', !$check.prop('checked'));\r\n //$check.attr('checked', !$check.attr('checked'));\r\n });\r\n\r\n context.items.push({\r\n $select: $select,\r\n $dropdown: $dropdown,\r\n });\r\n\r\n }\r\n\r\n function setCurrentText($select) {\r\n var $dropdown = $select.next('.grouped-select');\r\n var open = $dropdown.hasClass('open');\r\n\r\n if ($dropdown.length) {\r\n var $selected = $select.find('option:selected');\r\n var text = \"\";\r\n if ($selected.length > 0)\r\n text = $selected.data('display') || $selected.text();\r\n\r\n var currentContext = getCurrentContext($dropdown);\r\n if (currentContext.settings.autoComplete) {\r\n //$dropdown.find('.current').val(text);\r\n } else {\r\n $dropdown.find('.current').html(text);\r\n }\r\n\r\n let afterUpdate = currentContext.settings.afterUpdate;\r\n if (typeof afterUpdate === 'function') {\r\n afterUpdate.apply($select[0], [$dropdown[0]]);\r\n }\r\n if ($selected.val()) {\r\n $dropdown.find('.current').removeClass('empty');\r\n } else {\r\n $dropdown.find('.current').addClass('empty');\r\n }\r\n }\r\n }\r\n\r\n function setEnabled($dropdown, currentContext, enabled) {\r\n if (!$dropdown)\r\n return;\r\n\r\n if(currentContext == null || typeof currentContext == \"undefined\")\r\n currentContext = getCurrentContext($dropdown);\r\n\r\n currentContext.settings.enabled = enabled;\r\n\r\n var $input_wrapper = $(currentContext.jqDropDownGroup).parents(\".input-wrapper\");\r\n\r\n if (currentContext.settings.enabled) {\r\n $dropdown.removeClass('disabled');\r\n $input_wrapper.removeClass('disabled');\r\n } else {\r\n $dropdown.addClass('disabled');\r\n $input_wrapper.addClass('disabled');\r\n }\r\n }\r\n\r\n\r\n function updateDropdown($dropdown, currentContext) {\r\n if (!$dropdown)\r\n return;\r\n\r\n if(typeof currentContext == \"undefined\")\r\n currentContext = getCurrentContext($dropdown);\r\n\r\n let qtip = $dropdown.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n var $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n var useModalMode = currentContext.settings.dropdownModal? useModalDropDown() : false;\r\n\r\n if (useModalMode != isModalMode) {\r\n updateQtipModalMode(useModalMode, qtip, $dropdownContainerQtip);\r\n }\r\n\r\n var $container = $(currentContext.settings.dropdownContainer);\r\n fixModalHeadHeight($container);\r\n fixQtipAdjust($dropdown);\r\n fixAutocompleteInside($dropdown, $dropdownContainerQtip);\r\n }\r\n }\r\n\r\n function getDropdownSelector(context) {\r\n var dropdownSelector = null;\r\n if (typeof context.settings.dropdownSelector != \"undefined\" && context.settings.dropdownSelector != null) {\r\n if (typeof context.settings.dropdownSelector == \"function\") {\r\n dropdownSelector = context.settings.dropdownSelector();\r\n } else {\r\n dropdownSelector = context.settings.dropdownSelector;\r\n }\r\n }\r\n return dropdownSelector;\r\n }\r\n\r\n function setVisibleDropdownSelector(dropdownSelector, visible) {\r\n if (!dropdownSelector)\r\n return;\r\n if (typeof dropdownSelector.Visible == \"undefined\")\r\n return;\r\n\r\n if (typeof dropdownSelector.Visible == \"function\") {\r\n dropdownSelector.Visible(visible);\r\n } else {\r\n dropdownSelector.Visible = visible;\r\n }\r\n }\r\n\r\n function handleOnShowDropdownSelector(dropdownSelector) {\r\n if (!dropdownSelector)\r\n return;\r\n if (typeof dropdownSelector.OnShow == \"undefined\")\r\n return;\r\n\r\n if (typeof dropdownSelector.OnShow == \"function\") {\r\n dropdownSelector.OnShow();\r\n }\r\n }\r\n\r\n function getCurrentContext($dropdown) {\r\n var g = $.grep(created_grouped_select, function (item) {\r\n var found = false;\r\n\r\n var sub_g = $.grep(item.items, function (sub_item) { return sub_item.$dropdown.is($dropdown); });\r\n found = sub_g.length > 0;\r\n\r\n return found;\r\n });\r\n if (g.length > 0) {\r\n return g[0];\r\n } else {\r\n console.log(\"Not found by $dropdown: \" + $dropdown);\r\n return null;\r\n }\r\n }\r\n\r\n function fixModalHeadHeight($container) {\r\n var $contentHead = $container.find('.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(function() {\r\n return wrapper;\r\n })\r\n $stickyWrapper = $contentHead.parent('.sticky-wrapper');\r\n }\r\n $stickyWrapper.css('height', $contentHead.outerHeight(true));\r\n }\r\n\r\n function fixQtipAdjust($dropdown, $dropdownContainerQtip) {\r\n var currentContext = getCurrentContext($dropdown);\r\n if (!$dropdownContainerQtip) {\r\n $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n }\r\n var api = $dropdown.qtip('api');\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n if (isModalMode) {\r\n api.set('position.adjust.x', 0);\r\n $dropdownContainerQtip.css({ \"width\": '' });\r\n $dropdownContainerQtip.css({ \"maxWidth\": '' });\r\n } else {\r\n var $form = $dropdown.parents(\".search .searchbar-body\");\r\n if ($form.length > 0) {\r\n var leftForm = $form.offset().left;\r\n var leftTarget = $dropdown.offset().left;\r\n var currLeft = leftForm - leftTarget;\r\n var newWidth = $form.outerWidth()// without margin (on HW form is centered by margin)\r\n api.set('position.adjust.x', currLeft);\r\n $dropdownContainerQtip.css({ \"width\": newWidth });\r\n $dropdownContainerQtip.css({ \"maxWidth\": newWidth });\r\n } \r\n\r\n if (currentContext.settings.dropdownSameWidth) {\r\n var newWidth = $dropdown.outerWidth();\r\n api.set('position.adjust.x', 0);\r\n $dropdownContainerQtip.css({ \"width\": newWidth });\r\n $dropdownContainerQtip.css({ \"maxWidth\": newWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n function fixAutocompleteInside($dropdown, $dropdownContainerQtip) {\r\n if (!$dropdownContainerQtip) {\r\n var currentContext = getCurrentContext($dropdown);\r\n $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n }\r\n var api = $dropdown.qtip('api');\r\n if ($dropdownContainerQtip.length > 1 && api.tooltip && api.tooltip.length > 0) {\r\n // FIXME !!! refacoring :: found bug :: make it in better way\r\n $dropdownContainerQtip = api.tooltip;\r\n }\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n var qtipContainerId = \"#\"+$dropdownContainerQtip.attr('id');\r\n if ($dropdownContainerQtip.length > 1) {\r\n // FIXME !!! refacoring :: found bug :: make it in better way\r\n qtipContainerId = \"#\"+ (api.tooltip.attr(\"id\") || api._id);\r\n }\r\n\r\n var $autocomplete = $dropdownContainerQtip.find('.ui-autocomplete-input');\r\n $autocomplete.each(function (i, elem) {\r\n var $elem = $(elem);\r\n var $widget = $elem.autocomplete(\"widget\");\r\n if ($elem.autocomplete(\"option\", \"appendTo\") != qtipContainerId)\r\n $elem.autocomplete(\"option\", \"appendTo\", qtipContainerId);\r\n //$elem.autocomplete(\"option\", \"appendTo\", $dropdownContainerQtip);\r\n if (isModalMode) {\r\n $elem.addClass(\"modal\");\r\n $widget.addClass(\"modal\");\r\n $elem.autocomplete(\"option\", \"position\", { my : \"center top\", at: \"center bottom\", collision: \"fit none\" });\r\n } else {\r\n $elem.removeClass(\"modal\");\r\n $widget.removeClass(\"modal\");\r\n $elem.autocomplete(\"option\", \"position\", { my : \"left top\", at: \"left bottom\", collision: \"fit none\" });\r\n\r\n setTimeout(function () {\r\n elem.focus();\r\n }, 300);\r\n }\r\n if ($dropdownContainerQtip.hasClass('is-sticky-parent')) {\r\n $elem.addClass('is-sticky-parent');\r\n $widget.addClass('is-sticky-parent');\r\n }\r\n });\r\n }\r\n\r\n function fixQtipScrollTop(api, callback) {\r\n let cb_fixQtipScrollTop = (callback && typeof callback == \"function\") ? callback : function () { };\r\n\r\n if (!api) {\r\n cb_fixQtipScrollTop();\r\n return;\r\n }\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 cb_fixQtipScrollTop();\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 cb_fixQtipScrollTop();\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 = api.tooltip ? parseInt(api.tooltip.css(\"margin-top\")) : 0;\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, cb_fixQtipScrollTop);\r\n }\r\n\r\n function updateQtipModalMode(useModalMode, api, $dropdownContainerQtip) {\r\n if (useModalMode) {\r\n $dropdownContainerQtip.addClass(\"modal\");\r\n $('html').addClass(\"noscroll\");\r\n api.set('hide.event', 'click');\r\n } else {\r\n //$(document.body).removeClass(\"noscroll\");\r\n $('html').removeClass(\"noscroll\");\r\n $dropdownContainerQtip.removeClass(\"modal\");\r\n api.set('hide.event', 'unfocus'); \r\n }\r\n\r\n }\r\n\r\n function bindQtip($dropdown) {\r\n var currentContext = getCurrentContext($dropdown);\r\n\r\n // qtip classes with '.faded'\r\n var classes = currentContext.settings.dropdownContainerQtip;\r\n var $header = $dropdown.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 ($dropdown.hasClass('is-sticky-parent')) {\r\n classes += \" is-sticky-parent\";\r\n }\r\n\r\n if (currentContext.settings.dropdownClasses) {\r\n switch (typeof currentContext.settings.dropdownClasses) {\r\n case \"boolean\":\r\n classes = \"dropdown-list-container-qtip \" + classes;\r\n break;\r\n case \"string\":\r\n classes = currentContext.settings.dropdownClasses + \" \" + classes;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n var $parent = $dropdown.parents('.input-wrapper');\r\n var posMy = 'top center';\r\n var posAt = 'bottom center';\r\n var pLeft = 0;\r\n var $addon = $parent.find('.addon');\r\n if ($addon.length > 0) {\r\n posMy = 'top left';\r\n posAt = 'bottom left';\r\n pLeft = $addon.outerWidth(true) * -1;\r\n }\r\n var $container = $(currentContext.settings.dropdownContainer);\r\n\r\n // $container.find('.modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n fixModalHeadHeight($container);\r\n\r\n $(window).resize(function () {\r\n updateDropdown($dropdown, currentContext);\r\n /*\r\n let qtip = $dropdown.qtip('api');\r\n if (qtip && qtip.isShowing) {\r\n var $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n var isModalMode = $dropdownContainerQtip.hasClass(\"modal\");\r\n var useModalMode = useModalDropDown();\r\n\r\n if (useModalMode != isModalMode) {\r\n updateQtipModalMode(useModalMode, qtip, $dropdownContainerQtip);\r\n }\r\n \r\n fixModalHeadHeight();\r\n fixQtipAdjust($dropdown);\r\n }\r\n */\r\n });\r\n\r\n // details: http://qtip2.com/options#position.container and http://qtip2.com/options#global\r\n let positionContainer = false;\r\n if (currentContext.settings.dropdownPositionContainer) {\r\n let dpc = currentContext.settings.dropdownPositionContainer;\r\n if (typeof dpc == \"string\") {\r\n if (\"PARENT_CONTAINER\".toLowerCase() == dpc.toLowerCase()) {\r\n positionContainer = $container.parent();\r\n } else if (dpc.startsWith('.') || dpc.startsWith('#')) {\r\n // selector\r\n positionContainer = $(dpc);\r\n } else {\r\n // ???\r\n positionContainer = dpc;\r\n }\r\n } else {\r\n positionContainer = dpc;\r\n }\r\n }\r\n\r\n $dropdown.qtip({\r\n show: {\r\n event: '', // 'click' - disabled auto-event because method show() is used\r\n ready: true,\r\n solo: true,\r\n },\r\n overwrite: 'false',\r\n hide: 'unfocus',\r\n // 2018-05-17 Changed because qtip.hideMethod is executed before 'click.grouped_select' event rises\r\n //hide: {\r\n // event: 'click',\r\n // delay: 700,\r\n // //fixed: true,\r\n // //leave: false\r\n //},\r\n content: {\r\n text: $container\r\n },\r\n position: {\r\n target: $dropdown,\r\n container: positionContainer,\r\n my: posMy,\r\n at: posAt,\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, {\r\n duration: 0,\r\n queue: false,\r\n complete: function () {\r\n //fix autocomplete list when searchbar becomes sticky => no-sticky\r\n //api.elements.tooltip\r\n var $autocomplete = api.tooltip.find('.ui-autocomplete-input')\r\n $autocomplete.each(function (i, elem) {\r\n var $elem = $(elem);\r\n var $widget = $elem.autocomplete(\"widget\");\r\n //if (!$widget.hasClass('is-sticky-parent')) {\r\n if ($widget.is(\":visible\")) {\r\n $elem.autocomplete(\"search\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n },\r\n style: {\r\n //classes: currentContext.settings.dropdownContainer.substring(1) + '-qtip',\r\n //classes: currentContext.settings.dropdownContainerQtip,\r\n classes: classes, // + \" vh-max-height is-sticky-parent\",\r\n def: false,\r\n },\r\n events: {\r\n hide: function (event, api) {\r\n UpdateSiteHeaderSticky();\r\n $(currentContext.jqDropDownGroup).removeClass('open');\r\n var $input_wrapper = $(currentContext.jqDropDownGroup).parents(\".input-wrapper\");\r\n $input_wrapper.removeClass('open');\r\n $('html').removeClass(\"noscroll\");\r\n\r\n var scrollTop = $dropdown.attr(\"data-last-top\") || null;\r\n if (scrollTop != null && $.isNumeric(scrollTop) && scrollTop >= 0) {\r\n $('html, body').stop().delay(10).animate({\r\n scrollTop: parseInt(scrollTop)\r\n }, 0);\r\n }\r\n var dropdownSelector = getDropdownSelector(currentContext);\r\n setVisibleDropdownSelector(dropdownSelector, false);\r\n //scrollToSearchBar($dropdown);\r\n if (api) api.isShowing = false;\r\n },\r\n render: function (event, api) {\r\n //var $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n //$dropdownContainerQtip.find('.modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n //function fixModalHeadHeight() {\r\n // var $contentHotelNav = $dropdownContainerQtip.find('.modal-head');\r\n // $contentHotelNav.parent('.sticky-wrapper').css('height', $contentHotelNav.outerHeight(true));\r\n //};\r\n //fixModalHeadHeight();\r\n //$(window).resize(fixModalHeadHeight);\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 = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n var useModalMode = currentContext.settings.dropdownModal ? useModalDropDown() : false;\r\n updateQtipModalMode(useModalMode, api, $dropdownContainerQtip);\r\n\r\n if (useModalMode) {\r\n if (global.siteHeadRoom != null) {\r\n global.siteHeadRoom.destroy();\r\n }\r\n //$dropdownContainerQtip.find('.modal-head').sticky({ topSpacing: 0, zIndex: 5, widthFromWrapper: false });\r\n setTimeout(function () {\r\n fixModalHeadHeight($container);\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\r\n fixQtipAdjust($dropdown, $dropdownContainerQtip);\r\n fixAutocompleteInside($dropdown, $dropdownContainerQtip);\r\n }\r\n }\r\n });\r\n return $dropdown.qtip('api');\r\n }\r\n /* Event listeners */\r\n\r\n // Open/close\r\n $(document).on('click.grouped_select_' + self.settings.nm, self.jqDropDownSelector, function (event) {\r\n var $dropdown = $(this);\r\n var $input_wrapper = $dropdown.parents(\".input-wrapper\");\r\n var currentContext = getCurrentContext($dropdown);\r\n\r\n $('.grouped-select').not($dropdown).removeClass('open');\r\n $(\".input-wrapper\").removeClass('open');\r\n\r\n if (currentContext.settings.enabled) {\r\n $dropdown.toggleClass('open');\r\n } else {\r\n $dropdown.removeClass('open');\r\n }\r\n var $container = $(currentContext.settings.dropdownContainer);\r\n\r\n var dropdownSelector = getDropdownSelector(currentContext);\r\n\r\n var qtip = $dropdown.qtip('api');\r\n if (!qtip) {\r\n qtip = bindQtip($dropdown);\r\n }\r\n\r\n if ($dropdown.hasClass('open')) {\r\n $input_wrapper.addClass('open');\r\n currentContext.settings.beforeOpen();\r\n setVisibleDropdownSelector(dropdownSelector, true);\r\n handleOnShowDropdownSelector(dropdownSelector);\r\n $container.data('opened-by-nm', currentContext.settings.nm);\r\n if (qtip) {\r\n var $dropdownContainerQtip = $(\".\" + currentContext.settings.dropdownContainerQtip);\r\n var useModal = currentContext.settings.dropdownModal ? useModalDropDown() : false;\r\n var top = useModal ? ($(window).scrollTop() || $('html, body').scrollTop()) : '';\r\n $dropdown.attr(\"data-last-top\", top);\r\n var delay = 0;\r\n let ignoreTimers = currentContext.settings.ignoreTimers;\r\n if (!ignoreTimers && qtip.timers && qtip.timers.show && qtip.timers.show > 0) {\r\n delay = parseInt(qtip.timers.show) + 50;\r\n }\r\n // 'long-time-openning dropdowns' keep next lines alive for testing\r\n //if (qtip.timers && qtip.timers.show && qtip.timers.show > 0) {\r\n // console.log('>>>>>> qtip.timers.show = ' + qtip.timers.show);\r\n //} else {\r\n // console.log('>>>>>> qtip.timers.show is null.');\r\n //}\r\n\r\n if (delay > 0) {\r\n setTimeout(function () {\r\n fixQtipScrollTop(qtip, function () {\r\n // Animation complete.\r\n qtip.show();\r\n });\r\n }, delay);\r\n } else {\r\n fixQtipScrollTop(qtip, function () {\r\n // Animation complete.\r\n qtip.show();\r\n });\r\n }\r\n }\r\n $dropdown.find('.option');\r\n $dropdown.find('.focus').removeClass('focus');\r\n $dropdown.find('.selected').addClass('focus');\r\n //$(currentContext.jqDropDownGroup).not($dropdown).addClass('open');\r\n } else {\r\n $dropdown.focus();\r\n if (qtip)\r\n qtip.hide();\r\n $container.data('opened-by-nm', '');\r\n setVisibleDropdownSelector(dropdownSelector, false);\r\n $input_wrapper.removeClass('open');\r\n //$(currentContext.jqDropDownGroup).not($dropdown).removeClass('open');\r\n }\r\n\r\n var $input = $dropdown.find('.grouped-input');\r\n // close if already visible\r\n if ($input.length > 0 && $input.autocomplete(\"widget\").is(\":visible\")) {\r\n $input.autocomplete('close');\r\n }\r\n });\r\n\r\n if (self.settings.autoComplete) {\r\n // On document doesn't work because qtip.events.show rises also\r\n //$(document).on('click.grouped_select_' + self.settings.nm, self.jqDropDownSelector + ' .grouped-input', function (event) {\r\n $(self.jqDropDownSelector + ' .grouped-input').on('click.grouped_select_' + self.settings.nm, function (event) {\r\n var $input = $(this);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n $dropdown = $input.parent('.grouped-select');\r\n if ($dropdown.length > 0) {\r\n var qtip = $dropdown.qtip('api');\r\n if (qtip)\r\n qtip.hide();\r\n $dropdown.removeClass('open');\r\n $input_wrapper.removeClass('open');\r\n }\r\n });\r\n }\r\n\r\n return this;\r\n };\r\n\r\n}(jQuery));","import './groupedSelect';\r\n//import 'jquery-ui';\r\nimport 'jquery-ui/ui/widgets/autocomplete';\r\nimport('Vendors/selectToAutocomplete/jquery.select-to-autocomplete.1.0.9');\r\nimport 'Vendors/jquery.sticky'\r\nimport { ScrollToSearchBarForDropDown } from './groupedSelect-functions.js';\r\nimport { type } from 'jquery';\r\n\r\n//import ko from 'knockout';\r\n/* Custom Knockout bindings: groupedSelect and autoComplete\r\n* required: jQuery UI Autocomplete; groupedSelect.js\r\n*\r\n* Remarks: ko.bindingHandlers.autoComplete is part of 'groupedSelect' binding.\r\n* 'autoComplete' binding should be refactored and moved to separate knockout.autoComplete.js \r\n* if start to use this binding without 'groupedSelect' binding.\r\n*/\r\nko.bindingHandlers.groupedSelect = {\r\n // ***\r\n // Autocomplete is based on http://jsfiddle.net/HfNk9/3/\r\n // ***\r\n findSelectedItem: function (dataSource, binding, selectedValue) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var source = unwrap(dataSource);\r\n var valueProp = unwrap(binding.optionsValue);\r\n\r\n var selectedItem = ko.utils.arrayFirst(source, function (item) {\r\n var value = unwrap(item[valueProp]);\r\n if (!value)\r\n return false;\r\n if (value === '' || value === 0)\r\n return false;\r\n if (value === selectedValue)\r\n return true;\r\n }, this);\r\n\r\n return selectedItem;\r\n },\r\n buildDataSource: function (dataSource, labelProp, valueProp) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //var source = unwrap(dataSource);\r\n var source = ko.utils.arrayFilter(unwrap(dataSource), function (item) {\r\n var value = unwrap(item[valueProp]);\r\n if (!value)\r\n return false;\r\n if (value === '' || value === 0)\r\n return false;\r\n return true;\r\n });\r\n var mapped = ko.utils.arrayMap(source, function (item) {\r\n var result = {};\r\n result.label = labelProp ? unwrap(item[labelProp]) : unwrap(item).toString(); //show in pop-up choices\r\n result.value = valueProp ? unwrap(item[valueProp]) : unwrap(item).toString(); //value \r\n return result;\r\n });\r\n return mapped;\r\n },\r\n findAutocompleteItem: function (dataSource, binding, autocompleteValue) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var source = unwrap(dataSource);\r\n var textProp = unwrap(binding.optionsText);\r\n var selectedItem = ko.utils.arrayFirst(source, function (item) {\r\n var text = unwrap(item[textProp]);\r\n if (!text)\r\n return false;\r\n if (text === '')\r\n return false;\r\n if (text === autocompleteValue)\r\n return true;\r\n }, this);\r\n\r\n return selectedItem;\r\n },\r\n // init current binding after defined bindings in array\r\n // like there is definition of ko.bindingHandlers['value']\r\n after: ['options', 'foreach'], \r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n if ($(element).is('select')) {\r\n var result;\r\n var options = allBindingsAccessor().groupedSelectOptions || {};\r\n var dropdownContainer = options.dropdownContainer || '';\r\n let subscriptions = [];\r\n\r\n // clean up memory when knockout removes binding\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function (disposingElement) {\r\n //$(disposingElement).off(\"change\");\r\n //var $input = $(element).next('.grouped-select').find('.current');\r\n //if ($input.length > 0) {\r\n // $input.off(\"click\");\r\n // $input.autocomplete('destroy');\r\n //}\r\n $(element).groupedSelect('destroy');\r\n\r\n for (var i = 0; i < subscriptions.length; i++) {\r\n let subscription = subscriptions[i];\r\n if (subscription) {\r\n subscription.dispose();\r\n }\r\n }\r\n });\r\n\r\n $(element).addClass('groupedSelect').groupedSelect(options);\r\n\r\n //$(element).on(\"change\", function () {\r\n // $(element).groupedSelect('refresh');\r\n //});\r\n\r\n if (ko.isObservable(valueAccessor())) {\r\n //result = ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, viewModel, context);\r\n result = ko.bindingHandlers.value.init.apply(this, arguments);\r\n }\r\n\r\n var $input = $(element).next('.grouped-select').find('.grouped-input');\r\n if (options.autoComplete && $input.length > 0) {\r\n //$input.on(\"click\", function (event) {\r\n // event.stopPropagation();\r\n // $dropdown = $(element).next('.grouped-select');\r\n // if ($dropdown.length > 0) {\r\n // var qtip = $dropdown.qtip('api');\r\n // if (qtip)\r\n // qtip.hide();\r\n // $dropdown.removeClass('open');\r\n // }\r\n //});\r\n\r\n var unwrap = ko.utils.unwrapObservable;\r\n //var dataSource = valueAccessor();\r\n var binding = allBindingsAccessor();\r\n var valueProp = unwrap(binding.optionsValue);\r\n var labelProp = unwrap(binding.optionsText) || valueProp;\r\n //var displayId = $(element).attr('id') + '-display';\r\n //var displayElement;\r\n var autoCompleteOptions = {};\r\n\r\n var dataSource = binding.options;\r\n var displayElement = $input;\r\n var displayId = $input.attr('id');\r\n var modelValue = valueAccessor();\r\n\r\n if (binding.autoCompleteOptions) {\r\n autoCompleteOptions = $.extend(autoCompleteOptions, binding.autoCompleteOptions);\r\n }\r\n\r\n //Create a new input to be the autocomplete so that the label shows\r\n // also hide the original control since it will be used for the value binding\r\n //$(element).hide();\r\n //$(element).after('')\r\n //displayElement = $('#' + displayId);\r\n\r\n //handle value changing\r\n //var modelValue = binding.value;\r\n var modelValue = valueAccessor();\r\n if (modelValue) {\r\n var writeValueToModel = function (valueToWrite) {\r\n if (ko.isWriteableObservable(modelValue)) {\r\n //Since this is an observable, the update part will fire and select the \r\n // appropriate display values in the controls\r\n modelValue(valueToWrite);\r\n } else { //write to non-observable\r\n if (binding['_ko_property_writers'] && binding['_ko_property_writers']['value']) {\r\n binding['_ko_property_writers']['value'](valueToWrite);\r\n //Because this is not an observable, we have to manually change the controls values\r\n // since update will not do it for us (it will not fire since it is not observable)\r\n displayElement.val(labelToWrite);\r\n $(element).val(valueToWrite);\r\n }\r\n }\r\n }\r\n\r\n var handleValueChange = function (event, ui) {\r\n var labelToWrite = ui.item ? ui.item.label : null\r\n var valueToWrite = ui.item ? ui.item.value : null;\r\n if (labelToWrite && valueToWrite) {\r\n //The Label and Value should not be null, if it is\r\n // then they did not make a selection so do not update the \r\n // ko model\r\n writeValueToModel(valueToWrite);\r\n }\r\n //else {\r\n // //They did not make a valid selection so change the autoComplete box back to the previous selection\r\n // var currentModelValue = unwrap(modelValue);\r\n // //If the currentModelValue exists and is not nothing, then find out the display\r\n // // otherwise just blank it out since it is an invalid value\r\n // if (!currentModelValue)\r\n // displayElement.val('');\r\n // else {\r\n // //Go through the source and find the id, and use its label to set the autocomplete\r\n // var selectedItem = ko.bindingHandlers.groupedSelect.findSelectedItem(dataSource, binding, currentModelValue);\r\n //\r\n // //If we found the item then update the display\r\n // if (selectedItem) {\r\n // var displayText = labelProp ? unwrap(selectedItem[labelProp]) : unwrap(selectedItem).toString();\r\n // displayElement.val(displayText);\r\n // }\r\n // //if we did not find the item, then just blank it out, because it is an invalid value\r\n // else {\r\n // displayElement.val('');\r\n // }\r\n // }\r\n //}\r\n else {\r\n //They did not make a valid selection so make sure that it is a valid value or clear out the model value\r\n var autocompleteValue = $(event.target).val();\r\n var matchingItem = ko.bindingHandlers.groupedSelect.findAutocompleteItem(dataSource, binding, autocompleteValue);\r\n\r\n //if (matchingItem) {\r\n // var currentModelValue = unwrap(modelValue);\r\n // var currentValue = unwrap(currentModelValue[valueProp]);\r\n // var matchingValue = unwrap(matchingItem[valueProp]);\r\n // if (currentValue !== matchingValue)\r\n // matchingItem = null;\r\n //}\r\n\r\n if (matchingItem) {\r\n valueToWrite = unwrap(matchingItem[valueProp]);\r\n writeValueToModel(valueToWrite);\r\n var displayText = labelProp ? unwrap(matchingItem[labelProp]) : unwrap(matchingItem).toString();\r\n displayElement.val(displayText);\r\n } else {\r\n writeValueToModel(null);\r\n }\r\n\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var handleFocus = function (event, ui) {\r\n $(displayElement).val(ui.item.label);\r\n return false;\r\n };\r\n\r\n autoCompleteOptions.change = handleValueChange;\r\n autoCompleteOptions.select = handleValueChange;\r\n autoCompleteOptions.focus = handleFocus;\r\n //autoCompleteOptions.close = handleValueChange;\r\n autoCompleteOptions.renderMenu = function (ul, items) {\r\n $(ul).addClass('grouped-select-menu').removeClass('ui-corner-all');\r\n if ($(displayElement).hasClass('is-sticky-parent')) {\r\n $(ul).addClass('is-sticky-parent');\r\n }\r\n };\r\n }\r\n\r\n //handle the choices being updated in a Dependant Observable (DO), so the update function doesn't \r\n // have to do it each time the value is updated. Since we are passing the dataSource in DO, if it is\r\n // an observable, when you change the dataSource, the dependentObservable will be re-evaluated\r\n // and its subscribe event will fire allowing us to update the autocomplete datasource\r\n var mappedSource = ko.dependentObservable(function () {\r\n return ko.bindingHandlers.groupedSelect.buildDataSource(dataSource, labelProp, valueProp);\r\n }, viewModel);\r\n //Subscribe to the knockout observable array to get new/remove items\r\n mappedSource.subscribe(function (newValue) {\r\n displayElement.autocomplete(\"option\", \"source\", newValue);\r\n });\r\n\r\n autoCompleteOptions.source = mappedSource();\r\n\r\n displayElement.autocomplete(autoCompleteOptions);\r\n }\r\n\r\n let binding_groupedSelectEnabled = allBindingsAccessor().groupedSelectEnabled || undefined;\r\n if (typeof binding_groupedSelectEnabled != \"undefined\") {\r\n let set_enable = function (newValue) {\r\n if (newValue && newValue === true) {\r\n $(element).groupedSelect('enable');\r\n } else {\r\n $(element).groupedSelect('disable');\r\n }\r\n };\r\n\r\n set_enable(ko.unwrap(binding_groupedSelectEnabled));\r\n\r\n if (ko.isObservable(binding_groupedSelectEnabled)) {\r\n let subscription = binding_groupedSelectEnabled.subscribe(set_enable);\r\n subscriptions.push(subscription);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor, bindingContext) {\r\n var newValue = ko.unwrap(valueAccessor());\r\n if ($(element).is('select')) {\r\n var originalIndex = element.selectedIndex;\r\n var result = ko.bindingHandlers.value.update.apply(this, arguments);\r\n var options = allBindingsAccessor().groupedSelectOptions || {};\r\n\r\n if (originalIndex !== element.selectedIndex) {\r\n ko.utils.triggerEvent(element, \"change\");\r\n }\r\n $(element).groupedSelect('refresh');\r\n\r\n var $input = $(element).next('.grouped-select').find('.grouped-input');\r\n if (options.autoComplete && $input.length > 0) {\r\n //update value based on a model change\r\n var unwrap = ko.utils.unwrapObservable;\r\n //var dataSource = valueAccessor();\r\n var binding = allBindingsAccessor();\r\n var valueProp = unwrap(binding.optionsValue);\r\n var labelProp = unwrap(binding.optionsText) || valueProp;\r\n //var displayId = $(element).attr('id') + '-display';\r\n //var displayElement = $('#' + displayId);\r\n //var modelValue = binding.value;\r\n var dataSource = binding.options;\r\n var displayElement = $input;\r\n var displayId = $input.attr('id');\r\n var modelValue = valueAccessor();\r\n\r\n if (modelValue) {\r\n var currentModelValue = unwrap(modelValue);\r\n //Set the hidden box to be the same as the viewModels Bound property\r\n $(element).val(currentModelValue);\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var selectedItem = ko.bindingHandlers.groupedSelect.findSelectedItem(dataSource, binding, currentModelValue);\r\n if (selectedItem) {\r\n var displayText = labelProp ? unwrap(selectedItem[labelProp]) : unwrap(selectedItem).toString();\r\n displayElement.val(displayText);\r\n } else {\r\n displayElement.val('');\r\n }\r\n }\r\n }\r\n\r\n\r\n return result;\r\n }\r\n }\r\n};\r\n\r\n\r\nko.bindingHandlers.autoComplete = {\r\n // ***\r\n // Autocomplete is based on http://jsfiddle.net/HfNk9/3/\r\n // ***\r\n findSelectedItem: function (dataSource, binding, selectedValue) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var source = unwrap(dataSource);\r\n var valueProp = unwrap(binding.optionsValue);\r\n\r\n var selectedItem = ko.utils.arrayFirst(source, function (item) {\r\n var value = unwrap(item[valueProp]);\r\n if (!value)\r\n return false;\r\n if (value === '' || value === 0)\r\n return false;\r\n if (value === selectedValue)\r\n return true;\r\n }, this);\r\n\r\n return selectedItem;\r\n },\r\n buildDataSource: function (dataSource, labelProp, valueProp) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //var source = unwrap(dataSource);\r\n var source = ko.utils.arrayFilter(unwrap(dataSource), function (item) {\r\n var value = unwrap(item[valueProp]);\r\n if (!value)\r\n return false;\r\n if (value === '' || value === 0)\r\n return false;\r\n return true;\r\n });\r\n var mapped = ko.utils.arrayMap(source, function (item) {\r\n var result = {};\r\n result.label = labelProp ? unwrap(item[labelProp]) : unwrap(item).toString(); //show in pop-up choices\r\n result.value = valueProp ? unwrap(item[valueProp]) : unwrap(item).toString(); //value \r\n return result;\r\n });\r\n return mapped;\r\n },\r\n findAutocompleteItem: function (dataSource, binding, autocompleteValue) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var source = unwrap(dataSource);\r\n var textProp = unwrap(binding.optionsText);\r\n\r\n var selectedItem = ko.utils.arrayFirst(source, function (item) {\r\n var text = unwrap(item[textProp]);\r\n if (!text)\r\n return false;\r\n if (text === '')\r\n return false;\r\n if (text === autocompleteValue)\r\n return true;\r\n }, this);\r\n\r\n return selectedItem;\r\n },\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n var unwrap = ko.utils.unwrapObservable;\r\n var dataSource = valueAccessor();\r\n var binding = allBindingsAccessor();\r\n var valueProp = unwrap(binding.optionsValue);\r\n var labelProp = unwrap(binding.optionsText) || valueProp;\r\n var displayId = $(element).attr('id') + '-display';\r\n var displayElement;\r\n var options = {};\r\n //var displayMenu = {};\r\n var menuOptions = null;\r\n\r\n if (binding.autoCompleteOptions) {\r\n options = $.extend(options, binding.autoCompleteOptions);\r\n }\r\n //if (binding.autoCompleteMenu) {\r\n // displayMenu = $.extend(displayMenu, binding.autoCompleteMenu);\r\n //}\r\n\r\n if (binding.autoCompleteMenuOptions) {\r\n menuOptions = $.extend({}, menuOptions, binding.autoCompleteMenuOptions);\r\n }\r\n\r\n //Create a new input to be the autocomplete so that the label shows\r\n // also hide the original control since it will be used for the value binding\r\n $(element).hide();\r\n //$(element).after('');\r\n //var displayElement = $('#' + displayId);\r\n var displayElement = $('').attr({ type: 'text', id: displayId, name: displayId });\r\n displayElement.addClass($(element).attr('class') || '');\r\n displayElement.attr('placeholder', $(element).attr('placeholder') || '');\r\n $(element).after(displayElement);\r\n\r\n var bindTo = unwrap(binding.autoCompleteSearchTerm) || \"\";\r\n if (bindTo != null && bindTo != \"\") {\r\n displayElement.attr('data-bind', \"textInput: \" + bindTo);\r\n ko.applyBindings(viewModel, displayElement[0]);\r\n }\r\n\r\n var autoCompleteQtip = unwrap(binding.autoCompleteQtip) || '';\r\n\r\n \r\n //handle value changing\r\n var handleValueChange = null;\r\n var handleValueChange_postprocessing = function () {\r\n if (autoCompleteQtip != '') {\r\n var $qtipContainer = $(element).parents(\".qtip\");\r\n if ($qtipContainer.length > 0) {\r\n var qtipId = $qtipContainer.data('qtip-id');\r\n var $qtip = null;\r\n var g = $.grep($(autoCompleteQtip), function (item) {\r\n var $item = $(item);\r\n return $item.data('hasqtip') == qtipId;\r\n });\r\n if (g && g.length > 0) {\r\n $qtip = $(g[0]);\r\n }\r\n\r\n if ($qtip && $qtip.length > 0) {\r\n var qtip = $qtip.qtip('api');\r\n if (qtip) {\r\n qtip.hide();\r\n ScrollToSearchBarForDropDown($qtip);\r\n }\r\n }\r\n }\r\n }\r\n\r\n };\r\n var modelValue = binding.value;\r\n if (modelValue) {\r\n var writeValueToModel = function (valueToWrite) {\r\n if (ko.isWriteableObservable(modelValue)) {\r\n //Since this is an observable, the update part will fire and select the \r\n // appropriate display values in the controls\r\n modelValue(valueToWrite);\r\n } else { //write to non-observable\r\n if (binding['_ko_property_writers'] && binding['_ko_property_writers']['value']) {\r\n binding['_ko_property_writers']['value'](valueToWrite);\r\n //Because this is not an observable, we have to manually change the controls values\r\n // since update will not do it for us (it will not fire since it is not observable)\r\n displayElement.val(labelToWrite);\r\n $(element).val(valueToWrite);\r\n }\r\n }\r\n }\r\n\r\n handleValueChange = function (event, ui) {\r\n var labelToWrite = ui.item ? ui.item.label : null\r\n var valueToWrite = ui.item ? ui.item.value : null;\r\n if (labelToWrite && valueToWrite) {\r\n //The Label and Value should not be null, if it is\r\n // then they did not make a selection so do not update the \r\n // ko model\r\n writeValueToModel(valueToWrite);\r\n\r\n // save values to global variables for google analytics tracking in function trackSearchBtnClick\r\n //searchbarLastDestinationClicked = labelToWrite;\r\n //searchbarLastTypeClicked = \"destination-autocomplete\";\r\n if (binding.autoCompleteValueChange) {\r\n if (typeof binding.autoCompleteValueChange == \"function\") {\r\n binding.autoCompleteValueChange(labelToWrite);\r\n }\r\n }\r\n\r\n }\r\n //else {\r\n // //They did not make a valid selection so change the autoComplete box back to the previous selection\r\n // var currentModelValue = unwrap(modelValue);\r\n // //If the currentModelValue exists and is not nothing, then find out the display\r\n // // otherwise just blank it out since it is an invalid value\r\n // if (!currentModelValue)\r\n // displayElement.val('');\r\n // else {\r\n // //Go through the source and find the id, and use its label to set the autocomplete\r\n // var selectedItem = ko.bindingHandlers.autoComplete.findSelectedItem(dataSource, binding, currentModelValue);\r\n //\r\n // //If we found the item then update the display\r\n // if (selectedItem) {\r\n // var displayText = labelProp ? unwrap(selectedItem[labelProp]) : unwrap(selectedItem).toString();\r\n // displayElement.val(displayText);\r\n // }\r\n // //if we did not find the item, then just blank it out, because it is an invalid value\r\n // else {\r\n // displayElement.val('');\r\n // }\r\n // }\r\n //}\r\n else {\r\n //They did not make a valid selection so make sure that it is a valid value or clear out the model value\r\n var autocompleteValue = $(event.target).val();\r\n var matchingItem = ko.bindingHandlers.autoComplete.findAutocompleteItem(dataSource, binding, autocompleteValue);\r\n\r\n //if (matchingItem) {\r\n // var currentModelValue = unwrap(modelValue);\r\n // var currentValue = unwrap(currentModelValue[valueProp]);\r\n // var matchingValue = unwrap(matchingItem[valueProp]);\r\n // if (currentValue !== matchingValue)\r\n // matchingItem = null;\r\n //}\r\n\r\n if (matchingItem) {\r\n valueToWrite = unwrap(matchingItem[valueProp]);\r\n writeValueToModel(valueToWrite);\r\n var displayText = labelProp ? unwrap(matchingItem[labelProp]) : unwrap(matchingItem).toString();\r\n displayElement.val(displayText);\r\n } else {\r\n //writeValueToModel(null);\r\n }\r\n\r\n }\r\n\r\n handleValueChange_postprocessing();\r\n return false;\r\n };\r\n }\r\n\r\n var modelSelectedItem = binding.autoCompleteSelectedItem\r\n if (modelSelectedItem) {\r\n var writeValueToModel = function (valueToWrite) {\r\n if (ko.isWriteableObservable(modelSelectedItem)) {\r\n //Since this is an observable, the update part will fire and select the \r\n // appropriate display values in the controls\r\n modelSelectedItem(valueToWrite);\r\n } else { //write to non-observable\r\n // unused case for now\r\n //if (binding['_ko_property_writers'] && binding['_ko_property_writers']['value']) {\r\n // binding['_ko_property_writers']['value'](valueToWrite);\r\n // //Because this is not an observable, we have to manually change the controls values\r\n // // since update will not do it for us (it will not fire since it is not observable)\r\n // displayElement.val(labelToWrite);\r\n // $(element).val(valueToWrite);\r\n //}\r\n }\r\n };\r\n\r\n handleValueChange = function (event, ui) {\r\n var labelToWrite = ui.item ? ui.item.label : null\r\n var valueToWrite = ui.item ? ui.item.value : null;\r\n\r\n var changedValue = null;\r\n\r\n if (labelToWrite && valueToWrite) {\r\n if (ko.isWriteableObservable(modelSelectedItem)) {\r\n var selectedItem = ko.bindingHandlers.autoComplete.findSelectedItem(dataSource, binding, valueToWrite);\r\n writeValueToModel(selectedItem);\r\n changedValue = selectedItem;\r\n }\r\n } else {\r\n //They did not make a valid selection so make sure that it is a valid value or clear out the model value\r\n var autocompleteValue = $(event.target).val();\r\n var matchingItem = ko.bindingHandlers.autoComplete.findAutocompleteItem(dataSource, binding, autocompleteValue);\r\n\r\n if (matchingItem) {\r\n writeValueToModel(matchingItem);\r\n var displayText = labelProp ? unwrap(matchingItem[labelProp]) : unwrap(matchingItem).toString();\r\n displayElement.val(displayText);\r\n } else {\r\n //writeValueToModel(null);\r\n }\r\n changedValue = matchingItem;\r\n } \r\n \r\n if (binding.autoCompleteValueChange) {\r\n //labelToWrite = unwrap(matchingItem[labelProp]);\r\n if (typeof binding.autoCompleteValueChange == \"function\") {\r\n binding.autoCompleteValueChange(changedValue, labelToWrite);\r\n }\r\n }\r\n\r\n handleValueChange_postprocessing();\r\n\r\n return false;\r\n };\r\n\r\n }\r\n\r\n var handleFocus = function (event, ui) {\r\n $(displayElement).val(ui.item.label);\r\n return false;\r\n };\r\n\r\n if (handleValueChange) {\r\n options.change = handleValueChange;\r\n options.select = handleValueChange;\r\n }\r\n options.focus = handleFocus;\r\n //options.close = handleValueChange;\r\n options.renderMenu = function (ul, items) {\r\n //var cls = '';\r\n //if (displayMenu.class && displayMenu.class != '') {\r\n // $(ul).addClass(displayMenu.class);\r\n //}\r\n //$(ul).removeClass('ui-corner-all');\r\n\r\n if (autoCompleteQtip != '') {\r\n var $qtipContainer = $(element).closest(\".qtip\");\r\n if ($qtipContainer.length > 0) {\r\n //var qtipId = $qtipContainer.data('qtip-id');\r\n //var $qtip = null;\r\n //var g = $.grep($(autoCompleteQtip), function (item) {\r\n // var $item = $(item);\r\n // return $item.data('hasqtip') == qtipId;\r\n //});\r\n //if (g && g.length > 0) {\r\n // $qtip = $(g[0]);\r\n //}\r\n //\r\n //if ($qtip && $qtip.length > 0) {\r\n // var qtip = $qtip.qtip('api');\r\n // if (qtip) {\r\n // qtip.hide();\r\n // ScrollToSearchBarForDropDown($qtip);\r\n // }\r\n //}\r\n var isModalMode = $qtipContainer.hasClass(\"modal\");\r\n if (isModalMode) {\r\n $(ul).addClass(\"modal\");\r\n } else {\r\n $(ul).removeClass(\"modal\");\r\n }\r\n }\r\n }\r\n\r\n\r\n };\r\n //options.open = function (event, ui) {\r\n // console.log(event);\r\n //};\r\n \r\n\r\n if (!binding.autoCompleteSource && typeof binding.autoCompleteSource != \"function\") {\r\n //handle the choices being updated in a Dependant Observable (DO), so the update function doesn't \r\n // have to do it each time the value is updated. Since we are passing the dataSource in DO, if it is\r\n // an observable, when you change the dataSource, the dependentObservable will be re-evaluated\r\n // and its subscribe event will fire allowing us to update the autocomplete datasource\r\n var mappedSource = ko.dependentObservable(function () {\r\n return ko.bindingHandlers.autoComplete.buildDataSource(dataSource, labelProp, valueProp);\r\n }, viewModel);\r\n //Subscribe to the knockout observable array to get new/remove items\r\n mappedSource.subscribe(function (newValue) {\r\n displayElement.autocomplete(\"option\", \"source\", newValue);\r\n });\r\n\r\n options.source = mappedSource();\r\n } else {\r\n options.source = function (request, response) {\r\n let mappedResponse = function (items) {\r\n dataSource = items;\r\n response(ko.bindingHandlers.autoComplete.buildDataSource(dataSource, labelProp, valueProp));\r\n };\r\n\r\n binding.autoCompleteSource(request, mappedResponse);\r\n }\r\n }\r\n\r\n displayElement.autocomplete(options);\r\n\r\n let autocomplete = displayElement.data('ui-autocomplete');\r\n if (menuOptions && autocomplete && autocomplete.menu) {\r\n autocomplete.menu._setOptions(menuOptions);\r\n //console.log(autocomplete.menu);\r\n }\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n //update value based on a model change\r\n var unwrap = ko.utils.unwrapObservable;\r\n var dataSource = valueAccessor();\r\n var binding = allBindingsAccessor();\r\n var valueProp = unwrap(binding.optionsValue);\r\n var labelProp = unwrap(binding.optionsText) || valueProp;\r\n var displayId = $(element).attr('id') + '-display';\r\n var displayElement = $('#' + displayId);\r\n var modelValue = binding.value;\r\n\r\n if (modelValue) {\r\n var currentModelValue = unwrap(modelValue);\r\n //Set the hidden box to be the same as the viewModels Bound property\r\n $(element).val(currentModelValue);\r\n //Go through the source and find the id, and use its label to set the autocomplete\r\n var selectedItem = ko.bindingHandlers.autoComplete.findSelectedItem(dataSource, binding, currentModelValue);\r\n if (selectedItem) {\r\n var displayText = labelProp ? unwrap(selectedItem[labelProp]) : unwrap(selectedItem).toString();\r\n //displayElement.val(displayText);\r\n var bindTo = unwrap(binding.autoCompleteSearchTerm) || \"\";\r\n if (bindTo != null && bindTo != \"\") {\r\n displayElement.val('');\r\n } else {\r\n displayElement.val(displayText);\r\n }\r\n } else {\r\n //displayElement.val('');\r\n }\r\n }\r\n }\r\n};","// Sticky Plugin v1.0.4 for jQuery\r\n// =============\r\n// Author: Anthony Garand\r\n// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)\r\n// Improvements by Leonardo C. Daronco (daronco)\r\n// Created: 02/14/2011\r\n// Date: 07/20/2015\r\n// Website: http://stickyjs.com/\r\n// Description: Makes an element on the page stick on the screen as you scroll\r\n// It will only set the 'top' and 'position' of your element, you\r\n// might need to adjust the width in some cases.\r\n\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // Node/CommonJS\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n var slice = Array.prototype.slice; // save ref to original slice()\r\n var splice = Array.prototype.splice; // save ref to original slice()\r\n\r\n var defaults = {\r\n topSpacing: 0,\r\n bottomSpacing: 0,\r\n className: 'is-sticky',\r\n wrapperClassName: 'sticky-wrapper',\r\n center: false,\r\n getWidthFrom: '',\r\n widthFromWrapper: true, // works only when .getWidthFrom is empty\r\n responsiveWidth: false,\r\n fixWrapperHeight: true,\r\n zIndex: 'inherit'\r\n },\r\n $window = $(window),\r\n $document = $(document),\r\n sticked = [],\r\n getSticked = function (stickyElement) {\r\n var s = null;\r\n var $stickyElement = $(stickyElement);\r\n var optionsIdx = -1;\r\n var i = sticked.length;\r\n while (i-- > 0) {\r\n if (sticked[i].stickyElement.get(0) === stickyElement) {\r\n optionsIdx = i;\r\n s = sticked[i];\r\n }\r\n }\r\n return s;\r\n },\r\n windowHeight = $window.height(),\r\n scroller = function() {\r\n var scrollTop = $window.scrollTop(),\r\n documentHeight = $document.height(),\r\n dwh = documentHeight - windowHeight,\r\n extra = (scrollTop > dwh) ? dwh - scrollTop : 0;\r\n\r\n for (var i = 0, l = sticked.length; i < l; i++) {\r\n var s = sticked[i],\r\n elementTop = s.stickyWrapper.offset().top,\r\n etse = elementTop - s.topSpacing - extra;\r\n\r\n //update height in case of dynamic content\r\n if (s.fixWrapperHeight) {\r\n s.stickyWrapper.css('height', s.stickyElement.outerHeight());\r\n }\r\n\r\n if (scrollTop <= etse) {\r\n if (s.currentTop !== null) {\r\n s.stickyElement\r\n .css({\r\n 'width': '',\r\n 'position': '',\r\n 'top': '',\r\n 'z-index': ''\r\n });\r\n s.stickyElement.parent().removeClass(s.className);\r\n s.stickyElement.trigger('sticky-end', [s]);\r\n s.currentTop = null;\r\n }\r\n }\r\n else {\r\n var newTop = documentHeight - s.stickyElement.outerHeight()\r\n - s.topSpacing - s.bottomSpacing - scrollTop - extra;\r\n if (newTop < 0) {\r\n newTop = newTop + s.topSpacing;\r\n } else {\r\n newTop = s.topSpacing;\r\n }\r\n if (s.currentTop !== newTop) {\r\n var newWidth;\r\n if (s.getWidthFrom) {\r\n padding = s.stickyElement.innerWidth() - s.stickyElement.width();\r\n newWidth = $(s.getWidthFrom).width() - padding || null;\r\n } else if (s.widthFromWrapper) {\r\n newWidth = s.stickyWrapper.width();\r\n }\r\n if (newWidth == null) {\r\n newWidth = s.stickyElement.width();\r\n }\r\n s.stickyElement\r\n .css('width', newWidth)\r\n .css('position', 'fixed')\r\n .css('top', newTop)\r\n .css('z-index', s.zIndex);\r\n\r\n s.stickyElement.parent().addClass(s.className);\r\n\r\n if (s.currentTop === null) {\r\n s.stickyElement.trigger('sticky-start', [s]);\r\n } else {\r\n // sticky is started but it have to be repositioned\r\n s.stickyElement.trigger('sticky-update', [s]);\r\n }\r\n\r\n if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {\r\n // just reached bottom || just started to stick but bottom is already reached\r\n s.stickyElement.trigger('sticky-bottom-reached', [s]);\r\n } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {\r\n // sticky is started && sticked at topSpacing && overflowing from top just finished\r\n s.stickyElement.trigger('sticky-bottom-unreached', [s]);\r\n }\r\n\r\n s.currentTop = newTop;\r\n }\r\n\r\n // Check if sticky has reached end of container and stop sticking\r\n var stickyWrapperContainer = s.stickyWrapper.parent();\r\n var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);\r\n\r\n if( unstick ) {\r\n s.stickyElement\r\n .css('position', 'absolute')\r\n .css('top', '')\r\n .css('bottom', 0)\r\n .css('z-index', '');\r\n } else {\r\n s.stickyElement\r\n .css('position', 'fixed')\r\n .css('top', newTop)\r\n .css('bottom', '')\r\n .css('z-index', s.zIndex);\r\n }\r\n }\r\n }\r\n },\r\n resizer = function() {\r\n windowHeight = $window.height();\r\n\r\n for (var i = 0, l = sticked.length; i < l; i++) {\r\n var s = sticked[i];\r\n var newWidth = null;\r\n if (s.getWidthFrom) {\r\n if (s.responsiveWidth) {\r\n newWidth = $(s.getWidthFrom).width();\r\n }\r\n } else if(s.widthFromWrapper) {\r\n newWidth = s.stickyWrapper.width();\r\n }\r\n if (newWidth != null) {\r\n s.stickyElement.css('width', newWidth);\r\n }\r\n }\r\n },\r\n methods = {\r\n init: function(options) {\r\n return this.each(function() {\r\n var o = $.extend({}, defaults, options);\r\n var stickyElement = $(this);\r\n\r\n var stickyId = stickyElement.attr('id');\r\n var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;\r\n var wrapper = $('')\r\n .attr('id', wrapperId)\r\n .addClass(o.wrapperClassName);\r\n\r\n stickyElement.wrapAll(function() {\r\n if ($(this).parent(\"#\" + wrapperId).length == 0) {\r\n return wrapper;\r\n }\r\n});\r\n\r\n var stickyWrapper = stickyElement.parent();\r\n\r\n if (o.center) {\r\n stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:\"auto\",marginRight:\"auto\"});\r\n }\r\n\r\n if (stickyElement.css(\"float\") === \"right\") {\r\n stickyElement.css({\"float\":\"none\"}).parent().css({\"float\":\"right\"});\r\n }\r\n\r\n o.stickyElement = stickyElement;\r\n o.stickyWrapper = stickyWrapper;\r\n o.currentTop = null;\r\n\r\n sticked.push(o);\r\n\r\n methods.setWrapperHeight(this);\r\n methods.setupChangeListeners(this);\r\n });\r\n },\r\n\r\n setWrapperHeight: function (stickyElement) {\r\n var s = getSticked(stickyElement);\r\n var element = $(stickyElement);\r\n var stickyWrapper = element.parent();\r\n if (stickyWrapper) {\r\n if (s && s.fixWrapperHeight) {\r\n stickyWrapper.css('height', element.outerHeight());\r\n } else {\r\n stickyWrapper.css('height', '');\r\n }\r\n }\r\n },\r\n\r\n setupChangeListeners: function(stickyElement) {\r\n if (window.MutationObserver) {\r\n var mutationObserver = new window.MutationObserver(function(mutations) {\r\n if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {\r\n methods.setWrapperHeight(stickyElement);\r\n }\r\n });\r\n mutationObserver.observe(stickyElement, {subtree: true, childList: true});\r\n } else {\r\n if (window.addEventListener) {\r\n stickyElement.addEventListener('DOMNodeInserted', function() {\r\n methods.setWrapperHeight(stickyElement);\r\n }, false);\r\n stickyElement.addEventListener('DOMNodeRemoved', function() {\r\n methods.setWrapperHeight(stickyElement);\r\n }, false);\r\n } else if (window.attachEvent) {\r\n stickyElement.attachEvent('onDOMNodeInserted', function() {\r\n methods.setWrapperHeight(stickyElement);\r\n });\r\n stickyElement.attachEvent('onDOMNodeRemoved', function() {\r\n methods.setWrapperHeight(stickyElement);\r\n });\r\n }\r\n }\r\n },\r\n update: scroller,\r\n resize: resizer,\r\n unstick: function(options) {\r\n return this.each(function() {\r\n var that = this;\r\n var unstickyElement = $(that);\r\n\r\n var removeIdx = -1;\r\n var i = sticked.length;\r\n while (i-- > 0) {\r\n if (sticked[i].stickyElement.get(0) === that) {\r\n var s = sticked[i];\r\n s.stickyElement.trigger('unstick-start', [s]);\r\n splice.call(sticked,i,1);\r\n removeIdx = i;\r\n }\r\n }\r\n if(removeIdx !== -1) {\r\n unstickyElement.unwrap();\r\n unstickyElement\r\n .css({\r\n 'width': '',\r\n 'position': '',\r\n 'top': '',\r\n 'float': '',\r\n 'z-index': ''\r\n })\r\n ;\r\n }\r\n });\r\n }\r\n };\r\n\r\n // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):\r\n if (window.addEventListener) {\r\n window.addEventListener('scroll', scroller, false);\r\n window.addEventListener('resize', resizer, false);\r\n } else if (window.attachEvent) {\r\n window.attachEvent('onscroll', scroller);\r\n window.attachEvent('onresize', resizer);\r\n }\r\n\r\n $.fn.sticky = function(method) {\r\n if (methods[method]) {\r\n return methods[method].apply(this, slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method ) {\r\n return methods.init.apply( this, arguments );\r\n } else {\r\n $.error('Method ' + method + ' does not exist on jQuery.sticky');\r\n }\r\n };\r\n\r\n $.fn.unstick = function(method) {\r\n if (methods[method]) {\r\n return methods[method].apply(this, slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method ) {\r\n return methods.unstick.apply( this, arguments );\r\n } else {\r\n $.error('Method ' + method + ' does not exist on jQuery.sticky');\r\n }\r\n };\r\n $(function() {\r\n setTimeout(scroller, 0);\r\n });\r\n}));"],"names":["ScrollToSearchBarForDropDown","$dropdown","forceModalScrolling","callBack","isModalMode","api","qtip","$dropdownContainerQtip","tooltip","length","hasClass","top","$","window","scrollTop","$search","closest","offset","$siteHeader","g","siteHeadRoom","height","outerHeight","$pageNav","$stickyPageNav","flgExecuted","stop","delay","animate","apply","this","arguments","GetPositionContainerOfDropDownPricing","data","created_grouped_select","useModalDropDown","fn","groupedSelect","options","self","method","each","setCurrentText","next","updateDropdown","enabled","setEnabled","$select","remove","css","document","off","console","log","$selected","find","text","currentContext","getCurrentContext","settings","autoComplete","html","afterUpdate","val","removeClass","addClass","$input_wrapper","jqDropDownGroup","parents","isShowing","dropdownContainerQtip","useModalMode","dropdownModal","updateQtipModalMode","fixModalHeadHeight","dropdownContainer","fixQtipAdjust","fixAutocompleteInside","getDropdownSelector","context","dropdownSelector","setVisibleDropdownSelector","visible","Visible","grep","item","items","sub_item","is","$container","$contentHead","$stickyWrapper","parent","wrapper","wrapAll","set","$form","currLeft","left","newWidth","outerWidth","dropdownSameWidth","qtipContainerId","attr","_id","i","elem","$elem","$widget","autocomplete","my","at","collision","setTimeout","focus","fixQtipScrollTop","callback","cb_fixQtipScrollTop","holder","target","windowHeight","maxHeightOfDropdown","marginTop","parseInt","maxOffset","halfOffset","extend","dropdownGroup","dropdownPositionContainer","dropdownClasses","beforeOpen","sender","nm","placeholder","ignoreTimers","jqDropDownSelector","substring","push","hide","displayId","after","on","event","create_grouped_select","not","toggleClass","classes","$header","posMy","posAt","pLeft","$addon","resize","positionContainer","dpc","toLowerCase","startsWith","show","ready","solo","overwrite","content","position","container","adjust","x","y","effect","pos","elements","window_top","duration","queue","complete","style","def","events","isNumeric","render","destroy","bindQtip","OnShow","handleOnShowDropdownSelector","timers","$input","stopPropagation","preventDefault","ko","bindingHandlers","findSelectedItem","dataSource","binding","selectedValue","unwrap","utils","unwrapObservable","source","valueProp","optionsValue","arrayFirst","value","buildDataSource","labelProp","arrayFilter","arrayMap","result","label","toString","findAutocompleteItem","autocompleteValue","textProp","optionsText","init","element","valueAccessor","allBindingsAccessor","viewModel","bindingContext","groupedSelectOptions","subscriptions","domNodeDisposal","addDisposeCallback","disposingElement","subscription","dispose","isObservable","autoCompleteOptions","displayElement","modelValue","writeValueToModel","valueToWrite","isWriteableObservable","labelToWrite","handleValueChange","ui","matchingItem","displayText","change","select","renderMenu","ul","mappedSource","dependentObservable","subscribe","newValue","binding_groupedSelectEnabled","groupedSelectEnabled","undefined","set_enable","update","originalIndex","selectedIndex","triggerEvent","currentModelValue","selectedItem","menuOptions","autoCompleteMenuOptions","type","id","name","bindTo","autoCompleteSearchTerm","applyBindings","autoCompleteQtip","handleValueChange_postprocessing","$qtipContainer","qtipId","$qtip","autoCompleteValueChange","modelSelectedItem","autoCompleteSelectedItem","changedValue","autoCompleteSource","request","response","menu","_setOptions","slice","Array","prototype","splice","defaults","topSpacing","bottomSpacing","className","wrapperClassName","center","getWidthFrom","widthFromWrapper","responsiveWidth","fixWrapperHeight","zIndex","$window","$document","sticked","getSticked","stickyElement","s","get","scroller","documentHeight","dwh","extra","l","etse","stickyWrapper","currentTop","trigger","newTop","padding","innerWidth","width","stickyWrapperContainer","resizer","methods","o","stickyId","wrapperId","marginLeft","marginRight","setWrapperHeight","setupChangeListeners","MutationObserver","mutations","addedNodes","removedNodes","observe","subtree","childList","addEventListener","attachEvent","unstick","that","unstickyElement","removeIdx","call","sticky","error"],"sourceRoot":""}