{"version":3,"file":"tango.bundle.js","mappings":";;;;;;AAAA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA,CAAC,qBAAM,KAAK,mBAAO,CAAC,IAAQ;AAC5B,qBAAM;AACN,qBAAM,UAAU,mBAAO,CAAC,IAAa;AACrC,mBAAO,CAAC,IAAW;AACnB,mBAAO,CAAC,IAAU;AAClB,mBAAO,CAAC,IAAiB;AACzB,qBAAM,WAAW,mBAAO,CAAC,IAAoB;AAC7C;AACA,mBAAO,CAAC,IAAsB;AAC9B,mBAAO,CAAC,IAAiC;AACzC,mBAAO,CAAC,IAAyB;AACjC,mBAAO,CAAC,IAAqC;AAC7C,mBAAO,CAAC,IAAoC;AAC5C,mBAAO,CAAC,IAAmC;AAC3C,mBAAO,CAAC,IAA0C;AAClD,mBAAO,CAAC,IAAqC;AAC7C,mBAAO,CAAC,GAAqB;AAC7B,mBAAO,CAAC,IAAkC;AAC1C,mBAAO,CAAC,IAAuB;AAC/B,mBAAO,CAAC,IAA6B;AACrC,mBAAO,CAAC,IAAkC;AAC1C,mBAAO,CAAC,IAAyB;;;;;;;ACrBjC;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,0FAA0F;AAC1F;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,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;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,0BAA0B,MAAM;AAChC;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,uBAAuB;AACvB;AACA,GAAG,gCAAgC;AACnC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,GAAG,mCAAmC;AACtC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,GAAG;AACH;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,GAAG;AACH;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,kBAAkB,OAAO;AACzB;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;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;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,iCAAiC;AACjC;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,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,GAAG;AACH;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,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;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,4BAA4B;AAC5B;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;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;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,KAAK;AACL;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;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,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;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,QAAQ,sCAAsC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,MAAM;AACjC;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,oCAAoC;AACpC,8CAA8C;AAC9C,wCAAwC;AACxC,mBAAmB;AACnB;AACA;AACA;AACA,sBAAsB;AACtB,mCAAmC;AACnC,6CAA6C;AAC7C,uCAAuC;AACvC,mBAAmB;AACnB;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,uBAAuB;AACvB;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,uFAAuF,OAAO;AAC9F;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,uBAAuB;AACvB;AACA,eAAe;AACf;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,6BAA6B;AAC7B,4BAA4B;AAC5B,6BAA6B;AAC7B,4BAA4B;AAC5B;AACA,oCAAoC;AACpC,qCAAqC;AACrC,cAAc;AACd;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,qEAAqE;AACrE,gBAAgB;AAChB,gBAAgB;AAChB,gDAAgD;AAChD,2CAA2C;AAC3C,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB,eAAe;AACf;AACA;AACA,kCAAkC;AAClC,eAAe;AACf,iBAAiB;AACjB;AACA;AACA,yCAAyC,uBAAuB;AAChE;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iCAAiC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3xDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,kDAAkD;AAClD;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;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;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,CAAC;;;;;;;AC7ND;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,4BAA4B;AAC5B,4BAA4B;AAC5B;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;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;;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,eAAe;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD,mCAAmC,kBAAkB;AACrD,0CAA0C,WAAW;AACrD,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mCAAmC,+CAA+C;AAClF;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;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,MAAM;AACN,MAAM;AACN;AACA;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,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,yBAAyB;AACzB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE;AACN;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;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;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,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;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;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,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACjhBD;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;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;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;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,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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;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,kBAAkB;AAClB;AACA;AACA;AACA,cAAc;AACd;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,kBAAkB;AAClB;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,IAAI;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,cAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;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,8BAA8B,SAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,SAAS;AAC3C;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,oCAAoC,oBAAoB;AACxD;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,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;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,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC,iBAAiB;AAClD;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,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,6DAA6D,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,eAAe;AACzF;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;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;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;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc,OAAO;AACrB;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,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,SAAS;AACT;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;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,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACpgDD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qCAAqC;AACjF;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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;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,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;AClHD;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,uDAAuD,oBAAoB;AAC3E,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;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,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;;;;;;;AClID;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;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;AACA;AACA;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;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;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;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;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;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjaA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;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,kDAAkD,QAAQ,qEAAqE;AAC/H;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;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;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,iDAAiD,qBAAqB;AACtE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;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;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uDAAuD;AAC3G;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;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;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,+EAA+E,OAAO;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,QAAQ,0EAA0E;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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;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,oBAAoB,0BAA0B;AAC9C;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,yBAAyB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD,GAAG;AACH;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,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,uBAAuB,sBAAsB;AAC7C;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,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,IAAI;AACJ;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA,oBAAoB,2CAA2C;AAC/D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;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;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;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,mBAAmB,mBAAmB;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,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;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,kBAAkB,mBAAmB;AACrC;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;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,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;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;AACA;AACA,uCAAuC,QAAQ;AAC/C;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,6BAA6B;AACnF,KAAK;AACL,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,mDAAmD,wBAAwB;AAC3E;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,6BAA6B;AACnF,KAAK;AACL,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,oDAAoD,wBAAwB;AAC5E;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;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,IAAI;AACJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA,uDAAuD,0CAA0C;AACjG;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,GAAG;AACH;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;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACjaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,sBAAsB,+BAA+B,iCAAiC;AACtF;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;;;;;;;ACvDD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,oCAAoC,gDAAgD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kEAAkE;AAClE,kCAAkC,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,2DAA2D,2CAA2C;AACtG,GAAG;AACH;AACA,2DAA2D,4CAA4C;AACvG,GAAG;AACH;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,6BAA6B,mCAAmC,QAAQ;AACxE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA,GAAG;AACH;AACA,kBAAkB;AAClB;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,GAAG;AACH;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA,wCAAwC,wBAAwB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,0BAA0B,yBAAyB;AACnD,GAAG;AACH;AACA,sCAAsC,WAAW;AACjD,GAAG;AACH;AACA;AACA;AACA,uCAAuC;AACvC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,YAAY;AACZ;AACA,eAAe;AACf;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,+DAA+D,wBAAwB;AACvF;AACA,kBAAkB;AAClB,qEAAqE,wBAAwB;AAC7F;AACA;AACA;AACA;AACA;AACA,iEAAiE,2DAA2D;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAe;AAC1D,GAAG;AACH;AACA,2CAA2C,wFAAwF;AACnI;AACA,yDAAyD,2CAA2C;AACpG;AACA,0DAA0D,2CAA2C;AACrG,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,2BAA2B;AAC5F;AACA,uDAAuD,4BAA4B;AACnF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC,iEAAiE,2BAA2B;AAC5F;AACA;AACA;AACA;AACA,iEAAiE,2BAA2B;AAC5F;AACA,uDAAuD,2BAA2B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;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;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,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;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,GAAG;AACH;AACA;AACA,uEAAuE,iDAAiD;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2CAA2C,uDAAuD;AAClG;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,sDAAsD,uDAAuD;AAC7G;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;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;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,+BAA+B,uCAAuC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,KAAK;AACL;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;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,6EAA6E,OAAO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;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,GAAG;AACH;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,6EAA6E,OAAO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA,WAAW;AACX;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;AACA;AACA;AACA,wCAAwC,cAAc;AACtD;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;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;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,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA,6DAA6D,oDAAoD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;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;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,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qCAAqC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAA8C;AAC1E;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;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,gCAAgC;AAChC;AACA,KAAK,qCAAqC;AAC1C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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,uBAAuB;AACvB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,sDAAsD;AAChH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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,GAAG;AACH;AACA;AACA,CAAC;AACD;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;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,gBAAgB;AAChB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACv/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAsB;AAC/D,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA,CAAC;;;;;;UCtDD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA,kBAAkB,qBAAqB;WACvC;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC3BA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;;;;UEhDA;UACA;UACA;UACA;UACA","sources":["webpack:///../node_modules/moment-mini/locale/ sync ^\\.\\/.*$","webpack:///../tango.index.js","webpack:///../../../TangoCS/Tango.Client.Js/src/calendar/calendar_stripped.js","webpack:///../../../TangoCS/Tango.Client.Js/src/calendar/calendarcontrol.js","webpack:///../../../TangoCS/Tango.Client.Js/src/calendar/lang/calendar-ru.js","webpack:///../../../TangoCS/Tango.Client.Js/src/contextmenu/contextmenu.js","webpack:///../../../TangoCS/Tango.Client.Js/src/daterangepicker/daterangepicker.js","webpack:///../../../TangoCS/Tango.Client.Js/src/jquery/jquery.btnswitch.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/contextmenuproxy.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/daterangepickerproxy.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/dialog.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/listview.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/selectdialog.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/tabs.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/tango.js","webpack:///../../../TangoCS/Tango.Client.Js/src/tango/tangohub.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/node module decorator","webpack:///webpack/runtime/runtimeId","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/before-startup","webpack:///webpack/startup","webpack:///webpack/after-startup"],"sourcesContent":["var map = {\n\t\"./locale\": 9738,\n\t\"./locale.js\": 9738\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6138;","global.$ = require('jquery')\r\nglobal.jQuery = $;\r\nglobal.moment = require('moment-mini');\r\nrequire('js-cookie');\r\nrequire('tablednd');\r\nrequire('form-serializer');\r\nglobal.signalR = require(\"@microsoft/signalr\");\r\n\r\nrequire('Tango/tango/tango.js');\r\nrequire('Tango/tango/contextmenuproxy.js');\r\nrequire('Tango/tango/listview.js');\r\nrequire('Tango/calendar/calendar_stripped.js');\r\nrequire('Tango/calendar/lang/calendar-ru.js');\r\nrequire('Tango/calendar/calendarcontrol.js');\r\nrequire('Tango/daterangepicker/daterangepicker.js');\r\nrequire('Tango/tango/daterangepickerproxy.js');\r\nrequire('Tango/tango/tabs.js');\r\nrequire('Tango/contextmenu/contextmenu.js');\r\nrequire('Tango/tango/dialog.js');\r\nrequire('Tango/tango/selectdialog.js');\r\nrequire('Tango/jquery/jquery.btnswitch.js');\r\nrequire('Tango/tango/tangohub.js');","/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo\r\n * -----------------------------------------------------------\r\n *\r\n * The DHTML Calendar, version 1.0 \"It is happening again\"\r\n *\r\n * Details and latest version at:\r\n * www.dynarch.com/projects/calendar\r\n *\r\n * This script is developed by Dynarch.com. Visit us at www.dynarch.com.\r\n *\r\n * This script is distributed under the GNU Lesser General Public License.\r\n * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html\r\n */\r\n\r\n// $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $\r\n\r\n/** The Calendar object constructor. */\r\nCalendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {\r\n\t// member variables\r\n\tthis.activeDiv = null;\r\n\tthis.currentDateEl = null;\r\n\tthis.getDateStatus = null;\r\n\tthis.getDateToolTip = null;\r\n\tthis.getDateText = null;\r\n\tthis.timeout = null;\r\n\tthis.onSelected = onSelected || null;\r\n\tthis.onClose = onClose || null;\r\n\tthis.dragging = false;\r\n\tthis.hidden = false;\r\n\tthis.minYear = 1970;\r\n\tthis.maxYear = 2050;\r\n\tthis.dateFormat = Calendar._TT[\"DEF_DATE_FORMAT\"];\r\n\tthis.ttDateFormat = Calendar._TT[\"TT_DATE_FORMAT\"];\r\n\tthis.isPopup = true;\r\n\tthis.weekNumbers = true;\r\n\tthis.firstDayOfWeek = typeof firstDayOfWeek == \"number\" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.\r\n\tthis.showsOtherMonths = false;\r\n\tthis.dateStr = dateStr;\r\n\tthis.ar_days = null;\r\n\tthis.showsTime = false;\r\n\tthis.time24 = true;\r\n\tthis.yearStep = 2;\r\n\tthis.hiliteToday = true;\r\n\tthis.multiple = null;\r\n\t// HTML elements\r\n\tthis.table = null;\r\n\tthis.element = null;\r\n\tthis.tbody = null;\r\n\tthis.firstdayname = null;\r\n\t// Combo boxes\r\n\tthis.monthsCombo = null;\r\n\tthis.yearsCombo = null;\r\n\tthis.hilitedMonth = null;\r\n\tthis.activeMonth = null;\r\n\tthis.hilitedYear = null;\r\n\tthis.activeYear = null;\r\n\t// Information\r\n\tthis.dateClicked = false;\r\n\r\n\t// one-time initializations\r\n\tif (typeof Calendar._SDN == \"undefined\") {\r\n\t\t// table of short day names\r\n\t\tif (typeof Calendar._SDN_len == \"undefined\")\r\n\t\t\tCalendar._SDN_len = 3;\r\n\t\tvar ar = new Array();\r\n\t\tfor (var i = 8; i > 0;) {\r\n\t\t\tar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);\r\n\t\t}\r\n\t\tCalendar._SDN = ar;\r\n\t\t// table of short month names\r\n\t\tif (typeof Calendar._SMN_len == \"undefined\")\r\n\t\t\tCalendar._SMN_len = 3;\r\n\t\tar = new Array();\r\n\t\tfor (var i = 12; i > 0;) {\r\n\t\t\tar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);\r\n\t\t}\r\n\t\tCalendar._SMN = ar;\r\n\t}\r\n};\r\n\r\n// ** constants\r\n\r\n/// \"static\", needed for event handlers.\r\nCalendar._C = null;\r\n\r\n// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate\r\n// library, at some point.\r\n\r\nCalendar.getAbsolutePos = function (el) {\r\n // 20.01.2021 Fixed calendar positioning bug\r\n var rect = el.getBoundingClientRect();\r\n var win = el.ownerDocument.defaultView;\r\n return {\r\n y: rect.top + win.pageYOffset,\r\n x: rect.left + win.pageXOffset\r\n };\r\n /*\r\n\tvar SL = 0, ST = 0;\r\n\tvar is_div = /^div$/i.test(el.tagName);\r\n\tif (is_div && el.scrollLeft)\r\n\t\tSL = el.scrollLeft;\r\n\tif (is_div && el.scrollTop)\r\n\t\tST = el.scrollTop;\r\n\tvar r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };\r\n\tif (el.offsetParent) {\r\n\t\tvar tmp = this.getAbsolutePos(el.offsetParent);\r\n\t\tr.x += tmp.x;\r\n\t\tr.y += tmp.y;\r\n\t}\r\n\treturn r;*/\r\n};\r\n\r\nCalendar.isRelated = function (el, evt) {\r\n\tvar related = evt.relatedTarget;\r\n\tif (!related) {\r\n\t\tvar type = evt.type;\r\n\t\tif (type == \"mouseover\") {\r\n\t\t\trelated = evt.fromElement;\r\n\t\t} else if (type == \"mouseout\") {\r\n\t\t\trelated = evt.toElement;\r\n\t\t}\r\n\t}\r\n\twhile (related) {\r\n\t\tif (related == el) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\trelated = related.parentNode;\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nCalendar.removeClass = function (el, className) {\r\n\tif (!(el && el.className)) {\r\n\t\treturn;\r\n\t}\r\n\tvar cls = el.className.split(\" \");\r\n\tvar ar = new Array();\r\n\tfor (var i = cls.length; i > 0;) {\r\n\t\tif (cls[--i] != className) {\r\n\t\t\tar[ar.length] = cls[i];\r\n\t\t}\r\n\t}\r\n\tel.className = ar.join(\" \");\r\n};\r\n\r\nCalendar.addClass = function (el, className) {\r\n\tCalendar.removeClass(el, className);\r\n\tel.className += \" \" + className;\r\n};\r\n\r\n// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately.\r\nCalendar.getElement = function (ev) {\r\n\tvar f = ev.currentTarget;\r\n\twhile (f.nodeType != 1 || /^div$/i.test(f.tagName))\r\n\t\tf = f.parentNode;\r\n\treturn f;\r\n};\r\n\r\nCalendar.getTargetElement = function (ev) {\r\n\tvar f = ev.target;\r\n\twhile (f.nodeType != 1)\r\n\t\tf = f.parentNode;\r\n\treturn f;\r\n};\r\n\r\nCalendar.stopEvent = function (ev) {\r\n\tev || (ev = window.event);\r\n\tev.preventDefault();\r\n\tev.stopPropagation();\r\n\treturn false;\r\n};\r\n\r\nCalendar.addEvent = function (el, evname, func) {\r\n\tif (el.attachEvent) { // IE\r\n\t\tel.attachEvent(\"on\" + evname, func);\r\n\t} else if (el.addEventListener) { // Gecko / W3C\r\n\t\tel.addEventListener(evname, func, true);\r\n\t} else {\r\n\t\tel[\"on\" + evname] = func;\r\n\t}\r\n};\r\n\r\nCalendar.removeEvent = function (el, evname, func) {\r\n\tif (el.detachEvent) { // IE\r\n\t\tel.detachEvent(\"on\" + evname, func);\r\n\t} else if (el.removeEventListener) { // Gecko / W3C\r\n\t\tel.removeEventListener(evname, func, true);\r\n\t} else {\r\n\t\tel[\"on\" + evname] = null;\r\n\t}\r\n};\r\n\r\nCalendar.createElement = function (type, parent) {\r\n\tvar el = null;\r\n\tif (document.createElementNS) {\r\n\t\t// use the XHTML namespace; IE won't normally get here unless\r\n\t\t// _they_ \"fix\" the DOM2 implementation.\r\n\t\tel = document.createElementNS(\"http://www.w3.org/1999/xhtml\", type);\r\n\t} else {\r\n\t\tel = document.createElement(type);\r\n\t}\r\n\tif (typeof parent != \"undefined\") {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n\treturn el;\r\n};\r\n\r\n// END: UTILITY FUNCTIONS\r\n\r\n// BEGIN: CALENDAR STATIC FUNCTIONS\r\n\r\n/** Internal -- adds a set of events to make some element behave like a button. */\r\nCalendar._add_evs = function (el) {\r\n\twith (Calendar) {\r\n\t\taddEvent(el, \"mouseover\", dayMouseOver);\r\n\t\taddEvent(el, \"mousedown\", dayMouseDown);\r\n\t\taddEvent(el, \"mouseout\", dayMouseOut);\r\n\t}\r\n};\r\n\r\nCalendar.findMonth = function (el) {\r\n\tif (typeof el.month != \"undefined\") {\r\n\t\treturn el;\r\n\t} else if (typeof el.parentNode.month != \"undefined\") {\r\n\t\treturn el.parentNode;\r\n\t}\r\n\treturn null;\r\n};\r\n\r\nCalendar.findYear = function (el) {\r\n\tif (typeof el.year != \"undefined\") {\r\n\t\treturn el;\r\n\t} else if (typeof el.parentNode.year != \"undefined\") {\r\n\t\treturn el.parentNode;\r\n\t}\r\n\treturn null;\r\n};\r\n\r\nCalendar.showMonthsCombo = function () {\r\n\tvar cal = Calendar._C;\r\n\tif (!cal) {\r\n\t\treturn false;\r\n\t}\r\n\tvar cal = cal;\r\n\tvar cd = cal.activeDiv;\r\n\tvar mc = cal.monthsCombo;\r\n\tif (cal.hilitedMonth) {\r\n\t\tCalendar.removeClass(cal.hilitedMonth, \"hilite\");\r\n\t}\r\n\tif (cal.activeMonth) {\r\n\t\tCalendar.removeClass(cal.activeMonth, \"active\");\r\n\t}\r\n\tvar mon = cal.monthsCombo.getElementsByTagName(\"div\")[cal.date.getMonth()];\r\n\tCalendar.addClass(mon, \"active\");\r\n\tcal.activeMonth = mon;\r\n\tvar s = mc.style;\r\n\ts.display = \"block\";\r\n\tif (cd.navtype < 0)\r\n\t\ts.left = cd.offsetLeft + \"px\";\r\n\telse {\r\n\t\tvar mcw = mc.offsetWidth;\r\n\t\tif (typeof mcw == \"undefined\")\r\n\t\t\t// Konqueror brain-dead techniques\r\n\t\t\tmcw = 50;\r\n\t\ts.left = (cd.offsetLeft + cd.offsetWidth - mcw) + \"px\";\r\n\t}\r\n\ts.top = (cd.offsetTop + cd.offsetHeight) + \"px\";\r\n};\r\n\r\nCalendar.showYearsCombo = function (fwd) {\r\n\tvar cal = Calendar._C;\r\n\tif (!cal) {\r\n\t\treturn false;\r\n\t}\r\n\tvar cal = cal;\r\n\tvar cd = cal.activeDiv;\r\n\tvar yc = cal.yearsCombo;\r\n\tif (cal.hilitedYear) {\r\n\t\tCalendar.removeClass(cal.hilitedYear, \"hilite\");\r\n\t}\r\n\tif (cal.activeYear) {\r\n\t\tCalendar.removeClass(cal.activeYear, \"active\");\r\n\t}\r\n\tcal.activeYear = null;\r\n\tvar Y = cal.date.getFullYear() + (fwd ? 1 : -1);\r\n\tvar yr = yc.firstChild;\r\n\tvar show = false;\r\n\tfor (var i = 12; i > 0; --i) {\r\n\t\tif (Y >= cal.minYear && Y <= cal.maxYear) {\r\n\t\t\tyr.innerHTML = Y;\r\n\t\t\tyr.year = Y;\r\n\t\t\tyr.style.display = \"block\";\r\n\t\t\tshow = true;\r\n\t\t} else {\r\n\t\t\tyr.style.display = \"none\";\r\n\t\t}\r\n\t\tyr = yr.nextSibling;\r\n\t\tY += fwd ? cal.yearStep : -cal.yearStep;\r\n\t}\r\n\tif (show) {\r\n\t\tvar s = yc.style;\r\n\t\ts.display = \"block\";\r\n\t\tif (cd.navtype < 0)\r\n\t\t\ts.left = cd.offsetLeft + \"px\";\r\n\t\telse {\r\n\t\t\tvar ycw = yc.offsetWidth;\r\n\t\t\ts.left = (cd.offsetLeft + cd.offsetWidth - ycw) + \"px\";\r\n\t\t}\r\n\t\ts.top = (cd.offsetTop + cd.offsetHeight) + \"px\";\r\n\t}\r\n};\r\n\r\n// event handlers\r\n\r\nCalendar.tableMouseUp = function (ev) {\r\n\tvar cal = Calendar._C;\r\n\tif (!cal) {\r\n\t\treturn false;\r\n\t}\r\n\tif (cal.timeout) {\r\n\t\tclearTimeout(cal.timeout);\r\n\t}\r\n\tvar el = cal.activeDiv;\r\n\tif (!el) {\r\n\t\treturn false;\r\n\t}\r\n\tvar target = Calendar.getTargetElement(ev);\r\n\tev || (ev = window.event);\r\n\tCalendar.removeClass(el, \"active\");\r\n\tif (target == el || target.parentNode == el) {\r\n\t\tCalendar.cellClick(el, ev);\r\n\t}\r\n\tvar mon = Calendar.findMonth(target);\r\n\tvar date = null;\r\n\tif (mon) {\r\n\t\tdate = new Date(cal.date);\r\n\t\tif (mon.month != date.getMonth()) {\r\n\t\t\tdate.setMonth(mon.month);\r\n\t\t\tcal.setDate(date);\r\n\t\t\tcal.dateClicked = false;\r\n\t\t\tcal.callHandler();\r\n\t\t}\r\n\t} else {\r\n\t\tvar year = Calendar.findYear(target);\r\n\t\tif (year) {\r\n\t\t\tdate = new Date(cal.date);\r\n\t\t\tif (year.year != date.getFullYear()) {\r\n\t\t\t\tdate.setFullYear(year.year);\r\n\t\t\t\tcal.setDate(date);\r\n\t\t\t\tcal.dateClicked = false;\r\n\t\t\t\tcal.callHandler();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\twith (Calendar) {\r\n\t\tremoveEvent(document, \"mouseup\", tableMouseUp);\r\n\t\tremoveEvent(document, \"mouseover\", tableMouseOver);\r\n\t\tremoveEvent(document, \"mousemove\", tableMouseOver);\r\n\t\tcal._hideCombos();\r\n\t\t_C = null;\r\n\t\treturn stopEvent(ev);\r\n\t}\r\n};\r\n\r\nCalendar.tableMouseOver = function (ev) {\r\n\tvar cal = Calendar._C;\r\n\tif (!cal) {\r\n\t\treturn;\r\n\t}\r\n\tvar el = cal.activeDiv;\r\n\tvar target = Calendar.getTargetElement(ev);\r\n\tif (target == el || target.parentNode == el) {\r\n\t\tCalendar.addClass(el, \"hilite active\");\r\n\t\tCalendar.addClass(el.parentNode, \"rowhilite\");\r\n\t} else {\r\n\t\tif (typeof el.navtype == \"undefined\" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2)))\r\n\t\t\tCalendar.removeClass(el, \"active\");\r\n\t\tCalendar.removeClass(el, \"hilite\");\r\n\t\tCalendar.removeClass(el.parentNode, \"rowhilite\");\r\n\t}\r\n\tev || (ev = window.event);\r\n\tif (el.navtype == 50 && target != el) {\r\n\t\tvar pos = Calendar.getAbsolutePos(el);\r\n\t\tvar w = el.offsetWidth;\r\n\t\tvar x = ev.clientX;\r\n\t\tvar dx;\r\n\t\tvar decrease = true;\r\n\t\tif (x > pos.x + w) {\r\n\t\t\tdx = x - pos.x - w;\r\n\t\t\tdecrease = false;\r\n\t\t} else\r\n\t\t\tdx = pos.x - x;\r\n\r\n\t\tif (dx < 0) dx = 0;\r\n\t\tvar range = el._range;\r\n\t\tvar current = el._current;\r\n\t\tvar count = Math.floor(dx / 10) % range.length;\r\n\t\tfor (var i = range.length; --i >= 0;)\r\n\t\t\tif (range[i] == current)\r\n\t\t\t\tbreak;\r\n\t\twhile (count-- > 0)\r\n\t\t\tif (decrease) {\r\n\t\t\t\tif (--i < 0)\r\n\t\t\t\t\ti = range.length - 1;\r\n\t\t\t} else if (++i >= range.length)\r\n\t\t\t\ti = 0;\r\n\t\tvar newval = range[i];\r\n\t\tel.innerHTML = newval;\r\n\r\n\t\tcal.onUpdateTime();\r\n\t}\r\n\tvar mon = Calendar.findMonth(target);\r\n\tif (mon) {\r\n\t\tif (mon.month != cal.date.getMonth()) {\r\n\t\t\tif (cal.hilitedMonth) {\r\n\t\t\t\tCalendar.removeClass(cal.hilitedMonth, \"hilite\");\r\n\t\t\t}\r\n\t\t\tCalendar.addClass(mon, \"hilite\");\r\n\t\t\tcal.hilitedMonth = mon;\r\n\t\t} else if (cal.hilitedMonth) {\r\n\t\t\tCalendar.removeClass(cal.hilitedMonth, \"hilite\");\r\n\t\t}\r\n\t} else {\r\n\t\tif (cal.hilitedMonth) {\r\n\t\t\tCalendar.removeClass(cal.hilitedMonth, \"hilite\");\r\n\t\t}\r\n\t\tvar year = Calendar.findYear(target);\r\n\t\tif (year) {\r\n\t\t\tif (year.year != cal.date.getFullYear()) {\r\n\t\t\t\tif (cal.hilitedYear) {\r\n\t\t\t\t\tCalendar.removeClass(cal.hilitedYear, \"hilite\");\r\n\t\t\t\t}\r\n\t\t\t\tCalendar.addClass(year, \"hilite\");\r\n\t\t\t\tcal.hilitedYear = year;\r\n\t\t\t} else if (cal.hilitedYear) {\r\n\t\t\t\tCalendar.removeClass(cal.hilitedYear, \"hilite\");\r\n\t\t\t}\r\n\t\t} else if (cal.hilitedYear) {\r\n\t\t\tCalendar.removeClass(cal.hilitedYear, \"hilite\");\r\n\t\t}\r\n\t}\r\n\treturn Calendar.stopEvent(ev);\r\n};\r\n\r\nCalendar.tableMouseDown = function (ev) {\r\n\tif (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {\r\n\t\treturn Calendar.stopEvent(ev);\r\n\t}\r\n};\r\n\r\nCalendar.calDragIt = function (ev) {\r\n\tvar cal = Calendar._C;\r\n\tif (!(cal && cal.dragging)) {\r\n\t\treturn false;\r\n\t}\r\n\tvar posX;\r\n\tvar posY;\r\n\tposX = ev.pageX;\r\n\tposY = ev.pageY;\r\n\tvar st = cal.element.style;\r\n\tst.left = (posX - cal.xOffs) + \"px\";\r\n\tst.top = (posY - cal.yOffs) + \"px\";\r\n\treturn Calendar.stopEvent(ev);\r\n};\r\n\r\nCalendar.calDragEnd = function (ev) {\r\n\tvar cal = Calendar._C;\r\n\tif (!cal) {\r\n\t\treturn false;\r\n\t}\r\n\tcal.dragging = false;\r\n\twith (Calendar) {\r\n\t\tremoveEvent(document, \"mousemove\", calDragIt);\r\n\t\tremoveEvent(document, \"mouseup\", calDragEnd);\r\n\t\ttableMouseUp(ev);\r\n\t}\r\n};\r\n\r\nCalendar.dayMouseDown = function (ev) {\r\n\tvar el = Calendar.getElement(ev);\r\n\tif (el.disabled) {\r\n\t\treturn false;\r\n\t}\r\n\tvar cal = el.calendar;\r\n\tcal.activeDiv = el;\r\n\tCalendar._C = cal;\r\n\tif (el.navtype != 300) with (Calendar) {\r\n\t\tif (el.navtype == 50) {\r\n\t\t\tel._current = el.innerHTML;\r\n\t\t\taddEvent(document, \"mousemove\", tableMouseOver);\r\n\t\t} else\r\n\t\t\taddEvent(document, \"mouseover\", tableMouseOver);\r\n\t\taddClass(el, \"hilite active\");\r\n\t\taddEvent(document, \"mouseup\", tableMouseUp);\r\n\t} else if (cal.isPopup) {\r\n\t\tcal._dragStart(ev);\r\n\t}\r\n\tif (el.navtype == -1 || el.navtype == 1) {\r\n\t\tif (cal.timeout) clearTimeout(cal.timeout);\r\n\t\tcal.timeout = setTimeout(\"Calendar.showMonthsCombo()\", 250);\r\n\t} else if (el.navtype == -2 || el.navtype == 2) {\r\n\t\tif (cal.timeout) clearTimeout(cal.timeout);\r\n\t\tcal.timeout = setTimeout((el.navtype > 0) ? \"Calendar.showYearsCombo(true)\" : \"Calendar.showYearsCombo(false)\", 250);\r\n\t} else {\r\n\t\tcal.timeout = null;\r\n\t}\r\n\treturn Calendar.stopEvent(ev);\r\n};\r\n\r\nCalendar.dayMouseDblClick = function (ev) {\r\n\tCalendar.cellClick(Calendar.getElement(ev), ev || window.event);\r\n};\r\n\r\nCalendar.dayMouseOver = function (ev) {\r\n\tvar el = Calendar.getElement(ev);\r\n\tif (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {\r\n\t\treturn false;\r\n\t}\r\n\tif (el.ttip) {\r\n\t\tif (el.ttip.substr(0, 1) == \"_\") {\r\n\t\t\tel.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);\r\n\t\t}\r\n\t\tel.calendar.tooltips.innerHTML = el.ttip;\r\n\t}\r\n\tif (el.navtype != 300) {\r\n\t\tCalendar.addClass(el, \"hilite\");\r\n\t\tif (el.caldate) {\r\n\t\t\tCalendar.addClass(el.parentNode, \"rowhilite\");\r\n\t\t}\r\n\t}\r\n\treturn Calendar.stopEvent(ev);\r\n};\r\n\r\nCalendar.dayMouseOut = function (ev) {\r\n\twith (Calendar) {\r\n\t\tvar el = getElement(ev);\r\n\t\tif (isRelated(el, ev) || _C || el.disabled)\r\n\t\t\treturn false;\r\n\t\tremoveClass(el, \"hilite\");\r\n\t\tif (el.caldate)\r\n\t\t\tremoveClass(el.parentNode, \"rowhilite\");\r\n\t\tif (el.calendar)\r\n\t\t\tel.calendar.tooltips.innerHTML = _TT[\"SEL_DATE\"];\r\n\t\treturn stopEvent(ev);\r\n\t}\r\n};\r\n\r\n/**\r\n * A generic \"click\" handler :) handles all types of buttons defined in this\r\n * calendar.\r\n */\r\nCalendar.cellClick = function (el, ev) {\r\n\tvar cal = el.calendar;\r\n\tvar closing = false;\r\n\tvar newdate = false;\r\n\tvar date = null;\r\n\tif (typeof el.navtype == \"undefined\") {\r\n\t\tif (cal.currentDateEl) {\r\n\t\t\tCalendar.removeClass(cal.currentDateEl, \"selected\");\r\n\t\t\tCalendar.addClass(el, \"selected\");\r\n\t\t\tclosing = (cal.currentDateEl == el);\r\n\t\t\tif (!closing) {\r\n\t\t\t\tcal.currentDateEl = el;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcal.date.setDateOnly(el.caldate);\r\n\t\tdate = cal.date;\r\n\t\tvar other_month = !(cal.dateClicked = !el.otherMonth);\r\n\t\tif (!other_month && !cal.currentDateEl)\r\n\t\t\tcal._toggleMultipleDate(new Date(date));\r\n\t\telse\r\n\t\t\tnewdate = !el.disabled;\r\n\t\t// a date was clicked\r\n\t\tif (other_month)\r\n\t\t\tcal._init(cal.firstDayOfWeek, date);\r\n\t} else {\r\n\t\tif (el.navtype == 200) {\r\n\t\t\tCalendar.removeClass(el, \"hilite\");\r\n\t\t\tcal.callCloseHandler();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdate = new Date(cal.date);\r\n\t\tif (el.navtype == 0)\r\n\t\t\tdate.setDateOnly(new Date()); // TODAY\r\n\t\t// unless \"today\" was clicked, we assume no date was clicked so\r\n\t\t// the selected handler will know not to close the calenar when\r\n\t\t// in single-click mode.\r\n\t\t// cal.dateClicked = (el.navtype == 0);\r\n\t\tcal.dateClicked = false;\r\n\t\tvar year = date.getFullYear();\r\n\t\tvar mon = date.getMonth();\r\n\t\tfunction setMonth(m) {\r\n\t\t\tvar day = date.getDate();\r\n\t\t\tvar max = date.getMonthDays(m);\r\n\t\t\tif (day > max) {\r\n\t\t\t\tdate.setDate(max);\r\n\t\t\t}\r\n\t\t\tdate.setMonth(m);\r\n\t\t};\r\n\t\tswitch (el.navtype) {\r\n\t\t\tcase 400:\r\n\t\t\t\tCalendar.removeClass(el, \"hilite\");\r\n\t\t\t\tvar text = Calendar._TT[\"ABOUT\"];\r\n\t\t\t\tif (typeof text != \"undefined\") {\r\n\t\t\t\t\ttext += cal.showsTime ? Calendar._TT[\"ABOUT_TIME\"] : \"\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// FIXME: this should be removed as soon as lang files get updated!\r\n\t\t\t\t\ttext = \"Help and about box text is not translated into this language.\\n\" +\r\n\t\t\t\t\t\t\"If you know this language and you feel generous please update\\n\" +\r\n\t\t\t\t\t\t\"the corresponding file in \\\"lang\\\" subdir to match calendar-en.js\\n\" +\r\n\t\t\t\t\t\t\"and send it back to to get it into the distribution ;-)\\n\\n\" +\r\n\t\t\t\t\t\t\"Thank you!\\n\" +\r\n\t\t\t\t\t\t\"http://dynarch.com/mishoo/calendar.epl\\n\";\r\n\t\t\t\t}\r\n\t\t\t\talert(text);\r\n\t\t\t\treturn;\r\n\t\t\tcase -2:\r\n\t\t\t\tif (year > cal.minYear) {\r\n\t\t\t\t\tdate.setFullYear(year - 1);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase -1:\r\n\t\t\t\tif (mon > 0) {\r\n\t\t\t\t\tsetMonth(mon - 1);\r\n\t\t\t\t} else if (year-- > cal.minYear) {\r\n\t\t\t\t\tdate.setFullYear(year);\r\n\t\t\t\t\tsetMonth(11);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1:\r\n\t\t\t\tif (mon < 11) {\r\n\t\t\t\t\tsetMonth(mon + 1);\r\n\t\t\t\t} else if (year < cal.maxYear) {\r\n\t\t\t\t\tdate.setFullYear(year + 1);\r\n\t\t\t\t\tsetMonth(0);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 2:\r\n\t\t\t\tif (year < cal.maxYear) {\r\n\t\t\t\t\tdate.setFullYear(year + 1);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 100:\r\n\t\t\t\tcal.setFirstDayOfWeek(el.fdow);\r\n\t\t\t\treturn;\r\n\t\t\tcase 50:\r\n\t\t\t\tvar range = el._range;\r\n\t\t\t\tvar current = el.innerHTML;\r\n\t\t\t\tfor (var i = range.length; --i >= 0;)\r\n\t\t\t\t\tif (range[i] == current)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\tif (ev && ev.shiftKey) {\r\n\t\t\t\t\tif (--i < 0)\r\n\t\t\t\t\t\ti = range.length - 1;\r\n\t\t\t\t} else if (++i >= range.length)\r\n\t\t\t\t\ti = 0;\r\n\t\t\t\tvar newval = range[i];\r\n\t\t\t\tel.innerHTML = newval;\r\n\t\t\t\tcal.onUpdateTime();\r\n\t\t\t\treturn;\r\n\t\t\tcase 0:\r\n\t\t\t\t// TODAY will bring us here\r\n\t\t\t\tif ((typeof cal.getDateStatus == \"function\") &&\r\n\t\t\t\t\tcal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (!date.equalsTo(cal.date)) {\r\n\t\t\tcal.setDate(date);\r\n\t\t\tnewdate = true;\r\n\t\t} else if (el.navtype == 0)\r\n\t\t\tnewdate = closing = true;\r\n\t}\r\n\tif (newdate) {\r\n\t\tev && cal.callHandler();\r\n\t}\r\n\tif (closing) {\r\n\t\tCalendar.removeClass(el, \"hilite\");\r\n\t\tev && cal.callCloseHandler();\r\n\t}\r\n};\r\n\r\n// END: CALENDAR STATIC FUNCTIONS\r\n\r\n// BEGIN: CALENDAR OBJECT FUNCTIONS\r\n\r\n/**\r\n * This function creates the calendar inside the given parent. If _par is\r\n * null than it creates a popup calendar inside the BODY element. If _par is\r\n * an element, be it BODY, then it creates a non-popup calendar (still\r\n * hidden). Some properties need to be set before calling this function.\r\n */\r\nCalendar.prototype.create = function (_par) {\r\n\tvar parent = null;\r\n\tif (!_par) {\r\n\t\t// default parent is the document body, in which case we create\r\n\t\t// a popup calendar.\r\n\t\tparent = document.getElementsByTagName(\"body\")[0];\r\n\t\tthis.isPopup = true;\r\n\t} else {\r\n\t\tparent = _par;\r\n\t\tthis.isPopup = false;\r\n\t}\r\n\tthis.date = this.dateStr ? new Date(this.dateStr) : new Date();\r\n\r\n\tvar table = Calendar.createElement(\"table\");\r\n\tthis.table = table;\r\n\ttable.cellSpacing = 0;\r\n\ttable.cellPadding = 0;\r\n\ttable.calendar = this;\r\n\tCalendar.addEvent(table, \"mousedown\", Calendar.tableMouseDown);\r\n\r\n\tvar div = Calendar.createElement(\"div\");\r\n\tthis.element = div;\r\n\tdiv.className = \"calendar\";\r\n\tif (this.isPopup) {\r\n\t\tdiv.style.position = \"absolute\";\r\n\t\tdiv.style.display = \"none\";\r\n\t\tdiv.style[\"z-index\"] = 9999;\r\n\t}\r\n\tdiv.appendChild(table);\r\n\r\n\tvar thead = Calendar.createElement(\"thead\", table);\r\n\tvar cell = null;\r\n\tvar row = null;\r\n\r\n\tvar cal = this;\r\n\tvar hh = function (text, cs, navtype) {\r\n\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\tcell.colSpan = cs;\r\n\t\tcell.className = \"cal-button\";\r\n\t\tif (navtype != 0 && Math.abs(navtype) <= 2)\r\n\t\t\tcell.className += \" cal-nav\";\r\n\t\tCalendar._add_evs(cell);\r\n\t\tcell.calendar = cal;\r\n\t\tcell.navtype = navtype;\r\n\t\tcell.innerHTML = \"
\" + text + \"
\";\r\n\t\treturn cell;\r\n\t};\r\n\r\n\trow = Calendar.createElement(\"tr\", thead);\r\n\tvar title_length = 6;\r\n\t(this.isPopup) && --title_length;\r\n\t(this.weekNumbers) && ++title_length;\r\n\r\n\thh(\"?\", 1, 400).ttip = Calendar._TT[\"INFO\"];\r\n\tthis.title = hh(\"\", title_length, 300);\r\n\tthis.title.className = \"cal-title\";\r\n\tif (this.isPopup) {\r\n\t\tthis.title.ttip = Calendar._TT[\"DRAG_TO_MOVE\"];\r\n\t\tthis.title.style.cursor = \"move\";\r\n\t\thh(\"×\", 1, 200).ttip = Calendar._TT[\"CLOSE\"];\r\n\t}\r\n\r\n\trow = Calendar.createElement(\"tr\", thead);\r\n\trow.className = \"headrow\";\r\n\r\n\tthis._nav_py = hh(\"«\", 1, -2);\r\n\tthis._nav_py.ttip = Calendar._TT[\"PREV_YEAR\"];\r\n\r\n\tthis._nav_pm = hh(\"‹\", 1, -1);\r\n\tthis._nav_pm.ttip = Calendar._TT[\"PREV_MONTH\"];\r\n\r\n\tthis._nav_now = hh(Calendar._TT[\"TODAY\"], this.weekNumbers ? 4 : 3, 0);\r\n\tthis._nav_now.ttip = Calendar._TT[\"GO_TODAY\"];\r\n\r\n\tthis._nav_nm = hh(\"›\", 1, 1);\r\n\tthis._nav_nm.ttip = Calendar._TT[\"NEXT_MONTH\"];\r\n\r\n\tthis._nav_ny = hh(\"»\", 1, 2);\r\n\tthis._nav_ny.ttip = Calendar._TT[\"NEXT_YEAR\"];\r\n\r\n\t// day names\r\n\trow = Calendar.createElement(\"tr\", thead);\r\n\trow.className = \"daynames\";\r\n\tif (this.weekNumbers) {\r\n\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\tcell.className = \"name wn\";\r\n\t\tcell.innerHTML = Calendar._TT[\"WK\"];\r\n\t}\r\n\tfor (var i = 7; i > 0; --i) {\r\n\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\tif (!i) {\r\n\t\t\tcell.navtype = 100;\r\n\t\t\tcell.calendar = this;\r\n\t\t\tCalendar._add_evs(cell);\r\n\t\t}\r\n\t}\r\n\tthis.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;\r\n\tthis._displayWeekdays();\r\n\r\n\tvar tbody = Calendar.createElement(\"tbody\", table);\r\n\tthis.tbody = tbody;\r\n\r\n\tfor (i = 6; i > 0; --i) {\r\n\t\trow = Calendar.createElement(\"tr\", tbody);\r\n\t\tif (this.weekNumbers) {\r\n\t\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\t}\r\n\t\tfor (var j = 7; j > 0; --j) {\r\n\t\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\t\tcell.calendar = this;\r\n\t\t\tCalendar._add_evs(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tif (this.showsTime) {\r\n\t\trow = Calendar.createElement(\"tr\", tbody);\r\n\t\trow.className = \"time\";\r\n\r\n\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\tcell.className = \"time\";\r\n\t\tcell.colSpan = 2;\r\n\t\tcell.innerHTML = Calendar._TT[\"TIME\"] || \" \";\r\n\r\n\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\tcell.className = \"time\";\r\n\t\tcell.colSpan = this.weekNumbers ? 4 : 3;\r\n\r\n\t\t(function () {\r\n\t\t\tfunction makeTimePart(className, init, range_start, range_end) {\r\n\t\t\t\tvar part = Calendar.createElement(\"span\", cell);\r\n\t\t\t\tpart.className = className;\r\n\t\t\t\tpart.innerHTML = init;\r\n\t\t\t\tpart.calendar = cal;\r\n\t\t\t\tpart.ttip = Calendar._TT[\"TIME_PART\"];\r\n\t\t\t\tpart.navtype = 50;\r\n\t\t\t\tpart._range = [];\r\n\t\t\t\tif (typeof range_start != \"number\")\r\n\t\t\t\t\tpart._range = range_start;\r\n\t\t\t\telse {\r\n\t\t\t\t\tfor (var i = range_start; i <= range_end; ++i) {\r\n\t\t\t\t\t\tvar txt;\r\n\t\t\t\t\t\tif (i < 10 && range_end >= 10) txt = '0' + i;\r\n\t\t\t\t\t\telse txt = '' + i;\r\n\t\t\t\t\t\tpart._range[part._range.length] = txt;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tCalendar._add_evs(part);\r\n\t\t\t\treturn part;\r\n\t\t\t};\r\n\t\t\tvar hrs = cal.date.getHours();\r\n\t\t\tvar mins = cal.date.getMinutes();\r\n\t\t\tvar t12 = !cal.time24;\r\n\t\t\tvar pm = (hrs > 12);\r\n\t\t\tif (t12 && pm) hrs -= 12;\r\n\t\t\tvar H = makeTimePart(\"hour\", hrs, t12 ? 1 : 0, t12 ? 12 : 23);\r\n\t\t\tvar span = Calendar.createElement(\"span\", cell);\r\n\t\t\tspan.innerHTML = \":\";\r\n\t\t\tspan.className = \"colon\";\r\n\t\t\tvar M = makeTimePart(\"minute\", mins, 0, 59);\r\n\t\t\tvar AP = null;\r\n\t\t\tcell = Calendar.createElement(\"td\", row);\r\n\t\t\tcell.className = \"time\";\r\n\t\t\tcell.colSpan = 2;\r\n\t\t\tif (t12)\r\n\t\t\t\tAP = makeTimePart(\"ampm\", pm ? \"pm\" : \"am\", [\"am\", \"pm\"]);\r\n\t\t\telse\r\n\t\t\t\tcell.innerHTML = \" \";\r\n\r\n\t\t\tcal.onSetTime = function () {\r\n\t\t\t\tvar pm, hrs = this.date.getHours(),\r\n\t\t\t\t\tmins = this.date.getMinutes();\r\n\t\t\t\tif (t12) {\r\n\t\t\t\t\tpm = (hrs >= 12);\r\n\t\t\t\t\tif (pm) hrs -= 12;\r\n\t\t\t\t\tif (hrs == 0) hrs = 12;\r\n\t\t\t\t\tAP.innerHTML = pm ? \"pm\" : \"am\";\r\n\t\t\t\t}\r\n\t\t\t\tH.innerHTML = (hrs < 10) ? (\"0\" + hrs) : hrs;\r\n\t\t\t\tM.innerHTML = (mins < 10) ? (\"0\" + mins) : mins;\r\n\t\t\t};\r\n\r\n\t\t\tcal.onUpdateTime = function () {\r\n\t\t\t\tvar date = this.date;\r\n\t\t\t\tvar h = parseInt(H.innerHTML, 10);\r\n\t\t\t\tif (t12) {\r\n\t\t\t\t\tif (/pm/i.test(AP.innerHTML) && h < 12)\r\n\t\t\t\t\t\th += 12;\r\n\t\t\t\t\telse if (/am/i.test(AP.innerHTML) && h == 12)\r\n\t\t\t\t\t\th = 0;\r\n\t\t\t\t}\r\n\t\t\t\tvar d = date.getDate();\r\n\t\t\t\tvar m = date.getMonth();\r\n\t\t\t\tvar y = date.getFullYear();\r\n\t\t\t\tdate.setHours(h);\r\n\t\t\t\tdate.setMinutes(parseInt(M.innerHTML, 10));\r\n\t\t\t\tdate.setFullYear(y);\r\n\t\t\t\tdate.setMonth(m);\r\n\t\t\t\tdate.setDate(d);\r\n\t\t\t\tthis.dateClicked = false;\r\n\t\t\t\tthis.callHandler();\r\n\t\t\t};\r\n\t\t})();\r\n\t} else {\r\n\t\tthis.onSetTime = this.onUpdateTime = function () { };\r\n\t}\r\n\r\n\tvar tfoot = Calendar.createElement(\"tfoot\", table);\r\n\r\n\trow = Calendar.createElement(\"tr\", tfoot);\r\n\trow.className = \"footrow\";\r\n\r\n\tcell = hh(Calendar._TT[\"SEL_DATE\"], this.weekNumbers ? 8 : 7, 300);\r\n\tcell.className = \"ttip\";\r\n\tif (this.isPopup) {\r\n\t\tcell.ttip = Calendar._TT[\"DRAG_TO_MOVE\"];\r\n\t\tcell.style.cursor = \"move\";\r\n\t}\r\n\tthis.tooltips = cell;\r\n\r\n\tdiv = Calendar.createElement(\"div\", this.element);\r\n\tthis.monthsCombo = div;\r\n\tdiv.className = \"cal-combo\";\r\n\tfor (i = 0; i < Calendar._MN.length; ++i) {\r\n\t\tvar mn = Calendar.createElement(\"div\");\r\n\t\tmn.className = \"cal-label\";\r\n\t\tmn.month = i;\r\n\t\tmn.innerHTML = Calendar._SMN[i];\r\n\t\tdiv.appendChild(mn);\r\n\t}\r\n\r\n\tdiv = Calendar.createElement(\"div\", this.element);\r\n\tthis.yearsCombo = div;\r\n\tdiv.className = \"cal-combo\";\r\n\tfor (i = 12; i > 0; --i) {\r\n\t\tvar yr = Calendar.createElement(\"div\");\r\n\t\tyr.className = \"cal-label\";\r\n\t\tdiv.appendChild(yr);\r\n\t}\r\n\r\n\tthis._init(this.firstDayOfWeek, this.date);\r\n\tparent.appendChild(this.element);\r\n};\r\n\r\n/** keyboard navigation, only for popup calendars */\r\nCalendar._keyEvent = function (ev) {\r\n\tvar cal = window._dynarch_popupCalendar;\r\n\tif (!cal || cal.multiple)\r\n\t\treturn false;\r\n\r\n\tvar act = (ev.type == \"keypress\"),\r\n\t\tK = ev.keyCode;\r\n\tif (ev.ctrlKey) {\r\n\t\tswitch (K) {\r\n\t\t\tcase 37: // KEY left\r\n\t\t\t\tact && Calendar.cellClick(cal._nav_pm);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 38: // KEY up\r\n\t\t\t\tact && Calendar.cellClick(cal._nav_py);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 39: // KEY right\r\n\t\t\t\tact && Calendar.cellClick(cal._nav_nm);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 40: // KEY down\r\n\t\t\t\tact && Calendar.cellClick(cal._nav_ny);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t} else switch (K) {\r\n\t\tcase 32: // KEY space (now)\r\n\t\t\tCalendar.cellClick(cal._nav_now);\r\n\t\t\tbreak;\r\n\t\tcase 27: // KEY esc\r\n\t\t\tact && cal.callCloseHandler();\r\n\t\t\tbreak;\r\n\t\tcase 37: // KEY left\r\n\t\tcase 38: // KEY up\r\n\t\tcase 39: // KEY right\r\n\t\tcase 40: // KEY down\r\n\t\t\tif (act) {\r\n\t\t\t\tvar prev, x, y, ne, el, step;\r\n\t\t\t\tprev = K == 37 || K == 38;\r\n\t\t\t\tstep = (K == 37 || K == 39) ? 1 : 7;\r\n\t\t\t\tfunction setVars() {\r\n\t\t\t\t\tel = cal.currentDateEl;\r\n\t\t\t\t\tvar p = el.pos;\r\n\t\t\t\t\tx = p & 15;\r\n\t\t\t\t\ty = p >> 4;\r\n\t\t\t\t\tne = cal.ar_days[y][x];\r\n\t\t\t\t}; setVars();\r\n\t\t\t\tfunction prevMonth() {\r\n\t\t\t\t\tvar date = new Date(cal.date);\r\n\t\t\t\t\tdate.setDate(date.getDate() - step);\r\n\t\t\t\t\tcal.setDate(date);\r\n\t\t\t\t};\r\n\t\t\t\tfunction nextMonth() {\r\n\t\t\t\t\tvar date = new Date(cal.date);\r\n\t\t\t\t\tdate.setDate(date.getDate() + step);\r\n\t\t\t\t\tcal.setDate(date);\r\n\t\t\t\t};\r\n\t\t\t\twhile (1) {\r\n\t\t\t\t\tswitch (K) {\r\n\t\t\t\t\t\tcase 37: // KEY left\r\n\t\t\t\t\t\t\tif (--x >= 0)\r\n\t\t\t\t\t\t\t\tne = cal.ar_days[y][x];\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tx = 6;\r\n\t\t\t\t\t\t\t\tK = 38;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 38: // KEY up\r\n\t\t\t\t\t\t\tif (--y >= 0)\r\n\t\t\t\t\t\t\t\tne = cal.ar_days[y][x];\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tprevMonth();\r\n\t\t\t\t\t\t\t\tsetVars();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 39: // KEY right\r\n\t\t\t\t\t\t\tif (++x < 7)\r\n\t\t\t\t\t\t\t\tne = cal.ar_days[y][x];\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\t\t\tK = 40;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 40: // KEY down\r\n\t\t\t\t\t\t\tif (++y < cal.ar_days.length)\r\n\t\t\t\t\t\t\t\tne = cal.ar_days[y][x];\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tnextMonth();\r\n\t\t\t\t\t\t\t\tsetVars();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (ne) {\r\n\t\t\t\t\tif (!ne.disabled)\r\n\t\t\t\t\t\tCalendar.cellClick(ne);\r\n\t\t\t\t\telse if (prev)\r\n\t\t\t\t\t\tprevMonth();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tnextMonth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 13: // KEY enter\r\n\t\t\tif (act)\r\n\t\t\t\tCalendar.cellClick(cal.currentDateEl, ev);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n\treturn Calendar.stopEvent(ev);\r\n};\r\n\r\n/**\r\n * (RE)Initializes the calendar to the given date and firstDayOfWeek\r\n */\r\nCalendar.prototype._init = function (firstDayOfWeek, date) {\r\n\tvar today = new Date(),\r\n\t\tTY = today.getFullYear(),\r\n\t\tTM = today.getMonth(),\r\n\t\tTD = today.getDate();\r\n\tthis.table.style.visibility = \"hidden\";\r\n\tvar year = date.getFullYear();\r\n\tif (year < this.minYear) {\r\n\t\tyear = this.minYear;\r\n\t\tdate.setFullYear(year);\r\n\t} else if (year > this.maxYear) {\r\n\t\tyear = this.maxYear;\r\n\t\tdate.setFullYear(year);\r\n\t}\r\n\tthis.firstDayOfWeek = firstDayOfWeek;\r\n\tthis.date = new Date(date);\r\n\tvar month = date.getMonth();\r\n\tvar mday = date.getDate();\r\n\tvar no_days = date.getMonthDays();\r\n\r\n\t// calendar voodoo for computing the first day that would actually be\r\n\t// displayed in the calendar, even if it's from the previous month.\r\n\t// WARNING: this is magic. ;-)\r\n\tdate.setDate(1);\r\n\tvar day1 = (date.getDay() - this.firstDayOfWeek) % 7;\r\n\tif (day1 < 0)\r\n\t\tday1 += 7;\r\n\tdate.setDate(-day1);\r\n\tdate.setDate(date.getDate() + 1);\r\n\r\n\tvar row = this.tbody.firstChild;\r\n\tvar MN = Calendar._SMN[month];\r\n\tvar ar_days = this.ar_days = new Array();\r\n\tvar weekend = Calendar._TT[\"WEEKEND\"];\r\n\tvar dates = this.multiple ? (this.datesCells = {}) : null;\r\n\tfor (var i = 0; i < 6; ++i, row = row.nextSibling) {\r\n\t\tvar cell = row.firstChild;\r\n\t\tif (this.weekNumbers) {\r\n\t\t\tcell.className = \"day wn\";\r\n\t\t\tcell.innerHTML = date.getWeekNumber();\r\n\t\t\tcell = cell.nextSibling;\r\n\t\t}\r\n\t\trow.className = \"daysrow\";\r\n\t\tvar hasdays = false, iday, dpos = ar_days[i] = [];\r\n\t\tfor (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) {\r\n\t\t\tiday = date.getDate();\r\n\t\t\tvar wday = date.getDay();\r\n\t\t\tcell.className = \"day\";\r\n\t\t\tcell.pos = i << 4 | j;\r\n\t\t\tdpos[j] = cell;\r\n\t\t\tvar current_month = (date.getMonth() == month);\r\n\t\t\tif (!current_month) {\r\n\t\t\t\tif (this.showsOtherMonths) {\r\n\t\t\t\t\tcell.className += \" othermonth\";\r\n\t\t\t\t\tcell.otherMonth = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcell.className = \"emptycell\";\r\n\t\t\t\t\tcell.innerHTML = \" \";\r\n\t\t\t\t\tcell.disabled = true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcell.otherMonth = false;\r\n\t\t\t\thasdays = true;\r\n\t\t\t}\r\n\t\t\tcell.disabled = false;\r\n\t\t\tcell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;\r\n\t\t\tif (dates)\r\n\t\t\t\tdates[date.print(\"%Y%m%d\")] = cell;\r\n\t\t\tif (this.getDateStatus) {\r\n\t\t\t\tvar status = this.getDateStatus(date, year, month, iday);\r\n\t\t\t\tif (this.getDateToolTip) {\r\n\t\t\t\t\tvar toolTip = this.getDateToolTip(date, year, month, iday);\r\n\t\t\t\t\tif (toolTip)\r\n\t\t\t\t\t\tcell.title = toolTip;\r\n\t\t\t\t}\r\n\t\t\t\tif (status === true) {\r\n\t\t\t\t\tcell.className += \" disabled\";\r\n\t\t\t\t\tcell.disabled = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (/disabled/i.test(status))\r\n\t\t\t\t\t\tcell.disabled = true;\r\n\t\t\t\t\tcell.className += \" \" + status;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!cell.disabled) {\r\n\t\t\t\tcell.caldate = new Date(date);\r\n\t\t\t\tcell.ttip = \"_\";\r\n\t\t\t\tif (!this.multiple && current_month\r\n\t\t\t\t && iday == mday && this.hiliteToday) {\r\n\t\t\t\t\tcell.className += \" selected\";\r\n\t\t\t\t\tthis.currentDateEl = cell;\r\n\t\t\t\t}\r\n\t\t\t\tif (date.getFullYear() == TY &&\r\n\t\t\t\t date.getMonth() == TM &&\r\n\t\t\t\t iday == TD) {\r\n\t\t\t\t\tcell.className += \" today\";\r\n\t\t\t\t\tcell.ttip += Calendar._TT[\"PART_TODAY\"];\r\n\t\t\t\t}\r\n\t\t\t\tif (weekend.indexOf(wday.toString()) != -1)\r\n\t\t\t\t\tcell.className += cell.otherMonth ? \" oweekend\" : \" weekend\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!(hasdays || this.showsOtherMonths))\r\n\t\t\trow.className = \"emptyrow\";\r\n\t}\r\n\tthis.title.innerHTML = Calendar._MN[month] + \", \" + year;\r\n\tthis.onSetTime();\r\n\tthis.table.style.visibility = \"visible\";\r\n\tthis._initMultipleDates();\r\n\t// PROFILE\r\n\t// this.tooltips.innerHTML = \"Generated in \" + ((new Date()) - today) + \" ms\";\r\n};\r\n\r\nCalendar.prototype._initMultipleDates = function () {\r\n\tif (this.multiple) {\r\n\t\tfor (var i in this.multiple) {\r\n\t\t\tvar cell = this.datesCells[i];\r\n\t\t\tvar d = this.multiple[i];\r\n\t\t\tif (!d)\r\n\t\t\t\tcontinue;\r\n\t\t\tif (cell)\r\n\t\t\t\tcell.className += \" selected\";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nCalendar.prototype._toggleMultipleDate = function (date) {\r\n\tif (this.multiple) {\r\n\t\tvar ds = date.print(\"%Y%m%d\");\r\n\t\tvar cell = this.datesCells[ds];\r\n\t\tif (cell) {\r\n\t\t\tvar d = this.multiple[ds];\r\n\t\t\tif (!d) {\r\n\t\t\t\tCalendar.addClass(cell, \"selected\");\r\n\t\t\t\tthis.multiple[ds] = date;\r\n\t\t\t} else {\r\n\t\t\t\tCalendar.removeClass(cell, \"selected\");\r\n\t\t\t\tdelete this.multiple[ds];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nCalendar.prototype.setDateToolTipHandler = function (unaryFunction) {\r\n\tthis.getDateToolTip = unaryFunction;\r\n};\r\n\r\n/**\r\n * Calls _init function above for going to a certain date (but only if the\r\n * date is different than the currently selected one).\r\n */\r\nCalendar.prototype.setDate = function (date) {\r\n\tif (!date.equalsTo(this.date)) {\r\n\t\tthis._init(this.firstDayOfWeek, date);\r\n\t}\r\n};\r\n\r\n/**\r\n * Refreshes the calendar. Useful if the \"disabledHandler\" function is\r\n * dynamic, meaning that the list of disabled date can change at runtime.\r\n * Just * call this function if you think that the list of disabled dates\r\n * should * change.\r\n */\r\nCalendar.prototype.refresh = function () {\r\n\tthis._init(this.firstDayOfWeek, this.date);\r\n};\r\n\r\n/** Modifies the \"firstDayOfWeek\" parameter (pass 0 for Synday, 1 for Monday, etc.). */\r\nCalendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {\r\n\tthis._init(firstDayOfWeek, this.date);\r\n\tthis._displayWeekdays();\r\n};\r\n\r\n/**\r\n * Allows customization of what dates are enabled. The \"unaryFunction\"\r\n * parameter must be a function object that receives the date (as a JS Date\r\n * object) and returns a boolean value. If the returned value is true then\r\n * the passed date will be marked as disabled.\r\n */\r\nCalendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {\r\n\tthis.getDateStatus = unaryFunction;\r\n};\r\n\r\n/** Customization of allowed year range for the calendar. */\r\nCalendar.prototype.setRange = function (a, z) {\r\n\tthis.minYear = a;\r\n\tthis.maxYear = z;\r\n};\r\n\r\n/** Calls the first user handler (selectedHandler). */\r\nCalendar.prototype.callHandler = function () {\r\n\tif (this.onSelected) {\r\n\t\tthis.onSelected(this, this.date.print(this.dateFormat));\r\n\t}\r\n};\r\n\r\n/** Calls the second user handler (closeHandler). */\r\nCalendar.prototype.callCloseHandler = function () {\r\n\tif (this.onClose) {\r\n\t\tthis.onClose(this);\r\n\t}\r\n};\r\n\r\n/** Removes the calendar object from the DOM tree and destroys it. */\r\nCalendar.prototype.destroy = function () {\r\n\tvar el = this.element.parentNode;\r\n\tel.removeChild(this.element);\r\n\tCalendar._C = null;\r\n\twindow._dynarch_popupCalendar = null;\r\n};\r\n\r\n/**\r\n * Moves the calendar element to a different section in the DOM tree (changes\r\n * its parent).\r\n */\r\nCalendar.prototype.reparent = function (new_parent) {\r\n\tvar el = this.element;\r\n\tel.parentNode.removeChild(el);\r\n\tnew_parent.appendChild(el);\r\n};\r\n\r\n// This gets called when the user presses a mouse button anywhere in the\r\n// document, if the calendar is shown. If the click was outside the open\r\n// calendar this function closes it.\r\nCalendar._checkCalendar = function (ev) {\r\n\tvar calendar = window._dynarch_popupCalendar;\r\n\tif (!calendar) {\r\n\t\treturn false;\r\n\t}\r\n\tvar el = Calendar.getTargetElement(ev);\r\n\tfor (; el != null && el != calendar.element; el = el.parentNode);\r\n\tif (el == null) {\r\n\t\t// calls closeHandler which should hide the calendar.\r\n\t\twindow._dynarch_popupCalendar.callCloseHandler();\r\n\t\treturn Calendar.stopEvent(ev);\r\n\t}\r\n};\r\n\r\n/** Shows the calendar. */\r\nCalendar.prototype.show = function () {\r\n\tvar rows = this.table.getElementsByTagName(\"tr\");\r\n\tfor (var i = rows.length; i > 0;) {\r\n\t\tvar row = rows[--i];\r\n\t\tCalendar.removeClass(row, \"rowhilite\");\r\n\t\tvar cells = row.getElementsByTagName(\"td\");\r\n\t\tfor (var j = cells.length; j > 0;) {\r\n\t\t\tvar cell = cells[--j];\r\n\t\t\tCalendar.removeClass(cell, \"hilite\");\r\n\t\t\tCalendar.removeClass(cell, \"active\");\r\n\t\t}\r\n\t}\r\n\tthis.element.style.display = \"block\";\r\n\tthis.hidden = false;\r\n\tif (this.isPopup) {\r\n\t\twindow._dynarch_popupCalendar = this;\r\n\t\tCalendar.addEvent(document, \"keydown\", Calendar._keyEvent);\r\n\t\tCalendar.addEvent(document, \"keypress\", Calendar._keyEvent);\r\n\t\tCalendar.addEvent(document, \"mousedown\", Calendar._checkCalendar);\r\n\t}\r\n};\r\n\r\n/**\r\n * Hides the calendar. Also removes any \"hilite\" from the class of any TD\r\n * element.\r\n */\r\nCalendar.prototype.hide = function () {\r\n\tif (this.isPopup) {\r\n\t\tCalendar.removeEvent(document, \"keydown\", Calendar._keyEvent);\r\n\t\tCalendar.removeEvent(document, \"keypress\", Calendar._keyEvent);\r\n\t\tCalendar.removeEvent(document, \"mousedown\", Calendar._checkCalendar);\r\n\t}\r\n\tthis.element.style.display = \"none\";\r\n\tthis.hidden = true;\r\n};\r\n\r\n/**\r\n * Shows the calendar at a given absolute position (beware that, depending on\r\n * the calendar element style -- position property -- this might be relative\r\n * to the parent's containing rectangle).\r\n */\r\nCalendar.prototype.showAt = function (x, y) {\r\n\tvar s = this.element.style;\r\n\ts.left = x + \"px\";\r\n\ts.top = y + \"px\";\r\n\tthis.show();\r\n};\r\n\r\n/** Shows the calendar near a given element. */\r\nCalendar.prototype.showAtElement = function (el, opts) {\r\n\tvar self = this;\r\n\tvar p = Calendar.getAbsolutePos(el);\r\n\tif (!opts || typeof opts != \"string\") {\r\n\t\tthis.showAt(p.x, p.y + el.offsetHeight);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tthis.element.style.display = \"block\";\r\n\r\n\tvar w = self.element.offsetWidth;\r\n\tvar h = self.element.offsetHeight;\r\n\tself.element.style.display = \"none\";\r\n\tvar valign = opts.substr(0, 1);\r\n\tvar halign = \"l\";\r\n\tif (opts.length > 1) {\r\n\t\thalign = opts.substr(1, 1);\r\n\t}\r\n\t// vertical alignment\r\n\tswitch (valign) {\r\n\t\tcase \"T\": p.y -= h; break;\r\n\t\tcase \"B\": p.y += el.offsetHeight; break;\r\n\t\tcase \"C\": p.y += (el.offsetHeight - h) / 2; break;\r\n\t\tcase \"t\": p.y += el.offsetHeight - h; break;\r\n\t\tcase \"b\": break; // already there\r\n\t}\r\n\t// horizontal alignment\r\n\tswitch (halign) {\r\n\t\tcase \"L\": p.x -= w; break;\r\n\t\tcase \"R\": p.x += el.offsetWidth; break;\r\n\t\tcase \"C\": p.x += (el.offsetWidth - w) / 2; break;\r\n\t\tcase \"l\": p.x += el.offsetWidth - w; break;\r\n\t\tcase \"r\": break; // already there\r\n\t}\r\n\tif (p.y + h > window.innerHeight)\r\n\t\tp.y -= h + el.offsetHeight;\r\n\tp.width = w;\r\n\tp.height = h + 40;\r\n\tself.monthsCombo.style.display = \"none\";\r\n\t//fixPosition(p);\r\n\tself.showAt(p.x, p.y);\r\n};\r\n\r\n/** Customizes the date format. */\r\nCalendar.prototype.setDateFormat = function (str) {\r\n\tthis.dateFormat = str;\r\n};\r\n\r\n/** Customizes the tooltip date format. */\r\nCalendar.prototype.setTtDateFormat = function (str) {\r\n\tthis.ttDateFormat = str;\r\n};\r\n\r\n/**\r\n * Tries to identify the date represented in a string. If successful it also\r\n * calls this.setDate which moves the calendar to the given date.\r\n */\r\nCalendar.prototype.parseDate = function (str, fmt) {\r\n\tif (!fmt)\r\n\t\tfmt = this.dateFormat;\r\n\tthis.setDate(Date.parseDate(str, fmt));\r\n};\r\n\r\n/** Internal function; it displays the bar with the names of the weekday. */\r\nCalendar.prototype._displayWeekdays = function () {\r\n\tvar fdow = this.firstDayOfWeek;\r\n\tvar cell = this.firstdayname;\r\n\tvar weekend = Calendar._TT[\"WEEKEND\"];\r\n\tfor (var i = 0; i < 7; ++i) {\r\n\t\tcell.className = \"day name\";\r\n\t\tvar realday = (i + fdow) % 7;\r\n\t\tif (i) {\r\n\t\t\tcell.ttip = Calendar._TT[\"DAY_FIRST\"].replace(\"%s\", Calendar._DN[realday]);\r\n\t\t\tcell.navtype = 100;\r\n\t\t\tcell.calendar = this;\r\n\t\t\tcell.fdow = realday;\r\n\t\t\tCalendar._add_evs(cell);\r\n\t\t}\r\n\t\tif (weekend.indexOf(realday.toString()) != -1) {\r\n\t\t\tCalendar.addClass(cell, \"weekend\");\r\n\t\t}\r\n\t\tcell.innerHTML = Calendar._SDN[(i + fdow) % 7];\r\n\t\tcell = cell.nextSibling;\r\n\t}\r\n};\r\n\r\n/** Internal function. Hides all combo boxes that might be displayed. */\r\nCalendar.prototype._hideCombos = function () {\r\n\tthis.monthsCombo.style.display = \"none\";\r\n\tthis.yearsCombo.style.display = \"none\";\r\n};\r\n\r\n/** Internal function. Starts dragging the element. */\r\nCalendar.prototype._dragStart = function (ev) {\r\n\tif (this.dragging) {\r\n\t\treturn;\r\n\t}\r\n\tthis.dragging = true;\r\n\tvar posX;\r\n\tvar posY;\r\n\tposY = ev.clientY + window.scrollY;\r\n\tposX = ev.clientX + window.scrollX;\r\n\tvar st = this.element.style;\r\n\tthis.xOffs = posX - parseInt(st.left);\r\n\tthis.yOffs = posY - parseInt(st.top);\r\n\twith (Calendar) {\r\n\t\taddEvent(document, \"mousemove\", calDragIt);\r\n\t\taddEvent(document, \"mouseup\", calDragEnd);\r\n\t}\r\n};\r\n\r\n// BEGIN: DATE OBJECT PATCHES\r\n\r\n/** Adds the number of days array to the Date object. */\r\nDate._MD = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);\r\n\r\n/** Constants used for time computations */\r\nDate.SECOND = 1000 /* milliseconds */;\r\nDate.MINUTE = 60 * Date.SECOND;\r\nDate.HOUR = 60 * Date.MINUTE;\r\nDate.DAY = 24 * Date.HOUR;\r\nDate.WEEK = 7 * Date.DAY;\r\n\r\nDate.parseDate = function (str, fmt) {\r\n\tvar y = 0;\r\n\tvar m = -1;\r\n\tvar d = 0;\r\n\tvar a = str.split(/\\W+/);\r\n\tvar b = fmt.match(/%./g);\r\n\tvar i = 0, j = 0;\r\n\tvar hr = 0;\r\n\tvar min = 0;\r\n\tfor (i = 0; i < a.length; ++i) {\r\n\t\tif (!a[i])\r\n\t\t\tcontinue;\r\n\t\tswitch (b[i]) {\r\n\t\t\tcase \"%d\":\r\n\t\t\tcase \"%e\":\r\n\t\t\t\td = parseInt(a[i], 10);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tm = parseInt(a[i], 10) - 1;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%Y\":\r\n\t\t\tcase \"%y\":\r\n\t\t\t\ty = parseInt(a[i], 10);\r\n\t\t\t\t(y < 100) && (y += (y > 29) ? 1900 : 2000);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%b\":\r\n\t\t\tcase \"%B\":\r\n\t\t\t\tfor (j = 0; j < 12; ++j) {\r\n\t\t\t\t\tif (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%H\":\r\n\t\t\tcase \"%I\":\r\n\t\t\tcase \"%k\":\r\n\t\t\tcase \"%l\":\r\n\t\t\t\thr = parseInt(a[i], 10);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%P\":\r\n\t\t\tcase \"%p\":\r\n\t\t\t\tif (/pm/i.test(a[i]) && hr < 12)\r\n\t\t\t\t\thr += 12;\r\n\t\t\t\telse if (/am/i.test(a[i]) && hr >= 12)\r\n\t\t\t\t\thr -= 12;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"%M\":\r\n\t\t\t\tmin = parseInt(a[i], 10);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tif (y != 0 && m != -1 && d != 0)\r\n\t\treturn new Date(y, m, d, hr, min, 0);\r\n\treturn null;\r\n};\r\n\r\n/** Returns the number of days in the current month */\r\nDate.prototype.getMonthDays = function (month) {\r\n\tvar year = this.getFullYear();\r\n\tif (typeof month == \"undefined\") {\r\n\t\tmonth = this.getMonth();\r\n\t}\r\n\tif (((0 == (year % 4)) && ((0 != (year % 100)) || (0 == (year % 400)))) && month == 1) {\r\n\t\treturn 29;\r\n\t} else {\r\n\t\treturn Date._MD[month];\r\n\t}\r\n};\r\n\r\n/** Returns the number of day in the year. */\r\nDate.prototype.getDayOfYear = function () {\r\n\tvar now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);\r\n\tvar then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);\r\n\tvar time = now - then;\r\n\treturn Math.floor(time / Date.DAY);\r\n};\r\n\r\n/** Returns the number of the week in year, as defined in ISO 8601. */\r\nDate.prototype.getWeekNumber = function () {\r\n\tvar d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);\r\n\tvar DoW = d.getDay();\r\n\td.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu\r\n\tvar ms = d.valueOf(); // GMT\r\n\td.setMonth(0);\r\n\td.setDate(4); // Thu in Week 1\r\n\treturn Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;\r\n};\r\n\r\n/** Checks date and time equality */\r\nDate.prototype.equalsTo = function (date) {\r\n\treturn ((this.getFullYear() == date.getFullYear()) &&\r\n\t\t(this.getMonth() == date.getMonth()) &&\r\n\t\t(this.getDate() == date.getDate()) &&\r\n\t\t(this.getHours() == date.getHours()) &&\r\n\t\t(this.getMinutes() == date.getMinutes()));\r\n};\r\n\r\n/** Set only the year, month, date parts (keep existing time) */\r\nDate.prototype.setDateOnly = function (date) {\r\n\tvar tmp = new Date(date);\r\n\tthis.setDate(1);\r\n\tthis.setFullYear(tmp.getFullYear());\r\n\tthis.setMonth(tmp.getMonth());\r\n\tthis.setDate(tmp.getDate());\r\n};\r\n\r\n/** Prints the date in a string according to the given format. */\r\nDate.prototype.print = function (str) {\r\n\tvar m = this.getMonth();\r\n\tvar d = this.getDate();\r\n\tvar y = this.getFullYear();\r\n\tvar wn = this.getWeekNumber();\r\n\tvar w = this.getDay();\r\n\tvar s = {};\r\n\tvar hr = this.getHours();\r\n\tvar pm = (hr >= 12);\r\n\tvar ir = (pm) ? (hr - 12) : hr;\r\n\tvar dy = this.getDayOfYear();\r\n\tif (ir == 0)\r\n\t\tir = 12;\r\n\tvar min = this.getMinutes();\r\n\tvar sec = this.getSeconds();\r\n\ts[\"%a\"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]\r\n\ts[\"%A\"] = Calendar._DN[w]; // full weekday name\r\n\ts[\"%b\"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]\r\n\ts[\"%B\"] = Calendar._MN[m]; // full month name\r\n\t// FIXME: %c : preferred date and time representation for the current locale\r\n\ts[\"%C\"] = 1 + Math.floor(y / 100); // the century number\r\n\ts[\"%d\"] = (d < 10) ? (\"0\" + d) : d; // the day of the month (range 01 to 31)\r\n\ts[\"%e\"] = d; // the day of the month (range 1 to 31)\r\n\t// FIXME: %D : american date style: %m/%d/%y\r\n\t// FIXME: %E, %F, %G, %g, %h (man strftime)\r\n\ts[\"%H\"] = (hr < 10) ? (\"0\" + hr) : hr; // hour, range 00 to 23 (24h format)\r\n\ts[\"%I\"] = (ir < 10) ? (\"0\" + ir) : ir; // hour, range 01 to 12 (12h format)\r\n\ts[\"%j\"] = (dy < 100) ? ((dy < 10) ? (\"00\" + dy) : (\"0\" + dy)) : dy; // day of the year (range 001 to 366)\r\n\ts[\"%k\"] = hr;\t\t// hour, range 0 to 23 (24h format)\r\n\ts[\"%l\"] = ir;\t\t// hour, range 1 to 12 (12h format)\r\n\ts[\"%m\"] = (m < 9) ? (\"0\" + (1 + m)) : (1 + m); // month, range 01 to 12\r\n\ts[\"%M\"] = (min < 10) ? (\"0\" + min) : min; // minute, range 00 to 59\r\n\ts[\"%n\"] = \"\\n\";\t\t// a newline character\r\n\ts[\"%p\"] = pm ? \"PM\" : \"AM\";\r\n\ts[\"%P\"] = pm ? \"pm\" : \"am\";\r\n\t// FIXME: %r : the time in am/pm notation %I:%M:%S %p\r\n\t// FIXME: %R : the time in 24-hour notation %H:%M\r\n\ts[\"%s\"] = Math.floor(this.getTime() / 1000);\r\n\ts[\"%S\"] = (sec < 10) ? (\"0\" + sec) : sec; // seconds, range 00 to 59\r\n\ts[\"%t\"] = \"\\t\";\t\t// a tab character\r\n\t// FIXME: %T : the time in 24-hour notation (%H:%M:%S)\r\n\ts[\"%U\"] = s[\"%W\"] = s[\"%V\"] = (wn < 10) ? (\"0\" + wn) : wn;\r\n\ts[\"%u\"] = w + 1;\t// the day of the week (range 1 to 7, 1 = MON)\r\n\ts[\"%w\"] = w;\t\t// the day of the week (range 0 to 6, 0 = SUN)\r\n\t// FIXME: %x : preferred date representation for the current locale without the time\r\n\t// FIXME: %X : preferred time representation for the current locale without the date\r\n\ts[\"%y\"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99)\r\n\ts[\"%Y\"] = y;\t\t// year with the century\r\n\ts[\"%%\"] = \"%\";\t\t// a literal '%' character\r\n\r\n\tvar re = /%./g;\r\n\treturn str.replace(re, function (par) { return s[par] || par; });\r\n};\r\n\r\nDate.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;\r\nDate.prototype.setFullYear = function (y) {\r\n\tvar d = new Date(this);\r\n\td.__msh_oldSetFullYear(y);\r\n\tif (d.getMonth() != this.getMonth())\r\n\t\tthis.setDate(28);\r\n\tthis.__msh_oldSetFullYear(y);\r\n};\r\n\r\n// END: DATE OBJECT PATCHES\r\n\r\nCalendar.setup = function (params) {\r\n\tfunction param_default(pname, def) {\r\n\t\tif (typeof params[pname] == \"undefined\") {\r\n\t\t\tparams[pname] = def;\r\n\t\t}\r\n\t};\r\n\tparam_default(\"inputField\", null);\r\n\tparam_default(\"displayArea\", null);\r\n\tparam_default(\"button\", null);\r\n\tparam_default(\"eventName\", \"click\");\r\n\tparam_default(\"ifFormat\", \"%Y/%m/%d\");\r\n\tparam_default(\"daFormat\", \"%Y/%m/%d\");\r\n\tparam_default(\"singleClick\", true);\r\n\tparam_default(\"disableFunc\", null);\r\n\tparam_default(\"dateStatusFunc\", dateStatusHandler);\r\n\tparam_default(\"dateText\", null);\r\n\tparam_default(\"firstDay\", null);\r\n\tparam_default(\"align\", \"Br\");\r\n\tparam_default(\"range\", [1900, 2999]);\r\n\tparam_default(\"weekNumbers\", true);\r\n\tparam_default(\"flat\", null);\r\n\tparam_default(\"flatCallback\", null);\r\n\tparam_default(\"onSelect\", null);\r\n\tparam_default(\"onClose\", null);\r\n\tparam_default(\"onUpdate\", null);\r\n\tparam_default(\"date\", null);\r\n\tparam_default(\"showsTime\", false);\r\n\tparam_default(\"timeFormat\", \"24\");\r\n\tparam_default(\"electric\", true);\r\n\tparam_default(\"step\", 2);\r\n\tparam_default(\"position\", null);\r\n\tparam_default(\"cache\", true);\r\n\tparam_default(\"showOthers\", false);\r\n\tparam_default(\"multiple\", null);\r\n\tparam_default(\"disabledPeriod\", []);\r\n\tparam_default(\"disabledDates\", []);\r\n\tvar tmp = [\"inputField\", \"displayArea\", \"button\"];\r\n\tfor (var i in tmp) {\r\n\t\tif (typeof params[tmp[i]] == \"string\") {\r\n\t\t\tparams[tmp[i]] = document.getElementById(params[tmp[i]]);\r\n\t\t}\r\n\t}\r\n\tif (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {\r\n\t\talert(\"Calendar.setup:\\n Nothing to setup (no fields found). Please check your code\");\r\n\t\treturn false;\r\n\t}\r\n\tfunction dateStatusHandler(date, year, month, iday) {\r\n\r\n\t\tvar finalDateStatus = false;\r\n\r\n\t\tif (params.disabledPeriod) {\r\n\r\n\t\t\tvar startDate = new Date(params.disabledPeriod[0].item1);\r\n\t\t\tvar finishDate = new Date(params.disabledPeriod[0].item2);\r\n\r\n\t\t\tif (startDate < date && finishDate > date)\r\n\t\t\t\tfinalDateStatus = false;\r\n\t\t\telse\r\n\t\t\t\tfinalDateStatus = \"disabled disabledday\";\r\n\t\t}\r\n\r\n\t\tif (params.disabledDates) {\r\n\r\n\t\t\tfor (var i = 0; i < params.disabledDates.length; i++) {\r\n\r\n\t\t\t\tvar disableDay = new Date(params.disabledDates[i]);\r\n\r\n\t\t\t\tif (date.getFullYear() == disableDay.getFullYear() &&\r\n\t\t\t\t\tdate.getMonth() == disableDay.getMonth() &&\r\n\t\t\t\t\tdate.getDate() == disableDay.getDate())\r\n\r\n\t\t\t\t\tfinalDateStatus = \"disabled disabledday\";\r\n\t\t\t}\r\n\t\t\tfinalDateStatus = false; // enable other dates\t\r\n\t\t}\r\n\r\n\t\tif (!params.disabledPeriod && !params.disabledDates) {\r\n\t\t\tfinalDateStatus = false;\r\n\t\t}\r\n\r\n\r\n\t\treturn finalDateStatus;\r\n\r\n\t}\r\n\r\n\tfunction onSelect(cal) {\r\n\t\tvar p = cal.params;\r\n\t\tvar update = (cal.dateClicked || p.electric);\r\n\t\tif (update && p.inputField) {\r\n\t\t\tp.inputField.value = cal.date.print(p.ifFormat);\r\n\t\t\tif (\"createEvent\" in document) {\r\n\t\t\t\tvar evt = document.createEvent(\"HTMLEvents\");\r\n\t\t\t\tevt.initEvent(\"change\", false, true);\r\n\t\t\t\tp.inputField.dispatchEvent(evt);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tp.inputField.fireEvent(\"onchange\");\r\n\t\t\t//if (typeof p.inputField.onchange == \"function\") p.inputField.onchange();\r\n\t\t}\r\n\t\tif (update && p.displayArea) p.displayArea.innerHTML = cal.date.print(p.daFormat);\r\n\t\tif (update && typeof p.onUpdate == \"function\") p.onUpdate(cal);\r\n\t\tif (update && p.flat) {\r\n\t\t\tif (typeof p.flatCallback == \"function\") p.flatCallback(cal);\r\n\t\t}\r\n\t\tif (update && p.singleClick && cal.dateClicked) cal.callCloseHandler();\r\n\t};\r\n\tif (params.flat != null) {\r\n\t\tif (typeof params.flat == \"string\") params.flat = document.getElementById(params.flat);\r\n\t\tif (!params.flat) {\r\n\t\t\talert(\"Calendar.setup:\\n Flat specified but can't find parent.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);\r\n\t\tcal.showsOtherMonths = params.showOthers;\r\n\t\tcal.showsTime = params.showsTime;\r\n\t\tcal.time24 = (params.timeFormat == \"24\");\r\n\t\tcal.params = params;\r\n\t\tcal.weekNumbers = params.weekNumbers;\r\n\t\tcal.setRange(params.range[0], params.range[1]);\r\n\t\tcal.setDateStatusHandler(params.dateStatusFunc);\r\n\t\tcal.getDateText = params.dateText;\r\n\t\tif (params.ifFormat) {\r\n\t\t\tcal.setDateFormat(params.ifFormat);\r\n\t\t}\r\n\t\tif (params.inputField && typeof params.inputField.value == \"string\") {\r\n\t\t\tcal.parseDate(params.inputField.value);\r\n\t\t}\r\n\t\tcal.create(params.flat);\r\n\t\tcal.show();\r\n\t\treturn false;\r\n\t}\r\n\tvar triggerEl = params.button || params.displayArea || params.inputField;\r\n\ttriggerEl[\"on\" + params.eventName] = function () {\r\n\t\tvar dateEl = params.inputField || params.displayArea;\r\n\t\tvar dateFmt = params.inputField ? params.ifFormat : params.daFormat;\r\n\t\tvar mustCreate = false;\r\n\t\tvar cal = window.calendar;\r\n\t\tif (dateEl) params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);\r\n\t\tif (!(cal && params.cache)) {\r\n\t\t\twindow.calendar = cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect, params.onClose || function (cal) {\r\n\t\t\t\tcal.hide();\r\n\t\t\t});\r\n\t\t\tcal.showsTime = params.showsTime;\r\n\t\t\tcal.time24 = (params.timeFormat == \"24\");\r\n\t\t\tcal.weekNumbers = params.weekNumbers;\r\n\t\t\tmustCreate = true;\r\n\t\t} else {\r\n\t\t\tif (params.date) cal.setDate(params.date);\r\n\t\t\tcal.hide();\r\n\t\t}\r\n\t\tif (params.multiple) {\r\n\t\t\tcal.multiple = {};\r\n\t\t\tfor (var i = params.multiple.length; --i >= 0;) {\r\n\t\t\t\tvar d = params.multiple[i];\r\n\t\t\t\tvar ds = d.print(\"%Y%m%d\");\r\n\t\t\t\tcal.multiple[ds] = d;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcal.showsOtherMonths = params.showOthers;\r\n\t\tcal.yearStep = params.step;\r\n\t\tcal.setRange(params.range[0], params.range[1]);\r\n\t\tcal.params = params;\r\n\t\tcal.setDateStatusHandler(params.dateStatusFunc);\r\n\t\tcal.getDateText = params.dateText;\r\n\t\tcal.setDateFormat(dateFmt);\r\n\t\tif (mustCreate) cal.create();\r\n\t\tcal.refresh();\r\n\t\tif (!params.position) cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);\r\n\t\telse cal.showAt(params.position[0], params.position[1]);\r\n\t\treturn false;\r\n\t};\r\n\treturn cal;\r\n};\r\n\r\n\r\n// global object that remembers the calendar\r\nwindow._dynarch_popupCalendar = null;","window.calendarcontrol = function () {\r\n var instance = {\r\n init: function (elid) {\r\n const el = document.getElementById(elid);\r\n el.onkeydown = onkeydown;\r\n el.onkeypress = onkeypress;\r\n el.onkeyup = onkeyup;\r\n el.ondrop = ondrop;\r\n\t\t\tel.onpaste = onpaste;\r\n\t\t\tel.addEventListener(\"focusin\", function (e) {\r\n\t\t\t\tcurrentVal = el.value;\r\n\t\t\t});\r\n\t\t\tel.addEventListener(\"focusout\", function (e) {\r\n\t\t\t\tif (currentVal != el.value)\r\n\t\t\t\t\t$(el).trigger('change');\r\n\t\t\t});\r\n\t\t\tif (el.hasAttribute('data-orig')) {\r\n\t\t\t\tel.addEventListener(\"change\", function (e) {\r\n\t\t\t\t\tconst val = Date.parseDate(el.value, '%d.%m.%Y');\r\n\t\t\t\t\tconst orig = Date.parseDate(el.getAttribute('data-orig'), '%Y-%m-%d');\r\n\t\t\t\t\tif (!val.equalsTo(orig))\r\n\t\t\t\t\t\tel.style.backgroundColor = 'rgba(51, 153, 51, 0.1)';\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tel.style.backgroundColor = '';\r\n\t\t\t\t});\r\n\t\t\t}\r\n }\r\n\t};\r\n\r\n\tvar currentVal = null;\r\n \r\n function onkeyup(event) {\r\n $(this).trigger('input');\r\n return true;\r\n }\r\n\r\n function ondrop(event) {\r\n const str = event.dataTransfer.getData(\"text\");\r\n const d = Date.parseDate(str, '%d.%m.%Y');\r\n if (!d) return false;\r\n $(this).trigger('input');\r\n return true;\r\n }\r\n function onpaste(event) {\r\n const str = event.clipboardData.getData(\"text\");\r\n const d = Date.parseDate(str, '%d.%m.%Y');\r\n if (!d) return false;\r\n $(this).trigger('input');\r\n return true;\r\n }\r\n\r\n function onkeydown(event) {\r\n const target = event.srcElement;\r\n const pos = getCaretPos(target);\r\n const len = target.value.length;\r\n\r\n if (event.keyCode === 46) { // del\r\n target.value = target.value.substring(0, pos);\r\n $(this).trigger('input');\r\n return false;\r\n }\r\n if (event.keyCode === 8 && pos !== len) { //backspace\r\n return false;\r\n }\r\n }\r\n\r\n function onkeypress(event) {\r\n var char = String.fromCharCode(event.charCode);\r\n const target = event.srcElement;\r\n\r\n if ('0123456789'.indexOf(char) === -1)\r\n return false;\r\n $(this).trigger('input');\r\n\r\n var pos = getCaretPos(target);\r\n var pos0 = pos === 2 || pos === 5 ? pos + 1 : pos;\r\n const char0 = char;\r\n var len = target.value.length;\r\n var val = target.value;\r\n\r\n function next() {\r\n if (pos === 2 || pos === 5)\r\n pos++;\r\n if (pos === pos0)\r\n val = val.substring(0, pos0) + char0 + val.substring(pos0 + 1);\r\n pos++;\r\n if (pos === 2 || pos === 5 || pos === 8)\r\n pos++;\r\n char = val.substring(pos, pos + 1);\r\n }\r\n\r\n function reject() {\r\n if (pos0 < len)\r\n target.value = target.value.substring(0, pos0);\r\n if (pos > pos0)\r\n target.value = target.value + char0;\r\n return false;\r\n }\r\n\r\n if (pos === 0) {\r\n if ('0123'.indexOf(char) === -1)\r\n return reject();\r\n if (pos < len) next();\r\n }\r\n\r\n if (pos === 1) {\r\n if (val.substring(0, 1) === '3' && '01'.indexOf(char) === -1)\r\n return reject();\r\n if (pos < len) next();\r\n }\r\n\r\n if (pos === 2 || pos === 3) {\r\n const day = val.substring(0, 2);\r\n if (day === '31' && '013578'.indexOf(char) === -1)\r\n return reject();\r\n if (day === '30' && char === '2')\r\n return reject();\r\n if (pos < len) {\r\n if ('01'.indexOf(char) === -1) {\r\n pos = pos0 = 4;\r\n char = char0;\r\n target.setSelectionRange(pos0 + 1, pos0 + 1);\r\n }\r\n else\r\n next();\r\n }\r\n }\r\n\r\n if (pos === 4) {\r\n const day = val.substring(0, 2);\r\n const m1 = val.substring(3, 4);\r\n if (day === '31' && m1 === '0' && '13578'.indexOf(char) === -1)\r\n return reject();\r\n if (day === '31' && m1 === '1' && char === '1')\r\n return reject();\r\n if (day === '30' && m1 === '0' && char === '2')\r\n return reject();\r\n if (m1 === '1' && '012'.indexOf(char) === -1)\r\n return reject();\r\n if (pos < len) next();\r\n }\r\n\r\n if (pos === 5 || pos === 6) {\r\n if ('12'.indexOf(char) === -1)\r\n return reject();\r\n if (pos < len) next();\r\n }\r\n\r\n if (pos === 7) {\r\n const y1 = val.substring(6, 7);\r\n if (y1 === '1' && char !== '9')\r\n return reject();\r\n if (y1 === '2' && char !== '0')\r\n return reject();\r\n if (pos < len) next();\r\n }\r\n\r\n if (pos === 9 && val.substring(0, 5) === '29.02') {\r\n const year = parseInt(val.substring(6, 9) + char);\r\n const isLeap = ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\r\n if (!isLeap)\r\n return reject();\r\n }\r\n\r\n if (pos > 9)\r\n return reject();\r\n\r\n if (len === 2) {\r\n target.value += '.';\r\n if ('01'.indexOf(char0) === -1) {\r\n target.value += '0';\r\n }\r\n }\r\n else if (len === 3 && '01'.indexOf(char0) === -1) {\r\n target.value += '0';\r\n }\r\n else if (len === 5 && pos0 > len) {\r\n target.value += '.';\r\n }\r\n\r\n\r\n if (pos0 < len) {\r\n target.value = target.value.substring(0, pos0) + char0 + target.value.substring(pos0 + 1);\r\n\t\t\ttarget.setSelectionRange(pos0 + 1, pos0 + 1);\r\n\t\t\tvar event = new Event('change');\r\n\t\t\ttarget.dispatchEvent(event);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function getCaretPos(oField) {\r\n // Initialize\r\n var iCaretPos = 0;\r\n\r\n // IE Support\r\n if (document.selection) {\r\n\r\n // Set focus on the element\r\n oField.focus();\r\n\r\n // To get cursor position, get empty selection range\r\n var oSel = document.selection.createRange();\r\n\r\n // Move selection start to 0 position\r\n oSel.moveStart('character', -oField.value.length);\r\n\r\n // The caret position is selection length\r\n iCaretPos = oSel.text.length;\r\n }\r\n\r\n // Firefox support\r\n else if (oField.selectionStart || oField.selectionStart === '0')\r\n iCaretPos = oField.selectionStart;\r\n\r\n // Return results\r\n return (iCaretPos);\r\n }\r\n\r\n return instance;\r\n}();","// ** I18N\r\n\r\n// Calendar EN language\r\n// Author: Mihai Bazon, \r\n// Encoding: any\r\n// Distributed under the same terms as the calendar itself.\r\n\r\n// For translators: please use UTF-8 if possible. We strongly believe that\r\n// Unicode is the answer to a real internationalized world. Also please\r\n// include your contact information in the header, as can be seen above.\r\n\r\n// full day names\r\nCalendar._DN = new Array\r\n(\"Воскресенье\",\r\n \"Понедельник\",\r\n \"Вторник\",\r\n \"Среда\",\r\n \"Четверг\",\r\n \"Пятница\",\r\n \"Суббота\",\r\n \"Воскресенье\");\r\n\r\n// Please note that the following array of short day names (and the same goes\r\n// for short month names, _SMN) isn't absolutely necessary. We give it here\r\n// for exemplification on how one can customize the short day names, but if\r\n// they are simply the first N letters of the full name you can simply say:\r\n//\r\n// Calendar._SDN_len = N; // short day name length\r\n// Calendar._SMN_len = N; // short month name length\r\n//\r\n// If N = 3 then this is not needed either since we assume a value of 3 if not\r\n// present, to be compatible with translation files that were written before\r\n// this feature.\r\n\r\n// short day names\r\nCalendar._SDN = new Array\r\n(\"Вс\",\r\n \"Пн\",\r\n \"Вт\",\r\n \"Ср\",\r\n \"Чт\",\r\n \"Пт\",\r\n \"Сб\",\r\n \"Вс\");\r\n\r\n// First day of the week. \"0\" means display Sunday first, \"1\" means display\r\n// Monday first, etc.\r\nCalendar._FD = 1;\r\n\r\n// full month names\r\nCalendar._MN = new Array\r\n(\"Январь\",\r\n \"Февраль\",\r\n \"Март\",\r\n \"Апрель\",\r\n \"Май\",\r\n \"Июнь\",\r\n \"Июль\",\r\n \"Август\",\r\n \"Сентябрь\",\r\n \"Октябрь\",\r\n \"Ноябрь\",\r\n \"Декабрь\");\r\n\r\n// short month names\r\nCalendar._SMN = new Array\r\n(\"Янв\",\r\n \"Фев\",\r\n \"Мар\",\r\n \"Апр\",\r\n \"Май\",\r\n \"Июн\",\r\n \"Июл\",\r\n \"Авг\",\r\n \"Сен\",\r\n \"Окт\",\r\n \"Ноя\",\r\n \"Дек\");\r\n\r\n// tooltips\r\nCalendar._TT = {};\r\nCalendar._TT[\"INFO\"] = \"Справка\";\r\n\r\nCalendar._TT[\"ABOUT\"] =\r\n\"Выбор даты:\\n\" +\r\n\"- Используйте кнопки \\xab \\xbb для выбора года\\n\" +\r\n\"- Используйте кнопки \" + String.fromCharCode(0x2039) + \" \" + String.fromCharCode(0x203a) + \" для выбора месяца\\n\" +\r\n\"- Удерживайте кнопку мыши на вышеперечисленных кнопках для отображения списков.\";\r\nCalendar._TT[\"ABOUT_TIME\"] = \"\\n\\n\" +\r\n\"Выбор времени:\\n\" +\r\n\"- Кликните по часам или минутам для увеличения их значения\\n\" +\r\n\"- удерживайте Shift для уменьшения значения\\n\" +\r\n\"- удерживайте кнопку и перемещайте мышь для быстрого выбора.\";\r\n\r\nCalendar._TT[\"PREV_YEAR\"] = \"Пред. год\";\r\nCalendar._TT[\"PREV_MONTH\"] = \"Пред. месяц\";\r\nCalendar._TT[\"GO_TODAY\"] = \"Сегодня\";\r\nCalendar._TT[\"NEXT_MONTH\"] = \"След. месяц\";\r\nCalendar._TT[\"NEXT_YEAR\"] = \"След. год\";\r\nCalendar._TT[\"SEL_DATE\"] = \"Выберите дату\";\r\nCalendar._TT[\"DRAG_TO_MOVE\"] = \"Перемещение\";\r\nCalendar._TT[\"PART_TODAY\"] = \" (сегодня)\";\r\n\r\n// the following is to inform that \"%s\" is to be the first day of week\r\n// %s will be replaced with the day name.\r\nCalendar._TT[\"DAY_FIRST\"] = \"Отображать %s первым\";\r\n\r\n// This may be locale-dependent. It specifies the week-end days, as an array\r\n// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1\r\n// means Monday, etc.\r\nCalendar._TT[\"WEEKEND\"] = \"0,6\";\r\n\r\nCalendar._TT[\"CLOSE\"] = \"Закрыть\";\r\nCalendar._TT[\"TODAY\"] = \"Сегодня\";\r\nCalendar._TT[\"TIME_PART\"] = \"Кликните для изменения\";\r\n\r\n// date formats\r\nCalendar._TT[\"DEF_DATE_FORMAT\"] = \"%Y-%m-%d\";\r\nCalendar._TT[\"TT_DATE_FORMAT\"] = \"%a, %b %e\";\r\n\r\nCalendar._TT[\"WK\"] = \"wk\";\r\nCalendar._TT[\"TIME\"] = \"Time:\";\r\n","/*\r\n *contextMenu.js v 1.4.0\r\n *Author: Sudhanshu Yadav\r\n *s-yadav.github.com\r\n *Copyright (c) 2013-2015 Sudhanshu Yadav.\r\n *Dual licensed under the MIT and GPL licenses\r\n */\r\n; (function ($, window, document, cu) {\r\n\t\"use strict\";\r\n\r\n\tfunction callMethod(el, method, selector, option) {\r\n\t\tvar myoptions = option;\r\n\t\tif (method != 'update') {\r\n\t\t\toption = iMethods.optionOptimizer(method, option);\r\n\t\t\tmyoptions = $.extend({}, $.fn.contextMenu.defaults, option);\r\n\t\t\tif (!myoptions.baseTrigger) {\r\n\t\t\t\tmyoptions.baseTrigger = el;\r\n\t\t\t}\r\n\t\t}\r\n\t\tmethods[method].call(el, selector, myoptions);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tconst state = {\r\n\t\ttimer: null,\r\n\t\tresetTimer: function () {\r\n\t\t\tif (state.timer) {\r\n\t\t\t\twindow.clearTimeout(state.timer);\r\n\t\t\t\tstate.timer = null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfunction delay(caller, func, timeout) {\r\n\t\tif (!timeout) {\r\n\t\t\ttimeout = 400;\r\n\t\t}\r\n\t\tstate.resetTimer();\r\n\t\tstate.timer = window.setTimeout(function () { func(caller); }, timeout);\r\n\t}\r\n\r\n\t$.fn.contextMenu = function (selector, option) {\r\n\t\treturn callMethod(this, 'popup', selector, option);\r\n\t};\r\n\r\n\t$.fn.contextMenu.defaults = {\r\n\t\ttriggerOn: 'click', //avaliable options are all event related mouse plus enter option\r\n\t\tdisplayAround: 'cursor', // cursor or trigger\r\n\t\tmouseClick: 'left',\r\n\t\tcloseOther: true, //to close other already opened context menu\r\n\t\tcloseOnResize: true,\r\n\t\tcloseOnScroll: true,\r\n\t\tcloseOnClick: false, //close context menu on click/ trigger of any item in menu\r\n\t\tcloseOnClickSelector: null,\r\n\t\ttype: 'default',\r\n\t\tdelay: 0,\r\n\r\n\t\t//callback\r\n\t\tbeforeOpen: function (data, event) { return 0; },\r\n\t\tonOpen: function (data, event) { return $.when(); },\r\n\t\tbeforeDisplay: function (data, event) { return 1; },\r\n\t\tafterOpen: function (data, event) { },\r\n\t\tonClose: function (data, event) { }\r\n\t};\r\n\r\n\tvar methods = {\r\n\t\tmenu: function (selector, option) {\r\n\t\t\tvar trigger = $(this);\r\n\t\t\tiMethods.contextMenuBind.call(this, selector, option, 'menu');\r\n\t\t},\r\n\t\tpopup: function (selector, option) {\r\n\t\t\twindow.setTimeout(function () { $(selector).addClass('iw-contextMenu-fixed'); }, 1);\r\n\t\t\t$(selector).addClass('iw-contextMenu');\r\n\t\t\tiMethods.contextMenuBind.call(this, selector, option, 'popup');\r\n\t\t},\r\n\t\tupdate: function (selector, option) {\r\n\t\t\tvar self = this;\r\n\t\t\toption = option || {};\r\n\r\n\t\t\tthis.each(function () {\r\n\t\t\t\tvar trgr = $(this),\r\n\t\t\t\t\tmenuData = trgr.data('iw-menuData');\r\n\t\t\t\t//refresh if any new element is added\r\n\t\t\t\tif (!menuData) {\r\n\t\t\t\t\tself.contextMenu('refresh');\r\n\t\t\t\t\tmenuData = trgr.data('iw-menuData');\r\n\t\t\t\t}\r\n\t\t\t\t//bind event again if trigger option has changed.\r\n\t\t\t\tvar triggerOn = option.triggerOn;\r\n\t\t\t\tif (triggerOn) {\r\n\t\t\t\t\ttrgr.unbind('.contextMenu');\r\n\r\n\t\t\t\t\t//add contextMenu identifier on all events\r\n\t\t\t\t\ttriggerOn = triggerOn.split(\" \");\r\n\t\t\t\t\tvar events = [];\r\n\t\t\t\t\tfor (var i = 0, ln = triggerOn.length; i < ln; i++) {\r\n\t\t\t\t\t\tevents.push(triggerOn[i] + '.contextMenu')\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//to bind event\r\n\t\t\t\t\ttrgr.bind(events.join(' '), iMethods.eventHandler);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set menu data back to trigger element\r\n\t\t\t\tmenuData.option = $.extend({}, menuData.option, option);\r\n\t\t\t\ttrgr.data('iw-menuData', menuData);\r\n\t\t\t});\r\n\t\t},\r\n\t\trefresh: function () {\r\n\t\t\tvar menuData = this.filter(function () {\r\n\t\t\t\treturn !!$(this).data('iw-menuData');\r\n\t\t\t}).data('iw-menuData'),\r\n\t\t\t\tnewElm = this.filter(function () {\r\n\t\t\t\t\treturn !$(this).data('iw-menuData');\r\n\t\t\t\t});\r\n\t\t\t//to change basetrigger on refresh \r\n\t\t\tmenuData.option.baseTrigger = this;\r\n\t\t\tiMethods.contextMenuBind.call(newElm, menuData.menuSelector, menuData.option);\r\n\t\t},\r\n\t\topen: function (sel, data) {\r\n\t\t\tdata = data || {};\r\n\t\t\tvar e = data.event || $.Event('click');\r\n\t\t\tif (data.top) e.clientY = data.top;\r\n\t\t\tif (data.left) e.clientX = data.left;\r\n\r\n\t\t\tiMethods.eventHandler.call(data.baseTrigger, e);\r\n\t\t},\r\n\t\t//to force context menu to close\r\n\t\tclose: function () {\r\n\t\t\tvar menuData = this.data('iw-menuData');\r\n\t\t\tif (menuData) {\r\n\t\t\t\tiMethods.closeContextMenu(menuData.option, this, menuData.menu, null);\r\n\t\t\t}\r\n\t\t},\r\n\t\tdestroy: function () {\r\n\t\t\tthis.each(function () {\r\n\t\t\t\tvar trgr = $(this),\r\n\t\t\t\t\tmenuId = trgr.data('iw-menuData').menuId,\r\n\t\t\t\t\tmenu = $('.iw-contextMenu[menuId=' + menuId + ']'),\r\n\t\t\t\t\tmenuData = menu.data('iw-menuData');\r\n\r\n\t\t\t\t//Handle the situation of dynamically added element.\r\n\t\t\t\tif (!menuData) return;\r\n\r\n\t\t\t\tif (menuData.noTrigger == 1) {\r\n\t\t\t\t\tif (menu.hasClass('iw-created')) {\r\n\t\t\t\t\t\tmenu.remove();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmenu.removeClass('iw-contextMenu ' + menuId).removeAttr('menuId').removeData('iw-menuData');\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmenuData.noTrigger--;\r\n\t\t\t\t\tmenu.data('iw-menuData', menuData);\r\n\t\t\t\t}\r\n\t\t\t\ttrgr.unbind('.contextMenu').removeClass('iw-mTrigger').removeData('iw-menuData');\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tvar iMethods = {\r\n\t\tcontextMenuBind: function (selector, option, method) {\r\n\t\t\tvar trigger = this,\r\n\t\t\t\tmenu = $(selector),\r\n\t\t\t\tmenuData = menu.data('iw-menuData');\r\n\r\n\t\t\t//fallback\r\n\t\t\tif (menu.length == 0) {\r\n\t\t\t\tmenu = trigger.find(selector);\r\n\t\t\t\tif (menu.length == 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//get base trigger\r\n\t\t\tvar baseTrigger = option.baseTrigger;\r\n\r\n\t\t\tif (!menuData) {\r\n\t\t\t\tvar menuId;\r\n\t\t\t\tif (!baseTrigger.data('iw-menuData')) {\r\n\t\t\t\t\tmenuId = Math.ceil(Math.random() * 100000);\r\n\t\t\t\t\tbaseTrigger.data('iw-menuData', {\r\n\t\t\t\t\t\t'menuId': menuId\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmenuId = baseTrigger.data('iw-menuData').menuId;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmenuData = {\r\n\t\t\t\t\t'menuId': menuId,\r\n\t\t\t\t\t'noTrigger': 1,\r\n\t\t\t\t\t'trigger': trigger,\r\n\t\t\t\t\t'option': option\r\n\t\t\t\t};\r\n\r\n\t\t\t\t//to set data on selector\r\n\t\t\t\tmenu.attr('menuId', menuId);\r\n\t\t\t} else {\r\n\t\t\t\tmenuData.noTrigger++;\r\n\t\t\t}\r\n\r\n\t\t\tmenu.data('iw-menuData', menuData);\r\n\r\n\t\t\t//to set data on trigger\r\n\t\t\ttrigger.addClass('iw-mTrigger').data('iw-menuData', {\r\n\t\t\t\t'menuId': menuData.menuId,\r\n\t\t\t\t'option': option,\r\n\t\t\t\t'menu': menu,\r\n\t\t\t\t'menuSelector': selector,\r\n\t\t\t\t'method': method\r\n\t\t\t});\r\n\r\n\t\t\t//hover fix\r\n\t\t\tvar triggerOn = option.triggerOn;\r\n\t\t\tif (triggerOn.indexOf('hover') != -1) {\r\n\t\t\t\ttriggerOn = triggerOn.replace('hover', 'mouseenter');\r\n\t\t\t\t//hover out if display is of context menu is on hover\r\n\t\t\t\tif (baseTrigger.index(trigger) != -1 && !option.closeOnClick) {\r\n\t\t\t\t\tbaseTrigger.add(menu).bind('mouseleave.contextMenu', function (e) {\r\n\t\t\t\t\t\tif ($(e.relatedTarget).closest('.iw-contextMenu').length == 0) {\r\n\t\t\t\t\t\t\tiMethods.clearMenuStyle($('.iw-contextMenu'));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttrigger.bind('mouseleave', function (e) {\r\n\t\t\t\t\tconst clbckData = { trigger: trigger, menu: menu, options: option, state: state };\r\n\t\t\t\t\toption.onMouseLeave.call(this, clbckData, e);\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\t/*trigger.delegate('input,a,.needs-click', 'click', function (e) {\r\n\t\t\t\te.stopImmediatePropagation()\r\n\t\t\t});*/\r\n\r\n\t\t\t//add contextMenu identifier on all events\r\n\t\t\ttriggerOn = triggerOn.split(' ');\r\n\t\t\tvar events = [];\r\n\t\t\tfor (var i = 0, ln = triggerOn.length; i < ln; i++) {\r\n\t\t\t\tevents.push(triggerOn[i] + '.contextMenu')\r\n\t\t\t}\r\n\r\n\t\t\t//to bind event\r\n\t\t\ttrigger.bind(events.join(' '), iMethods.eventHandler);\r\n\r\n\t\t\t//to stop bubbling in menu\r\n\t\t\tmenu.bind('click mouseenter', function (e) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif (option.closeOnClick) {\r\n\t\t\t\tmenu.bind('click', function (e) {\r\n\t\t\t\t\tvar b = true;\r\n\t\t\t\t\tvar submenu = false;\r\n\t\t\t\t\tvar a = e.target;\r\n\t\t\t\t\twhile (a && !(a instanceof HTMLBodyElement) && !(a instanceof HTMLDocument)) {\r\n\t\t\t\t\t\tif (a.classList.contains('iw-contextMenu')) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else if (a.classList.contains('iw-mTrigger')) {\r\n\t\t\t\t\t\t\tsubmenu = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ta = a.parentNode;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (submenu) return;\r\n\t\t\t\t\tif (option.closeOnClickSelector) b = option.closeOnClickSelector(e.target);\r\n\t\t\t\t\tif (b) {\r\n\t\t\t\t\t\tiMethods.closeContextMenu(option, trigger, menu, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//var existing = document.body.querySelectorAll(\"#\" + menu[0].id);\r\n\t\t\t//for (var i = existing.length - 1; i >= 0; i--) {\r\n\t\t\t//\tif (existing[i].parentElement == document.body)\r\n\t\t\t//\t\tdocument.body.removeChild(existing[i]);\r\n\t\t\t//}\r\n\t\t\t//document.body.appendChild(menu[0]);\r\n\t\t},\r\n\t\teventHandler: function (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar trigger = $(this),\r\n\t\t\t\ttrgrData = trigger.data('iw-menuData'),\r\n\t\t\t\tmenu = trgrData.menu,\r\n\t\t\t\tmenuData = menu.data('iw-menuData'),\r\n\t\t\t\toption = trgrData.option,\r\n\t\t\t\tclbckData = { trigger: trigger, menu: menu, options: option, state: state };\r\n\r\n\t\t\tvar baseEl = option.baseTrigger ? option.baseTrigger : trigger;\r\n\t\t\tvar res = option.beforeOpen.call(this, clbckData, e);\r\n\r\n\t\t\tif (res != 0 && res != 1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar menus = $('.iw-contextMenu').not(menu.selector);\r\n\t\t\t//var a = trigger[0];\r\n\t\t\t//var parentMenu = null;\r\n\t\t\t//var parentMenuData = null;\r\n\t\t\t//while (a && !(a instanceof HTMLBodyElement) && !(a instanceof HTMLDocument)) {\r\n\t\t\t//\tif (a.classList.contains('iw-contextMenu')) {\r\n\t\t\t//\t\tmenus = menus.not('#' + a.id);\r\n\t\t\t//\t\tif (!parentMenu) parentMenu = a;\r\n\t\t\t//\t}\r\n\t\t\t//\ta = a.parentNode;\r\n\t\t\t//}\r\n\r\n\t\t\t//if (parentMenu) {\r\n\t\t\t//\tparentMenuData = $(parentMenu).data('iw-menuData');\r\n\t\t\t//\toption.type = parentMenuData.option.type;\r\n\t\t\t//\toption.displayAround = parentMenuData.option.displayAround;\r\n\t\t\t//}\r\n\r\n\t\t\tif (res == 0) {\r\n\t\t\t\t//to close previous open menu.\r\n\t\t\t\tif (option.closeOther) {\r\n\t\t\t\t\tiMethods.clearMenuStyle(menus);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (res == 1) {\r\n\t\t\t\t//to close previous open menu.\r\n\t\t\t\tif (option.closeOther) {\r\n\t\t\t\t\tiMethods.clearMenuStyle($('.iw-contextMenu'));\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tmenu.addClass('iw-opening');\r\n\r\n\t\t\tvar openMenu = function () {\r\n\t\t\t\tif (!menu.hasClass('iw-opening'))\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar cObj = $(window),\r\n\t\t\t\t\tcHeight = cObj.innerHeight(),\r\n\t\t\t\t\tcWidth = cObj.innerWidth(),\r\n\t\t\t\t\tcTop = 0,\r\n\t\t\t\t\tcLeft = 0,\r\n\t\t\t\t\tleft = null,\r\n\t\t\t\t\ttop = null;\r\n\r\n\t\t\t\tmenu.addClass('iw-type-' + option.type);\r\n\r\n\t\t\t\tif (!menuData.menuHeight) {\r\n\t\t\t\t\tvar inner = menu[0].cloneNode(true);\r\n\t\t\t\t\tdocument.body.appendChild(inner);\r\n\r\n\t\t\t\t\tconst h = inner.offsetHeight;\r\n\t\t\t\t\tinner.style.height = '1px';\r\n\r\n\t\t\t\t\tmenuData.menuWidth = inner.offsetWidth;\r\n\t\t\t\t\tmenuData.menuHeight = h;\r\n\r\n\t\t\t\t\tinner.parentNode.removeChild(inner);\r\n\t\t\t\t}\r\n\t\t\t\tvar menuHeight = menuData.menuHeight;\r\n\t\t\t\tvar menuWidth = menuData.menuWidth;\r\n\r\n\t\t\t\tif (option.displayAround == 'cursor') {\r\n\t\t\t\t\tleft = e.clientX;\r\n\t\t\t\t\ttop = e.clientY;\r\n\t\t\t\t} else if (option.displayAround.startsWith('trigger')) {\r\n\t\t\t\t\tvar rect = baseEl[0].getBoundingClientRect();\r\n\t\t\t\t\tvar parentOffset = cu.getParentOffset(baseEl[0]);\r\n\r\n\t\t\t\t\tvar triggerHeight = baseEl.outerHeight(true),\r\n\t\t\t\t\t\ttriggerWidth = baseEl.outerWidth(true),\r\n\t\t\t\t\t\ttriggerLeft = rect.left - parentOffset.left,\r\n\t\t\t\t\t\ttriggerTop = rect.top - parentOffset.top,\r\n\t\t\t\t\t\tleftShift = triggerWidth;\r\n\r\n\t\t\t\t\tif (option.displayAround == 'triggertop') {\r\n\t\t\t\t\t\ttop = triggerTop - menuHeight;\r\n\t\t\t\t\t\tleft = triggerLeft;\r\n\t\t\t\t\t} else if (option.displayAround == 'triggerleft') {\r\n\t\t\t\t\t\ttop = triggerTop;\r\n\t\t\t\t\t\tleft = triggerLeft - menuWidth;\r\n\t\t\t\t\t} else if (option.displayAround == 'triggerbottom') {\r\n\t\t\t\t\t\ttop = triggerTop + triggerHeight;\r\n\t\t\t\t\t\tleft = triggerLeft;\r\n\t\t\t\t\t} else if (option.displayAround == 'triggerright') {\r\n\t\t\t\t\t\ttop = triggerTop;\r\n\t\t\t\t\t\tleft = triggerLeft + triggerWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//applying css property\r\n\t\t\t\tvar cssObj = { 'opacity': '1' };\r\n\r\n\t\t\t\t//max height and width of context menu\r\n\t\t\t\tif (top) {\r\n\t\t\t\t\tif (top + menuHeight > cHeight && top - menuHeight >= 0) {\r\n\t\t\t\t\t\ttop = top - menuHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcssObj.top = top + 'px';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (left) {\r\n\t\t\t\t\tif (left + menuWidth > cWidth && cWidth - menuWidth >= 0) {\r\n\t\t\t\t\t\tleft = cWidth - menuWidth - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcssObj.left = left + 'px';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (menuHeight > cHeight - top)\r\n\t\t\t\t\tcssObj.bottom = '5px';\r\n\t\t\t\telse\r\n\t\t\t\t\tcssObj.bottom = '';\r\n\r\n\t\t\t\tvar res = option.beforeDisplay.call(this, clbckData, e);\r\n\t\t\t\tif (res != 1) {\r\n\t\t\t\t\tiMethods.clearMenuStyle($('.iw-contextMenu'));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (option.width == 'trigger') {\r\n\t\t\t\t\tcssObj.width = triggerWidth;\r\n\t\t\t\t}\r\n\t\t\t\t//if (parentMenu) {\r\n\t\t\t\t//cssObj.left = parentMenu.style.left;\r\n\t\t\t\t//cssObj.top = parentMenu.style.top;\r\n\t\t\t\t//var positionInfo = parentMenu.getBoundingClientRect();\r\n\t\t\t\t//if (positionInfo.width > menu.width())\r\n\t\t\t\t//\tcssObj.width = positionInfo.width;\r\n\t\t\t\t//if (positionInfo.height > menu.height())\r\n\t\t\t\t//\tcssObj.height = positionInfo.height;\r\n\t\t\t\t//parentMenu.classList.remove('iw-display');\r\n\t\t\t\t//}\r\n\r\n\t\t\t\tmenu.removeClass('iw-opening');\r\n\t\t\t\tmenu.css(cssObj).addClass('iw-display');\r\n\r\n\t\t\t\t//to call after open call back\r\n\t\t\t\toption.baseTrigger.addClass('iw-opened');\r\n\t\t\t\toption.afterOpen.call(this, clbckData, e);\r\n\r\n\t\t\t\t//to add current menu class\r\n\t\t\t\t//if (trigger.closest('.iw-contextMenu').length == 0) {\r\n\t\t\t\t//\t$('.iw-curMenu').removeClass('iw-curMenu');\r\n\t\t\t\t//\tmenu.addClass('iw-curMenu');\r\n\t\t\t\t//}\r\n\r\n\t\t\t\tvar dataParm = {\r\n\t\t\t\t\ttrigger: trigger,\r\n\t\t\t\t\tmenu: menu,\r\n\t\t\t\t\toption: option,\r\n\t\t\t\t\tmethod: trgrData.method\r\n\t\t\t\t};\r\n\r\n\t\t\t\t$('html').unbind('click', iMethods.clickEvent).click(dataParm, iMethods.clickEvent);\r\n\r\n\t\t\t\tif (option.closeOnResize) {\r\n\t\t\t\t\t$(window).bind('resize', dataParm, iMethods.scrollEvent);\r\n\t\t\t\t}\r\n\t\t\t\tif (option.closeOnScroll) {\r\n\t\t\t\t\tvar pn = dataParm.menu[0].parentNode;\r\n\t\t\t\t\twhile (pn) {\r\n\t\t\t\t\t\t$(pn).bind('scroll', dataParm, iMethods.scrollEvent);\r\n\t\t\t\t\t\tpn = pn.parentNode;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t//call open callback\r\n\t\t\tif (option.delay > 0)\r\n\t\t\t\tdelay(this, function (caller) {\r\n\t\t\t\t\toption.onOpen.call(caller, clbckData, e).done(openMenu);\r\n\t\t\t\t});\r\n\t\t\telse\r\n\t\t\t\toption.onOpen.call(this, clbckData, e).done(openMenu);\r\n\r\n\t\t\t/*if (!trigger.hasClass('iw_opened')) {\r\n\t\t\t\t\r\n\t\t\t}*/\r\n\t\t},\r\n\r\n\t\tscrollEvent: function (e) {\r\n\t\t\tiMethods.closeContextMenu(e.data.option, e.data.trigger, e.data.menu, e);\r\n\t\t},\r\n\r\n\t\tclickEvent: function (e) {\r\n\t\t\tvar button = e.data.trigger.get(0);\r\n\r\n\t\t\tif ((button !== e.target) && ($(e.target).closest('.iw-mTrigger').length == 0)) {\r\n\t\t\t\tiMethods.closeContextMenu(e.data.option, e.data.trigger, e.data.menu, e);\r\n\t\t\t}\r\n\t\t},\r\n\t\tcloseContextMenu: function (option, trigger, menu, e) {\r\n\r\n\t\t\t//unbind all events from top DOM\r\n\t\t\t$('html').unbind('click', iMethods.clickEvent);\r\n\t\t\tvar pn = menu[0].parentNode;\r\n\t\t\twhile (pn) {\r\n\t\t\t\t$(pn).unbind('scroll', iMethods.scrollEvent);\r\n\t\t\t\tpn = pn.parentNode;\r\n\t\t\t}\r\n\t\t\t$(window).unbind('resize', iMethods.scrollEvent);\r\n\t\t\tiMethods.clearMenuStyle($('.iw-contextMenu'));\r\n\t\t\t$(document).focus();\r\n\r\n\t\t\toption.baseTrigger.removeClass('iw-opened');\r\n\r\n\t\t\t//call close function\r\n\t\t\toption.onClose.call(this, {\r\n\t\t\t\ttrigger: trigger,\r\n\t\t\t\tmenu: menu,\r\n\t\t\t\toptions: option\r\n\t\t\t}, e);\r\n\t\t},\r\n\t\toptionOptimizer: function (method, option) {\r\n\t\t\tif (!option) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (method == 'menu') {\r\n\t\t\t\tif (!option.mouseClick) {\r\n\t\t\t\t\toption.mouseClick = 'right';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ((option.mouseClick == 'right') && (option.triggerOn == 'click')) {\r\n\t\t\t\toption.triggerOn = 'contextmenu';\r\n\t\t\t}\r\n\r\n\t\t\treturn option;\r\n\t\t},\r\n\t\tclearMenuStyle: function (menu) {\r\n\t\t\tmenu.removeClass('iw-display').removeClass('iw-opening').css('opacity', '0')\r\n\t\t\t\t.removeClass('iw-type-default').removeClass('iw-type-slidermenu')\r\n\t\t\t\t.css('left', '').css('top', '').css('bottom', '').css('width', '').css('height', '');\r\n\t\t}\r\n\t};\r\n})(jQuery, window, document, commonUtils);","/**\r\n* @version: 3.0.5\r\n* @author: Dan Grossman http://www.dangrossman.info/\r\n* @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.\r\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\r\n* @website: http://www.daterangepicker.com/\r\n*/\r\n(function (moment, $) {\r\n var DateRangePicker = function (element, options, cb) {\r\n\r\n //default settings for options\r\n this.parentEl = 'body';\r\n this.element = $(element);\r\n this.startDate = moment().startOf('day');\r\n this.endDate = moment().endOf('day');\r\n this.minDate = false;\r\n this.maxDate = false;\r\n this.maxSpan = false;\r\n this.autoApply = false;\r\n this.singleDatePicker = false;\r\n this.showDropdowns = false;\r\n //this.minYear = moment().subtract(100, 'year').format('YYYY');\r\n this.minYear = 1900;\r\n this.maxYear = moment().add(100, 'year').format('YYYY');\r\n this.showWeekNumbers = false;\r\n this.showISOWeekNumbers = false;\r\n this.showCustomRangeLabel = true;\r\n this.timePicker = false;\r\n this.timePicker24Hour = false;\r\n this.timePickerIncrement = 1;\r\n this.timePickerSeconds = false;\r\n this.linkedCalendars = true;\r\n this.autoUpdateInput = true;\r\n this.alwaysShowCalendars = false;\r\n this.ranges = {};\r\n\r\n this.opens = 'right';\r\n if (this.element.hasClass('pull-right'))\r\n this.opens = 'left';\r\n\r\n this.drops = 'down';\r\n if (this.element.hasClass('dropup'))\r\n this.drops = 'up';\r\n\r\n this.buttonClasses = 'btn btn-sm';\r\n this.applyButtonClasses = 'btn-primary';\r\n this.cancelButtonClasses = 'btn-default';\r\n\r\n this.locale = {\r\n direction: 'ltr',\r\n format: moment.localeData().longDateFormat('L'),\r\n separator: ' - ',\r\n applyLabel: 'Apply',\r\n cancelLabel: 'Cancel',\r\n weekLabel: 'W',\r\n customRangeLabel: 'Custom Range',\r\n daysOfWeek: moment.weekdaysMin(),\r\n monthNames: moment.monthsShort(),\r\n firstDay: moment.localeData().firstDayOfWeek()\r\n };\r\n\r\n this.callback = function () { };\r\n\r\n //some state information\r\n this.isShowing = false;\r\n this.leftCalendar = {};\r\n this.rightCalendar = {};\r\n\r\n //custom options from user\r\n if (typeof options !== 'object' || options === null)\r\n options = {};\r\n\r\n //allow setting options with data attributes\r\n //data-api options will be overwritten with custom javascript options\r\n options = $.extend(this.element.data(), options);\r\n\r\n //html template for the picker UI\r\n if (typeof options.template !== 'string' && !(options.template instanceof $))\r\n options.template =\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '' +\r\n ' ' +\r\n '
' +\r\n '
';\r\n\r\n this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\r\n this.container = $(options.template).appendTo(this.parentEl);\r\n\r\n //\r\n // handle all the possible options overriding defaults\r\n //\r\n\r\n if (typeof options.locale === 'object') {\r\n\r\n if (typeof options.locale.direction === 'string')\r\n this.locale.direction = options.locale.direction;\r\n\r\n if (typeof options.locale.format === 'string')\r\n this.locale.format = options.locale.format;\r\n\r\n if (typeof options.locale.separator === 'string')\r\n this.locale.separator = options.locale.separator;\r\n\r\n if (typeof options.locale.daysOfWeek === 'object')\r\n this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\r\n\r\n if (typeof options.locale.monthNames === 'object')\r\n this.locale.monthNames = options.locale.monthNames.slice();\r\n\r\n if (typeof options.locale.firstDay === 'number')\r\n this.locale.firstDay = options.locale.firstDay;\r\n\r\n if (typeof options.locale.applyLabel === 'string')\r\n this.locale.applyLabel = options.locale.applyLabel;\r\n\r\n if (typeof options.locale.cancelLabel === 'string')\r\n this.locale.cancelLabel = options.locale.cancelLabel;\r\n\r\n if (typeof options.locale.weekLabel === 'string')\r\n this.locale.weekLabel = options.locale.weekLabel;\r\n\r\n if (typeof options.locale.customRangeLabel === 'string') {\r\n //Support unicode chars in the custom range name.\r\n var elem = document.createElement('textarea');\r\n elem.innerHTML = options.locale.customRangeLabel;\r\n var rangeHtml = elem.value;\r\n this.locale.customRangeLabel = rangeHtml;\r\n }\r\n }\r\n this.container.addClass(this.locale.direction);\r\n\r\n if (typeof options.startDate === 'string' && this.rangeformat)\r\n this.startDate = moment(options.startDate, this.rangeformat);\r\n else\r\n this.startDate = moment(options.startDate);\r\n\r\n if (typeof options.endDate === 'string' && this.rangeformat)\r\n this.endDate = moment(options.endDate, this.rangeformat);\r\n else\r\n this.endDate = moment(options.endDate);\r\n\r\n if (options.minDate) {\r\n if (typeof options.minDate === 'string' && this.rangeformat)\r\n this.minDate = moment(options.minDate, this.rangeformat);\r\n else\r\n this.minDate = moment(options.minDate);\r\n }\r\n\r\n if (options.maxDate) {\r\n if (typeof options.maxDate === 'string' && this.rangeformat)\r\n this.maxDate = moment(options.maxDate, this.rangeformat);\r\n else\r\n this.maxDate = moment(options.maxDate);\r\n }\r\n\r\n // sanity check for bad options\r\n if (this.minDate && this.startDate.isBefore(this.minDate))\r\n this.startDate = this.minDate.clone();\r\n\r\n // sanity check for bad options\r\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n this.endDate = this.maxDate.clone();\r\n\r\n if (typeof options.applyButtonClasses === 'string')\r\n this.applyButtonClasses = options.applyButtonClasses;\r\n\r\n if (typeof options.applyClass === 'string') //backwards compat\r\n this.applyButtonClasses = options.applyClass;\r\n\r\n if (typeof options.cancelButtonClasses === 'string')\r\n this.cancelButtonClasses = options.cancelButtonClasses;\r\n\r\n if (typeof options.cancelClass === 'string') //backwards compat\r\n this.cancelButtonClasses = options.cancelClass;\r\n\r\n if (typeof options.maxSpan === 'object')\r\n this.maxSpan = options.maxSpan;\r\n\r\n if (typeof options.dateLimit === 'object') //backwards compat\r\n this.maxSpan = options.dateLimit;\r\n\r\n if (typeof options.opens === 'string')\r\n this.opens = options.opens;\r\n\r\n if (typeof options.drops === 'string')\r\n this.drops = options.drops;\r\n\r\n if (typeof options.showWeekNumbers === 'boolean')\r\n this.showWeekNumbers = options.showWeekNumbers;\r\n\r\n if (typeof options.showISOWeekNumbers === 'boolean')\r\n this.showISOWeekNumbers = options.showISOWeekNumbers;\r\n\r\n if (typeof options.buttonClasses === 'string')\r\n this.buttonClasses = options.buttonClasses;\r\n\r\n if (typeof options.buttonClasses === 'object')\r\n this.buttonClasses = options.buttonClasses.join(' ');\r\n\r\n if (typeof options.showDropdowns === 'boolean')\r\n this.showDropdowns = options.showDropdowns;\r\n\r\n if (typeof options.minYear === 'number')\r\n this.minYear = options.minYear;\r\n\r\n if (typeof options.maxYear === 'number')\r\n this.maxYear = options.maxYear;\r\n\r\n if (typeof options.showCustomRangeLabel === 'boolean')\r\n this.showCustomRangeLabel = options.showCustomRangeLabel;\r\n\r\n if (typeof options.singleDatePicker === 'boolean') {\r\n this.singleDatePicker = options.singleDatePicker;\r\n if (this.singleDatePicker)\r\n this.endDate = this.startDate.clone();\r\n }\r\n\r\n if (typeof options.timePicker === 'boolean')\r\n this.timePicker = options.timePicker;\r\n\r\n if (typeof options.timePickerSeconds === 'boolean')\r\n this.timePickerSeconds = options.timePickerSeconds;\r\n\r\n if (typeof options.timePickerIncrement === 'number')\r\n this.timePickerIncrement = options.timePickerIncrement;\r\n\r\n if (typeof options.timePicker24Hour === 'boolean')\r\n this.timePicker24Hour = options.timePicker24Hour;\r\n\r\n if (typeof options.autoApply === 'boolean')\r\n this.autoApply = options.autoApply;\r\n\r\n if (typeof options.autoUpdateInput === 'boolean')\r\n this.autoUpdateInput = options.autoUpdateInput;\r\n\r\n if (typeof options.linkedCalendars === 'boolean')\r\n this.linkedCalendars = options.linkedCalendars;\r\n\r\n if (typeof options.isInvalidDate === 'function')\r\n this.isInvalidDate = options.isInvalidDate;\r\n\r\n if (typeof options.isCustomDate === 'function')\r\n this.isCustomDate = options.isCustomDate;\r\n\r\n if (typeof options.alwaysShowCalendars === 'boolean')\r\n this.alwaysShowCalendars = options.alwaysShowCalendars;\r\n\r\n // update day names order to firstDay\r\n if (this.locale.firstDay != 0) {\r\n var iterator = this.locale.firstDay;\r\n while (iterator > 0) {\r\n this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\r\n iterator--;\r\n }\r\n }\r\n\r\n var start, end, range;\r\n\r\n //if no start/end dates set, check if an input element contains initial values\r\n if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\r\n if ($(this.element).is(':text')) {\r\n var val = $(this.element).val(),\r\n split = val.split(this.locale.separator);\r\n\r\n start = end = null;\r\n\r\n if (split.length == 2) {\r\n start = moment(split[0], this.locale.format);\r\n end = moment(split[1], this.locale.format);\r\n } else if (this.singleDatePicker && val !== \"\") {\r\n start = moment(val, this.locale.format);\r\n end = moment(val, this.locale.format);\r\n }\r\n if (start !== null && end !== null) {\r\n this.setStartDate(start);\r\n this.setEndDate(end);\r\n }\r\n }\r\n }\r\n\r\n if (typeof options.ranges === 'object' && options.ranges) {\r\n for (range in options.ranges) {\r\n\r\n if (typeof options.ranges[range][0] === 'string' && this.rangeformat)\r\n start = moment(options.ranges[range][0], this.rangeformat);\r\n else\r\n start = moment(options.ranges[range][0]);\r\n\r\n if (typeof options.ranges[range][1] === 'string' && this.rangeformat)\r\n end = moment(options.ranges[range][1], this.rangeformat);\r\n else\r\n end = moment(options.ranges[range][1]);\r\n\r\n // If the start or end date exceed those allowed by the minDate or maxSpan\r\n // options, shorten the range to the allowable period.\r\n if (this.minDate && start.isBefore(this.minDate))\r\n start = this.minDate.clone();\r\n\r\n var maxDate = this.maxDate;\r\n if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))\r\n maxDate = start.clone().add(this.maxSpan);\r\n if (maxDate && end.isAfter(maxDate))\r\n end = maxDate.clone();\r\n\r\n // If the end of the range is before the minimum or the start of the range is\r\n // after the maximum, don't display this range option at all.\r\n if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))\r\n || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\r\n continue;\r\n\r\n //Support unicode chars in the range names.\r\n var elem = document.createElement('textarea');\r\n elem.innerHTML = range;\r\n var rangeHtml = elem.value;\r\n\r\n this.ranges[rangeHtml] = [start, end];\r\n }\r\n\r\n var list = '';\r\n this.container.find('.ranges').prepend(list);\r\n }\r\n\r\n if (typeof cb === 'function') {\r\n this.callback = cb;\r\n }\r\n\r\n if (!this.timePicker) {\r\n this.startDate = this.startDate.startOf('day');\r\n this.endDate = this.endDate.endOf('day');\r\n this.container.find('.calendar-time').hide();\r\n }\r\n\r\n //can't be used together for now\r\n if (this.timePicker && this.autoApply)\r\n this.autoApply = false;\r\n\r\n if (this.autoApply) {\r\n this.container.addClass('auto-apply');\r\n }\r\n\r\n if (typeof options.ranges === 'object' && options.ranges)\r\n this.container.addClass('show-ranges');\r\n\r\n if (this.singleDatePicker) {\r\n this.container.addClass('single');\r\n this.container.find('.drp-calendar.left').addClass('single');\r\n this.container.find('.drp-calendar.left').show();\r\n this.container.find('.drp-calendar.right').hide();\r\n if (!this.timePicker) {\r\n this.container.addClass('auto-apply');\r\n }\r\n }\r\n\r\n if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\r\n this.container.addClass('show-calendar');\r\n }\r\n\r\n this.container.addClass('opens' + this.opens);\r\n\r\n //apply CSS classes and labels to buttons\r\n this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\r\n if (this.applyButtonClasses.length)\r\n this.container.find('.applyBtn').addClass(this.applyButtonClasses);\r\n if (this.cancelButtonClasses.length)\r\n this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);\r\n this.container.find('.applyBtn').html(this.locale.applyLabel);\r\n this.container.find('.cancelBtn').html(this.locale.cancelLabel);\r\n\r\n //\r\n // event listeners\r\n //\r\n\r\n this.container.find('.drp-calendar')\r\n .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\r\n .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\r\n .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\r\n .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\r\n .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\r\n .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\r\n .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))\r\n\r\n this.container.find('.ranges')\r\n .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))\r\n\r\n this.container.find('.drp-buttons')\r\n .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\r\n .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))\r\n\r\n if (this.element.is('input') || this.element.is('button')) {\r\n this.element.on({\r\n 'click.daterangepicker': $.proxy(this.show, this),\r\n 'focus.daterangepicker': $.proxy(this.show, this),\r\n 'keyup.daterangepicker': $.proxy(this.elementChanged, this),\r\n 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility\r\n });\r\n } else {\r\n this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\r\n this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));\r\n }\r\n\r\n //\r\n // if attached to a text input, set the initial value\r\n //\r\n\r\n this.updateElement();\r\n\r\n };\r\n\r\n DateRangePicker.prototype = {\r\n\r\n constructor: DateRangePicker,\r\n\r\n setStartDate: function (startDate) {\r\n if (typeof startDate === 'string' && this.rangeformat)\r\n this.startDate = moment(startDate, this.rangeformat);\r\n else\r\n this.startDate = moment(startDate);\r\n\r\n if (!this.timePicker)\r\n this.startDate = this.startDate.startOf('day');\r\n\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n if (this.minDate && this.startDate.isBefore(this.minDate)) {\r\n this.startDate = this.minDate.clone();\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n }\r\n\r\n if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\r\n this.startDate = this.maxDate.clone();\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n }\r\n\r\n if (!this.isShowing)\r\n this.updateElement();\r\n\r\n this.updateMonthsInView();\r\n },\r\n\r\n setEndDate: function (endDate) {\r\n if (typeof endDate === 'string' && this.rangeformat)\r\n this.endDate = moment(endDate, this.rangeformat);\r\n else\r\n this.endDate = moment(endDate);\r\n\r\n if (!this.timePicker)\r\n this.endDate = this.endDate.endOf('day');\r\n\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n if (this.endDate.isBefore(this.startDate))\r\n this.endDate = this.startDate.clone();\r\n\r\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n this.endDate = this.maxDate.clone();\r\n\r\n if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))\r\n this.endDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n this.previousRightTime = this.endDate.clone();\r\n\r\n this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n\r\n if (!this.isShowing)\r\n this.updateElement();\r\n\r\n this.updateMonthsInView();\r\n },\r\n\r\n isInvalidDate: function () {\r\n return false;\r\n },\r\n\r\n isCustomDate: function () {\r\n return false;\r\n },\r\n\r\n updateView: function () {\r\n if (this.timePicker) {\r\n this.renderTimePicker('left');\r\n this.renderTimePicker('right');\r\n if (!this.endDate) {\r\n this.container.find('.right .calendar-time select').prop('disabled', true).addClass('disabled');\r\n } else {\r\n this.container.find('.right .calendar-time select').prop('disabled', false).removeClass('disabled');\r\n }\r\n }\r\n if (this.endDate)\r\n this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n this.updateMonthsInView();\r\n this.updateCalendars();\r\n this.updateFormInputs();\r\n },\r\n\r\n updateMonthsInView: function () {\r\n if (this.endDate) {\r\n\r\n //if both dates are visible already, do nothing\r\n if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\r\n (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n &&\r\n (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n ) {\r\n return;\r\n }\r\n\r\n this.leftCalendar.month = this.startDate.clone().date(2);\r\n if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\r\n this.rightCalendar.month = this.endDate.clone().date(2);\r\n } else {\r\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n }\r\n\r\n } else {\r\n if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\r\n this.leftCalendar.month = this.startDate.clone().date(2);\r\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n }\r\n }\r\n if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\r\n this.rightCalendar.month = this.maxDate.clone().date(2);\r\n this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\r\n }\r\n },\r\n\r\n updateCalendars: function () {\r\n\r\n if (this.timePicker) {\r\n var hour, minute, second;\r\n if (this.endDate) {\r\n hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n }\r\n second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.left .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n } else {\r\n hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n }\r\n second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.right .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n }\r\n this.leftCalendar.month.hour(hour).minute(minute).second(second);\r\n this.rightCalendar.month.hour(hour).minute(minute).second(second);\r\n }\r\n\r\n this.renderCalendar('left');\r\n this.renderCalendar('right');\r\n\r\n //highlight any predefined range matching the current start and end dates\r\n this.container.find('.ranges li').removeClass('active');\r\n if (this.endDate == null) return;\r\n\r\n this.calculateChosenLabel();\r\n },\r\n\r\n renderCalendar: function (side) {\r\n\r\n //\r\n // Build the matrix of dates that will populate the calendar\r\n //\r\n\r\n var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\r\n var month = calendar.month.month();\r\n var year = calendar.month.year();\r\n var hour = calendar.month.hour();\r\n var minute = calendar.month.minute();\r\n var second = calendar.month.second();\r\n var daysInMonth = moment([year, month]).daysInMonth();\r\n var firstDay = moment([year, month, 1]);\r\n var lastDay = moment([year, month, daysInMonth]);\r\n var lastMonth = moment(firstDay).subtract(1, 'month').month();\r\n var lastYear = moment(firstDay).subtract(1, 'month').year();\r\n var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\r\n var dayOfWeek = firstDay.day();\r\n\r\n //initialize a 6 rows x 7 columns array for the calendar\r\n var calendar = [];\r\n calendar.firstDay = firstDay;\r\n calendar.lastDay = lastDay;\r\n\r\n for (var i = 0; i < 6; i++) {\r\n calendar[i] = [];\r\n }\r\n\r\n //populate the calendar with date objects\r\n var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\r\n if (startDay > daysInLastMonth)\r\n startDay -= 7;\r\n\r\n if (dayOfWeek == this.locale.firstDay)\r\n startDay = daysInLastMonth - 6;\r\n\r\n var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\r\n\r\n var col, row;\r\n for (var i = 0, col = 0, row = 0; i < 42; i++ , col++ , curDate = moment(curDate).add(24, 'hour')) {\r\n if (i > 0 && col % 7 === 0) {\r\n col = 0;\r\n row++;\r\n }\r\n calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\r\n curDate.hour(12);\r\n\r\n if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\r\n calendar[row][col] = this.minDate.clone();\r\n }\r\n\r\n if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\r\n calendar[row][col] = this.maxDate.clone();\r\n }\r\n\r\n }\r\n\r\n //make the calendar object available to hoverDate/clickDate\r\n if (side == 'left') {\r\n this.leftCalendar.calendar = calendar;\r\n } else {\r\n this.rightCalendar.calendar = calendar;\r\n }\r\n\r\n //\r\n // Display the calendar\r\n //\r\n\r\n var minDate = side == 'left' ? this.minDate : this.startDate;\r\n var maxDate = this.maxDate;\r\n var selected = side == 'left' ? this.startDate : this.endDate;\r\n var arrow = this.locale.direction == 'ltr' ? { left: 'chevron-left', right: 'chevron-right' } : { left: 'chevron-right', right: 'chevron-left' };\r\n\r\n var html = '';\r\n html += '';\r\n html += '';\r\n\r\n // add empty cell for week number\r\n if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n html += '';\r\n\r\n if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\r\n html += '';\r\n } else {\r\n html += '';\r\n }\r\n\r\n var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\r\n\r\n if (this.showDropdowns) {\r\n var currentMonth = calendar[1][1].month();\r\n var currentYear = calendar[1][1].year();\r\n var maxYear = (maxDate && maxDate.year()) || (this.maxYear);\r\n var minYear = (minDate && minDate.year()) || (this.minYear);\r\n var inMinYear = currentYear == minYear;\r\n var inMaxYear = currentYear == maxYear;\r\n\r\n var monthHtml = '\";\r\n\r\n var yearHtml = '';\r\n\r\n dateHtml = monthHtml + yearHtml;\r\n }\r\n\r\n html += '';\r\n if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\r\n html += '';\r\n } else {\r\n html += '';\r\n }\r\n\r\n html += '';\r\n html += '';\r\n\r\n // add week number label\r\n if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n html += '';\r\n\r\n $.each(this.locale.daysOfWeek, function (index, dayOfWeek) {\r\n html += '';\r\n });\r\n\r\n html += '';\r\n html += '';\r\n html += '';\r\n\r\n //adjust maxDate to reflect the maxSpan setting in order to\r\n //grey out end dates beyond the maxSpan\r\n if (this.endDate == null && this.maxSpan) {\r\n var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');\r\n if (!maxDate || maxLimit.isBefore(maxDate)) {\r\n maxDate = maxLimit;\r\n }\r\n }\r\n\r\n for (var row = 0; row < 6; row++) {\r\n html += '';\r\n\r\n // add week number\r\n if (this.showWeekNumbers)\r\n html += '';\r\n else if (this.showISOWeekNumbers)\r\n html += '';\r\n\r\n for (var col = 0; col < 7; col++) {\r\n\r\n var classes = [];\r\n\r\n //highlight today's date\r\n if (calendar[row][col].isSame(new Date(), \"day\"))\r\n classes.push('today');\r\n\r\n //highlight weekends\r\n if (calendar[row][col].isoWeekday() > 5)\r\n classes.push('weekend');\r\n\r\n //grey out the dates in other months displayed at beginning and end of this calendar\r\n if (calendar[row][col].month() != calendar[1][1].month())\r\n classes.push('off', 'ends');\r\n\r\n //don't allow selection of dates before the minimum date\r\n if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\r\n classes.push('off', 'disabled');\r\n\r\n //don't allow selection of dates after the maximum date\r\n if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\r\n classes.push('off', 'disabled');\r\n\r\n //don't allow selection of date if a custom function decides it's invalid\r\n if (this.isInvalidDate(calendar[row][col]))\r\n classes.push('off', 'disabled');\r\n\r\n //highlight the currently selected start date\r\n if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\r\n classes.push('active', 'start-date');\r\n\r\n //highlight the currently selected end date\r\n if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\r\n classes.push('active', 'end-date');\r\n\r\n //highlight dates in-between the selected dates\r\n if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\r\n classes.push('in-range');\r\n\r\n //apply custom classes for this date\r\n var isCustom = this.isCustomDate(calendar[row][col]);\r\n if (isCustom !== false) {\r\n if (typeof isCustom === 'string')\r\n classes.push(isCustom);\r\n else\r\n Array.prototype.push.apply(classes, isCustom);\r\n }\r\n\r\n var cname = '', disabled = false;\r\n for (var i = 0; i < classes.length; i++) {\r\n cname += classes[i] + ' ';\r\n if (classes[i] == 'disabled')\r\n disabled = true;\r\n }\r\n if (!disabled)\r\n cname += 'available';\r\n\r\n html += '';\r\n\r\n }\r\n html += '';\r\n }\r\n\r\n html += '';\r\n html += '
' + dateHtml + '
' + this.locale.weekLabel + '' + dayOfWeek + '
' + calendar[row][0].week() + '' + calendar[row][0].isoWeek() + '' + calendar[row][col].date() + '
';\r\n\r\n this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);\r\n\r\n },\r\n\r\n renderTimePicker: function (side) {\r\n\r\n // Don't bother updating the time picker if it's currently disabled\r\n // because an end date hasn't been clicked yet\r\n if (side == 'right' && !this.endDate) return;\r\n\r\n var html, selected, minDate, maxDate = this.maxDate;\r\n\r\n if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))\r\n maxDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n if (side == 'left') {\r\n selected = this.startDate.clone();\r\n minDate = this.minDate;\r\n } else if (side == 'right') {\r\n selected = this.endDate.clone();\r\n minDate = this.startDate;\r\n\r\n //Preserve the time already selected\r\n var timeSelector = this.container.find('.drp-calendar.right .calendar-time');\r\n if (timeSelector.html() != '') {\r\n\r\n selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val());\r\n selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val());\r\n selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val());\r\n\r\n if (!this.timePicker24Hour) {\r\n var ampm = timeSelector.find('.ampmselect option:selected').val();\r\n if (ampm === 'PM' && selected.hour() < 12)\r\n selected.hour(selected.hour() + 12);\r\n if (ampm === 'AM' && selected.hour() === 12)\r\n selected.hour(0);\r\n }\r\n\r\n }\r\n\r\n if (selected.isBefore(this.startDate))\r\n selected = this.startDate.clone();\r\n\r\n if (maxDate && selected.isAfter(maxDate))\r\n selected = maxDate.clone();\r\n\r\n }\r\n\r\n //\r\n // hours\r\n //\r\n\r\n html = ' ';\r\n\r\n //\r\n // minutes\r\n //\r\n\r\n html += ': ';\r\n\r\n //\r\n // seconds\r\n //\r\n\r\n if (this.timePickerSeconds) {\r\n html += ': ';\r\n }\r\n\r\n //\r\n // AM/PM\r\n //\r\n\r\n if (!this.timePicker24Hour) {\r\n html += '';\r\n }\r\n\r\n this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);\r\n\r\n },\r\n\r\n updateFormInputs: function () {\r\n\r\n if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\r\n this.container.find('button.applyBtn').prop('disabled', false);\r\n } else {\r\n this.container.find('button.applyBtn').prop('disabled', true);\r\n }\r\n\r\n },\r\n\r\n move: function () {\r\n var parentOffset = { top: 0, left: 0 },\r\n containerTop;\r\n var parentRightEdge = $(window).width();\r\n if (!this.parentEl.is('body')) {\r\n parentOffset = {\r\n top: this.parentEl.offset().top - this.parentEl.scrollTop(),\r\n left: this.parentEl.offset().left - this.parentEl.scrollLeft()\r\n };\r\n parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\r\n }\r\n\r\n if (this.drops == 'up')\r\n containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\r\n else\r\n containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\r\n\r\n // Force the container to it's actual width\r\n this.container.css({\r\n top: 0,\r\n left: 0,\r\n right: 'auto'\r\n });\r\n var containerWidth = this.container.outerWidth();\r\n\r\n this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('drop-up');\r\n\r\n if (this.opens == 'left') {\r\n var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();\r\n if (containerWidth + containerRight > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n right: 'auto',\r\n left: 9\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n right: containerRight,\r\n left: 'auto'\r\n });\r\n }\r\n } else if (this.opens == 'center') {\r\n var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\r\n - containerWidth / 2;\r\n if (containerLeft < 0) {\r\n this.container.css({\r\n top: containerTop,\r\n right: 'auto',\r\n left: 9\r\n });\r\n } else if (containerLeft + containerWidth > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n left: 'auto',\r\n right: 0\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n left: containerLeft,\r\n right: 'auto'\r\n });\r\n }\r\n } else {\r\n var containerLeft = this.element.offset().left - parentOffset.left;\r\n if (containerLeft + containerWidth > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n left: 'auto',\r\n right: 0\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n left: containerLeft,\r\n right: 'auto'\r\n });\r\n }\r\n }\r\n },\r\n\r\n show: function (e) {\r\n if (this.isShowing) return;\r\n\r\n // Create a click proxy that is private to this instance of datepicker, for unbinding\r\n this._outsideClickProxy = $.proxy(function (e) { this.outsideClick(e); }, this);\r\n\r\n // Bind global datepicker mousedown for hiding and\r\n $(document)\r\n .on('mousedown.daterangepicker', this._outsideClickProxy)\r\n // also support mobile devices\r\n .on('touchend.daterangepicker', this._outsideClickProxy)\r\n // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\r\n .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\r\n // and also close when focus changes to outside the picker (eg. tabbing between controls)\r\n .on('focusin.daterangepicker', this._outsideClickProxy);\r\n\r\n // Reposition the picker if the window is resized while it's open\r\n $(window).on('resize.daterangepicker', $.proxy(function (e) { this.move(e); }, this));\r\n\r\n this.oldStartDate = this.startDate.clone();\r\n this.oldEndDate = this.endDate.clone();\r\n this.previousRightTime = this.endDate.clone();\r\n\r\n this.updateView();\r\n this.container.show();\r\n this.move();\r\n this.element.trigger('show.daterangepicker', this);\r\n this.isShowing = true;\r\n },\r\n\r\n hide: function (e) {\r\n if (!this.isShowing) return;\r\n\r\n //incomplete date selection, revert to last values\r\n if (!this.endDate) {\r\n this.startDate = this.oldStartDate.clone();\r\n this.endDate = this.oldEndDate.clone();\r\n }\r\n\r\n //if a new date range was selected, invoke the user callback function\r\n if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate) || this.chosenLabel)\r\n this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);\r\n\r\n //if picker is attached to a text input, update it\r\n this.updateElement();\r\n\r\n $(document).off('.daterangepicker');\r\n $(window).off('.daterangepicker');\r\n this.container.hide();\r\n this.element.trigger('hide.daterangepicker', this);\r\n this.isShowing = false;\r\n },\r\n\r\n toggle: function (e) {\r\n if (this.isShowing) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n },\r\n\r\n outsideClick: function (e) {\r\n var target = $(e.target);\r\n // if the page is clicked anywhere except within the daterangerpicker/button\r\n // itself then call this.hide()\r\n if (\r\n // ie modal dialog fix\r\n e.type == \"focusin\" ||\r\n target.closest(this.element).length ||\r\n target.closest(this.container).length ||\r\n target.closest('.calendar-table').length\r\n ) return;\r\n this.hide();\r\n this.element.trigger('outsideClick.daterangepicker', this);\r\n },\r\n\r\n showCalendars: function () {\r\n this.container.addClass('show-calendar');\r\n this.move();\r\n this.element.trigger('showCalendar.daterangepicker', this);\r\n },\r\n\r\n hideCalendars: function () {\r\n this.container.removeClass('show-calendar');\r\n this.element.trigger('hideCalendar.daterangepicker', this);\r\n },\r\n\r\n clickRange: function (e) {\r\n var label = e.target.getAttribute('data-range-key');\r\n this.chosenLabel = label;\r\n if (label == this.locale.customRangeLabel) {\r\n this.showCalendars();\r\n } else {\r\n var dates = this.ranges[label];\r\n this.startDate = dates[0];\r\n this.endDate = dates[1];\r\n\r\n if (!this.timePicker) {\r\n this.startDate.startOf('day');\r\n this.endDate.endOf('day');\r\n }\r\n\r\n if (!this.alwaysShowCalendars)\r\n this.hideCalendars();\r\n this.clickApply();\r\n }\r\n },\r\n\r\n clickPrev: function (e) {\r\n var cal = $(e.target).parents('.drp-calendar');\r\n if (cal.hasClass('left')) {\r\n this.leftCalendar.month.subtract(1, 'month');\r\n if (this.linkedCalendars)\r\n this.rightCalendar.month.subtract(1, 'month');\r\n } else {\r\n this.rightCalendar.month.subtract(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n clickNext: function (e) {\r\n var cal = $(e.target).parents('.drp-calendar');\r\n if (cal.hasClass('left')) {\r\n this.leftCalendar.month.add(1, 'month');\r\n } else {\r\n this.rightCalendar.month.add(1, 'month');\r\n if (this.linkedCalendars)\r\n this.leftCalendar.month.add(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n hoverDate: function (e) {\r\n\r\n //ignore dates that can't be selected\r\n if (!$(e.target).hasClass('available')) return;\r\n\r\n var title = $(e.target).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(e.target).parents('.drp-calendar');\r\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n //highlight the dates between the start date and the date being hovered as a potential end date\r\n var leftCalendar = this.leftCalendar;\r\n var rightCalendar = this.rightCalendar;\r\n var startDate = this.startDate;\r\n if (!this.endDate) {\r\n this.container.find('.drp-calendar tbody td').each(function (index, el) {\r\n\r\n //skip week numbers, only look at dates\r\n if ($(el).hasClass('week')) return;\r\n\r\n var title = $(el).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(el).parents('.drp-calendar');\r\n var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\r\n\r\n if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\r\n $(el).addClass('in-range');\r\n } else {\r\n $(el).removeClass('in-range');\r\n }\r\n\r\n });\r\n }\r\n\r\n },\r\n\r\n clickDate: function (e) {\r\n\r\n if (!$(e.target).hasClass('available')) return;\r\n\r\n var title = $(e.target).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(e.target).parents('.drp-calendar');\r\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n //\r\n // this function needs to do a few things:\r\n // * alternate between selecting a start and end date for the range,\r\n // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\r\n // * if autoapply is enabled, and an end date was chosen, apply the selection\r\n // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\r\n // * if one of the inputs above the calendars was focused, cancel that manual input\r\n //\r\n\r\n if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\r\n if (this.timePicker) {\r\n var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.left .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n date = date.clone().hour(hour).minute(minute).second(second);\r\n }\r\n this.endDate = null;\r\n this.setStartDate(date.clone());\r\n } else if (!this.endDate && date.isBefore(this.startDate)) {\r\n //special case: clicking the same date for start/end,\r\n //but the time of the end date is before the start date\r\n this.setEndDate(this.startDate.clone());\r\n } else { // picking end\r\n if (this.timePicker) {\r\n var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.right .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n date = date.clone().hour(hour).minute(minute).second(second);\r\n }\r\n this.setEndDate(date.clone());\r\n if (this.autoApply) {\r\n this.calculateChosenLabel();\r\n this.clickApply();\r\n }\r\n }\r\n\r\n if (this.singleDatePicker) {\r\n this.setEndDate(this.startDate);\r\n if (!this.timePicker)\r\n this.clickApply();\r\n }\r\n\r\n this.updateView();\r\n\r\n //This is to cancel the blur event handler if the mouse was in one of the inputs\r\n e.stopPropagation();\r\n\r\n },\r\n\r\n calculateChosenLabel: function () {\r\n var customRange = true;\r\n var i = 0;\r\n for (var range in this.ranges) {\r\n if (this.timePicker) {\r\n var format = this.timePickerSeconds ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD HH:mm\";\r\n //ignore times when comparing dates if time picker seconds is not enabled\r\n if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\r\n customRange = false;\r\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n break;\r\n }\r\n } else {\r\n //ignore times when comparing dates if time picker is not enabled\r\n if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\r\n customRange = false;\r\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n break;\r\n }\r\n }\r\n i++;\r\n }\r\n if (customRange) {\r\n if (this.showCustomRangeLabel) {\r\n this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');\r\n } else {\r\n this.chosenLabel = null;\r\n }\r\n this.showCalendars();\r\n }\r\n },\r\n\r\n clickApply: function (e) {\r\n this.hide();\r\n this.element.trigger('apply.daterangepicker', this);\r\n },\r\n\r\n clickCancel: function (e) {\r\n this.startDate = this.oldStartDate;\r\n this.endDate = this.oldEndDate;\r\n this.hide();\r\n this.element.trigger('cancel.daterangepicker', this);\r\n },\r\n\r\n monthOrYearChanged: function (e) {\r\n var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),\r\n leftOrRight = isLeft ? 'left' : 'right',\r\n cal = this.container.find('.drp-calendar.' + leftOrRight);\r\n\r\n // Month must be Number for new moment versions\r\n var month = parseInt(cal.find('.monthselect').val(), 10);\r\n var year = cal.find('.yearselect').val();\r\n\r\n if (!isLeft) {\r\n if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\r\n month = this.startDate.month();\r\n year = this.startDate.year();\r\n }\r\n }\r\n\r\n if (this.minDate) {\r\n if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\r\n month = this.minDate.month();\r\n year = this.minDate.year();\r\n }\r\n }\r\n\r\n if (this.maxDate) {\r\n if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\r\n month = this.maxDate.month();\r\n year = this.maxDate.year();\r\n }\r\n }\r\n\r\n if (isLeft) {\r\n this.leftCalendar.month.month(month).year(year);\r\n if (this.linkedCalendars)\r\n this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\r\n } else {\r\n this.rightCalendar.month.month(month).year(year);\r\n if (this.linkedCalendars)\r\n this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n timeChanged: function (e) {\r\n\r\n var cal = $(e.target).closest('.drp-calendar'),\r\n isLeft = cal.hasClass('left');\r\n\r\n var hour = parseInt(cal.find('.hourselect').val(), 10);\r\n var minute = parseInt(cal.find('.minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(cal.find('.minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\r\n\r\n if (!this.timePicker24Hour) {\r\n var ampm = cal.find('.ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n\r\n if (isLeft) {\r\n var start = this.startDate.clone();\r\n start.hour(hour);\r\n start.minute(minute);\r\n start.second(second);\r\n this.setStartDate(start);\r\n if (this.singleDatePicker) {\r\n this.endDate = this.startDate.clone();\r\n } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\r\n this.setEndDate(start.clone());\r\n }\r\n } else if (this.endDate) {\r\n var end = this.endDate.clone();\r\n end.hour(hour);\r\n end.minute(minute);\r\n end.second(second);\r\n this.setEndDate(end);\r\n }\r\n\r\n //update the calendars so all clickable dates reflect the new time component\r\n this.updateCalendars();\r\n\r\n //update the form inputs above the calendars with the new time\r\n this.updateFormInputs();\r\n\r\n //re-render the time pickers because changing one selection can affect what's enabled in another\r\n this.renderTimePicker('left');\r\n this.renderTimePicker('right');\r\n\r\n },\r\n\r\n elementChanged: function () {\r\n if (!this.element.is('input')) return;\r\n if (!this.element.val().length) return;\r\n\r\n var dateString = this.element.val().split(this.locale.separator),\r\n start = null,\r\n end = null;\r\n\r\n if (dateString.length === 2) {\r\n start = moment(dateString[0], this.locale.format);\r\n end = moment(dateString[1], this.locale.format);\r\n }\r\n\r\n if (this.singleDatePicker || start === null || end === null) {\r\n start = moment(this.element.val(), this.locale.format);\r\n end = start;\r\n }\r\n\r\n if (!start.isValid() || !end.isValid()) return;\r\n\r\n this.setStartDate(start);\r\n this.setEndDate(end);\r\n this.updateView();\r\n },\r\n\r\n keydown: function (e) {\r\n //hide on tab or enter\r\n if ((e.keyCode === 9) || (e.keyCode === 13)) {\r\n this.hide();\r\n }\r\n\r\n //hide on esc and prevent propagation\r\n if (e.keyCode === 27) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.hide();\r\n }\r\n },\r\n\r\n updateElement: function () {\r\n if (this.element.is('input') && this.autoUpdateInput) {\r\n var newValue = this.startDate.format(this.locale.format);\r\n if (!this.singleDatePicker) {\r\n newValue += this.locale.separator + this.endDate.format(this.locale.format);\r\n }\r\n if (newValue !== this.element.val()) {\r\n this.element.val(newValue).trigger('change');\r\n }\r\n }\r\n },\r\n\r\n remove: function () {\r\n this.container.remove();\r\n this.element.off('.daterangepicker');\r\n this.element.removeData();\r\n }\r\n\r\n };\r\n\r\n $.fn.daterangepicker = function (options, callback) {\r\n var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\r\n this.each(function () {\r\n var el = $(this);\r\n if (el.data('daterangepicker'))\r\n el.data('daterangepicker').remove();\r\n el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));\r\n });\r\n return this;\r\n };\r\n\r\n return DateRangePicker;\r\n\r\n}(moment, jQuery));\r\n","/**\r\n * jQuery Button Switch Plugin\r\n * Version 1.0.0\r\n * \r\n * Minimal Usage: $('#switch').btnSwitch();\r\n * Settings:\r\n * Theme: Select a theme (Button, Light, Swipe, iOS, Android)\r\n */\r\n\r\n(function ($) {\r\n\t$.fn.btnSwitch = function (options) {\r\n\t\tvar settings = $.extend({}, options);\r\n\r\n\t\tvar setClass = function (el, prefix) {\r\n\t\t\tif (el.checked) {\r\n\t\t\t\tel.classList.add('tgl-sw-' + prefix + '-checked');\r\n\t\t\t\tel.classList.add('tgl-sw-active');\r\n\t\t\t} else {\r\n\t\t\t\tel.classList.remove('tgl-sw-' + prefix + '-checked');\r\n\t\t\t\tel.classList.remove('tgl-sw-active');\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar setHtml = function (id, prefix) {\r\n\t\t\tconst el = document.getElementById(id);\r\n\t\t\tconst parent = el.parentElement;\r\n\t\t\tvar div = null;\r\n\r\n\t\t\tif (parent.id != id + '_bsh') {\r\n\t\t\t\tdiv = document.createElement('div');\r\n\t\t\t\tdiv.id = id + '_bsh';\r\n\t\t\t\tdiv.appendChild(el);\r\n\t\t\t\tparent.appendChild(div);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tdiv = parent;\r\n\r\n\t\t\tif (div.getElementsByTagName('label').length == 0) {\r\n\t\t\t\tconst label = document.createElement('label');\r\n\t\t\t\tlabel.classList.add('btn-switch');\r\n\t\t\t\tlabel.htmlFor = id;\r\n\t\t\t\tlabel.title = el.title;\r\n\t\t\t\tdiv.appendChild(label);\r\n\t\t\t}\r\n\r\n\t\t\tel.className = 'tgl-sw tgl-sw-' + prefix;\r\n\r\n\t\t\tdiv.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n if (el.disabled || el.hasAttribute('readonly')) return;\r\n\t\t\t\tel.checked = !el.checked;\r\n\t\t\t\tsetClass(el, prefix);\r\n\t\t\t\tif (el.onchange)\r\n\t\t\t\t\tel.dispatchEvent(new Event(\"change\"));\r\n\t\t\t});\r\n\r\n\t\t\tsetClass(el, prefix);\r\n\t\t};\r\n\r\n\t\treturn this.each(function () {\r\n\t\t\tif (['Light', 'Swipe', 'iOS', 'Android'].indexOf(settings.theme) == -1)\r\n\t\t\t\tsettings.theme = 'Light';\r\n\r\n\t\t\tsetHtml(this.id, settings.theme.toLowerCase());\r\n\t\t});\r\n\t};\r\n}(jQuery));\r\n\r\n\r\nclass BtnSwitch extends Tango.Component {\r\n\tsetValue(checked) {\r\n\t\tconst el = document.getElementById(this.root);\r\n\r\n\t\tif (el.disabled || el.hasAttribute('readonly'))\r\n\t\t\treturn;\r\n\r\n\t\tel.checked = checked;\r\n\r\n\t\tconst isActive = el.classList.contains('tgl-sw-active');\r\n\t\tif (checked && !isActive) {\r\n\t\t\tel.classList.add('tgl-sw-' + this.props.prefix.toLowerCase() + '-checked');\r\n\t\t\tel.classList.add('tgl-sw-active');\r\n\t\t} else if (!checked && isActive) {\r\n\t\t\tel.classList.remove('tgl-sw-' + this.props.prefix.toLowerCase() + '-checked');\r\n\t\t\tel.classList.remove('tgl-sw-active');\r\n\t\t}\r\n\t}\r\n}\r\n\r\nTango.registerComponent(BtnSwitch, sp => ({ cu: sp.commonUtils, prefix: 'Light' }));\r\n\r\n","window.contextmenuproxy = function (au) {\r\n\tvar instance = {\r\n\t\tinit: function (args) {\r\n\t\t\tconst parms = instance.parms(args);\r\n\t\t\tinstance.contextMenu(args.triggerid, args.popupid, parms, args.storeparms)\r\n\t\t},\r\n\t\tcontextMenu: function (triggerid, popupid, parms, storeparms) {\r\n\t\t\tif (storeparms == 'true') {\r\n\t\t\t\tif (!au.state.ctrl['$contextmenu'])\r\n\t\t\t\t\tau.state.ctrl['$contextmenu'] = {};\r\n\t\t\t\tau.state.ctrl['$contextmenu'][triggerid] = {\r\n\t\t\t\t\tpopupid: popupid,\r\n\t\t\t\t\tparms: parms\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tconst popup = document.getElementById(popupid);\r\n\t\t\tif (popup) {\r\n\t\t\t\tconst tr = popup.closest(\"tr\");\r\n\t\t\t\tif (tr && window.getComputedStyle(tr)[\"position\"] == \"sticky\") {\r\n\t\t\t\t\tconst tbl = tr.closest('table');\r\n\t\t\t\t\tconst tbodymenu = tbl.querySelector('tbodymenu');\r\n\t\t\t\t\tif (!tbodymenu) {\r\n\t\t\t\t\t\ttbodymenu = document.createElement(\"tbody\");\r\n\t\t\t\t\t\ttbodymenu.classList.add(\"tbodymenu\");\r\n\t\t\t\t\t\ttbl.insertBefore(tbodymenu, tbl.firstElementChild);\r\n\t\t\t\t\t\ttbodymenu.appendChild(document.createElement(\"tr\"));\r\n\t\t\t\t\t\ttbodymenu.firstElementChild.appendChild(document.createElement(\"td\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttbodymenu.firstElementChild.firstElementChild.appendChild(popup);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$('#' + triggerid).contextMenu('#' + popupid, parms);\r\n\t\t},\r\n\t\tparms: function (args) {\r\n\t\t\treturn {\r\n\t\t\t\ttriggerOn: args.triggeron,\r\n\t\t\t\tdisplayAround: args.displaysaround,\r\n\t\t\t\tposition: args.position,\r\n\t\t\t\tcloseOnClick: args.closeonclick,\r\n\t\t\t\tcloseOnScroll: args.closeonscroll === undefined ? true : args.closeonscroll,\r\n\t\t\t\tonOpen: onOpen,\r\n\t\t\t\tonClose: onClose,\r\n\t\t\t\tonMouseLeave: onMouseLeave,\r\n\t\t\t\ttype: args.type,\r\n\t\t\t\tdelay: args.delay,\r\n\t\t\t\tshowOverlay: args.showoverlay && args.showoverlay == \"true\",\r\n\t\t\t\twidth: args.width\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tfunction onOpen(data, event) {\r\n\t\tconst menu = data.menu[0];\r\n\t\tif (menu.getAttribute('data-href') || menu.getAttribute('data-e')) {\r\n\t\t\treturn au.runEventFromElementWithApiResponse(menu);\r\n\t\t}\r\n\t\tif (data.options.showOverlay) {\r\n\t\t\tdocument.documentElement.classList.add('lock-position-html');\r\n\t\t\tbody.classList.add('lock-position-body');\r\n\t\t}\r\n\r\n\t\treturn $.when();\r\n\t}\r\n\r\n\tfunction onClose(data, event) {\r\n\t\tif (data.options.showOverlay) {\r\n\t\t\tdocument.documentElement.classList.remove('lock-position-html');\r\n\t\t\tbody.classList.remove('lock-position-body');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onMouseLeave(data, event) {\r\n\t\tif (data.options.type = 'hover') {\r\n\t\t\tconst menu = data.menu[0];\r\n\r\n\t\t\tdata.state.resetTimer();\r\n\r\n\t\t\tif (menu.hasAttribute('data-requestgroup')) {\r\n\t\t\t\tconst reqGr = menu.getAttribute('data-requestgroup');\r\n\t\t\t\tau.state.com.request[reqGr] = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}(ajaxUtils);\r\n\r\nwindow.contextmenuproxy_closeonlink = function () {\r\n\tvar instance = {\r\n\t\tinit: function (args) {\r\n\t\t\tvar parms = contextmenuproxy.parms(args);\r\n\t\t\tparms.closeOnClickSelector = function (el) {\r\n\t\t\t\treturn el instanceof HTMLAnchorElement;\r\n\t\t\t};\r\n\t\t\tcontextmenuproxy.contextMenu(args.triggerid, args.popupid, parms, args.storeparms)\r\n\t\t}\r\n\t};\r\n\r\n\treturn instance;\r\n}();\r\n\r\nwindow.sidebarmenuproxy = function () {\r\n\tvar instance = {\r\n\t\tinit: function (args) {\r\n\t\t\tvar parms = contextmenuproxy.parms(args);\r\n\t\t\tparms.closeOnClickSelector = function (el) {\r\n\t\t\t\treturn el instanceof HTMLAnchorElement || el.classList.contains('sidebarmenu-background');\r\n\t\t\t};\r\n\t\t\tcontextmenuproxy.contextMenu(args.triggerid, args.popupid, parms, args.storeparms)\r\n\t\t}\r\n\t};\r\n\r\n\treturn instance;\r\n}();","window.daterangepickerproxy = function (au) {\r\n const from = '_dperiodfrom';\r\n const to = '_dperiodto';\r\n const timehour = 'time_hour';\r\n const timemin = 'time_minute';\r\n\r\n var instance = {\r\n init: function (args) {\r\n const ctrl = document.getElementById(args.triggerid).parentElement;\r\n const startDate = document.getElementById(ctrl.id + from);\r\n const startDate_h = document.getElementById(ctrl.id + from + timehour);\r\n const startDate_m = document.getElementById(ctrl.id + from + timemin);\r\n const finishDate = document.getElementById(ctrl.id + to);\r\n const finishDate_h = document.getElementById(ctrl.id + to + timehour);\r\n const finishDate_m = document.getElementById(ctrl.id + to + timemin);\r\n\r\n const doPostback = ctrl.hasAttribute('data-e');\r\n\r\n const _args = {\r\n remove: [\r\n ctrl.id + from, ctrl.id + from + timehour, ctrl.id + from + timemin,\r\n ctrl.id + to, ctrl.id + to + timehour, ctrl.id + to + timemin\r\n ]\r\n };\r\n\r\n var postEvent = function (caller) {\r\n au.changeUrl(_args);\r\n au.postEventFromElementWithApiResponse(caller);\r\n }\r\n\r\n if (doPostback) {\r\n startDate.addEventListener('keyup', function (e) {\r\n au.delay(ctrl, function (caller) { postEvent(caller); });\r\n });\r\n finishDate.addEventListener('keyup', function (e) {\r\n au.delay(ctrl, function (caller) {\r\n postEvent(caller);\r\n });\r\n });\r\n if (startDate_h) {\r\n startDate_h.addEventListener('change', function (e) {\r\n postEvent(ctrl);\r\n });\r\n }\r\n if (startDate_m) {\r\n startDate_m.addEventListener('change', function (e) {\r\n postEvent(ctrl);\r\n });\r\n }\r\n if (finishDate_h) {\r\n finishDate_h.addEventListener('change', function (e) {\r\n postEvent(ctrl);\r\n });\r\n }\r\n if (finishDate_m) {\r\n finishDate_m.addEventListener('change', function (e) {\r\n postEvent(ctrl);\r\n });\r\n }\r\n };\r\n\r\n $('#' + args.triggerid).daterangepicker(args.pickerparms, function (start, end, label) {\r\n if (startDate.value !== start.format('DD.MM.YYYY')) {\r\n startDate.value = start.format('DD.MM.YYYY');\r\n $(startDate).trigger('input');\r\n }\r\n if (finishDate.value !== end.format('DD.MM.YYYY')) {\r\n finishDate.value = end.format('DD.MM.YYYY');\r\n $(finishDate).trigger('input');\r\n }\r\n if (startDate_h && startDate_h.value !== start.hour()) {\r\n startDate_h.value = start.hour();\r\n $(startDate_h).trigger('change');\r\n }\r\n if (startDate_m && startDate_h.value !== start.minute()) {\r\n startDate_m.value = start.minute();\r\n $(startDate_m).trigger('change');\r\n }\r\n if (finishDate_h && finishDate_h.value !== end.hour()) {\r\n finishDate_h.value = end.hour();\r\n $(finishDate_h).trigger('change');\r\n }\r\n if (finishDate_m && finishDate_m.value !== end.minute()) {\r\n finishDate_m.value = end.minute();\r\n $(finishDate_m).trigger('change');\r\n }\r\n\r\n if (doPostback)\r\n postEvent(ctrl);\r\n });\r\n },\r\n setStartDate: function (args) {\r\n $('#' + args.triggerid).data('daterangepicker').setStartDate(args.date);\r\n },\r\n setFinishDate: function (args) {\r\n $('#' + args.triggerid).data('daterangepicker').setEndDate(args.date);\r\n },\r\n getValue: function (id, formData) {\r\n return {\r\n from: moment(formData[id + from] + ' ' + formData[id + from + timehour] + ':' + formData[id + from + timemin], 'DD.MM.YYYY HH:mm').toDate(),\r\n to: moment(formData[id + to] + ' ' + formData[id + to + timehour] + ':' + formData[id + to + timemin], 'DD.MM.YYYY HH:mm').toDate(),\r\n }\r\n },\r\n setValue: function (id, sd, fd) {\r\n const startDate = document.getElementById(id + from);\r\n const startDate_h = document.getElementById(id + from + timehour);\r\n const startDate_m = document.getElementById(id + from + timemin);\r\n const finishDate = document.getElementById(id + to);\r\n const finishDate_h = document.getElementById(id + to + timehour);\r\n const finishDate_m = document.getElementById(id + to + timemin);\r\n\r\n startDate.value = sd.getDate().toString().padStart(2, '0') + '.' + (sd.getMonth() + 1).toString().padStart(2, '0') + '.' + sd.getFullYear();\r\n startDate_h.value = sd.getHours();\r\n startDate_m.value = sd.getMinutes();\r\n finishDate.value = fd.getDate().toString().padStart(2, '0') + '.' + (fd.getMonth() + 1).toString().padStart(2, '0') + '.' + fd.getFullYear();\r\n finishDate_h.value = fd.getHours();\r\n finishDate_m.value = fd.getMinutes();\r\n\r\n instance.setStartDate({\r\n triggerid: id + '_btn',\r\n date: sd\r\n });\r\n instance.setFinishDate({\r\n triggerid: id + '_btn',\r\n date: fd\r\n });\r\n }\r\n };\r\n\r\n return instance;\r\n}(ajaxUtils);","window.dialog = function (au) {\r\n\tvar instance = {\r\n\t\topen: function (el, onSubmit) {\r\n\t\t\tif (!el.nodeType) el = document.getElementById(el);\r\n\r\n\t\t\tconst isFullScreen = matchMedia('(max-width: 1024px)').matches;\r\n\r\n\t\t\tif (!isFullScreen) {\r\n\t\t\t\tconst parms = localStorage.getObject(location.pathname + '/' + el.id);\r\n\t\t\t\tif (parms) {\r\n\t\t\t\t\tif (parms.width) el.style.width = parms.width;\r\n\t\t\t\t\tif (parms.height) el.style.height = parms.height;\r\n\t\t\t\t\tif (parms.top) el.style.top = parms.top;\r\n\t\t\t\t\tif (parms.left) {\r\n\t\t\t\t\t\tel.style.left = parms.left;\r\n\t\t\t\t\t\tel.style.right = 'inherit';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tel.style.width = 'inherit';\r\n\t\t\t}\r\n\r\n\t\t\tel.classList.add('md-show');\r\n\t\t\tel.style.zIndex = 101;\r\n\r\n\t\t\tif (!isFullScreen) {\r\n\t\t\t\tconst header = el.getElementsByClassName(\"modal-header\")[0];\r\n\t\t\t\tdragElement(el, header);\r\n\t\t\t\t_initResize(el);\r\n\t\t\t}\r\n\r\n\t\t\tif (onSubmit) {\r\n\t\t\t\tconst btn = el.querySelector('.modal-footer button[type=\"submit\"]');\r\n\t\t\t\tif (btn) {\r\n\t\t\t\t\tbtn.onclick = e => {\r\n\t\t\t\t\t\tonSubmit(e);\r\n\t\t\t\t\t\tinstance.close(el);\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\tclose: function (el) {\r\n\t\t\tif (!el.nodeType) el = document.getElementById(el);\r\n\t\t\tel.classList.remove('md-show');\r\n\t\t\tel.style.zIndex = null;\r\n\t\t\tif (!el.hasAttribute('data-reuse')) {\r\n\t\t\t\tau.delay(el, function (d) {\r\n\t\t\t\t\td.parentNode.removeChild(d);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t_dialog = _dialogs.pop();\r\n\t\t},\r\n\t\twidgetWillMount: function (shadow, state) {\r\n\t\t\tconst el = shadow.getElementById(state.root);\r\n\t\t\tconst parentid = el.getAttribute('data-c-parent');\r\n\t\t\tif (el.hasAttribute('data-showonrender'))\r\n\t\t\t\tinstance.open(el);\r\n\t\t\tif (parentid) {\r\n\t\t\t\tconst parent = document.getElementById(parentid);\r\n\t\t\t\tparent.style.zIndex = 99;\r\n\t\t\t\tstate.parent = parent;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAjaxSend: function (caller, target, state) {\r\n\t\t\tif (target.data['c-new']) {\r\n\t\t\t\ttarget.data['c-parent'] = state.root;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonResult: function (res, state) {\r\n\t\t\tconst el = document.getElementById(state.root);\r\n\t\t\tinstance.close(el);\r\n\t\t\tif (state.parent) {\r\n\t\t\t\tif (res == 1 && el.hasAttribute('data-onsubmitcloseparent'))\r\n\t\t\t\t\tinstance.close(state.parent);\r\n\t\t\t\telse\r\n\t\t\t\t\tstate.parent.style.zIndex = 101;\r\n\t\t\t}\r\n\t\t\tif (res == 0) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfunction dragElement(el, dragEl) {\r\n\t\tif (!dragEl) return;\r\n\r\n\t\tvar pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\r\n\r\n\t\tdragEl.onmousedown = dragMouseDown;\r\n\t\tdragEl.style.cursor = 'move';\r\n\r\n\t\tfunction dragMouseDown(e) {\r\n\t\t\tif (e.target instanceof HTMLButtonElement) return;\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tpos3 = e.clientX;\r\n\t\t\tpos4 = e.clientY;\r\n\r\n\t\t\tdocument.onmouseup = closeDragElement;\r\n\t\t\tdocument.onmousemove = elementDrag;\r\n\r\n\t\t\tvar style = window.getComputedStyle(el);\r\n\t\t\tel.style.transition = 'inherit';\r\n\r\n\t\t\tif (style.right != '') {\r\n\t\t\t\tconst left = el.offsetLeft;\r\n\t\t\t\tel.style.right = 'inherit';\r\n\t\t\t\tel.style.left = left + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction elementDrag(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\t// calculate the new cursor position:\r\n\t\t\tpos1 = pos3 - e.clientX;\r\n\t\t\tpos2 = pos4 - e.clientY;\r\n\t\t\tpos3 = e.clientX;\r\n\t\t\tpos4 = e.clientY;\r\n\t\t\t// set the element's new position:\r\n\t\t\tel.style.top = (el.offsetTop - pos2) + \"px\";\r\n\t\t\tel.style.left = (el.offsetLeft - pos1) + \"px\";\r\n\t\t}\r\n\r\n\t\tfunction closeDragElement() {\r\n\t\t\tlocalStorage.setObject(location.pathname + '/' + el.id, {\r\n\t\t\t\tleft: el.style.left,\r\n\t\t\t\ttop: el.style.top,\r\n\t\t\t\twidth: el.style.width,\r\n\t\t\t\theight: el.style.height\r\n\t\t\t});\r\n\r\n\t\t\t// stop moving when mouse button is released:\r\n\t\t\tdocument.onmouseup = null;\r\n\t\t\tdocument.onmousemove = null;\r\n\t\t}\r\n\t}\r\n\r\n\tvar _dialog = null,\r\n\t\t_dialogs = [],\r\n\t\t_resizeMode = '',\r\n\t\t_isResize = false,\r\n\t\t_resizePixel = 15,\r\n\t\t_minW = 100,\r\n\t\t_minH = 100,\r\n\t\t_maxX,\r\n\t\t_maxY,\r\n\t\t_startX,\r\n\t\t_startY,\r\n\t\t_startW,\r\n\t\t_startH;\r\n\tfunction _getOffset(elm) {\r\n\t\tvar rect = elm.getBoundingClientRect(),\r\n\t\t\toffsetX = window.scrollX || document.documentElement.scrollLeft,\r\n\t\t\toffsetY = window.scrollY || document.documentElement.scrollTop;\r\n\t\treturn {\r\n\t\t\tleft: rect.left + offsetX,\r\n\t\t\ttop: rect.top + offsetY,\r\n\t\t\tright: rect.right + offsetX,\r\n\t\t\tbottom: rect.bottom + offsetY\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _returnEvent(evt) {\r\n\t\tif (evt.stopPropagation)\r\n\t\t\tevt.stopPropagation();\r\n\t\tif (evt.preventDefault)\r\n\t\t\tevt.preventDefault();\r\n\t\telse {\r\n\t\t\tevt.returnValue = false;\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _onMouseDown(evt) {\r\n\t\tif (evt.target != _dialog)\r\n\t\t\treturn;\r\n\t\tvar rect = _getOffset(_dialog);\r\n\t\t_maxX = Math.max(\r\n\t\t\tdocument.documentElement[\"clientWidth\"],\r\n\t\t\tdocument.body[\"scrollWidth\"],\r\n\t\t\tdocument.documentElement[\"scrollWidth\"],\r\n\t\t\tdocument.body[\"offsetWidth\"],\r\n\t\t\tdocument.documentElement[\"offsetWidth\"]\r\n\t\t);\r\n\t\t_maxY = Math.max(\r\n\t\t\tdocument.documentElement[\"clientHeight\"],\r\n\t\t\tdocument.body[\"scrollHeight\"],\r\n\t\t\tdocument.documentElement[\"scrollHeight\"],\r\n\t\t\tdocument.body[\"offsetHeight\"],\r\n\t\t\tdocument.documentElement[\"offsetHeight\"]\r\n\t\t);\r\n\t\tif (rect.right > _maxX)\r\n\t\t\t_maxX = rect.right;\r\n\t\tif (rect.bottom > _maxY)\r\n\t\t\t_maxY = rect.bottom;\r\n\r\n\t\t_startX = evt.pageX;\r\n\t\t_startY = evt.pageY;\r\n\t\t_startW = _dialog.clientWidth;\r\n\t\t_startH = _dialog.clientHeight;\r\n\t\t_leftPos = rect.left;\r\n\t\t_topPos = rect.top;\r\n\t\tif (_resizeMode != '') {\r\n\t\t\t_isResize = true;\r\n\t\t}\r\n\t\tvar r = _dialog.getBoundingClientRect();\r\n\t\treturn _returnEvent(evt);\r\n\t}\r\n\tfunction _setCursor(cur) {\r\n\t\t_dialog.style.cursor = cur;\r\n\t}\r\n\tfunction _onMouseMove(evt) {\r\n\t\tif (evt.target != _dialog && _resizeMode == '')\r\n\t\t\treturn;\r\n\t\tif (_isResize) {\r\n\t\t\tvar dw, dh, w, h;\r\n\t\t\tif (_resizeMode == 'w') {\r\n\t\t\t\tdw = _startX - evt.pageX;\r\n\t\t\t\tif (_leftPos - dw < 0)\r\n\t\t\t\t\tdw = _leftPos;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\tif (w < _minW) {\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\t\tdw = w - _startW;\r\n\t\t\t\t}\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t\t_dialog.style.left = (_leftPos - dw) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'e') {\r\n\t\t\t\tdw = evt.pageX - _startX;\r\n\t\t\t\tif (_leftPos + _startW + dw > _maxX)\r\n\t\t\t\t\tdw = _maxX - _leftPos - _startW;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\tif (w < _minW)\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'n') {\r\n\t\t\t\tdh = _startY - evt.pageY;\r\n\t\t\t\tif (_topPos - dh < 0)\r\n\t\t\t\t\tdh = _topPos;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (h < _minH) {\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t\tdh = h - _startH;\r\n\t\t\t\t}\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t\t_dialog.style.top = (_topPos - dh) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 's') {\r\n\t\t\t\tdh = evt.pageY - _startY;\r\n\t\t\t\tif (_topPos + _startH + dh > _maxY)\r\n\t\t\t\t\tdh = _maxY - _topPos - _startH;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (h < _minH)\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'nw') {\r\n\t\t\t\tdw = _startX - evt.pageX;\r\n\t\t\t\tdh = _startY - evt.pageY;\r\n\t\t\t\tif (_leftPos - dw < 0)\r\n\t\t\t\t\tdw = _leftPos;\r\n\t\t\t\tif (_topPos - dh < 0)\r\n\t\t\t\t\tdh = _topPos;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (w < _minW) {\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\t\tdw = w - _startW;\r\n\t\t\t\t}\r\n\t\t\t\tif (h < _minH) {\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t\tdh = h - _startH;\r\n\t\t\t\t}\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t\t_dialog.style.left = (_leftPos - dw) + 'px';\r\n\t\t\t\t_dialog.style.top = (_topPos - dh) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'sw') {\r\n\t\t\t\tdw = _startX - evt.pageX;\r\n\t\t\t\tdh = evt.pageY - _startY;\r\n\t\t\t\tif (_leftPos - dw < 0)\r\n\t\t\t\t\tdw = _leftPos;\r\n\t\t\t\tif (_topPos + _startH + dh > _maxY)\r\n\t\t\t\t\tdh = _maxY - _topPos - _startH;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (w < _minW) {\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\t\tdw = w - _startW;\r\n\t\t\t\t}\r\n\t\t\t\tif (h < _minH)\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t\t_dialog.style.left = (_leftPos - dw) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'ne') {\r\n\t\t\t\tdw = evt.pageX - _startX;\r\n\t\t\t\tdh = _startY - evt.pageY;\r\n\t\t\t\tif (_leftPos + _startW + dw > _maxX)\r\n\t\t\t\t\tdw = _maxX - _leftPos - _startW;\r\n\t\t\t\tif (_topPos - dh < 0)\r\n\t\t\t\t\tdh = _topPos;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (w < _minW)\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\tif (h < _minH) {\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t\tdh = h - _startH;\r\n\t\t\t\t}\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t\t_dialog.style.top = (_topPos - dh) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (_resizeMode == 'se') {\r\n\t\t\t\tdw = evt.pageX - _startX;\r\n\t\t\t\tdh = evt.pageY - _startY;\r\n\t\t\t\tif (_leftPos + _startW + dw > _maxX)\r\n\t\t\t\t\tdw = _maxX - _leftPos - _startW;\r\n\t\t\t\tif (_topPos + _startH + dh > _maxY)\r\n\t\t\t\t\tdh = _maxY - _topPos - _startH;\r\n\t\t\t\tw = _startW + dw;\r\n\t\t\t\th = _startH + dh;\r\n\t\t\t\tif (w < _minW)\r\n\t\t\t\t\tw = _minW;\r\n\t\t\t\tif (h < _minH)\r\n\t\t\t\t\th = _minH;\r\n\t\t\t\t_dialog.style.width = w + 'px';\r\n\t\t\t\t_dialog.style.height = h + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (_dialog.style.left === '') {\r\n\t\t\t\tvar rect = _getOffset(_dialog);\r\n\t\t\t\t_dialog.style.left = (document.documentElement.getBoundingClientRect().width - rect.right + rect.left) / 2 + 'px';\r\n\t\t\t\t_dialog.style.right = 'auto';\r\n\t\t\t}\r\n\t\t\tvar cs, rm = '';\r\n\t\t\tif (evt.target === _dialog) {\r\n\t\t\t\tvar rect = _getOffset(_dialog);\r\n\t\t\t\tif (evt.pageY < rect.top + _resizePixel)\r\n\t\t\t\t\trm = 'n';\r\n\t\t\t\telse if (evt.pageY > rect.bottom - _resizePixel)\r\n\t\t\t\t\trm = 's';\r\n\t\t\t\tif (evt.pageX < rect.left + _resizePixel)\r\n\t\t\t\t\trm += 'w';\r\n\t\t\t\telse if (evt.pageX > rect.right - _resizePixel)\r\n\t\t\t\t\trm += 'e';\r\n\t\t\t}\r\n\t\t\tif (rm != '' && _resizeMode != rm) {\r\n\t\t\t\tif (rm == 'n' || rm == 's')\r\n\t\t\t\t\tcs = 'ns-resize';\r\n\t\t\t\telse if (rm == 'e' || rm == 'w')\r\n\t\t\t\t\tcs = 'ew-resize';\r\n\t\t\t\telse if (rm == 'ne' || rm == 'sw')\r\n\t\t\t\t\tcs = 'nesw-resize';\r\n\t\t\t\telse if (rm == 'nw' || rm == 'se')\r\n\t\t\t\t\tcs = 'nwse-resize';\r\n\t\t\t\t_setCursor(cs);\r\n\t\t\t\t_resizeMode = rm;\r\n\t\t\t}\r\n\t\t\telse if (rm == '' && _resizeMode != '') {\r\n\t\t\t\t_setCursor('');\r\n\t\t\t\t_resizeMode = '';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn _returnEvent(evt);\r\n\t}\r\n\r\n\t_onMouseUp = function (evt) {\r\n\t\tif (evt.target != _dialog && _resizeMode == '')\r\n\t\t\treturn;\r\n\t\tif (_isResize) {\r\n\t\t\t_setCursor('');\r\n\t\t\t_isResize = false;\r\n\t\t\t_resizeMode = '';\r\n\t\t\tlocalStorage.setObject(location.pathname + '/' + _dialog.id, {\r\n\t\t\t\tleft: _dialog.style.left,\r\n\t\t\t\ttop: _dialog.style.top,\r\n\t\t\t\twidth: _dialog.style.width,\r\n\t\t\t\theight: _dialog.style.height\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn _returnEvent(evt);\r\n\t}\r\n\tfunction _initResize(dlg) {\r\n\t\t_dialogs.push(_dialog);\r\n\t\t_dialog = dlg;\r\n\t\t_dialog.addEventListener('mousedown', _onMouseDown, false);\r\n\t\tdocument.addEventListener('mousemove', _onMouseMove, false);\r\n\t\tdocument.addEventListener('mouseup', _onMouseUp, false);\r\n\t\twindow.setTimeout(function () {\r\n\t\t\tif (_dialog.getBoundingClientRect().height < _dialog.children[0].getBoundingClientRect().height)\r\n\t\t\t\t_dialog.style.height = document.documentElement[\"clientHeight\"] + 'px';\r\n\t\t}, 0);\t\t\r\n\t}\r\n\r\n\treturn instance;\r\n}(ajaxUtils);\r\n\r\n\r\nclass FieldEdit extends Tango.Component {\r\n\tprepareParms() {\r\n\t\treturn {\r\n\t\t\ttop: this.root.offsetTop,\r\n\t\t\tleft: this.root.offsetLeft,\r\n\t\t\twidth: this.root.offsetWidth,\r\n\t\t\theight: this.root.offsetHeight\r\n\t\t}\r\n\t}\r\n}\r\n\r\nTango.registerContainer(FieldEdit);\r\n","window.checkBoxCell = function (au, cu) {\r\n\tvar instance = {\r\n\t\tsetselected: function (el, onCheckChangeDelegate) {\r\n\t\t\tconst row = { el: el, tr: cu.getRow(el) };\r\n\t\t\tinstance.selSelectedRange([row], onCheckChangeDelegate);\r\n\t\t\treturn row;\r\n\t\t},\r\n\t\tselSelectedRange: function (rows, onCheckChangeDelegate) {\r\n\t\t\tif (!rows || rows.length == 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tconst c = au.findControl(rows[0].el);\r\n\t\t\tconst cins = c.instance;\r\n\t\t\tconst cbhead = document.getElementById(c.id + \"_sel_header\");\r\n\r\n\t\t\tfor (var i = 0; i < rows.length; i++) {\r\n\t\t\t\tconst el = rows[i].el;\r\n\t\t\t\tconst tr = rows[i].tr;\r\n\t\t\t\tif (!tr) tr = cu.getRow(el);\r\n\t\t\t\tconst setUnchecked = 'newState' in rows[i] ?\r\n\t\t\t\t\trows[i].newState == 0 :\r\n\t\t\t\t\ttr.classList.contains('checked') || tr.hasAttribute('data-checked');\r\n\r\n\t\t\t\tif (setUnchecked) {\r\n\t\t\t\t\tif (cins.selectedvalues[0] == -1) {\r\n\t\t\t\t\t\tcins.selectedvalues = [];\r\n\t\t\t\t\t\tif (cbhead) instance.setPageChecked(c.root, cins, cbhead);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinstance.setRowAndValueUnchecked(tr, el, cins);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tinstance.setRowAndValueChecked(tr, el, cins);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst cblist = c.root.querySelectorAll('.sel');\r\n\t\t\tvar j = 0;\r\n\t\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\t\tif (cblist[i].getAttribute('data-state') == 1) j++;\r\n\t\t\t}\r\n\t\t\tif (cbhead) instance.setHeaderSelectorState(cbhead, j, cblist.length);\r\n\t\t\tif (onCheckChangeDelegate) onCheckChangeDelegate(document, c.root, cins, j != 0);\r\n\t\t},\r\n\r\n\t\tcbheadclicked: function (cbhead, onCheckChangeDelegate) {\r\n\t\t\tconst c = au.findControl(cbhead);\r\n\t\t\tconst cins = c.instance;\r\n\t\t\tconst cblist = c.root.querySelectorAll('.sel');\r\n\t\t\tconst headstate = cbhead.getAttribute('data-state') || '0';\r\n\r\n\t\t\tif (headstate == '2' || headstate == '1') {\r\n\t\t\t\tinstance.setPageUnchecked(c.root, cins, cbhead);\r\n\t\t\t}\r\n\t\t\telse if (headstate == '0') {\r\n\t\t\t\tinstance.setPageChecked(c.root, cins, cbhead);\r\n\t\t\t}\r\n\t\t\tif (onCheckChangeDelegate) onCheckChangeDelegate(document, c.root, cins);\r\n\t\t},\r\n\r\n\t\tsetHeaderSelectorState: function (cbhead, j, cnt) {\r\n\t\t\tif (j == cnt) {\r\n\t\t\t\tcbhead.setAttribute('data-state', '1');\r\n\t\t\t\tcbhead.firstChild.className = 'icon icon-checkbox-checked';\r\n\t\t\t} else if (j == 0) {\r\n\t\t\t\tcbhead.setAttribute('data-state', '0');\r\n\t\t\t\tcbhead.firstChild.className = 'icon icon-checkbox-unchecked';\r\n\t\t\t} else {\r\n\t\t\t\tcbhead.setAttribute('data-state', '2');\r\n\t\t\t\tcbhead.firstChild.className = 'icon icon-minus-box';\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tsetRowChecked: function (tr, el, state) {\r\n\t\t\tconst ctx = { tr: tr };\r\n\t\t\tif (state.onRowChecking)\r\n\t\t\t\tif (state.onRowChecking.invoke(ctx) == false)\r\n\t\t\t\t\treturn;\r\n\t\t\ttr.classList.add('checked');\r\n\t\t\tel.querySelector('i').className = 'icon icon-checkbox-checked';\r\n\t\t\tel.setAttribute('data-state', 1);\r\n\t\t\tif (state.onRowChecked)\r\n\t\t\t\tstate.onRowChecked.invoke(ctx);\r\n\t\t},\r\n\t\tsetRowAndValueChecked: function (tr, el, state) {\r\n\t\t\tinstance.setRowChecked(tr, el, state);\r\n\t\t\tconst rowid = tr.getAttribute('data-rowid');\r\n\t\t\tif (state.selectedvalues.indexOf(rowid) == -1)\r\n\t\t\t\tstate.selectedvalues.push(rowid);\r\n\t\t},\r\n\r\n\t\tsetRowUnchecked: function (tr, el, state) {\r\n\t\t\tconst ctx = { tr: tr };\r\n\t\t\tif (state.onRowUnchecking)\r\n\t\t\t\tif (!state.onRowUnchecking.invoke(ctx))\r\n\t\t\t\t\treturn;\r\n\t\t\ttr.classList.remove('checked');\r\n\t\t\tel.querySelector('i').className = 'icon icon-checkbox-unchecked';\r\n\t\t\tel.setAttribute('data-state', 0);\r\n\t\t\tif (state.onRowUnchecked)\r\n\t\t\t\tstate.onRowUnchecked.invoke(ctx);\r\n\t\t},\r\n\t\tsetRowAndValueUnchecked: function (tr, el, state) {\r\n\t\t\tinstance.setRowUnchecked(tr, el, state);\r\n\t\t\tconst rowid = tr.getAttribute('data-rowid');\r\n\t\t\tconst index = state.selectedvalues.indexOf(rowid);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tstate.selectedvalues.splice(index, 1);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tsetPageChecked: function (root, state, cbhead) {\r\n\t\t\tconst cblist = root.querySelectorAll('.sel');\r\n\t\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\t\tconst tr = cu.getRow(cblist[i]);\r\n\t\t\t\tinstance.setRowChecked(tr, cblist[i], state);\r\n\t\t\t\tstate.selectedvalues.push(tr.getAttribute('data-rowid'));\r\n\t\t\t}\r\n\t\t\tcbhead.setAttribute('data-state', '1');\r\n\t\t\tcbhead.firstChild.className = 'icon icon-checkbox-checked';\r\n\t\t},\r\n\r\n\t\tsetPageUnchecked: function (root, state, cbhead) {\r\n\t\t\tconst cblist = root.querySelectorAll('.sel');\r\n\t\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\t\tconst tr = cu.getRow(cblist[i]);\r\n\t\t\t\tinstance.setRowUnchecked(tr, cblist[i], state);\r\n\t\t\t\tconst index = state.selectedvalues.indexOf(tr.getAttribute('data-rowid'));\r\n\t\t\t\tif (index > -1) {\r\n\t\t\t\t\tstate.selectedvalues.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (cbhead) {\r\n\t\t\t\tcbhead.setAttribute('data-state', '0');\r\n\t\t\t\tcbhead.firstChild.className = 'icon icon-checkbox-unchecked';\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils);\r\n\r\nwindow.listview = function (au, cu, cbcell, menu) {\r\n\tconst w = new Tango.HtmlWriter();\r\n\tconst instance = {\r\n\t\ttogglerow: function (el) {\r\n\t\t\tconst tr = cu.getRow(el);\r\n\t\t\tconst level = parseInt(tr.getAttribute('data-level')) || 0;\r\n\t\t\tconst elcellid = el.id || '';\r\n\t\t\tconst state = el.getAttribute('data-state') || 'collapsed';\r\n\t\t\tconst isButton = el.classList.contains('rowexpandercell');\r\n\t\t\tconst expandedrows = document.getElementById(el.getAttribute('data-r') + \"_expandedrows\");\r\n\t\t\tconst expandedValue = tr.getAttribute('data-rowid') + \";\";\r\n\r\n\t\t\tif (state == 'collapsed') {\r\n\t\t\t\tel.setAttribute('data-state', 'expanded');\r\n\t\t\t\tif (isButton) {\r\n\t\t\t\t\tvar icon = el.querySelector('.icon.icon-collapsed')\r\n\t\t\t\t\tif (icon) {\r\n\t\t\t\t\t\ticon.className = 'icon icon-expanded';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar load = true;\r\n\r\n\t\t\t\tvar row = tr.nextElementSibling;\r\n\t\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\t\tif (elcellid == (row.getAttribute('data-cellid') || '')) {\r\n\t\t\t\t\t\trow.style.display = '';\r\n\t\t\t\t\t\tload = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst hideOthers = function () {\r\n\t\t\t\t\trow = tr.nextElementSibling;\r\n\t\t\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\t\t\tif (elcellid != (row.getAttribute('data-cellid') || '')) {\r\n\t\t\t\t\t\t\trow.style.display = 'none';\r\n\t\t\t\t\t\t\tdocument.getElementById(row.getAttribute('data-cellid')).setAttribute('data-state', 'collapsed');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tconst e = el.getAttribute('data-e');\r\n\t\t\t\tif (load && e)\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(el, { data: { rowid: tr.id, level: level, dataid: tr.getAttribute('data-rowid') } }).then(hideOthers);\r\n\t\t\t\telse\r\n\t\t\t\t\thideOthers();\r\n\r\n\t\t\t\tif (expandedrows != null && !expandedrows.value.includes(expandedValue))\r\n\t\t\t\t\texpandedrows.value += expandedValue;\r\n\t\t\t} else {\r\n\t\t\t\tel.setAttribute('data-state', 'collapsed');\r\n\t\t\t\tif (isButton) {\r\n\t\t\t\t\tvar icon = el.querySelector('.icon.icon-expanded')\r\n\t\t\t\t\tif (icon) {\r\n\t\t\t\t\t\ticon.className = 'icon icon-collapsed';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar row = tr.nextElementSibling;\r\n\t\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\t\tif (elcellid == (row.getAttribute('data-cellid') || '')) {\r\n\t\t\t\t\t\trow.style.display = 'none';\r\n\t\t\t\t\t}\r\n\t\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (expandedrows != null && expandedrows.value.includes(expandedValue)) {\r\n\t\t\t\t\texpandedrows.value = expandedrows.value.replace(expandedValue, '');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttr.querySelectorAll('.expandedcell').forEach(function (n) {\r\n\t\t\t\tn.classList.remove('expandedcell');\r\n\t\t\t});\r\n\r\n\t\t\tif (elcellid != '' && state == 'collapsed') cu.getCell(el).classList.add('expandedcell');\r\n\t\t},\r\n\t\ttogglelevel: function (el, afterLoad, recursive) {\r\n\t\t\tconst tr = cu.getRow(el);\r\n\t\t\tconst level = parseInt(tr.getAttribute('data-level'));\r\n\t\t\tconst isCollapsed = tr.classList.contains('collapsed');\r\n\t\t\tconst isHide = tr.classList.contains('hide');\r\n\t\t\tconst collapsedBy = tr.getAttribute('data-collapsedby');\r\n\r\n\t\t\tconst expand = function () {\r\n\t\t\t\tvar row = tr.nextElementSibling;\r\n\r\n\t\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\t\tif (isCollapsed && !isHide) {\r\n\t\t\t\t\t\ttr.classList.remove('collapsed');\r\n\t\t\t\t\t\tif (parseInt(row.getAttribute('data-collapsedby')) == level) {\r\n\t\t\t\t\t\t\trow.classList.remove('hide');\r\n\t\t\t\t\t\t\trow.setAttribute('data-collapsedby', '');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (isHide) {\r\n\t\t\t\t\t\ttr.classList.remove('collapsed');\r\n\t\t\t\t\t\trow.classList.add('hide');\r\n\t\t\t\t\t\trow.setAttribute('data-collapsedby', collapsedBy);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!row.classList.contains('hide')) {\r\n\t\t\t\t\t\ttr.classList.add('collapsed');\r\n\t\t\t\t\t\trow.setAttribute('data-collapsedby', level);\r\n\t\t\t\t\t\trow.classList.add('hide');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (recursive)\r\n\t\t\t\t\t\tinstance.togglelevel(row, afterLoad, true);\r\n\r\n\t\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (afterLoad) afterLoad(tr, level);\r\n\t\t\t}\r\n\r\n\t\t\tif (tr.hasAttribute('data-e') && !tr.hasAttribute('data-loaded')) {\r\n\t\t\t\tau.postEventFromElementWithApiResponse(tr, { requestGroup: tr.id }).then(function () {\r\n\t\t\t\t\ttr.setAttribute('data-loaded', '');\r\n\t\t\t\t\texpand();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\texpand();\r\n\t\t\t}\r\n\t\t},\r\n\t\texpandRow: function (tr) {\r\n\t\t\tconst level = parseInt(tr.getAttribute('data-level'));\r\n\t\t\tvar row = tr.nextElementSibling;\r\n\r\n\t\t\ttr.classList.remove('collapsed');\r\n\r\n\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\tif (parseInt(row.getAttribute('data-collapsedby')) == level) {\r\n\t\t\t\t\trow.classList.remove('hide');\r\n\t\t\t\t\trow.setAttribute('data-collapsedby', '');\r\n\t\t\t\t}\r\n\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t}\r\n\t\t},\r\n\t\tcollapseRow: function (tr) {\r\n\t\t\tconst level = parseInt(tr.getAttribute('data-level'));\r\n\t\t\tvar row = tr.nextElementSibling;\r\n\r\n\t\t\ttr.classList.add('collapsed');\r\n\r\n\t\t\twhile (row && parseInt(row.getAttribute('data-level')) > level) {\r\n\t\t\t\trow.setAttribute('data-collapsedby', level);\r\n\t\t\t\trow.classList.add('hide');\r\n\t\t\t\trow = row.nextElementSibling;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\twidgetWillMount: function (shadow, ctrl) {\r\n\t\t\tconst root = shadow.getElementById(ctrl.root);\r\n\t\t\t//initHighlight(root);\r\n\r\n\t\t\tif (!ctrl.selectedvalues) return;\r\n\r\n\t\t\tconst cblist = root.querySelectorAll('.sel:not(.initialized)');\r\n\t\t\tconst cbhead = root.querySelector('.sel_header');\r\n\r\n\t\t\tvar j = 0;\r\n\r\n\t\t\tif (ctrl.selectedvalues[0] == -1) {\r\n\t\t\t\tcbcell.setPageChecked(root, ctrl, cbhead);\r\n\t\t\t\tj = cblist.length\r\n\t\t\t} else {\r\n\t\t\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\t\t\tconst tr = cu.getRow(cblist[i]);\r\n\t\t\t\t\tconst index = ctrl.selectedvalues.indexOf(tr.getAttribute('data-rowid'));\r\n\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\tcbcell.setRowChecked(tr, cblist[i], ctrl);\r\n\t\t\t\t\t\tj++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tinitCheckBoxes(ctrl, cblist);\r\n\r\n\t\t\tif (cbhead) {\r\n\t\t\t\tcbhead.addEventListener('click', function (e) { cbcell.cbheadclicked(e.currentTarget, onCheckChange); });\r\n\t\t\t\tcbcell.setHeaderSelectorState(cbhead, j, cblist.length);\r\n\t\t\t}\r\n\t\t\tonCheckChange(shadow, root, ctrl);\r\n\r\n\r\n\t\t},\r\n\t\twidgetDidMount: function (ctrl) {\r\n\t\t\tconst root = document.getElementById(ctrl.root);\r\n\t\t\tif (root == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tconst highlight = root instanceof HTMLTableElement && root.classList.contains('highlight') ?\r\n\t\t\t\troot : root.querySelector('.listviewtable.highlight');\r\n\t\t\tif (highlight) initHighlight(highlight);\r\n\r\n\t\t\tinstance.initFixedHeader(root);\r\n\r\n\t\t\tif (ctrl.props && ctrl.props.listSettingsPopupID)\r\n\t\t\t\tinstance.initListSettings(root);\r\n\r\n\t\t\tvar el = $('#' + ctrl.root);\r\n\t\t\tif (!el.tableDnD || !el.hasClass(\"draggablerows\")) return;\r\n\t\t\tel.tableDnD({\r\n\t\t\t\t_oldpos: null,\r\n\t\t\t\tdragHandle: \".dragHandle\",\r\n\t\t\t\tonDragStart: function (table, row) {\r\n\t\t\t\t\tconst next = row.nodeName == 'TD' ? row.parentNode.nextElementSibling : row.nextElementSibling;\r\n\t\t\t\t\tthis._oldpos = next ? next.getAttribute('data-id') : -1;\r\n\t\t\t\t},\r\n\t\t\t\tonDragStop: function (table, row) {\r\n\t\t\t\t\tconst next = row.nodeName == 'TD' ? row.parentNode.nextElementSibling : row.nextElementSibling;\r\n\r\n\t\t\t\t\tconst target = {\r\n\t\t\t\t\t\te: 'OnRowMove',\r\n\t\t\t\t\t\tr: table.id,\r\n\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\tnewid: next ? next.getAttribute('data-id') : -1,\r\n\t\t\t\t\t\t\toldid: row.getAttribute('data-id')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif (target.data.newid == this._oldpos) return;\r\n\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(el[0], target);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t},\r\n\t\twidgetContentChanged: function (state) {\r\n\t\t\tconst root = document.getElementById(state.root);\r\n\t\t\tconst cblist = root.querySelectorAll('.sel:not(.initialized)');\r\n\t\t\tinitCheckBoxes(state, cblist);\r\n\t\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\t\tconst tr = cu.getRow(cblist[i]);\r\n\t\t\t\tconst index = state.selectedvalues.indexOf(tr.getAttribute('data-rowid'));\r\n\t\t\t\tif (index > -1) {\r\n\t\t\t\t\tcbcell.setRowChecked(tr, cblist[i], state);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tinitHighlight(root);\r\n\t\t},\r\n\t\tselectall: function (rootid) {\r\n\t\t\tconst root = document.getElementById(rootid);\r\n\t\t\tconst state = au.state.ctrl[rootid];\r\n\t\t\tconst cbhead = document.getElementById(root.id + \"_sel_header\");\r\n\r\n\t\t\tstate.selectedvalues.splice(0);\r\n\t\t\tstate.selectedvalues.push(-1);\r\n\r\n\t\t\tcbcell.setPageChecked(root, state, cbhead);\r\n\t\t\tonCheckChange(document, root, state);\r\n\t\t},\r\n\t\tclearselection: function (rootid) {\r\n\t\t\tconst state = au.state.ctrl[rootid];\r\n\t\t\tif (state) {\r\n\t\t\t\tstate.selectedvalues.splice(0);\r\n\r\n\t\t\t\tconst root = document.getElementById(rootid);\r\n\t\t\t\tif (root) {\r\n\t\t\t\t\tconst cbhead = document.getElementById(root.id + \"_sel_header\");\r\n\t\t\t\t\tcbcell.setPageUnchecked(root, state, cbhead);\r\n\t\t\t\t\tonCheckChange(document, root, state);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonlevelsetpage: function (el) {\r\n\t\t\tconst tr = cu.getRow(el);\r\n\t\t\tconst level = parseInt(tr.getAttribute('data-level'));\r\n\r\n\t\t\tvar row = tr.previousElementSibling;\r\n\t\t\tvar toremove = [];\r\n\t\t\twhile (row && parseInt(row.getAttribute('data-level')) >= level) {\r\n\t\t\t\ttoremove.push(row);\r\n\t\t\t\trow = row.previousElementSibling;\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0; i < toremove.length; i++) {\r\n\t\t\t\ttoremove[i].parentNode.removeChild(toremove[i]);\r\n\t\t\t}\r\n\r\n\t\t\trow = tr.previousElementSibling;\r\n\r\n\t\t\tvar target = { data: {} };\r\n\t\t\tfor (var attr, i = 0, attrs = row.attributes, n = attrs ? attrs.length : 0; i < n; i++) {\r\n\t\t\t\tattr = attrs[i];\r\n\t\t\t\tvar val = attr.value == '' ? null : attr.value;\r\n\t\t\t\tif (attr.name.startsWith('data-p-')) {\r\n\t\t\t\t\ttarget.data[attr.name.replace('data-p-', '')] = val || '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttarget.data['sender'] = row.id;\r\n\r\n\t\t\ttr.parentNode.removeChild(tr);\r\n\r\n\t\t\tau.postEventFromElementWithApiResponse(el, target);\r\n\t\t},\r\n\t\topenlevel: function (args, counter) {\r\n\t\t\tif (!counter) counter = 0;\r\n\r\n\t\t\tif (args && args[counter]) {\r\n\t\t\t\tvar rowid = '[data-rowid=\"' + args[counter] + '\"]';\r\n\t\t\t\tvar el = document.querySelector(rowid);\r\n\r\n\t\t\t\tif (el.hasAttribute('data-loaded')) {\r\n\t\t\t\t\tif (el.classList.contains('collapsed')) {\r\n\t\t\t\t\t\tinstance.expandRow(el);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinstance.openlevel(args, counter + 1);\r\n\t\t\t\t}\r\n\t\t\t\telse if (counter < args.length - 1) {\r\n\t\t\t\t\tvar level = parseInt(el.getAttribute('data-level'));\r\n\t\t\t\t\tajaxUtils.postEventFromElementWithApiResponse(el, { data: { rowid: args[counter], level: level, selectedRow: args[args.length - 1] } }).done(function () {\r\n\t\t\t\t\t\tvar rowid = '[data-rowid=\"' + args[counter] + '\"]';\r\n\t\t\t\t\t\tvar el = document.querySelector(rowid);\r\n\t\t\t\t\t\tel.setAttribute('data-loaded', '');\r\n\t\t\t\t\t\tinstance.expandRow(el);\r\n\r\n\t\t\t\t\t\tinstance.openlevel(args, counter + 1);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (counter == args.length - 1)\r\n\t\t\t\tel.scrollIntoView();\r\n\t\t},\r\n\t\tinitFixedHeader: function (root) {\r\n\t\t\tif (typeof root === 'string' || root instanceof String)\r\n\t\t\t\troot = document.getElementById(root);\r\n\t\t\tconst table = root instanceof HTMLTableElement && root.classList.contains('fixedheader') ?\r\n\t\t\t\troot : root.querySelector('.listviewtable.fixedheader');\r\n\t\t\tif (table) initFixedHeader(table);\r\n\t\t},\r\n\t\tonRemoveIconClick: function (e) {\r\n\t\t\tvar seltr = cu.getRow(e.currentTarget);\r\n\t\t\tconst rootsel = au.findControl(seltr);\r\n\t\t\tconst state = au.state.ctrl[rootsel.id.replace('_selected', '')];\r\n\r\n\t\t\tfunction unSelect(el) {\r\n\t\t\t\tconst origel = document.getElementById(el.id.replace('_selected', ''));\r\n\t\t\t\tif (origel) {\r\n\t\t\t\t\tvar origcb = origel.querySelector('.sel');\r\n\t\t\t\t\tif (origcb && el.hasAttribute('data-checked')) {\r\n\t\t\t\t\t\tcbcell.setselected(origcb, onCheckChange);\r\n\t\t\t\t\t\tvar level = parseInt(origel.getAttribute('data-level'));\r\n\t\t\t\t\t\tvar curel = origel.previousElementSibling;\r\n\t\t\t\t\t\twhile (curel) {\r\n\t\t\t\t\t\t\tconst curlevel = parseInt(curel.getAttribute('data-level'));\r\n\t\t\t\t\t\t\tif (curlevel < level) {\r\n\t\t\t\t\t\t\t\tvar curcb = curel.querySelector('.sel');\r\n\t\t\t\t\t\t\t\tif (!curcb) break;\r\n\t\t\t\t\t\t\t\tconst hasStrategy = curcb.hasAttribute('data-strategy');\r\n\t\t\t\t\t\t\t\tif (!hasStrategy) break;\r\n\t\t\t\t\t\t\t\tconst strategyName = curcb.getAttribute('data-strategy');\r\n\t\t\t\t\t\t\t\tconst isChecked = curel.classList.contains('checked')\r\n\t\t\t\t\t\t\t\tif (isChecked && (strategyName == 'WithChildren' || strategyName == 'WithChildrenRecursive')) {\r\n\t\t\t\t\t\t\t\t\tcbcell.setselected(curcb, onCheckChange);\r\n\t\t\t\t\t\t\t\t\tconst selel = document.getElementById(curel.id + '_selected');\r\n\t\t\t\t\t\t\t\t\tif (selel) selel.removeAttribute('data-checked');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tlevel = curlevel;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcurel = curel.previousElementSibling;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst rowid = el.getAttribute('data-rowid');\r\n\t\t\t\t\tconst index = state.selectedvalues.indexOf(rowid);\r\n\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\tstate.selectedvalues.splice(index, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tunSelect(seltr);\r\n\r\n\t\t\tvar tocopy = [];\r\n\t\t\tvar level = parseInt(seltr.getAttribute('data-level'));\r\n\r\n\t\t\tvar childEl = seltr.nextElementSibling;\r\n\t\t\tif (childEl) {\r\n\t\t\t\tvar childLevel = parseInt(childEl.getAttribute('data-level'));\r\n\t\t\t\twhile (level < childLevel) {\r\n\t\t\t\t\tvar el = childEl;\r\n\t\t\t\t\tunSelect(el);\r\n\t\t\t\t\tchildEl = childEl.nextElementSibling;\r\n\t\t\t\t\tel.parentElement.removeChild(el);\r\n\t\t\t\t\tif (!childEl) break;\r\n\t\t\t\t\tchildLevel = parseInt(childEl.getAttribute('data-level'))\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile (seltr) {\r\n\t\t\t\tif (parseInt(seltr.getAttribute('data-level')) == level) {\r\n\t\t\t\t\ttocopy.push(seltr);\r\n\t\t\t\t\tlevel--;\r\n\t\t\t\t}\r\n\t\t\t\tseltr = seltr.previousElementSibling;\r\n\t\t\t}\r\n\t\t\tremoveSelected(tocopy);\r\n\t\t\tinstance.setObjectSetBackgroundColor(true);\r\n\t\t},\r\n\t\tinitListSettings: function (root) {\r\n\t\t\tconst ctrl = au.state.ctrl[root.id];\r\n\t\t\tif (ctrl.props.listSettingsPopupID) {\r\n\t\t\t\tconst popup = document.getElementById(ctrl.props.listSettingsPopupID);\r\n\t\t\t\tconst btn = document.getElementById(ctrl.props.listSettingsBtnID);\r\n\t\t\t\tconst cbHideColumns = popup.querySelectorAll('input[type=\"checkbox\"]');\r\n\t\t\t\tconst map = initMapHead(root);\r\n\t\t\t\tconst fh = root.classList.contains('fixedheader');\r\n\t\t\t\tbtn.setAttribute('data-colcnt', cbHideColumns.length);\r\n\r\n\t\t\t\tfor (var i = 0; i < cbHideColumns.length; i++) {\r\n\t\t\t\t\tcbHideColumns[i].checked = true;\r\n\t\t\t\t\tcbHideColumns[i].addEventListener('click', function (e) {\r\n\t\t\t\t\t\tconst cb = e.currentTarget;\r\n\t\t\t\t\t\tconst colIdx = parseInt(cb.getAttribute('data-colidx'));\r\n\t\t\t\t\t\tconst data = map[colIdx];\r\n\t\t\t\t\t\tvar colcnt = parseInt(btn.getAttribute('data-colcnt'));\r\n\r\n\t\t\t\t\t\tif (cb.checked)\r\n\t\t\t\t\t\t\tcolcnt++;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tcolcnt--;\r\n\r\n\t\t\t\t\t\tbtn.setAttribute('data-colcnt', colcnt);\r\n\r\n\t\t\t\t\t\tif (colcnt < cbHideColumns.length) {\r\n\t\t\t\t\t\t\tbtn.classList.add('listsettings-enabled');\r\n\t\t\t\t\t\t\tw.ChangeIcon(btn.firstChild, 'listsettings-mono');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tbtn.classList.remove('listsettings-enabled');\r\n\t\t\t\t\t\t\tw.ChangeIcon(btn.firstChild, 'listsettings');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (fh)\r\n\t\t\t\t\t\t\troot.classList.remove('fixedheader');\r\n\r\n\t\t\t\t\t\thideColumns(data.ths);\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < data.columns.length; i++) {\r\n\t\t\t\t\t\t\tvar column = data.columns[i] + 1;\r\n\t\t\t\t\t\t\tconst cells = root.querySelectorAll('tr > td:nth-child(' + column + ')');\r\n\t\t\t\t\t\t\thideColumns(cells);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar columns = '';\r\n\t\t\t\t\t\tfor (var i = 0; i < cbHideColumns.length; i++) {\r\n\t\t\t\t\t\t\tif (cbHideColumns[i].checked) {\r\n\t\t\t\t\t\t\t\tcolumns = columns + '\"' + cbHideColumns[i].nextSibling.innerText + '\",';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (ctrl.props.formID)\r\n\t\t\t\t\t\t\tsessionStorage.setItem(ctrl.props.formID + '.columns', columns.substring(0, columns.length - 1))\r\n\r\n\t\t\t\t\t\tif (fh) {\r\n\t\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t\tif (!root.classList.contains('fixedheader'))\r\n\t\t\t\t\t\t\t\t\troot.classList.add('fixedheader');\r\n\t\t\t\t\t\t\t}, 400);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfunction hideColumns(cells) {\r\n\t\t\t\t\t\t\tfor (var j = 0; j < cells.length; j++) {\r\n\t\t\t\t\t\t\t\tif (cb.checked) {\r\n\t\t\t\t\t\t\t\t\tcells[j].classList.remove('hide');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tcells[j].classList.add('hide');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\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\tscrollToCurrentNode: function (root) {\r\n\t\t\troot = document.getElementById(root);\r\n\t\t\tconst node = root.querySelector('.selected');\r\n\t\t\tif (node) node.scrollIntoView({ block: 'center' });\r\n\t\t},\r\n\t\tsetObjectSetBackgroundColor: function (arg) {\r\n\t\t\tconst el = document.querySelector('.objectsetmanager .objectset-select > div');\r\n\t\t\tif (el) {\r\n\t\t\t\tif (arg && el.classList.contains('objectset-green')) {\r\n\t\t\t\t\tel.classList.remove('objectset-green');\r\n\t\t\t\t\tel.classList.add('objectset-yellow')\r\n\t\t\t\t}\r\n\t\t\t\tconst elsel = document.querySelector('.sidebar-panel .contentbody-selected > table');\r\n\t\t\t\tconst elsave = document.querySelector('.objectsetmanager .objectset-save > button');\r\n\t\t\t\tconst elsaveas = document.querySelector('.objectsetmanager .objectset-saveas > button');\r\n\t\t\t\tif (elsel && elsave && elsaveas) {\r\n\t\t\t\t\tconst elseltr = elsel.querySelector('tr');\r\n\t\t\t\t\tif (elseltr) {\r\n\t\t\t\t\t\telsaveas.classList.remove('disabled')\r\n\t\t\t\t\t\tconst elseldel = el.querySelector('div.object.hide');\r\n\t\t\t\t\t\tif (!elseldel)\r\n\t\t\t\t\t\t\telsave.classList.remove('disabled')\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\telsave.classList.add('disabled')\r\n\t\t\t\t\t\telsaveas.classList.add('disabled')\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}\r\n\r\n\tfunction initMapHead(root) {\r\n\t\tconst map = [];\r\n\t\tconst ths = Object.values(root.querySelectorAll('tr > th'));\r\n\t\tif (ths) {\r\n\t\t\tvar idx = 0;\r\n\t\t\tvar curRow = 0;\r\n\t\t\tvar masterRowIdx = 0;\r\n\r\n\t\t\tfor (let i = 0; i < ths.length; i++) {\r\n\t\t\t\tconst th = ths[i];\r\n\r\n\t\t\t\tif (th.parentElement.rowIndex > curRow) {\r\n\t\t\t\t\tcurRow = th.parentElement.rowIndex;\r\n\t\t\t\t\tidx = 0;\r\n\t\t\t\t\tmasterRowIdx = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (th.parentElement.rowIndex == 0) {\r\n\t\t\t\t\tconst mapObj = { columns: [], ths: [] };\r\n\t\t\t\t\tfor (var j = idx; j < idx + th.colSpan; j++) {\r\n\t\t\t\t\t\tmapObj.columns.push(j);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmapObj.ths.push(th);\r\n\t\t\t\t\tmap.push(mapObj);\r\n\r\n\t\t\t\t\tidx += th.colSpan;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\twhile (map[masterRowIdx].ths[0].rowSpan > curRow) {\r\n\t\t\t\t\t\tmasterRowIdx++;\r\n\t\t\t\t\t\tidx = map[masterRowIdx].columns[0];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmap[masterRowIdx].ths.push(th);\r\n\r\n\t\t\t\t\tidx += th.colSpan;\r\n\r\n\t\t\t\t\twhile (map.length > masterRowIdx && map[masterRowIdx].columns[map[masterRowIdx].columns.length - 1] < idx) {\r\n\t\t\t\t\t\tmasterRowIdx++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn map;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initCheckBoxes(state, cblist) {\r\n\t\tfor (var i = 0; i < cblist.length; i++) {\r\n\t\t\tconst el = cblist[i];\r\n\t\t\tel.addEventListener('mousedown', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t});\r\n\t\t\tel.addEventListener('click', function (e) {\r\n\t\t\t\tconst curRow = { tr: cu.getRow(e.currentTarget), el: e.currentTarget };\r\n\t\t\t\tif (e.shiftKey) {\r\n\t\t\t\t\tconst actRow = document.activeElement;\r\n\t\t\t\t\tif (actRow.parentElement == curRow.tr.parentElement) {\r\n\t\t\t\t\t\tcbcell.selSelectedRange([curRow], onCheckChange);\r\n\r\n\t\t\t\t\t\tif (curRow.tr != actRow) {\r\n\t\t\t\t\t\t\tconst rows = [];\r\n\t\t\t\t\t\t\tvar tr = curRow.tr.rowIndex >= actRow.rowIndex ? actRow : curRow.tr.nextElementSibling;\r\n\t\t\t\t\t\t\tconst cnt = Math.abs(curRow.tr.rowIndex - actRow.rowIndex);\r\n\t\t\t\t\t\t\tfor (var j = 0; j < cnt; j++) {\r\n\t\t\t\t\t\t\t\tconst el = tr.querySelector('td.sel');\r\n\t\t\t\t\t\t\t\trows.push({ tr: tr, el: el, newState: curRow.newState });\r\n\t\t\t\t\t\t\t\ttr = tr.nextElementSibling;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcbcell.selSelectedRange(rows, onCheckChange);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst curel = e.currentTarget;\r\n\t\t\t\t\tcbcell.setselected(curel, onCheckChange);\r\n\t\t\t\t\tupdateSelected(curel);\r\n\r\n\t\t\t\t\tconst currow = cu.getRow(curel);\r\n\t\t\t\t\tconst level = parseInt(currow.getAttribute('data-level'));\r\n\t\t\t\t\tvar tr = currow.nextElementSibling;\r\n\t\t\t\t\tconst isChecked = currow.classList.contains('checked');\r\n\r\n\t\t\t\t\tconst hasStrategy = curel.hasAttribute('data-strategy');\r\n\t\t\t\t\tconst strategyName = hasStrategy ? curel.getAttribute('data-strategy') : undefined;\r\n\r\n\t\t\t\t\tfunction setChildrenState(r, l, all) {\r\n\t\t\t\t\t\ttr = r.nextElementSibling;\r\n\t\t\t\t\t\twhile (tr && ((!all && parseInt(tr.getAttribute('data-level')) == l + 1) ||\r\n\t\t\t\t\t\t\t(all && parseInt(tr.getAttribute('data-level')) >= l + 1))) {\r\n\t\t\t\t\t\t\tvar cb = tr.querySelector('.sel');\r\n\t\t\t\t\t\t\tif (cb) {\r\n\t\t\t\t\t\t\t\tif (isChecked)\r\n\t\t\t\t\t\t\t\t\tcbcell.setRowAndValueChecked(tr, cb, state);\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\tcbcell.setRowAndValueUnchecked(tr, cb, state);\r\n\t\t\t\t\t\t\t\tupdateSelected(cb);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (all && tr.hasAttribute('data-e') && !tr.hasAttribute('data-loaded')) {\r\n\t\t\t\t\t\t\t\tinstance.togglelevel(tr, setChildrenState, true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttr = tr.nextElementSibling;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction uncheckParent(r, l) {\r\n\t\t\t\t\t\ttr = r.previousElementSibling;\r\n\t\t\t\t\t\twhile (tr && parseInt(tr.getAttribute('data-level')) == l) {\r\n\t\t\t\t\t\t\ttr = tr.previousElementSibling;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (tr && !isChecked) {\r\n\t\t\t\t\t\t\tvar cb = tr.querySelector('.sel');\r\n\t\t\t\t\t\t\tif (cb && cb.hasAttribute('data-strategy') && (cb.getAttribute('data-strategy') == 'WithChildren' ||\r\n\t\t\t\t\t\t\t\tcb.getAttribute('data-strategy') == 'WithChildrenRecursive')) {\r\n\t\t\t\t\t\t\t\tcbcell.setRowAndValueUnchecked(tr, cb, state);\r\n\t\t\t\t\t\t\t\tupdateSelected(cb);\r\n\t\t\t\t\t\t\t\tuncheckParent(tr, l - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasStrategy && (strategyName == 'WithChildren' || strategyName == 'WithChildrenRecursive')) {\r\n\t\t\t\t\t\tif (currow.hasAttribute('data-e') && !currow.hasAttribute('data-loaded')) {\r\n\t\t\t\t\t\t\tinstance.togglelevel(curel, setChildrenState, strategyName == 'WithChildrenRecursive');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tsetChildrenState(currow, level, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tuncheckParent(currow, level);\r\n\t\t\t\t}\r\n\t\t\t\tcurRow.tr.focus();\r\n\t\t\t\tinstance.setObjectSetBackgroundColor(true);\r\n\t\t\t});\r\n\t\t\tel.classList.add('initialized');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initFixedHeader(el) {\r\n\t\tconst th = el.querySelector('th:not(.hide)');\r\n\t\tif (!th)\r\n\t\t\treturn;\r\n\t\tconst tableHeaderTop = th.getBoundingClientRect().top;\r\n\t\tif (tableHeaderTop === 0)\r\n\t\t\treturn;\r\n\t\tconst ths = el.querySelectorAll('th');\r\n\t\tfor (let i = 0; i < ths.length; i++) {\r\n\t\t\tconst th = ths[i];\r\n\t\t\tlet padding = window.getComputedStyle(th, null).getPropertyValue('padding-top');\r\n\t\t\tlet paddingParent = calculatePadding(th);\r\n\t\t\tif (paddingParent != null) {\r\n\t\t\t\tpadding = padding.replace(\"px\", \"\");\r\n\t\t\t\tpaddingParent = paddingParent.replace(\"px\", \"\");\r\n\t\t\t\tconst currentTop = th.getBoundingClientRect().top - tableHeaderTop;\r\n\t\t\t\tconst offsetTop = (((parseInt(padding) / 2) + parseInt(paddingParent)) * -1) + 2;\r\n\t\t\t\tth.style.top = offsetTop + currentTop + \"px\";\r\n\t\t\t} else {\r\n\t\t\t\tth.style.top = th.getBoundingClientRect().top - tableHeaderTop + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction calculatePadding(node) {\r\n\t\tnode = getScrollParent(node);\r\n\t\tif (node != null)\r\n\t\t\treturn window.getComputedStyle(node, null).getPropertyValue('padding-bottom');\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction getScrollParent(node) {\r\n\t\tconst isElement = node instanceof HTMLElement;\r\n\t\tconst overflowY = isElement && window.getComputedStyle(node).overflowY;\r\n\t\tconst isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\r\n\r\n\t\tif (!node) {\r\n\t\t\treturn null;\r\n\t\t} else if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n\t\t\treturn node;\r\n\t\t}\r\n\r\n\t\treturn getScrollParent(node.parentNode) || document.body;\r\n\t}\r\n\r\n\tfunction initHighlight(root) {\r\n\t\tconst highlightlist = root.querySelectorAll('*[data-highlight]:not(.initialized)');\r\n\r\n\t\tfor (var i = 0; i < highlightlist.length; i++) {\r\n\t\t\tconst el = highlightlist[i];\r\n\t\t\tel.addEventListener('click', function (e) {\r\n\t\t\t\tconst tr = cu.getRow(e.currentTarget);\r\n\t\t\t\tconst table = tr.parentNode.parentNode;\r\n\t\t\t\tconst selEl = table.querySelector('.treerow-content .selected');\r\n\t\t\t\tif (selEl) selEl.classList.remove('selected');\r\n\t\t\t\te.currentTarget.classList.add('selected');\r\n\t\t\t\ttable.setAttribute('data-highlighted', tr.getAttribute('data-rowid'));\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\t\t\tel.classList.add('initialized');\r\n\t\t}\r\n\r\n\t\t// obsolete\r\n\t\tconst currentSelected = root.getAttribute('data-highlighted');\r\n\t\tif (currentSelected) {\r\n\t\t\tconst selEl = root.querySelector(\"tr[data-rowid='\" + currentSelected + \"'] *[data-highlight]\");\r\n\t\t\tif (selEl) selEl.classList.add('selected');\r\n\t\t}\r\n\t\t/////\r\n\t\tconst currentSelectedid = root.getAttribute('data-highlightedid');\r\n\t\tif (currentSelectedid) {\r\n\t\t\tconst selEl = root.querySelector(\"#\" + currentSelectedid + \" *[data-highlight]\");\r\n\t\t\tif (selEl) selEl.classList.add('selected');\r\n\t\t}\r\n\r\n\t\tconst kb = root.classList.contains('kb');\r\n\t\tif (kb) {\r\n\t\t\tconst trlist = root.querySelectorAll('tr');\r\n\t\t\tfor (var i = 0; i < trlist.length; i++) {\r\n\t\t\t\tconst el = trlist[i];\r\n\r\n\t\t\t\tif (el.classList.contains('initialized'))\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tel.addEventListener('keydown', function (e) {\r\n\t\t\t\t\tvar cur = e.currentTarget;\r\n\r\n\t\t\t\t\tif (e.keyCode == 38) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tcur = cur.previousSibling;\r\n\t\t\t\t\t\twhile (cur && (cur.classList.contains('hide') || !cur.hasAttribute('tabindex')))\r\n\t\t\t\t\t\t\tcur = cur.previousSibling;\r\n\r\n\t\t\t\t\t\tif (cur) {\r\n\t\t\t\t\t\t\tcur.focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 40) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tcur = cur.nextSibling;\r\n\t\t\t\t\t\twhile (cur && (cur.classList.contains('hide') || !cur.hasAttribute('tabindex')))\r\n\t\t\t\t\t\t\tcur = cur.nextSibling;\r\n\r\n\t\t\t\t\t\tif (cur) {\r\n\t\t\t\t\t\t\tcur.focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 33) { //pgup\r\n\t\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t\tvar i = 0;\r\n\t\t\t\t\t\twhile (cur && cur.previousSibling && i < 20) {\r\n\t\t\t\t\t\t\tvar next = cur.previousSibling;\r\n\t\t\t\t\t\t\twhile (next && (next.classList.contains('hide') || !next.hasAttribute('tabindex'))) {\r\n\t\t\t\t\t\t\t\tnext = next.previousSibling;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif (next)\r\n\t\t\t\t\t\t\t\tcur = next;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (cur) {\r\n\t\t\t\t\t\t\tcur.focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 34) { //pgdn\r\n\t\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t\tvar i = 0;\r\n\t\t\t\t\t\twhile (cur && cur.nextSibling && i < 20) {\r\n\t\t\t\t\t\t\tvar next = cur.nextSibling;\r\n\t\t\t\t\t\t\twhile (next && (next.classList.contains('hide') || !next.hasAttribute('tabindex'))) {\r\n\t\t\t\t\t\t\t\tnext = next.nextSibling;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif (next)\r\n\t\t\t\t\t\t\t\tcur = next;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (cur) {\r\n\t\t\t\t\t\t\tcur.focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 37) { // left\r\n\t\t\t\t\t\tvar rowexpander = cur.querySelector('.rowexpandercell');\r\n\t\t\t\t\t\tif (rowexpander)\r\n\t\t\t\t\t\t\tinstance.togglerow(rowexpander);\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t// tree\r\n\t\t\t\t\t\t\tif (!cur.classList.contains('collapsed'))\r\n\t\t\t\t\t\t\t\tinstance.togglelevel(cur);\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tvar level = parseInt(cur.getAttribute('data-level'));\r\n\t\t\t\t\t\t\t\twhile (cur && parseInt(cur.getAttribute('data-level')) >= level) {\r\n\t\t\t\t\t\t\t\t\tcur = cur.previousSibling;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (cur && cur.hasAttribute('tabindex'))\r\n\t\t\t\t\t\t\t\t\tcur.focus();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 39) { // right\r\n\t\t\t\t\t\tif (cur.classList.contains('collapsed'))\r\n\t\t\t\t\t\t\t// tree\r\n\t\t\t\t\t\t\tinstance.togglelevel(cur);\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tvar rowexpander = cur.querySelector('.rowexpandercell');\r\n\t\t\t\t\t\t\tif (rowexpander) instance.togglerow(rowexpander);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (e.keyCode == 32) { //space\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tvar cb = cur.querySelector('.sel');\r\n\t\t\t\t\t\tif (cb) {\r\n\t\t\t\t\t\t\tcbcell.setselected(cb, onCheckChange);\r\n\t\t\t\t\t\t\tupdateSelected(cb);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.classList.add('initialized');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onCheckChange(document, root, state, keepInfoBlockState) {\r\n\t\tsetBulkOpsState(document, root, state);\r\n\t\tinitInfoBlock(document, root, state, keepInfoBlockState);\r\n\t}\r\n\r\n\tfunction setBulkOpsState(doc, root, state) {\r\n\t\tconst bulkops = doc.querySelectorAll('.bulkop');\r\n\t\tfor (var i = 0; i < bulkops.length; i++) {\r\n\t\t\tif (bulkops[i].getAttribute('data-owner') != root.id) continue;\r\n\t\t\tif (state.selectedvalues.length == 0) {\r\n\t\t\t\tbulkops[i].classList.add('hide');\r\n\t\t\t} else {\r\n\t\t\t\tbulkops[i].classList.remove('hide');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initInfoBlock(doc, root, state, keepBlockState) {\r\n\t\tconst trInfo = doc.getElementById(root.id + '_sel_info');\r\n\t\tif (trInfo) {\r\n\t\t\tif (state.selectedvalues.length > 0) {\r\n\t\t\t\tif (!keepBlockState) trInfo.style.display = '';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttrInfo.style.display = 'none';\r\n\t\t\t}\r\n\t\t\tif (trInfo.style.display == '') {\r\n\t\t\t\tconst elCnt = doc.getElementById(root.id + '_sel_info_cnt');\r\n\t\t\t\tconst elAll = doc.getElementById(root.id + '_sel_info_all');\r\n\t\t\t\tif (state.selectedvalues[0] != -1) {\r\n\t\t\t\t\telCnt.style.display = '';\r\n\t\t\t\t\telAll.style.display = 'none';\r\n\t\t\t\t\telCnt.innerHTML = state.selectedvalues.length;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\telCnt.style.display = 'none';\r\n\t\t\t\t\telAll.style.display = '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addDelIcon(el) {\r\n\t\tvar del = w.Icon('delete');\r\n\t\tel.appendChild(del);\r\n\t\tdel.addEventListener('click', instance.onRemoveIconClick);\r\n\t}\r\n\r\n\tfunction removeSelected(tocopy) {\r\n\t\tfor (var i = 0; i < tocopy.length; i++) {\r\n\t\t\tconst el = document.getElementById(tocopy[i].id);\r\n\t\t\tif (!el) continue;\r\n\t\t\tconst isLastLeaf = !el.nextElementSibling || parseInt(el.nextElementSibling.getAttribute('data-level')) <= parseInt(el.getAttribute('data-level'));\r\n\t\t\tconst clickedEl = i == 0;\r\n\t\t\tconst unchecked = clickedEl || !el.hasAttribute('data-checked');\r\n\t\t\tif (isLastLeaf && unchecked)\r\n\t\t\t\tel.parentElement.removeChild(el);\r\n\t\t\telse if (clickedEl) {\r\n\t\t\t\tel.removeAttribute('data-checked');\r\n\t\t\t\t//var del = el.querySelector('.icon-delete');\r\n\t\t\t\t//if (del) del.parentElement.removeChild(del);\r\n\t\t\t}\r\n\t\t\telse if (isLastLeaf && !unchecked) {\r\n\t\t\t\tvar arr = el.querySelector('.togglelevel > span');\r\n\t\t\t\tif (arr) arr.classList.add('hide');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateSelected(el) {\r\n\t\tvar tr = cu.getRow(el);\r\n\t\tconst root = au.findControl(el);\r\n\t\tconst rootsel = document.getElementById(root.id + '_selected');\r\n\t\tvar level = parseInt(tr.getAttribute('data-level'));\r\n\r\n\t\tconst remove = !tr.classList.contains('checked');\r\n\t\tvar tocopy = [];\r\n\t\tvar toinitmenu = [];\r\n\r\n\t\tvar i = 0;\r\n\t\twhile (tr) {\r\n\t\t\tif (parseInt(tr.getAttribute('data-level')) == level) {\r\n\t\t\t\tvar copyTr = tr.cloneNode(true);\r\n\t\t\t\tvar isChecked = false;\r\n\t\t\t\tcopyTr.id = copyTr.id + '_selected';\r\n\t\t\t\tif (copyTr.classList.contains('checked')) {\r\n\t\t\t\t\tcopyTr.classList.remove('checked');\r\n\t\t\t\t\tcopyTr.setAttribute('data-checked', '');\r\n\t\t\t\t\tisChecked = true;\r\n\t\t\t\t}\r\n\t\t\t\tcopyTr.removeAttribute('data-e');\r\n\r\n\t\t\t\tvar cb = copyTr.querySelector('.sel');\r\n\t\t\t\tif (cb) {\r\n\t\t\t\t\t//if (isChecked) addDelIcon(cb.parentElement);\r\n\t\t\t\t\tcb.parentNode.removeChild(cb);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar content = copyTr.querySelector('.treerow-content');\r\n\t\t\t\taddDelIcon(content);\r\n\r\n\t\t\t\tvar ddm = copyTr.querySelector('.dropdownimage');\r\n\t\t\t\tif (ddm) {\r\n\t\t\t\t\tvar menuData = null;\r\n\t\t\t\t\tif (au.state.ctrl['$contextmenu'])\r\n\t\t\t\t\t\tmenuData = au.state.ctrl['$contextmenu'][ddm.id];\r\n\t\t\t\t\tif (menuData) {\r\n\t\t\t\t\t\tddm.id = ddm.id + '_sel';\r\n\t\t\t\t\t\tddm.nextElementSibling.id = ddm.nextElementSibling.id + '_sel';\r\n\t\t\t\t\t\ttoinitmenu.push({\r\n\t\t\t\t\t\t\ttriggerid: ddm.id,\r\n\t\t\t\t\t\t\tpopupid: ddm.nextElementSibling.id,\r\n\t\t\t\t\t\t\tparms: menuData.parms\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tddm.parentNode.removeChild(ddm.nextElementSibling);\r\n\t\t\t\t\t\tddm.parentNode.removeChild(ddm);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (copyTr.classList.contains('collapsed') || i == 0) {\r\n\t\t\t\t\tvar arr = copyTr.querySelector('.togglelevel > span');\r\n\t\t\t\t\tif (arr) arr.classList.add('hide');\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttocopy.push(copyTr);\r\n\t\t\t\tlevel--;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t\ttr = tr.previousElementSibling;\r\n\t\t}\r\n\r\n\t\tif (remove) {\r\n\t\t\tremoveSelected(tocopy);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvar parent = rootsel;\r\n\t\t\tvar pos = 'beforeend';\r\n\t\t\tvar hide = false;\r\n\t\t\tvar collapsedby = '';\r\n\r\n\t\t\tfor (var i = tocopy.length - 1; i >= 0; i--) {\r\n\t\t\t\tconst el = document.getElementById(tocopy[i].id);\r\n\t\t\t\tif (!el) {\r\n\t\t\t\t\t/*if (hide) {\r\n\t\t\t\t\t\ttocopy[i].classList.add('hide');\r\n\t\t\t\t\t\ttocopy[i].setAttribute('data-collapsedby', collapsedby);\r\n\t\t\t\t\t}*/\r\n\t\t\t\t\tif (tocopy[i].classList.contains('hide')) {\r\n\t\t\t\t\t\ttocopy[i].classList.remove('hide');\r\n\t\t\t\t\t\ttocopy[i].removeAttribute('data-collapsedby');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst level = parseInt(tocopy[i].getAttribute('data-level'));\r\n\t\t\t\t\twhile (parent.nextElementSibling && parseInt(parent.nextElementSibling.getAttribute('data-level')) == level) {\r\n\t\t\t\t\t\tparent = parent.nextElementSibling;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (parent.nextElementSibling && parseInt(parent.nextElementSibling.getAttribute('data-level')) > level) {\r\n\t\t\t\t\t\tparent = parent.nextElementSibling;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparent.insertAdjacentElement(pos, tocopy[i]);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t/*if (el.classList.contains('hide')) {\r\n\t\t\t\t\t\thide = true;\r\n\t\t\t\t\t\tcollapsedby = el.getAttribute('data-collapsedby');\r\n\t\t\t\t\t}*/\r\n\t\t\t\t\tif (i == 0) {\r\n\t\t\t\t\t\tel.setAttribute('data-checked', '');\r\n\t\t\t\t\t\t//var content = el.querySelector('.treerow-content');\r\n\t\t\t\t\t\t//addDelIcon(content);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar arr = el.querySelector('.togglelevel > span');\r\n\t\t\t\t\tif (arr && arr.classList.contains('hide')) {\r\n\t\t\t\t\t\tarr.classList.remove('hide');\r\n\t\t\t\t\t\tel.classList.remove('collapsed');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparent = el ? el : tocopy[i];\r\n\t\t\t\tpos = 'afterend';\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = toinitmenu.length - 1; i >= 0; i--) {\r\n\t\t\t\tmenu.contextMenu(toinitmenu[i].triggerid, toinitmenu[i].popupid, toinitmenu[i].parms);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils, checkBoxCell, contextmenuproxy);\r\n\r\nwindow.sidebar = function () {\r\n\tvar instance = {\r\n\t\twidgetWillMount: function (shadow, state) {\r\n\t\t\tvar key = function (id) {\r\n\t\t\t\treturn (location.pathname + '/' + root.id + '/collapsed').toLowerCase();\r\n\t\t\t}\r\n\r\n\t\t\tvar handler = function (e) {\r\n\t\t\t\tconst root = document.getElementById(state.root);\r\n\r\n\t\t\t\tif (root.classList.contains('collapsed')) {\r\n\t\t\t\t\troot.classList.remove('collapsed');\r\n\t\t\t\t\tlocalStorage.removeItem(key(root.id));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\troot.classList.add('collapsed');\r\n\t\t\t\t\tlocalStorage.setItem(key(root.id), '1');\r\n\t\t\t\t\tif (root.nextElementSibling && root.nextElementSibling.classList.contains('collapsed')) {\r\n\t\t\t\t\t\troot.nextElementSibling.classList.remove('collapsed');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (root.previousElementSibling && root.previousElementSibling.classList.contains('collapsed')) {\r\n\t\t\t\t\t\troot.previousElementSibling.classList.remove('collapsed');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst root = shadow.getElementById(state.root);\r\n\t\t\tvar val = localStorage.getItem(key(root.id));\r\n\t\t\tif (val == '1') root.classList.add('collapsed');\r\n\r\n\t\t\tvar btn = root.getElementsByClassName('sidebar-close')[0];\r\n\t\t\tvar menu = root.getElementsByClassName('sidebar-menu')[0];\r\n\t\t\tbtn.addEventListener('click', handler);\r\n\t\t\tmenu.addEventListener('click', handler);\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}();\r\n\r\nwindow.filterHelper = function (da) {\r\n\tvar instance = {\r\n\t\tsetValue: function (args) {\r\n\t\t\tconst last = sessionStorage.getItem(args.id);\r\n\t\t\tif (last != '[]')\r\n\t\t\t\tsessionStorage.setItem(args.id + '_last', last);\r\n\t\t\tda.setStorageArg(args.id, args.val);\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}(domActions);\r\n\r\n","window.selectSingleObjectDialog = function (au, cu) {\r\n\tvar instance = {\r\n\t\tclear: function (id, clear) {\r\n\t\t\tdocument.getElementById(id).value = '';\r\n\t\t\tif (clear) {\r\n\t\t\t\tconst field = document.getElementById(id + '_selected');\r\n\t\t\t\tif (field) field.innerHTML = '';\r\n\t\t\t}\r\n\t\t\tconst state = au.state.ctrl[id + '_str'];\r\n\t\t\tif (state) state.selectedvalue = '';\r\n\t\t},\r\n\t\twidgetWillMount: function (shadow, state) {\r\n\t\t\tconst root = shadow.getElementById(state.root);\r\n\r\n\t\t\tconst checks = root.getElementsByTagName('input');\r\n\t\t\tfor (var i = 0; i < checks.length; i++) {\r\n\t\t\t\tconst el = checks[i];\r\n\t\t\t\tel.checked = state.selectedvalue == el.value;\r\n\t\t\t\tel.addEventListener(\"change\", function () {\r\n\t\t\t\t\tstate.selectedvalue = el.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst filter = (shadow.getElementById(root.id + '_filter') || document.getElementById(root.id + '_filter'));\r\n\r\n\t\t\tfilter.addEventListener('keyup', function () {\r\n\t\t\t\tau.delay(filter, function (caller) {\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(caller, { e: 'renderlist', r: root.id });\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tcu.setFocus(filter);\r\n\t\t},\r\n\t\tonResult: function (res, state) {\r\n\t\t\tif (res == 0)\r\n\t\t\t\tstate.selectedvalue = '';\r\n\t\t},\r\n\t\tpagingEvent: function (caller, id) {\r\n\t\t\tau.runEventFromElementWithApiResponse(caller, { e: 'renderlist', r: id }).done(function () {\r\n\t\t\t\tinstance.setupItems(caller, id);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils);\r\n\r\nwindow.selectMultipleObjectsDialog = function (au, cu) {\r\n\tvar instance = {\r\n\t\tclear: function (id, clear) {\r\n\t\t\tdocument.getElementById(id).value = '';\r\n\t\t\tif (clear) {\r\n\t\t\t\tconst field = document.getElementById(id + '_selected');\r\n\t\t\t\tif (field) field.innerHTML = '';\r\n\t\t\t}\r\n\t\t\tconst state = au.state.ctrl[id + '_str'];\r\n\t\t\tif (state) state.selectedvalues.splice(0, state.selectedvalues.length);\r\n\t\t},\r\n\t\twidgetDidMount: function (state) {\r\n\t\t\tconst root = document.getElementById(state.root);\r\n\r\n\t\t\tif (!state.dialogvalues) state.dialogvalues = state.selectedvalues.slice();\r\n\r\n\t\t\tconst checks = root.getElementsByTagName('input');\r\n\t\t\tfor (var i = 0; i < checks.length; i++) {\r\n\t\t\t\tconst el = checks[i];\r\n\t\t\t\tel.checked = state.dialogvalues.indexOf(el.value) >= 0;\r\n\t\t\t\tel.addEventListener(\"change\", function () {\r\n\t\t\t\t\tif (el.checked) {\r\n\t\t\t\t\t\tstate.dialogvalues.push(el.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tconst index = state.dialogvalues.indexOf(el.value);\r\n\t\t\t\t\t\tstate.dialogvalues.splice(index, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst filter = document.getElementById(root.id + '_filter');\r\n\r\n\t\t\tfilter.addEventListener('keyup', function () {\r\n\t\t\t\tau.delay(filter, function (caller) {\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(caller, { e: 'renderlist', r: root.id });\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tcu.setFocus(filter);\r\n\t\t},\r\n\t\tonResult: function (res, state) {\r\n\t\t\tif (res == 1) {\r\n\t\t\t\tstate.selectedvalues.splice(0, state.selectedvalues.length);\r\n\t\t\t\tfor (var i = 0; i < state.dialogvalues.length; i++) {\r\n\t\t\t\t\tstate.selectedvalues.push(state.dialogvalues[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tdelete state.dialogvalues;\r\n\t\t},\r\n\t\tpagingEvent: function (caller, id) {\r\n\t\t\tau.postEventFromElementWithApiResponse(caller, { e: 'renderlist', r: id }).done(function () {\r\n\t\t\t\tinstance.setupItems(caller, id);\r\n\t\t\t});\r\n\t\t},\r\n\t\tselectAll: function(id) {\r\n\t\t\tconst container = document.querySelector(\"#\" + id);\r\n\t\t\tconst checkBoxes = container.getElementsByTagName('input');\r\n\t\t\tconst state = au.state.ctrl[id];\r\n\r\n\t\t\tif (!state.dialogvalues) state.dialogvalues = state.selectedvalues.slice();\r\n\t\t\tcheckBoxes.forEach(function(element) {\r\n\t\t\t\telement.checked = true;\r\n\t\t\t\tif (!state.dialogvalues.includes(element.value)) {\r\n\t\t\t\t\tstate.dialogvalues.push(element.value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n },\r\n selectNone: function (id) {\r\n const container = document.querySelector(\"#\" + id);\r\n const checkBoxes = container.getElementsByTagName('input');\r\n const state = au.state.ctrl[id];\r\n\r\n if (!state.dialogvalues) state.dialogvalues = state.selectedvalues.slice();\r\n checkBoxes.forEach(function (element) {\r\n element.checked = false;\r\n });\r\n\r\n state.dialogvalues.splice(0, state.dialogvalues.length);\r\n\t\t\t//this.clear(id.replace(\"_str\", \"\"), true);\r\n }\r\n\t}\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils);\r\n\r\nwindow.selectObjectDropDownField = function (au, cu, cbcell) {\r\n\tvar instance = {\r\n\t\twidgetDidMount: function (state) {\r\n\t\t\tconst id = state.root;\r\n\t\t\tconst elPh = document.getElementById(id + '_placeholder');\r\n\t\t\tconst elFilter = document.getElementById(id + '_filter');\t\t\t\r\n\t\t\tconst elPopup = document.getElementById(id + '_popup');\r\n\r\n\t\t\tconst opt = {\r\n\t\t\t\ttriggerOn: 'keyup paste',\r\n\t\t\t\tdisplayAround: 'triggerbottom',\r\n\t\t\t\tdelayedTrigger: true,\r\n\t\t\t\tonOpen: function (data, event) {\r\n\t\t\t\t\treturn au.postEventFromElementWithApiResponse(data.menu[0]);\r\n\t\t\t\t},\r\n\t\t\t\tonClose: function (trigger, menu) {\r\n\t\t\t\t\telFilter.value = '';\r\n\t\t\t\t},\r\n\t\t\t\tcloseOnClick: true,\r\n\t\t\t\tcloseOnClickSelector: function (el) {\r\n\t\t\t\t\treturn el.hasAttribute('data-res-postponed') && el.getAttribute('data-res-postponed') == '1';\r\n\t\t\t\t},\r\n\t\t\t\tbaseTrigger: $('#' + id + '_placeholder'),\r\n\t\t\t\tbeforeDisplay: function (data, event) {\r\n\t\t\t\t\treturn data.menu.text() == '' ? 0 : 1;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\topt.beforeOpen = function (data, event) {\r\n\t\t\t\tif (event.type == 'click') return 0;\r\n\t\t\t\tif (elPh.hasAttribute('data-disabled')) return 2;\r\n\t\t\t\telse if (event.type == 'paste') {\r\n\t\t\t\t\tvar data = event.originalEvent.clipboardData\r\n\t\t\t\t\tif (!data) data = window.clipboardData;\r\n\t\t\t\t\telFilter.value = data.getData('Text');\r\n\t\t\t\t\tadjustInputWidth(elFilter);\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\tvar v = data.trigger.val();\r\n\t\t\t\tconst sso = elPopup.querySelector('.radiobuttonlist') != null;\r\n\t\t\t\tif (event.keyCode == 8) return v == '' ? 1 : 0;\r\n\t\t\t\tif (event.keyCode == 27 || (event.keyCode == 13 && sso)) return 1;\r\n\t\t\t\tif (event.keyCode == 33 || event.keyCode == 34 || event.keyCode == 37 ||\r\n\t\t\t\t\tevent.keyCode == 38 || event.keyCode == 39 || (event.keyCode == 13 && !sso)) return 2;\r\n\t\t\t\tif (event.keyCode == 40) return elPh.classList.contains('iw-opened') ? 2 : 0;\r\n\t\t\t\tif (v == '') return 1;\r\n\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\t$('#' + id + '_filter').contextMenu('#' + id + '_popup', opt);\r\n\t\t\topt.triggerOn = 'click';\r\n\t\t\t$('#' + id + '_btn').contextMenu('#' + id + '_popup', opt);\r\n\r\n\t\t\telPh.addEventListener('click', function (e) {\r\n\t\t\t\tconst elSel = document.getElementById(id + '_selected');\r\n\t\t\t\tif (e.target.id != elSel.id && !e.target.closest('.selected')) elFilter.focus();\r\n\t\t\t});\r\n\r\n\t\t\telFilter.addEventListener('click', function (e) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\telFilter.addEventListener('keydown', function (e) {\r\n\t\t\t\t\tconst elSel = document.getElementById(id + '_selected');\r\n\t\t\t\t\tconst isSingleMode = state && state.hasOwnProperty('selectedvalue');\r\n\r\n\t\t\t\t\tif (e.keyCode == 8 && elFilter.value == '' && !elFilter.hasAttribute('readonly')) {\r\n\t\t\t\t\t\tinstance.clear(elSel.lastChild);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (elPh.classList.contains('iw-opened')) {\r\n\t\t\t\t\t\tvar cur = elPopup.querySelector('.row.selected');\r\n\t\t\t\t\t\tif (!cur) cur = elPopup.querySelector('.row');\r\n\r\n\t\t\t\t\t\tif (e.keyCode == 38) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tif (cur && cur.previousSibling && cur.previousSibling.classList.contains('row')) {\r\n\t\t\t\t\t\t\t\tcur.classList.remove('selected');\r\n\t\t\t\t\t\t\t\tcur.previousSibling.classList.add('selected');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (e.keyCode == 40) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tif (cur && cur.nextSibling && cur.nextSibling.classList.contains('row')) {\r\n\t\t\t\t\t\t\t\tcur.classList.remove('selected');\r\n\t\t\t\t\t\t\t\tcur.nextSibling.classList.add('selected');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (e.keyCode == 33) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tvar pg = elPopup.querySelector('#' + id + '_str_pgup');\r\n\t\t\t\t\t\t\tif (pg) au.postEventFromElementWithApiResponse(pg);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (e.keyCode == 34) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tvar pg = elPopup.querySelector('#' + id + '_str_pgdown');\r\n\t\t\t\t\t\t\tif (pg) au.postEventFromElementWithApiResponse(pg);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (e.keyCode == 13) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tif (isSingleMode) {\r\n\t\t\t\t\t\t\t\tcur.firstChild.checked = true;\r\n\t\t\t\t\t\t\t\tstate.selectedvalue = cur.firstChild.value;\r\n\t\t\t\t\t\t\t\tinstance.setselected_singlemode(elPh, cur);\r\n\t\t\t\t\t\t\t\tif (cur.firstChild.onchange) cur.firstChild.onchange();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tinstance.setselected(elPh, cur);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telFilter.value = '';\r\n\t\t\t\t\t\t\tadjustInputWidth(elFilter);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\telFilter.addEventListener('input', function () {\r\n\t\t\t\tadjustInputWidth(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclear: function (el) {\r\n\t\t\tif (!el) return;\r\n\r\n\t\t\tconst field = cu.getThisOrParent(el, function (n) { return n.classList.contains('selected'); });\r\n\t\t\tif (!field) return;\r\n\t\t\tif (field.classList.contains('hide')) return;\r\n\t\t\tif (!field.classList.contains('object')) return;\r\n\r\n\t\t\tconst rowid = field.getAttribute('data-rowid');\r\n\t\t\tconst c = au.findControl(field);\r\n\t\t\tconst cins = c.instance;\r\n\t\t\tconst isSingleMode = cins && cins.hasOwnProperty('selectedvalue');\r\n\r\n\t\t\tdocument.getElementById(c.id).value = '';\r\n\r\n\t\t\tconst container = field.parentElement;\r\n\r\n\t\t\tif (isSingleMode) {\r\n\t\t\t\tfield.firstChild.innerText = '';\r\n\t\t\t\tif (!field.classList.contains('hide'))\r\n\t\t\t\t\tfield.classList.add('hide');\r\n\t\t\t\tcins.selectedvalue = '';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tfield.parentElement.removeChild(field);\r\n\t\t\t\tconst index = cins.selectedvalues.indexOf(rowid);\r\n\t\t\t\tif (index > -1) {\r\n\t\t\t\t\tcins.selectedvalues.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst selectedCnt = container.querySelectorAll('.selected.object:not(.hide)').length;\r\n\t\t\tif (selectedCnt == 0) {\r\n\t\t\t\tconst empty = container.querySelector('.nothingselectedtext');\r\n\t\t\t\tif (empty) empty.classList.remove('hide');\r\n\t\t\t}\r\n\r\n\t\t\tif (!el.classList.contains('close')) {\r\n\t\t\t\tconst elclose = el.querySelector('.close');\r\n\t\t\t\tif (elclose && elclose.hasAttribute('data-e'))\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(elclose);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\tif (el.hasAttribute('data-e'))\r\n\t\t\t\tau.postEventFromElementWithApiResponse(el);\r\n\t\t},\r\n\t\tsetselected: function (elPh, elSel) {\r\n\t\t\tcbcell.setselected(elSel);\r\n\r\n\t\t\tconst cont = elPh.querySelector('.selectedcontainer');\r\n\t\t\tconst rowid = elSel.getAttribute('data-rowid');\r\n\t\t\tconst existing = cont.querySelector('[data-rowid=\"' + rowid + '\"]');\r\n\r\n\t\t\tif (elSel.classList.contains('checked')) {\r\n\t\t\t\tif (!existing) {\r\n\t\t\t\t\tconst textel = elSel.querySelector('.text');\r\n\t\t\t\t\tconst template = elPh.querySelector('.template');\r\n\t\t\t\t\tconst div = template.cloneNode(true);\r\n\t\t\t\t\tdiv.className = \"selected object\";\r\n\t\t\t\t\tdiv.setAttribute('data-rowid', rowid);\r\n\t\t\t\t\tdiv.firstChild.innerHTML = textel.innerHTML;\r\n\t\t\t\t\tcont.appendChild(div);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\texisting.parentElement.removeChild(existing);\r\n\t\t\t}\r\n\r\n\t\t\tconst empty = cont.querySelector('.nothingselectedtext');\r\n\t\t\tif (empty) {\r\n\t\t\t\tconst selectedCnt = cont.querySelectorAll('.selected.object:not(.hide)').length;\r\n\t\t\t\tif (selectedCnt == 0) {\r\n\t\t\t\t\tempty.classList.remove('hide');\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tempty.classList.add('hide');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetselected_singlemode: function (elPh, elSel) {\r\n\t\t\tconst selected = elPh.querySelector('.selected.object');\r\n\t\t\tselected.classList.remove('hide');\r\n\t\t\tselected.firstChild.innerText = elSel.innerText;\r\n\r\n\t\t\tconst empty = elPh.querySelector('.nothingselectedtext');\r\n\t\t\tif (empty) empty.classList.add('hide');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction adjustInputWidth(el) {\r\n\t\tvar spanElm = el.nextElementSibling;\r\n\t\tspanElm.textContent = el.value; // the hidden span takes the value of the input; \r\n\t\tvar w = spanElm.offsetWidth + 15;\r\n\t\tif (w < 25) w = 25;\r\n\t\tconst maxWidth = el.parentElement.offsetWidth - 26 - 2;\r\n\t\tif (w > maxWidth) w = maxWidth;\r\n\t\tel.style.width = w + 'px'; // apply width of the span to the input\r\n\t}\r\n\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils, checkBoxCell);\r\n\r\nwindow.selectObjectDropDown = function (au, cu, cbcell, field) {\r\n\tvar instance = {\t\r\n\t\twidgetWillMount: function (shadow, state) {\r\n\t\t\tconst root = shadow.getElementById(state.root + '_str');\r\n\t\t\tconst isSingleMode = state && state.hasOwnProperty('selectedvalue');\r\n\r\n\t\t\tconst rows = root.querySelectorAll('.row');\r\n\t\t\tfor (var i = 0; i < rows.length; i++) {\r\n\t\t\t\tconst el = rows[i];\r\n\r\n\t\t\t\tif (isSingleMode) {\r\n\t\t\t\t\tel.addEventListener('mousedown', function (e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tconst input = el.querySelector('input');\r\n\t\t\t\t\t\tstate.selectedvalue = input.value;\r\n\t\t\t\t\t\tconst elPh = document.getElementById(state.root + '_placeholder');\r\n\t\t\t\t\t\tfield.setselected_singlemode(elPh, el);\r\n\t\t\t\t\t\tinstance.onResult(1, state);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst rowid = el.getAttribute('data-rowid');\r\n\t\t\t\t\tif (state.selectedvalues.indexOf(rowid) >= 0)\r\n\t\t\t\t\t\tcbcell.setselected(el);\r\n\r\n\t\t\t\t\tel.addEventListener('mousedown', function (e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tconst elPh = document.getElementById(state.root + '_placeholder');\r\n\t\t\t\t\t\tfield.setselected(elPh, el);\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\twidgetDidMount: function (state) {\r\n\t\t\tconst elPopup = document.getElementById(state.root + '_popup');\r\n\t\t\tconst rows = elPopup.querySelectorAll('.row');\r\n\t\t\tif (rows.length > 0) rows[0].classList.add('selected');\r\n\r\n\t\t\tfor (var i = 0; i < rows.length; i++) {\r\n\t\t\t\tconst el = rows[i];\r\n\t\t\t\tel.addEventListener('mousemove', function (e) {\r\n\t\t\t\t\tconst cur = elPopup.querySelector('.row.selected');\r\n\t\t\t\t\tif (cur == e.currentTarget) return;\r\n\t\t\t\t\tif (cur) cur.classList.remove('selected');\r\n\t\t\t\t\te.currentTarget.classList.add('selected');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst elFilter = document.getElementById(state.root + '_filter');\r\n\t\t\telFilter.focus();\r\n\t\t},\r\n\t\tonResult: function (res, state) {\r\n\t\t\tif (res == 0)\r\n\t\t\t\tstate.selectedvalue = '';\r\n\t\t\telse if (res == 1) {\r\n\t\t\t\tconst elFilter = document.getElementById(state.root + '_filter');\r\n\t\t\t\telFilter.value = '';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}(ajaxUtils, commonUtils, checkBoxCell, selectObjectDropDownField);\r\n\r\n","window.tabs = function (au) {\r\n\tvar instance = {\r\n\t\tonselect: function (el) {\r\n const isBack = !el.nodeType;\r\n\t\t\tif (isBack) el = document.getElementById(el);\r\n\t\t\tvar input = document.getElementById(el.htmlFor);\r\n\t\t\tif (input && input.disabled) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst tabs = el.parentNode.parentNode.parentNode;\r\n\t\t\tconst headers = Array.from(el.parentNode.parentNode.children).filter(x => x.classList.contains('tablink'));\r\n\t\t\tconst index = [].indexOf.call(headers, el.parentNode);\r\n\t\t\tconst pages = document.getElementById(tabs.id + '_pages').children;\r\n\t\t\tfor (i = 0; i < pages.length; i++) {\r\n\t\t\t\tpages[i].className = i == index ? 'selected' : '';\r\n\t\t\t}\r\n\t\t\tif (isBack)\r\n\t\t\t\tel.previousSibling.checked = true;\r\n\r\n\t\t\tif (el.getAttribute('data-useurlparm') == \"True\") {\r\n\t\t\t\tconst ctrlid = tabs.getAttribute('data-parmname').toLowerCase();\r\n\t\t\t\tvar target = {};\r\n\t\t\t\ttarget = { e: \"OnPageSelect\", r: tabs.id, query: {} };\r\n\t\t\t\ttarget.query[ctrlid] = el.getAttribute('data-id');\r\n\t\t\t\ttarget.url = au.findServiceAction(el);\r\n\t\t\t\ttarget.onBack = { service: \"tabs\", callChain: [{ method: \"onselect\", args: el.id }] };\r\n\t\t\t\t//if (!isBack) target.changeloc = true;\r\n\r\n\t\t\t\tif (el.getAttribute('data-ajax') == \"True\" && el.getAttribute('data-loaded') != \"True\") {\r\n\t\t\t\t\tel.setAttribute('data-loaded', 'True');\r\n\t\t\t\t\t//au.runEventFromElementWithApiResponse(el, target);\r\n\r\n\t\t\t\t\tchangeUrl(target, ctrlid);\r\n\t\t\t\t\t\r\n\t\t\t\t\tau.postEventFromElementWithApiResponse(el, target);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!isBack) {\r\n\t\t\t\t\tchangeUrl(target, ctrlid);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfunction changeUrl(target, ctrlid) {\r\n\t\t\t\tvar args = {\r\n\t\t\t\t\tremove: [ctrlid],\r\n\t\t\t\t\tadd: {}\r\n\t\t\t\t};\r\n\t\t\t\targs.add[ctrlid] = target.query[ctrlid];\r\n\t\t\t\tau.changeUrl(args);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\treturn instance;\r\n}(ajaxUtils);","window.commonUtils = function () {\r\n\tvar instance = {\r\n\t\tgetParams: function (query, raw) {\r\n\t\t\tvar p = {};\r\n\t\t\tvar e,\r\n\t\t\t\ta = /\\+/g, // Regex for replacing addition symbol with a space\r\n\t\t\t\tr = /([^&;=]+)=?([^&;]*)/g,\r\n\t\t\t\td = function (s) {\r\n\t\t\t\t\tconst parm = s.replace(a, \" \");\r\n\t\t\t\t\treturn raw ? parm : decodeURIComponent(parm);\r\n\t\t\t\t},\r\n\t\t\t\tq = query;\r\n\r\n\t\t\twhile (e = r.exec(q))\r\n\t\t\t\tp[d(e[1])] = d(e[2]);\r\n\r\n\t\t\treturn p;\r\n\t\t},\r\n\t\tdefaultFor: function (arg, val) { return typeof arg !== 'undefined' ? arg : val; },\r\n\t\tsetFocus: function (el) {\r\n\t\t\tel.focus();\r\n\t\t\tif (el.value) {\r\n\t\t\t\tvar strLength = el.value.length * 2;\r\n\t\t\t\tel.setSelectionRange(strLength, strLength);\r\n\t\t\t}\r\n\t\t},\r\n\t\tselectedOptionHints: function (args) {\r\n\t\t\tconst el = document.getElementById(args.id)\r\n\t\t\tif (el) {\r\n\t\t\t\tconst onChange = function (e) {\r\n\t\t\t\t\tvar select = e.target ?? e;\r\n\t\t\t\t\tvar o = select.options[select.selectedIndex];\r\n\t\t\t\t\tselect.setAttribute('title', o?.textContent);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tel.addEventListener('change', onChange);\r\n\t\t\t\tonChange(el);\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreateGuid: function () {\r\n\t\t\treturn ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\r\n\t\t\t\t(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\r\n\t\t\t);\r\n\t\t},\r\n\t\tgetScrollParent: function (element, includeHidden) {\r\n\t\t\tvar style = getComputedStyle(element);\r\n\t\t\tvar excludeStaticParent = style.position === \"absolute\";\r\n\t\t\tvar overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;\r\n\r\n\t\t\tif (style.position === \"fixed\") return document.body;\r\n\t\t\tfor (var parent = element; (parent = parent.parentElement);) {\r\n\t\t\t\tstyle = getComputedStyle(parent);\r\n\t\t\t\tif (excludeStaticParent && style.position === \"static\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\r\n\t\t\t}\r\n\r\n\t\t\treturn document.body;\r\n\t\t},\r\n\t\tscrollToView: function (element) {\r\n\t\t\tif (!element || !element.getBoundingClientRect) return;\r\n\t\t\tvar r = element.getBoundingClientRect();\r\n\t\t\tif (r.bottom > window.innerHeight) {\r\n\t\t\t\tvar scrl = instance.getScrollParent(element);\r\n\t\t\t\tif (scrl) {\r\n\t\t\t\t\tscrl.scrollTop += r.bottom - window.innerHeight + 16;\r\n\t\t\t\t\tvar dy = element.getBoundingClientRect().y - scrl.getClientRects()[0].y;\r\n\t\t\t\t\tif (dy < 0)\r\n\t\t\t\t\t\tscrl.scrollTop += dy;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\twindow.scrollBy(0, r.bottom - window.innerHeight + 16);\r\n\t\t\t}\r\n\t\t},\r\n\t\tcheckids: function () {\r\n\t\t\tvar elms = document.getElementsByTagName(\"*\"), i, len, ids = {}, id;\r\n\t\t\tfor (i = 0, len = elms.length; i < len; i += 1) {\r\n\t\t\t\tid = elms[i].id || null;\r\n\t\t\t\tif (id) {\r\n\t\t\t\t\tids[id] = ids.hasOwnProperty(id) ? ids[id] += 1 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (id in ids) {\r\n\t\t\t\tif (ids.hasOwnProperty(id)) {\r\n\t\t\t\t\tif (ids[id]) {\r\n\t\t\t\t\t\tconsole.warn(\"Multiple IDs #\" + id);\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\tgetThisOrParent: function (caller, predicate) {\r\n\t\t\tvar el = caller;\r\n\t\t\twhile (el) {\r\n\t\t\t\tif (predicate(el)) return el;\r\n\t\t\t\tel = el.parentNode;\r\n\t\t\t\tif (el instanceof HTMLBodyElement) return;\r\n\t\t\t\tif (el instanceof HTMLDocument) return;\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetParent: function (caller, predicate) {\r\n\t\t\tif (!caller.parentNode) return;\r\n\t\t\treturn instance.getThisOrParent(caller.parentNode, predicate);\r\n\t\t},\r\n\t\tgetRow: function (caller) {\r\n\t\t\treturn instance.getThisOrParent(caller, function (el) { return el instanceof HTMLTableRowElement; });\r\n\t\t},\r\n\t\tgetCell: function (caller) {\r\n\t\t\treturn instance.getThisOrParent(caller, function (el) { return el instanceof HTMLTableCellElement; });\r\n\t\t},\r\n\t\tprocessFile: function (contenttype, disposition, data) {\r\n\t\t\tvar filename = \"\";\r\n\t\t\tvar filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n\t\t\tvar matches = filenameRegex.exec(disposition);\r\n\t\t\tif (matches != null && matches[1]) filename = matches[1].replace(/['\"]/g, '');\r\n\t\t\tfilename = decodeURIComponent(filename);\r\n\r\n\t\t\tvar blob = typeof File === 'function'\r\n\t\t\t\t? new File([data], filename, { type: contenttype })\r\n\t\t\t\t: new Blob([data], { type: contenttype });\r\n\r\n\t\t\tif (typeof window.navigator.msSaveOrOpenBlob !== 'undefined') {\r\n\t\t\t\t// IE workaround for \"HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.\"\r\n\t\t\t\twindow.navigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t} else {\r\n\t\t\t\tvar URL = window.URL || window.webkitURL;\r\n\t\t\t\tvar downloadUrl = URL.createObjectURL(blob);\r\n\r\n\t\t\t\tif (filename) {\r\n\t\t\t\t\t// use HTML5 a[download] attribute to specify filename\r\n\t\t\t\t\tvar a = document.createElement(\"a\");\r\n\t\t\t\t\t// safari doesn't support this yet\r\n\t\t\t\t\tif (typeof a.download === 'undefined') {\r\n\t\t\t\t\t\twindow.location = downloadUrl;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ta.href = downloadUrl;\r\n\t\t\t\t\t\ta.download = filename;\r\n\t\t\t\t\t\tdocument.body.appendChild(a);\r\n\t\t\t\t\t\ta.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.location = downloadUrl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup\r\n\t\t\t}\r\n\t\t},\r\n\t\tprocessElementValue: function (el, setvalfunc) {\r\n\t\t\tif (!el) return;\r\n\r\n\t\t\tvar parmname = null;\r\n\t\t\tif (el.name)\r\n\t\t\t\tparmname = el.name;\r\n\t\t\telse if (el.hasAttribute('data-name'))\r\n\t\t\t\tparmname = el.getAttribute('data-name');\r\n\r\n\t\t\tif (parmname) {\r\n\t\t\t\tvar val = null;\r\n\r\n\t\t\t\tif (el.name !== undefined && el.type == 'checkbox' && !el.hasAttribute('disabled')) {\r\n\t\t\t\t\tval = el.checked;\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.name != undefined && el.type == 'radio') {\r\n\t\t\t\t\tif (el.checked)\r\n\t\t\t\t\t\tval = el.value;\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.name !== undefined && el.type == 'select-multiple' && !el.hasAttribute('disabled')) {\r\n\t\t\t\t\tparmname = parmname.replace('[]', '');\r\n\t\t\t\t\tvar result = [];\r\n\t\t\t\t\tfor (var i = 0, iLen = el.options.length; i < iLen; i++) {\r\n\t\t\t\t\t\tconst opt = el.options[i];\r\n\t\t\t\t\t\tif (opt.selected) {\r\n\t\t\t\t\t\t\tresult.push(opt.value || opt.text);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = result.join(',');\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.name !== undefined && el.type == \"file\" && el.closest(\"form\") !== undefined) {\r\n\t\t\t\t\tval = new FormData(el.closest(\"form\")).get(el.name);\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.name !== undefined && el.value !== undefined && !el.hasAttribute('disabled')) {\r\n\t\t\t\t\tval = el.value;\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.isContentEditable) {\r\n\t\t\t\t\tval = el.innerText;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (val !== undefined && val != null) {\r\n\t\t\t\t\tsetvalfunc(parmname, val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (el.children) {\r\n\t\t\t\tfor (var i = 0; i < el.children.length; i++) {\r\n\t\t\t\t\tinstance.processElementValue(el.children[i], setvalfunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetParentOffset: function (element) {\r\n\t\t\tvar offset = { top: 0, left: 0 };\r\n\t\t\twhile (element && getComputedStyle(element).getPropertyValue('position') != 'fixed'\r\n\t\t\t\t&& getComputedStyle(element).getPropertyValue('container') == 'none') {\r\n\t\t\t\telement = element.offsetParent;\r\n\t\t\t}\r\n\t\t\tif (element) {\r\n\t\t\t\toffset.top = element.offsetTop;\r\n\t\t\t\toffset.left = element.offsetLeft;\r\n\t\t\t}\r\n\t\t\treturn offset;\r\n\t\t},\r\n\t\tcopyToClipboard: function (sourceId) {\r\n\t\t\tvar source = document.querySelector('#' + sourceId);\r\n\t\t\tif (source) {\r\n\t\t\t\tvar dummy = document.createElement(\"textarea\");\r\n\t\t\t\tdocument.body.appendChild(dummy);\r\n\t\t\t\tdummy.value = source.value;\r\n\t\t\t\tdummy.select();\r\n\t\t\t\tdocument.execCommand(\"copy\");\r\n\t\t\t\tdocument.body.removeChild(dummy);\r\n\t\t\t}\r\n\t\t},\r\n\t\tcopyTextToClipboard: function (str) {\r\n\t\t\tvar dummy = document.createElement(\"textarea\");\r\n\t\t\tdocument.body.appendChild(dummy);\r\n\t\t\tdummy.value = str;\r\n\t\t\tdummy.select();\r\n\t\t\tdocument.execCommand(\"copy\");\r\n\t\t\tdocument.body.removeChild(dummy);\r\n\t\t},\r\n\t\tclipboardToElementIdAndSubmit: function (id, submitter) {\r\n\t\t\tinstance.clipboardToElementId(id).then(function () {\r\n\t\t\t\tajaxUtils.formSubmit(submitter, submitter.form);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclipboardToElementId: function (id) {\r\n\t\t\treturn navigator.permissions.query({ name: \"clipboard-read\" }).then(function (result) {\r\n\t\t\t\tlet control = document.querySelector(id);\r\n\r\n\t\t\t\tif (result.state == \"granted\" || result.state == \"prompt\") {\r\n\t\t\t\t\treturn navigator.clipboard.readText()\r\n\t\t\t\t\t\t.then(function (clipText) {\r\n\t\t\t\t\t\t\t//Если тип контрола hidden, значение из буфера вставляем в value\r\n\t\t\t\t\t\t\tif (control.type === 'hidden') {\r\n\t\t\t\t\t\t\t\tcontrol.value = clipText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//Если тип контрола textarea, значение из буфера вставляем в innerText\r\n\t\t\t\t\t\t\telse if (control.type === 'textarea') {\r\n\t\t\t\t\t\t\t\tcontrol.innerText = clipText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//Другие типы контролов настраиваем по необходимости\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tconsole.log('Control for insertion is not configured');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\t\tconsole.log('Failed to read clipboard contents: ', err);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\talert('В вашем браузере отключены полномочия по работе с буфером обмена. Если вы все же хотите воспользоваться данной функцией, обратитесь в службу технической поддержки.');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\treturn instance;\r\n}();\r\n\r\nif (!String.prototype.endsWith) {\r\n\tString.prototype.endsWith = function (searchString, position) {\r\n\t\tvar subjectString = this.toString();\r\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n\t\t\tposition = subjectString.length;\r\n\t\t}\r\n\t\tposition -= searchString.length;\r\n\t\tvar lastIndex = subjectString.indexOf(searchString, position);\r\n\t\treturn lastIndex !== -1 && lastIndex === position;\r\n\t};\r\n}\r\n\r\nif (!String.prototype.startsWith) {\r\n\tString.prototype.startsWith = function (str) {\r\n\t\treturn this.lastIndexOf(str, 0) === 0;\r\n\t}\r\n}\r\n\r\nHTMLCollection.prototype.forEach = Array.prototype.forEach;\r\nNodeList.prototype.forEach = Array.prototype.forEach;\r\n\r\nif (!Element.prototype.matches) {\r\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\nif (!Element.prototype.closest) {\r\n\tElement.prototype.closest = function (s) {\r\n\t\tvar el = this;\r\n\t\tdo {\r\n\t\t\tif (Element.prototype.matches.call(el, s)) return el;\r\n\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t} while (el !== null && el.nodeType === 1);\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\nStorage.prototype.setObject = function (key, value) {\r\n\tthis.setItem(key, JSON.stringify(value));\r\n}\r\n\r\nStorage.prototype.getObject = function (key) {\r\n\tvar value = this.getItem(key);\r\n\treturn value && JSON.parse(value);\r\n}\r\n\r\nwindow.domActions = function () {\r\n\tvar instance = {\r\n\t\tsetValue: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('setValue: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (e) {\r\n\t\t\t\tif (e instanceof HTMLInputElement || e instanceof HTMLSelectElement)\r\n\t\t\t\t\te.value = args.value;\r\n\t\t\t\telse\r\n\t\t\t\t\te.innerHTML = args.value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetAttribute: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('setAttribute: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (e instanceof HTMLSelectElement && args.attrName == 'readonly') {\r\n\t\t\t\tfor (i = 0; i < e.options.length; i++) {\r\n\t\t\t\t\tif (e.value != e.options[i].value)\r\n\t\t\t\t\t\te.options[i].setAttribute('disabled', 'disabled');\r\n\t\t\t\t}\r\n\t\t\t\te.classList.add(\"readonly\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\te.setAttribute(args.attrName, args.attrValue);\r\n\t\t},\r\n\t\tremoveAttribute: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('removeAttribute: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (e instanceof HTMLSelectElement && args.attrName == 'readonly') {\r\n\t\t\t\tfor (i = 0; i < e.options.length; i++) {\r\n\t\t\t\t\te.options[i].removeAttribute('disabled');\r\n\t\t\t\t}\r\n\t\t\t\te.classList.remove(\"readonly\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\te.removeAttribute(args.attrName);\r\n\t\t},\r\n\t\tsetVisible: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('setVisible: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (args.visible) e.classList.remove('hide'); else e.classList.add('hide');\r\n\t\t},\r\n\t\tsetClass: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('setClass: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\te.classList.add(args.clsName);\r\n\t\t},\r\n\t\tremoveClass: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (!e) {\r\n\t\t\t\tconsole.warn('removeClass: element id=' + args.id + ' not found');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\te.classList.remove(args.clsName);\r\n\t\t},\r\n\t\ttoggleClass: function (args) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tif (args.id) {\r\n\t\t\t\tvar el = document.getElementById(args.id);\r\n\t\t\t\tel.classList.toggle(args.clsName);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar root = args.root ? args.root : document;\r\n\t\t\t\tvar els = root.querySelectorAll(args.itemsSelector);\r\n\t\t\t\tvar b = args.sender.classList.contains(args.senderClsName);\r\n\t\t\t\tif (args.senderState == 1) b = !b;\r\n\r\n\t\t\t\tif (args.groupSelector) {\r\n\t\t\t\t\tvar grels = root.querySelectorAll(args.groupSelector);\r\n\t\t\t\t\tfor (var i = 0; i < grels.length; i++) {\r\n\t\t\t\t\t\tgrels[i].classList.remove(args.clsName);\r\n\t\t\t\t\t\tgrels[i].classList.remove(args.senderClsName);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!b) {\r\n\t\t\t\t\tfor (var i = 0; i < els.length; i++) {\r\n\t\t\t\t\t\tels[i].classList.add(args.clsName);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (args.senderState == 1) {\r\n\t\t\t\t\t\targs.sender.classList.remove(args.senderClsName);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\targs.sender.classList.add(args.senderClsName);\r\n\t\t\t\t}\r\n\t\t\t\telse if (!args.groupSelector) {\r\n\t\t\t\t\tfor (var i = 0; i < els.length; i++) {\r\n\t\t\t\t\t\tels[i].classList.remove(args.clsName);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (args.senderState == 1) {\r\n\t\t\t\t\t\targs.sender.classList.add(args.senderClsName);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\targs.sender.classList.remove(args.senderClsName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\thideShow: function (id) {\r\n\t\t\tinstance.toggleClass({ id: id, clsName: 'hide' });\r\n\t\t},\r\n\t\tsetCookie: function (args) {\r\n\t\t\tCookies.set(args.id, args.value, { path: '/' });\r\n\t\t},\r\n\t\tsetStorageArg: function (key, val) {\r\n\t\t\tsessionStorage.setItem(key, val);\r\n\t\t\tif (ajaxUtils.state.loc.storage.length == 0)\r\n\t\t\t\tajaxUtils.state.loc.storage.push({});\r\n\t\t\tajaxUtils.state.loc.storage[ajaxUtils.state.loc.storage.length - 1][key] = val;\r\n\t\t},\r\n\t\tinclude: function (id) {\r\n\t\t\tconst i = document.getElementById(id);\r\n\t\t\tlet path = i.getAttribute('data-include');\r\n\t\t\tif (path) {\r\n\t\t\t\tfetch(path).then(file => {\r\n\t\t\t\t\tfile.text().then(content => {\r\n\t\t\t\t\t\ti.innerHTML = content;\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}\r\n\r\n\treturn instance;\r\n}();\r\n\r\nwindow.ajaxUtils = function ($, cu) {\r\n\tconst DEF_EVENT_NAME = 'onload';\r\n\tconst META_HOME = '_home';\r\n\tconst META_CURRENT = '_current';\r\n\tconst META_PERSISTENT_ARGS = '_parms';\r\n\tconst FORMAT_PREFIX = '__format_';\r\n\r\n\tvar timer = null;\r\n\tvar intervals = {};\r\n\r\n\tvar state = {\r\n\t\tcom: {\r\n\t\t\trequest: { default: null },\r\n\t\t\tmessage: null,\r\n\t\t\tapiResult: null,\r\n\t\t\trequestedJs: []\r\n\t\t},\r\n\t\tloc: {\r\n\t\t\turl: null,\r\n\t\t\tparms: {},\r\n\t\t\tonBack: null,\r\n\t\t\tstorage: [{}],\r\n\t\t\tonBackArgs: []\r\n\t\t},\r\n\t\tctrl: {}\r\n\t};\r\n\r\n\tvar instance = {\r\n\t\tinitForm: function (args) {\r\n\t\t\tvar form = $('#' + args.id);\r\n\t\t\tform.on('click', 'input[type=\"submit\"], button[type=\"submit\"]', function (event) {\r\n\t\t\t\tif (event.target.getAttribute('data-cancelevent') == 'true') return;\r\n\t\t\t\t/* horrible hack to detect form submissions via ajax */\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t$(event.target.form).trigger('submit', event.target);\r\n\t\t\t});\r\n\t\t\tform.on('keydown', 'input[type=\"text\"]', function (event) {\r\n\t\t\t\t/* horrible hack to detect form submissions via ajax */\r\n\t\t\t\tif (event.target.readOnly)\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\t\t\tform.on('submit', { el: form[0] }, function (e, submitter) {\r\n\t\t\t\tif (submitter.classList.contains('ajax-loading'))\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tconst confirmMsg = submitter.getAttribute('data-confirm');\r\n\t\t\t\tif (confirmMsg) {\r\n\t\t\t\t\tif (!window.confirm(confirmMsg)) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn instance.formSubmit(submitter, e.data.el);\r\n\t\t\t});\r\n\t\t\tif (!args.submitOnEnter) {\r\n\t\t\t\tform.on(\"keypress\", \":input:not(textarea):not([type=submit])\", function (e) {\r\n\t\t\t\t\treturn e.keyCode != 13;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tformSubmit: function (sender, form, dict) {\r\n\t\t\tif (form.hasAttribute('data-res') && instance.processResult(form) == false) return false;\r\n\t\t\tvar fd = new FormData(form);\r\n\t\t\tfd.append('submit', sender.value);\r\n\t\t\tvar els = form.elements;\r\n\t\t\tfor (var i = 0, el; el = els[i++];) {\r\n\t\t\t\tprocessElementDataOnFormSubmit(el, function (key, value) { fd.append(key, value); });\r\n\t\t\t}\r\n\t\t\tvar target = { data: fd, method: 'POST' };\r\n\t\t\tprocessElementDataOnEvent(sender, target, function (key, value) { fd.append(key, value); });\r\n\t\t\tif (!target.e) target.e = 'onsubmit';\r\n\r\n\t\t\t//target.e = sender.hasAttribute('data-e') ? sender.getAttribute('data-e') : 'onsubmit';\r\n\t\t\t//if (sender.hasAttribute('data-r')) target.r = sender.getAttribute('data-r');\r\n\t\t\t//target.url = instance.findServiceAction(form);\r\n\t\t\t//const container = cu.getThisOrParent(sender, function (n) { return n.hasAttribute && n.hasAttribute('data-c-prefix'); });\r\n\t\t\t//if (container) {\r\n\t\t\t//\ttarget.containerPrefix = container.getAttribute('data-c-prefix');\r\n\t\t\t//\ttarget.containerType = container.getAttribute('data-c-type');\r\n\t\t\t//}\r\n\t\t\t//if (sender.hasAttribute('data-responsetype')) {\r\n\t\t\t//\ttarget.responseType = sender.getAttribute('data-responsetype');\r\n\t\t\t//}\r\n\t\t\trunOnAjaxSend(sender, target);\r\n\t\t\tconst r = instance.postEventWithApiResponse(target);\r\n\t\t\tif (form.hasAttribute('data-res-postponed'))\r\n\t\t\t\tr.then(function (apiResult) {\r\n\t\t\t\t\tif (apiResult.success != false)\r\n\t\t\t\t\t\tinstance.processResult(form);\r\n\t\t\t\t});\r\n\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\terror: function (xhr, settings) {\r\n\t\t\tvar text = '';\r\n\t\t\tvar title = localization.resources.title.systemError;\r\n\t\t\tvar showinframe = false;\r\n\t\t\tvar severity = 'err';\r\n\r\n\t\t\tif (xhr.status == '401') {\r\n\t\t\t\tconst location = xhr.getResponseHeader('location');\r\n\t\t\t\tif (location) {\r\n\t\t\t\t\twindow.location = location;\r\n\t\t\t\t\trequestCompleted(xhr, settings);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\ttitle = localization.resources.title.noAccess;\r\n\t\t\t\t\ttext = localization.resources.text.notLoggedSystem;\r\n\t\t\t\t\tseverity = 'warn';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (xhr.status == '403') {\r\n\t\t\t\ttitle = localization.resources.title.noAccess;\r\n\t\t\t\ttext = localization.resources.text.insufficientPermissionsOperation;\r\n\t\t\t\tseverity = 'warn';\r\n\t\t\t}\r\n\t\t\telse if (xhr.status == '404') {\r\n\t\t\t\ttitle = localization.resources.title.pageMissing;\r\n\t\t\t\ttext = localization.resources.text.linkGoToMainPage;\r\n\t\t\t\tseverity = 'warn';\r\n\t\t\t}\r\n\t\t\telse if (xhr.status == 0) {\r\n\t\t\t\ttitle = localization.resources.title.ajaxError;\r\n\t\t\t\ttext = 'Сервер недоступен или не отвечает.

Адрес: ' + settings.url;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = xhr.responseText;\r\n\t\t\t\tshowinframe = true;\r\n\t\t\t}\r\n\r\n\t\t\trequestCompleted(xhr, settings);\r\n\t\t\tshowError(title, text, severity, showinframe);\r\n\t\t},\r\n\t\tdelay: function (caller, func, timeout) {\r\n\t\t\tif (!timeout) {\r\n\t\t\t\ttimeout = 400;\r\n\t\t\t}\r\n\t\t\tif (timer) {\r\n\t\t\t\twindow.clearTimeout(timer);\r\n\t\t\t\ttimer = null;\r\n\t\t\t}\r\n\t\t\ttimer = window.setTimeout(function () { func(caller); }, timeout);\r\n\t\t},\r\n\t\tbindevent: function (args) {\r\n\t\t\t$('#' + args.id).on(args.clientEvent, { serverEvent: args.serverEvent, receiver: args.serverEventReceiver, method: args.method }, function (e) {\r\n\t\t\t\tif (e.data.method && e.data.method == 'get')\r\n\t\t\t\t\tinstance.runEventFromElementWithApiResponse(this, { e: e.data.serverEvent, r: e.data.receiver });\r\n\t\t\t\telse\r\n\t\t\t\t\tinstance.postEventFromElementWithApiResponse(this, { e: e.data.serverEvent, r: e.data.receiver });\r\n\t\t\t});\r\n\t\t},\r\n\t\trepeatedPostEvent: function (args) {\r\n\t\t\tif (intervals[args.id]) return;\r\n\r\n\t\t\tvar n = window.setInterval(function () {\r\n\t\t\t\tvar el = document.getElementById(args.id);\r\n\t\t\t\tif (el)\r\n\t\t\t\t\tinstance.postEventFromElementWithApiResponse(el);\r\n\t\t\t\telse if (intervals[args.id]) {\r\n\t\t\t\t\twindow.clearInterval(intervals[args.id]);\r\n\t\t\t\t\tdelete intervals[args.id];\r\n\t\t\t\t}\r\n\t\t\t}, args.interval);\r\n\r\n\t\t\tintervals[args.id] = n;\r\n\t\t},\r\n\t\tclearRepeatedPostEvent: function (id) {\r\n\t\t\tif (intervals[id]) {\r\n\t\t\t\twindow.clearInterval(intervals[id]);\r\n\t\t\t\tdelete intervals[id];\r\n\t\t\t}\r\n\t\t},\r\n\t\trunEvent: function (target) {\r\n\t\t\tconst settings = {\r\n\t\t\t\turl: instance.prepareUrl(target),\r\n\t\t\t\ttype: 'GET',\r\n\t\t\t\tresponseType: target.responseType ? target.responseType : \"\",\r\n\t\t\t\trequestGroup: target.requestGroup ? target.requestGroup : null,\r\n\t\t\t\tsender: target.sender\r\n\t\t\t};\r\n\t\t\treturn ajax(settings).fail(instance.error).then(onRequestResult);\r\n\t\t},\r\n\t\trunEventWithApiResponse: function (target) {\r\n\t\t\tif (target.method == 'FAKEGET')\r\n\t\t\t\treturn instance.postEvent(target).then(processApiResponse);\r\n\t\t\telse\r\n\t\t\t\treturn instance.runEvent(target).then(processApiResponse);\r\n\t\t},\r\n\t\trunEventFromElementWithApiResponse: function (el, target) {\r\n\t\t\tif (el.hasAttribute('data-res') && instance.processResult(el) == false) return;\r\n\t\t\tif (!target) target = {};\r\n\t\t\tif (!target.data) target.data = {};\r\n\t\t\tif (!target.query) target.query = {};\r\n\t\t\tif (!target.method) target.method = 'FAKEGET';\r\n\t\t\tprocessElementDataOnEvent(el, target, function (key, value) { target.data[key] = value; });\r\n\t\t\tif (el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement || el.hasAttribute('data-ctrl')) {\r\n\t\t\t\tcu.processElementValue(el, function (key, value) { target.query[key] = value; })\r\n\t\t\t\t//target.query[el.name] = el.value;\r\n\t\t\t}\r\n\t\t\trunOnAjaxSend(el, target);\r\n\t\t\treturn instance.runEventWithApiResponse(target);\r\n\t\t},\r\n\t\tpostEvent: function (target) {\r\n\t\t\tconst isForm = target.data instanceof FormData;\r\n\t\t\tconst settings = {\r\n\t\t\t\turl: instance.prepareUrl(target),\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tprocessData: !isForm,\r\n\t\t\t\tcontentType: isForm ? false : \"application/json; charset=utf-8\",\r\n\t\t\t\tdata: isForm ? target.data : JSON.stringify(target.data),\r\n\t\t\t\trequestGroup: target.requestGroup ? target.requestGroup : null,\r\n\t\t\t\tresponseType: target.responseType,\r\n\t\t\t\tsender: target.sender,\r\n\t\t\t\theaders: {}\r\n\t\t\t};\r\n\t\t\tif (target.method == 'FAKEGET')\r\n\t\t\t\tsettings.headers['X-HTTP-Method'] = 'GET';\r\n\t\t\treturn ajax(settings).fail(instance.error).then(onRequestResult);\r\n\t\t},\r\n\t\tpostEventWithApiResponse: function (target) {\r\n\t\t\treturn instance.postEvent(target).then(processApiResponse);\r\n\t\t},\r\n\t\tpostEventFromElementWithApiResponse: function (el, target) {\r\n\t\t\tif (el.hasAttribute('data-res') && instance.processResult(el) == false) return;\r\n\t\t\tconst form = $(el).closest('form')[0];\r\n\t\t\tif (!target) target = {};\r\n\t\t\tif (!target.data) target.data = {};\r\n\t\t\tif (!target.query) target.query = {};\r\n\t\t\tif (form) {\r\n\t\t\t\ttarget.data = $(form).serializeObject();\r\n\t\t\t\tvar els = form.elements;\r\n\t\t\t\tfor (var i = 0, fel; fel = els[i++];) {\r\n\t\t\t\t\tprocessElementDataOnFormSubmit(fel, function (key, value) { target.data[key] = value; });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttarget.method = 'POST';\r\n\t\t\tprocessElementDataOnEvent(el, target, function (key, value) { target.data[key] = value; });\r\n\t\t\tif (!form && (el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement || el.hasAttribute('data-ctrl'))) {\r\n\t\t\t\tcu.processElementValue(el, function (key, value) { target.data[key] = value; })\r\n\t\t\t\t//target.data[el.name] = el.value;\r\n\t\t\t}\r\n\r\n\t\t\trunOnAjaxSend(el, target);\r\n\t\t\tconst r = instance.postEventWithApiResponse(target);\r\n\t\t\tif (el.hasAttribute('data-res-postponed'))\r\n\t\t\t\treturn r.then(function (apiResult) {\r\n\t\t\t\t\tif (apiResult.success != false)\r\n\t\t\t\t\t\tinstance.processResult(el);\r\n\t\t\t\t});\r\n\t\t\telse\r\n\t\t\t\treturn r;\r\n\t\t},\r\n\t\trunHrefWithApiResponse: function (a, target) {\r\n\t\t\tif (event && event.ctrlKey && a && a.href) {\r\n\t\t\t\topen(a.href, '_blank').focus();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!target) target = {};\r\n\t\t\ttarget.changeloc = true;\r\n\t\t\tinstance.runEventFromElementWithApiResponse(a, target);\r\n\t\t},\r\n\t\tprepareTarget: function (target) {\r\n\t\t\tvar parms = {};\r\n\t\t\tstate.loc.next = {};\r\n\r\n\t\t\tif (!target.currenturl)\r\n\t\t\t\ttarget.currenturl = target.url;\r\n\r\n\t\t\tvar argGroups = [], parms2remove = [];\r\n\t\t\tif (target.sender) {\r\n\t\t\t\tconst grAttr = target.sender.getAttribute('data-cleararggroup');\r\n\t\t\t\tif (grAttr)\r\n\t\t\t\t\targGroups = grAttr.split(',');\r\n\t\t\t}\r\n\r\n\t\t\tif (argGroups.length > 0 && state.loc.arggroups) {\r\n\t\t\t\tfor (var i = 0; i < argGroups.length; i++) {\r\n\t\t\t\t\tif (state.loc.arggroups.hasOwnProperty(argGroups[i])) {\r\n\t\t\t\t\t\tparms2remove = parms2remove.concat(state.loc.arggroups[argGroups[i]]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar sep = target.url.indexOf('?');\r\n\t\t\tvar targetpath = sep >= 0 ? target.url.substring(0, sep) : target.url;\r\n\t\t\tconst targetquery = sep >= 0 ? target.url.substring(sep + 1) : '';\r\n\t\t\tconst targetqueryparms = cu.getParams(targetquery, true);\r\n\t\t\tfor (var key in target.query) {\r\n\t\t\t\ttargetqueryparms[key] = encodeURIComponent(target.query[key]);\r\n\t\t\t}\r\n\t\t\tfor (var key in target.data) {\r\n\t\t\t\tif (targetqueryparms[key]) {\r\n\t\t\t\t\ttargetqueryparms[key] = encodeURIComponent(target.data[key]);\r\n\t\t\t\t\tdelete target.data[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttarget.url = targetpath + '?';\r\n\t\t\tfor (var key in targetqueryparms) {\r\n\t\t\t\tif (targetqueryparms[key] && targetqueryparms[key] != '' && !parms2remove.includes(key))\r\n\t\t\t\t\ttarget.url += key + '=' + targetqueryparms[key] + '&';\r\n\t\t\t}\r\n\t\t\ttarget.url = target.url.slice(0, -1);\r\n\r\n\t\t\tif (target.changeloc) {\r\n\t\t\t\tstate.loc.next.url = target.url;\r\n\t\t\t}\r\n\r\n\t\t\tif (target.method == 'GET') {\r\n\t\t\t\tfor (var key in target.data) {\r\n\t\t\t\t\tparms[key] = target.data[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar page = document.head.getAttribute('data-page');\r\n\t\t\tif (page) parms.p = page;\r\n\t\t\tif (target.r) parms.r = target.r;\r\n\t\t\tif (target.sender && target.sender.id) parms.sender = target.sender.id;\r\n\t\t\tparms.e = target.e ? target.e : DEF_EVENT_NAME;\r\n\r\n\t\t\tstate.loc.next.parms = parms;\r\n\r\n\t\t\tvar curpath = target.currenturl;\r\n\t\t\tsep = curpath.indexOf('?');\r\n\t\t\tcurpath = sep >= 0 ? curpath.substring(0, sep) : curpath;\r\n\r\n\t\t\tif (curpath == '/' || targetpath == '/') {\r\n\t\t\t\tconst home = document.getElementById(META_HOME);\r\n\t\t\t\tconst alias = home.getAttribute('data-alias');\r\n\t\t\t\tif (curpath == '/') curpath = alias || '/';\r\n\t\t\t\tif (targetpath == '/') targetpath = alias || '/';\r\n\t\t\t}\r\n\t\t\tvar base = document.getElementsByTagName('base')[0];\r\n\t\t\tbase = base ? base.getAttribute('href') : '';\r\n\t\t\tif (base && !targetpath.startsWith(base))\r\n\t\t\t\ttargetpath = base + targetpath;\r\n\t\t\tif (base && !curpath.startsWith(base))\r\n\t\t\t\tcurpath = base + curpath;\r\n\r\n\t\t\tconst result = target.sender ?\r\n\t\t\t\ttarget.sender.getAttribute('data-res') || target.sender.getAttribute('data-res-postponed') : undefined;\r\n\r\n\t\t\tif (result == 1 && state.loc.storage.length > 1) {\r\n\t\t\t\tconst returnstate = JSON.stringify(state.loc.storage[state.loc.storage.length - 2]);\r\n\t\t\t\tif (target.data instanceof FormData)\r\n\t\t\t\t\ttarget.data.append('returnstate', returnstate);\r\n\t\t\t\telse\r\n\t\t\t\t\ttarget.data['returnstate'] = returnstate;\r\n\t\t\t}\r\n\r\n\t\t\tstate.loc.next.arggroups = state.loc.arggroups;\r\n\t\t\tstate.loc.next.storage = state.loc.storage.slice();\r\n\r\n\t\t\tif (targetpath.toLowerCase() != curpath.toLowerCase()) {\r\n\t\t\t\tparms['c-new'] = 1;\r\n\t\t\t\tstate.loc.next.arggroups = undefined;\r\n\t\t\t\tif (target.changeloc) {\r\n\t\t\t\t\tstate.ctrl = {};\r\n\t\t\t\t\tif (result == 0) {\r\n\t\t\t\t\t\tstate.loc.next.storage.pop();\r\n\t\t\t\t\t\tif (state.loc.next.storage.length == 0)\r\n\t\t\t\t\t\t\tstate.loc.next.storage.push({});\r\n\t\t\t\t\t\tconst curStorage = state.loc.next.storage[state.loc.next.storage.length - 1];\r\n\t\t\t\t\t\tfor (var key in curStorage) {\r\n\t\t\t\t\t\t\ttarget.data[key] = curStorage[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!result && (target.changeloc || target.changeloc_modal)) {\r\n\t\t\t\t\tstate.loc.next.storage.push({});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (!parms['c-prefix'] && target.containerPrefix) {\r\n\t\t\t\tparms['c-prefix'] = target.containerPrefix;\r\n\t\t\t\tparms['c-type'] = target.containerType;\r\n\t\t\t}\r\n\r\n\t\t\tif (target.responseType)\r\n\t\t\t\tparms['responsetype'] = target.responseType;\r\n\r\n\t\t\tstate.loc.next.changeloc = target.changeloc;\r\n\t\t\tif (target.changeloc) {\r\n\t\t\t\tif (target.onBack) state.loc.next.onBack = target.onBack;\r\n\t\t\t\t//window.history.pushState(state.loc, \"\", target.url);\r\n\t\t\t}\r\n\r\n\t\t\tfor (var key in parms) {\r\n\t\t\t\tif (!parms[key]) delete parms[key];\r\n\t\t\t}\r\n\r\n\t\t\ttarget.parms = parms;\r\n\t\t},\r\n\t\tprepareUrl: function (target) {\r\n\t\t\tinstance.prepareTarget(target);\r\n\t\t\treturn getApiUrl(target.url, target.parms, target.isfirstload);\r\n\t\t},\r\n\t\tprocessResult: function (el) {\r\n\t\t\tconst result = el.getAttribute('data-res') || el.getAttribute('data-res-postponed');\r\n\t\t\tconst handler = commonUtils.getThisOrParent(el, function (parent) { return parent.hasAttribute('data-res-handler'); });\r\n\r\n\t\t\tif (!handler) return;\r\n\r\n\t\t\tconst callOnResult = function (ctrl) {\r\n\t\t\t\tconst t = ctrl.getAttribute('data-ctrl');\r\n\t\t\t\tconst ctrlid = ctrl.hasAttribute('data-ctrl-id') ? ctrl.getAttribute('data-ctrl-id') : ctrl.id;\r\n\t\t\t\tconst inst = state.ctrl[ctrlid];\r\n\r\n\t\t\t\tif (inst.onResult)\r\n\t\t\t\t\treturn inst.onResult(result);\r\n\t\t\t\telse if (window[t] && window[t]['onResult']) {\r\n\t\t\t\t\treturn window[t]['onResult'](result, inst);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// обработка закрытия модальных окон по кнопке \"Назад\"\r\n\t\t\t// TODO: переделать в будущем с использованием идентификатора узла навигации\r\n\t\t\tconst href = handler.getAttribute('data-href');\r\n\t\t\tif (href && (new URL(location.origin + href)).pathname != location.pathname) {\r\n\t\t\t\tstate.loc.storage.pop();\r\n\t\t\t}\r\n\r\n\t\t\tconst children = handler.querySelectorAll('[data-ctrl]');\r\n\r\n\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\tif (callOnResult(children[i]) == false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (callOnResult(handler) == false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tfindServiceAction: function (el) {\r\n\t\t\tvar root = el;\r\n\t\t\tif (root != document.head) {\r\n\t\t\t\troot = cu.getParent(el, function (n) { return n.hasAttribute && n.hasAttribute('data-href'); });\r\n\t\t\t\tif (!root) root = document.getElementById(META_CURRENT);\r\n\t\t\t}\r\n\t\t\tconst home = document.getElementById(META_HOME);\r\n\t\t\treturn root.getAttribute('data-href') || home.getAttribute('data-href') || '/';\r\n\t\t},\r\n\t\tfindControl: function (el) {\r\n\t\t\tconst ctrl = cu.getThisOrParent(el, function (n) { return n.hasAttribute && n.hasAttribute('data-ctrl'); });\r\n\t\t\tif (!ctrl) return null;\r\n\t\t\tconst id = ctrl.hasAttribute('data-ctrl-id') ? ctrl.getAttribute('data-ctrl-id') : ctrl.id;\r\n\t\t\treturn { root: ctrl, id: id, instance: state.ctrl[id] };\r\n\t\t},\r\n\t\tsetValue: function (args) {\r\n\t\t\tvar e = document.getElementById(args.id);\r\n\t\t\tif (e) {\r\n\t\t\t\tif (e instanceof HTMLInputElement || e instanceof HTMLSelectElement)\r\n\t\t\t\t\te.value = args.value;\r\n\t\t\t\telse\r\n\t\t\t\t\te.innerHTML = args.value;\r\n\t\t\t\tconst st = getElementStateAttrs(e);\r\n\t\t\t\tif (st) {\r\n\t\t\t\t\tif (st.type == 'array') {\r\n\t\t\t\t\t\tconst values = args.value.split(',').filter(String);\r\n\t\t\t\t\t\tconst arr = state.ctrl[st.owner][st.name];\r\n\t\t\t\t\t\tarr.splice(0, arr.length);\r\n\t\t\t\t\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\t\t\t\t\tarr.push(values[i]);\r\n\t\t\t\t\t\t}\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\tchangeUrl: function (args) {\r\n\t\t\tconst params = location.search.slice(1).split('&');\r\n\t\t\tvar search = [];\r\n\t\t\tvar hash = location.hash == '' ? [] : location.hash.split('&');\r\n\t\t\tvar hstate = getHistoryState();\r\n\r\n\t\t\tif (args.remove && args.remove.length > 0) {\r\n\t\t\t\tconst deleteRegex = new RegExp(args.remove.join('=|') + '=');\r\n\t\t\t\tfor (var i = 0; i < params.length; i++)\r\n\t\t\t\t\tif (deleteRegex.test(params[i]) === false)\r\n\t\t\t\t\t\tsearch.push(params[i]);\r\n\t\t\t\tif (hstate) {\r\n\t\t\t\t\tfor (var key in args.remove) {\r\n\t\t\t\t\t\tif (hstate.parms[key]) delete hstate.parms[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tfor (var i = 0; i < params.length; i++)\r\n\t\t\t\t\tsearch.push(params[i]);\r\n\r\n\t\t\tif (args.add) {\r\n\t\t\t\tfor (var key in args.add) {\r\n\t\t\t\t\tif (key.startsWith('#'))\r\n\t\t\t\t\t\thash.push(key.substring(1) + (args.add[key] != '' ? '=' + args.add[key] : ''));\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tsearch.push(key + '=' + args.add[key]);\r\n\t\t\t\t\t\tif (hstate) hstate.parms[key] = args.add[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar url = location.pathname + (search.length ? '?' + search.join('&') : '') + (hash.length > 0 ? '#' + hash.join('&') : '');\r\n\r\n\t\t\tif (hash.length > 0)\r\n\t\t\t\twindow.location.hash = hash.join('&');\r\n\r\n\t\t\tif (hstate) window.history.replaceState(hstate, document.title, url);\r\n\t\t\tstate.loc.url = url;\r\n\r\n\t\t\tconst current = document.getElementById(META_CURRENT);\r\n\t\t\tcurrent.setAttribute('data-href', url);\r\n\t\t},\r\n\t\tstate: state,\r\n\t\tprocessControls: processControls,\r\n\t\tpostProcessControls: postProcessControls,\r\n\t\tshowError: showError,\r\n\t\tprocessApiResponse: function (apiResult) {\r\n\t\t\tprocessApiResponse(apiResult);\r\n\t\t}\r\n\t};\r\n\r\n\tfunction getApiUrl(path, parms, isfirstload) {\r\n\t\tconst k = path.indexOf('?');\r\n\t\tif (!parms) parms = {};\r\n\r\n\t\tvar url;\r\n\t\tif (k > 0) {\r\n\t\t\turl = path.substring(0, k);\r\n\t\t\tconst urlParms = cu.getParams(path.substring(k + 1));\r\n\t\t\tfor (var key in urlParms) {\r\n\t\t\t\tif (!parms[key]) {\r\n\t\t\t\t\tparms[key] = urlParms[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\turl = path;\r\n\r\n\t\turl += '?';\r\n\r\n\t\tfor (var key in parms) {\r\n\t\t\turl += key + '=' + encodeURIComponent(parms[key]) + '&';\r\n\t\t}\r\n\r\n\t\treturn isfirstload ? url += 'firstload=true' : url.slice(0, -1);\r\n\t}\r\n\r\n\t//function loadScript(def, toLoad, cur) {\r\n\t//\tif ($.inArray(toLoad[cur], state.com.requestedJs) >= 0) {\r\n\t//\t\tif (toLoad.length - 1 > cur)\r\n\t//\t\t\treturn loadScript(def, toLoad, cur + 1);\r\n\t//\t\telse\r\n\t//\t\t\treturn def.resolve();\r\n\t//\t}\r\n\t//\tstate.com.requestedJs.push(toLoad[cur]);\r\n\t//\treturn $.ajax({\r\n\t//\t\ttype: \"GET\",\r\n\t//\t\turl: toLoad[cur],\r\n\t//\t\tdataType: \"script\",\r\n\t//\t\tbeforeSend: function () { console.log('requested ' + this.url); },\r\n\t//\t\tsuccess: function () {\r\n\t//\t\t\tconsole.log('loaded ' + this.url);\r\n\t//\t\t\tif (toLoad.length - 1 > cur)\r\n\t//\t\t\t\tloadScript(def, toLoad, cur + 1);\r\n\t//\t\t\telse\r\n\t//\t\t\t\tdef.resolve();\r\n\t//\t\t},\r\n\t//\t\tcrossDomain: true\r\n\t//\t});\r\n\t//}\r\n\r\n\tfunction ajax(settings) {\r\n\t\tconst isArrayBuffer = settings.responseType && settings.responseType.toLowerCase() == 'arraybuffer';\r\n\t\tconst r = $.Deferred();\r\n\t\tconst xhr = new XMLHttpRequest();\r\n\t\txhr.open(settings.type, settings.url);\r\n\t\tif (isArrayBuffer) xhr.responseType = 'arraybuffer';\r\n\t\txhr.onload = function () {\r\n\t\t\tif (this.status >= 200 && this.status < 300) {\r\n\t\t\t\tr.resolve(isArrayBuffer ? xhr.response : JSON.parse(xhr.response), xhr, settings);\r\n\t\t\t} else {\r\n\t\t\t\tr.reject(xhr, settings);\r\n\t\t\t}\r\n\t\t};\r\n\t\txhr.onerror = function () {\r\n\t\t\tr.reject(xhr, settings);\r\n\t\t};\r\n\t\txhr.contentType = settings.contentType;\r\n\t\txhr.processData = settings.processData;\r\n\t\txhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n\t\tif (settings.headers)\r\n\t\t\tfor (var h in settings.headers)\r\n\t\t\t\txhr.setRequestHeader(h, settings.headers[h]);\r\n\t\tbeforeRequest(xhr, settings);\r\n\t\txhr.send(settings.data);\r\n\t\treturn r;\r\n\t}\r\n\r\n\tfunction beforeRequest(xhr, settings) {\r\n\t\tconst reqId = cu.createGuid();\r\n\t\tconst reqGroup = settings.requestGroup ? settings.requestGroup : 'default';\r\n\t\tstate.com.request[reqGroup] = reqId;\r\n\t\txhr.setRequestHeader('x-request-guid', reqId);\r\n\t\txhr.setRequestHeader('x-csrf-token', document.head.getAttribute('data-x-csrf-token'));\r\n\t\tsetTimeout(function () {\r\n\t\t\tif (state.com.request.default && state.com.message) document.body.style.cursor = 'wait';\r\n\t\t}, 100);\r\n\t\tsetTimeout(function () {\r\n\t\t\tif (state.com.request.default && state.com.message) state.com.message.css('display', 'block');\r\n\t\t}, 1000);\r\n\t}\r\n\r\n\tfunction requestCompleted(xhr, settings) {\r\n\t\tconst reqGroup = settings.requestGroup ? settings.requestGroup : 'default';\r\n\t\tstate.com.request[reqGroup] = null;\r\n\t\tif (document.body) document.body.style.cursor = '';\r\n\t\tif (state.com.message) state.com.message.css('display', 'none');\r\n\r\n\t\tconst nodes = document.querySelectorAll('.ajax-loading');\r\n\r\n\t\tfor (var i = 0; i < nodes.length; i++) {\r\n\t\t\tnodes[i].classList.remove('ajax-loading');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onRequestResult(data, xhr, settings) {\r\n\t\tconst reqGroup = settings.requestGroup ? settings.requestGroup : 'default';\r\n\t\tif (xhr.getResponseHeader('X-Request-Guid') == state.com.request[reqGroup]) {\r\n\t\t\trequestCompleted(xhr, settings);\r\n\t\t\tconst disposition = xhr.getResponseHeader('Content-Disposition');\r\n\r\n\t\t\t// check file download response\r\n\t\t\tif (disposition && disposition.indexOf('attachment') !== -1) {\r\n\t\t\t\tconst contenttype = xhr.getResponseHeader('Content-Type');\r\n\t\t\t\tcu.processFile(contenttype, disposition, data);\r\n\t\t\t\tif (settings.sender) {\r\n\t\t\t\t\tsettings.sender.dispatchEvent(new CustomEvent('downloadComplete'));\r\n\t\t\t\t\tif (settings.sender.hasAttribute('data-callbackelement')) {\r\n\t\t\t\t\t\tconst callbackel = document.getElementById(settings.sender.getAttribute('data-callbackelement'));\r\n\t\t\t\t\t\tif (callbackel)\r\n\t\t\t\t\t\t\tinstance.postEventFromElementWithApiResponse(callbackel);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//alert('file downloaded');\r\n\t\t\t\treturn $.Deferred().reject();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn $.Deferred().resolve(data);\r\n\t\t}\r\n\t\telse\r\n\t\t\treturn $.Deferred().reject();\r\n\t}\r\n\r\n\tfunction processElementDataOnEvent(el, target, setvalfunc) {\r\n\t\tfor (var attr, i = 0, attrs = el.attributes, n = attrs ? attrs.length : 0; i < n; i++) {\r\n\t\t\tattr = attrs[i];\r\n\t\t\tvar val = attr.value == '' ? null : attr.value;\r\n\t\t\tif (attr.name.startsWith('data-p-')) {\r\n\t\t\t\tif (target.method == 'POST') {\r\n\t\t\t\t\tif (target.data instanceof FormData) {\r\n\t\t\t\t\t\ttarget.data.append(attr.name.replace('data-p-', ''), val || '');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\ttarget.data[attr.name.replace('data-p-', '')] = val || '';\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\ttarget.query[attr.name.replace('data-p-', '')] = val || '';\r\n\t\t\t} else if (attr.name == 'href') {\r\n\t\t\t\ttarget.url = val;\r\n\t\t\t} else if (attr.name == 'data-href') {\r\n\t\t\t\ttarget.url = val;\r\n\t\t\t} else if (attr.name == 'data-e') {\r\n\t\t\t\ttarget.e = val;\r\n\t\t\t} else if (attr.name == 'data-r') {\r\n\t\t\t\ttarget.r = val;\r\n\t\t\t} else if (attr.name.startsWith('data-format')) {\r\n\t\t\t\ttarget.data[FORMAT_PREFIX + el.name] = val;\r\n\t\t\t} else if (attr.name.startsWith('data-c-')) {\r\n\t\t\t\ttarget.data[attr.name.replace('data-c-', 'c-')] = val || '';\r\n\t\t\t} else if (attr.name == 'data-ref') {\r\n\t\t\t\tconst ids = val.split(' ');\r\n\t\t\t\tids.forEach(id => cu.processElementValue(document.getElementById(id), setvalfunc));\r\n\t\t\t} else if (attr.name == 'data-ref-sessionstorage') {\r\n\t\t\t\tconst ids = val.split(' ');\r\n\t\t\t\tids.forEach(id => setvalfunc(id, sessionStorage.getItem(id)));\r\n\t\t\t} else if (attr.name == 'data-responsetype') {\r\n\t\t\t\ttarget.responseType = val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (el.hasAttribute('data-requestgroup'))\r\n\t\t\ttarget.requestGroup = el.getAttribute('data-requestgroup');\r\n\r\n\t\t// TODO: доработать\r\n\t\t// - сделать универсальное определение модальных контейнеров\r\n\t\t// - обработка открытия модального окна из модального окна.\r\n\t\t// - перенести обработку backArgs в prepareTarget\r\n\t\tif (el.hasAttribute('data-c-new') && el.hasAttribute('data-c-type')) {\r\n\t\t\tconst t = el.getAttribute('data-c-type').toLowerCase();\r\n\r\n\t\t\tif (Tango.serviceProvider.containers[t]) {\r\n\t\t\t\tconst containerObj = Tango.serviceProvider.containers[t](el);\r\n\t\t\t\tconst parms = containerObj.prepareParms();\r\n\t\t\t}\r\n\r\n\t\t\tif (t == 'dialogform' || t == 'dialognestedform') {\r\n\t\t\t\tvar backArgs = {};\r\n\t\t\t\tfor (var key in target.data) {\r\n\t\t\t\t\tif (!key.startsWith('c-'))\r\n\t\t\t\t\t\tbackArgs[key] = target.data[key];\r\n\t\t\t\t}\r\n\t\t\t\tstate.loc.onBackArgs.push(backArgs);\r\n\t\t\t\ttarget.changeloc_modal = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttarget.currenturl = instance.findServiceAction(el);\r\n\t\tif (!target.url) {\r\n\t\t\ttarget.url = target.currenturl;\r\n\t\t}\r\n\r\n\t\ttarget.sender = el;\r\n\r\n\t\tconst startEl = el.hasAttribute('data-c-external') ? document.getElementById(el.getAttribute('data-c-external')) : el;\r\n\t\tconst isDataRes = el.hasAttribute('data-res') || el.hasAttribute('data-res-postponed');\r\n\r\n\t\tvar firstContainer, modalContainer, noChangeLoc;\r\n\t\tcu.getThisOrParent(startEl, function (n) {\r\n\t\t\tif (!firstContainer && n.hasAttribute && n.hasAttribute('data-c-prefix'))\r\n\t\t\t\tfirstContainer = n;\r\n\t\t\tif (!noChangeLoc && n.hasAttribute && n.getAttribute('data-c-changeloc') == 'false')\r\n\t\t\t\tnoChangeLoc = n;\r\n\t\t\tif (!modalContainer && n.hasAttribute && n.getAttribute('aria-modal') == 'true')\r\n\t\t\t\tmodalContainer = n;\r\n\t\t});\r\n\r\n\t\tif (firstContainer) {\r\n\t\t\ttarget.containerPrefix = firstContainer.getAttribute('data-c-prefix');\r\n\t\t\ttarget.containerType = firstContainer.getAttribute('data-c-type');\r\n\t\t\tif (modalContainer) {\r\n\t\t\t\tif (isDataRes && state.loc.onBackArgs.length > 0) {\r\n\t\t\t\t\tconst backArgs = state.loc.onBackArgs[state.loc.onBackArgs.length - 1];\r\n\t\t\t\t\tfor (var key in backArgs) {\r\n\t\t\t\t\t\tif (target.data[key] == null) {\r\n\t\t\t\t\t\t\ttarget.data[key] = backArgs[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!isDataRes && noChangeLoc)\r\n\t\t\t\ttarget.changeloc = false;\r\n\t\t}\r\n\r\n\t\tif (isDataRes) {\r\n\t\t\tstate.loc.onBackArgs.pop();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\tfunction processElementDataOnFormSubmit(el, setvalfunc) {\r\n\t\tfor (var attr, i = 0, attrs = el.attributes, n = attrs ? attrs.length : 0; i < n; i++) {\r\n\t\t\tattr = attrs[i];\r\n\t\t\tif (attr.name.startsWith('data-format')) {\r\n\t\t\t\tsetvalfunc(FORMAT_PREFIX + el.name, attr.value);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction processApiResponse(apiResult) {\r\n\t\tconsole.log('processApiResponse');\r\n\r\n\t\tif (!apiResult) return;\r\n\t\tif (apiResult instanceof ArrayBuffer)\r\n\t\t\tapiResult = JSON.parse(textDecode(apiResult));\r\n\r\n\t\tif (apiResult.url) {\r\n\t\t\twindow.location = apiResult.url;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstate.com.apiResult = apiResult;\r\n\r\n\t\tif (document.readyState == 'complete' || document.readyState == 'interactive') {\r\n\t\t\ttry {\r\n\t\t\t\trenderApiResult();\r\n\t\t\t} catch (ex) {\r\n\t\t\t\tshowError(localization.resources.title.javascriptError, ex + '\\n\\n' + ex.stack, 'err');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn $.Deferred().resolve(apiResult);\r\n\t}\r\n\r\n\tfunction getElementStateAttrs(el) {\r\n\t\tconst type = el.getAttribute('data-hasclientstate');\r\n\t\tvar owner = el.getAttribute('data-clientstate-owner');\r\n\t\tconst name = el.getAttribute('data-clientstate-name') || el.name;\r\n\t\tif (!owner) {\r\n\t\t\tconst parentctrl = instance.findControl(el);\r\n\t\t\tif (!parentctrl) return null;\r\n\t\t\towner = parentctrl.id;\r\n\t\t}\r\n\t\treturn { type: type, owner: owner, name: name };\r\n\t}\r\n\r\n\tfunction renderApiResult() {\r\n\t\tvar apiResult = state.com.apiResult;\r\n\t\tstate.com.apiResult = null;\r\n\r\n\t\tif (apiResult.error) {\r\n\t\t\tshowError(localization.resources.title.systemError, apiResult.error, 'err');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (state.loc.next) {\r\n\t\t\tif (state.loc.next.hasOwnProperty('url')) state.loc.url = state.loc.next.url;\r\n\t\t\tif (state.loc.next.hasOwnProperty('parms')) state.loc.parms = state.loc.next.parms;\r\n\t\t\tif (state.loc.next.hasOwnProperty('arggroups')) state.loc.arggroups = state.loc.next.arggroups;\r\n\t\t\tif (state.loc.next.hasOwnProperty('storage')) state.loc.storage = state.loc.next.storage;\r\n\t\t\tif (state.loc.next.hasOwnProperty('onBack')) state.loc.onBack = state.loc.next.onBack;\r\n\t\t\tif (state.loc.next.hasOwnProperty('onBackArgs')) state.loc.onBackArgs = state.loc.next.onBackArgs;\r\n\r\n\t\t\tif (state.loc.next.changeloc && !apiResult.redirect && !apiResult.hardredirect) {\r\n\t\t\t\twindow.history.pushState(state.loc, \"\", state.loc.url);\r\n\t\t\t}\r\n\t\t\tstate.loc.next = undefined;\r\n\t\t}\r\n\r\n\t\tconst nodes = [];\r\n\t\tconst shadow = (new DOMParser()).parseFromString(\"\", \"text/html\");\r\n\r\n\t\tconst replaceid = function (el, obj) {\r\n\t\t\tif (!obj.content.firstChild) return;\r\n\t\t\tif (obj.name == el.id)\r\n\t\t\t\tobj.content.firstChild.id = el.id;\r\n\t\t\telse if (obj.content.firstChild.id == '' && obj.content.querySelector(\"[id='\" + el.id + \"']\") == null)\r\n\t\t\t\tobj.content.firstChild.id = el.id;\r\n\t\t};\r\n\r\n\t\tconst replaceFunc = function (el, obj) {\r\n\t\t\t//if (obj.content.childNodes.length > 1)\r\n\t\t\t//\tthrow 'Replace widget: the replacement content must contain only one node.';\r\n\t\t\t//else\r\n\t\t\tif (obj.content.childNodes.length > 0) {\r\n\t\t\t\treplaceid(el, obj);\r\n\t\t\t\tel.parentNode.replaceChild(obj.content.firstChild, el);\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst addFunc = function (el, obj) {\r\n\t\t\tif (el.parentNode && obj.content.childNodes.length == 1 && el.id == obj.content.firstChild.id) {\r\n\t\t\t\tel.parentNode.replaceChild(obj.content.firstChild, el);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\twhile (el.firstChild) {\r\n\t\t\t\tel.removeChild(el.firstChild);\r\n\t\t\t}\r\n\t\t\twhile (obj.content.childNodes.length > 0)\r\n\t\t\t\tel.appendChild(obj.content.firstChild);\r\n\t\t};\r\n\t\tconst addShadowFunc = function (el, obj) {\r\n\t\t\tconst shadowRoot = el.attachShadow({ mode: 'open' });\r\n\t\t\tshadowRoot.innerHTML = obj.content;\r\n\r\n\t\t\twhile (shadowRoot.firstChild) {\r\n\t\t\t\tshadowRoot.removeChild(shadowRoot.firstChild);\r\n\t\t\t}\r\n\t\t\twhile (obj.content.childNodes.length > 0)\r\n\t\t\t\tshadowRoot.appendChild(obj.content.firstChild);\r\n\t\t};\r\n\t\tconst adjacentFunc = function (el, obj) {\r\n\t\t\twhile (obj.content.childNodes.length > 0) {\r\n\t\t\t\tconst i = obj.position == 'beforeEnd' || obj.position == 'beforeBegin' ? 0 : obj.content.childNodes.length - 1;\r\n\t\t\t\tel.insertAdjacentElement(obj.position, obj.content.childNodes[i]);\r\n\t\t\t}\r\n\t\t\tif (obj.position == 'afterEnd') {\r\n\t\t\t\tcu.scrollToView(el.nextSibling);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar rtagName = /<([\\w:]+)/,\r\n\t\t\t// We have to close these tags to support XHTML (#13200)\r\n\t\t\twrapMap = {\r\n\t\t\t\toption: [1, \"\"],\r\n\t\t\t\tthead: [1, \"\", \"
\"],\r\n\t\t\t\tcol: [2, \"\", \"
\"],\r\n\t\t\t\ttr: [2, \"\", \"
\"],\r\n\t\t\t\ttd: [3, \"\", \"
\"],\r\n\t\t\t\t_default: [0, \"\", \"\"]\r\n\t\t\t};\r\n\r\n\t\tfunction parseHTML(htmlString) {\r\n\t\t\tvar tag, wrap, j,\r\n\t\t\t\tfragment = document.createElement('div');\r\n\r\n\t\t\t// Deserialize a standard representation\r\n\t\t\ttag = (rtagName.exec(htmlString) || [\"\", \"\"])[1].toLowerCase();\r\n\t\t\twrap = wrapMap[tag] || wrapMap._default;\r\n\t\t\tfragment.innerHTML = wrap[1] + htmlString + wrap[2];\r\n\r\n\t\t\t// Descend through wrappers to the right content\r\n\t\t\tj = wrap[0];\r\n\t\t\twhile (j--) {\r\n\t\t\t\tfragment = fragment.lastChild;\r\n\t\t\t}\r\n\r\n\t\t\treturn fragment;\r\n\t\t}\r\n\r\n\t\tif (apiResult.widgets) {\r\n\t\t\tfor (var w in apiResult.widgets) {\r\n\t\t\t\tvar obj = apiResult.widgets[w];\r\n\t\t\t\tif (obj && typeof (obj) == \"object\") {\r\n\t\t\t\t\tif (obj.name == 'title' && obj.content && obj.content != '') {\r\n\t\t\t\t\t\tdocument.title = obj.content;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (obj.name == 'description' && obj.content && obj.content != '') {\r\n\t\t\t\t\t\tconst md = document.head.querySelector('meta[name=\"description\"]');\r\n\t\t\t\t\t\tif (md) md.content = obj.content;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar el = obj.name == 'body' ? document.body : document.getElementById(obj.name);\r\n\r\n\t\t\t\t\tif (obj.action == 'remove') {\r\n\t\t\t\t\t\tif (el) el.parentElement.removeChild(el);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst shadowel = shadow.getElementById(obj.name);\r\n\t\t\t\t\tif (shadowel) {\r\n\t\t\t\t\t\tel = shadowel;\r\n\t\t\t\t\t\tobj.nested = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar parentel = null;\r\n\t\t\t\t\tif (obj.action == 'adjacent') {\r\n\t\t\t\t\t\tif (obj.parent && obj.parent != 'body' && obj.parent != '') {\r\n\t\t\t\t\t\t\tparentel = shadow.getElementById(obj.parent);\r\n\t\t\t\t\t\t\tif (parentel) {\r\n\t\t\t\t\t\t\t\tobj.nested = true;\r\n\t\t\t\t\t\t\t\tel = shadow.getElementById(obj.name);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tparentel = document.getElementById(obj.parent);\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tparentel = document.body;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (obj.action == 'replace' || (el && obj.action == 'adjacent') || obj.action == 'add') {\r\n\t\t\t\t\t\tif (!el) continue;\r\n\t\t\t\t\t\tobj.content = parseHTML(obj.content);\r\n\t\t\t\t\t\tobj.el = el;\r\n\t\t\t\t\t\tobj.func = obj.action == 'add' ? addFunc : replaceFunc;\r\n\t\t\t\t\t\tnodes.push(obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (obj.action == 'adjacent') {\r\n\t\t\t\t\t\tif (!parentel) continue;\r\n\t\t\t\t\t\tobj.content = parseHTML(obj.content);\r\n\t\t\t\t\t\tobj.el = parentel;\r\n\t\t\t\t\t\tobj.func = adjacentFunc;\r\n\t\t\t\t\t\tnodes.push(obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (obj.action == 'addShadow') {\r\n\t\t\t\t\t\tif (!el) continue;\r\n\t\t\t\t\t\tobj.content = parseHTML(obj.content);\r\n\t\t\t\t\t\tobj.el = el;\r\n\t\t\t\t\t\tobj.func = addShadowFunc;\r\n\t\t\t\t\t\tnodes.push(obj);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (obj.nested)\r\n\t\t\t\t\t\tobj.func(el || parentel, obj);\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tconst parent = obj.el.parentNode.nodeName == 'HEAD' ? shadow.head : shadow.body;\r\n\t\t\t\t\t\tif (obj.func == replaceFunc)\r\n\t\t\t\t\t\t\treplaceid(obj.el, obj);\r\n\t\t\t\t\t\tparent.appendChild(obj.content);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst ctrls = processControls(shadow, apiResult.ctrl);\r\n\r\n\t\t\tnodes.forEach(function (n) {\r\n\t\t\t\tif (n.nested) return;\r\n\t\t\t\tn.func(n.el, n);\r\n\r\n\t\t\t\tconst ctrl = instance.findControl(n.el);\r\n\t\t\t\tif (ctrl) {\r\n\t\t\t\t\tconst t = ctrl.root.getAttribute('data-ctrl');\r\n\t\t\t\t\tif (ctrl.instance.widgetContentChanged)\r\n\t\t\t\t\t\tctrl.instance.widgetContentChanged();\r\n\t\t\t\t\telse if (window[t] && window[t]['widgetContentChanged']) {\r\n\t\t\t\t\t\twindow[t]['widgetContentChanged'](ctrl.instance);\r\n\t\t\t\t\t\tconsole.log('widget: ' + ctrl.id + ' widgetContentChanged ' + t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tpostProcessControls(ctrls);\r\n\t\t}\r\n\r\n\t\tif (apiResult.redirect) {\r\n\t\t\tstate.loc.url = apiResult.redirect.url;\r\n\t\t\tstate.loc.parms = apiResult.redirect.parms;\r\n\t\t\tif (apiResult.redirect.isBack)\r\n\t\t\t\tstate.loc.storage.pop();\r\n\t\t\twindow.history.pushState(state.loc, \"\", apiResult.redirect.url);\r\n\t\t}\r\n\r\n\t\tif (apiResult.arggroups) {\r\n\t\t\tstate.loc.arggroups = apiResult.arggroups;\r\n\t\t}\r\n\r\n\t\tconst current = document.getElementById(META_CURRENT);\r\n\t\tcurrent.setAttribute('data-href', state.loc.url);\r\n\r\n\t\tif (apiResult.clientactions) {\r\n\t\t\tvar ca;\r\n\t\t\tfor (var i = 0; i < apiResult.clientactions.length; i++) {\r\n\t\t\t\tca = apiResult.clientactions[i];\r\n\t\t\t\trunClientAction(ca.service, ca.callChain, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (apiResult.hardredirect) {\r\n\t\t\tif (apiResult.hardredirect.url)\r\n\t\t\t\twindow.location = apiResult.hardredirect.url;\r\n\t\t\telse\r\n\t\t\t\twindow.location = window.location;\r\n\t\t}\r\n\r\n\t\tif (window.homePage) homePage.countNavBodyHeight();\r\n\r\n\t\tconsole.log(\"renderApiResult complete\");\r\n\t}\r\n\r\n\tfunction processControls(doc, ctrlCollection) {\r\n\t\tconst ctrls = doc.querySelectorAll('[data-ctrl]');\r\n\t\tconst bindels = doc.querySelectorAll('[data-hasclientstate]');\r\n\t\tconst cntnrels = doc.querySelectorAll('[data-c]');\r\n\t\tconst newcntnrs = [];\r\n\r\n\t\tfor (var j = 0; j < cntnrels.length; j++) {\r\n\t\t\tnewcntnrs.push(cntnrels[j].id);\r\n\t\t}\r\n\r\n\t\tfor (var j = 0; j < bindels.length; j++) {\r\n\t\t\tconst node = bindels[j];\r\n\t\t\tconst st = getElementStateAttrs(node);\r\n\t\t\tif (!st) continue;\r\n\t\t\tconst container = cu.getThisOrParent(node, function (n) { return n.hasAttribute && n.hasAttribute('data-c'); });\r\n\t\t\tconst isnewc = container && newcntnrs.indexOf(container.id) >= 0;\r\n\r\n\t\t\tif (!state.ctrl[st.owner]) state.ctrl[st.owner] = {};\r\n\t\t\tconst nodectrl = state.ctrl[st.owner];\r\n\t\t\tconst doReplace = ctrlCollection && ctrlCollection[st.owner] &&\r\n\t\t\t\tctrlCollection[st.owner].replaceValues && ctrlCollection[st.owner].replaceValues.indexOf(st.name) >= 0;\r\n\t\t\tif (st.type == 'array') {\r\n\t\t\t\tconst ctrlvar = nodectrl[st.name] && !isnewc && !doReplace ? new ObservableArray(nodectrl[st.name]) : new ObservableArray();\r\n\t\t\t\tconst values = node.value.split(',').filter(String);\r\n\t\t\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\t\t\tif (ctrlvar.indexOf(values[i]) == -1)\r\n\t\t\t\t\t\tctrlvar.push(values[i]);\r\n\t\t\t\t}\r\n\t\t\t\tctrlvar.on('pop push shift unshift splice reverse sort', function () {\r\n\t\t\t\t\tnode.value = this.join(',');\r\n\t\t\t\t});\r\n\t\t\t\tnodectrl[st.name] = ctrlvar;\r\n\t\t\t\tnode.value = ctrlvar.join(',');\r\n\t\t\t} else if (st.type == 'value') {\r\n\t\t\t\tObject.defineProperty(nodectrl, st.name, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable: true,\r\n\t\t\t\t\tget: function () { return node.value; },\r\n\t\t\t\t\tset: function (val) { node.value = val; }\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst assignProps = (ctrlInst, srvInst) => {\r\n\t\t\tfor (var prop in srvInst) {\r\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(ctrlInst, prop) && Array.isArray(srvInst[prop]) && ctrlInst[prop] instanceof ObservableArray) {\r\n\t\t\t\t\tconst arr = ctrlInst[prop];\r\n\t\t\t\t\tarr.splice(0, arr.length);\r\n\t\t\t\t\tfor (var i = 0; i < srvInst[prop].length; i++) {\r\n\t\t\t\t\t\tarr.push(srvInst[prop][i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tctrlInst[prop] = srvInst[prop];\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 < ctrls.length; i++) {\r\n\t\t\tvar root = ctrls[i];\r\n\t\t\tconst t = root.getAttribute('data-ctrl');\r\n\t\t\tconst ctrl = instance.findControl(root);\r\n\t\t\tif (root.id != ctrl.id) root = doc.getElementById(ctrl.id);\r\n\r\n\t\t\tif (!ctrl.instance) {\r\n\t\t\t\tctrl.instance = {};\r\n\t\t\t\tstate.ctrl[ctrl.id] = ctrl.instance;\r\n\t\t\t}\r\n\r\n\t\t\tconst srvCtrl = ctrlCollection ? ctrlCollection[ctrl.id] : null;\r\n\r\n\t\t\tif (!ctrl.instance.type) {\r\n\t\t\t\tctrl.instance.type = t\r\n\t\t\t\tctrl.instance.root = ctrl.id;\r\n\t\t\t\tif (Tango.serviceProvider.components[t.toLowerCase()]) {\r\n\t\t\t\t\tctrl.instance = Tango.serviceProvider.components[t.toLowerCase()](ctrl.id, Tango.serviceProvider);\r\n\t\t\t\t\tstate.ctrl[ctrl.id] = ctrl.instance;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (srvCtrl && srvCtrl.props) {\r\n\t\t\t\t\tif (!ctrl.instance.props) ctrl.instance.props = {};\r\n\t\t\t\t\tctrl.instance.props = Object.assign(ctrl.instance.props, srvCtrl.props);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (ctrl.instance.init)\r\n\t\t\t\t\tctrl.instance.init();\r\n\t\t\t\telse if (window[t] && window[t]['init']) {\r\n\t\t\t\t\twindow[t]['init'](root, ctrl.instance);\r\n\t\t\t\t\tconsole.log('widget: ' + ctrl.id + ' init ' + t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (srvCtrl && srvCtrl.instance) {\r\n\t\t\t\tassignProps(ctrl.instance, srvCtrl.instance);\r\n\t\t\t}\r\n\r\n\t\t\tif (srvCtrl && srvCtrl.state) {\r\n\t\t\t\tif (!ctrl.instance.state) ctrl.instance.state = {};\r\n\t\t\t\tassignProps(ctrl.instance.state, srvCtrl.state);\r\n\t\t\t}\r\n\r\n\t\t\tif (ctrl.instance.widgetWillMount)\r\n\t\t\t\tctrl.instance.widgetWillMount();\r\n\t\t\telse if (window[t] && window[t]['widgetWillMount']) {\r\n\t\t\t\twindow[t]['widgetWillMount'](doc, ctrl.instance);\r\n\t\t\t\tconsole.log('widget: ' + ctrl.id + ' widgetWillMount ' + t);\r\n\t\t\t}\r\n\r\n\t\t\tif (srvCtrl)\r\n\t\t\t\tdelete ctrlCollection[ctrl.id];\r\n\t\t}\r\n\r\n\t\tif (ctrlCollection) {\r\n\t\t\tfor (var id in ctrlCollection) {\r\n\t\t\t\tconst srvCtrl = ctrlCollection[id];\r\n\t\t\t\tconst inst = state.ctrl[id];\r\n\t\t\t\tif (inst) {\r\n\t\t\t\t\tif (srvCtrl && srvCtrl.props) {\r\n\t\t\t\t\t\tif (!inst.props) inst.props = {};\r\n\t\t\t\t\t\tinst.props = Object.assign(inst.props, srvCtrl.props);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (srvCtrl && srvCtrl.instance) {\r\n\t\t\t\t\t\tassignProps(inst, srvCtrl.instance);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (srvCtrl && srvCtrl.state) {\r\n\t\t\t\t\t\tif (!inst.state) inst.state = {};\r\n\t\t\t\t\t\tassignProps(inst.state, srvCtrl.state);\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\treturn ctrls;\r\n\t}\r\n\r\n\tfunction postProcessControls(ctrls) {\r\n\t\tfor (var i = 0; i < ctrls.length; i++) {\r\n\t\t\tconst root = ctrls[i];\r\n\t\t\tconst ctrl = instance.findControl(root);\r\n\r\n\t\t\tif (ctrl) {\r\n\t\t\t\tconst t = root.getAttribute('data-ctrl');\r\n\t\t\t\tif (ctrl.instance.widgetDidMount)\r\n\t\t\t\t\tctrl.instance.widgetDidMount();\r\n\t\t\t\telse if (window[t] && window[t]['widgetDidMount']) {\r\n\t\t\t\t\twindow[t]['widgetDidMount'](ctrl.instance);\r\n\t\t\t\t\tconsole.log('widget: ' + ctrl.id + ' widgetDidMount ' + t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction runOnAjaxSend(el, target) {\r\n\t\tvar node = el;\r\n\t\tnode.classList.add('ajax-loading');\r\n\t\tdo {\r\n\t\t\tnode = cu.getParent(node, function (n) { return n.hasAttribute('data-ctrl'); });\r\n\t\t\tif (!node) break;\r\n\t\t\tconst t = node.getAttribute('data-ctrl');\r\n\t\t\tif (window[t] && window[t]['onAjaxSend']) {\r\n\t\t\t\twindow[t]['onAjaxSend'](el, target, state.ctrl[node.id]);\r\n\t\t\t\tconsole.log('widget: ' + node.id + ' onAjaxSend ' + t);\r\n\t\t\t}\r\n\t\t} while (true);\r\n\t}\r\n\r\n\tfunction runClientAction(service, callChain, iter) {\r\n\t\tif (iter > 10) return;\r\n\t\tvar caller = window[service];\r\n\t\tif (caller) {\r\n\t\t\tfor (var j = 0; j < callChain.length; j++) {\r\n\t\t\t\tstep = callChain[j];\r\n\t\t\t\tif (step.method == 'apply')\r\n\t\t\t\t\tcaller = caller[step.method](caller, Array.isArray(step.args) ? step.args : [step.args]);\r\n\t\t\t\telse\r\n\t\t\t\t\tcaller = caller[step.method](step.args);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconsole.log(\"wait for \" + service);\r\n\t\t\tsetTimeout(function () { runClientAction(service, callChain, iter++); }, 50);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showError(title, text, severity, showinframe) {\r\n\t\tif (window.dialog) {\r\n\t\t\tconst placeholder = 'container_err';\r\n\t\t\tconst errd = document.getElementById(placeholder);\r\n\t\t\tconst errt = document.getElementById(placeholder + '_title');\r\n\t\t\tconst errb = document.getElementById(placeholder + '_body');\r\n\t\t\tif (!state.ctrl[placeholder]) {\r\n\t\t\t\tstate.ctrl[placeholder] = {};\r\n\t\t\t\tstate.ctrl[placeholder].root = placeholder;\r\n\t\t\t}\r\n\t\t\terrt.innerHTML = title;\r\n\t\t\terrd.classList.remove('err');\r\n\t\t\terrd.classList.remove('warn');\r\n\t\t\terrd.classList.remove('info');\r\n\t\t\terrd.classList.add(severity);\r\n\r\n\t\t\tvar frame = document.getElementById(placeholder + '_frame');\r\n\r\n\t\t\tif (showinframe) {\r\n\t\t\t\tif (!frame) {\r\n\t\t\t\t\tframe = document.createElement('iframe');\r\n\t\t\t\t\tframe.id = placeholder + '_frame';\r\n\t\t\t\t\terrt.insertAdjacentElement('afterEnd', frame);\r\n\t\t\t\t}\r\n\t\t\t\tframe.classList.remove('hide');\r\n\t\t\t\terrb.classList.add('hide');\r\n\r\n\t\t\t\tframe.contentWindow.contents = text;\r\n\t\t\t\tframe.src = 'javascript:window[\"contents\"]';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (frame) frame.classList.add('hide');\r\n\t\t\t\terrb.classList.remove('hide');\r\n\t\t\t\terrb.innerHTML = '
' + text + '
';\r\n\t\t\t}\r\n\t\t\tdialog.open(placeholder);\r\n\t\t\t//dialog.widgetWillMount(document, state.ctrl[placeholder]);\r\n\t\t}\r\n\t\telse\r\n\t\t\tdocument.body.innerHTML = title + '
' + text + '
';\r\n\t}\r\n\r\n\tfunction textDecode(str) {\r\n\t\tif (window.TextDecoder) {\r\n\t\t\treturn new TextDecoder('utf-8').decode(str);\r\n\t\t}\r\n\t\tconst bytes = new Uint8Array(str);\r\n\t\tlet pos = 0;\r\n\t\tconst len = bytes.length;\r\n\t\tconst out = [];\r\n\r\n\t\twhile (pos < len) {\r\n\t\t\tconst byte1 = bytes[pos++];\r\n\t\t\tif (byte1 === 0) {\r\n\t\t\t\tbreak; // NULL\r\n\t\t\t}\r\n\r\n\t\t\tif ((byte1 & 0x80) === 0) { // 1-byte\r\n\t\t\t\tout.push(byte1);\r\n\t\t\t} else if ((byte1 & 0xe0) === 0xc0) { // 2-byte\r\n\t\t\t\tconst byte2 = bytes[pos++] & 0x3f;\r\n\t\t\t\tout.push(((byte1 & 0x1f) << 6) | byte2);\r\n\t\t\t} else if ((byte1 & 0xf0) === 0xe0) {\r\n\t\t\t\tconst byte2 = bytes[pos++] & 0x3f;\r\n\t\t\t\tconst byte3 = bytes[pos++] & 0x3f;\r\n\t\t\t\tout.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\r\n\t\t\t} else if ((byte1 & 0xf8) === 0xf0) {\r\n\t\t\t\tconst byte2 = bytes[pos++] & 0x3f;\r\n\t\t\t\tconst byte3 = bytes[pos++] & 0x3f;\r\n\t\t\t\tconst byte4 = bytes[pos++] & 0x3f;\r\n\r\n\t\t\t\t// this can be > 0xffff, so possibly generate surrogates\r\n\t\t\t\tlet codepoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\r\n\t\t\t\tif (codepoint > 0xffff) {\r\n\t\t\t\t\t// codepoint &= ~0x10000;\r\n\t\t\t\t\tcodepoint -= 0x10000;\r\n\t\t\t\t\tout.push((codepoint >>> 10) & 0x3ff | 0xd800)\r\n\t\t\t\t\tcodepoint = 0xdc00 | codepoint & 0x3ff;\r\n\t\t\t\t}\r\n\t\t\t\tout.push(codepoint);\r\n\t\t\t} else {\r\n\t\t\t\t// FIXME: we're ignoring this\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn String.fromCharCode.apply(null, out);\r\n\t}\r\n\r\n\tfunction getHistoryState() {\r\n\t\tvar s = window.history.state;\r\n\t\tif (!s) s = {\r\n\t\t\tstorage: [{}]\r\n\t\t};\r\n\r\n\t\tif (!s.parms || Object.keys(s.parms).length == 0) {\r\n\t\t\ts.parms = {};\r\n\t\t\ts.parms['p'] = document.head.getAttribute('data-page'); //state.loc.parms['p'];\r\n\t\t\ts.url = window.location.pathname + window.location.search;\r\n\t\t}\r\n\r\n\t\treturn s;\r\n\t}\r\n\r\n\tdocument.addEventListener('DOMContentLoaded', function () {\r\n\t\tstate.com.message = $(\"#topmessagecontainer\");\r\n\t\tsetTimeout(function () {\r\n\t\t\tif (state.com.request.default) state.com.message.css('display', 'block');\r\n\t\t}, 100);\r\n\t\t//document.body.className = '';\r\n\r\n\t\twindow.addEventListener('popstate', function (event) {\r\n\t\t\tconst s = getHistoryState();\r\n\r\n\t\t\ts.parms['c-new'] = 1;\r\n\t\t\ts.parms['e'] = DEF_EVENT_NAME;\r\n\t\t\tif (s.parms['r']) delete s.parms['r'];\r\n\t\t\tif (s.parms['c-prefix']) delete s.parms['c-prefix'];\r\n\t\t\tif (s.parms['c-type']) delete s.parms['c-type'];\r\n\r\n\t\t\tvar parser = document.createElement('a');\r\n\t\t\tparser.href = state.loc.url;\r\n\r\n\t\t\tif (window.location.pathname != parser.pathname) {\r\n\t\t\t\tstate.ctrl = {};\r\n\t\t\t\tstate.loc.storage.pop();\r\n\t\t\t\ts.storage = state.loc.storage;\r\n\t\t\t\tconst curStorage = s.storage.length > 0 ? s.storage[0] : {};\r\n\t\t\t\tfor (var key in curStorage) {\r\n\t\t\t\t\ts.parms[key] = curStorage[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstate.loc = s;\r\n\r\n\t\t\tif (s.onBack && !s.parms['c-new'])\r\n\t\t\t\trunClientAction(s.onBack.service, s.onBack.callChain, 0);\r\n\t\t\telse {\r\n\t\t\t\tconst settings = { url: getApiUrl(s.url), type: 'POST', data: JSON.stringify(s.parms) };\r\n\t\t\t\tajax(settings)\r\n\t\t\t\t\t.fail(instance.error)\r\n\t\t\t\t\t.then(onRequestResult)/*.then(instance.loadScripts)*/.then(processApiResponse);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tif (state.com.apiResult)\r\n\t\t\trenderApiResult();\r\n\t});\r\n\r\n\t//$(document).ajaxSend(beforeRequest);\r\n\t//$(document).ajaxStop(requestCompleted);\r\n\r\n\tconst current = document.getElementById(META_CURRENT);\r\n\tstate.loc.url = document.location.pathname + document.location.search;\r\n\tcurrent.setAttribute('data-href', state.loc.url);\r\n\t//instance.runEventFromElementWithApiResponse(current, { method: 'GET', url: state.loc.url, isfirstload: true });\r\n\tstate.loc.parms['c-new'] = 1;\r\n\t//history.replaceState(state.loc, document.title, state.loc.url);\r\n\r\n\treturn instance;\r\n}($, commonUtils);\r\n\r\nconst ObservableArray = (function () {\r\n\tfunction ObservableArray(collection) {\r\n\t\t// calling with `new` is optional\r\n\t\tif (!(this instanceof ObservableArray)) {\r\n\t\t\treturn new ObservableArray(collection);\r\n\t\t}\r\n\r\n\t\t// add items from passed `collection` to `this`\r\n\t\tcollection = collection || [];\r\n\t\tfor (var i = 0; i < collection.length; i++) {\r\n\t\t\tthis[i] = collection[i];\r\n\t\t}\r\n\r\n\t\t// set length so it acts like an array: http://stackoverflow.com/a/6599447/552067\r\n\t\tthis.length = collection.length;\r\n\r\n\t\t// keep list of observing functions\r\n\t\tthis.subscribers = {};\r\n\t}\r\n\r\n\tObservableArray.prototype = {\r\n\t\t// Subscribe a function to each event in a space-separated\r\n\t\t// list of events. If an event doesn't exist, create it.\r\n\t\ton: function (eventsStr, fn, callNow) {\r\n\t\t\teventsStr.split(' ').forEach(function (event) {\r\n\t\t\t\tif (!this.subscribers[event]) this.subscribers[event] = [];\r\n\t\t\t\tthis.subscribers[event].push(fn);\r\n\t\t\t}, this);\r\n\t\t\tif (callNow) fn.call(this);\r\n\t\t\treturn this;\r\n\t\t},\r\n\r\n\t\t// Pass a space-separated list of events and a function to unsubscribe a specific\r\n\t\t// function from those events, pass just the events to unsubscribe all functions\r\n\t\t// from those events, or don't pass any arguments to cancel all subscriptions.\r\n\t\toff: function (eventsStr, fn) {\r\n\t\t\tif (eventsStr) {\r\n\t\t\t\teventsStr.split(' ').forEach(function (event) {\r\n\t\t\t\t\tif (fn) {\r\n\t\t\t\t\t\tvar fnIndex = this.subscribers[event].indexOf(fn);\r\n\t\t\t\t\t\tif (fnIndex >= 0) this.subscribers[event].splice(fnIndex, 1);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.subscribers[event] = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this);\r\n\t\t\t} else {\r\n\t\t\t\tfor (var event in this.subscribers) {\r\n\t\t\t\t\tthis.subscribers[event] = [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t},\r\n\r\n\t\t// Notify all the subscribers of an event\r\n\t\ttrigger: function (event) {\r\n\t\t\tvar args = arguments;\r\n\t\t\tvar t = this;\r\n\t\t\tfunction caller(fn) {\r\n\t\t\t\tfn.apply(t, args);\r\n\t\t\t}\r\n\t\t\t(this.subscribers[event] || []).forEach(caller);\r\n\t\t\tif (event !== 'any') (this.subscribers.any || []).forEach(caller);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t};\r\n\r\n\tvar arrProto = Array.prototype;\r\n\r\n\t'pop push shift unshift splice reverse sort'\r\n\t\t.split(' ').forEach(function (methodName) {\r\n\t\t\tvar method = arrProto[methodName];\r\n\t\t\tObservableArray.prototype[methodName] = function () {\r\n\t\t\t\tvar returnValue = method.apply(this, arguments);\r\n\t\t\t\tvar args = [methodName].concat(arrProto.slice.call(arguments));\r\n\t\t\t\tthis.trigger.apply(this, args);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t// add the above native array methods to ObservableArray.prototype\r\n\t'slice concat join some every forEach map filter reduce reduceRight indexOf lastIndexOf toString toLocaleString'\r\n\t\t.split(' ').forEach(function (methodName) {\r\n\t\t\tObservableArray.prototype[methodName] = arrProto[methodName];\r\n\t\t});\r\n\r\n\treturn ObservableArray;\r\n})();\r\n\r\nwindow.Tango = {\r\n\tComponent: class {\r\n\t\troot;\r\n\t\ttype;\r\n\t\tprops;\r\n\t\tstate;\r\n\r\n\t\tinit() { }\r\n\t\twidgetWillMount() { }\r\n\t\twidgetDidMount() { }\r\n\t\twidgetContentChanged() { }\r\n\r\n\t\tconstructor(id, ctrltype, props) {\r\n\t\t\tthis.root = id;\r\n\t\t\tthis.type = ctrltype;\r\n\t\t\tthis.props = props;\r\n\t\t}\r\n\t},\r\n\r\n\tContainer: class {\r\n\t\troot;\r\n\r\n\t\tprepareParms() { }\r\n\r\n\t\tconstructor(el) {\r\n\t\t\tthis.root = el;\r\n\t\t}\r\n\t},\r\n\r\n\tEvent: class {\r\n\t\tcallbacks;\r\n\r\n\t\tadd(callback) {\r\n\t\t\tif (!this.callbacks)\r\n\t\t\t\tthis.callbacks = [callback];\r\n\t\t\telse\r\n\t\t\t\tthis.callbacks.push(callback);\r\n\t\t}\r\n\r\n\t\tinvoke(...parms) {\r\n\t\t\tif (this.callbacks) {\r\n\t\t\t\tfor (let i = 0; i < this.callbacks.length; i++) {\r\n\t\t\t\t\tif (this.callbacks[i](...parms) == false)\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconstructor(callback) {\r\n\t\t\tthis.add(callback);\r\n\t\t}\r\n\t},\r\n\r\n\tHtmlWriter: class {\r\n\t\tIcon(name, tip = null, color = null) {\r\n\t\t\tconst el = document.createElement('i')\r\n\t\t\tel.classList.add('icon', 'icon-' + name);\r\n\r\n\t\t\tif (tip)\r\n\t\t\t\tel.setAttribute('title', tip);\r\n\t\t\tif (color)\r\n\t\t\t\tel.style.color = color;\r\n\r\n\t\t\tconst svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n\t\t\tsvg.classList.add('svgicon-' + name);\r\n\r\n\t\t\tconst use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\r\n\t\t\tuse.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '/data/icons/svg#icon-' + name);\r\n\r\n\t\t\tsvg.appendChild(use);\r\n\t\t\tel.appendChild(svg);\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\r\n\t\tChangeIcon(el, name) {\r\n\t\t\tel.firstChild.firstChild.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '/data/icons/svg#icon-' + name);\r\n\t\t}\r\n\t},\r\n\r\n\tregisterComponent: function (cls, fabric) {\r\n\t\tconst ctrltype = cls.name.toLowerCase();\r\n\t\tthis.serviceProvider.components[ctrltype] = (id, sp) => {\r\n\t\t\tconst props = fabric ? fabric(sp) : {};\r\n\t\t\treturn new cls(id, ctrltype, props);\r\n\t\t}\r\n\t},\r\n\tregisterContainer: function (cls) {\r\n\t\tconst ctrltype = cls.name.toLowerCase();\r\n\t\tthis.serviceProvider.containers[ctrltype] = el => {\r\n\t\t\treturn new cls(el);\r\n\t\t}\r\n\t},\r\n\r\n\tpostComponentServerEvent: function (e) {\r\n\t\tconst target = this.serviceProvider.ajaxUtils.state.ctrl[e.ctrlName][e.eventName];\r\n\t\tif (!target.url) target.url = window.location.pathname;\r\n\t\tif (e.parms) target.parms = e.parms;\r\n\t\tthis.serviceProvider.ajaxUtils.postEventWithApiResponse(target);\r\n\t},\r\n\r\n\tserviceProvider: {\r\n\t\tcomponents: {},\r\n\t\tcontainers: {},\r\n\r\n\t\tcommonUtils,\r\n\t\tajaxUtils,\r\n\t\tdomActions\r\n\t}\r\n};","window.tangohub = function () {\r\n const connections = {};\r\n const url = \"tangoHub\";\r\n var prefix;\r\n var instance = {\r\n init: function (args) {\r\n prefix = args.prefix;\r\n if (!connections[url]) {\r\n var connection = new signalR.HubConnectionBuilder()\r\n .withUrl(\"/\" + url)\r\n .configureLogging(signalR.LogLevel.Information)\r\n .build();\r\n connections[url] = connection;\r\n\r\n connection.on(\"SetElementValue\", function (id, value) {\r\n if (prefix)\r\n id = prefix + \"_\" + id;\r\n ajaxUtils.setValue({ id: id, value: value });\r\n });\r\n connection.on(\"ProcessApiResponse\", function (apiResponse) {\r\n ajaxUtils.processApiResponse(JSON.parse(apiResponse));\r\n });\r\n connection.onclose(async () => {\r\n await start(connection);\r\n });\r\n\r\n connection.start().then(function () {\r\n console.log(\"SetServiceAction: \" + args.service + \".\" + args.action + \".\" + args.key);\r\n connection.invoke(\"SetServiceAction\", args.service, args.action, args.key).catch(function (err) {\r\n return console.error(err.toString());\r\n });\r\n }).catch(function (err) {\r\n return console.error(err.toString());\r\n });\r\n }\r\n else {\r\n console.log(\"SetServiceAction: \" + args.service + \".\" + args.action + \".\" + args.key);\r\n connections[url].invoke(\"SetServiceAction\", args.service, args.action, args.key).catch(function (err) {\r\n return console.error(err.toString());\r\n });\r\n }\r\n }\r\n };\r\n\r\n async function start(connection) {\r\n try {\r\n await connection.start();\r\n console.log(\"SignalR Connected.\");\r\n } catch (err) {\r\n console.log(err);\r\n setTimeout(function () { start(connection); }, 5000);\r\n }\r\n };\r\n return instance;\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\tid: moduleId,\n\t\tloaded: false,\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// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\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__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 757;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t757: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [216], () => (__webpack_require__(3359)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":[],"sourceRoot":""}