{"version":3,"file":"Lp_General.webpacked.js","mappings":";;;;;;;;;;;AAAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,IAA0C;AAClD;AACA,QAAQ,iCAAO,EAAE,oCAAE,OAAO;AAAA;AAAA;AAAA,kGAAC;AAC3B,MAAM,KAAK,EAQR;AACH,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA,qHAAqH;;AAErH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA,2CAA2C;;AAE3C;;AAEA;AACA;;AAEA;;AAEA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA,oDAAoD;;AAEpD;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,UAAU;;AAEV;AACA;;AAEA,UAAU;;AAEV;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;;AAEA,sCAAsC;;AAEtC;AACA;AACA,gDAAgD,uBAAuB;AACvE,cAAc;AACd;AACA,8CAA8C,QAAQ,UAAU,WAAW,SAAS,aAAa,aAAa;AAC9G;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;;AAErC;AACA,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc;;AAEd;AACA,+DAA+D,kBAAkB,IAAI;AACrF;;AAEA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;;AAEA,kBAAkB;;AAElB;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,iCAAiC,sBAAsB;AACvD,yCAAyC,0BAA0B;AACnE,oCAAoC,sBAAsB;AAC1D;;AAEA,CAAC;;;;;;;;;;;;;;;ACtZD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,6CAA6C;AAC7C;AACA,CAAC;;;;;;;;;;;ACpFD,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;;;;;;;;;;;;;;;AC5QO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;;;;;;;;;;;;;;;ACXM;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5Ea;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,MAAM;AACN,8IAA8I;AAC9I;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,kBAAkB,sDAAsD;AACxE;AACA;AACA,EAAE;AACF;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ,4IAA4I;AAC5I;AACA;AACA,IAAI;AACJ;AACA,EAAE;AACF;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA,IAAI;AACJ;AACA,EAAE;AACF,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ,yEAAyE,oBAAoB,IAAI,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,6BAA6B,IAAI;AACtG;AACA;AACA;AACA,EAAE;AACF;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9TA,CAAc;AACd;AACA;AACA,uBAAuB,KAAK,GAAG,IAAI;AACnC;AACA;AACA;AACA,gBAAgB,KAAK,GAAG,IAAI,YAAY,4CAA4C;AACpF;;;;;;;;;;;ACRa;AACb;AACA,yCAAyC,QAAQ;AACjD;AACA,UAAU,QAAQ;AAClB,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA,cAAc,SAAS;AACvB;AACA,UAAU,QAAQ;AAClB;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,QAAQ;AAClB;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;;;;;;;;;;;;;;;;AC7BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACvB0C;AACM;AACQ;AACjD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAiB;AACnD;AACA,yGAAyG,iCAAiC;AAC1I;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,iIAAiI,oBAAoB;AACrJ;AACA;AACA;AACA,oCAAoC,mDAAU;AAC9C;AACA;AACA;AACA;AACA;AACA,wCAAwC,mDAAU;AAClD;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrFA,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB;AACnB;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;;;;;;;;;;;;;;;ACrD0C;AACnC;AACP;AACA;AACA;AACA;AACA;AACA,mDAAmD,UAAU;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAU;AAClB;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAU;AAC1B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/EA,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtb+C;AACb;AAC3B;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2CAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,uBAAuB,wDAAgB;AACvC;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;ACtEgD;AACD;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,wDAAgB;AAC7E;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAa;AACrB;AACA;AACA,uBAAuB,wDAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,MAAM;AACnE,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACzHO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW,EAAE,EAAE;AACxD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB,uBAAuB,oBAAoB,kCAAkC,cAAc,wBAAwB,wBAAwB;AAClN;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC;AACzC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACO;AACP;AACO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC5P4D;AACZ;AACzC;AACP;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAmB;AACzD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAmB;AACzD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yDAAa;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACtGuC;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uBAAuB;AACtD,mCAAmC,uBAAuB;AAC1D,8EAA8E,cAAc,oEAAoE,sBAAsB;AACtL,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4CAAe,gBAAgB,sBAAsB;AACrE,mCAAmC,uBAAuB,UAAU,uBAAuB;AAC3F;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7EO;AACP;AACA;AACA,+DAA+D,IAAI,cAAc,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;AACF;;;;;;;;;;;;;;;;;AChDkD;AACF;AACzC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA,mCAAmC,+DAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAa;AACzC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,gDAAgD,UAAU;AAC1D,mDAAmD,MAAM,UAAU,aAAa;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;;;;;AC5HD,CAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,KAAK,kDAAkD;AACvD;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,KAAK,kDAAkD;AACvD;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF,CAAC;AACD;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,kBAAkB,0EAA0E;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;;ACvIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK,IAAI;AACnC;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;AC5BO;AACP;AACA;AACA,2EAA2E,MAAM,gBAAgB,KAAK;AACtG;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;AACA,yBAAyB,GAAG,uBAAuB,sDAAsD,EAAE,0CAA0C;AACrJ,qBAAqB,KAAK;AAC1B,mBAAmB,KAAK;AACxB;AACA;AACA;AACA;AACA,kDAAkD,OAAO,wBAAwB,GAAG,IAAI,+BAA+B,UAAU,SAAS,8BAA8B,aAAa;AACrL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oBAAoB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,qBAAqB;AACrE;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA,sBAAsB,eAAe,EAAE,EAAE;AACzC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9FA;AACa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;UCfA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;UENA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA","sources":["webpack:///./css/Components/Collapsable.css?1d97","webpack:///./css/Components/ListViewWithFlexbox.css?f45f","webpack:///./css/PleaseWait.css?1081","webpack:///./css/checkbox.css?82a3","webpack:///./css/dialog.css?0d5d","webpack:///./css/foca.css?af28","webpack:///./css/landingpage.css?9407","webpack:///./css/overlay.css?e494","webpack:///./css/sidebar.css?4ba3","webpack:///./css/site.css?01fc","webpack:///./css/swal2.css?d27f","webpack:///./node_modules/pdfobject/pdfobject.js","webpack:///./ts/ErrorReporter.ts","webpack:///./ts/Validation/ConditionalRequiredAttribute.validation.js","webpack:///./ts/Validation/validators.js","webpack:///./ts/animation.ts","webpack:///./ts/base64.ts","webpack:///./ts/browserDetector.ts","webpack:///./ts/controlExtensions.js","webpack:///./ts/cookie.js","webpack:///./ts/dialog.ts","webpack:///./ts/fileSizeValidator.ts","webpack:///./ts/fileUpload.ts","webpack:///./ts/form.js","webpack:///./ts/formUtils.ts","webpack:///./ts/general.js","webpack:///./ts/generalTS.ts","webpack:///./ts/javascriptSearch.ts","webpack:///./ts/notificationManager.ts","webpack:///./ts/outsidePublic.ts","webpack:///./ts/overlay.ts","webpack:///./ts/pleaseWait.ts","webpack:///./ts/prices.js","webpack:///./ts/selectize.ts","webpack:///./ts/sidebar.js","webpack:///./ts/stringExtensions.ts","webpack:///./ts/swalEx.ts","webpack:///./ts/wizard.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/before-startup","webpack:///webpack/startup","webpack:///webpack/after-startup"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","/**\n * PDFObject v2.3.1\n * https://github.com/pipwerks/PDFObject\n * @license\n * Copyright (c) 2008-2025 Philip Hutchison\n * MIT-style license: http://pipwerks.mit-license.org/\n * UMD module pattern from https://github.com/umdjs/umd/blob/master/templates/returnExports.js\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.PDFObject = factory();\n }\n}(this, function () {\n\n \"use strict\";\n\n //PDFObject is designed for client-side (browsers), not server-side (node)\n //Will choke on undefined navigator and window vars when run on server\n //Return boolean false and exit function when running server-side\n\n if(typeof window === \"undefined\" || window.navigator === undefined || window.navigator.userAgent === undefined){ return false; }\n\n let pdfobjectversion = \"2.3.1\";\n let win = window;\n let nav = win.navigator;\n let ua = nav.userAgent;\n let suppressConsole = false;\n\n //Fallback validation when navigator.pdfViewerEnabled is not supported\n let isModernBrowser = function (){\n\n /*\n userAgent sniffing is not the ideal path, but most browsers revoked the ability to check navigator.mimeTypes\n for security purposes. As of 2023, browsers have begun implementing navigator.pdfViewerEnabled, but older versions\n do not have navigator.pdfViewerEnabled or the ability to check navigator.mimeTypes. We're left with basic browser\n sniffing and assumptions of PDF support based on browser vendor.\n */\n\n //Chromium has provided native PDF support since 2011.\n //Most modern browsers use Chromium under the hood: Google Chrome, Microsoft Edge, Opera, Brave, Vivaldi, Arc, and more.\n //Chromium uses the PDFium rendering engine, which is based on Foxit's PDF rendering engine.\n //Note that MS Edge opts to use a different PDF rendering engine. As of 2024, Edge uses a version of Adobe's Reader\n let isChromium = (win.chrome !== undefined);\n\n //Safari on macOS has provided native PDF support since 2009.\n //This code snippet also detects the DuckDuckGo browser, which uses Safari/Webkit under the hood.\n let isSafari = (win.safari !== undefined || (nav.vendor !== undefined && /Apple/.test(nav.vendor) && /Safari/.test(ua)));\n\n //Firefox has provided PDF support via PDFJS since 2013.\n let isFirefox = (win.Mozilla !== undefined || /irefox/.test(ua));\n\n return isChromium || isSafari || isFirefox;\n\n };\n\n /*\n Special handling for Internet Explorer 11.\n Check for ActiveX support, then whether \"AcroPDF.PDF\" or \"PDF.PdfCtrl\" are valid.\n IE11 uses ActiveX for Adobe Reader and other PDF plugins, but window.ActiveXObject will evaluate to false.\n (\"ActiveXObject\" in window) evaluates to true.\n MS Edge does not support ActiveX so this test will evaluate false for MS Edge.\n */\n let validateAX = function (type){\n var ax = null;\n try {\n ax = new ActiveXObject(type);\n } catch (e) {\n //ensure ax remains null when ActiveXObject attempt fails\n ax = null;\n }\n return !!ax; //convert resulting object to boolean\n };\n\n let hasActiveXPDFPlugin = function (){ return (\"ActiveXObject\" in win) && (validateAX(\"AcroPDF.PDF\") || validateAX(\"PDF.PdfCtrl\")) };\n\n let checkSupport = function (){\n\n //Safari on iPadOS doesn't report as 'mobile' when requesting desktop site, yet still fails to embed PDFs\n let isSafariIOSDesktopMode = (nav.platform !== undefined && nav.platform === \"MacIntel\" && nav.maxTouchPoints !== undefined && nav.maxTouchPoints > 1);\n\n let isMobileDevice = (isSafariIOSDesktopMode || /Mobi|Tablet|Android|iPad|iPhone/.test(ua));\n\n //As of June 2023, no mobile browsers properly support inline PDFs. If mobile, just say no.\n if(isMobileDevice){ return false; }\n\n //Modern browsers began supporting navigator.pdfViewerEnabled in late 2022 and early 2023.\n let supportsPDFVE = (typeof nav.pdfViewerEnabled === \"boolean\");\n\n //If browser supports nav.pdfViewerEnabled and is explicitly saying PDFs are NOT supported (e.g. PDFJS disabled by user in Firefox), respect it.\n if(supportsPDFVE && !nav.pdfViewerEnabled){ return false; }\n\n return (supportsPDFVE && nav.pdfViewerEnabled) || isModernBrowser() || hasActiveXPDFPlugin();\n\n };\n\n //Determines whether PDF support is available\n let supportsPDFs = checkSupport();\n\n //Create a fragment identifier for using PDF Open parameters when embedding PDF\n let buildURLFragmentString = function(pdfParams){\n\n let string = \"\";\n let prop;\n let paramArray = [];\n let fdf = \"\";\n\n //The comment, viewrect, and highlight parameters require page to be set first.\n\n //Check to ensure page is used if comment, viewrect, or highlight are specified\n if(pdfParams.comment || pdfParams.viewrect || pdfParams.highlight){\n\n if(!pdfParams.page){\n\n //If page is not set, use the first page\n pdfParams.page = 1;\n\n //Inform user that page needs to be set properly\n embedError(\"The comment, viewrect, and highlight parameters require a page parameter, but none was specified. Defaulting to page 1.\");\n\n }\n\n }\n\n //Let's go ahead and ensure page is always the first parameter.\n if(pdfParams.page){\n paramArray.push(\"page=\" + encodeURIComponent(pdfParams.page));\n delete pdfParams.page;\n }\n\n //FDF needs to be the last parameter in the string\n if(pdfParams.fdf){\n fdf = pdfParams.fdf;\n delete pdfParams.fdf;\n }\n\n //Add all other parameters, as needed\n if(pdfParams){\n\n for (prop in pdfParams) {\n if (pdfParams.hasOwnProperty(prop)) {\n paramArray.push(encodeURIComponent(prop) + \"=\" + encodeURIComponent(pdfParams[prop]));\n }\n }\n\n //Add fdf as the last parameter, if needed\n if(fdf){\n paramArray.push(\"fdf=\" + encodeURIComponent(fdf));\n }\n\n //Join all parameters in the array into a string\n string = paramArray.join(\"&\");\n\n //The string will be empty if no PDF Parameters were provided\n //Only prepend the hash if the string is not empty\n if(string){\n string = \"#\" + string;\n }\n\n }\n\n return string;\n\n };\n\n let embedError = function (msg){\n if(!suppressConsole){\n console.log(\"[PDFObject]\", msg);\n }\n return false;\n };\n\n let emptyNodeContents = function (node){\n while(node.firstChild){\n node.removeChild(node.firstChild);\n }\n };\n\n let getTargetElement = function (targetSelector){\n\n //Default to body for full-browser PDF\n let targetNode = document.body;\n\n //If a targetSelector is specified, check to see whether\n //it's passing a selector, jQuery object, or an HTML element\n\n if(typeof targetSelector === \"string\"){\n\n //Is CSS selector\n targetNode = document.querySelector(targetSelector);\n\n } else if (win.jQuery !== undefined && targetSelector instanceof jQuery && targetSelector.length) {\n\n //Is jQuery element. Extract HTML node\n targetNode = targetSelector.get(0);\n\n } else if (targetSelector.nodeType !== undefined && targetSelector.nodeType === 1){\n\n //Is HTML element\n targetNode = targetSelector;\n\n }\n\n return targetNode;\n\n };\n\n let convertBase64ToDownloadableLink = function (b64, filename, targetNode, fallbackHTML) {\n\n //IE-11 safe version. More verbose than modern fetch()\n if (window.Blob && window.URL && window.URL.createObjectURL) {\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', b64, true);\n xhr.responseType = 'blob';\n xhr.onload = function() {\n\n if (xhr.status === 200) {\n\n var blob = xhr.response;\n var link = document.createElement('a');\n link.innerText = \"Download PDF\";\n link.href = URL.createObjectURL(blob);\n link.setAttribute('download', filename);\n targetNode.innerHTML = fallbackHTML.replace(/\\[pdflink\\]/g, link.outerHTML);\n\n }\n\n };\n\n xhr.send();\n\n }\n\n };\n\n\n let generatePDFObjectMarkup = function (embedType, targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL){\n\n //Ensure target element is empty first\n emptyNodeContents(targetNode);\n\n let source = url;\n\n if(embedType === \"pdfjs\"){\n //If PDFJS_URL already contains a ?, assume querystring is in place, and use an ampersand to append PDFJS's file parameter\n let connector = (PDFJS_URL.indexOf(\"?\") !== -1) ? \"&\" : \"?\";\n source = PDFJS_URL + connector + \"file=\" + encodeURIComponent(url) + pdfOpenFragment;\n } else {\n source += pdfOpenFragment;\n }\n\n let el = document.createElement(\"iframe\");\n el.className = \"pdfobject\";\n el.type = \"application/pdf\";\n el.title = title;\n el.src = source;\n el.allow = \"fullscreen\";\n el.frameborder = \"0\";\n if(id){ el.id = id; }\n\n if(!omitInlineStyles){\n\n let style = \"border: none;\";\n\n if(targetNode !== document.body){\n //assign width and height to target node\n style += \"width: \" + width + \"; height: \" + height + \";\";\n } else {\n //this is a full-page embed, use CSS to fill the viewport\n style += \"position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; height: 100%;\";\n }\n\n el.style.cssText = style;\n\n }\n\n //Allow developer to insert custom attribute on iframe element, but ensure it does not conflict with attributes used by PDFObject\n let reservedTokens = [\"className\", \"type\", \"title\", \"src\", \"style\", \"id\", \"allow\", \"frameborder\"];\n if(customAttribute && customAttribute.key && reservedTokens.indexOf(customAttribute.key) === -1){\n el.setAttribute(customAttribute.key, (typeof customAttribute.value !== \"undefined\") ? customAttribute.value : \"\");\n }\n\n targetNode.classList.add(\"pdfobject-container\");\n targetNode.appendChild(el);\n\n return targetNode.getElementsByTagName(\"iframe\")[0];\n\n };\n\n let embed = function(url, targetSelector, options){\n\n //If targetSelector is not defined, convert to boolean\n let selector = targetSelector || false;\n\n //Ensure options object is not undefined -- enables easier error checking below\n let opt = options || {};\n\n //Get passed options, or set reasonable defaults\n suppressConsole = (typeof opt.suppressConsole === \"boolean\") ? opt.suppressConsole : false;\n let id = (typeof opt.id === \"string\") ? opt.id : \"\";\n let page = opt.page || false;\n let pdfOpenParams = opt.pdfOpenParams || {};\n let fallbackLink = (typeof opt.fallbackLink === \"string\" || typeof opt.fallbackLink === \"boolean\") ? opt.fallbackLink : true;\n let width = opt.width || \"100%\";\n let height = opt.height || \"100%\";\n let title = opt.title || \"Embedded PDF\";\n let forcePDFJS = (typeof opt.forcePDFJS === \"boolean\") ? opt.forcePDFJS : false;\n let omitInlineStyles = (typeof opt.omitInlineStyles === \"boolean\") ? opt.omitInlineStyles : false;\n let PDFJS_URL = opt.PDFJS_URL || false;\n let targetNode = getTargetElement(selector);\n let pdfOpenFragment = \"\";\n let customAttribute = opt.customAttribute || {};\n let fallbackFileNameForBase64 = opt.fallbackFileNameForBase64;\n let fallbackHTML_default = \"

This browser does not support inline PDFs. Please download the PDF to view it: [pdflink]

\";\n\n //Ensure URL is available. If not, exit now.\n if(typeof url !== \"string\"){ return embedError(\"URL is not valid\"); }\n\n //If target element is specified but is not valid, exit without doing anything\n if(!targetNode){ return embedError(\"Target element cannot be determined\"); }\n\n //page option overrides pdfOpenParams, if found\n if(page){ pdfOpenParams.page = page; }\n\n //Stringify optional Adobe params for opening document (as fragment identifier)\n pdfOpenFragment = buildURLFragmentString(pdfOpenParams);\n\n\n // --== Do the dance: Embed attempt #1 ==--\n\n //If the forcePDFJS option is invoked, skip everything else and embed as directed\n if(forcePDFJS && PDFJS_URL){\n return generatePDFObjectMarkup(\"pdfjs\", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL);\n }\n\n // --== Embed attempt #2 ==--\n\n //Embed PDF if support is detected, or if this is a relatively modern browser\n if(supportsPDFs){\n return generatePDFObjectMarkup(\"iframe\", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute);\n }\n\n // --== Embed attempt #3 ==--\n\n //If everything else has failed and a PDFJS fallback is provided, try to use it\n if(PDFJS_URL){\n return generatePDFObjectMarkup(\"pdfjs\", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL);\n }\n\n // --== PDF embed not supported! Use fallback ==--\n\n //Display the fallback link if available\n if(fallbackLink){\n\n //If a custom fallback has been provided, handle it now\n if(typeof fallbackLink === \"string\"){\n\n //Ensure [url] is set in custom fallback\n targetNode.innerHTML = fallbackLink.replace(/\\[url\\]/g, url);\n\n } else {\n\n //If the PDF is a base64 string, convert it to a downloadable link\n const match = url.match(/data:application\\/pdf;(?:.*filename=([^;]+);)?.*base64,/i);\n if(match){\n\n fallbackFileNameForBase64 =\n fallbackFileNameForBase64 // from options\n || match[1] // from data URI metadata\n || \"file.pdf\"; // default\n\n //Asynchronously append the link to the targetNode\n convertBase64ToDownloadableLink(url, fallbackFileNameForBase64, targetNode, fallbackHTML_default);\n\n } else {\n\n //Use default fallback link\n let link = \"Download PDF\";\n targetNode.innerHTML = fallbackHTML_default.replace(/\\[pdflink\\]/g, link);\n\n }\n\n }\n\n }\n\n return embedError(\"This browser does not support embedded PDFs\");\n\n };\n\n return {\n embed: function (a,b,c){ return embed(a,b,c); },\n pdfobjectversion: (function () { return pdfobjectversion; })(),\n supportsPDFs: (function (){ return supportsPDFs; })()\n };\n\n}));","class JavaScriptErrorDetails {\n constructor() {\n this.LocationHref = null;\n this.AjaxUrl = null;\n this.AjaxData = null;\n this.ReadyState = null;\n this.StatusText = null;\n this.Status = null;\n this.Reason = null;\n this.Message = null;\n this.Filename = null;\n this.Lineno = null;\n this.Colno = null;\n this.Error = null;\n this.Navigator = null;\n }\n}\nclass NavigatorDetails {\n constructor() {\n this.AppCodename = null;\n this.AppName = null;\n this.AppVersion = null;\n this.Platform = null;\n this.Product = null;\n this.UserAgent = null;\n this.Brands = null;\n }\n}\nclass MyError {\n constructor() {\n this.Name = null;\n this.Message = null;\n this.Code = null;\n this.Stack = null;\n }\n}\nclass BrandDetails {\n constructor() {\n this.Brand = null;\n this.Version = null;\n }\n}\nexport class ErrorReporter {\n static ReportAjaxError(ajaxUrl, ajaxData, res) {\n try {\n if (!ajaxData)\n ajaxData = 'No data';\n else {\n try {\n ajaxData = JSON.stringify(ajaxData);\n }\n catch (ex) {\n ajaxData = 'Could not stringify data';\n }\n }\n let errorDetails = {\n LocationHref: window.location.href,\n AjaxUrl: ajaxUrl,\n AjaxData: ajaxData,\n ReadyState: res && res.readyState,\n Status: res && res.status,\n StatusText: res && res.statusText,\n Navigator: ErrorReporter.GetNavigatorData()\n };\n console.error(\"Ajax error: \", errorDetails);\n $.ajax({\n url: ErrorReporter.Url,\n method: \"POST\",\n contentType: 'application/json',\n data: JSON.stringify(errorDetails),\n dataType: \"json\"\n });\n }\n catch (ex) {\n console.error(\"Error reporting Ajax error\", ex);\n }\n }\n static ReportError(statusText) {\n try {\n let errorDetails = {\n LocationHref: window.location.href,\n StatusText: statusText,\n Navigator: ErrorReporter.GetNavigatorData()\n };\n console.error(\"Error: \", errorDetails);\n $.ajax({\n url: ErrorReporter.Url,\n method: \"POST\",\n contentType: 'application/json',\n data: JSON.stringify(errorDetails),\n dataType: \"json\"\n });\n }\n catch (ex) {\n console.error(\"Error reporting error\", ex);\n }\n }\n static ReportErrorWithReadyData(statusText, errorDetails, shallLogErrorInConsole) {\n try {\n errorDetails.StatusText = statusText;\n errorDetails.Navigator = ErrorReporter.GetNavigatorData();\n if (shallLogErrorInConsole)\n console.error(\"Error with ready data: \", errorDetails);\n $.ajax({\n url: ErrorReporter.Url,\n method: \"POST\",\n contentType: 'application/json',\n data: JSON.stringify(errorDetails),\n dataType: \"json\"\n });\n }\n catch (ex) {\n console.error(\"Error reporting error\", ex);\n }\n }\n static GetNavigatorData() {\n try {\n let brandsFromBrowser = window.navigator?.userAgentData?.brands;\n let brands = brandsFromBrowser\n ? brandsFromBrowser.map((b) => ({\n brand: b.brand,\n version: b.version\n }))\n : null;\n let navigatorDetails = {\n AppCodename: window.navigator && window.navigator.appCodeName,\n AppName: window.navigator && window.navigator.appName,\n AppVersion: window.navigator && window.navigator.appVersion,\n Platform: window.navigator && window.navigator.platform,\n Product: window.navigator && window.navigator.product,\n UserAgent: window.navigator && window.navigator.userAgent,\n Brands: brands\n };\n return navigatorDetails;\n }\n catch (ex) {\n console.error(\"Error getting navigator data\", ex);\n return null;\n }\n }\n static RegisterGlobalErrorHandlers() {\n window.addEventListener('error', function (event) {\n let errorDetails = {\n Message: event.message,\n Filename: event.filename,\n Lineno: event.lineno,\n Colno: event.colno,\n Error: {\n Name: event.error?.name,\n Message: event.error?.message,\n Code: event.error?.code,\n Stack: event.error?.stack\n }\n };\n ErrorReporter.ReportErrorWithReadyData(\"Unhandled error from listener\", errorDetails, false);\n });\n window.addEventListener('unhandledrejection', function (event) {\n let errorDetails = {\n Reason: event.reason,\n };\n ErrorReporter.ReportErrorWithReadyData(\"Unhandled rejection\", errorDetails, false);\n });\n }\n}\nwindow.ErrorReporter = ErrorReporter;\n","$.validator.addMethod('conditionalrequired', function (value, element, parameters) {\r\n var andExpressions = JSON.parse(parameters['expression']);\r\n var result = true;\r\n\r\n andExpressions.forEach(function (andExpression) {\r\n var _res = false;\r\n andExpression.forEach(function (orExpression) {\r\n var actualValue = _cast(_getElementValue(orExpression.Property), typeof orExpression.Value);\r\n if (_compare(actualValue, orExpression.Value, orExpression.Operator.Text)) {\r\n _res = true;\r\n return;\r\n }\r\n });\r\n if (!_res) {\r\n result = false;\r\n return;\r\n }\r\n });\r\n\r\n function _cast(val, type) {\r\n if (!val)\r\n return null;\r\n\r\n switch (type) {\r\n case 'number':\r\n return +val;\r\n case 'boolean':\r\n return (val === 'true' || val === 'True');\r\n case 'string':\r\n default:\r\n return val;\r\n }\r\n }\r\n\r\n function _getElementValue(name) {\r\n var els = document.getElementsByName(name);\r\n var el1 = els[0];\r\n\r\n if (!els.length)\r\n return null;\r\n if (els.length > 1) {\r\n if (el1.tagName.toLowerCase() === 'input' && (el1.type === 'radio' || el1.type === 'checkbox'))\r\n for (var i = 0; i < els.length; i++) {\r\n var el = els[i];\r\n if (el.checked)\r\n return el.value;\r\n }\r\n } else {\r\n if (el1.tagName.toLowerCase() === 'input' && el1.type === 'checkbox')\r\n return (el1.checked ? el1.value : null);\r\n else\r\n return el1.value;\r\n }\r\n return null;\r\n }\r\n\r\n function _compare(actualValue, compareValue, operator) {\r\n switch (operator) {\r\n case '==':\r\n return actualValue === compareValue;\r\n case '!=':\r\n return actualValue !== compareValue;\r\n case '>':\r\n return actualValue > compareValue;\r\n case '<':\r\n return actualValue < compareValue;\r\n case '>=':\r\n return actualValue >= compareValue;\r\n case '<=':\r\n return actualValue <= compareValue;\r\n default:\r\n throw 'wrong operator';\r\n }\r\n }\r\n\r\n if (result)\r\n return $.validator.methods.required.call(this, value, element, parameters);\r\n\r\n return true;\r\n});\r\n\r\n$.validator.unobtrusive.adapters.add('conditionalrequired', ['expression'], function (options) {\r\n options.rules['conditionalrequired'] = { expression: options.params['expression'] };\r\n options.messages['conditionalrequired'] = options.message;\r\n});","\"use strict\";\r\n\r\n/* Definition for the durationAsStringFormatting validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t$.validator.unobtrusive.adapters.add('durationAsStringFormatting', ['isTimeOfDay'], function (options) {\r\n\t\toptions.rules['durationAsStringFormatting'] = {\r\n\t\t\t'isTimeOfDay': options.params['isTimeOfDay']\r\n\t\t};\r\n\t\toptions.messages['durationAsStringFormatting'] = options.message;\r\n\t});\r\n\r\n\t$.validator.addMethod('durationAsStringFormatting', function (value, element, params) {\r\n\t\tvalue = value.replace(/\\s$/, '');\r\n\r\n\t\tif (isNullOrWhiteSpace(value))\r\n\t\t\treturn true;\r\n\t\tif (params['isTimeOfDay'] === 'False' && $(element).is(\":focus\")) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif (params['isTimeOfDay'] === 'True' && value.length < 4 && $(element).is(\":focus\")) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar valueInMinutes = timeDurationToMinutes(value, params['isTimeOfDay'] === 'False');\r\n\r\n\t\tif (isNaN(valueInMinutes))\r\n\t\t\treturn true;\r\n\r\n\t\t$(element).val(valueInMinutes.toDurationString(true, false));\r\n\r\n\t\treturn true;\r\n\t});\r\n}\r\n\r\n/* Definition for the durationAsStringGreaterThan validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t$.validator.unobtrusive.adapters.add('durationAsStringGreaterThan', ['minValueInMinutes', 'allowEqualValues'], function (options) {\r\n\t\toptions.rules['durationAsStringGreaterThan'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'minValueInMinutes': options.params['minValueInMinutes'],\r\n\t\t\t'allowEqualValues': options.params['allowEqualValues']\r\n\t\t};\r\n\t\toptions.messages['durationAsStringGreaterThan'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('durationAsStringGreaterThan', function (value, element, params) {\r\n\t\tvar minValueInMinutes = params['minValueInMinutes'];\r\n\t\tif (isNullOrWhiteSpace(value) || isNullOrWhiteSpace(minValueInMinutes))\r\n\t\t\treturn true;\r\n\r\n\t\tvar valueInMinutes = timeDurationToMinutes(value, true);\r\n\t\tvar minValueInMinutesInt = parseInt(minValueInMinutes);\r\n\t\tif (isNaN(valueInMinutes) || isNaN(minValueInMinutesInt))\r\n\t\t\treturn true;\r\n\t\treturn valueInMinutes > minValueInMinutes || (valueInMinutes === minValueInMinutes && params[\"allowEqualValues\"] === 'True');\r\n\t});\r\n}\r\n\r\n/* Definition for the durationAsStringGreaterThanOther validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('durationAsStringGreaterThanOther', ['otherPropertyName', 'allowEqualValues', 'evaluateWhenThisValueNull'], function (options) {\r\n\t\toptions.rules['durationAsStringGreaterThanOther'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'allowEqualValues': options.params['allowEqualValues'],\r\n\t\t\t'evaluateWhenThisValueNull': options.params['evaluateWhenThisValueNull']\r\n\t\t};\r\n\t\toptions.messages['durationAsStringGreaterThanOther'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('durationAsStringGreaterThanOther', function (value, element, params) {\r\n\t\tvar otherValue = $('#' + params[\"otherPropertyName\"]).val();\r\n\t\tif (params[\"evaluateWhenThisValueNull\"] === 'True' && isNullOrWhiteSpace(value)) {\r\n\t\t\tvalue = \"0:00\";\r\n\t\t}\r\n\t\tif (isNullOrWhiteSpace(value) || isNullOrWhiteSpace(otherValue))\r\n\t\t\treturn true;\r\n\r\n\t\tvar valueInMinutes = timeDurationToMinutes(value, true);\r\n\t\tvar otherValueInMinutes = timeDurationToMinutes(otherValue, true);\r\n\t\tif (isNaN(valueInMinutes) || isNaN(otherValueInMinutes))\r\n\t\t\treturn true;\r\n\t\treturn valueInMinutes > otherValueInMinutes || (valueInMinutes === otherValueInMinutes && params[\"allowEqualValues\"] === 'True');\r\n\t});\r\n}\r\n\r\n/* Definition for the DurationAsStringSmallerThanOtherAttribute validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('durationAsStringSmallerThanOther', ['otherPropertyName', 'allowEqualValues'], function (options) {\r\n\t\toptions.rules['durationAsStringSmallerThanOther'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'allowEqualValues': options.params['allowEqualValues']\r\n\t\t};\r\n\t\toptions.messages['durationAsStringSmallerThanOther'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('durationAsStringSmallerThanOther', function (value, element, params) {\r\n\t\tvar otherValue = $('#' + params[\"otherPropertyName\"]).val();\r\n\r\n\t\tif (isNullOrWhiteSpace(otherValue))\r\n\t\t\totherValue = null;\r\n\t\tif (isNullOrWhiteSpace(value))\r\n\t\t\tvalue = null;\r\n\t\tvar valueInMinutes = timeDurationToMinutes(value, true);\r\n\t\tvar otherValueInMinutes = timeDurationToMinutes(otherValue, true);\r\n\t\tif (isNaN(valueInMinutes) || isNaN(otherValueInMinutes))\r\n\t\t\treturn true;\r\n\r\n\t\treturn valueInMinutes < otherValueInMinutes || (valueInMinutes === otherValueInMinutes && params[\"allowEqualValues\"] === 'True');\r\n\r\n\t});\r\n}\r\n\r\n/* Definition for the ComputeDurationForOtherFromTotalThisAndMoreAttribute validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('computeDurationForOtherFromTotalThisAndMore', ['otherPropertyName', 'totalPropertyName', 'propertyNames'], function (options) {\r\n\t\toptions.rules['computeDurationForOtherFromTotalThisAndMore'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'totalPropertyName': options.params['totalPropertyName'],\r\n\t\t\t'propertyNames': options.params['propertyNames']\r\n\t\t};\r\n\t\toptions.messages['computeDurationForOtherFromTotalThisAndMore'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('computeDurationForOtherFromTotalThisAndMore', function (value, element, params) {\r\n\r\n\t\tvar propertyNamesArray = JSON.parse(params[\"propertyNames\"]);\r\n\t\tvar allNull = true;\r\n\t\tfor (var k = 0; k < propertyNamesArray.length; k++) {\r\n\t\t\tif (!isNullOrWhiteSpace($('#' + propertyNamesArray[i]).val())) {\r\n\t\t\t\tallNull = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar totalValue = $('#' + params[\"totalPropertyName\"]).val();\r\n\t\tif (isNullOrWhiteSpace(value)) {\r\n\t\t\tif (allNull && isNullOrWhiteSpace(totalValue) ) {\r\n\t\t\t\t$('#' + params[\"otherPropertyName\"]).val(null);\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNullOrWhiteSpace(totalValue))\r\n\t\t\ttotalValue = 0;\r\n\r\n\t\tif (totalValue === null)\r\n\t\t\ttotalValue = 0;\r\n\r\n\t\tvar totalValueInMinutes = timeDurationToMinutes(totalValue, true);\r\n\t\tvar thisValueInMinutes = timeDurationToMinutes(value, true);\r\n\r\n\t\tvar summedValueInMinutes = thisValueInMinutes;\r\n\t\tfor (var i = 0; i < propertyNamesArray.length; i++) {\r\n\t\t\tvar propertyValue = $('#' + propertyNamesArray[i]).val();\r\n\t\t\tif (isNullOrWhiteSpace(propertyValue))\r\n\t\t\t\tpropertyValue = null;\r\n\r\n\t\t\tvar propertyValueInMinutes = timeDurationToMinutes(propertyValue, true);\r\n\t\t\tif (isNaN(propertyValueInMinutes))\r\n\t\t\t\tpropertyValueInMinutes = 0;\r\n\r\n\t\t\tsummedValueInMinutes += propertyValueInMinutes;\r\n\t\t}\r\n\t\tif (totalValueInMinutes - summedValueInMinutes >= 0) {\r\n\t\t\t$('#' + params[\"otherPropertyName\"]).val((totalValueInMinutes - summedValueInMinutes).toDurationString(true, false));\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t});\r\n}\r\n/* Definition for the ComputeIntegerFromTotalAndOtherAsStringAttribute validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('computeIntegerForOtherFromTotalAndThis', ['otherPropertyName', 'totalPropertyName'], function (options) {\r\n\t\toptions.rules['computeIntegerForOtherFromTotalAndThis'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'totalPropertyName': options.params['totalPropertyName']\r\n\t\t};\r\n\t\toptions.messages['computeIntegerForOtherFromTotalAndThis'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('computeIntegerForOtherFromTotalAndThis', function (value, element, params) {\r\n\t\tvar totalValue = $('#' + params[\"totalPropertyName\"]).val();\r\n\r\n\t\tif (isNullOrWhiteSpace(value)) {\r\n\t\t\tif (isNullOrWhiteSpace(totalValue)) {\r\n\t\t\t\t$('#' + params[\"otherPropertyName\"]).val(null);\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNullOrWhiteSpace(value))\r\n\t\t\tvalue = 0;\r\n\r\n\t\tif (isNullOrWhiteSpace(totalValue))\r\n\t\t\ttotalValue = 0;\r\n\r\n\t\tvar totalValueInt = parseInt(totalValue);\r\n\t\tvar thisValueInt = parseInt(value);\r\n\t\tif (isNaN(totalValueInt) || isNaN(thisValueInt))\r\n\t\t\treturn true;\r\n\r\n\t\tif (totalValueInt - thisValueInt >= 0) {\r\n\t\t\t$('#' + params[\"otherPropertyName\"]).val(totalValueInt - thisValueInt);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t});\r\n}\r\n/* Definition for the IntegerSmallerThanOtherAttribute validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('integerSmallerThanOther', ['otherPropertyName', 'allowEqualValues'], function (options) {\r\n\t\toptions.rules['integerSmallerThanOther'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'allowEqualValues': options.params['allowEqualValues']\r\n\t\t};\r\n\t\toptions.messages['integerSmallerThanOther'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('integerSmallerThanOther', function (value, element, params) {\r\n\t\tvar otherValue = $('#' + params[\"otherPropertyName\"]).val();\r\n\t\tif (isNullOrWhiteSpace(otherValue))\r\n\t\t\totherValue = 0;\r\n\t\tif (isNullOrWhiteSpace(value))\r\n\t\t\tvalue = 0;\r\n\r\n\t\tvar valueInMinutes = parseInt(value);\r\n\t\tvar otherValueInMinutes = parseInt(otherValue);\r\n\t\tif (isNaN(valueInMinutes) || isNaN(otherValueInMinutes))\r\n\t\t\treturn true;\r\n\r\n\t\treturn valueInMinutes < otherValueInMinutes || (valueInMinutes === otherValueInMinutes && params[\"allowEqualValues\"] === 'True');\r\n\t});\r\n}\r\n\r\n\r\n/* Definition for the IntegerGreaterThanOtherAttribute validation rule */\r\nif ($.validator && $.validator.unobtrusive) {\r\n\t// Here parameter names can have a different case than when supplying them in GetClientValidationRules\r\n\t$.validator.unobtrusive.adapters.add('integerGreaterThanOther', ['otherPropertyName', 'allowEqualValues'], function (options) {\r\n\t\toptions.rules['integerGreaterThanOther'] = {\r\n\t\t\t// Reading the parameters uses the case as in the parameter list of this function; setting the names is the same as used afterwards in $.validator.addMethod\r\n\t\t\t'otherPropertyName': options.params['otherPropertyName'],\r\n\t\t\t'allowEqualValues': options.params['allowEqualValues']\r\n\t\t};\r\n\t\toptions.messages['integerGreaterThanOther'] = options.message;\r\n\t});\r\n\t$.validator.addMethod('integerGreaterThanOther', function (value, element, params) {\r\n\t\tvar otherValue = $('#' + params[\"otherPropertyName\"]).val();\r\n\t\tif (isNullOrWhiteSpace(otherValue))\r\n\t\t\totherValue = 0;\r\n\t\tif (isNullOrWhiteSpace(value))\r\n\t\t\tvalue = 0;\r\n\r\n\t\tvar valueInMinutes = parseInt(value);\r\n\t\tvar otherValueInMinutes = parseInt(otherValue);\r\n\t\tif (isNaN(valueInMinutes) || isNaN(otherValueInMinutes))\r\n\t\t\treturn true;\r\n\r\n\t\treturn valueInMinutes > otherValueInMinutes || (valueInMinutes === otherValueInMinutes && params[\"allowEqualValues\"] === 'True');\r\n\t});\r\n}\r\n","export class AnimationManager {\n static getCurrentDuration() {\n return AnimationManager.animationsEnabled ? 300 : 0;\n }\n}\nAnimationManager.animationsEnabled = false;\nwindow.AnimationManager = AnimationManager;\n$(function () {\n setTimeout(function () {\n AnimationManager.animationsEnabled = true;\n }, 500);\n});\n","export class Base64 {\n static getBase64Code(charCode) {\n if (charCode >= Base64.base64codes.length) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n const code = Base64.base64codes[charCode];\n if (code === 255) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n return code;\n }\n static bytesToBase64(bytes) {\n let result = '', i, l = bytes.length;\n for (i = 2; i < l; i += 3) {\n result += Base64.base64abc[bytes[i - 2] >> 2];\n result += Base64.base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\n result += Base64.base64abc[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];\n result += Base64.base64abc[bytes[i] & 0x3F];\n }\n if (i === l + 1) {\n result += Base64.base64abc[bytes[i - 2] >> 2];\n result += Base64.base64abc[(bytes[i - 2] & 0x03) << 4];\n result += \"==\";\n }\n if (i === l) {\n result += Base64.base64abc[bytes[i - 2] >> 2];\n result += Base64.base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\n result += Base64.base64abc[(bytes[i - 1] & 0x0F) << 2];\n result += \"=\";\n }\n return result;\n }\n static base64ToBytes(str) {\n if (str.length % 4 !== 0) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n const index = str.indexOf(\"=\");\n if (index !== -1 && index < str.length - 2) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0, n = str.length, result = new Uint8Array(3 * (n / 4)), buffer;\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\n buffer =\n Base64.getBase64Code(str.charCodeAt(i)) << 18 |\n Base64.getBase64Code(str.charCodeAt(i + 1)) << 12 |\n Base64.getBase64Code(str.charCodeAt(i + 2)) << 6 |\n Base64.getBase64Code(str.charCodeAt(i + 3));\n result[j] = buffer >> 16;\n result[j + 1] = (buffer >> 8) & 0xFF;\n result[j + 2] = buffer & 0xFF;\n }\n return result.subarray(0, result.length - missingOctets);\n }\n static base64encode(str, encoder = new TextEncoder()) {\n return Base64.bytesToBase64(encoder.encode(str));\n }\n static base64decode(str, decoder = new TextDecoder()) {\n return decoder.decode(Base64.base64ToBytes(str));\n }\n}\nBase64.base64abc = [\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\n \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\",\n \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"\n];\nBase64.base64codes = [\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255,\n 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,\n 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\n 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\n];\n","\"use strict\";\nclass BrowserDetector {\n}\nBrowserDetector.IsOpera = navigator.userAgent.toLowerCase().indexOf(\"op\") > -1;\nBrowserDetector.IsChrome = navigator.userAgent.indexOf('Chrome') > -1 && !BrowserDetector.IsOpera;\nBrowserDetector.IsExplorer = navigator.userAgent.indexOf('MSIE') > -1;\nBrowserDetector.IsFirefox = navigator.userAgent.indexOf('Firefox') > -1;\nBrowserDetector.IsSafari = navigator.userAgent.indexOf(\"Safari\") > -1 && !BrowserDetector.IsChrome;\nBrowserDetector.IsEdge = navigator.userAgent.indexOf(\"Edge\") > -1;\nwindow.BrowserDetector = BrowserDetector;\n","\"use strict\";\r\n\r\n/* Change the options in a select (drop down) */\r\nwindow.replaceOptions = function (selectId, leaveFirst, newOptions) {\r\n\ttry {\r\n\t\tvar el = $('#' + selectId);\r\n\t\tvar value = el.val();\r\n\t\tif (leaveFirst)\r\n\t\t\t$('#' + selectId + ' option:gt(0)').remove();\r\n\t\telse\r\n\t\t\t$('#' + selectId + ' option').remove();\r\n\t\tvar $el = $(\"#\" + selectId);\r\n\t\t$.each(newOptions, function (value, text) {\r\n\t\t\t$el.append($(\"\").attr(\"value\", value).text(text));\r\n\t\t});\r\n\t\t// Reset the value if it exists in the new values as well\r\n\t\tif (value && $(\"#\" + selectId + \" option[value='\" + value + \"']\").length > 0)\r\n\t\t\tel.val(value);\r\n\t} catch (ex) {\r\n\t\tconsole.error(ex);\r\n\t}\r\n};\r\n\r\n/* Change the options in one drop down based on the selection in another */\r\nwindow.declareDependentDropDowns = function (selectId, dependentId, optionsDict) {\r\n\t$('#' + selectId).change(function () {\r\n\t\tvar newOptions = {};\r\n\r\n\t\tfor (var i = 0; i < optionsDict.length; i += 1) {\r\n\t\t\tif (optionsDict[i].value === this.value) {\r\n\t\t\t\tnewOptions = optionsDict[i].options;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treplaceOptions(dependentId, true, newOptions);\r\n\t});\r\n\r\n\t$('#' + selectId).change();\t// Execute once\r\n};\r\n\r\nwindow.closestOfClass = function (element, dependentSelector) {\r\n\tif (dependentSelector)\r\n\t\treturn element.closest(dependentSelector);\r\n\treturn element;\r\n};\r\n\r\n/* Shows and hides elements based on the data attribute of a select (drop down) */\r\nwindow.declareElementVisibleForSelectValueDataAttribute = function (selectId, dependentId, dependentSelector, attributeName, visibleOptions, ignoreIfValuePresentInElementIds, triggerChangeForOptionNoneOtherElementIds) {\r\n\tdependentId = '#' + dependentId;\r\n\r\n\t$('#' + selectId).change(function () {\r\n\t\tvar duration = AnimationManager.getCurrentDuration();\r\n\t\tvar ignore = false;\r\n\t\tfor (var i = 0; i < ignoreIfValuePresentInElementIds.length; i += 1) {\r\n\t\t\tif ($('#' + ignoreIfValuePresentInElementIds[i]).val()) {\r\n\t\t\t\tignore = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (ignore !== true) {\r\n\t\t\tvar currentSelected = $(this).children(\"option:selected\");\r\n\t\t\t// Radio button groups (created using method StandardRadioBoxButtonGroupFor) do not provide the value directly\r\n\t\t\tvar attribute = currentSelected.attr('data-' + attributeName);\r\n\t\t\tif (attribute) {\r\n\r\n\t\t\t\tvar dependent = $(dependentId);\r\n\t\t\t\tif ($.inArray(attribute, visibleOptions) < 0 && attribute) {\r\n\t\t\t\t\tclosestOfClass(dependent, dependentSelector).hide(duration, function () {\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// To revalidate on show (because otherwise it shows the error in some situations, e.g. when showing the element) put dependent.valid(); in the completed function below\r\n\t\t\t\t\t// However, if enabled, it will cause some agressive errors, e.g. when a new license is created and language proficiency is selected as type, the level immediately shows an error without giving the user a chance to enter something\r\n\t\t\t\t\tclosestOfClass(dependent, dependentSelector).show(duration, function () {\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < triggerChangeForOptionNoneOtherElementIds.length; i += 1) {\r\n\t\t\t$('#' + triggerChangeForOptionNoneOtherElementIds[i]).change();\r\n\t\t}\r\n\t});\r\n\r\n\t$('#' + selectId).change();\t// Execute once\r\n};\r\n/* Shows and hides elements based on the value in a select (drop down) */\r\nwindow.declareElementVisibleForSelectValues = function (selectId, dependentId, dependentSelector, visibleOptions) {\r\n\tdependentId = '#' + dependentId;\r\n\t$('#' + selectId).on('change', function () {\r\n\t\tvar duration = AnimationManager.getCurrentDuration();\r\n\t\tvar $this = $(this);\r\n\r\n\t\t// Radio button groups (created using method StandardRadioBoxButtonGroupFor) do not provide the value directly\r\n\t\tvar val = $this.is(':checkbox') ? $this.prop('checked').toString() : this.value;\r\n\t\tif (val === undefined && this.tagName === \"DIV\") {\r\n\t\t\tval = $('input:radio[name=' + selectId + ']:checked').val();\r\n\t\t}\r\n\t\tvar dependent = $(dependentId);\r\n\t\tif ($.inArray(val, visibleOptions) < 0) {\r\n\t\t\tclosestOfClass(dependent, dependentSelector).hide(duration, function () {\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// To revalidate on show (because otherwise it shows the error in some situations, e.g. when showing the element) put dependent.valid(); in the completed function below\r\n\t\t\t// However, if enabled, it will cause some agressive errors, e.g. when a new license is created and language proficiency is selected as type, the level immediately shows an error without giving the user a chance to enter something\r\n\t\t\tclosestOfClass(dependent, dependentSelector).show(duration, function () {\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\t$('#' + selectId).change();\t// Execute once\r\n};\r\n\r\n/* Shows and hides elements based on the value of the checkbox */\r\nwindow.declareElementVisibleForCheckedCheckBox = function (checkboxId, dependentId) {\r\n\tdependentId = '#' + dependentId;\r\n\t$('#' + checkboxId).change(function () {\r\n\t\tvar duration = AnimationManager.getCurrentDuration();\r\n\t\tvar dependent = $(dependentId);\r\n\t\tif (this.checked) {\r\n\t\t\tdependent.closest('.form-group').show(duration, function () {\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tdependent.closest('.form-group').hide(duration, function () {\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\t$('#' + checkboxId).trigger('change');\t// Execute once\r\n};\r\n\r\nwindow.setDataRangeValidatorDynamically = function (upperLimit, targetId, isTime = false) {\r\n\t// Workaround to dynamically change the jQuery validator when number of e.g. landings changes.\r\n\t// since the validator is loaded once at page load, just changing attributes does not work and custom rules have to be applied\r\n\tupperLimit = parseInt(upperLimit);\r\n\tvar targetElement = $('#' + targetId);\r\n\r\n\tvar msg = null;\r\n\tif (isTime === false) {\r\n\t\tmsg = targetElement.attr(\"data-val-range\");\r\n\t\tmsg = msg.replace(/\\d+$/, upperLimit);\r\n\r\n\t\ttargetElement.rules(\"remove\", \"range\");\r\n\t\ttargetElement.rules(\"add\", {\r\n\t\t\trange: [0, upperLimit],\r\n\t\t\tmessages: {\r\n\t\t\t\trange: msg\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\telse {\r\n\t\tmsg = targetElement.attr(\"data-val-regex\");\r\n\t\tmsg = msg.replace(/\\d+$/, upperLimit.toDurationString(true, false));\r\n\t\ttargetElement.rules(\"remove\", \"regex\");\r\n\t\ttargetElement.rules(\"add\", {\r\n\t\t\trange: [0, upperLimit],\r\n\t\t\tmessages: {\r\n\t\t\t\trange: msg\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t// make target lose focus to trigger validator\r\n\ttargetElement.blur();\r\n};\r\n\r\nwindow.showElementForCheckboxAndSelectValue = function (dependentId, checkboxId, selectVal, visibleOptions) {\r\n\tvar duration = 300;\r\n\tvar dependent = $(dependentId);\r\n\tif ($.inArray(selectVal, visibleOptions) >= 0 && $('#' + checkboxId).is(':checked')) {\r\n\t\tdependent.closest('.form-group').show(duration, function () {\r\n\t\t});\r\n\t}\r\n\telse {\r\n\t\tdependent.closest('.form-group').hide(duration, function () {\r\n\t\t});\r\n\t}\r\n};\r\n\r\nwindow.declareElementVisibleForSelectValueAndCheckBox = function (selectId, dependentId, checkboxId, visibleOptions) {\r\n\tdependentId = '#' + dependentId;\r\n\t$('#' + selectId).change(function () {\r\n\t\tvar selectVal = $('#' + selectId).val();\r\n\t\tshowElementForCheckboxAndSelectValue(dependentId, checkboxId, selectVal, visibleOptions);\r\n\t});\r\n\t$('#' + checkboxId).change(function () {\r\n\t\tvar selectVal = $('#' + selectId).val();\r\n\t\tshowElementForCheckboxAndSelectValue(dependentId, checkboxId, selectVal, visibleOptions);\r\n\t});\r\n\t$('#' + selectId).change();\t// Execute once\r\n\t$('#' + checkboxId).change();\t// Execute once\r\n\r\n};\r\n\r\n/* Moves an element before another one if it is not already before it */\r\nwindow.moveBefore = function (elementId, otherId, duration) {\r\n\tvar element = $('#' + elementId).closest('.form-group');\r\n\tvar other = $('#' + otherId).closest('.form-group');\r\n\t// Check if visible\r\n\tif (element.is(\":visible\") && other.is(\":visible\")) {\r\n\t\tvar isBefore = element.nextAll().filter(other).length !== 0;\r\n\t\tif (!isBefore) {\r\n\t\t\tif (!AnimationManager.animationsEnabled)\r\n\t\t\t\tduration = 0;\r\n\t\t\t// Revalidate on show because otherwise it shows the error in some situations, e.g. when showing the element\r\n\t\t\telement.insertBefore(other).hide().show(duration, function () { $('#' + elementId).valid(); });\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/* Shows and hides elements based on the value in a select (drop down) */\r\nwindow.declareElementBeforeAnotherForSelectValues = function (selectId, elementId, otherId, visibleOptions) {\r\n\t$('#' + selectId).change(function () {\r\n\t\t// Radio button groups (created using method StandardRadioBoxButtonGroupFor) do not provide the value directly\r\n\t\tvar val = this.value;\r\n\t\tif (val === undefined && this.tagName === \"DIV\") {\r\n\t\t\tval = $('input:radio[name=' + selectId + ']:checked').val();\r\n\t\t}\r\n\t\tif ($.inArray(val, visibleOptions) < 0)\r\n\t\t\tmoveBefore(elementId, otherId);\r\n\t});\r\n\r\n\t$('#' + selectId).change();\t// Execute once\r\n};\r\n\r\n/*Combines the functionalities of declareElementVisibleForSelectValues and declareElementBeforeAnotherForSelectValues into one call.\r\nThe moveBefore logic has been moved into the body of the show callback to ensure sequential animation and prevent race conditions.*/\r\nwindow.declareElementVisibleForSelectValuesBeforeAnother = function (selectId, elementId, selectOptions, otherId, visibleOptions) {\r\n\tvar dependentId = '#' + elementId;\r\n\t$('#' + selectId).change(function () {\r\n\t\tvar duration = AnimationManager.getCurrentDuration();\r\n\r\n\t\t// Radio button groups (created using method StandardRadioBoxButtonGroupFor) do not provide the value directly\r\n\t\tvar val = this.value;\r\n\t\tif (val === undefined && this.tagName === \"DIV\") {\r\n\t\t\tval = $('input:radio[name=' + selectId + ']:checked').val();\r\n\t\t}\r\n\t\tvar dependent = $(dependentId);\r\n\t\tif ($.inArray(val, selectOptions) < 0) {\r\n\t\t\tclosestOfClass(dependent, '.form-group').hide(duration, function () {\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tclosestOfClass(dependent, '.form-group').show(duration, function () { /*dependent.valid();*/ });//Revalidate on show because otherwise it shows the error in some situations, e.g. when showing the element\r\n\t\t\tif ($.inArray(val, visibleOptions) < 0) {\r\n\t\t\t\tvar element = $('#' + elementId).closest('.form-group');\r\n\t\t\t\tvar other = $('#' + otherId).closest('.form-group');\r\n\t\t\t\tvar isBefore = element.nextAll().filter(other).length !== 0;\r\n\t\t\t\tif (!isBefore) {\r\n\t\t\t\t\t// Revalidate on show because otherwise it shows the error in some situations, e.g. when showing the element\r\n\t\t\t\t\telement.insertBefore(other).hide().show(duration, function () { /*$('#' + elementId).valid();*/ });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$('#' + selectId).change();\t// Execute once\r\n};\r\n\r\n/* Enable/disable elements based on other element selection */\r\nwindow.declareElementDisabledForNonNullValuesInAnother = function (selectId, elementId) {\r\n\t$('#' + selectId).change(function () {\r\n\t\tvar element = document.getElementById(elementId);\r\n\t\tif ($(this).val())\r\n\t\t\telement.disabled = true;\r\n\t\telse\r\n\t\t\telement.disabled = false;\r\n\t});\r\n\r\n\t// Execute the change event once to handle editing attempts\r\n\t$('#' + selectId).trigger(\"change\");\r\n};\r\n/* END: Enable/disable elements based on other element selection */\r\n\r\n// InputControlExtensions\r\nfunction InputControlExtensions() {\r\n}\r\n\r\nInputControlExtensions.setChecked = function (elementId, value) {\r\n\tvar elementById = document.getElementById(elementId);\r\n\tvar elementsByName = document.getElementsByName(elementId);\t// There is a hidden element with the same name for disabled checkboxes\r\n\r\n\tvar valueStr = value.toString();\r\n\tvalueStr = valueStr.toLowerCase();\r\n\tif (valueStr === \"true\") {\r\n\t\tif (elementById)\r\n\t\t\telementById.checked = true;\r\n\t\telementsByName.forEach(function (element, index) {\r\n\t\t\tif (element.nodeName === \"INPUT\" && element.type === \"hidden\") {\r\n\t\t\t\telement.value = \"true\";\r\n\t\t\t}\r\n\t\t});\r\n\t} else {\r\n\t\tif (elementById)\r\n\t\t\telementById.checked = false;\r\n\t\telementsByName.forEach(function (element, index) {\r\n\t\t\tif (element.nodeName === \"INPUT\" && element.type === \"hidden\") {\r\n\t\t\t\telement.value = \"false\";\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n};\r\n\r\nInputControlExtensions.setDisabled = function (elementId, value) {\r\n\tvar elementById = document.getElementById(elementId);\r\n\r\n\tif (elementById) {\r\n\t\tvar $parent = $(elementById).closest('.custom-checkbox, .custom-radio-button');\r\n\r\n\t\tvar valueStr = value.toString();\r\n\t\tvalueStr = valueStr.toLowerCase();\r\n\t\tif (valueStr === \"true\") {\r\n\t\t\telementById.disabled = true;\r\n\t\t\t$parent.addClass('disabled');\r\n\t\t} else {\r\n\t\t\telementById.disabled = false;\r\n\t\t\t$parent.removeClass('disabled');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nwindow.InputControlExtensions = InputControlExtensions;","\"use strict\";\r\n\r\nwindow.getCookieValue = function getCookieValue(name, key) {\r\n\treturn Cookies.get(`${name}.${key}`);\r\n}\r\n\r\nwindow.setCookieValue = function setCookieValue(name, key, value, expires) {\r\n\tCookies.set(`${name}.${key}`, value, { expires: expires || new Date(9999, 12, 31) });\r\n};","\"use strict\";\nfunction showDialog(modalId, resizable, draggable = true, callback, reShowIfAlreadyVisible = true) {\n if (!reShowIfAlreadyVisible && $(`#${modalId}`).is(`:visible`))\n return;\n $(`#${modalId}.modal`).appendTo(document.body);\n let iframe = $(`#${modalId} .modal-dialog .modal-content .modal-body iframe`);\n if (iframe) {\n let dataSrc = iframe.attr('data-src');\n if (dataSrc)\n iframe.attr('src', dataSrc);\n }\n if (draggable !== false) {\n $(`#${modalId} .modal-dialog`).draggable();\n }\n if (resizable) {\n $(`#${modalId} .modal-content`).resizable();\n }\n $(`#${modalId}`).on(`shown.bs.modal`, function (e) {\n $(document).off('focusin.modal');\n if (callback) {\n callback();\n }\n });\n $(`#${modalId}`).modal();\n}\nwindow.showDialog = showDialog;\nfunction hideDialog(modalId) {\n $(`#${modalId}`).modal(`hide`);\n}\nwindow.hideDialog = hideDialog;\n","export class FileSizeValidator {\n static validateSize(fileId, maxSizeInMB) {\n let fi = document.getElementById(fileId);\n return FileSizeValidator.validateSizeForInput(fi, maxSizeInMB, null, null);\n }\n static validateSizeForInput(fi, maxSizeInMB, title = null, message = null) {\n if (maxSizeInMB && maxSizeInMB > 0) {\n if (fi.files && fi.files.length > 0) {\n for (let i = 0; i <= fi.files.length - 1; i++) {\n let file = fi.files.item(i);\n if (file) {\n let result = file.size <= maxSizeInMB * 1024 * 1024;\n if (!result && title && message) {\n SwalEx.alertCustom(title, message, null, true, 'fal fa-triangle-exclamation status-warning');\n }\n return result;\n }\n }\n }\n }\n return true;\n }\n}\nwindow.FileSizeValidator = FileSizeValidator;\n","import { PleaseWait } from './pleaseWait';\nimport { ErrorReporter } from './ErrorReporter';\nimport { FileSizeValidator } from './fileSizeValidator';\nexport class FileUploadManager {\n constructor(options) {\n let me = this;\n this.postedFileElement = document.getElementById(options.PostedFileId);\n if (this.postedFileElement) {\n if (options.CustomButtonId) {\n let customButtonElement = document.getElementById(options.CustomButtonId);\n if (customButtonElement) {\n customButtonElement.addEventListener(\"click\", function () {\n me.Browse();\n });\n }\n }\n me.postedFileElement.addEventListener(\"change\", function () {\n let fullPath = me.postedFileElement.value;\n let fileName = fullPath.split(/(\\\\|\\/)/g).pop() ?? '';\n let fileNameElement = document.getElementById(options.FileNameId);\n if (fileNameElement)\n fileNameElement.innerHTML = fileName;\n let nameElement = document.getElementById(options.NameId);\n if (nameElement) {\n let fileNameWithoutExt = fileName.replace(/\\.[^/.]+$/, \"\");\n nameElement.value = fileNameWithoutExt;\n }\n let isValidSize = FileSizeValidator.validateSize(options.PostedFileId, options.MaxSizeInMB);\n if (fileNameElement && options.MaxFileSizeExceededError && !isValidSize)\n fileNameElement.innerHTML += `
${options.MaxFileSizeExceededError}`;\n if (isValidSize && options.AjaxUrl) {\n let files = me.postedFileElement.files;\n if (files && files.length > 0) {\n let fileData = new FormData();\n for (let i = 0; i < files.length; i++) {\n fileData.append(files[i].name, files[i]);\n }\n if (options.AdditionalAjaxData) {\n for (var key in options.AdditionalAjaxData) {\n fileData.append(key, options.AdditionalAjaxData[key]);\n }\n }\n PleaseWait.show();\n $.ajax({\n url: options.AjaxUrl,\n type: \"POST\",\n contentType: false,\n processData: false,\n data: fileData,\n error: function (res) {\n console.log(res);\n ErrorReporter.ReportAjaxError(options.AjaxUrl, fileData, res);\n if (fileNameElement)\n fileNameElement.innerHTML += `
`;\n if (options.OnError)\n options.OnError(res);\n PleaseWait.hide();\n },\n success: function (result) {\n if (result.Succeeded === false) {\n if (fileNameElement) {\n if (result.ErrorMessage)\n fileNameElement.innerHTML += `
${result.ErrorMessage}`;\n else\n fileNameElement.innerHTML += `
`;\n }\n PleaseWait.hide();\n }\n else {\n if (options.OnSuccess)\n options.OnSuccess(result);\n if (options.HidePleaseWaitWhenDone)\n PleaseWait.hide();\n }\n }\n });\n }\n }\n }, false);\n }\n }\n Browse() {\n this.postedFileElement.click();\n }\n}\nwindow.FileUploadManager = FileUploadManager;\n","\"use strict\";\r\n\r\nwindow.activateControlEnter = function (submitButtonId) {\r\n\tvar map = {\r\n\t\t13: false,\t// Enter\r\n\t\t16: false,\t// Shift\r\n\t\t17: false\t// Ctrl\r\n\t};\r\n\t$(document).keydown(function (e) {\r\n\t\tif (e.keyCode in map) {\r\n\t\t\tmap[e.keyCode] = true;\r\n\t\t\tif (map[17] && map[13]) {\t// Ctrl and Enter are pressed\r\n\t\t\t\t$('input').each(function () {\r\n\t\t\t\t\t$(this).trigger('blur');\r\n\t\t\t\t\t//each input event is blurred, i.e. given the info that it has lost focus\r\n\t\t\t\t\t//this is important, because otherwise the on event is not triggered and the \r\n\t\t\t\t\t//autoCalculateLanding/Takeoff is not executed\r\n\t\t\t\t});\r\n\t\t\t\t// button groups behave strange in conjunction with focus, maybe we have to use this later, currently focus is not set.\r\n\t\t\t\t//$('.btn-group').children().each(function () {\r\n\t\t\t\t//\t$(this).trigger('blur');\r\n\t\t\t\t//\t//each input event is blurred, i.e. given the info that it has lost focus\r\n\t\t\t\t//\t//this is important, because otherwise the on event is not triggered and the \r\n\t\t\t\t//\t//autoCalculateLanding/Takeoff is not executed\r\n\t\t\t\t//});\r\n\r\n\t\t\t\tif (map[16]) {\t// Shift is also pressed\r\n\t\t\t\t\twizardPrevPage();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (submitButtonId.length > 0) {\r\n\t\t\t\t\t\tdoNotWarnOnPageLeave();\r\n\t\t\t\t\t\tdocument.getElementById(submitButtonId).click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twizardNextPage();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}).keyup(function (e) {\r\n\t\tif (e.keyCode in map) {\r\n\t\t\tmap[e.keyCode] = false;\r\n\t\t}\r\n\t});\r\n};\r\n\r\nwindow.onsubmit_preventDoubleClick_IconButtons = function (formId) {\r\n\tvar form = $('#' + formId);\r\n\tif (form.valid()) {\r\n\t\tvar submitButton = form.find('button[type=\"Submit\"]')[0];\r\n\t\tif (submitButton) {\r\n\t\t\tsubmitButton.disabled = true; // disable the hidden button (used with icon buttons) to prevent double clicks\r\n\t\t}\r\n\t}\r\n};","import { PleaseWait } from \"./pleaseWait\";\nexport class FormUtils {\n static getForm(formElement) {\n const closestForm = formElement ? $(formElement).closest('form')[0] : null;\n return closestForm || $('form')[0] || null;\n }\n static ensureHiddenExists(form, elementId) {\n let hiddenElement = form.querySelector(`#${elementId}`);\n if (!hiddenElement) {\n hiddenElement = document.createElement('input');\n hiddenElement.type = 'hidden';\n hiddenElement.id = elementId;\n hiddenElement.name = elementId;\n form.appendChild(hiddenElement);\n }\n return hiddenElement;\n }\n static submitForm(formElement, action, target) {\n const form = FormUtils.getForm(formElement);\n if (!form) {\n console.error('Form not found!');\n return;\n }\n const originalTarget = form.target;\n const originalAction = form.action;\n if (action)\n form.action = action;\n if (target)\n form.target = target;\n form.submit();\n form.action = originalAction;\n form.target = originalTarget;\n }\n static exportForm(formElement, action, format, additionalProperties) {\n let form = FormUtils.getForm(formElement);\n if (!form) {\n form = document.createElement('form');\n form.method = 'post';\n form.action = action;\n document.body.appendChild(form);\n }\n const tokenElement = FormUtils.ensureHiddenExists(form, 'downloadToken');\n const token = new Date().getTime().toString();\n tokenElement.value = token;\n FormUtils.blockUIForDownload(token);\n const formatElement = FormUtils.ensureHiddenExists(form, 'format');\n formatElement.value = format;\n if (additionalProperties) {\n additionalProperties.forEach((item) => {\n if (item && item.key && item.value !== undefined) {\n const value = Array.isArray(item.value) || typeof item.value === 'object'\n ? JSON.stringify(item.value)\n : item.value;\n const itemElement = FormUtils.ensureHiddenExists(form, item.key);\n itemElement.value = value;\n }\n });\n }\n if (!formElement) {\n formElement = tokenElement;\n }\n FormUtils.submitForm(formElement, action);\n }\n static blockUIForDownload(token) {\n PleaseWait.show();\n const fileDownloadCheckTimer = window.setInterval(() => {\n const cookieValue = window.Cookies.get('downloadToken');\n if (cookieValue === token) {\n window.clearInterval(fileDownloadCheckTimer);\n window.Cookies.remove('downloadToken');\n PleaseWait.hide();\n }\n }, 500);\n }\n}\nwindow.FormUtils = FormUtils;\nwindow.getForm = FormUtils.getForm;\nwindow.submitForm = FormUtils.submitForm;\nwindow.exportForm = FormUtils.exportForm;\nwindow.blockUIForDownload = FormUtils.blockUIForDownload;\n","\"use strict\";\r\n/*make it possible to search case insensitive*/\r\njQuery.expr[':'].icontains = function (a, i, m) {\r\n\treturn jQuery(a).text().toUpperCase()\r\n\t\t.indexOf(m[3].toUpperCase()) >= 0;\r\n};\r\n\r\n/* Focus element */\r\njQuery.fn.extend({\r\n\tscrollToMe: function () {\r\n\t\tvar x = jQuery(this).offset().top - 300;\r\n\t\tjQuery('#content').animate({ scrollTop: x }, 500);\r\n\t}\r\n});\r\n\r\nwindow.focusElement = function (selectizeObjectForElement, elementId) {\r\n\t// Focus the required control\r\n\ttry {\r\n\t\tif (selectizeObjectForElement) {\r\n\t\t\t/* Depends on selectize internal implementation! */\r\n\r\n\t\t\t// When the selectized input is focused, its dropdown is automatically open.\r\n\t\t\t// The opening can be suppressed by setting settings.openOnFocus to false.\r\n\t\t\t// However, there is a load of items taking place immediately and once it is\r\n\t\t\t// finished, the items are refreshed and if the selectized control is the\r\n\t\t\t// currently focused element (checked through the internal property isFocused),\r\n\t\t\t// the dropdown is opened again. So this has to be surpressed as well.\r\n\t\t\t// However, the isFocused property also decides if the '.focus' class is added\r\n\t\t\t// to the control, so when we set it to false, the indication of focused disappears\r\n\t\t\t// To fix all this the control is locked until the first load takes place. This\r\n\t\t\t// allows it to take focus but does not open it\r\n\t\t\tvar firstLoadCalled = false;\r\n\t\t\tselectizeObjectForElement.on('load', function ($dropdown) {\r\n\t\t\t\tif (!firstLoadCalled) {\r\n\t\t\t\t\tselectizeObjectForElement.unlock();\r\n\t\t\t\t\tfirstLoadCalled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Now we are ready to focus the control\r\n\t\t\tselectizeObjectForElement.lock();\r\n\t\t\tselectizeObjectForElement.focus();\r\n\t\t} else {\r\n\t\t\tvar el = $('#' + elementId);\r\n\t\t\tif (el && el.length) {\r\n\t\t\t\tel = $(el[0]);\r\n\t\t\t} else {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// If it is a normal element (e.g. text box) el is now the element.\r\n\t\t\t// However, for radio button group the element is a div, containing labels and inside them inputs, which have to be focused\r\n\t\t\tvar parent = el.parent();\r\n\t\t\tif (parent.hasClass('radio-button-group')) {\r\n\t\t\t\t// Focus the checked radio button\r\n\t\t\t\tvar checkedRadioButton = parent.find('button[type=button].active');\r\n\t\t\t\tif (checkedRadioButton) {\r\n\t\t\t\t\tcheckedRadioButton.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tel.focus();\r\n\t\t\t\tel.scrollToMe();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tcatch (ex) {\r\n\t\tconsole.error(ex);\r\n\t}\r\n};\r\n/* END: Focus element */\r\n\r\n/* MVC and bootstrap use different css classes to mark errors */\r\nwindow.prepareFormsForBootstrapErrors = function () {\r\n\t// Fix for client side validation\r\n\t$('form').each(function () {\r\n\t\ttry {\r\n\t\t\tvar form = $(this);\r\n\t\t\tvar settings = form.validate().settings;\r\n\t\t\tsettings.highlight = function (element, errorClass, validClass) {\r\n\t\t\t\t$(element).parents('.form-group').addClass('has-error');\r\n\t\t\t};\r\n\t\t\tsettings.unhighlight = function (element, errorClass, validClass) {\r\n\t\t\t\t$(element).parents('.form-group').removeClass('has-error');\r\n\t\t\t};\r\n\r\n\t\t\t// Another option that also works and gives access to the label (the validation message span)\r\n\t\t\t/*\r\n\t\t\tvar formData = form.data();\r\n\t\t\tvar settings = formData.validator.settings;\r\n\t\t\t// Store existing event handlers in local variables\r\n\t\t\tvar oldErrorPlacement = settings.errorPlacement;\r\n\t\t\tvar oldSuccess = settings.success;\r\n\r\n\t\t\tsettings.errorPlacement = function (label, element) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Note: label is the validation message span\r\n\t\t\t\t\t// Call old handler so it can update the HTML\r\n\t\t\t\t\toldErrorPlacement(label, element);\r\n\r\n\t\t\t\t\t// Add Bootstrap classes to newly added elements\r\n\t\t\t\t\tlabel.parents('.form-group').addClass('has-error');\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.log(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tsettings.success = function (label) {\r\n\t\t\t\t// Note: label is the validation message span\r\n\t\t\t\t// Remove error class from
\r\n\t\t\t\tlabel.parents('.form-group').removeClass('has-error');\r\n\r\n\t\t\t\t// Call old handler to do rest of the work\r\n\t\t\t\toldSuccess(label);\r\n\t\t\t};\r\n\t\t\t*/\r\n\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(\"prepareFormsForBootstrapErrors: \" + e + \" for:\");\r\n\t\t\tconsole.log(this);\r\n\t\t}\r\n\t});\r\n\r\n\t// Fix for server side validation\r\n\t$('.input-validation-error').parents('.form-group').addClass('has-error');\r\n\t$('.field-validation-error').addClass('text-danger');\r\n};\r\n\r\n/* Sets alternative button actions; used when a single form has more than one button */\r\nwindow.setButtonFormActions = function () {\r\n\t$('[data-custom-form-action]').click(function (e) {\r\n\t\ttry {\r\n\t\t\tvar form = $(this).closest('form');\r\n\t\t\tif (form !== null) {\r\n\t\t\t\tform.attr('action', $(this).attr('data-custom-form-action'));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\tconsole.log(err);\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t\te.stopImmediatePropagation();\r\n\t\treturn false;\r\n\t});\r\n};\r\n\r\n/* Adds confirmation to a button and executes the click only if confirmed by the user */\r\nwindow.setButtonConfirmations = function () {\r\n\t$('[data-custom-confirmation]').each(function () {\r\n\t\ttry {\r\n\t\t\tvar el = $(this);\r\n\t\t\t// If the element has an onclick event, it is called BEFORE this handler, so copy it and clear it\r\n\t\t\tvar onClick = el.attr(\"onclick\");\r\n\t\t\tel.attr(\"onclick\", null);\r\n\r\n\t\t\tel.click(function (e) {\r\n\t\t\t\tif (window.confirm(el.attr('data-custom-confirmation'))) {\r\n\t\t\t\t\tdoNotWarnOnPageLeave();\r\n\t\t\t\t\tif (onClick) {\r\n\t\t\t\t\t\t// https://stackoverflow.com/questions/1415606/get-the-value-of-onclick-with-jquery\r\n\t\t\t\t\t\t(new Function(onClick + ';onclick();'))();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.log(err);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n/* Alerts */\r\nwindow.showAlert = function (parentId, resultMessageType, resultMessage) {\r\n\tvar resultDiv = document.getElementById(parentId);\r\n\tresultDiv.innerHTML =\r\n\t\t'
\\\r\n\t\t\t\\\r\n\t\t\t

' + resultMessage + '

\\\r\n\t\t
';\r\n\t$('#alertJS').on('close.bs.alert', function (e) {\r\n\t\tresultDiv.style.display = \"none\";\r\n\t});\r\n\tresultDiv.style.display = \"block\";\r\n};\r\n\r\nwindow.removeResultSubElementsOnAlertClose = function () {\r\n\t$('.alert')\r\n\t\t.bind('closed.bs.alert',\r\n\t\t\tfunction () {\r\n\t\t\t\tdocument.getElementById(\"layoutResult\").innerHTML = '';\r\n\t\t\t});\r\n};\r\n\r\n\r\n/* On load */\r\n$(function () {\r\n\t$('[data-toggle=\"tooltip\"]').tooltip();\t// Activate boostrap tooltips\r\n\tprepareFormsForBootstrapErrors();\r\n\tsetActiveSidebarElement();\r\n\tsetButtonConfirmations();\t// Put this before any other click processing\r\n\tsetButtonFormActions();\r\n\tremoveResultSubElementsOnAlertClose();\r\n\tif (Popper.Defaults) {\r\n\t\tPopper.Defaults.modifiers.computeStyle.gpuAcceleration = !(window.devicePixelRatio < 1.5 && /Win/.test(navigator.platform));\r\n\t}\r\n});\r\n\r\n/* Extended decodeURIComponentEx */\r\nwindow.decodeURIComponentEx = function (val) {\r\n\t// decodeURIComponent ignores +, so convert it first to space\r\n\treturn decodeURIComponent(val.replace(/\\+/g, '%20'));\r\n};\r\n\r\nwindow.encodeURIComponentEx = function (val) {\r\n\t// opposite of decodeURIComponent\r\n\treturn encodeURIComponent(val).replace(/%20/g, '+');\r\n};\r\n\r\n// Calls a function which is provided directly as parameter or name of a function defined on window level\r\nwindow.callFunction = function (func) {\r\n\tif (func) {\r\n\t\tif (typeof func === \"function\")\r\n\t\t\tfunc();\r\n\t\telse {\r\n\t\t\tif (!(typeof window[func] === \"function\"))\r\n\t\t\t\tconsole.error(`window[${func}] is not a function`);\r\n\t\t\telse\r\n\t\t\t\twindow[func]();\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/* Popover */\r\nwindow.popOverForIconButton = function (identifier, placement, content, popoverClass, activateLongTabOnMobile, onClickFunction = null) {\r\n\tvar selector = '[data-ident=\"button_' + identifier + '\"]';\r\n\r\n\tpopOver(selector, placement, content, popoverClass, activateLongTabOnMobile, onClickFunction, identifier);\r\n};\r\n\r\nwindow.popOver = function (selector, placement, content, popoverClass, activateLongTabOnMobile, onClickFunction = null, popoverIdent = null) {\r\n\tif (popoverIdent === null) {\r\n\t\tpopoverIdent = newGuid();\r\n\t}\r\n\tvar popoverSelectorDataAttribute = 'data-popover-ident=\"popover_' + popoverIdent + '\"';\r\n\tvar popoverSelector = '[' + popoverSelectorDataAttribute + ']';\r\n\r\n\tvar myDefaultWhiteList = $.fn.popover.Constructor.Default.whiteList;\r\n\tmyDefaultWhiteList.div = ['data-popover-ident'];\r\n\tmyDefaultWhiteList.header = [];\r\n\tmyDefaultWhiteList.h4 = [];\r\n\r\n\t$(selector)\r\n\t\t.popover({\r\n\t\t\tplacement: placement,\r\n\t\t\ttrigger: 'manual',\r\n\t\t\t// Template taken from bootstrap and enhanced\r\n\t\t\ttemplate: '

',\r\n\t\t\tcontainer: 'body',\r\n\t\t\thtml: true,\r\n\t\t\tcontent: content\r\n\t\t});\r\n\tif (window.isMobileBrowser() && activateLongTabOnMobile) {\r\n\t\t// prepare longTap functionality\r\n\t\t$(selector).click(function (event) {\r\n\t\t\t// Here \"this\" is the dom object\r\n\t\t\tif (this.lastClickWasLongTap) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t}\r\n\t\t\tthis.lastClickWasLongTap = false;\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\t$(selector).addClass(\"preventMenuOnLongTap\");\r\n\t\t$(selector).swipe({\r\n\t\t\tlongTap: function (event, target) {\r\n\t\t\t\t// Here \"this\" is already the jQuery object\r\n\t\t\t\tthis.popover(\"show\");\r\n\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t$(selector).popover(\"hide\");\r\n\t\t\t\t},\r\n\t\t\t\t\t7000\r\n\t\t\t\t);\r\n\t\t\t\t$(popoverSelector).on(\"click\",\r\n\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\t$(this).popover(\"hide\");\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\tthis[0].lastClickWasLongTap = true;\r\n\t\t\t},\r\n\t\t\ttap: function (event, target) {\r\n\t\t\t\tcallFunction(onClickFunction);\r\n\t\t\t},\r\n\t\t\tthreshold: 50\r\n\t\t});\r\n\t} else {\r\n\t\t$(selector)\r\n\t\t\t.on(\"mousemove\",\r\n\t\t\t\tfunction () {\r\n\t\t\t\t\tvar me = this;\r\n\t\t\t\t\t$(me).popover(\"show\");\r\n\r\n\t\t\t\t\tvar popover = $(popoverSelector);\r\n\t\t\t\t\tpopover.on(\"mouseleave\",\r\n\t\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\t\t$(selector).popover(\"hide\");\r\n\t\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t.on(\"mouseleave\",\r\n\t\t\t\tfunction () {\r\n\t\t\t\t\tif ($(popoverSelector + '.show:hover').length < 1) {\r\n\t\t\t\t\t\t$(selector).popover(\"hide\");\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t.on(\"click\", function () {\r\n\t\t\t\tif (onClickFunction) {\r\n\t\t\t\t\tcallFunction(onClickFunction);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\n/* User warning before leaving page */\r\nwindow.warnOnPageLeaveHandler = null;\r\nwindow.warnOnPageLeave = function (message) {\r\n\tdoNotWarnOnPageLeave();\r\n\twarnOnPageLeaveHandler = function () {\r\n\t\treturn message;\r\n\t};\r\n\t$(window).bind('beforeunload', warnOnPageLeaveHandler);\r\n};\r\n\r\nwindow.doNotWarnOnPageLeave = function () {\r\n\tif (warnOnPageLeaveHandler) {\r\n\t\t$(window).unbind('beforeunload', warnOnPageLeaveHandler);\r\n\t\twarnOnPageLeaveHandler = null;\r\n\t}\r\n};\r\n\r\nwindow.alertCustomOnClick = function (elementId, title, message, redirectTo, icon, getArgumentProvidingElementId = null) {\r\n\r\n\t/// \r\n\t/// Binds a click event to the jQuery object with elementId. Shows a swal popup\r\n\t/// \r\n\t/// Shown on top of the inner content, can be null\r\n\t/// Appears within the box under the faIcon\r\n\t/// Determines action to take when user input is positive confirmation, see below for possible values\r\n\t/// Icon to be shown within content box on top of inner content\r\n\t/// to build urls such as ../delete/a8ab05a3-20f1-4898-a01f-a9b7012bce1e, use Url.RouteUrl + '/' in combination with an element holding the target id \t\r\n\t/// redirectTo:\r\n\t/// 'submit' --> submit next parent form\r\n\t/// 'href' --> submit with element's href\r\n\t/// external url,\r\n\t/// undefined/null --> just alert the user and do nothing\r\n\t$('#' + elementId).click(function (e) {\r\n\t\te.preventDefault(); //cancel default action\r\n\t\tvar alertOnly = false;\r\n\t\tvar thenFunction = null;\r\n\t\tif (redirectTo === 'submit') {\r\n\t\t\tvar form = $(this).parents('form');\r\n\t\t\tthenFunction = function (result) {\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tform.submit();\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\telse if (redirectTo === 'href') {\r\n\t\t\t//Recuperate href value\r\n\t\t\tvar href = $(this).attr('href');\r\n\t\t\tthenFunction = function (result) {\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\twindow.location.href = href;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\telse if (!redirectTo) {\r\n\t\t\talertOnly = true;\r\n\t\t\tthenFunction = function (result) {\r\n\t\t\t\treturn;\r\n\t\t\t};\r\n\t\t}\r\n\t\telse if (getArgumentProvidingElementId) {\r\n\t\t\tvar targetUrl = redirectTo + $('#' + getArgumentProvidingElementId).val();\r\n\t\t\tthenFunction = function (result) {\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\twindow.location.href = targetUrl;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tSwalEx.alertCustom(title, message, thenFunction, alertOnly, icon);\r\n\t});\r\n};\r\n\r\n/* Image full view on click */\r\nwindow.showFullImageOnClick = function (selector) {\r\n\tvar $imgFullDiv = $('
').appendTo('body');\r\n\t$imgFullDiv.addClass('img-full hidden');\r\n\r\n\t$(selector).on('click', function () {\r\n\t\t// Helper for vertical align\r\n\t\tvar $imgFullHelper = $('').appendTo($imgFullDiv);\r\n\t\t$imgFullHelper.addClass('img-full-helper');\r\n\r\n\t\t$imgFullDiv\r\n\t\t\t.append($(this).clone())\r\n\t\t\t.removeClass('hidden');\r\n\t});\r\n\r\n\t$imgFullDiv.on('click', function () {\r\n\t\t$imgFullDiv.empty().addClass('hidden');\r\n\t});\r\n};\r\n/* End Image full view on click */\r\n\r\n/* Guid support */\r\nwindow.newGuid = function () {\r\n\treturn (\"\" + 1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/1|0/g, function () {\r\n\t\treturn (0 | Math.random() * 16).toString(16);\r\n\t});\r\n};\r\n\r\nwindow.isGuid = function (val) {\r\n\treturn /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val);\r\n};\r\n/* End Guid support */\r\n\r\nwindow.disableButton = function (btnId) {\r\n\tvar btn = document.getElementById(btnId);\r\n\tbtn.disabled = true;\r\n};","import { AnimationManager } from './animation';\nimport { Base64 } from './base64';\nexport function escapeHtml(html) {\n var text = document.createTextNode(html);\n var p = document.createElement('p');\n p.appendChild(text);\n return p.innerHTML;\n}\nwindow.escapeHtml = escapeHtml;\nexport function fixFormDataAsObject(array) {\n let output = {};\n array.forEach(function (item) {\n if (output[item.name]) {\n if (Array.isArray(output[item.name])) {\n if (!output[item.name].includes(item.value)) {\n output[item.name].push(item.value);\n }\n }\n else {\n if (output[item.name] !== item.value) {\n output[item.name] = [output[item.name], item.value];\n }\n }\n }\n else {\n output[item.name] = item.value;\n }\n });\n return output;\n}\nwindow.fixFormDataAsObject = fixFormDataAsObject;\nexport function isMobileBrowser() {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)))\n check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n}\nwindow.isMobileBrowser = isMobileBrowser;\nexport function getRandomIntInclusive(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\nwindow.getRandomIntInclusive = getRandomIntInclusive;\nexport function getRandomBase64String(minLen, maxLen) {\n let minLenBytes = 3 * minLen / 4;\n let maxLenBytes = 3 * maxLen / 4;\n while (true) {\n let lenBytes = getRandomIntInclusive(minLenBytes, maxLenBytes);\n let arr = new Uint8Array(lenBytes);\n window.crypto.getRandomValues(arr);\n let result = Base64.bytesToBase64(arr);\n let resultLen = result.length;\n if (resultLen >= minLen && resultLen <= maxLen)\n return result;\n }\n}\nwindow.getRandomBase64String = getRandomBase64String;\nexport function handleCollapseHandleClick() {\n $('.collapse-handle').on('click', function (event) {\n let $collapseHandle = $(this);\n let $collapseContent = $collapseHandle.siblings('[data-element=\"collapse-content\"]');\n let visible = $collapseContent.is(\":visible\");\n let duration = AnimationManager.getCurrentDuration();\n $collapseContent.toggle(duration);\n $collapseHandle.attr('data-selected', (!visible).toString());\n });\n}\nwindow.handleCollapseHandleClick = handleCollapseHandleClick;\n","import { OutsidePublic } from './outsidePublic';\nimport { AnimationManager } from './animation';\nclass JavascriptSearch {\n static resetSearch(noResultsElementShowId, singleElementWrapperSelector, singleElementContentToSearchSelector) {\n if (noResultsElementShowId.length > 0) {\n $('#' + noResultsElementShowId).hide();\n }\n $(singleElementWrapperSelector).find(singleElementContentToSearchSelector).each(function () {\n var html = $(this).html();\n var r = html.replace(/\\(.+?)\\<\\/span\\>/g, \"$1\");\n $(this).html(r);\n });\n }\n static initializeJavascriptSearch(formId, buttonId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength = 1, doHighlight = true) {\n let form = document.getElementById(formId);\n if (form) {\n form.addEventListener(\"submit\", event => JavascriptSearch.onSubmitSearchForm(event, formId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength, doHighlight));\n let searchField = document.getElementById(searchFieldId);\n if (searchField) {\n searchField.addEventListener(\"focusout\", () => {\n if ($('#' + searchFieldId).val() === '') {\n JavascriptSearch.resetSearch('', singleElementWrapperSelector, singleElementContentToSearchSelector);\n $(singleElementWrapperSelector).show(AnimationManager.getCurrentDuration());\n }\n });\n if (buttonId.length === 0) {\n searchField.addEventListener(\"keyup\", (event) => JavascriptSearch.onSearchValueChanged(event, formId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength, doHighlight));\n }\n }\n }\n }\n static searchClick(url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength = 1, doHighlight = true) {\n let searchTextInputElement = $('#' + searchFieldId);\n let searchText = searchTextInputElement.val() ?? \"\";\n let minLength = parseInt(searchTextInputElement.attr('data-val-minlength-min') ?? \"\");\n if (!minLength) {\n minLength = defaultMinLength;\n }\n let form = $(FormUtils.getForm($('#' + searchFieldId)[0]));\n if (form.valid() && searchText.length >= minLength) {\n if (url.length > 0) {\n JavascriptSearch.pushSearchValue(url, searchText);\n }\n JavascriptSearch.resetSearch(noResultsElementShowId, singleElementWrapperSelector, singleElementContentToSearchSelector);\n JavascriptSearch.executeSearch(searchText, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, doHighlight);\n }\n }\n static pushSearchValue(url, searchValue) {\n var data = {\n SimpleValue: searchValue\n };\n OutsidePublic.executeAjaxCall(url, data, null, null, '');\n }\n static executeSearch(searchText, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, doHighlight = true) {\n var duration = AnimationManager.getCurrentDuration();\n if (searchText) {\n var matches = $(singleElementWrapperSelector + \":icontains('\" + searchText + \"')\");\n $(singleElementWrapperSelector).hide();\n if (matches.length > 0) {\n matches.show(duration);\n if (doHighlight) {\n matches.find(singleElementContentToSearchSelector).each(function () {\n JavascriptSearch.highlightTextWithinElement($(this), searchText);\n });\n }\n }\n else {\n if (noResultsElementShowId) {\n $('#' + noResultsElementShowId).show();\n }\n }\n }\n else {\n let singleElementWrapper = $(singleElementWrapperSelector);\n if (singleElementWrapper) {\n singleElementWrapper.show(duration);\n }\n }\n OutsidePublic.scrollToAnchor(scrollToAnchorElementId);\n }\n static highlightTextWithinElement($element, searchText) {\n $element.contents().each(function () {\n if (this.nodeType === Node.TEXT_NODE) {\n const text = this.textContent || \"\";\n const replacedText = text.replace(new RegExp(searchText, \"ig\"), (match) => {\n return `${match}`;\n });\n const tempElement = document.createRange().createContextualFragment(replacedText);\n if (this.parentNode) {\n this.parentNode.replaceChild(tempElement, this);\n }\n }\n else if (this instanceof HTMLElement) {\n JavascriptSearch.highlightTextWithinElement($(this), searchText);\n }\n });\n }\n}\nJavascriptSearch.onSubmitSearchForm = (e, formId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength = 1, doHighlight = true) => {\n e.preventDefault();\n try {\n JavascriptSearch.searchClick(url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength, doHighlight);\n }\n catch (exception) {\n if (exception instanceof Error) {\n console.log(exception.message);\n }\n else {\n console.log(\"An unknown error occurred\", exception);\n }\n }\n return false;\n};\nJavascriptSearch.onSearchValueChanged = (event, formId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength = 1, doHighlight = true) => {\n var doSearch = true;\n if (doSearch === true) {\n doSearch = false;\n window.setTimeout(() => { doSearch = true; }, 300);\n return JavascriptSearch.onSubmitSearchForm(event, formId, url, searchFieldId, singleElementWrapperSelector, singleElementContentToSearchSelector, noResultsElementShowId, scrollToAnchorElementId, defaultMinLength, doHighlight);\n }\n};\nwindow.JavascriptSearch = JavascriptSearch;\n","export class NotificationManager {\n constructor() {\n this.callbacks = new Map();\n }\n registerCallback(name, callback) {\n this.callbacks.set(name, callback);\n }\n executeCallback(callback) {\n if (typeof callback === 'string' || callback instanceof String)\n callback = this.callbacks.get(callback);\n if (callback)\n return callback();\n return null;\n }\n notifyCustom(options) {\n let me = this;\n let swalOptions = SwalEx.getDefaultSwalOptions(options.title, null, options.message, null, options.id, options.buttons);\n swalOptions.allowEscapeKey = options.allowClose;\n swalOptions.allowOutsideClick = options.allowClose;\n swalOptions.willOpen = function () {\n let inputsToValidate = $(`#${options.id}${0}`).closest('#swal2-html-container').find('input');\n inputsToValidate.on('change', function () {\n NotificationManager.enableDisableButtons(options.id, options.buttons, null, options.validate, options.disableNonSubmitButtonsWhenInvalid);\n });\n NotificationManager.enableDisableButtons(options.id, options.buttons, null, options.validate, options.disableNonSubmitButtonsWhenInvalid);\n NotificationManager.registerExecuteCallback(me, options.id, options.buttons, null, options.validate, options.disableNonSubmitButtonsWhenInvalid);\n };\n swalOptions.willClose = function () {\n if (options.onCloseCallbackName != null) {\n me.executeCallback(options.onCloseCallbackName);\n }\n };\n Swal.fire(swalOptions);\n }\n startNotifyCustomOnReady(options) {\n let me = this;\n $(document).ready(function () {\n me.notifyCustom(options);\n });\n }\n static enableButton($button) {\n $button.removeClass('icon-button-disabled');\n }\n static disableButton($button) {\n $button.addClass('icon-button-disabled');\n }\n static enableDisableButtons(buttonIdBase, buttons, inputId, validate, disableNonSubmitButtonsWhenInvalid) {\n if (disableNonSubmitButtonsWhenInvalid == null || disableNonSubmitButtonsWhenInvalid == undefined)\n disableNonSubmitButtonsWhenInvalid = true;\n let isValid = !validate || validate();\n if (isValid === true && inputId) {\n var input = $(`#${inputId}`);\n input.removeClass('error');\n var errorMessage = input.siblings('[data-message]');\n errorMessage.attr('data-message', 'hidden');\n }\n for (var b = 0; b < buttons.length; b++) {\n let $button = $(`#${buttonIdBase + b}`);\n if (validate) {\n if (isValid === true) {\n if (buttons[b].IsConfirm)\n NotificationManager.enableButton($button);\n else if (disableNonSubmitButtonsWhenInvalid)\n NotificationManager.disableButton($button);\n }\n else if (isValid === false) {\n if (buttons[b].IsConfirm)\n NotificationManager.disableButton($button);\n else if (disableNonSubmitButtonsWhenInvalid)\n NotificationManager.enableButton($button);\n }\n else {\n if (buttons[b].IsConfirm)\n NotificationManager.disableButton($button);\n else if (disableNonSubmitButtonsWhenInvalid)\n NotificationManager.disableButton($button);\n }\n }\n else {\n $button.removeClass('icon-button-disabled');\n }\n }\n }\n static registerExecuteCallback(me, buttonIdBase, buttons, inputId, validate, disableNonSubmitButtonsWhenInvalid) {\n if (disableNonSubmitButtonsWhenInvalid == null || disableNonSubmitButtonsWhenInvalid == undefined)\n disableNonSubmitButtonsWhenInvalid = true;\n for (var b = 0; b < buttons.length; b++) {\n $('#' + buttonIdBase + b).on('click', function () {\n let isValid = !validate || validate();\n let button = buttons[+this.id.slice(-1)];\n if (button.IsConfirm) {\n if (!validate || isValid === true) {\n Swal.close();\n me.executeCallback(button.Callback);\n }\n else {\n if (inputId) {\n var input = $('#' + inputId);\n input.addClass('error');\n input.focus();\n var errorMessage = input.siblings('[data-message]');\n errorMessage.attr('data-message', 'error');\n }\n }\n }\n else {\n if (validate && isValid !== false && disableNonSubmitButtonsWhenInvalid) {\n return;\n }\n Swal.close();\n me.executeCallback(button.Callback);\n }\n });\n }\n }\n toastCustom(options) {\n let me = this;\n if (options.cssIconClass === null || options.cssIconClass === undefined) {\n options.cssIconClass = NotificationManager.InfoCssIcon;\n }\n if (options.timer === null)\n options.timer = undefined;\n Swal.fire({\n position: 'bottom-end',\n html: '
' + '
' + options.message + '
',\n showCancelButton: false,\n showConfirmButton: false,\n showClass: {\n popup: 'swal2-show',\n backdrop: 'swal2-backdrop-show',\n icon: 'swal2-icon-show'\n },\n hideClass: {\n popup: 'swal2-hide',\n backdrop: 'swal2-backdrop-hide',\n icon: 'swal2-icon-hide'\n },\n toast: true,\n showCloseButton: true,\n timer: options.timer,\n willClose: function () {\n if (options.onCloseCallbackName != null) {\n me.executeCallback(options.onCloseCallbackName);\n }\n }\n });\n }\n startToastOnReady(message, cssIconClass, delay = 500) {\n let me = this;\n let callback = () => me.toastCustom({\n message: message,\n onCloseCallbackName: null,\n cssIconClass: cssIconClass,\n timer: null\n });\n $(document).ready(() => {\n if (!window.performance ||\n !window.performance.navigation ||\n window.performance.navigation.type !== window.performance.navigation.TYPE_BACK_FORWARD) {\n window.setTimeout(callback, delay);\n }\n });\n }\n startToastOnModalClose(dialogId, onModalCloseToastMessageAttributeName, cssIconClass, cssIconClassAdditionAttributeName = null, delay = 500) {\n let me = this;\n $('#' + dialogId).on('hidden.bs.modal', () => {\n let message = parent.window.document.body.getAttribute(onModalCloseToastMessageAttributeName);\n parent.window.document.body.setAttribute(onModalCloseToastMessageAttributeName, '');\n if (cssIconClassAdditionAttributeName) {\n let cssIconClassAddition = parent.window.document.body.getAttribute(cssIconClassAdditionAttributeName);\n parent.window.document.body.setAttribute(cssIconClassAdditionAttributeName, '');\n cssIconClass = (cssIconClass ?? '') + ' ' + cssIconClassAddition;\n }\n if (message && message.length > 0) {\n if (!window.performance ||\n !window.performance.navigation ||\n window.performance.navigation.type !== window.performance.navigation.TYPE_BACK_FORWARD) {\n window.setTimeout(() => me.toastCustom({\n message: message,\n onCloseCallbackName: null,\n cssIconClass: cssIconClass,\n timer: null\n }), delay);\n }\n }\n });\n }\n static validateInput(inputId, inputRegEx) {\n var value = $(`#${inputId}`).val();\n var regex = new RegExp(inputRegEx, 'g');\n let isValid = value != null && value != undefined && value.length > 0 && (!inputRegEx || regex.test(value));\n if (!isValid && value != null && value != undefined && value.length > 0)\n isValid = null;\n return isValid;\n }\n requireUserInput(options) {\n if (!options.inputId)\n options.inputId = 'userInput' + Math.floor(Math.random() * 10000);\n let buttonIdBase = options.inputId + '_button_';\n let input = SwalEx.createInput(options.inputId, options.errorMessage, options.maxLength, options.inputPrefix);\n if (!options.callbackExecutor)\n options.callbackExecutor = this;\n let swalOptions = SwalEx.getDefaultSwalOptions(options.title, null, options.message, input, buttonIdBase, options.buttons);\n swalOptions.allowEscapeKey = options.allowClose;\n swalOptions.allowOutsideClick = options.allowClose;\n if (options.isRedTitle && swalOptions.customClass)\n swalOptions.customClass.title = (swalOptions.customClass.title ?? '') + ' danger-color';\n swalOptions.willOpen = function () {\n $('#' + options.inputId).on('keyup', function (event) {\n if (event.which === 13 || event.keyCode === 13) {\n for (var b = 0; b < options.buttons.length; b++) {\n if (options.buttons[b].IsConfirm) {\n $('#' + buttonIdBase + b).click();\n return;\n }\n }\n }\n });\n let validate = function () { return NotificationManager.validateInput(options.inputId, options.inputRegEx); };\n $('#' + options.inputId).on('keyup', function () {\n NotificationManager.enableDisableButtons(buttonIdBase, options.buttons, options.inputId, validate, options.disableNonSubmitButtonsWhenInvalid);\n });\n NotificationManager.enableDisableButtons(buttonIdBase, options.buttons, options.inputId, validate, options.disableNonSubmitButtonsWhenInvalid);\n NotificationManager.registerExecuteCallback(options.callbackExecutor, buttonIdBase, options.buttons, options.inputId, validate, options.disableNonSubmitButtonsWhenInvalid);\n };\n if (options.onCloseCallbackName) {\n swalOptions.willClose = function () {\n options.callbackExecutor.executeCallback(options.onCloseCallbackName);\n };\n }\n Swal.fire(swalOptions);\n }\n ;\n}\nNotificationManager.SuccessCssIcon = 'fal fa-square-check status-success';\nNotificationManager.InfoCssIcon = 'fal fa-info-square';\nNotificationManager.WarningCssIcon = 'fal fa-triangle-exclamation status-warning';\nNotificationManager.ErrorCssIcon = 'fal fa-square-xmark status-error';\nexport class NotificationOptionsBase {\n constructor() {\n this.disableNonSubmitButtonsWhenInvalid = true;\n }\n}\nexport class NotifyCustomOptions extends NotificationOptionsBase {\n}\nexport class UserInputOptions extends NotificationOptionsBase {\n}\nexport class ToastOptions {\n constructor() {\n this.timer = undefined;\n }\n}\nwindow.NotificationManager = NotificationManager;\n","import { NotificationManager } from './notificationManager';\nimport { ErrorReporter } from './ErrorReporter';\nexport class OutsidePublic {\n static scrollToAnchor(scrollToId) {\n let aTag = $('#' + scrollToId);\n let offset = aTag?.offset();\n if (offset) {\n $('html,body').animate({ scrollTop: offset.top }, 'slow');\n }\n }\n static lockCheck(clickedElement, textWhileProcessing) {\n if ($(clickedElement).data('locked') === 1)\n return null;\n $(clickedElement).attr('locked', 1);\n var innerHtml = $(clickedElement).html();\n $(clickedElement).html(textWhileProcessing);\n return innerHtml;\n }\n static onSuccessCb(successMessage, idToHideOnSuccess, onSuccessIconCssClass, elementToPlaceSuccessMessage) {\n $('#' + idToHideOnSuccess).hide();\n if (elementToPlaceSuccessMessage !== null) {\n elementToPlaceSuccessMessage.html(successMessage);\n }\n var notificationManager = new NotificationManager();\n notificationManager.toastCustom({\n message: successMessage,\n onCloseCallbackName: null,\n cssIconClass: onSuccessIconCssClass,\n timer: null\n });\n }\n static onErrorCb(errorMessage, clickedElement, clickedElementInnerHtml, elementToPlaceSuccessMessage, elementToPlaceSuccessMessageInnerHtml, onErrorIconCssClass) {\n $(clickedElement).attr('locked', 0);\n if (clickedElementInnerHtml !== null) {\n $(clickedElement).html(clickedElementInnerHtml);\n }\n if (elementToPlaceSuccessMessageInnerHtml !== null &&\n elementToPlaceSuccessMessage !== null) {\n elementToPlaceSuccessMessage.html(elementToPlaceSuccessMessageInnerHtml);\n }\n window.grecaptcha.reset();\n var notificationManager = new NotificationManager();\n notificationManager.toastCustom({\n message: errorMessage,\n onCloseCallbackName: null,\n cssIconClass: onErrorIconCssClass,\n timer: null\n });\n }\n static executeAjaxCall(url, data, onSuccess, onError, defaultErrorMessage) {\n if (url.endsWith('/'))\n url = url.substring(0, url.length - 1);\n $.ajax({\n url: url,\n method: \"POST\",\n contentType: 'application/json',\n data: (typeof data !== 'string') ? JSON.stringify(data) : data,\n dataType: \"json\",\n error: function (res) {\n console.log(res);\n ErrorReporter.ReportAjaxError(url, data, res);\n if (onError)\n onError(defaultErrorMessage);\n },\n success: function (res) {\n if (res.Succeeded) {\n if (onSuccess)\n onSuccess(res.ErrorMessage);\n }\n else {\n if (onError)\n onError(res.ErrorMessage);\n }\n }\n });\n }\n static subscribeClick(url, emailId, idToHideOnSuccess, idToPlaceSuccessMessage, onSuccessIconCssClass, onErrorIconCssClass, defaultErrorMessage, textWhileProcessing) {\n var email = $('#' + emailId).val();\n var form = $(FormUtils.getForm($('#' + emailId)[0]));\n var clickedElement = form.find(':submit')[0];\n var captchaValue = form.find('.g-recaptcha-response').val();\n if (form.valid() && email.length > 0) {\n var clickedElementInnerHtml = OutsidePublic.lockCheck(clickedElement, textWhileProcessing);\n if (clickedElementInnerHtml === null) {\n return;\n }\n var elementToPlaceSuccessMessage = $('#' + idToPlaceSuccessMessage);\n var elementToPlaceSuccessMessageInnerHtml = elementToPlaceSuccessMessage.html();\n OutsidePublic.subscribe(url, email, captchaValue, successMessage => {\n OutsidePublic.onSuccessCb(successMessage, idToHideOnSuccess, onSuccessIconCssClass, elementToPlaceSuccessMessage);\n }, errorMessage => {\n OutsidePublic.onErrorCb(errorMessage, clickedElement, clickedElementInnerHtml, elementToPlaceSuccessMessage, elementToPlaceSuccessMessageInnerHtml, onErrorIconCssClass);\n }, defaultErrorMessage);\n }\n }\n static subscribe(url, subscribeEmail, gRecaptchaResponse, onSuccess, onError, defaultErrorMessage) {\n var data = {\n SimpleValue: subscribeEmail,\n GRecaptchaResponse: gRecaptchaResponse\n };\n OutsidePublic.executeAjaxCall(url, data, onSuccess, onError, defaultErrorMessage);\n }\n}\n","import * as PDFObject from 'pdfobject';\nexport class OverlayManager {\n constructor(overlayId = 'overlay', hideOnClick = true) {\n let me = this;\n let overlayElement = document.getElementById(overlayId);\n if (overlayElement == null) {\n overlayElement = document.createElement('div');\n overlayElement.id = overlayId;\n }\n this.OverlayElement = overlayElement;\n this.OverlayElement.className += ' overlay';\n if (hideOnClick) {\n this.OverlayElement.className += \" overlay-hide-on-click\";\n this.OverlayElement.onclick = function () { me.hide(); };\n }\n document.body.appendChild(this.OverlayElement);\n }\n show() {\n this.OverlayElement.style.display = \"block\";\n }\n hide() {\n this.OverlayElement.style.display = \"none\";\n }\n}\nclass ClosableOverlayManager extends OverlayManager {\n constructor(contentId = 'overlay-content', hideOnClick = true) {\n super(contentId + '-parent', hideOnClick);\n let me = this;\n let closeButtonId = `${this.OverlayElement.id}-close-button`;\n this.ContentWrapperId = `${this.OverlayElement.id}-content-wrapper`;\n this.OverlayElement.innerHTML = `
`;\n document.getElementById(closeButtonId).onclick = function () { me.hide(); };\n let contentWrapperElement = document.getElementById(this.ContentWrapperId);\n let contentElement = document.getElementById(contentId);\n if (contentWrapperElement && contentElement) {\n contentWrapperElement.appendChild(contentElement);\n }\n }\n}\nexport class PdfOverlayManager extends ClosableOverlayManager {\n constructor(url, overlayId = 'overlay', hideOnClick = true) {\n super(overlayId, hideOnClick);\n this.IsLoaded = true;\n this._isShown = false;\n let contentWrapperElement = document.getElementById(this.ContentWrapperId);\n contentWrapperElement.className += ' pdf-renderer';\n this._url = url;\n }\n show() {\n if (!this._isShown) {\n try {\n let me = this;\n this._isShown = true;\n var options = {\n forceIframe: BrowserDetector.IsSafari\n };\n PDFObject.embed(this._url, `#${this.ContentWrapperId}`, options);\n let $embed = $(`#${this.ContentWrapperId} embed, #${this.ContentWrapperId} iframe`);\n if ($embed.length > 0) {\n this.IsLoaded = false;\n $embed.on('load', function () {\n me.IsLoaded = true;\n PleaseWait.hide();\n });\n }\n }\n catch (ex) {\n console.error(ex);\n }\n }\n if (!this.IsLoaded)\n PleaseWait.show();\n super.show();\n }\n}\nwindow.ClosableOverlayManager = ClosableOverlayManager;\nwindow.OverlayMananger = OverlayManager;\nwindow.PdfOverlayManager = PdfOverlayManager;\n","export class PleaseWait {\n static show() {\n let url = PleaseWait.imageUrl ?? window.loadingImg?.src;\n let html = url ? `` : \"Please wait...\";\n let swalOptions = {\n title: '',\n html: html,\n showConfirmButton: false,\n showCancelButton: false,\n showCloseButton: false,\n allowOutsideClick: false,\n allowEscapeKey: false,\n customClass: {\n container: 'pleaseWait-container',\n },\n showClass: {\n popup: '',\n icon: ''\n },\n hideClass: {\n popup: '',\n },\n };\n Swal.fire(swalOptions);\n }\n static hide(callback) {\n Swal.close();\n if (callback != null) {\n callback();\n }\n }\n}\nwindow.PleaseWait = PleaseWait;\n","\"use strict\";\r\n\r\n\r\nfunction showPriceData(numberOfItemsElementId, price) {\r\n\tvar priceText = '';\r\n\r\n\tif (price) {\r\n\t\tif (price.InsteadOfGrossPrice && price.InsteadOfGrossPrice > price.GrossPrice) {\r\n\t\t\tpriceText += '' + price.Currency + ' ' + GlobalizeEx.formatAmountSafe(price.InsteadOfGrossPrice) + '
';\r\n\t\t}\r\n\t\tpriceText += price.Currency + ' ' + GlobalizeEx.formatAmountSafe(price.GrossPrice);\r\n\t}\r\n\t$('#' + numberOfItemsElementId + '_Price').html(priceText);\r\n\r\n\tif (price && price.InsteadOfGrossPrice > price.GrossPrice && price.ValidTo) {\r\n\t\t$('#' + numberOfItemsElementId + '_ValidTo').html(GlobalizeEx.formatDateSafe(price.ValidTo));\r\n\t} else {\r\n\t\t$('#' + numberOfItemsElementId + '_ValidTo').html('');\r\n\t}\r\n}\r\n\r\n// For the dropdown when selection is made from it\r\nfunction registerNumberOfItemsSelectionChanged(selectedItemPriceElementId, numberOfItemsElementId, prices) {\r\n\t$('#' + selectedItemPriceElementId).change(function () {\r\n\t\tvar price = null;\r\n\r\n\t\tvar val = $(this).val();\r\n\t\tif (val) {\r\n\t\t\tprice = prices[String(val)];\r\n\t\t}\r\n\t\tshowPriceData(numberOfItemsElementId, price);\r\n\t});\r\n}\r\n\r\n// For the text box when the number of items is entered in it\r\nfunction registerNumberOfItemsValueChanged(numberOfItemsElementId, prices) {\r\n\tvar priceCalculator = new PriceCalculator(prices);\r\n\t$('#' + numberOfItemsElementId).on('input', function () {\r\n\t\tvar price = null;\r\n\t\tvar val = $(this).val();\r\n\t\ttry {\r\n\t\t\tvar numberOfItems = parseInt(val);\r\n\t\t\tvar price = priceCalculator.calculatePriceForNumberOfItems(numberOfItems);\r\n\t\t} catch (err) {\r\n\t\t}\r\n\r\n\t\tshowPriceData(numberOfItemsElementId, price);\r\n\t});\r\n}","import { fixFormDataAsObject } from './generalTS';\nimport { ErrorReporter } from './ErrorReporter';\nexport class SelectizeEx {\n static createSelectizeOptions(elementId, url, selectizeOptions) {\n if (selectizeOptions.render && selectizeOptions.render.option)\n eval(\"selectizeOptions.render.option = \" + selectizeOptions.render.option);\n if (selectizeOptions.render && selectizeOptions.render.optgroup_header)\n eval(\"selectizeOptions.render.optgroup_header = \" + selectizeOptions.render.optgroup_header);\n if (selectizeOptions.onInitialize)\n eval(\"selectizeOptions.onInitialize = \" + selectizeOptions.onInitialize);\n if (selectizeOptions.onChange)\n eval(\"selectizeOptions.onChange = \" + selectizeOptions.onChange);\n if (selectizeOptions.createAddObject)\n eval(\"selectizeOptions.createAddObject = \" + selectizeOptions.createAddObject);\n if (selectizeOptions.createFunc)\n eval(\"selectizeOptions.create = \" + selectizeOptions.createFunc);\n if (url) {\n selectizeOptions.load = function (query, callback) {\n let data = $(\".selectize-data\").serializeArray();\n data.push({\n name: \"Query\",\n value: query\n });\n if (GeolocationEx.geoCoords) {\n data.push({\n name: \"Latitude\",\n value: GeolocationEx.geoCoords.latitude.toString()\n });\n data.push({\n name: \"Longitude\",\n value: GeolocationEx.geoCoords.longitude.toString()\n });\n }\n let dataAsRecord = fixFormDataAsObject(data);\n let tryCount = 1;\n let retryLimit = 3;\n $.ajax({\n url: url,\n method: \"POST\",\n contentType: 'application/json',\n data: JSON.stringify(dataAsRecord),\n dataType: \"json\",\n error: function (res) {\n if (url.indexOf(\"api/PeL/aircraft/search\") > 0 || url.indexOf(\"api/PeL/airports/search\") > 0) {\n dataAsRecord[\"tryCount\"] = tryCount.toString();\n ErrorReporter.ReportAjaxError(url, dataAsRecord, res);\n if (tryCount <= retryLimit) {\n tryCount++;\n $.ajax(this);\n return;\n }\n }\n else {\n ErrorReporter.ReportAjaxError(url, dataAsRecord, res);\n }\n callback();\n },\n success: function (res) {\n if (query && selectizeOptions.createAddObject) {\n let addObject = selectizeOptions.createAddObject(query);\n addObject.CssClass = 'add';\n addObject.Group = 'Add';\n res.unshift(addObject);\n SelectizeEx.getSelectizeObjectFor(elementId)?.clearOptions();\n }\n callback(res);\n }\n });\n };\n }\n let selectizeObject = $('#' + elementId).selectize(selectizeOptions)[0].selectize;\n SelectizeEx.selectizeObjects.set(elementId.toLowerCase(), selectizeObject);\n $.validator.defaults.ignore += `:not(#${elementId})`;\n selectizeObject.on('change', function () { $(`#${elementId}`).valid(); });\n return selectizeObject;\n }\n ;\n static getSelectizeObjectFor(elementId) {\n return SelectizeEx.selectizeObjects.get(elementId.toLowerCase());\n }\n static clearOptions() {\n SelectizeEx.selectizeObjects.forEach((value, key, map) => {\n value.clearOptions();\n });\n }\n}\nSelectizeEx.selectizeObjects = new Map();\nclass ReducedHeightSelectize {\n static adjustPadding() {\n $('.selectize-control.reduced-height-selectize > div.selectize-input')\n .each(function () {\n let jQthis = $(this);\n let height = jQthis.outerHeight(false);\n let innerDivItem = jQthis.children('div.item');\n let innerHeight = null;\n if (innerDivItem.length) {\n innerHeight = $(jQthis.children('div.item')[0]).outerHeight(true);\n }\n else {\n innerHeight = $(jQthis.children('input')[0]).outerHeight(true);\n }\n if (height && innerHeight) {\n let padding = (height - innerHeight) / 2;\n jQthis.css('padding-top', padding + 'px');\n }\n });\n }\n static registerAdjustPadding() {\n ReducedHeightSelectize.adjustPadding();\n if (!ReducedHeightSelectize.registeredAdjustPadding) {\n $(window).resize(ReducedHeightSelectize.adjustPadding);\n ReducedHeightSelectize.registeredAdjustPadding = true;\n }\n }\n ;\n}\nReducedHeightSelectize.registeredAdjustPadding = false;\nwindow.SelectizeEx = SelectizeEx;\nwindow.ReducedHeightSelectize = ReducedHeightSelectize;\n$(document).ready(function () {\n $(\".selectize-data\").change(function () {\n SelectizeEx.clearOptions();\n });\n window.selectizeExGetSelectizeObjectFor = SelectizeEx.getSelectizeObjectFor;\n});\n","\"use strict\";\r\n\r\n$(document).ready(function () {\r\n\t$('#sidebarCollapseButton').on('click', function () {\r\n\t\ttry {\r\n\t\t\tvar wrapper = $('.sidebar-wrapper');\r\n\t\t\tvar newClass = '';\r\n\r\n\t\t\tif (wrapper.hasClass('full-collapsed-sidebar')) { // Full to collapsed\r\n\t\t\t\tnewClass = 'collapsed-sidebar';\r\n\t\t\t} else if (wrapper.hasClass('collapsed-sidebar')) { // Collapsed to normal\r\n\r\n\t\t\t} else { // Normal to collapsed\r\n\t\t\t\tnewClass = 'collapsed-sidebar';\r\n\t\t\t}\r\n\r\n\t\t\twrapper.removeClass('full-collapsed-sidebar');\r\n\t\t\twrapper.removeClass('collapsed-sidebar');\r\n\t\t\tif (newClass) {\r\n\t\t\t\twrapper.addClass(newClass);\r\n\t\t\t}\r\n\r\n\t\t\t// Do not save anything on mobile\r\n\t\t\tif (window.matchMedia('(min-width: 768px)').matches) {\r\n\t\t\t\tsetCookieValue('AppSettings', 'SidebarState', newClass);\r\n\t\t\t} else {\r\n\t\t\t\tsetCookieValue('AppSettings', 'SidebarState', null);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(e);\r\n\t\t}\r\n\t});\r\n\r\n\t$('#sidebarFullCollapseButton').on('click', function () {\r\n\t\ttry {\r\n\t\t\tvar wrapper = $('.sidebar-wrapper');\r\n\t\t\tvar newClass = '';\r\n\r\n\t\t\tif (wrapper.hasClass('full-collapsed-sidebar')) {\t// Full to normal\r\n\r\n\t\t\t} else if (wrapper.hasClass('collapsed-sidebar')) {\t// Collapsed to full\r\n\t\t\t\tnewClass = 'full-collapsed-sidebar';\r\n\t\t\t} else {\t// Normal to full\r\n\t\t\t\tnewClass = 'full-collapsed-sidebar';\r\n\t\t\t}\r\n\r\n\t\t\twrapper.removeClass('full-collapsed-sidebar');\r\n\t\t\twrapper.removeClass('collapsed-sidebar');\r\n\t\t\tif (newClass) {\r\n\t\t\t\twrapper.addClass(newClass);\r\n\t\t\t}\r\n\t\t\t// Do not save anything on mobile\r\n\t\t\tif (window.matchMedia('(min-width: 768px)').matches) {\r\n\t\t\t\tsetCookieValue('AppSettings', 'SidebarState', newClass);\r\n\t\t\t} else {\r\n\t\t\t\tsetCookieValue('AppSettings', 'SidebarState', null);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(e);\r\n\t\t}\r\n\t});\r\n});\r\n\r\nwindow.stripQueryParamsAndTrailingSlash = function(url) {\r\n\tif (url) {\r\n\t\turl = url.split(/[?#]/)[0];\t// Remove query parameters and hash addresses\r\n\t\tif (url.substr(-1) == '/') {\r\n\t\t\treturn url.substr(0, url.length - 1);\r\n\t\t}\r\n\t}\r\n\treturn url;\r\n}\r\n\r\n/* Sets the active class to the active sidebar nav element */\r\nwindow.setActiveSidebarElement = function () {\r\n\ttry {\r\n\r\n\t\tvar url = window.location.pathname;\r\n\t\tvar activePage = stripQueryParamsAndTrailingSlash(url);\r\n\r\n\t\tvar activePageLink$ = $(`#sidebar li > a[href='${url}']`);\r\n\t\tvar activePageLevel = activePageLink$ ? activePageLink$.parentsUntil('#sidebar', 'li').length : 0;\r\n\t\t$('#sidebar li > a').each(function () {\r\n\t\t\ttry {\r\n\t\t\t\tvar page = stripQueryParamsAndTrailingSlash($(this).attr('href'));\r\n\t\t\t\tif (!page)\r\n\t\t\t\t\tpage = '@#$@%^@&';\t// Random that will never match\r\n\r\n\t\t\t\t// Do not highlight any pages (except the active one) at the same level in the sidebar\r\n\t\t\t\tvar pageLevel = $(this).parentsUntil('#sidebar', 'li').length;\r\n\t\t\t\tif (pageLevel == activePageLevel && activePage != page)\r\n\t\t\t\t\treturn true;\t// Exit the jquery each function but continue with the next (= continue); return false would be = break\r\n\r\n\t\t\t\tvar alternativePagesStr = stripQueryParamsAndTrailingSlash($(this).attr('data-prefix-for-active'));\r\n\t\t\t\tvar alternativePagesArr = [];\r\n\t\t\t\tif (alternativePagesStr)\r\n\t\t\t\t\talternativePagesArr = alternativePagesStr.split(',');\r\n\r\n\t\t\t\tif (activePage == page || alternativePagesArr.some(alternativePage => activePage == alternativePage) || (\r\n\t\t\t\t\t((activePage.startsWith(page + '/') || alternativePagesArr.some(alternativePage => activePage.startsWith(alternativePage + '/'))) && !activePage.includes('endorsements/licenseview') /* Otherwise at license view both endorsements and license view are highlighted at the same time */) &&\r\n\t\t\t\t\t// Special cases for controllers with default actions\r\n\t\t\t\t\t// Do not match the settings default page for any controllers in the settings subarea, but match specific settings pages to the settings main page\r\n\t\t\t\t\t(!page.endsWith('settings') || activePage.includes('settings/settings/')) &&\r\n\t\t\t\t\t!page.endsWith('about') &&\r\n\t\t\t\t\t(!page.endsWith('useraccount') || activePage.includes('useraccount/emails/') || activePage.includes('useraccount/manageaccount/'))\r\n\t\t\t\t)) {\r\n\t\t\t\t\tvar isDeepestLevel = true;\r\n\r\n\t\t\t\t\tvar current = $(this).parent();\r\n\t\t\t\t\twhile (current.attr('id') != 'sidebar') {\r\n\t\t\t\t\t\tif (current.is('li')) {\r\n\t\t\t\t\t\t\tif (isDeepestLevel)\r\n\t\t\t\t\t\t\t\tcurrent.addClass('active');\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent.addClass('main-active');\r\n\t\t\t\t\t\t\tisDeepestLevel = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (current.hasClass('collapse')) {\t// Open the parent of the element if any\r\n\t\t\t\t\t\t\tcurrent\r\n\t\t\t\t\t\t\t\t.on('shown.bs.collapse', function () {\r\n\t\t\t\t\t\t\t\t\t$(this).removeClass('no-transition');\t// Reenable transitions\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.addClass('no-transition')\t\t\t\t\t// Disable transitions for this operation\r\n\t\t\t\t\t\t\t\t.collapse('show');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrent = current.parent();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log(e);\r\n\t\t\t}\r\n\t\t});\r\n\t} catch (e) {\r\n\t\tconsole.log(e);\r\n\t}\r\n}","export function isNullOrWhiteSpace(str) {\n return !str || /^\\s*$/.test(str);\n}\nwindow.isNullOrWhiteSpace = isNullOrWhiteSpace;\nString.prototype.lpad = function (padString, length) {\n var str = this;\n while (str.length < length)\n str = padString + str;\n return str;\n};\nString.prototype.trimChars = function (c) {\n c = c.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n var regEx = new RegExp(\"^[\" + c + \"]+|[\" + c + \"]+$\", \"g\");\n return this.replace(regEx, \"\");\n};\nString.prototype.encodeForHtml = function () {\n var elt = document.createElement('span');\n elt.textContent = this;\n return elt.innerHTML\n .replace(/\\r\\n/g, \"
\")\n .replace(/\\r/g, \"
\")\n .replace(/\\n/g, \"
\");\n};\nString.prototype.supplant = function (o) {\n return this.replace(/{([^{}]*)}/g, function (a, b) {\n var r = o[b];\n return typeof r === 'string' || typeof r === 'number' ? r : a;\n });\n};\n","export class SwalEx {\n static createMessage(icon, text) {\n if (icon && text)\n return `

${text}

`;\n if (text)\n return `
${text}
`;\n return ``;\n }\n static createButton(id, icon, text, cssClass, disabled) {\n return `\r\n\t\t\t\r\n\t\t\t
${text}
`;\n }\n static createInput(id, errorMessage, maxlength, prefix) {\n if (!prefix)\n prefix = '';\n return `
${prefix}
0 ? `maxlength=\"${maxlength}\"` : '')}>
${errorMessage}
`;\n }\n static getDefaultSwalOptions(title, icon, message, htmlBetweenMessageAndButtons, buttonsIdBase, buttons) {\n let html = this.createMessage(icon, message);\n if (htmlBetweenMessageAndButtons)\n html += htmlBetweenMessageAndButtons;\n if (buttons && buttons.length > 0) {\n html += '
';\n for (var i = 0; i < buttons.length; i++) {\n if (buttons[i].ButtonText) {\n if (buttonsIdBase == null) {\n buttonsIdBase = '';\n }\n html += this.createButton((buttonsIdBase) + i, buttons[i].ButtonIcon, buttons[i].ButtonText, buttons[i].CssClass, false);\n }\n }\n html += '
';\n }\n let swalOptions = {\n title: title,\n html: html,\n showConfirmButton: false,\n showCancelButton: false,\n showCloseButton: false,\n allowOutsideClick: false,\n allowEscapeKey: false,\n customClass: {\n container: 'swal-custom-container',\n },\n showClass: {\n popup: 'animated animate__fadeInLeft'\n },\n hideClass: {\n popup: 'animated animate__fadeOutRight'\n }\n };\n return swalOptions;\n }\n static alertCustom(title, message, thenFunction, alertOnly, icon) {\n let buttons = [];\n let okButton = new SwalExButton();\n okButton.ButtonIcon = 'fal fa-square-check';\n okButton.ButtonText = SwalEx.okButtonText;\n if (thenFunction)\n okButton.Callback = () => { thenFunction(true); return null; };\n buttons.push(okButton);\n if (!alertOnly) {\n let cancelButton = new SwalExButton();\n cancelButton.ButtonIcon = 'fal fa-square-xmark';\n cancelButton.ButtonText = SwalEx.cancelButtonText;\n cancelButton.CssClass = 'icon-button-danger';\n if (thenFunction)\n cancelButton.Callback = () => { thenFunction(false); return null; };\n buttons.push(cancelButton);\n }\n let buttonIdPrefix = 'alertCustomButton';\n let swalOptions = SwalEx.getDefaultSwalOptions(title, icon, message, null, buttonIdPrefix, buttons);\n swalOptions.willOpen = () => {\n for (var j = 0; j < buttons.length; j++) {\n let button = buttons[j];\n $(`#${buttonIdPrefix}${j}`).on('click', () => {\n Swal.close();\n button.Callback();\n });\n }\n };\n Swal.fire(swalOptions);\n }\n static alertSuccessCustom(title, message) {\n Swal.fire(title, message, 'success');\n }\n}\nexport class SwalExButton {\n constructor() {\n this.InitiallyHidden = false;\n }\n}\nwindow.SwalEx = SwalEx;\nwindow.SwalExButton = SwalExButton;\n","/* Wizard functions */\r\n\"use strict\";\r\n\r\nwindow.wizardPrevPage = function () {\r\n\tdoNotWarnOnPageLeave();\r\n\t$(\"#WizardPageCommand\").val(\"prev\");\r\n\t$(\"form\")[0].submit();\r\n};\r\n\r\nwindow.wizardNextPage = function () {\r\n\tif ($(\"form\").valid()) {\r\n\t\tdoNotWarnOnPageLeave();\r\n\t\t$(\"#WizardPageCommand\").val(\"next\");\r\n\t\t$(\"form\")[0].submit();\r\n\t}\r\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_require__(\"./ts/notificationManager.ts\");\n__webpack_require__(\"./ts/prices.js\");\n__webpack_require__(\"./ts/outsidePublic.ts\");\n__webpack_require__(\"./ts/javascriptSearch.ts\");\n__webpack_require__(\"./ts/swalEx.ts\");\n__webpack_require__(\"./ts/form.js\");\n__webpack_require__(\"./ts/formUtils.ts\");\n__webpack_require__(\"./ts/animation.ts\");\n__webpack_require__(\"./ts/sidebar.js\");\n__webpack_require__(\"./ts/overlay.ts\");\n__webpack_require__(\"./ts/browserDetector.ts\");\n__webpack_require__(\"./ts/general.js\");\n__webpack_require__(\"./ts/generalTS.ts\");\n__webpack_require__(\"./ts/dialog.ts\");\n__webpack_require__(\"./ts/stringExtensions.ts\");\n__webpack_require__(\"./ts/ErrorReporter.ts\");\n__webpack_require__(\"./ts/pleaseWait.ts\");\n__webpack_require__(\"./ts/wizard.js\");\n__webpack_require__(\"./ts/selectize.ts\");\n__webpack_require__(\"./ts/cookie.js\");\n__webpack_require__(\"./ts/fileUpload.ts\");\n__webpack_require__(\"./ts/controlExtensions.js\");\n__webpack_require__(\"./ts/Validation/ConditionalRequiredAttribute.validation.js\");\n__webpack_require__(\"./ts/Validation/validators.js\");\n__webpack_require__(\"./css/checkbox.css\");\n__webpack_require__(\"./css/dialog.css\");\n__webpack_require__(\"./css/foca.css\");\n__webpack_require__(\"./css/landingpage.css\");\n__webpack_require__(\"./css/overlay.css\");\n__webpack_require__(\"./css/PleaseWait.css\");\n__webpack_require__(\"./css/sidebar.css\");\n__webpack_require__(\"./css/site.css\");\n__webpack_require__(\"./css/swal2.css\");\n__webpack_require__(\"./css/Components/Collapsable.css\");\nvar __webpack_exports__ = __webpack_require__(\"./css/Components/ListViewWithFlexbox.css\");\n",""],"names":[],"sourceRoot":""}