Submitted URL: http://login.securimate.com/
Effective URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Submission: On August 20 via api from US

Summary

This website contacted 1 IPs in 1 countries across 1 domains to perform 35 HTTP transactions. The main IP is 13.93.200.124, located in San Jose, United States and belongs to MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US. The main domain is cms.securimate.com.
TLS certificate: Issued by DigiCert SHA2 Secure Server CA on May 25th 2018. Valid for: 2 years.
This is the only time cms.securimate.com was scanned on urlscan.io!

urlscan.io Verdict: No classification

Domain & IP information

IP Address AS Autonomous System
1 1 96.45.83.163 16552 (TIGGEE)
3 38 13.93.200.124 8075 (MICROSOFT...)
35 1
Apex Domain
Subdomains
Transfer
39 securimate.com
login.securimate.com
cms.securimate.com
839 KB
35 1
Domain Requested by
38 cms.securimate.com 3 redirects cms.securimate.com
1 login.securimate.com 1 redirects
35 2

This site contains links to these domains. Also see Links.

Domain
securimate.zendesk.com
Subject Issuer Validity Valid
cms.securimate.com
DigiCert SHA2 Secure Server CA
2018-05-25 -
2020-05-29
2 years crt.sh

This page contains 1 frames:

Primary Page: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Frame ID: B1CCCD6B8800766D698EB4C980A54693
Requests: 35 HTTP requests in this frame

Screenshot


Page URL History Show full URLs

  1. http://login.securimate.com/ HTTP 301
    https://cms.securimate.com/cms/login/login.sec HTTP 302
    https://cms.securimate.com/ HTTP 302
    https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1 Page URL

Detected technologies

Overall confidence: 100%
Detected patterns
  • headers server /(?:Apache(?:$|\/([\d.]+)|[^\/-])|(?:^|\b)HTTPD)/i

Overall confidence: 100%
Detected patterns
  • script /([\d.]+)?\/modernizr(?:.([\d.]+))?.*\.js/i

Overall confidence: 100%
Detected patterns
  • script /jquery.*\.js(?:\?ver(?:sion)?=([\d.]+))?/i

Page Statistics

35
Requests

100 %
HTTPS

0 %
IPv6

1
Domains

2
Subdomains

1
IPs

1
Countries

837 kB
Transfer

1809 kB
Size

2
Cookies

Page URL History

This captures the URL locations of the websites, including HTTP redirects and client-side redirects via JavaScript or Meta fields.

  1. http://login.securimate.com/ HTTP 301
    https://cms.securimate.com/cms/login/login.sec HTTP 302
    https://cms.securimate.com/ HTTP 302
    https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1 Page URL

Redirected requests

There were HTTP redirect chains for the following requests:

Request Chain 31
  • https://cms.securimate.com/ HTTP 302
  • https://cms.securimate.com/?cbc=a2be1df9941605e7723044100416badd&rdat=1

35 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request /
cms.securimate.com/
Redirect Chain
  • http://login.securimate.com/
  • https://cms.securimate.com/cms/login/login.sec
  • https://cms.securimate.com/
  • https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
189 KB
38 KB
Document
General
Full URL
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
637b5ca49195f9be4baf4207189d7c8cd87b7dd4ba2656e7e87fc1a58caa3e0e
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Host
cms.securimate.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
none
Accept-Encoding
gzip, deflate, br
Cookie
PHPSESSID=vkv7iug00dqcik3a3t2eplklqg; sec_sess=e2616ed454abc0833d724a52d6bc3ae52e268b548b7c24c95c86055baba3f8de9e6936
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:06 GMT
Server
Apache
Cache-Control
no-store, no-cache, must-revalidate
Content-Encoding
gzip
Content-Type
text/html;charset=UTF-8
Expires
Thu, 19 Nov 1981 08:52:00 GMT
Pragma
no-cache
Strict-Transport-Security
max-age=63072000
X-Frame-Options
SAMEORIGIN
X-Xss-Protection
1; mode=block
Keep-Alive
timeout=15, max=98
Connection
Keep-Alive
Transfer-Encoding
chunked

Redirect headers

Date
Tue, 20 Aug 2019 04:55:06 GMT
Server
Apache
Cache-Control
no-store, no-cache, must-revalidate
Content-Type
text/html; charset=UTF-8
Expires
Thu, 19 Nov 1981 08:52:00 GMT
Location
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Pragma
no-cache
Strict-Transport-Security
max-age=63072000
X-Frame-Options
SAMEORIGIN
X-Xss-Protection
1; mode=block
Content-Length
0
Set-Cookie
PHPSESSID=vkv7iug00dqcik3a3t2eplklqg; path=/; secure sec_sess=e2616ed454abc0833d724a52d6bc3ae52e268b548b7c24c95c86055baba3f8de9e6936; path=/; domain=.cms.securimate.com; secure; HttpOnly
Keep-Alive
timeout=15, max=99
Connection
Keep-Alive
app.css
cms.securimate.com/assets/css/
7 KB
2 KB
Stylesheet
General
Full URL
https://cms.securimate.com/assets/css/app.css
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
94c67a9b5a876d5479ac7a34a113fa20375b31f7b664e457d353b60b032c6cdf
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:06 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005e-1a14-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
text/css
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
Content-Length
1927
X-Xss-Protection
1; mode=block
jqx.base.css
cms.securimate.com/assets/jq/jqx/jqwidgets/styles/
171 KB
24 KB
Stylesheet
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/jqx.base.css
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
76c978a9d837f0af10c57e6a4f537d0abafca1ea50cbf542ddd05047285b858b
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-2aa7b-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
text/css
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=100
X-Xss-Protection
1; mode=block
jqx.classic.css
cms.securimate.com/assets/css/jqx/
10 KB
2 KB
Stylesheet
General
Full URL
https://cms.securimate.com/assets/css/jqx/jqx.classic.css
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
50a12ab5365fbcaf24f5e1581c81daa7f16d4067ce460e5a56d97f96f35e2633
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:06 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005e-26de-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
text/css
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=100
Content-Length
1832
X-Xss-Protection
1; mode=block
colorScheme-0.css
cms.securimate.com/assets/css/main/skins/
873 B
855 B
Stylesheet
General
Full URL
https://cms.securimate.com/assets/css/main/skins/colorScheme-0.css
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
5ce7a3de7e5dec90dab211522c25824f58a1ccfb3bc94287774c7a342f2b9258
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:06 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005e-369-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
text/css
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=100
Content-Length
432
X-Xss-Protection
1; mode=block
modernizr.custom.js
cms.securimate.com/assets/js/Modernizr/
14 KB
6 KB
Script
General
Full URL
https://cms.securimate.com/assets/js/Modernizr/modernizr.custom.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
5a35a895f9c6277e62a5c48470c1b9fdc20adba118c1552270952a958df216be
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:09 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca50061-3813-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=100
X-Xss-Protection
1; mode=block
jquery.js
cms.securimate.com/assets/jq/
93 KB
33 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jquery.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
723b5079110ff8d2f552bb668e1cc53a4ea36cc173233861b766523c1b3d9ec0
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-17449-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=96
X-Xss-Protection
1; mode=block
jsrender.min.js
cms.securimate.com/assets/jq/plugin/tpl/
17 KB
9 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/plugin/tpl/jsrender.min.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
0898b2d773c55d7f5a8fb4fd1174e618d0b411efc14e2ceeba22a1eccc609928
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:09 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca50061-448f-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=99
Content-Length
8344
X-Xss-Protection
1; mode=block
simutil.js
cms.securimate.com/assets/js/
5 KB
3 KB
Script
General
Full URL
https://cms.securimate.com/assets/js/simutil.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
9708606afd52f4792392cf5b7b2adff284e018bede03eef2684487867c6bb4a8
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:09 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca50061-1585-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=99
Content-Length
2247
X-Xss-Protection
1; mode=block
rxLoader.min.js
cms.securimate.com/assets/js/
4 KB
2 KB
Script
General
Full URL
https://cms.securimate.com/assets/js/rxLoader.min.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
a82cc70982b54080d9dd9574c38bb1f77610f685ff3e71f343c5743aafea98a8
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:09 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca50061-109b-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=99
Content-Length
1824
X-Xss-Protection
1; mode=block
jqxcore.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
36 KB
11 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxcore.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
da5533b9a66f1cdcb8304af4f0b99348c369c1125505491ed6e40ef087ae924e
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-9020-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=99
X-Xss-Protection
1; mode=block
jqxresponse.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
13 KB
4 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxresponse.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
40c0b89461994220bd667486616921855aaca1a8f0164f2af14753291d409f5c
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-339f-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=98
Content-Length
4147
X-Xss-Protection
1; mode=block
jqxpanel.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
14 KB
4 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxpanel.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
cf75644af6556605b80a5a0137ca96c1c44152455912b2b1d8d99ac8d92f7847
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-377d-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=98
Content-Length
3480
X-Xss-Protection
1; mode=block
jqxwindow.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
52 KB
12 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxwindow.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
c38499aadc367ebebc10a47525461d4b6168d1a0c478f360271637206f6aa34a
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-cf99-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=98
X-Xss-Protection
1; mode=block
jqxscrollbar.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
28 KB
7 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxscrollbar.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
8c7fcabf3795a63c649ea1a97573040113577064d5cb8719a1ecc2918e4cf3ac
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-71e3-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=95
X-Xss-Protection
1; mode=block
jqxbuttons.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
18 KB
5 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxbuttons.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
ac28a6c4c8a52000235daef371a4f9e12c059e4f29e5a133abf540b635218257
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-4608-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=99
Content-Length
4449
X-Xss-Protection
1; mode=block
jqxcalendar.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
63 KB
15 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxcalendar.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
bd0c39c97651ea36f105583813fdc5e3cf9fa2aec91dbaa73a4560b14f838435
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-fa92-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=98
X-Xss-Protection
1; mode=block
jqxnotification.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
8 KB
3 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxnotification.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
590b2b2fe7f495655772b9bbf3c1c75b5025da757b3374ce4b1cd1da97dbe283
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-1f41-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
Content-Length
2492
X-Xss-Protection
1; mode=block
jqxdatetimeinput.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
94 KB
21 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxdatetimeinput.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
37bab86dadee3f86698444ddce1abaeb48f4e8d92eaeb3931ecfa54924ccecce
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-179b6-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
X-Xss-Protection
1; mode=block
jqxtooltip.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
22 KB
4 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxtooltip.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
7a1a16e81dd9debf22f08aa52c1a6990c6d3eddbcf05d61d0584bbaa1dd9e739
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-5945-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=98
Content-Length
3728
X-Xss-Protection
1; mode=block
jqxtabs.js
cms.securimate.com/assets/jq/jqx/jqwidgets/
51 KB
11 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxtabs.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
1d3cb49af8c277a9e780d3d271f12e4e3d8015bf2320f7345436c2475aacd156
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-ca0f-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=94
Content-Length
10611
X-Xss-Protection
1; mode=block
globalize.js
cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/
14 KB
6 KB
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/globalize.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
2b009570b73aaf6726a54c0c884d6237129d39f13b359c976e365044eefdd465
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-3779-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
Content-Length
5497
X-Xss-Protection
1; mode=block
globalize.culture.en-US.js
cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/
229 B
604 B
Script
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/globalize.culture.en-US.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
e6a0e7f75b11b8f964af73b85e2ce781179258a153420e2000e31b1705c81b66
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-e5-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=96
Content-Length
169
X-Xss-Protection
1; mode=block
MultiSelect.css
cms.securimate.com/assets/css/Widgets/
903 B
772 B
Stylesheet
General
Full URL
https://cms.securimate.com/assets/css/Widgets/MultiSelect.css
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
85963d2b9b34eef85a75ffc66cc3fdc1c2cdb65fed818de876e4ecba817f3989
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:06 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005e-387-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
text/css
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=100
Content-Length
349
X-Xss-Protection
1; mode=block
MultiSelect.js
cms.securimate.com/assets/js/widgets/
5 KB
2 KB
Script
General
Full URL
https://cms.securimate.com/assets/js/widgets/MultiSelect.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
ada32cfa1f0baff5d28ae2302f69d31796039e6bb60670f7da9e3860f798549c
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Tue, 28 May 2019 20:42:58 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ced9d52-1438-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
Content-Length
1696
X-Xss-Protection
1; mode=block
jqxtree.js
cms.securimate.com//assets/jq/jqx/jqwidgets/
46 KB
12 KB
Script
General
Full URL
https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxtree.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
da3f2bd706593c7231cec8e4e56fcb0aa7779c0bd312eda2e828d5dc47cc767a
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:07 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-b61e-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=97
X-Xss-Protection
1; mode=block
jqxdragdrop.js
cms.securimate.com//assets/jq/jqx/jqwidgets/
33 KB
8 KB
Script
General
Full URL
https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxdragdrop.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
cbe5a0832afc881ed0e56ae16277bfc95d36460ab1cbafb790262d935da7f303
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-854c-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=93
Content-Length
7907
X-Xss-Protection
1; mode=block
jqxmenu.js
cms.securimate.com//assets/jq/jqx/jqwidgets/
49 KB
11 KB
Script
General
Full URL
https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxmenu.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
2f659dd1a2186ce358d466a14b91825f005b130f17b0a3211c04c56408e04741
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-c248-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=96
X-Xss-Protection
1; mode=block
jqxcheckbox.js
cms.securimate.com//assets/jq/jqx/jqwidgets/
13 KB
4 KB
Script
General
Full URL
https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxcheckbox.js
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
a22d6f9cd2e88e121dcabcd45931b5f064123d729866838af87bd568bb482976
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-342c-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
application/javascript
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=96
Content-Length
3252
X-Xss-Protection
1; mode=block
logo.png
cms.securimate.com/assets/image/
16 KB
17 KB
Image
General
Full URL
https://cms.securimate.com/assets/image/logo.png
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
d0545f52bac5c94b8e0c5e232eda0e6a46ad218fc8c4afc22ec26cb4abbcaa3d
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Tue, 28 May 2019 20:42:58 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ced9d52-41fa-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
image/png
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=95
Content-Length
16773
X-Xss-Protection
1; mode=block
login-background.jpg
cms.securimate.com/assets/image/
535 KB
522 KB
Image
General
Full URL
https://cms.securimate.com/assets/image/login-background.jpg
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/assets/jq/jquery.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
8d354ab7963436fdb40cf23c45839df5bd26e8be1aa71434ea2462110be58ed3
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Tue, 28 May 2019 20:42:58 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ced9d52-85a62-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
image/jpeg
Transfer-Encoding
chunked
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=95
X-Xss-Protection
1; mode=block
MultiError.html
cms.securimate.com/assets/js/views/
133 B
494 B
XHR
General
Full URL
https://cms.securimate.com/assets/js/views/MultiError.html?_=1566276907525
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/assets/jq/jquery.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
63f5563365eb1616a6c00da9c9c998765547db3855bcef905d0f6f5b716f6c7f
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Accept
text/plain, */*; q=0.01
Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
X-Requested-With
XMLHttpRequest
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
cors

Response headers

Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:09 GMT
Server
Apache
Etag
W/"5ca50061-85"
X-Frame-Options
SAMEORIGIN
Strict-Transport-Security
max-age=63072000
Content-Type
text/html
Connection
Keep-Alive
Keep-Alive
timeout=15, max=95
Content-Length
120
X-Xss-Protection
1; mode=block
/
cms.securimate.com/
Redirect Chain
  • https://cms.securimate.com/
  • https://cms.securimate.com/?cbc=a2be1df9941605e7723044100416badd&rdat=1
189 KB
38 KB
XHR
General
Full URL
https://cms.securimate.com/?cbc=a2be1df9941605e7723044100416badd&rdat=1
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
bf79fd246b243b3ab7f2be84a8d23cf579f0583e268687cddfc44c2f9df7f777
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Referer
https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Tue, 20 Aug 2019 04:55:08 GMT
Content-Encoding
gzip
Server
Apache
X-Frame-Options
SAMEORIGIN
Connection
Keep-Alive
Content-Type
text/html;charset=UTF-8
Cache-Control
no-store, no-cache, must-revalidate
Transfer-Encoding
chunked
Strict-Transport-Security
max-age=63072000
Keep-Alive
timeout=15, max=95
X-Xss-Protection
1; mode=block
Expires
Thu, 19 Nov 1981 08:52:00 GMT

Redirect headers

Pragma
no-cache
Date
Tue, 20 Aug 2019 04:55:08 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Connection
Keep-Alive
Content-Type
text/html; charset=UTF-8
Location
https://cms.securimate.com/?cbc=a2be1df9941605e7723044100416badd&rdat=1
Cache-Control
no-store, no-cache, must-revalidate
Strict-Transport-Security
max-age=63072000
Keep-Alive
timeout=15, max=96
Content-Length
0
X-Xss-Protection
1; mode=block
Expires
Thu, 19 Nov 1981 08:52:00 GMT
close.png
cms.securimate.com/assets/jq/jqx/jqwidgets/styles/images/
307 B
753 B
Image
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/images/close.png
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/assets/jq/jquery.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
cd2f189be4a97e523e93be277c42ffb62d806143a03e2399e52250fee3d500db
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/jqx.base.css
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:09 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-133-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
image/png
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=94
Content-Length
330
X-Xss-Protection
1; mode=block
icon-up.png
cms.securimate.com/assets/jq/jqx/jqwidgets/styles/images/
130 B
563 B
Image
General
Full URL
https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/images/icon-up.png
Requested by
Host: cms.securimate.com
URL: https://cms.securimate.com/assets/jq/jquery.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
13.93.200.124 San Jose, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US),
Reverse DNS
ma.securimate.com
Software
Apache /
Resource Hash
34e29ba80eabe03e27d58aea64eeac53ac366fbfc81f2569b5b87c42f3b0235d
Security Headers
Name Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/jqx.base.css
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Tue, 20 Aug 2019 04:55:09 GMT
Content-Encoding
gzip
Last-Modified
Wed, 03 Apr 2019 18:50:07 GMT
Server
Apache
X-Frame-Options
SAMEORIGIN
Etag
"5ca5005f-82-gzip"
Vary
Accept-Encoding
Strict-Transport-Security
max-age=63072000
Content-Type
image/png
Connection
Keep-Alive
Accept-Ranges
bytes
Keep-Alive
timeout=15, max=94
Content-Length
141
X-Xss-Protection
1; mode=block

Verdicts & Comments Add Verdict or Comment

36 JavaScript Global Variables

These are the non-standard "global" variables defined on the window object. These can be helpful in identifying possible client-side frameworks and code.

object| S6t8nFFl3DNQKi3frF9HZIHTisBM object| html5 object| Modernizr function| yepnope function| $ function| jQuery object| appNS function| jqxBaseFramework function| originalVal object| jqxArgs function| jqxPanel function| jqxWindow function| jqxScrollBar function| jqxButton function| jqxLinkButton function| jqxRepeatButton function| jqxToggleButton function| jqxCalendar function| jqxNotification function| jqxDateTimeInput function| jqxTooltip function| jqxTabs function| Globalize function| jqxTree function| jqxDragDrop function| jqxListBoxDragDrop function| jqxTreeDragDrop function| jqxMenu function| jqxCheckBox boolean| DEBUG_APPFORM object| DEBUG_APPFORM_ELEMENTS object| browserNames string| dataName string| prefix object| match object| jQuery1111025019101847408853

2 Cookies

Domain/Path Name / Value
.cms.securimate.com/ Name: sec_sess
Value: a322720fb9edf7a139d8cf5a46f11a5a0803070ba89e6794c21df091348fa1501d5e3de95ffa5fffd679
cms.securimate.com/ Name: PHPSESSID
Value: 8oo6b80gjncuug232pbkeg2p4c

1 Console Messages

Source Level URL
Text
console-api log URL: https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1(Line 178)
Message:
{"event":{"type":"ajaxError","timeStamp":1566276909305,"jQuery1111025019101847408853":true,"isTrigger":3,"namespace":"","namespace_re":null,"target":{"location":{"href":"https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","ancestorOrigins":{},"origin":"https://cms.securimate.com","protocol":"https:","host":"cms.securimate.com","hostname":"cms.securimate.com","port":"","pathname":"/","search":"?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","hash":""},"_html5shiv":1,"jQuery1111025019101847408853":1},"delegateTarget":{"location":{"href":"https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","ancestorOrigins":{},"origin":"https://cms.securimate.com","protocol":"https:","host":"cms.securimate.com","hostname":"cms.securimate.com","port":"","pathname":"/","search":"?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","hash":""},"_html5shiv":1,"jQuery1111025019101847408853":1},"currentTarget":{"location":{"href":"https://cms.securimate.com/?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","ancestorOrigins":{},"origin":"https://cms.securimate.com","protocol":"https:","host":"cms.securimate.com","hostname":"cms.securimate.com","port":"","pathname":"/","search":"?cbc=3ef45036f46d3a093947dd70481bb7f9&rdat=1","hash":""},"_html5shiv":1,"jQuery1111025019101847408853":1},"handleObj":{"type":"ajaxError","origType":"ajaxError","guid":2,"namespace":""}},"jqxhr":{"readyState":4,"responseText":"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n\n <title>Securimate</title>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n\n \n\n <script type=\"text/javascript\">\n document.write('<style id=\"Q1j4wqdmRQS1YtmjtELe3\" type=\"text/css\">body { display:none !important; } </style>');\n if (self === top) {\n var Q1j4wqdmRQS1YtmjtELe3 = document.getElementById(\"Q1j4wqdmRQS1YtmjtELe3\");\n Q1j4wqdmRQS1YtmjtELe3.parentNode.removeChild(Q1j4wqdmRQS1YtmjtELe3);\n } else {\n top.location = self.location;\n }\n </script>\n\n <link rel=\"stylesheet\" href=\"https://cms.securimate.com/assets/css/app.css\">\n\n\n <link rel=\"shortcut icon\" href=\"https://cms.securimate.com/assets/image/favicon.ico\" />\n\n <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/styles/jqx.base.css\" />\n <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cms.securimate.com/assets/css/jqx/jqx.classic.css\" />\n <link rel=\"stylesheet\" href=\"https://cms.securimate.com/assets/css/app.css\">\n <link rel=\"stylesheet\" type=\"text/css\"\n href=\"https://cms.securimate.com/assets/css/main/skins/colorScheme-0.css\" media=\"screen\" />\n\n\n <!--[if lt IE 9]>\n <script type=\"text/javascript\" src=\"/assets/js/json2.js\"></script>\n <![endif]-->\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/js/Modernizr/modernizr.custom.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jquery.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/plugin/tpl/jsrender.min.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/js/simutil.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/js/rxLoader.min.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxcore.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxresponse.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxpanel.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxwindow.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxscrollbar.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxbuttons.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxcalendar.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxnotification.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxdatetimeinput.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxtooltip.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/jqxtabs.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/globalize.js\"></script>\n <script type=\"text/javascript\" src=\"https://cms.securimate.com/assets/jq/jqx/jqwidgets/globalization/globalize.culture.en-US.js\"></script>\n\n \n<script type=\"text/javascript\">\nif (!String.prototype.includes) {\n String.prototype.includes = function() {\n 'use strict';\n return String.prototype.indexOf.apply(this, arguments) !== -1;\n } ;\n}\n\nappNS.namespace('jqx');\nappNS.jqx = {\n theme: 'classic',\n inputHeight: 19,\n centerModal: function(jqid) {\n $(jqid).addClass('pnlShadow');\n appNS.util.centerDiv(jqid);\n }\n} ;\n\nappNS.namespace('tpmBase');\n\n(function(o) {\n\nvar base = appNS.tpmBase;\n\nbase.ajaxReq = function(op, data, srvHandler, alwaysFunc, failFunc, callbackFunc) {\n var overlay = null, posted = data;\n if ($.type(posted) !== 'object') {\n posted = { } ;\n }\n posted['op'] = op;\n posted['pgAuth'] = 'MSvg8nHNHdghIwLOFLD';\n if (($.type(posted['usePgOverlay']) !== 'undefined') && posted['usePgOverlay'] === true) {\n overlay = new appNS.util.pgOverlay().init();\n }\n var jqxhr = $.post(srvHandler, posted, function(res, resStatus) {\n var notice, noticeTpl = 'info';\n if ($.type(res.Redirect) === 'string' && res.Redirect.length > 0) {\n window.location = res.Redirect;\n } else if ($.type(res.Result) === 'undefined') {\n base.showMsgAd('An Error Occurred', 'Unexpected response');\n } else if (res.Result == 1) {\n noticeTpl = 'success';\n if ($.type(res.FuncName) === 'string' && res.FuncName.length > 0) {\n if ($.type(res.Args) === 'array' && res.Args.length > 0) {\n base.run(res.FuncName, res.Args);\n } else {\n base.run(res.FuncName, arguments);\n }\n }\n if ($.type(callbackFunc) === 'function') {\n callbackFunc(res, resStatus);\n } else if ($.type(callbackFunc) === 'string') {\n if ($.type(res.Args) === 'array' && res.Args.length > 0) {\n base.run(callbackFunc, res.Args);\n } else {\n base.run(callbackFunc, arguments);\n }\n }\n } else if (($.type(res.ErrMsg) === 'string' && res.ErrMsg.length > 0) || $.type(res.MultiErr) === 'object') {\n if ($.type(res.ErrTitle) != 'string' || res.ErrTitle == '') {\n res.ErrTitle = 'An Error Occurred';\n }\n if ($.type(res.MultiErr) === 'object') {\n base.multiError(res.ErrTitle, res.MultiErr, res.ErrMsgWidth, res.ErrBtnLabel);\n } else {\n base.showMsgAd(res.ErrTitle, res.ErrMsg, res.ErrMsgWidth, res.ErrBtnLabel);\n }\n }\n if ($.type(res.AppNotice) === 'array') {\n if (res.AppNotice.length == 1) {\n notice = new appNS.appnotice(res.AppNotice[0], { template: noticeTpl } );\n } else if (res.AppNotice.length == 2) {\n notice = new appNS.appnotice(res.AppNotice[0], res.AppNotice[1]);\n }\n }\n } , 'json');\n jqxhr.fail(function(res, resStatus) {\n if ($.type(failFunc) === 'string') {\n base.run(failFunc, arguments);\n } else if ($.type(failFunc) === 'function') {\n failFunc(res, resStatus);\n } else {\n if ($.type(res.responseJSON) === 'object'\n && $.type(res.responseJSON.ErrMsg) === 'string'\n && res.responseJSON.ErrMsg.length > 0\n && $.type(res.responseJSON.ErrTitle) === 'string'\n && res.responseJSON.ErrTitle.length > 0\n ) {\n base.showMsgAd(res.responseJSON.ErrTitle,\n res.responseJSON.ErrMsg,\n res.responseJSON.ErrMsgWidth,\n res.responseJSON.ErrBtnLabel\n );\n } else {\n base.showMsgAd('Operation Failed', 'No response from server.');\n }\n }\n }\n );\n jqxhr.always(function(res, resStatus) {\n if (overlay !== null) {\n overlay.remove();\n overlay = null;\n }\n if ($.type(alwaysFunc) === 'string') {\n if ($.type(res.Args) === 'array' && res.Args.length > 0) {\n base.run(alwaysFunc, res.Args);\n } else {\n base.run(alwaysFunc, arguments);\n }\n } else if ($.type(alwaysFunc) === 'function') {\n alwaysFunc(res, resStatus);\n }\n }\n );\n return jqxhr;\n} ;\n\n$(document).ajaxError(function(event, jqxhr, settings, err) {\n if (window.console === undefined || window.console.log === undefined) {\n return;\n }\n var obj = { event: event, jqxhr: jqxhr, settings: settings, err: err } ;\n console.log(JSON.stringify(obj));\n} );\n\nbase.run = function(funcName) {\n var ctx = window, args = [], namespaces, func;\n if (arguments.length > 1 && $.isArray(arguments[1])) {\n args = arguments[1];\n }\n namespaces = funcName.split(\".\");\n func = namespaces.pop();\n for(var i = 0; i < namespaces.length; i++) {\n ctx = ctx[namespaces[i]];\n }\n return ctx[func].apply(ctx, args);\n} ;\n\nbase.msgBoxRefCnt = 1;\nbase.showMsg = function(headHTML, bodyHTML, pnlWidth, btnLabel) {\n\n var basis, width = 'auto',\n msg = '(no message)',\n title = 'Message',\n refCnt = base.msgBoxRefCnt++,\n winID = 'app-msgbox' + refCnt,\n btnID = 'app-msgbox-ok' + refCnt,\n btnLbl = 'Ok',\n winJqRef = '#' + winID,\n btnJqRef = '#' + btnID,\n bodySty = 'margin: 10px; max-width: 700px;max-height: 500px; overflow: auto';\n\n if ($.type(pnlWidth) == 'number') {\n width = pnlWidth;\n }\n if ($.type(headHTML) == 'string' && headHTML != '') {\n title = headHTML;\n }\n if ($.type(bodyHTML) == 'string' && bodyHTML != '') {\n msg = bodyHTML;\n }\n if ($.type(btnLabel) == 'string' && btnLabel != '') {\n btnLbl = btnLabel;\n }\n\n basis = '\\\n <div id=\"' + winID + '\">\\\n <div><div class=\"pnlTitle\">' + headHTML + '</div></div>\\\n <div>\\\n <div style=\"' + bodySty + '\">' + bodyHTML + '</div>\\\n <div class=\"pnlButtonsRt\"><button id=\"' + btnID + '\" class=\"btn\">' + btnLbl + '</button></div>\\\n <div class=\"pnlFauxFooter\"></div>\\\n </div>\\\n </div>';\n $(document.body).append(basis);\n\n $(btnJqRef).jqxButton( { theme: appNS.jqx.theme, width: 'auto' } );\n $(btnJqRef).click(function() {\n $(winJqRef).jqxWindow('destroy');\n } );\n $(winJqRef).jqxWindow( {\n theme: appNS.jqx.theme,\n maxWidth: 800,\n minWidth: 200,\n resizable: false,\n width: width,\n height: 'auto',\n okButton: btnJqRef,\n showCloseButton: false,\n isModal: true\n } );\n if (width == 'auto') {\n $(winJqRef).jqxWindow('width', $(winJqRef).width() + 2);\n }\n appNS.jqx.centerModal(winJqRef);\n return winJqRef;\n} ;\n\nbase.showMsgAd = function(headHTML, bodyHTML, pnlWidth) {\n\n var msg = '(no message)',\n title = 'Message',\n refCnt = base.msgBoxRefCnt++,\n winJqRef = '#app-msgbox' + refCnt,\n diag;\n\n if (($.type(bodyHTML) == 'string' && bodyHTML != '') || $.type(bodyHTML) == 'object') {\n msg = bodyHTML;\n }\n if ($.type(msg) === 'string') {\n if ($.type(pnlWidth) == 'number') {\n msg = '<div style=\"width:' + pnlWidth + 'px;\">' + msg + '</div>';\n }\n msg = '<div style=\"padding-right: 20px\">' + msg + '</div>'; \n } else if ($.type(msg) == 'object') {\n if ($.type(pnlWidth) == 'number') {\n msg = $('<div style=\"width:' + pnlWidth + 'px;\"></div>')\n .append($('<div style=\"padding-right: 20px\"><div>')\n .append(msg)\n );\n } else {\n msg = $('<div style=\"padding-right: 20px\"></div>').append(msg);\n }\n }\n\n if ($.type(headHTML) == 'string' && headHTML != '') {\n title = headHTML;\n }\n diag = new appNS.appdiag(\n winJqRef,\n title,\n msg,\n null,\n { simpleClose: true }\n );\n diag.show();\n} ;\n\n\nbase.multiError = function(headHTML, errors, pnlWidth, btnLabel) {\n return base.showMsgAd(headHTML, $.render.multiError(errors), pnlWidth, btnLabel);\n} ;\n\n\n$(document).ready(function()\n{\n appNS.rxLoader.baseUrl(\"https://cms.securimate.com/\")\n .loadFiles([\n 'assets/js/views/MultiError||multiError.html'\n ]);\n\n } );\n\n} )();\n</script>\n\n \n<style type=\"text/css\">\n\n.appForm {\n float: left;\n}\n.appForm .appFormElmntOuterCntnr {\n float: left;\n padding: 5px 0px;\n min-height: 18px;\n line-height: 18px;\n}\n.appForm .appFormElmntOuterCntnr .appFormLabelCntnr {\n float: left;\n padding-right: 5px;\n min-height: 18px;\n line-height: 18px;\n}\n.appForm .appFormElmntOuterCntnr .appFormLabelCntnr label {\n float: left;\n min-height: 18px;\n line-height: 18px;\n}\n.appForm .appFormElmntOuterCntnr .appFormLabelCntnr label.labelCol {\n text-align: right;\n min-height: 18px;\n line-height: 18px;\n}\n.appForm .appFormElmntOuterCntnr .appFormElmntInnerCntnr {\n float: left;\n min-height: 18px;\n line-height: 18px;\n}\n.appForm .appFormElmntOuterCntnr .appFormElmntInnerCntnr .appFormElement {\n float: left;\n}\n.appForm .appFormCheckbox .appFormElmntInnerCntnr .appFormElement {\n margin-top: 3px;\n}\n.appForm .appFormParagraph {\n width: 100%;\n}\n.appForm .appFormRadio .fullWidth {\n width: 100%;\n float: left;\n margin: 5px;\n}\n.appForm .appFormRadio .appFormRadioButton {\n float: left;\n margin: 5px;\n}\n.appForm .appFormRadio .appFormRadioButton input {\n margin-right: 5px;\n float: left;\n}\n.appForm .appFormRadio .appFormRadioButton label {\n margin-right: 5px;\n line-height: 12px;\n float: left;\n font-weight: normal;\n}\n.appForm .appFormRadio .appFormRadioNoWrap {\n clear: none;\n margin: 5px;\n}\n.appForm .appFormRadio .appFormRadioWrap {\n clear: right;\n margin-bottom: 8px;\n}\n.appForm .appFormScroller {\n vertical-align: middle;\n display: inline-block;\n}\n.appForm .addScrollee {\n background: url(/assets/image/yui/sprite.png) 0px 1800px;\n width: 15px;\n height: 20px;\n display: block;\n}\n.appForm .deleteScrollee {\n background: url(/assets/image/sm_delete.png);\n width: 16px;\n height: 16px; \n float: left;\n display: block;\n cursor: pointer;\n}\n.appForm .restoreScrollees {\n background: url(/assets/image/refresh.png);\n width: 16px;\n height: 16px; \n float: left;\n display: block;\n cursor: pointer;\n}\n.appForm .appFormScroller .scrollArrow {\n display: inline-block;\n cursor: pointer;\n width: 26px;\n height: 20px;\n}\n.appForm .appFormScroller .leftScrollArrow {\n background: url(/assets/image/yui/sprite.png) 0px 1705px;\n margin-right: 5px;\n}\n.appForm .appFormScroller .rightScrollArrow {\n background: url(/assets/image/yui/sprite.png) 0px 1655px;\n margin-left: 5px;\n} \n.appForm .appFormScroller .appFormScrollerCntnr {\n overflow: hidden;\n white-space: nowrap;\n padding: 0;\n margin: 0;\n vertical-align: top;\n display: inline-block;\n}\n.appForm .appFormScroller .appFormScrollerCntnr .appFormScrollee {\n margin: 0;\n display: inline-block;\n}\n.appForm .appFormHidden, .appForm .appFormElmntHidden {\n display: none;\n}\n.pnlButtonFooter button.hidden {\n display: none;\n}\n</style><script type=\"text/javascript\">\nappNS.namespace('appformButton');\nappNS.appformButton = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.formType, type: 'string', inArray: ['inline', 'dialog'] } ,\n { item: config.label, type: 'string' } ,\n { item: config.onClickHandler, type: 'string', skip: (config.formType === 'inline') }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (!$.isEmptyObject(appNS.appformButton.config)\n && appNS.appformButton.config.debug !== undefined\n && appNS.appformButton.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformButton.debugger('Button element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformButton.debugger(['VALIDATION RESULT: ' + rtn, 'Button element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformButton.config = config;\n appNS.appformButton.debugger('Button element init started');\n if (appNS.appformButton.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n label = cfg.label,\n formType = cfg.formType,\n disabled = ((cfg.disabled !== undefined) ? cfg.disabled : false),\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n handler = ((cfg.onClickHandler !== undefined) ? cfg.onClickHandler : ''),\n handlerArgs = ((cfg.onClickHandlerArgs !== undefined && cfg.onClickHandlerArgs.constructor === Array) ? cfg.onClickHandlerArgs : []),\n inDlgFtr = ((cfg.inDialogFooter !== undefined) ? cfg.inDialogFooter : true),\n rtn = {\n output: ((formType == 'inline' || (formType == 'dialog' && !inDlgFtr))\n ? appNS.appformButton.buildForInline(id, label, disabled, hidden, classes)\n : appNS.appformButton.buildForDialog(label, handler, handlerArgs, inDlgFtr, disabled, hidden, classes)\n ),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, handler, handlerArgs],\n id: id,\n inDialogFooter: inDlgFtr,\n classes: classes\n } ;\n appNS.appformButton.debugger('Button element init completed');\n return rtn;\n } ,\n buildForInline: function(id, label, disabled, hidden, classes) {\n appNS.appformButton.debugger('Button element buildForInline started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || disabled === undefined || (disabled !== true && disabled !== false)\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformButton.debugger([\n 'buildForInline: insufficient arguments',\n 'id:', id, 'label:', label, 'disabled:', disabled, 'hidden:', hidden, 'classes:', classes\n ]);\n return '';\n }\n var domID = id,\n cntnrID = 'appFormButton_' + domID,\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n button = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n button = '<div id=\"' + cntnrID + '\" class=\"appFormButton' + classesStr + hiddenClass + '\">'\n + '<button id=\"' + domID + '\" type=\"button\" class=\"appFormElement btn\"';\n\n if (disabled) {\n button += ' disabled=\"disabled\"';\n }\n\n button += '>' + label + '</button></div>';\n appNS.appformButton.debugger('Button element buildForInline completed');\n return button;\n } ,\n buildForDialog: function(label, handler, handlerArgs, inDlgFtr, disabled, hidden, classes) {\n appNS.appformButton.debugger('Button element buildForDialog started');\n if (label === undefined || label === null || label === ''\n || disabled === undefined || (disabled !== true && disabled !== false)\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n || inDlgFtr === undefined || (inDlgFtr !== true && inDlgFtr !== false)\n || handler === undefined || handlerArgs === undefined || handlerArgs.constructor !== Array\n ) {\n appNS.appformButton.debugger([\n 'buildForDialog: insufficient arguments',\n 'label:', label, 'disabled:', disabled, 'hidden:', hidden, 'inDlgFtr:', inDlgFtr,\n 'classes:', classes, 'handler:', handler, 'handlerArgs:', handlerArgs\n ]);\n return '';\n }\n if (disabled) {\n classes.push('disabled');\n }\n if (hidden) {\n classes.push('hidden');\n }\n var rtn = {\n label: label,\n func: handler,\n args: handlerArgs,\n classes: classes,\n inModalFooter: inDlgFtr\n } ;\n appNS.appformButton.debugger('Button element buildForDialog completed');\n return rtn;\n } ,\n jsHandler: function(domID, handler, handlerArgs) {\n appNS.appformButton.debugger('Button element jsHandler started');\n if (domID === undefined || domID === null || domID === ''\n || handler === undefined || handler === null || handler === ''\n ) {\n appNS.appformButton.debugger('jsHandler: insufficient arguments');\n return;\n }\n $(domID).click(function() {\n if (handlerArgs !== undefined && handlerArgs.length) {\n handler.apply(appNS.appformButton, handlerArgs);\n } else {\n handler();\n }\n } );\n appNS.appformButton.debugger('Button element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformCheckbox');\nappNS.appformCheckbox = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.label, type: 'string' }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformCheckbox.config !== undefined\n && !$.isEmptyObject(appNS.appformCheckbox.config)\n && appNS.appformCheckbox.config.debug !== undefined\n && appNS.appformCheckbox.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformCheckbox.debugger('Checkbox element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformCheckbox.debugger(['VALIDATION RESULT: ' + rtn, 'Checkbox element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformCheckbox.config = config;\n appNS.appformCheckbox.debugger('Checkbox element init started');\n if (appNS.appformCheckbox.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n rtn = { } ,\n domID = '#' + id,\n cntnrID = '#appFormCheckbox_' + id,\n label = cfg.label,\n labelFirst = ((cfg.labelFirst !== undefined) ? cfg.labelFirst : true),\n checked = ((cfg.checked !== undefined) ? cfg.checked : false),\n disabled = ((cfg.disabled !== undefined) ? cfg.disabled : false),\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n handler = ((cfg.onClickHandler !== undefined) ? cfg.onClickHandler : ''),\n handlerArgs = ((cfg.onClickHandlerArgs !== undefined && cfg.onClickHandlerArgs.constructor === Array)\n ? cfg.onClickHandlerArgs : []\n ),\n rtn = {\n output: appNS.appformCheckbox.build(id, label, labelFirst, checked, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, checked, disabled, handler, handlerArgs]\n } ;\n if (!labelFirst) {\n rtn.css.push(\n { selector: cntnrID + ' .appFormElmntInnerCntnr', rules: { width: '', float: 'left' } } ,\n { selector: domID, rules: { float: 'left' } } ,\n { selector: cntnrID + ' .appFormElmntInnerCntnr .appFormLabelCntnr', rules: { width: '', float: 'left' } } ,\n { selector: cntnrID + ' .appFormElmntInnerCntnr .appFormLabelCntnr label', rules: { width: '' } }\n );\n }\n appNS.appformCheckbox.debugger('Checkbox element init completed');\n return rtn;\n } ,\n build: function(id, label, labelFirst, checked, hidden, classes) {\n appNS.appformCheckbox.debugger('Checkbox element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || labelFirst === undefined || (labelFirst !== true && labelFirst !== false)\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformCheckbox.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormCheckbox_' + id,\n label = ((labelFirst && label.substr(label.length -1) != ':') ? label + ':' : label),\n checked = ((checked) ? ' checked' : ''),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n customArgs = '',\n checkbox = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n checkbox = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormCheckbox' + classesStr + hiddenClass + '\">';\n\n if (labelFirst) {\n checkbox += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n checkbox += '<div class=\"appFormElmntInnerCntnr\">' + '<input type=\"checkbox\" id=\"' + domID + '\"' + checked + ' class=\"appFormElement\" />';\n\n if (!labelFirst) {\n checkbox += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n checkbox += '</div></div>';\n appNS.appformCheckbox.debugger('Checkbox element build completed');\n return checkbox;\n } ,\n jsHandler: function(domID, checked, disabled, handler, handlerArgs) {\n appNS.appformCheckbox.debugger('Checkbox element jsHandler started');\n if (domID === undefined || domID === null || domID === '') {\n appNS.appformCheckbox.debugger('jsHandler: insufficient arguments');\n return;\n }\n if (checked !== undefined && checked) {\n $(domID).prop('checked', true);\n }\n if (disabled !== undefined && disabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).click(function() {\n var args = [],\n checked = ($(this).prop('checked'));\n args.push(checked);\n if (handlerArgs !== undefined && handlerArgs.constructor === Array && handlerArgs.length > 0) {\n handler.apply(appNS.appformCheckbox, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformCheckbox, args);\n }\n } );\n }\n appNS.appformCheckbox.debugger('Checkbox element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformDiv');\nappNS.appformDiv = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformDiv.config !== undefined\n && !$.isEmptyObject(appNS.appformDiv.config)\n && appNS.appformDiv.config.debug !== undefined\n && appNS.appformDiv.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformDiv.debugger('Div element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformDiv.debugger(['VALIDATION RESULT: ' + rtn, 'Div element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformDiv.config = config;\n appNS.appformDiv.debugger('Div element init started');\n if (appNS.appformDiv.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n content = ((cfg !== null && cfg.content !== undefined && cfg.content !== '') ? cfg.content : ''),\n hidden = ((cfg !== null && cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformDiv.build(id, content, hidden, classes),\n css: ((cfg !== null && cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : [])\n } ;\n appNS.appformDiv.debugger('Div element init completed');\n return rtn;\n } ,\n build: function(id, content, hidden, classes) {\n appNS.appformDiv.debugger('Div element build started');\n if (id === undefined || id === null || id === '' || content === undefined\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformDiv.debugger('build: insufficient arguments');\n return '';\n }\n\n var domID = id,\n cntnrID = 'appFormDiv_' + domID,\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n div = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n div = '<div id=\"' + cntnrID + '\" class=\"appFormDiv' + classesStr + hiddenClass + '\">'\n + '<div id=\"' + domID + '\" class=\"appFormElement\">'\n + content\n + '</div></div>';\n appNS.appformDiv.debugger('Div element build completed');\n return div;\n }\n} ;\n</script><script type=\"text/javascript\">\nappNS.namespace('appformHidden');\nappNS.appformHidden = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformHidden.config !== undefined\n && !$.isEmptyObject(appNS.appformHidden.config)\n && appNS.appformHidden.config.debug !== undefined\n && appNS.appformHidden.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformHidden.debugger('Hidden element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformHidden.debugger(['VALIDATION RESULT: ' + rtn, 'Hidden element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformHidden.config = config;\n appNS.appformHidden.debugger('Hidden element init started');\n if (appNS.appformHidden.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n value = ((cfg !== null && cfg.value !== undefined && cfg.value !== '') ? cfg.value : ''),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = { output: appNS.appformDiv.build(id, value, classes) } ;\n appNS.appformHidden.debugger('Hidden element init completed');\n return rtn;\n } ,\n build: function(id, value, classes) {\n appNS.appformHidden.debugger('Hidden element build started');\n if (id === undefined || id === null || id === ''\n || value === undefined || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformHidden.debugger('jsHandler: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormHidden_' + domID,\n value = value,\n classesStr = '',\n hidden = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n hidden = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormHidden' + classesStr + '\">'\n + '<div class=\"appFormElmntInnerCntnr\">'\n + '<input id=\"' + domID + '\" class=\"appFormElement\" type=\"hidden\" value=\"' + value + '\" />'\n + '</div>'\n + '</div>';\n appNS.appformHidden.debugger('Hidden element build completed');\n return hidden;\n }\n} ;\n</script>\n\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cms.securimate.com/assets/css/Widgets/MultiSelect.css\">\n<script src=\"https://cms.securimate.com/assets/js/widgets/MultiSelect.js\"></script>\n<script type=\"text/javascript\">\nappNS.namespace('appformMultiselect');\nappNS.appformMultiselect = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.label, type: 'string' } ,\n { item: config.items, type: 'array' }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformMultiselect.config !== undefined\n && !$.isEmptyObject(appNS.appformMultiselect.config)\n && appNS.appformMultiselect.config.debug !== undefined\n && appNS.appformMultiselect.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformMultiselect.debugger('Multiselect element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformMultiselect.debugger(['VALIDATION RESULT: ' + rtn, 'Multiselect element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformMultiselect.config = config;\n appNS.appformMultiselect.debugger('Multiselect element init started');\n if (appNS.appformMultiselect.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n label = cfg.label,\n items = cfg.items,\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n handler = ((cfg.onDoneHandler !== undefined) ? cfg.onDoneHandler : ''),\n handlerArgs = ((cfg.onDoneHandlerArgs !== undefined && cfg.onDoneHandlerArgs.constructor === Array) ? cfg.onDoneHandlerArgs : []),\n rtn = {\n output: appNS.appformMultiselect.build(id, label, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, '#appFormMultiSelect_' + id + '_trigger', label, items, handler, handlerArgs]\n } ;\n appNS.appformMultiselect.debugger('Multiselect element init completed');\n return rtn;\n } ,\n build: function(id, label, hidden, classes) {\n appNS.appformMultiselect.debugger('Multiselect element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformMultiselect.debugger('buildForInline: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormMultiSelect_' + domID,\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n multiselect = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n multiselect = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormMultiSelect'\n + classesStr + hiddenClass + '\">'\n + '<a id=\"' + cntnrID + '_trigger\" class=\"vizlink\" href=\"#\" class=\"appFormElement\">' + label + '</a>'\n + '</div>';\n appNS.appformMultiselect.debugger('Multiselect element build completed');\n return multiselect;\n } ,\n jsHandler: function(modalID, triggerID, label, items, handler, handlerArgs) {\n appNS.appformMultiselect.debugger('Multiselect element jsHandler started');\n if (modalID === undefined || modalID === null || modalID === ''\n || triggerID === undefined || triggerID === null || triggerID === ''\n || label === undefined || label === '' || label === null\n || items === undefined || items.constructor !== Array || items.length <= 0\n ) {\n appNS.appformMultiselect.debugger('jsHandler: insufficient arguments');\n return;\n }\n var multiselect = new appNS.mulsel(modalID, label, items, handler, handlerArgs);\n $(triggerID).click(function() {\n multiselect.show();\n } );\n appNS.appformMultiselect.debugger('Multiselect element jsHandler completed');\n return { type: 'multiselect', object: multiselect} ;\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformPanel');\nappNS.appformPanel = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.panelElements, type: 'array' }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformPanel.config !== undefined\n && !$.isEmptyObject(appNS.appformPanel.config)\n && appNS.appformPanel.config.debug !== undefined\n && appNS.appformPanel.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformPanel.debugger('Panel element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformPanel.debugger(['VALIDATION RESULT: ' + rtn, 'Panel element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformPanel.config = config;\n appNS.appformPanel.debugger('Panel element init started');\n if (appNS.appformPanel.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n domID = '#appFormPanel_' + id,\n active = ((cfg.active !== undefined && cfg.active !== null) ? cfg.active : false),\n width = (((cfg.width !== undefined && cfg.width !== null) ? cfg.width : 300) + 'px'),\n height = (((cfg.height !== undefined && cfg.height !== null) ? cfg.height : 300) + 'px'),\n sizeMode = ((cfg.sizeMode !== undefined && cfg.sizeMode !== null) ? cfg.sizeMode : 'fixed'),\n rtn = {\n output: appNS.appformPanel.build(id, active),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: [id, domID, active, width, height, sizeMode],\n id: id,\n panelElements: cfg.panelElements\n } ;\n rtn.css.push( { selector: domID, rules: { border: 'none' } } );\n appNS.appformPanel.debugger('Panel element init completed');\n return rtn;\n } ,\n build: function(id, active) {\n appNS.appformPanel.debugger('Panel element build started');\n if (id === undefined || id === null || id === ''\n || active === undefined || (active !== true && active !== false)\n ) {\n appNS.appformPanel.debugger(['build: insufficient arguments', 'id:', id, 'active:', active]);\n return '';\n }\n var domID = 'appFormPanel_' + id,\n hiddenClass = ((!active) ? ' appFormElmntHidden' : '');\n appNS.appformPanel.debugger('Panel element build completed');\n return '<div id=\"' + domID + '\" class=\"appFormPanel' + hiddenClass + '\">';\n } ,\n jsHandler: function(id, domID, active, width, height, sizeMode) {\n appNS.appformPanel.debugger('Panel element jsHandler started');\n if (id === undefined || id === null || id === ''\n || domID === undefined || domID === null || domID === ''\n || active === undefined || (active !== true && active !== false)\n || width === undefined || height === undefined || sizeMode === undefined\n ) {\n appNS.appformPanel.debugger([\n 'jsHandler: insufficient arguments', 'id:', id, 'domID:', domID, 'active:', active,\n 'width:', width, 'height:', height, 'sizeMode:', sizeMode\n ]);\n return;\n }\n $(domID).jqxPanel( { sizeMode: sizeMode, width: width, height: height } );\n\n if (active) {\n $.each($('.appformModalPanelButton'), function(i) {\n if (!$(this).hasClass(id)) {\n $(this).hide();\n }\n } );\n }\n appNS.appformPanel.debugger('Panel element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformParagraph');\nappNS.appformParagraph = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.content, type: 'string' }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformParagraph.config !== undefined\n && !$.isEmptyObject(appNS.appformParagraph.config)\n && appNS.appformParagraph.config.debug !== undefined\n && appNS.appformParagraph.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformParagraph.debugger('Paragraph element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformParagraph.debugger(['VALIDATION RESULT: ' + rtn, 'Paragraph element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformParagraph.config = config;\n appNS.appformParagraph.debugger('Paragraph element init started');\n if (appNS.appformParagraph.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n content = cfg.content,\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformParagraph.build(id, content, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : [])\n } ;\n appNS.appformParagraph.debugger('Paragraph element init completed');\n return rtn;\n } ,\n build: function(id, content, hidden, classes) {\n appNS.appformParagraph.debugger('Paragraph element build started');\n if (id === undefined || id === null || id === '' || content === undefined\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformParagraph.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormParagraph_' + domID,\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n paragraph = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n paragraph = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormParagraph'\n + classesStr + hiddenClass + '\">'\n + '<div class=\"appFormElmntInnerCntnr\">'\n + '<p id=\"' + domID + '\" class=\"appFormElement\">' + content + '</p>'\n + '</div></div>';\n appNS.appformParagraph.debugger('Paragraph element build started');\n return paragraph;\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformPassword');\nappNS.appformPassword = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformPassword.config !== undefined\n && !$.isEmptyObject(appNS.appformPassword.config)\n && appNS.appformPassword.config.debug !== undefined\n && appNS.appformPassword.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformPassword.debugger('Password element validated started');\nappNS.appformPassword.debugger(['id', id, 'config', config]);\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformPassword.debugger(['VALIDATION RESULT: ' + rtn, 'Password element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformPassword.config = config;\n appNS.appformPassword.debugger('Password element init started');\n if (appNS.appformPassword.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n label = ((cfg !== null && cfg.label !== undefined) ? cfg.label : ''),\n defaultVal = ((cfg !== null && cfg.defaultVal !== undefined && cfg.defaultVal !== null) ? cfg.defaultVal : ''),\n disabled = ((cfg !== null && cfg.disabled !== undefined) ? cfg.disabled : false),\n hidden = ((cfg !== null && cfg.hidden !== undefined) ? cfg.hidden : false),\n handler = ((cfg !== null && cfg.onChangeHandler !== undefined) ? cfg.onChangeHandler : ''),\n handlerArgs = ((cfg !== null && cfg.onChangeHandlerArgs !== undefined && cfg.onChangeHandlerArgs.constructor === Array)\n ? cfg.onChangeHandlerArgs : []\n ),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformPassword.build(id, label, defaultVal, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, disabled, handler, handlerArgs]\n } ;\n appNS.appformPassword.debugger('Password element init completed');\n return rtn;\n } ,\n build: function(id, label, defaultVal, hidden, classes) {\n appNS.appformPassword.debugger('Password element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || defaultVal === undefined\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformPassword.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n password = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n password = '<div id=\"appformPassword_' + domID + '\" class=\"appFormElmntOuterCntnr appformPassword' + classesStr + hiddenClass + '\">';\n\n if (label != '') {\n password += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n password += '<div class=\"appFormElmntInnerCntnr\"><input type=\"password\" id=\"' + domID + '\" class=\"appFormElement\"';\n if (defaultVal != '') {\n password += ' value=\"' + defaultVal + '\"';\n }\n\n password += ' /></div></div>';\n appNS.appformPassword.debugger('Password element build completed');\n return password;\n } ,\n jsHandler: function(domID, disabled, handler, handlerArgs) {\n appNS.appformPassword.debugger('Password element jsHandler started');\n if (domID === undefined || domID === null || domID === '') {\n appNS.appformPassword.debugger('jsHandler: insufficient arguments');\n return;\n }\n var args;\n if (disabled !== undefined && disabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).on('change', function() {\n args = [];\n args.push($(this).val());\n if (handlerArgs !== undefined && handlerArgs.length > 0) {\n handler.apply(appNS.appformPassword, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformPassword, args);\n }\n } );\n }\n appNS.appformPassword.debugger('Password element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformRadio');\nappNS.appformRadio = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.options, type: 'array' }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformRadio.config !== undefined\n && !$.isEmptyObject(appNS.appformRadio.config)\n && appNS.appformRadio.config.debug !== undefined\n && appNS.appformRadio.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformRadio.debugger('Radio element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformRadio.debugger(['VALIDATION RESULT: ' + rtn, 'Radio element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformRadio.config = config;\n appNS.appformRadio.debugger('Radio element init started');\n if (appNS.appformRadio.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n options = ((cfg.options !== undefined) ? cfg.options : []),\n selectedVal = ((cfg.selectedVal !== undefined) ? cfg.selectedVal : ''),\n label = ((cfg.label !== undefined) ? cfg.label : ''),\n wrapOptions = ((cfg.wrapOptions !== undefined) ? cfg.wrapOptions : false),\n disabled = ((cfg !== null && cfg.disabled !== undefined) ? cfg.disabled : false),\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n handler = ((cfg.onClickHandler !== undefined) ? cfg.onClickHandler : ''),\n handlerArgs = ((cfg.onClickHandlerArgs !== undefined && cfg.onClickHandlerArgs.constructor === Array)\n ? cfg.onClickHandlerArgs : []\n ),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformRadio.build(id, options, label, wrapOptions, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: [id, options, selectedVal, disabled, handler, handlerArgs]\n } ;\n appNS.appformRadio.debugger('Radio element init completed');\n return rtn;\n } ,\n build: function(id, options, label, wrapOptions, hidden, classes) {\n appNS.appformRadio.debugger('Radio element build started');\n if (id === undefined || id === null || id === ''\n || options === undefined || options.constructor !== Array || options.length <= 0\n || label === undefined\n || wrapOptions === undefined || (wrapOptions !== true && wrapOptions !== false)\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformRadio.debugger('build: insufficient arguments');\n return '';\n }\n var cntnrID = 'appFormRadio_' + id,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n innerCntnrClass = ((label == '') ? 'fullWidth' : 'appFormElmntInnerCntnr'),\n radio = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n radio = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormRadio' + classesStr + hiddenClass + '\">';\n\n if (label != '') {\n radio += '<div class=\"appFormLabelCntnr\"><label>' + label + '</label></div>';\n }\n\n radio += '<div class=\"' + innerCntnrClass + '\">';\n\n $.each(options, function(i, option) {\n var domID = id + '_' + option.value,\n name = option.name,\n value = option.value,\n label = option.label,\n wrapClass = ((wrapOptions) ? ' appFormRadioWrap' : ' appFormRadioNoWrap');\n\n radio += '<div class=\"appFormRadioButton' + wrapClass + '\">'\n + '<input type=\"radio\" id=\"' + domID + '\" name=\"' + name + '\" '\n + 'class=\"appFormElement\" value=\"' + value + '\" />'\n + '<label class=\"appFormRadioButtonLbl\" for=\"' + domID + '\">' + label + '</label>'\n + '</div>';\n } );\n radio += '</div></div>';\n appNS.appformRadio.debugger('Radio element build completed');\n return radio;\n } ,\n jsHandler: function(id, options, selectedVal, disabled, handler, handlerArgs) {\n appNS.appformRadio.debugger('Radio element jsHandler started');\n if (id === undefined || id === null || id === ''\n || options === undefined || options.constructor !== Array || options.length <= 0\n ) {\n appNS.appformRadio.debugger('jsHandler: insufficient arguments');\n return;\n }\n var args;\n $.each(options, function(i, option) {\n var domID = '#' + id + '_' + option.value,\n value = option.value,\n optDisabled = ((option.disabled !== undefined && option.disabled) || (disabled !== undefined && disabled)),\n selected = (selectedVal !== undefined && (value == selectedVal)),\n args;\n if (selected) {\n $(domID).prop('checked', true);\n }\n if (optDisabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).click(function() {\n args = [];\n args.push($(this).val());\n if (handlerArgs !== undefined && handlerArgs.constructor === Array && handlerArgs.length > 0) {\n handler.apply(appNS.appformRadio, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformRadio, args);\n }\n } );\n }\n } );\n appNS.appformRadio.debugger('Radio element jsHandler completed');\n }\n} ;\n</script><script type=\"text/javascript\">\nappNS.namespace('appformScroller');\nappNS.appformScroller = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformScroller.config !== undefined\n && !$.isEmptyObject(appNS.appformScroller.config)\n && appNS.appformScroller.config.debug !== undefined\n && appNS.appformScroller.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformScroller.debugger('Scroller element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformScroller.debugger(['VALIDATION RESULT: ' + rtn, 'Scroller element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformScroller.config = config;\n appNS.appformScroller.debugger('Scroller element init started');\n if (appNS.appformScroller.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n hidden = ((cfg !== null && cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.css == Array) ? cfg.css : []),\n width = ((cfg !== null && cfg.width !== undefined) ? cfg.width : 0),\n contentWidth = (width - (26 + 26 + 10)), height = ((cfg !== null && cfg.height !== undefined) ? cfg.height : 0),\n cntnrID = 'appFormScroller_' + id,\n arrowMarginTop = (((height*.5) > 20) ? ((height*.5) - 20) : 0),\n scrolleeIDs = ((cfg !== null && cfg.scrolleeIDs !== undefined && cfg.scrolleeIDs.constructor === Array) ? cfg.scrolleeIDs : []),\n scrolleeCfg = ((cfg !== null && cfg.scrolleeCfg !== undefined && !$.isEmptyObject(cfg.scrolleeCfg)) ? cfg.scrolleeCfg : { } ),\n scrolleesContent = ((cfg !== null && cfg.scrolleesContent !== undefined && cfg.scrolleesContent.constructor === Array)\n ? cfg.scrolleesContent : []\n ),\n rebuildScrollerCfg = ((cfg !== null && cfg.rebuildScrollerCfg !== undefined && !$.isEmptyObject(cfg.rebuildScrollerCfg))\n ? cfg.rebuildScrollerCfg : { }\n ),\n rtn = {\n output: appNS.appformScroller.build(id, scrolleesContent, scrolleeIDs, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: [id, width, height, scrolleeIDs, scrolleesContent, scrolleeCfg, rebuildScrollerCfg]\n } ;\n\n rtn.css.push(\n { selector: '#' + cntnrID, rules: { width: width + 'px', height: height + 'px' } } ,\n { selector: '#' + id, rules: { width: contentWidth + 'px', height: height + 'px' } } ,\n { selector: '#' + id + ' .appFormScrollee', rules: { width: contentWidth + 'px', height: height + 'px' } } ,\n { selector: '#appFormScrollerLeft_' + id, rules: { opacity: '0' } } ,\n { selector: '#' + cntnrID + ' .scrollArrow', rules: { marginTop: arrowMarginTop + 'px' } }\n );\n if (scrolleesContent.length <= 1) {\n rtn.css.push(\n { selector: '#appFormScrollerRight_' + id, rules: { display: 'none' } }\n );\n }\n appNS.appformScroller.debugger('Scroller element init completed');\n return rtn;\n } ,\n build: function(id, scrolleesContent, scrolleeIDs, hidden, classes) {\n appNS.appformScroller.debugger('Scroller element build started');\n if (id === undefined || id === null || id === ''\n || scrolleesContent === undefined || scrolleesContent.constructor !== Array\n || scrolleeIDs === undefined || scrolleeIDs.constructor !== Array\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformScroller.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormScroller_' + domID,\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n scroller = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n scroller = '<div id=\"' + cntnrID + '\" class=\"appFormScroller' + classesStr + hiddenClass + '\">'\n + '<div id=\"appFormScrollerLeft_' + domID + '\" class=\"leftScrollArrow scrollArrow\" />'\n + '<div id=\"' + domID + '\" class=\"appFormElement appFormScrollerCntnr\">';\n\n if (scrolleesContent.length > 0) {\n $.each(scrolleesContent, function(i) {\n var scrolleeID = '';\n if (scrolleeIDs.length > 0 && scrolleeIDs[i].length > 0) {\n scrolleeID = 'id=\"appFormScrollee_' + scrolleeIDs[i] + '\" ';\n }\n scroller += '<div ' + scrolleeID + 'class=\"appFormScrollee\">' + this + '</div>';\n } );\n }\n\n scroller += '</div>'\n + '<div id=\"appFormScrollerRight_' + domID + '\" class=\"rightScrollArrow scrollArrow\" />'\n + '</div>';\n appNS.appformScroller.debugger('Scroller element build completed');\n return scroller;\n } ,\n jsHandler: function(id, width, height, scrolleeIDs, scrolleesContent, scrolleeCfg, rebuildScrollerCfg) {\n appNS.appformScroller.debugger('Scroller element jsHandler started');\n if (id === undefined || id === null || id === '' || width < 100) {\n appNS.appformScroller.debugger(['jsHandler: insufficient arguments', 'id', id, 'width', width, 'height', height]);\n return '';\n }\n var that = appNS.appformScroller,\n domID = id,\n scrolleeIDs = ((scrolleeIDs !== undefined) ? scrolleeIDs : []),\n scrolleeIDsOrig = JSON.stringify(scrolleeIDs),\n scrolleesContent = ((scrolleesContent !== undefined) ? scrolleesContent : []),\n origContent = scrolleesContent,\n scrolleeCfg = (!$.isEmptyObject(scrolleeCfg) ? scrolleeCfg : { } ),\n rebuildScrollerCfg = (!$.isEmptyObject(rebuildScrollerCfg) ? rebuildScrollerCfg : { } ),\n width = (width - (26 + 26 + 10) + 'px'), height = (((height !== undefined) ? height : 0) + 'px'),\n contentNum = ((scrolleesContent.length > 0) ? (scrolleesContent.length - 1) : 0),\n loadedBySelector = false,\n Scroller = function(container, left, right) {\n var self = this;\n this.c = container;\n this.l = left;\n this.r = right;\n this.sID = 0; this.prettyScroll = function(sto, sid) {\n var mid = sid || ++this.sID,\n c = self.c,\n w = c.scrollWidth,\n x = c.scrollLeft,\n t = (sto === undefined ? x : sto),\n dx = 10;\n if (mid !== self.sID) return;\n if (t > w) t = w;\n else if (t < 0) t = 0;\n if (Math.abs(t - x) <= dx) return c.scrollLeft = t;\n if (t > x) c.scrollLeft = x + dx;\n else c.scrollLeft = x - dx;\n setTimeout(function() { self.prettyScroll(t, mid) } , 10);\n } ;\n this.addScrollee = function(cfg, selectorObj) {\n if ($('#' + domID + ' div.appFormScrollee').length > 0) {\n contentNum++;\n } else {\n $('#' + domID).show(); }\n var scrolleeID = 'appFormScrollee_' + cfg.scrolleeIDPart,\n newScrollee = cfg.template,\n replaceWith = '';\n\n $.each(cfg.vars, function() {\n if (this == '::index::') {\n replaceWith = contentNum;\n } else if ($(selectorObj).is('select')) {\n if (this == '::selectorSelectChangedValTxt::') {\n replaceWith = $(selectorObj).children('option').filter(':selected').text();\n } else if (this == '::selectorSelectChangedVal::') {\n replaceWith = selectorObj.value;\n }\n } else if ($(selectorObj).attr('rel') !== undefined && $(selectorObj).attr('rel') !== false) {\n if (this == '::selectorRel::') {\n replaceWith = $(selectorObj).attr('rel');\n }\n }\n scrolleeID = scrolleeID.replace(new RegExp(this, 'g'), replaceWith);\n newScrollee = newScrollee.replace(new RegExp(this, 'g'), replaceWith);\n } );\n\n $('#' + domID).append(\n '<div id=\"' + scrolleeID + '\" class=\"appFormScrollee\">' + newScrollee + '</div>'\n );\n $('#' + scrolleeID).css( { width: width, height: height } );\n self.setDeleteListener('#' + scrolleeID, cfg);\n self.fireCallBack(cfg.addCallBackMethod, cfg.addCallBackArgs, cfg.vars, contentNum, selectorObj);\n if (contentNum > 0) {\n self.scrollToEnd();\n }\n } ;\n this.deleteScrollee = function(scrolleeID, cfg, selectorObj) {\n $(scrolleeID).fadeTo(1000, 0, 'linear', function() {\n $(this).remove();\n contentNum = ((contentNum >= 1) ? (contentNum - 1) : 0);\n self.scrollToEnd();\n var index = scrolleeID.split('_').slice(-1)[0];\n self.fireCallBack(cfg.delCallBackMethod, cfg.delCallBackArgs, cfg.vars, index, selectorObj);\n if ($('#' + domID + ' div.appFormScrollee').length == 0) {\n $('#' + domID).hide(); }\n } );\n } ;\n this.firePreProc = function(preProcMethod, preProcArgs) {\n var rtn = null; \n if (preProcMethod !== undefined && preProcMethod) {\n if (preProcArgs !== undefined && preProcArgs.constructor === Array && preProcArgs.length > 0) {\n if (preProcArgs.length > 1) {\n rtn = preProcMethod.apply(this, preProcArgs);\n } else if (preProcArgs.length == 1) {\n rtn = preProcMethod(preProcArgs[0]);\n } else {\n rtn = preProcMethod();\n }\n } else {\n rtn = preProcMethod();\n }\n }\n return rtn;\n } ;\n this.fireCallBack = function(callBackMethod, callBackArgs, vars, index, selectorObj) {\n if (callBackMethod !== undefined && callBackMethod) {\n if (callBackArgs !== undefined && callBackArgs.constructor === Array && callBackArgs.length > 0) {\n var args = [];\n $.each(callBackArgs, function() {\n var replaceWith = '',\n arg = this;\n if ($.type(arg) == 'string') {\n $.each(vars, function() {\n if (this == '::index::') {\n replaceWith = index;\n } else if ($(selectorObj).is('select')) {\n if (this == '::selectorSelectChangedValTxt::') {\n replaceWith = $(selectorObj).children('option').filter(selectorObj.value).text();\n } else if (this == '::selectorSelectChangedVal::') {\n replaceWith = selectorObj.value;\n }\n } else if ($(selectorObj).attr('rel') !== undefined && $(selectorObj).attr('rel') !== false) {\n if (this == '::selectorRel::') {\n replaceWith = $(selectorObj).attr('rel');\n }\n }\n arg = arg.replace(new RegExp(this, 'g'), replaceWith);\n } );\n }\n args.push(arg);\n } );\n if (args.length > 1) {\n callBackMethod.apply(this, args);\n } else if (args.length == 1) {\n callBackMethod(args[0]);\n } else {\n callBackMethod();\n }\n } else {\n callBackMethod();\n }\n }\n } ;\n this.rebuildScroller = function(cfg) {\n $(cfg.selectorID).on(cfg.event, function() {\n $('#' + domID + ' div.appFormScrollee').remove();\n\n var scrollees = $(this).data('scrollees'),\n scroller = '';\n\n scrolleeIDs = [];\n if (scrollees.length > 0) {\n for (s in scrollees) {\n scrolleeIDs.push(s);\n scroller += '<div id=\"appFormScrollee_' + s + '\" class=\"appFormScrollee\">' + scrollees[s] + '</div>';\n }\n }\n contentNum = (scrollees.length > 0) ? (scrollees.length - 1) : 0;\n\n if (scroller != '') {\n $('#' + domID).html(scroller);\n } else {\n $('#' + domID).empty();\n }\n\n var cntnrID = 'appFormScroller_' + domID,\n arrowMarginTop = (((height*.5) > 20) ? ((height*.5) - 20) : 0) + 'px';\n\n $('#' + domID).css( { width: width, height: height } );\n $('#' + domID + ' .appFormScrollee').css( { width: width, height: height } );\n $('#' + cntnrID + ' .scrollArrow').css( { marginTop: arrowMarginTop } );\n $('#appFormScrollerLeft_' + domID).css( { opacity: '0' } );\n if (scrollees.length <= 1) {\n $('#appFormScrollerRight_' + domID).css( { display: 'none' } );\n }\n self.setDeleteListeners(cfg);\n self.scrollToBeginning();\n if (cfg.rebuildCallBackMethod !== undefined) {\n if (cfg.rebuildCallBackArgs !== undefined) {\n self.fireCallBack(cfg.rebuildCallBackMethod, cfg.rebuildCallBackArgs);\n } else {\n cfg.rebuildCallBackMethod();\n }\n }\n } );\n } ;\n this.reinit = function(reinitCallBackMethod) {\n if (reinitCallBackMethod !== undefined) {\n self.setDeleteListeners();\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 0);\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 0);\n contentNum = 0;\n scrolleeIDs = [];\n scrolleeIDsOrig = '';\n reinitCallBackMethod();\n }\n } ;\n this.restoreScrollees = function(cfg, preProcDone) {\n if (!preProcDone && cfg.restoredPreProcMethod !== undefined) {\n if (cfg.restoredPreProcArgs !== undefined) {\n self.firePreProc(cfg.restoredPreProcMethod, cfg.restoredPreProcArgs);\n } else {\n cfg.restoredPreProcMethod();\n }\n return;\n }\n\n $('#' + domID + ' div.appFormScrollee').remove();\n contentNum = ((origContent.length > 0) ? (origContent.length - 1) : 0);\n var scrollees = '';\n\n scrolleeIDs = (scrolleeIDsOrig != '') ? JSON.parse(scrolleeIDsOrig) : [];\n if (scrolleeIDs.length > 0 && origContent.length > 0) {\n $.each(origContent, function(i) {\n var scrolleeID = '';\n if (scrolleeIDs[i].length > 0) {\n scrollees += '<div id=\"appFormScrollee_' + scrolleeIDs[i] + '\" class=\"appFormScrollee\">' + this + '</div>';\n }\n } );\n if (scrollees != '') {\n $('#' + domID).html(scrollees);\n $('#' + domID + ' .appFormScrollee').css( { width: width } );\n $('#' + domID).show();\n self.setDeleteListeners(cfg);\n self.scrollToBeginning();\n if (cfg.restoredCallBackMethod !== undefined) {\n if (cfg.restoredCallBackArgs !== undefined) {\n self.fireCallBack(cfg.restoredCallBackMethod, cfg.restoredCallBackArgs);\n } else {\n cfg.restoredCallBackMethod();\n }\n }\n }\n } else {\n $('#' + domID).empty();\n self.scrollToBeginning();\n if (cfg.restoredCallBackMethod !== undefined) {\n if (cfg.restoredCallBackArgs !== undefined) {\n self.fireCallBack(cfg.restoredCallBackMethod, cfg.restoredCallBackArgs);\n } else {\n cfg.restoredCallBackMethod();\n }\n }\n }\n } ;\n this.setDeleteListener = function(scrolleeID, cfg) {\n $(scrolleeID).find('.deleteScrollee').click(function(e) {\n e.preventDefault();\n self.deleteScrollee(scrolleeID, cfg, this);\n } );\n } ;\n this.setDeleteListeners = function(cfg) {\n $.each(scrolleeIDs, function(i) {\n self.setDeleteListener('#appFormScrollee_' + this, cfg);\n } );\n } ;\n this.scrollToBeginning = function() {\n if (contentNum > 0) {\n $('#appFormScrollerRight_' + domID).show();\n self.prettyScroll(0);\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 0);\n if ($('#appFormScrollerRight_' + domID).css('opacity') == 0) {\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 100);\n }\n } else {\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 0);\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 0);\n }\n } ;\n this.scrollToEnd = function() {\n if (contentNum > 0) {\n $('#appFormScrollerLeft_' + domID).show();\n var w = self.c.offsetWidth;\n self.prettyScroll(contentNum * w);\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 0);\n if ($('#appFormScrollerLeft_' + domID).css('opacity') == 0) {\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 100);\n }\n } else {\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 0);\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 0);\n }\n } ;\n left.addEventListener('click',function() {\n var w = self.c.offsetWidth;\n self.prettyScroll(self.c.scrollLeft - w);\n if ((self.c.scrollLeft - w) <= 0) {\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 0);\n }\n if ($('#appFormScrollerRight_' + domID).css('opacity') == 0) {\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 100);\n }\n } , false);\n right.addEventListener('click',function() {\n $('#appFormScrollerLeft_' + domID).show();\n var w = self.c.offsetWidth;\n self.prettyScroll(self.c.scrollLeft + w);\n if ((self.c.scrollLeft + w) >= (contentNum * w)) {\n $('#appFormScrollerRight_' + domID).fadeTo(1000, 0);\n }\n if ($('#appFormScrollerLeft_' + domID).css('opacity') == 0) {\n $('#appFormScrollerLeft_' + domID).fadeTo(1000, 100);\n }\n } , false);\n\n if (!$.isEmptyObject(scrolleeCfg)\n && scrolleeCfg.selectorID !== undefined && scrolleeCfg.selectorID\n && scrolleeCfg.event !== undefined && scrolleeCfg.event\n && scrolleeCfg.scrolleeIDPart !== undefined && scrolleeCfg.scrolleeIDPart\n && scrolleeCfg.vars !== undefined && scrolleeCfg.vars.constructor === Array\n && scrolleeCfg.template !== undefined && scrolleeCfg.template\n ) {\n $(scrolleeCfg.selectorID).on(scrolleeCfg.event, function(e) {\n e.preventDefault();\n self.addScrollee(scrolleeCfg, this);\n } );\n\n self.setDeleteListeners(scrolleeCfg);\n\n if (scrolleeCfg.reinitSelector !== undefined\n && scrolleeCfg.reinitSelector != ''\n && scrolleeCfg.reinitCallBackMethod !== undefined\n && scrolleeCfg.reinitCallBackMethod != ''\n && (scrolleeCfg.reinitCondition === undefined || scrolleeCfg.reinitCondition === true)\n ) {\n $(scrolleeCfg.reinitSelector).on('change', function() {\n self.reinit(scrolleeCfg.reinitCallBackMethod);\n } );\n }\n\n if (scrolleeCfg.changedSelectorRestorors !== undefined\n && scrolleeCfg.changedSelectorRestorors.constructor === Array\n ) {\n for (c in scrolleeCfg.changedSelectorRestorors) {\n $(scrolleeCfg.changedSelectorRestorors[c]).on('change', function() {\n self.restoreScrollees(scrolleeCfg, false);\n } );\n }\n }\n\n if (scrolleeCfg.restoredScrolleesSelector !== undefined\n && $(scrolleeCfg.restoredScrolleesSelector).length > 0\n ) {\n if (scrolleeCfg.restoredPreProcMethod !== undefined\n && scrolleeCfg.restoredPreProcMethod\n && scrolleeCfg.restoredPreProcDoneSelector !== undefined\n ) {\n $(scrolleeCfg.restoredPreProcDoneSelector).change(function(e) {\n e.preventDefault();\n self.restoreScrollees(scrolleeCfg, true);\n } );\n }\n $(scrolleeCfg.restoredScrolleesSelector).click(function(e) {\n e.preventDefault();\n self.restoreScrollees(scrolleeCfg, false);\n } );\n }\n }\n\n if (!$.isEmptyObject(rebuildScrollerCfg)\n && rebuildScrollerCfg.selectorID !== undefined && rebuildScrollerCfg.selectorID\n && rebuildScrollerCfg.event !== undefined && rebuildScrollerCfg.event\n ) {\n self.rebuildScroller(rebuildScrollerCfg);\n }\n\n (function(e) {\n var i = e.childNodes.length;\n while(i-->0) if (e.childNodes[i].nodeType === 3) e.removeChild(e.childNodes[i]);\n } )(container);\n } ;\n\n var myScroll = new Scroller(\n document.getElementById(domID),\n document.getElementById('appFormScrollerLeft_' + domID),\n document.getElementById('appFormScrollerRight_' + domID)\n );\n appNS.appformScroller.debugger('Scroller element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformSelect');\nappNS.appformSelect = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.options, type: 'array', exemptLength: true }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformSelect.config !== undefined\n && !$.isEmptyObject(appNS.appformSelect.config)\n && appNS.appformSelect.config.debug !== undefined\n && appNS.appformSelect.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformSelect.debugger('Select element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformSelect.debugger(['VALIDATION RESULT: ' + rtn, 'Select element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformSelect.config = config;\n appNS.appformSelect.debugger('Select element init started');\n if (appNS.appformSelect.validated(id, config) === false) {\n return;\n }\n var cfg = config,\n options = ((cfg.options !== undefined) ? cfg.options : []),\n label = ((cfg.label !== undefined) ? cfg.label : ''),\n optGrpLbl = ((cfg.optgroupLabel !== undefined) ? cfg.optgroupLabel : 'Suboptions'),\n selectedVal = ((cfg.selectedVal !== undefined && cfg.selectedVal !== null) ? cfg.selectedVal : ''),\n hidden = ((cfg.hidden !== undefined) ? cfg.hidden : false),\n classes = ((cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n disabled = ((cfg !== null && cfg.disabled !== undefined) ? cfg.disabled : false),\n handler = ((cfg.onChangeHandler !== undefined) ? cfg.onChangeHandler : ''),\n handlerArgs = ((cfg.onChangeHandlerArgs !== undefined && cfg.onChangeHandlerArgs.constructor === Array)\n ? cfg.onChangeHandlerArgs : []\n ),\n rtn = {\n output: appNS.appformSelect.build(id, label, options, optGrpLbl, selectedVal, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, disabled, handler, handlerArgs]\n } ;\n appNS.appformSelect.debugger('Select element init completed');\n return rtn;\n } ,\n build: function(id, label, options, optGrpLbl, selectedVal, hidden, classes) {\n appNS.appformSelect.debugger('Select element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || selectedVal === undefined\n || options === undefined || options.constructor !== Array\n || optGrpLbl === undefined || optGrpLbl === null || optGrpLbl === ''\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformSelect.debugger([\n 'build: insufficient arguments',\n 'id:', id, 'label:', label, 'options:', options, 'optGrpLbl:', optGrpLbl, 'hidden:', hidden, 'classes:', classes\n ]);\n return '';\n }\n var domID = id,\n cntnrID = 'appFormSelect_' + domID,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n select = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n select = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormSelect' + classesStr + hiddenClass + '\">';\n\n if (label != '') {\n select += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n select += '<div class=\"appFormElmntInnerCntnr\"><select id=\"' + domID + '\" class=\"appFormElement\">';\n\n $.each(options, function(i, option) {\n var value = option.value,\n label = option.label,\n suboptions = ((option.suboptions !== undefined && option.suboptions.length) ? option.suboptions : []),\n disabled = ((option.disabled !== undefined && option.disabled) ? ' disabled' : ''),\n selected = ((value == selectedVal) ? ' selected' : '');\n\n select += '<option value=\"' + value + '\"' + disabled + selected + '>' + label + '</option>';\n\n if (suboptions.length > 0) {\n select += '<optgroup value=\"optgroup_' + value + '\" ' + 'label=\"' + label + ' ' + optGrpLbl + '\">';\n $.each(suboptions, function(i, suboption) {\n var value = suboption.value,\n label = suboption.label,\n disabled = ((suboption.disabled !== undefined && suboption.disabled) ? ' disabled' : ''),\n selected = ((value == selectedVal) ? ' selected' : '');\n\n select += '<option value=\"' + value + '\"' + disabled + selected + '>' + label + '</option>';\n } );\n select += '</optgroup>';\n }\n } );\n select += '</select></div></div>';\n appNS.appformSelect.debugger('Select element build completed');\n return select;\n } ,\n jsHandler: function(domID, disabled, handler, handlerArgs) {\n appNS.appformSelect.debugger('Select element jsHandler started');\n if (domID === undefined || domID === null || domID === '') {\n appNS.appformSelect.debugger('jsHandler: insufficient arguments');\n return;\n }\n var args;\n if (disabled !== undefined && disabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).on('change', function() {\n args = [];\n args.push($(this).val());\n if (handlerArgs !== undefined && handlerArgs.length > 0) {\n handler.apply(appNS.appformSelect, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformSelect, args);\n }\n } );\n }\n appNS.appformSelect.debugger('Select element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformText');\nappNS.appformText = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformText.config !== undefined\n && !$.isEmptyObject(appNS.appformText.config)\n && appNS.appformText.config.debug !== undefined\n && appNS.appformText.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformText.debugger('Text element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformText.debugger(['VALIDATION RESULT: ' + rtn, 'Text element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformText.config = config;\n appNS.appformText.debugger('Text element init started');\n if (appNS.appformText.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n label = ((cfg !== null && cfg.label !== undefined) ? cfg.label : ''),\n hidden = ((cfg !== null && cfg.hidden !== undefined) ? cfg.hidden : false),\n disabled = ((cfg !== null && cfg.disabled !== undefined) ? cfg.disabled : false),\n isInteger = ((cfg !== null && cfg.isInteger !== undefined) ? cfg.isInteger : false),\n handler = ((cfg !== null && cfg.onChangeHandler !== undefined) ? cfg.onChangeHandler : ''),\n handlerArgs = ((cfg !== null && cfg.onChangeHandlerArgs !== undefined && cfg.onChangeHandlerArgs.constructor === Array)\n ? cfg.onChangeHandlerArgs : []\n ),\n defaultVal = ((cfg !== null && cfg.defaultVal !== undefined && cfg.defaultVal !== null) ? cfg.defaultVal : ''),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformText.build(id, label, defaultVal, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, isInteger, disabled, handler, handlerArgs]\n } ;\n appNS.appformText.debugger('Text element init completed');\n return rtn;\n } ,\n build: function(id, label, defaultVal, hidden, classes) {\n appNS.appformText.debugger('Text element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || defaultVal === undefined\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformText.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormText_' + domID,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n text = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n text = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormText'\n + classesStr + hiddenClass + '\">';\n\n if (label !== '') {\n text += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n text += '<div class=\"appFormElmntInnerCntnr\"><input type=\"text\" id=\"'\n + domID + '\" class=\"appFormElement\"';\n\n if (defaultVal !== '') {\n text += ' value=\"' + defaultVal + '\"';\n }\n\n text += ' /></div></div>';\n appNS.appformText.debugger('Text element build completed');\n return text;\n } ,\n jsHandler: function(domID, isInteger, disabled, handler, handlerArgs) {\n appNS.appformText.debugger('Text element jsHandler started');\n if (domID === undefined || domID === null || domID === '') {\n appNS.appformText.debugger('jsHandler: insufficient arguments');\n return;\n }\n var args;\n\n if (isInteger !== undefined && isInteger) {\n $(domID).jqxNumberInput(\n { inputMode: 'simple', height: '17px', width: '75px', decimalDigits: 0, textAlign: 'left', theme: 'classic' }\n );\n $(domID + ' input.jqx-input-content').css(\n { padding: '1px', margin: '0', fontSize: '11px', float: 'left' }\n );\n }\n if (disabled !== undefined && disabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).on('change', function() {\n args = [];\n args.push($(this).val());\n if (handlerArgs !== undefined && handlerArgs.length > 0) {\n handler.apply(appNS.appformText, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformText, args);\n }\n } );\n }\n appNS.appformText.debugger('Text element jsHandler completed');\n }\n} ;\n</script>\n<script type=\"text/javascript\">\nappNS.namespace('appformTextarea');\nappNS.appformTextarea = {\n config: { } ,\n criteria: function(id, config) {\n return [ { item: id, type: 'string' } ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformTextarea.config !== undefined\n && !$.isEmptyObject(appNS.appformTextarea.config)\n && appNS.appformTextarea.config.debug !== undefined\n && appNS.appformTextarea.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformTextarea.debugger('Textarea element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformTextarea.debugger(['VALIDATION RESULT: ' + rtn, 'Textarea element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformTextarea.config = config;\n appNS.appformTextarea.debugger('Textarea element init started');\n if (appNS.appformTextarea.validated(id, config) === false) {\n return;\n }\n var cfg = ((config !== undefined && !$.isEmptyObject(config)) ? config : null),\n label = ((cfg !== null && cfg.label !== undefined) ? cfg.label : ''),\n defaultVal = ((cfg !== null && cfg.defaultVal !== undefined && cfg.defaultVal !== null) ? cfg.defaultVal : ''),\n disabled = ((cfg !== null && cfg.disabled !== undefined) ? cfg.disabled : false),\n hidden = ((cfg !== null && cfg.hidden !== undefined) ? cfg.hidden : false),\n handler = ((cfg !== null && cfg.onChangeHandler !== undefined) ? cfg.onChangeHandler : ''),\n handlerArgs = ((cfg !== null && cfg.onChangeHandlerArgs !== undefined && cfg.onChangeHandlerArgs.constructor === Array)\n ? cfg.onChangeHandlerArgs : []\n ),\n classes = ((cfg !== null && cfg.classes !== undefined && cfg.classes.constructor === Array) ? cfg.classes : []),\n rtn = {\n output: appNS.appformTextarea.build(id, label, defaultVal, hidden, classes),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: ['#' + id, disabled, handler, handlerArgs]\n } ;\n appNS.appformTextarea.debugger('Textarea element init completed');\n return rtn;\n } ,\n build: function(id, label, defaultVal, hidden, classes) {\n appNS.appformTextarea.debugger('Textarea element build started');\n if (id === undefined || id === null || id === ''\n || label === undefined || label === null || label === ''\n || defaultVal === undefined\n || hidden === undefined || (hidden !== true && hidden !== false)\n || classes === undefined || classes.constructor !== Array\n ) {\n appNS.appformTextarea.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormTextarea_' + domID,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n classesStr = '',\n textarea = '';\n\n $.each(classes, function() {\n classesStr += ' ' + this;\n } );\n\n textarea = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormTextarea' + classesStr + hiddenClass + '\">';\n\n if (label != '') {\n textarea += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n\n textarea += '<div class=\"appFormElmntInnerCntnr\"><textarea id=\"' + domID + '\" class=\"appFormElement\">';\n\n if (defaultVal != '') {\n textarea += defaultVal;\n }\n\n textarea += '</textarea></div></div>';\n appNS.appformTextarea.debugger('Textarea element build completed');\n return textarea;\n } ,\n jsHandler: function(domID, disabled, handler, handlerArgs) {\n appNS.appformTextarea.debugger('Textarea element jsHandler started');\n if (domID === undefined || domID === null || domID === '') {\n appNS.appformTextarea.debugger('jsHandler: insufficient arguments');\n return;\n }\n var args;\n if (disabled !== undefined && disabled) {\n $(domID).prop('disabled', true);\n $(domID).attr('disabled', 'disabled');\n }\n if (handler !== undefined && handler !== '') {\n $(domID).on('change', function() {\n args = [];\n args.push($(this).val());\n if (handlerArgs !== undefined && handlerArgs.length > 0) {\n handler.apply(appNS.appformTextarea, args.concat(handlerArgs));\n } else {\n handler.apply(appNS.appformTextarea, args);\n }\n } );\n }\n appNS.appformTextarea.debugger('Textarea element jsHandler completed');\n }\n} ;\n</script>\n\n<script src=\"https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxtree.js\"></script>\n<script src=\"https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxdragdrop.js\"></script>\n<script src=\"https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxmenu.js\"></script>\n<script src=\"https://cms.securimate.com//assets/jq/jqx/jqwidgets/jqxcheckbox.js\"></script>\n<script type=\"text/javascript\">\nappNS.namespace('appformTree');\nappNS.appformTree = {\n config: { } ,\n criteria: function(id, config) {\n return [\n { item: id, type: 'string' } ,\n { item: config, type: 'object' } ,\n { item: config.nodesCfg, type: 'object' } ,\n { item: config.nodesCfg.nodeIdPrefix, type: 'string' } ,\n { item: config.nodesCfg.nodes, type: 'array', stringified: true }\n ];\n } ,\n debugger: function(thingsToLog) {\n if (appNS.appformTree.config !== undefined\n && !$.isEmptyObject(appNS.appformTree.config)\n && appNS.appformTree.config.debug !== undefined\n && appNS.appformTree.config.debug === true\n ) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validated: function(id, config) {\n appNS.appformTree.debugger('Tree element validated started');\n var rtn = (\n id !== undefined && id !== '' && config !== undefined && !$.isEmptyObject(config)\n && config.validated !== undefined && config.validated == true\n );\n appNS.appformTree.debugger(['VALIDATION RESULT: ' + rtn, 'Tree element validated completed']);\n return rtn;\n } ,\n init: function(id, config) {\n appNS.appformTree.config = config;\n if (appNS.appformTree.validated(id, config) === false) {\n return;\n }\n appNS.appformTree.debugger('Tree element init started');\n\n var cfg = config,\n nodesCfg = cfg.nodesCfg,\n label = ((cfg.label !== undefined && cfg.label !== null) ? cfg.label : ''),\n width = ((cfg.width !== undefined && cfg.width !== null) ? cfg.width : 0),\n height = ((cfg.height !== undefined && cfg.height !== null) ? cfg.height : 0),\n hidden = ((cfg.hidden !== undefined && cfg.hidden !== null) ? cfg.hidden : false),\n rtn = {\n output: appNS.appformTree.build(id, label, hidden),\n css: ((cfg.css !== undefined && cfg.css.constructor === Array) ? cfg.css : []),\n js: [id, nodesCfg, width, height]\n } ;\n appNS.appformTree.debugger('Tree element init completed');\n return rtn;\n } ,\n build: function(id, label, hidden) {\n appNS.appformTree.debugger('Tree element build started');\n if (id === undefined || id === null || id === '') {\n appNS.appformTree.debugger('build: insufficient arguments');\n return '';\n }\n var domID = id,\n cntnrID = 'appFormTree_' + domID,\n label = ((label !== '' && label.substr(label.length -1) != ':') ? label + ':' : label),\n hiddenClass = ((hidden) ? ' appFormElmntHidden' : ''),\n tree = '';\n\n tree = '<div id=\"' + cntnrID + '\" class=\"appFormElmntOuterCntnr appFormTree' + hiddenClass + '\">';\n\n if (label != '') {\n tree += '<div class=\"appFormLabelCntnr\"><label for=\"' + domID + '\">' + label + '</label></div>';\n }\n tree += '<div class=\"appFormElmntInnerCntnr\"><div id=\"' + domID + '\" class=\"appFormElement\"></div></div></div>';\n appNS.appformTree.debugger('Tree element build completed');\n return tree;\n } ,\n jsHandler: function(id, nodesCfg, width, height) {\n appNS.appformTree.debugger('Tree element jsHandler started');\n if (id === undefined || id === null || id === ''\n || nodesCfg === undefined || $.isEmptyObject(nodesCfg)\n || nodesCfg.nodeIdPrefix === undefined || nodesCfg.nodeIdPrefix === null || nodesCfg.nodeIdPrefix === ''\n || nodesCfg.nodes === undefined || nodesCfg.nodes === null || nodesCfg.nodes === ''\n ) {\n appNS.appformTree.debugger('jsHandler: insufficient arguments');\n return;\n }\n var that = appNS.appformTree,\n domID = \"#\" + id,\n width = ((width > 0) ? width + 'px' : 'auto'),\n height = ((height > 0) ? height + 'px' : 'auto'),\n nodes = nodesCfg.nodes,\n nodesOrig = nodesCfg.nodes,\n filterMap = nodesCfg.filterMap,\n prefix = nodesCfg.nodeIdPrefix,\n initialFilterID = nodesCfg.initialFilterID,\n filterSelector = nodesCfg.filterSelector,\n moveNodeSelector = nodesCfg.moveNodeSelector,\n currentFilterID = nodesCfg.initialFilterID,\n movedNodeFilterID = null,\n selectedNode = nodesCfg.selectedNode,\n newNodeCfg = ((nodesCfg.initNewNode !== undefined && !$.isEmptyObject(nodesCfg.initNewNode)) ? nodesCfg.initNewNode : null),\n listenersCfg = nodesCfg.listenersCfg,\n onLoadCbMethd = ((nodesCfg.onLoadCbMethd !== undefined) ? nodesCfg.onLoadCbMethd : null),\n onLoadCbArgs = ((nodesCfg.onLoadCbArgs !== undefined) ? nodesCfg.onLoadCbArgs : []),\n onDropCbMethd = ((nodesCfg.onDropCbMethd !== undefined) ? nodesCfg.onDropCbMethd : null),\n onDropCbArgs = ((nodesCfg.onDropCbArgs !== undefined) ? nodesCfg.onDropCbArgs : []),\n restored = false,\n instantiated = false,\n Tree = function() {\n var self = this;\n movedNodeFilterID = initialFilterID;\n $(filterSelector).data('previous', initialFilterID);\n this.instantiateTree = function() {\n $(domID).jqxTree( {\n allowDrag: true,\n allowDrop: true,\n width: width,\n height: height,\n theme: 'summer',\n source: self.getSource(),\n dragEnd: function (dragItem, dropItem, args, dropPosition, tree) {\n if ((dragItem.hasItems && dropPosition == \"inside\")\n || (dragItem.level == 0 && dropItem.level == 1 && dropPosition == \"inside\")\n || (dragItem.level == 1 && dragItem.level == dropItem.level && dropPosition == \"inside\")\n ) {\n return false;\n }\n }\n } );\n $(domID).on('dragEnd', function (event) { self.fireCallBack('', onDropCbMethd, onDropCbArgs);\n } );\n $(domID).jqxTree('collapseAll');\n if (newNodeCfg !== null) {\n self.createNewNode();\n } else if ($(selectedNode).length == 0) {\n self.initMoveNode();\n } else {\n self.selectNode();\n }\n self.fireCallBack('', onLoadCbMethd, onLoadCbArgs);\n instantiated = true;\n return this;\n } ;\n this.initMoveNode = function() {\n if (listenersCfg.length > 0) {\n $.each(listenersCfg, function() {\n if (this.type === 'moveNode' && !$.isEmptyObject(this.cfg)\n && this.cfg.id !== undefined && this.cfg.label !== undefined\n && this.cfg.value !== undefined\n ) {\n var currNodes = JSON.parse(nodes),\n currChildren = self.getNodeChildren(currNodes, this.cfg.id);\n self.moveNode(currNodes, this.cfg, currChildren);\n return true;\n }\n } );\n }\n } ;\n this.filterNodes = function() {\n if (!restored) {\n self.saveSource($(filterSelector).data('previous'), JSON.parse(nodes));\n }\n $(domID).jqxTree('clear');\n $(domID).jqxTree( { source: self.getSource() } );\n $(domID).jqxTree('refresh');\n $(domID).jqxTree('collapseAll');\n\n if (movedNodeFilterID !== null && currentFilterID != movedNodeFilterID) {\n $(moveNodeSelector).show();\n } else if (movedNodeFilterID !== null && currentFilterID == movedNodeFilterID) {\n $(moveNodeSelector).hide();\n }\n\n if (restored) {\n if ($(selectedNode).length > 0) {\n self.resetFlag('restored');\n self.selectNode();\n } else {\n self.initMoveNode();\n }\n } else {\n self.selectNode();\n }\n } ;\n this.getKeyFromFilterMap = function(filterID) {\n var key = 0;\n for (k in filterMap) {\n if (filterMap[k] == filterID) {\n key = k;\n break;\n }\n }\n return key;\n } ;\n this.getSource = function() {\n var nodeKey = ((currentFilterID !== undefined) ? self.getKeyFromFilterMap(currentFilterID) : null),\n tmp = JSON.parse(nodes),\n currNodes = ((nodeKey !== null) ? tmp[nodeKey] : tmp),\n children = [],\n source = [];\n for (n in currNodes) {\n children = [];\n if (currNodes[n].children !== undefined) {\n for (c in currNodes[n].children) {\n children.push( {\n id: prefix + currNodes[n].children[c].id,\n label: currNodes[n].children[c].label,\n value: currNodes[n].children[c].value\n } );\n }\n source.push( {\n id: prefix + currNodes[n].id,\n label: currNodes[n].label,\n value: currNodes[n].value,\n items: children\n } );\n } else {\n source.push( {\n id: prefix + currNodes[n].id,\n label: currNodes[n].label,\n value: currNodes[n].value \n } );\n }\n }\n return source;\n } ;\n this.createNewNode = function() {\n var firstItem = $(domID).jqxTree('getItems')[0].element;\n $(domID).jqxTree(\n 'addBefore',\n { id: prefix + newNodeCfg.id, label: newNodeCfg.label, value: newNodeCfg.value } ,\n firstItem\n );\n $(domID).jqxTree('refresh');\n $(domID).jqxTree('collapseAll');\n self.selectNode();\n } ;\n this.moveNode = function(currNodes, cfg, nodeChildren) {\n $(moveNodeSelector).hide();\n if (instantiated && !restored) {\n self.removeNode(currNodes, $(filterSelector).data('previous'), cfg.id);\n }\n\n movedNodeFilterID = currentFilterID;\n\n var treeItems = $(domID).jqxTree('getItems'),\n firstItem = ((treeItems.length) ? $(domID).jqxTree('getItems')[0].element : { } );\n\n if (!$.isEmptyObject(firstItem)) {\n $(domID).jqxTree('addBefore', { id: prefix + cfg.id, label: cfg.label, value: cfg.value } , firstItem);\n } else {\n $(domID).jqxTree('addTo', { id: prefix + cfg.id, label: cfg.label, value: cfg.value } );\n }\n\n if (instantiated && !restored && !$.isEmptyObject(nodeChildren)) {\n for (c in nodeChildren) {\n var parent = $(domID).jqxTree('getItem', $('#' + prefix + cfg.id)[0]),\n childID = prefix + nodeChildren[c].id,\n childLbl = nodeChildren[c].label,\n childVal = c;\n\n $(domID).jqxTree('addTo', { id: childID, label: childLbl, value: childVal } , parent);\n }\n }\n $(domID).jqxTree('refresh');\n $(domID).jqxTree('collapseAll');\n self.selectNode();\n self.saveSource(currentFilterID, currNodes);\n if (restored) {\n self.resetFlag('restored');\n }\n } ;\n this.getNodeChildren = function(currNodes, nodeID) {\n var nodeChildren = [],\n nodeKey = ((movedNodeFilterID !== undefined) ? self.getKeyFromFilterMap(movedNodeFilterID) : null);\n for (n in currNodes[nodeKey]) {\n if (currNodes[nodeKey][n].id == nodeID\n && currNodes[nodeKey][n].children !== undefined\n ) {\n for (c in currNodes[nodeKey][n].children) {\n if (currNodes[nodeKey][n].children[c] !== null) {\n nodeChildren.push(currNodes[nodeKey][n].children[c]);\n }\n }\n break;\n }\n }\n return nodeChildren;\n } ;\n this.getSelectedNodeChildren = function() {\n\n var childrenNodes = $(selectedNode).find('li'),\n children = [];\n\n $.each(childrenNodes, function() {\n var id = parseInt($(this).attr('id').replace(prefix, '')),\n lbl = $(this).text();\n\n children[id] = { id: id, label: lbl } ;\n } );\n return children;\n } ;\n this.getSelectedNodeParent = function() {\n\n var selectedHasParent = $(selectedNode).parent().hasClass('jqx-tree-dropdown'),\n parentNode = ((selectedHasParent) ? $(selectedNode).parent().parent().attr('id') : null);\n\n return parentNode;\n } ;\n this.removeNode = function(currNodes, filterID, nodeID) {\n var nodeKey = ((filterID !== undefined) ? self.getKeyFromFilterMap(filterID) : null)\n for (n in currNodes[nodeKey]) {\n if (currNodes[nodeKey][n].id == nodeID) {\n currNodes[nodeKey].splice(n, 1); nodes = JSON.stringify(currNodes);\n return;\n } else if (currNodes[nodeKey][n].children !== undefined) {\n for (c in currNodes[nodeKey][n].children) {\n if (currNodes[nodeKey][n].children[c].id == nodeID) {\n currNodes[nodeKey][n].children.splice(c, 1);\n nodes = JSON.stringify(currNodes);\n return;\n }\n }\n }\n }\n } ;\n this.resetFlag = function(flag) {\n if (flag == 'restored') {\n restored = false;\n }\n } ;\n this.restoreNodes = function() {\n restored = true; currentFilterID = movedNodeFilterID = initialFilterID;\n nodes = nodesOrig;\n $(filterSelector).data('previous', initialFilterID);\n } ;\n this.saveSource = function(filterID, currNodes) {\n\n var treeNodesData = $(domID).jqxTree('getItems'),\n nodeKey = ((filterID !== undefined)\n ? self.getKeyFromFilterMap(filterID) : null\n ),\n parents = [];\n\n if (filterID === undefined || nodeKey === undefined || nodeKey === null) {\n return;\n }\n currNodes[nodeKey] = [];\n for (t in treeNodesData) {\n var id = parseInt(treeNodesData[t].id.replace(prefix, '')),\n label = treeNodesData[t].label,\n value = treeNodesData[t].value,\n level = treeNodesData[t].level,\n hasItems = treeNodesData[t].hasItems,\n parentID = (((level == 1) && !hasItems && treeNodesData[t].parentId !== null)\n ? parseInt(treeNodesData[t].parentId.replace(prefix, ''))\n : null\n );\n if (parentID === null) {\n currNodes[nodeKey].push( { id: id, label: label, value: value } );\n if (hasItems) {\n parents.push( { key: (currNodes[nodeKey].length - 1), id: id } );\n }\n } else {\n if (parents.length) {\n for (p in parents) {\n if (parents[p].id == parentID) {\n if (currNodes[nodeKey][parents[p].key].children === undefined) {\n currNodes[nodeKey][parents[p].key].children = [];\n }\n currNodes[nodeKey][parents[p].key].children.push( { id: id, label: label, value: value } );\n }\n }\n }\n }\n }\n nodes = JSON.stringify(currNodes);\n } ;\n this.selectNode = function() {\n if ($(selectedNode)[0] !== undefined\n && $(selectedNode)[0].parentElement !== undefined\n && $(selectedNode)[0].parentElement.parentElement !== undefined\n ) {\n var potentialParentItem = $(selectedNode)[0].parentElement.parentElement;\n if ($(potentialParentItem).hasClass('jqx-tree-item-li')\n && $(potentialParentItem).find('span.jqx-tree-item-arrow-collapse').length\n ) {\n $(domID).jqxTree('expandItem', $(potentialParentItem)[0]);\n }\n }\n $(domID).jqxTree('selectItem', $(selectedNode)[0]);\n } ;\n this.fireCallBack = function(selector, callBackMethod, callBackArgs) {\n if (callBackMethod !== null) {\n if (callBackArgs.length > 0) {\n var args = [];\n $.each(callBackArgs, function() {\n var arg = this;\n if (arg == '::selectorVal::') {\n args.push($(selector).val());\n } else if (arg == '::initialFilterID::') {\n args.push(initialFilterID);\n } else if (arg == '::parentNode::') {\n var parent = (($(selectedNode).length > 0)\n ? self.getSelectedNodeParent()\n : null\n );\n args.push(parent);\n } else if (arg == '::childrenNodes::') {\n var children = (($(selectedNode).length > 0)\n ? self.getSelectedNodeChildren() : []\n );\n args.push(children);\n } else if (arg == '::originalChildrenNodes::') {\n args.push(\n self.getNodeChildren(\n JSON.parse(nodesOrig),\n parseInt(selectedNode.replace('#' + prefix, ''))\n )\n );\n } else {\n args.push(arg);\n }\n } );\n callBackMethod.apply(this, args);\n } else {\n callBackMethod();\n }\n }\n } ;\n this.setListeners = function() {\n if (listenersCfg.length > 0) {\n $.each(listenersCfg, function() {\n if (this.selectors === undefined\n || this.selectors.constructor !== Array\n || this.selectors.length == 0\n || this.event === undefined\n || this.type === undefined\n ) {\n return true;\n }\n\n var event = this.event,\n type = this.type,\n cfg = ((!$.isEmptyObject(this.cfg)) ? this.cfg : null),\n cbMthd = ((this.cbMthd !== undefined) ? this.cbMthd : null),\n cbArgs = ((this.cbArgs !== undefined && this.cbArgs.length) ? this.cbArgs : []),\n selector = '';\n\n $.each(this.selectors, function() {\n if ($(this).length > 0) {\n selector += (selector != '') ? ', ' + this : this;\n }\n } );\n\n $(selector).on(event, function(e) {\n if (event == 'click') {\n e.preventDefault();\n }\n if (type == 'prefilter') {\n $(filterSelector).data('previous', $(filterSelector).val());\n } else if (type == 'filter') {\n currentFilterID = $(filterSelector).val();\n self.filterNodes();\n } else if (type == 'moveNode'\n && cfg !== null && cfg.id !== undefined && cfg.label !== undefined\n && cfg.value !== undefined\n ) {\n var currNodes = JSON.parse(nodes);\n self.moveNode(currNodes, cfg, self.getNodeChildren(currNodes, cfg.id));\n } else if (type == 'restore') {\n self.restoreNodes();\n }\n self.fireCallBack(selector, cbMthd, cbArgs);\n } );\n } );\n }\n return this;\n } ;\n self.instantiateTree().setListeners();\n } ;\n var myTree = new Tree();\n appNS.appformTree.debugger('Tree element jsHandler completed');\n }\n} ;\n</script>\n\n<script type=\"text/javascript\">\n\"use strict\";\n\nvar DEBUG_APPFORM = false; var DEBUG_APPFORM_ELEMENTS = { all: false,\n button: false,\n checkbox: false,\n div: false,\n hidden: false,\n multiselect: false,\n panel: false,\n paragraph: false,\n password: false,\n radio: false,\n scroller: false,\n select: false,\n text: false,\n textarea: false,\n tree: false\n} ;\nappNS.namespace('appform');\nappNS.appform = {\n p: {\n elementTypes: [\n 'button',\n 'checkbox',\n 'div',\n 'hidden',\n 'multiselect',\n 'panel',\n 'paragraph',\n 'password',\n 'radio',\n 'scroller',\n 'select',\n 'text',\n 'textarea',\n 'tree'\n ],\n instances: []\n } ,\n init: function(config, elements) {\n appNS.appform.debugger('AppForm Instantiation start');\n var validationCriteria = [\n { item: config, type: 'object' } ,\n { item: config.type, type: 'string', inArray: ['inline', 'dialog'] } ,\n { item: config.id, type: 'string' } ,\n { item: config.formID, type: 'string' } ,\n { item: config.title, type: 'string', skip: (config.type === 'inline') } ,\n {\n item: config.contentMethod,\n type: 'string',\n inArray: ['append', 'prepend', 'html'],\n skip: (config.type === 'dialog')\n } ,\n { item: elements, type: 'array' }\n ],\n valid = appNS.appform.validate(validationCriteria);\n\n if (!valid) {\n return appNS.appform.debugger(['Instantiation error', 'config:', config, 'elements:', elements]);\n }\n\n var nsName = appNS.appform.generateNamespaceName();\n\n appNS.appform[nsName] = {\n p: {\n config: config,\n elements: elements,\n formID: config.formID,\n id: config.id,\n type: config.type,\n dialog: null,\n multiselects: [],\n js: [],\n css: []\n }\n } ;\n var autoLayout = ((config.autoLayout !== undefined) ? config.autoLayout : true);\n\n if (config.type == 'inline') {\n appNS.appform.p.instances.push( { nsName: nsName, divID: config.id } );\n var contentMethod = (config.contentMethod !== undefined) ? config.contentMethod : 'append';\n appNS.appform.buildForInline(nsName, contentMethod, autoLayout);\n } else if (config.type == 'dialog') {\n appNS.appform.p.instances.push( { nsName: nsName, dialogID: config.id } );\n var options = ((config.dialogOptions !== undefined && !$.isEmptyObject(config.dialogOptions)) ? config.dialogOptions : { } ),\n title = ((config.title !== undefined) ? config.title : '');\n appNS.appform.buildForDialog(nsName, title, options, autoLayout);\n }\n appNS.appform.debugger('AppForm instantiation complete.');\n return appNS.appform;\n } ,\n generateNamespaceName: function() {\n return Math.random().toString(36).substr(2, 10);\n } ,\n buildForInline: function(nsName, contentMethod, autoLayout) {\n appNS.appform.debugger('buildForInline start');\n\n var divID = appNS.appform[nsName].p.id,\n form = appNS.appform.buildTheForm(nsName);\n\n if (contentMethod == 'html') {\n $(\"#\" + divID).html(form);\n } else if (contentMethod == 'append') {\n $(\"#\" + divID).append(form);\n } else if (contentMethod == 'prepend') {\n $(\"#\" + divID).prepend(form);\n }\n appNS.appform.setCSS(nsName, autoLayout);\n appNS.appform.setJS(nsName);\n appNS.appform.debugger('buildForInline complete');\n } ,\n buildForDialog: function(nsName, title, options, autoLayout) {\n this.debugger('buildForDialog start');\n appNS.appform[nsName].p.dialog = { instance: { } , buttons: [] } ;\n var dialogID = '#' + appNS.appform[nsName].p.id,\n form = appNS.appform.buildTheForm(nsName),\n formCntnrID = '#appForm_' + appNS.appform[nsName].p.config.formID,\n windowContentID = dialogID + ' .jqx-window-content',\n appDiaContentID = dialogID + ' .jqx-window-content .appdiag-content',\n buttons = appNS.appform[nsName].p.dialog.buttons;\n appNS.appform[nsName].p.dialog.instance = new appNS.appdiag(dialogID, title, form, buttons, options);\n appNS.appform.debugger(['dialogID:', dialogID, 'title:', title, 'form:', form, 'buttons', buttons, 'options', options]);\n appNS.appform.setCSS(nsName, autoLayout);\n appNS.appform.setJS(nsName);\n\n var formCntnrWidth = (appNS.appform.measureItem($(formCntnrID), 'width') + 10),\n formCntnrHeight = (appNS.appform.measureItem($(formCntnrID), 'height') + 10),\n headerWidth = appNS.appform.measureItem($(dialogID + ' .jqx-window-header div .pnlTitle'), 'width'),\n headerHeight = appNS.appform.measureItem($(dialogID + ' .jqx-window-header'), 'height'),\n footerWidth = 0,\n footerHeight = appNS.appform.measureItem($(dialogID + ' .jqx-window-content .pnlButtonFooter'), 'height');\n\n $.each($(dialogID + ' .jqx-window-content .pnlButtonFooter button'), function() {\n footerWidth += appNS.appform.measureItem($(this), 'width');\n } );\n\n $(formCntnrID).width(formCntnrWidth).height(formCntnrHeight);\n $(appDiaContentID).width(formCntnrWidth + 20).height(formCntnrHeight + 10);\n $(windowContentID).width(appNS.appform.measureItem($(appDiaContentID), 'width'));\n $(windowContentID).height(appNS.appform.measureItem($(appDiaContentID), 'height')) + footerHeight;\n\n var totalWidth = appNS.appform.measureItem($(windowContentID), 'width'),\n totalHeight = appNS.appform.measureItem($(windowContentID), 'height') + footerHeight + headerHeight;\n\n if (totalWidth < headerWidth) {\n totalWidth = headerWidth;\n }\n if (totalWidth < footerWidth) {\n totalWidth = footerWidth;\n }\n\n $(dialogID).jqxWindow( {\n width: totalWidth,\n height: totalHeight\n } );\n\n appNS.appform[nsName].p.dialog.instance.show();\n appNS.appform.debugger('buildForDialog completed');\n } ,\n buildTheForm: function(nsName) {\n appNS.appform.debugger('buildTheForm start');\n var html = appNS.appform.extractElements(nsName),\n form = '<div id=\"appForm_' + appNS.appform[nsName].p.config.formID + '\" class=\"appForm\">'\n + '<form id=\"' + appNS.appform[nsName].p.config.formID + '\">' + html + '</form></div>';\n appNS.appform.debugger(['buildTheForm completed', 'form:', form]);\n return form;\n } ,\n destroyDialog: function(dialogID) {\n var idx;\n $.each(appNS.appform.p.instances, function(i) {\n if (this.dialogID == dialogID) {\n appNS.appform[this.nsName].p.dialog.instance.destroy(); delete appNS.appform[this.nsName]; idx = i;\n return true;\n }\n } );\n appNS.appform.p.instances.splice(idx, 1); } ,\n getInstanceByDialogID: function(dialogID) {\n var rtn;\n $.each(appNS.appform.p.instances, function(i) {\n if (this.dialogID == dialogID) {\n rtn = this.nsName;\n return true;\n }\n } );\n return rtn;\n } ,\n getInstanceByDivID: function(divID) {\n var rtn;\n $.each(appNS.appform.p.instances, function(i) {\n if (this.divID == divID) {\n rtn = this.nsName;\n return true;\n }\n } );\n return rtn;\n } ,\n extractElements: function(nsName) {\n appNS.appform.debugger('extractElements start');\n var remainingElmnts = appNS.appform[nsName].p.elements,\n html = '',\n css = [],\n js = [],\n panelsToClose = [],\n panelData = { panels:[], elementIDs:[] } ;\n\n while (remainingElmnts.length > 0) {\n var extraction = appNS.appform.extractElement(nsName, remainingElmnts, html, css, js, panelData);\n html = extraction.html;\n css = extraction.css;\n js = extraction.js;\n panelData = extraction.panelData;\n remainingElmnts = (extraction.remainingElmnts.length) ? extraction.remainingElmnts : [];\n }\n appNS.appform[nsName].p.css = css;\n appNS.appform[nsName].p.js = js;\n appNS.appform.debugger(['extractElements completed', 'HTML:', html, 'css', css, 'js', js]);\n return html;\n } ,\n extractElement: function(nsName, remainingElmnts, html, css, js, panelData) {\n appNS.appform.debugger('extractElement start');\n\n var element = remainingElmnts[0],\n parts = appNS.appform.extractElementParts(element),\n rtn = {\n remainingElmnts: ((remainingElmnts.length) ? remainingElmnts : []),\n html: html,\n css: css,\n js: js,\n panelData: panelData\n } ;\n if (!parts) {\n rtn.remainingElmnts = appNS.appform.removeElementFromList(\n remainingElmnts[element].id,\n remainingElmnts\n );\n return rtn;\n }\n var id = ((parts.id !== undefined) ? parts.id : null),\n type = parts.type,\n className = parts.className,\n config = ((parts.config !== undefined) ? parts.config : null),\n valid = appNS.appform.validateElement(new appNS[className].criteria(id, config)),\n initedElmnt = { } ,\n panelObj = { } ;\n\n if (!valid) {\n appNS.appform.debugger([\n 'element init error for \"' + type + '\" type $(\"#' + id + '\")',\n 'config:',\n config\n ]);\n rtn.remainingElmnts = appNS.appform.removeElementFromList(id, remainingElmnts);\n return rtn;\n } else {\n appNS.appform.debugger([\n 'element init $(\"#' + id + '\") of type ' + type + ' passed config validation',\n 'config:',\n config\n ]);\n if (config === null) {\n config = { validated: true } ;\n } else {\n config.validated = true;\n }\n initedElmnt = new appNS[className].init(id, config);\n }\n\n if (type == 'panel') {\n panelObj = appNS.appform.addPanelElementsToList(initedElmnt, remainingElmnts);\n panelData.panels.push(\n {\n panelID: id,\n lastElementID:panelObj.elementIDs[panelObj.elementIDs.length - 1]\n }\n );\n panelData.elementIDs.push.apply(panelData.elementIDs, panelObj.elementIDs);\n rtn.remainingElmnts = panelObj.list;\n rtn.html += initedElmnt.output;\n } else if (type == 'button' && appNS.appform[nsName].p.type == 'dialog' && initedElmnt.inDialogFooter) {\n if (appNS.appform.isPanelElement(id, panelData.elementIDs)) {\n initedElmnt.classes.push('appformModalPanelButton');\n }\n appNS.appform[nsName].p.dialog.buttons.push(initedElmnt.output);\n } else {\n rtn.html += initedElmnt.output;\n }\n if (initedElmnt.css !== undefined && initedElmnt.css.constructor === Array && initedElmnt.css.length) {\n rtn.css.push(initedElmnt.css);\n }\n if (initedElmnt.js !== undefined && initedElmnt.js.constructor === Array && initedElmnt.js.length) {\n rtn.js.push( { element: className, jsArgs: initedElmnt.js } );\n }\n if (type != 'panel') {\n rtn.remainingElmnts = appNS.appform.removeElementFromList(id, remainingElmnts);\n\n $.each(panelData.panels, function(p) {\n if (this.lastElementID == id) {\n rtn.html += '</div>';\n return false;\n }\n } );\n }\n appNS.appform.debugger('extractElement completed');\n return rtn;\n } ,\n isPanelElement: function(elementID, panelElementIDs) {\n appNS.appform.debugger('isPanelElement start');\n var rtn = false;\n $.each(panelElementIDs, function(p) {\n if (this == elementID) {\n rtn = true;\n return false;\n }\n } );\n appNS.appform.debugger('isPanelElement completed');\n return rtn;\n } ,\n addPanelElementsToList: function(panelInstance, list) {\n appNS.appform.debugger('addPanelElementsToList start');\n var panelID = panelInstance.id,\n panelElements = panelInstance.panelElements,\n elementIDs = [],\n panelIdx;\n\n $.each(list, function(l) {\n if (list[l].id == panelID) {\n panelIdx = l;\n return false;\n }\n } );\n list.splice(panelIdx, 1);\n\n var listIdx = panelIdx;\n for (var i in panelElements) {\n list.splice(listIdx, 0, panelElements[i]);\n listIdx++;\n }\n\n $.each(panelElements, function() {\n elementIDs.push(this.id);\n } );\n appNS.appform.debugger('addPanelElementsToList completed');\n return { list:list, elementIDs: elementIDs } ;\n } ,\n removeElementFromList: function(elementID, list) {\n appNS.appform.debugger('removeElementFromList start');\n $.each(list, function(l) {\n if (list[l].id == elementID) {\n list.splice(l, 1);\n return false;\n }\n } );\n appNS.appform.debugger('removeElementFromList completed');\n return list;\n } ,\n extractElementParts: function(element) {\n appNS.appform.debugger('extractElementParts started');\n if (!appNS.util.arrayIncludes(appNS.appform.p.elementTypes, element.type)) {\n appNS.appform.debugger(['Don\\'t have this type: ' + element.type, 'element:', element]);\n return false;\n }\n var elNameTmp1 = element.type.charAt(0).toUpperCase(),\n elNameTmp2 = element.type.slice(1).toLowerCase(),\n className = 'appform' + elNameTmp1 + elNameTmp2;\n\n if (DEBUG_APPFORM_ELEMENTS['all'] == true\n || (DEBUG_APPFORM_ELEMENTS[element.type] !== undefined\n && DEBUG_APPFORM_ELEMENTS[element.type] === true)\n ) {\n if (element.config === undefined || element.config === null) {\n element.config = { debug: true } ;\n } else {\n element.config.debug = true;\n }\n }\n appNS.appform.debugger('extractElementParts completed');\n return { id: element.id, type: element.type, className: className, config: element.config } ;\n } ,\n getDialogInstance: function(dialogID) {\n appNS.appform.debugger('getDialogInstance started/completed');\n var rtn;\n $.each(appNS.appform.p.instances, function(i) {\n if (this.dialogID == dialogID) {\n var nsName = this.nsName;\n rtn = appNS.appform[this.nsName].p.dialog.instance;\n return true;\n }\n } );\n return rtn;\n } ,\n setJS: function(nsName) {\n appNS.appform.debugger('setJS started');\n var multiselects = [];\n $.each(appNS.appform[nsName].p.js, function(i) {\n if (this.element !== undefined && this.jsArgs !== undefined && this.jsArgs.length > 0) {\n var nsObject = appNS[this.element],\n nsFunc = nsObject['jsHandler'],\n handler = nsFunc.apply(nsObject, this.jsArgs);\n\n if (handler !== undefined && !$.isEmptyObject(handler) && handler.type !== undefined\n && handler.type == 'multiselect' && handler.object !== undefined && !$.isEmptyObject(handler.object)\n ) {\n appNS.appform[nsName].p.multiselects.push(handler.object);\n }\n }\n } );\n appNS.appform.debugger('setJS completed');\n } ,\n setCSS: function(nsName, autoLayout) {\n appNS.appform.debugger('setCSS started');\n if (autoLayout) {\n appNS.appform.setAutoLayout(nsName);\n }\n var formID = '#appForm_' + appNS.appform[nsName].p.formID;\n appNS.appform.debugger(['formID:', formID, 'CSS:', appNS.appform[nsName].p.css]);\n $.each(appNS.appform[nsName].p.css, function(e) {\n var elementCSS = this;\n $.each(elementCSS, function(i) {\n var selector = this.selector,\n rules = this.rules;\n $(formID).find(selector).css(rules);\n } );\n } );\n appNS.appform.debugger('setCSS completed');\n } ,\n setAutoLayout: function(nsName) {\n appNS.appform.debugger('setAutoLayout started');\n var formID = '#appForm_' + appNS.appform[nsName].p.formID,\n itemWidth = 0,\n maxLabelWidth = 0,\n maxElementWidth = 0;\n\n $(formID).find('.appFormLabelCntnr label').each(function() {\n itemWidth = appNS.appform.measureItem(this, 'width');\n maxLabelWidth = (itemWidth > maxLabelWidth) ? itemWidth : maxLabelWidth;\n } );\n $(formID).find('.appFormLabelCntnr').width(maxLabelWidth);\n $(formID).find('.appFormLabelCntnr label').width(maxLabelWidth).addClass('labelCol');\n\n $(formID).find('.appFormElement').each(function() {\n if ($(this).prop('tagName') != 'P') {\n itemWidth = appNS.appform.measureItem(this, 'width');\n maxElementWidth = (itemWidth > maxElementWidth) ? itemWidth : maxElementWidth;\n }\n } );\n $(formID).find('.appFormElmntOuterCntnr:not(.appFormParagraph) .appFormElmntInnerCntnr').width(maxElementWidth).css('float', 'right');\n\n $(formID).find('.appFormElmntOuterCntnr').css('clear', 'both');\n appNS.appform.debugger('setAutoLayout completed');\n } ,\n measureItem: function(item, dimension) {\n appNS.appform.debugger('measureItem started');\n var el = $(item).clone(false);\n el.css( { visibility: 'hidden', position: 'absolute', 'display': 'block' } ).appendTo('body');\n var measurement = (dimension == 'height') ? el.outerHeight(true) : el.outerWidth();\n el.remove();\n appNS.appform.debugger('measureItem completed');\n return measurement;\n } ,\n debugger: function(thingsToLog) {\n if (DEBUG_APPFORM) {\n if (thingsToLog.constructor === Array && thingsToLog.length) {\n for (var l in thingsToLog) {\n console.log(thingsToLog[l]);\n }\n } else if (thingsToLog.length) {\n console.log(thingsToLog);\n }\n }\n } ,\n validateElement: function(criteria) {\n appNS.appform.debugger('validateElement started');\n var valid = false,\n rtn = ((criteria.constructor === Array && criteria.length) ? appNS.appform.validate(criteria) : false);\n appNS.appform.debugger('validateElement completed');\n return rtn;\n } ,\n validate: function(toValidate) {\n appNS.appform.debugger('validate started');\n var valid = true;\n for (var v in toValidate) {\n var item = toValidate[v].item,\n type = toValidate[v].type,\n exemptLength = ((type === 'array' && toValidate[v].exemptLength !== undefined)\n ? toValidate[v].exemptLength : false\n ),\n stringified = ((type === 'array' && toValidate[v].stringified !== undefined)\n ? toValidate[v].stringified : false\n ),\n skip = (toValidate[v].skip !== undefined && toValidate[v].skip),\n inArray = ((toValidate[v].inArray !== undefined\n && toValidate[v].inArray.constructor === Array\n && toValidate[v].inArray.length)\n ? toValidate[v].inArray : null\n );\n if (skip) {\n continue;\n }\n if (type === 'string') {\n valid = (item !== undefined && item !== null && item !== '');\n } else if (type === 'object') {\n valid = (item !== undefined && item !== null && !$.isEmptyObject(item));\n } else if (type === 'array') {\n if (stringified) {\n valid = (item !== undefined && item !== null && item !== '');\n item = JSON.parse(item);\n }\n valid = (exemptLength)\n ? (item !== undefined && item.constructor === Array)\n : (item !== undefined && item.constructor === Array && item.length);\n }\n if (inArray !== null) {\n valid = (appNS.util.arrayIncludes(inArray, item));\n }\n if (!valid) {\n break;\n }\n }\n appNS.appform.debugger('validate completed');\n return valid;\n }\n} ;\n</script>\n \n<script type=\"text/javascript\">\n\nappNS.namespace('appdiag');\nappNS.appdiag = function(jqid, title, content, btns, options) {\n this.p = {\n jqid: jqid,\n pnlTitle: title,\n buttons: btns,\n centered: false,\n options: options,\n vscrollGutter: 15,\n centerX: 0,\n centerY: 0\n } ;\n this.build(content);\n} ;\n\nappNS.appdiag.prototype.show = function() {\n if (!this.p.centered) {\n appNS.jqx.centerModal(this.p.jqid);\n this.p.centered = true;\n }\n $(this.p.jqid).jqxWindow('show');\n this.fitContent();\n} ;\n\nappNS.appdiag.prototype.fitContent = function() {\n var h, hc;\n\n h = $(this.p.jqid).outerHeight();\n h -= $('> div.jqx-widget-header', this.p.jqid).outerHeight();\n hc = h;\n h -= $('> div.jqx-widget-content > div.' + this.p.options.pnlFooterClass, this.p.jqid).outerHeight();\n $('> div.jqx-widget-content > div.appdiag-content', this.p.jqid).height(h - 20);\n $('> div.jqx-widget-content', this.p.jqid).height(hc);\n} ;\n\nappNS.appdiag.prototype.contentChanged = function() {\n var w, o, dh, hh, fh, ch, newTop, newLeft, halfH, halfW;\n\n o = $(this.p.jqid).offset();\n this.p.centerX = o.left + Math.round($(this.p.jqid).outerWidth() / 2.0);\n this.p.centerY = o.top + Math.round($(this.p.jqid).outerHeight() / 2.0);\n\n hh = $('> div.jqx-widget-header', this.p.jqid).outerHeight();\n fh = $('> div.jqx-widget-content > div.' + this.p.options.pnlFooterClass, this.p.jqid).outerHeight();\n ch = $('> div.jqx-widget-content > div.appdiag-content > div', this.p.jqid).height();\n dh = hh + ch + 20 + fh;\n $(this.p.jqid).height(dh);\n\n w = $('> div.jqx-widget-content > div.appdiag-content > div', this.p.jqid).width();\n w = Math.max(200, w);\n $(this.p.jqid).width(w + 22 + this.p.vscrollGutter);\n\n $('> div.jqx-widget-content', this.p.jqid).height('auto');\n $('> div.jqx-widget-content > div.appdiag-content', this.p.jqid).height('auto');\n $('> div.jqx-widget-header', this.p.jqid).width('auto');\n $('> div.jqx-widget-content > div.' + this.p.options.pnlFooterClass, this.p.jqid).width('auto');\n $('> div.jqx-widget-content', this.p.jqid).width('auto');\n $('> div.jqx-widget-content > div.appdiag-content', this.p.jqid).width('auto');\n this.fitContent();\n\n o = $(this.p.jqid).offset();\n newTop = o.top;\n newLeft = o.left;\n if (this.p.options.adjustTop === true) {\n halfH = Math.round($(this.p.jqid).outerHeight() / 2.0);\n newTop = this.p.centerY - halfH;\n }\n if (this.p.options.adjustLeft === true) {\n halfW = Math.round($(this.p.jqid).outerWidth() / 2.0);\n newLeft = this.p.centerX - halfW;\n }\n\n if (newTop < 0) {\n newTop = 0;\n }\n if (newLeft < 0) {\n newLeft = 0;\n }\n $(this.p.jqid).offset( { top: newTop , left: newLeft } );\n} ;\n\nappNS.appdiag.prototype.hide = function() {\n $(this.p.jqid).jqxWindow('hide');\n} ;\n\nappNS.appdiag.prototype.destroy = function() {\n $(this.p.jqid).jqxWindow('destroy');\n} ;\n\nappNS.appdiag.prototype.getJqId = function() {\n return this.p.jqid;\n} ;\n\nappNS.appdiag.prototype.replaceButtonPanel = function(buttons) {\n if (this.p.options.simpleClose) {\n return false; }\n if (typeof buttons !== 'undefined' && buttons.constructor === Array) {\n this.p.buttons = buttons;\n $('div.pnlButtonFooter', this.p.jqid).empty();\n this.buildButtonPanel();\n return true;\n }\n} ;\n\nappNS.appdiag.prototype.replaceTitle = function(title) {\n if (typeof title === 'string') {\n this.p.pnlTitle = title;\n $('div.pnlTitle', this.p.jqid).html(title);\n }\n} ;\n\nappNS.appdiag.prototype.replaceContent = function(template) {\n $('> div > div.appdiag-content > div', this.p.jqid).empty();\n $('> div > div.appdiag-content > div', this.p.jqid).append(template);\n this.contentChanged();\n} ;\n\nappNS.appdiag.prototype.appendContent = function(template) {\n $('> div > div.appdiag-content > div', this.p.jqid).append(template);\n this.contentChanged();\n} ;\n\nappNS.appdiag.prototype.buildButtonPanel = function()\n{\n var ctx = this, id = this.p.jqid.substr(1);\n if (this.p.options.simpleClose) {\n return; }\n\n if ($.type(this.p.buttons) !== 'array' || this.p.buttons.length == 0) {\n this.p.buttons = [\n { template: 'primary', label: 'Yes', width: 50, classes: [], func: 'alert', args: ['You clicked Yes'] } ,\n { label: 'No', width: 50, classes: [], func: 'alert', args: ['You clicked No'] }\n ];\n }\n $.each(this.p.buttons, function(i, btncfg) {\n var btn_id = id + '-btn' + i, tpl, func, args, width = 'auto', lbl = 'Button ' + (i + 1);\n if ($.type(btncfg['label']) == 'string') {\n lbl = btncfg['label'];\n }\n $('div.pnlButtonFooter', ctx.p.jqid).append('<button id=\"' + btn_id + '\" class=\"btn\">' + lbl + '</button>');\n if ($.type(btncfg['width']) === 'number') {\n width = btncfg['width'];\n }\n if ($.type(btncfg['func']) === 'string') {\n func = btncfg['func'];\n } else {\n func = 'alert';\n }\n if ($.type(btncfg['args']) === 'array') {\n args = btncfg['args'];\n } else {\n args = ['You clicked ' + lbl];\n }\n tpl = 'default';\n if ($.type(btncfg['template']) === 'string') {\n tpl = btncfg['template'];\n }\n $('#' + btn_id).jqxButton( { theme: appNS.jqx.theme, width: width, template: tpl } );\n\n if (btncfg['classes'] !== undefined && btncfg['classes'].length) {\n var classes = '';\n $.each(btncfg['classes'], function(i, btncfg) {\n if (this == 'disabled') {\n $('#' + btn_id).prop('disabled', true);\n } else if (this == 'hidden') {\n $('#' + btn_id).hide();\n } else {\n classes += (classes != '') ? ' ' + this : this;\n }\n } );\n $('#' + btn_id).addClass(classes);\n }\n\n if ($.type(btncfg['css']) === 'object') {\n $('#' + btn_id).css(btncfg['css']);\n }\n if ($.type(btncfg['tip']) === 'string') {\n $('#' + btn_id).attr('title', btncfg['tip']);\n }\n $('#' + btn_id).on('click', function() {\n if (func == 'alert') {\n alert(args[0]);\n } else {\n appNS.tpmBase.run(func, args);\n }\n } );\n } );\n} ;\n\nappNS.appdiag.prototype.build = function(content) {\n var tpl, sty, id = this.p.jqid.substr(1), opts, initProps, vscrollGutter = 15,\n mwh = Math.round($(window).height() * .95) - 40, mww = Math.round($(window).width() * .95); - 35; if (mwh < 40) {\n mwh = 40;\n }\n this.p.centerX = Math.round(mww / 2.0);\n this.p.centerY = Math.round(mwh / 2.0);\n\n opts = {\n simpleClose: false,\n noScroll: false,\n maxWidth: mww,\n maxHeight: mwh,\n adjustLeft: true,\n adjustTop: true,\n pnlFooterClass: 'pnlButtonFooter'\n } ;\n if (this.p.options !== undefined && this.p.options !== null) {\n if (typeof this.p.options.simpleClose === 'boolean') {\n opts.simpleClose = this.p.options.simpleClose;\n if (opts.simpleClose) {\n opts.pnlFooterClass = 'pnlFauxFooter';\n }\n }\n if (typeof this.p.options.noScroll === 'boolean') {\n opts.noScroll = this.p.options.noScroll;\n if (opts.noScroll) {\n vscrollGutter = 0;\n }\n }\n if (typeof this.p.options.maxHeight === 'number'\n && isFinite(this.p.options.maxHeight)\n && Math.floor(this.p.options.maxHeight) === this.p.options.maxHeight\n && this.p.options.maxHeight <= opts.maxHeight\n ) {\n opts.maxHeight = this.p.options.maxHeight;\n }\n if (typeof this.p.options.maxWidth === 'number'\n && isFinite(this.p.options.maxWidth)\n && Math.floor(this.p.options.maxWidth) === this.p.options.maxWidth\n && this.p.options.maxWidth <= opts.maxWidth\n ) {\n opts.maxWidth = this.p.options.maxWidth;\n }\n if (typeof this.p.options.adjustTop === 'boolean') {\n opts.adjustTop = this.p.options.adjustTop;\n }\n if (typeof this.p.options.adjustLeft === 'boolean') {\n opts.adjustLeft = this.p.options.adjustLeft;\n }\n }\n this.p.options = opts; this.p.vscrollGutter = vscrollGutter;\n\n if ($.type(this.p.pnlTitle) !== 'string') {\n this.p.pnlTitle = 'Dialog';\n }\n sty = 'margin: 10px; padding-right: ' + vscrollGutter + 'px; background-color: #ffffff;'\n + 'max-height: ' + opts.maxHeight + 'px;max-width: ' + opts.maxWidth + 'px;'\n + 'overflow: ' + (opts.noScroll ? 'hidden': 'auto') + ';';\n tpl = '<div id=\"' + id + '\">'\n + '<div><div class=\"pnlTitle\">' + this.p.pnlTitle + '</div></div>'\n + '<div>'\n + '<div class=\"appdiag-content\" style=\"' + sty + '\">'\n + '<div class=\"appdiagContentSub\" style=\"width: auto; display: table;\"></div>'\n + '</div>'\n + '<div class=\"' + opts.pnlFooterClass + '\"></div>'\n + '</div>'\n + '</div>';\n $(document.body).append(tpl);\n $('> div > div.appdiag-content > div', this.p.jqid).append(content);\n\n this.buildButtonPanel();\n\n initProps = {\n theme: appNS.jqx.theme,\n minWidth: 200,\n maxWidth: mww, maxHeight: mwh, width: 'auto',\n height: 'auto',\n resizable: false,\n autoOpen: false,\n keyboardCloseKey: '',\n keyboardNavigation: false,\n showCloseButton: opts.simpleClose,\n isModal: true\n } ;\n if (opts.simpleClose) {\n initProps['closeButtonAction'] = 'close';\n }\n\n $(this.p.jqid).jqxWindow(initProps);\n $('> div:eq(1)', this.p.jqid).css('background-color', '#ffffff');\n $(this.p.jqid).jqxWindow('width', $(this.p.jqid).width() + 2);\n} ;\n\n</script>\n\n <script type=\"text/javascript\">\n\nappNS.namespace('appnotice');\nappNS.appnotice = function(msg, cfg) { \n var ctx = this;\n this.jqid = '#app-notification' + appNS.appnotice.idCnt++;\n this.build(msg, cfg);\n $(this.jqid).on('close', function() {\n $(ctx.jqid).jqxNotification('destroy');\n } );\n} ;\nappNS.appnotice.idCnt = 1;\n\nappNS.appnotice.prototype.open = function() {\n $(this.jqid).jqxNotification('open');\n} ;\n\nappNS.appnotice.prototype.close = function() {\n $(this.jqid).jqxNotification('closeLast');\n} ;\n\nappNS.appnotice.prototype.destroy = function() {\n $(this.jqid).jqxNotification('destroy');\n} ;\n\nappNS.appnotice.prototype.getJqId = function() {\n return this.jqid;\n} ;\n\nappNS.appnotice.prototype.build = function(msg, config) {\n var cfg = config, tpl, id = this.jqid.substr(1);\n\n if ($.type(cfg) !== 'object') {\n cfg = { } ;\n }\n cfg['theme'] = appNS.jqx.theme;\n cfg['autoOpen'] = true;\n cfg['position'] = 'bottom-right';\n\n tpl = '<div id=\"' + id + '\"><div>' + msg + '</div></div>';\n $(document.body).append(tpl);\n\n $(this.jqid).jqxNotification(cfg);\n} ;\n\n</script>\n\n <script type=\"text/javascript\">\n appNS.namespace('masterLogin');\n appNS.masterLogin = {\n p: {\n overlay : null,\n expiringPwDialog: null,\n appformDialog: null,\n browserDetector: '1',\n maintenanceOverride: '0',\n changePwModalDfltLeadMsg: '<span class=\"attention\">Attention:</span> '\n + 'Your password has expired. Please enter a new one.',\n changePwModalLeadMsg: null,\n generatedPw: '',\n currentPwEntry: '',\n newPwEntry: '',\n confirmPwEntry: '',\n hidePwModalLeadMsg: false\n } ,\n\n init: function() {\n\n appNS.masterLogin.detectBrowserData();\n appNS.masterLogin.changePwModalResetLeadMsg();\n\n $(\"#btnSubmit\").click(function(event) {\n event.preventDefault();\n appNS.masterLogin.login();\n } );\n\n $(\"#pw\").keydown(function(e) {\n if (e.keyCode == 13) {\n appNS.masterLogin.login();\n }\n } );\n\n } , cancelPwChange: function(pwStats, pwIsExpiring) {\n\n appNS.masterLogin.changePwModalRemove();\n if (pwIsExpiring && pwStats != '') {\n appNS.masterLogin.expiringPwNotChanging(pwStats);\n }\n appNS.masterLogin.overlayRemove();\n\n } , changeExpiringPw: function(pwStats) {\n\n appNS.masterLogin.expiringPwDialogRemove();\n appNS.masterLogin.p.hidePwModalLeadMsg = true;\n appNS.masterLogin.changePwModalAdd(pwStats, 1);\n\n } , changePw: function(pwStats, pwIsExpiring) {\n\n var $loginID = $(\"#loginID\"),\n $existingPw = $(\"#pw\"),\n $currentPw = $(\"#currentPw\"),\n $newPw = $(\"#newPw\"),\n $confirmPw = $(\"#confirmPw\"),\n errorMsgs = [],\n changePwModalLeadMsg = '';\n\n appNS.masterLogin.overlayAdd();\n appNS.masterLogin.changePwModalRemove();\n appNS.masterLogin.p.currentPwEntry = $currentPw.val();\n appNS.masterLogin.p.newPwEntry = $newPw.val();\n appNS.masterLogin.p.confirmPwEntry = $confirmPw.val();\n\n var data = {\n loginID: $loginID.val(),\n currentPw: $currentPw.val(),\n newPw: $newPw.val(),\n confirmPw: $confirmPw.val(),\n pwStats: pwStats,\n pwIsExpiring: pwIsExpiring\n } ;\n\n appNS.tpmBase.ajaxReq(\n 'changePw',\n data,\n '/',\n 'appNS.masterLogin.changePwHndl',\n null,\n null\n );\n\n } , changePwHndl: function(data) {\n\n if (data) {\n if (data.modalErrorMsgs !== undefined && data.modalErrorMsgs && data.modalErrorMsgs.length > 0\n && data.pwStats !== undefined && data.pwIsExpiring !== undefined\n ) {\n appNS.masterLogin.p.hidePwModalLeadMsg = false;\n appNS.masterLogin.p.changePwModalLeadMsg = appNS.masterLogin.changePwModalErrors(data.modalErrorMsgs);\n appNS.masterLogin.changePwModalAdd(data.pwStats, data.pwIsExpiring);\n } else {\n appNS.masterLogin.loginHndl(data);\n }\n }\n appNS.masterLogin.overlayRemove();\n\n } , changePwModalAdd: function(pwStats, pwIsExpiring) {\n\n var hideLeadMsg = (appNS.masterLogin.p.hidePwModalLeadMsg),\n hideElement = (appNS.masterLogin.p.generatedPw == ''),\n appFormConfig = {\n id: 'changePwDialog',\n type: 'dialog',\n title: 'Please Enter Your Current and New Password',\n formID: 'pwExpiresForm'\n } ,\n appFormElements = [\n { id: 'pwExpiresPrgrph1', type: 'paragraph', config: {\n content: appNS.masterLogin.p.changePwModalLeadMsg, hide: hideLeadMsg\n } } ,\n { id: 'pwExpiresPrgrph2', type: 'paragraph', config: {\n content: 'Password must be at least 8 characters and include<br />\\n1 uppercase letter, 1 lowercase letter, and 1 number.'\n } } ,\n { id: 'currentPw', type: 'password', config: {\n label: 'Current',\n defaultVal: appNS.masterLogin.p.currentPwEntry\n } } ,\n { id: 'newPw', type: 'password', config: {\n label: 'New Password',\n defaultVal: appNS.masterLogin.p.newPwEntry\n } } ,\n { id: 'confirmPw', type: 'password', config: {\n label: 'Confirm new password',\n defaultVal: appNS.masterLogin.p.confirmPwEntry\n } } ,\n { id: 'beforeGeneratingFlds', type: 'div', config: {\n css: [\n { selector: '#beforeGeneratingFlds', rules: {\n marginBottom: '15px', clear: 'both', float: 'left'\n } }\n ]\n } } ,\n { id: 'pwExpiresPrgrph3', type: 'paragraph', config: {\n content: 'This password is suggested for your use.',\n hidden: hideElement\n } } ,\n { id: 'pwExpiresPrgrph4', type: 'paragraph', config: {\n content: appNS.masterLogin.p.generatedPw,\n hidden: hideElement\n } } ,\n { id: 'pwExpiresPrgrph5', type: 'paragraph', config: {\n content: 'Please record it in a safe/secure place<br />\\n<em>This is the only time it will be displayed.<\\/em>',\n hidden: hideElement\n } } ,\n { id: 'afterGeneratingFlds', type: 'div', config: {\n hidden: hideElement,\n css: [\n { selector: '#afterGeneratingFlds', rules: {\n marginBottom: '15px', clear: 'both', float: 'left'\n } }\n ]\n } } ,\n { id: 'btnCancel', type: 'button', config: {\n formType: 'dialog',\n label: 'Cancel',\n onClickHandler: 'appNS.masterLogin.cancelPwChange',\n onClickHandlerArgs: [pwStats, pwIsExpiring]\n } } ,\n { id: 'btnSubmitNewPw', type: 'button', config: {\n formType: 'dialog',\n label: 'Submit',\n onClickHandler: 'appNS.masterLogin.changePw',\n onClickHandlerArgs: [pwStats, pwIsExpiring]\n } } ,\n { id: 'btnGeneratePw', type: 'button', config: {\n formType: 'dialog',\n label: 'Generate Password',\n onClickHandler: 'appNS.masterLogin.generatePw',\n onClickHandlerArgs: [pwStats, pwIsExpiring]\n } }\n ];\n\n appNS.masterLogin.overlayRemove();\n appNS.masterLogin.p.appformDialog = new appNS.appform.init(appFormConfig, appFormElements);\n\n } , changePwModalErrors: function(modalErrorMsgs) {\n\n var changePwModalLeadMsg = '<span class=\"attention\">Attention:</span> ';\n if (modalErrorMsgs.length > 1) {\n changePwModalLeadMsg += 'Please note the following errors.<ul>';\n for (e in modalErrorMsgs) {\n changePwModalLeadMsg += '<li>' + modalErrorMsgs[e] + '</li>';\n }\n changePwModalLeadMsg += '</ul>';\n } else if (modalErrorMsgs.length == 1) {\n changePwModalLeadMsg += modalErrorMsgs[0];\n }\n return changePwModalLeadMsg;\n\n } , changePwModalRemove: function() {\n\n if (appNS.masterLogin.p.appformDialog != null) {\n appNS.masterLogin.p.appformDialog.destroyDialog('changePwDialog');\n appNS.masterLogin.p.appformDialog = null;\n }\n\n } , changePwModalResetLeadMsg: function() {\n\n appNS.masterLogin.p.changePwModalLeadMsg = appNS.masterLogin.p.changePwModalDfltLeadMsg;\n\n } , clearErrorMsg: function() {\n\n $(\"#errorMsg\").html('');\n\n } , deepValue: function(obj, path) {\n\n for (var i=0, path=path.split('.'), len=path.length; i<len; i++) {\n obj = obj[path[i]];\n }\n return obj;\n\n } , detectBrowserData: function() {\n\n if (appNS.masterLogin.p.browserDetector) {\n var response = new $.jqx.response(),\n platformData = appNS.masterLogin.getBrowserData(response, {\"osName\":\"os.name\",\"browserName\":\"browser.name\",\"browserVersion\":\"browser.version\",\"osVersion\":\"os.version\",\"osPlatform\":\"os.platform\",\"deviceType\":\"device.type\"}),\n featureData = appNS.masterLogin.getBrowserData(Modernizr, {\"input_types_date\":\"inputtypes.date\",\"input_attribute_autofocus\":\"input.autofocus\",\"canvas\":\"canvas\",\"inlinesvg\":\"inlinesvg\",\"touch\":\"touch\",\"svgclippaths\":\"svgclippaths\"}),\n localTime = new Date(),\n data = {\n utcOffsetSec: (localTime.getTimezoneOffset() * 60),\n platformData: platformData,\n featureData: featureData,\n } ;\n appNS.masterLogin.overlayAdd();\n appNS.tpmBase.ajaxReq(\n 'reportBrowserData',\n data,\n '/',\n 'appNS.masterLogin.detectBrowserDataHndl',\n null,\n null\n );\n }\n\n } , detectBrowserDataHndl: function() {\n\n appNS.masterLogin.overlayRemove();\n\n } , expiringPwNotChanging: function(pwStats) {\n appNS.masterLogin.overlayAdd();\n var data = { pwStats: pwStats } ;\n appNS.tpmBase.ajaxReq(\n 'expiringPasswordNotChanging',\n data,\n '/',\n null,\n null,\n null\n );\n\n } , expiringPwDialogAdd: function(pwExpiringInDays, pwStats) {\n\n var title = 'Password Expiring Soon',\n tmpMsg = '<p>Your password will expire in ::::number:::: days.<\\/p><p>Would you like to set a new one now?<\\/p>',\n msg = tmpMsg.replace('::::number::::', pwExpiringInDays),\n appFormConfig = {\n id: 'expiringPwDialog',\n type: 'dialog',\n title: 'Password Expiring Soon',\n formID: 'expiringPwForm',\n dialogOptions: { maxHeight: 90 }\n\n } ,\n appFormElements = [\n { id: 'expiringPwPrgrph', type: 'paragraph', config: { content: msg } } ,\n { id: 'btnKeepExpiringPw', type: 'button', config: {\n formType: 'dialog',\n label: 'No',\n onClickHandler: 'appNS.masterLogin.keepExpiringPw',\n onClickHandlerArgs: [pwStats]\n } } ,\n { id: 'btnChangeExpiringPw', type: 'button', config: {\n formType: 'dialog',\n label: 'Yes',\n onClickHandler: 'appNS.masterLogin.changeExpiringPw',\n onClickHandlerArgs: [pwStats]\n } }\n ];\n appNS.masterLogin.overlayRemove();\n appNS.masterLogin.p.appformDialog = new appNS.appform.init(appFormConfig, appFormElements);\n\n } , expiringPwDialogRemove: function() {\n\n if (appNS.masterLogin.p.appformDialog != null) {\n appNS.masterLogin.p.appformDialog.destroyDialog('expiringPwDialog');\n appNS.masterLogin.p.appformDialog = null;\n }\n\n } , generatePw: function(pwStats, pwIsExpiring) {\n\n appNS.masterLogin.changePwModalRemove();\n appNS.masterLogin.overlayAdd();\n var data = {\n pwStats: pwStats,\n pwIsExpiring: pwIsExpiring\n } ;\n appNS.tpmBase.ajaxReq(\n 'generatePw',\n data,\n '/',\n 'appNS.masterLogin.generatePwHndl',\n null,\n null\n );\n\n } , generatePwHndl: function(data) {\n\n if(data && data.pw !== undefined && data.pw && data.pwStats !== undefined && data.pwIsExpiring !== undefined) {\n appNS.masterLogin.p.generatedPw = data.pw;\n appNS.masterLogin.p.newPwEntry = data.pw;\n appNS.masterLogin.p.confirmPwEntry = data.pw;\n if (data.pwIsExpiring) {\n appNS.masterLogin.p.hidePwModalLeadMsg = true;\n } else {\n appNS.masterLogin.changePwModalResetLeadMsg();\n }\n appNS.masterLogin.changePwModalAdd(data.pwStats, data.pwIsExpiring);\n }\n\n } , getBrowserData: function(obj, arr) {\n\n var data = [];\n for (dataName in arr) {\n var dataValue = appNS.masterLogin.deepValue(obj, arr[dataName]);\n if (dataValue !== undefined && dataValue) {\n data.push( { name: dataName, value: dataValue } );\n }\n }\n return data;\n\n } , keepExpiringPw: function(pwStats) {\n\n appNS.masterLogin.expiringPwDialogRemove();\n appNS.masterLogin.expiringPwNotChanging(pwStats);\n\n } , login: function() {\n\n appNS.masterLogin.clearErrorMsg();\n var $loginID = $(\"#loginID\"),\n $pw = $(\"#pw\"),\n errorMsg;\n\n errorMsg = ($loginID.val() == '' || $pw.val() == '')\n ? 'Login failed.'\n : '';\n if (errorMsg != '') {\n $(\"#errorMsg\").html(errorMsg);\n } else {\n appNS.masterLogin.overlayAdd();\n var data = {\n loginID: $loginID.val(),\n pw: $pw.val(),\n maintenanceOverride: appNS.masterLogin.p.maintenanceOverride\n } ;\n appNS.tpmBase.ajaxReq(\n 'login',\n data,\n '/',\n 'appNS.masterLogin.loginHndl',\n null,\n null\n );\n }\n\n } , loginHndl: function(data) {\n if (data && data.errorMsg !== undefined && data.criticalErrorMsg !== undefined\n && data.pwExpired !== undefined && data.pwExpiringInDays !== undefined\n && data.pwStats !== undefined\n ) {\n if (data.errorMsg) {\n $('#errorMsg').html(data.errorMsg);\n appNS.masterLogin.overlayRemove();\n if (data.criticalErrorMsg) {\n $('#criticalErrorMsg').html(data.criticalErrorMsg);\n }\n } else if (data.pwExpired) {\n appNS.masterLogin.changePwModalAdd(data.pwStats, 0);\n } else if (data.pwExpiringInDays) {\n appNS.masterLogin.expiringPwDialogAdd(data.pwExpiringInDays, data.pwStats);\n }\n }\n\n } , overlayAdd: function() {\n\n appNS.masterLogin.p.overlay = new appNS.util.pgOverlay().init();\n\n } , overlayRemove: function() {\n\n if (appNS.masterLogin.p.overlay != null) {\n appNS.masterLogin.p.overlay.remove();\n appNS.masterLogin.p.overlay = null;\n }\n\n }\n } ;\n\n</script>\n\n <script type=\"text/javascript\">\n $(document).ready(function() {\n appNS.masterLogin.init();\n } );\n </script>\n\n <style>\n body {\n font-family: Roboto, sans-serif;\n font-size: 14px;\n color: #72777a;\n line-height: 1.5;\n letter-spacing: 0.2px;\n }\n *, *::before, *::after {\n box-sizing: border-box;\n }\n .alert {\n z-index: 1;\n margin: 15px;\n }\n .rtl {\n direction: RTL;\n }\n .peers {\n box-sizing: border-box;\n display: flex !important;\n align-items: flex-start;\n justify-content: flex-start;\n flex-flow: row wrap;\n height: auto;\n max-width: 100%;\n margin: 0;\n padding: 0;\n }\n .peer {\n display: block;\n height: auto;\n flex: 0 0 auto;\n }\n .peer-greed {\n flex: 1 1 auto;\n }\n .h-100vh {\n height: 100vh;\n }\n .login-bg {\n position: relative;\n background-repeat: no-repeat;\n background-position-y: center;\n background-position-x: center;\n background-size: cover;\n flex: 1 1 auto;\n display: block;\n height: 100% !important;\n }\n .centered {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n position: absolute;\n }\n #remember-me {\n opacity: 0;\n z-index: 1;\n }\n .remember-me-label {\n display: inline-block;\n vertical-align: middle;\n position: relative;\n padding-left: 17px;\n margin-bottom: 0;\n }\n .remember-me-label::before {\n border-radius: 50%;\n content: \"\";\n display: inline-block;\n position: absolute;\n width: 17px;\n height: 17px;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n margin-left: -12px;\n border: 1px solid #e6eaf0;\n background-color: #ffffff;\n -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .remember-me-label::after {\n display: inline-block;\n position: absolute;\n width: 17px;\n height: 17px;\n text-align: center;\n font-size: 10px !important;\n line-height: 17px;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n margin-left: -12px;\n color: #b9c2d0;\n }\n .form-control {\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: .25rem;\n transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\n }\n .bgc-white {\n background-color: #fff;\n }\n .ps {\n background: #46494E;\n }\n .form-group {\n margin-bottom: 1rem;\n }\n label {\n display: inline-block;\n margin-bottom: 0.5rem;\n font-weight: normal;\n }\n .text-dark {\n color: #343a40 !important;\n }\n .form-control {\n display: block;\n width: 100%;\n height: calc(2.0625rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 14px;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n }\n .btn {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n }\n .btn-primary {\n color: #fff;\n background-color: #2196f3;\n border-color: #2196f3;\n }\n .btn-primary:hover {\n color: #fff;\n background-color: #0c83e2;\n border-color: #0c7cd5;\n }\n a {\n color: #0f9aee !important;\n }\n a:hover {\n text-decoration: none;\n color: #0c7bbe !important;\n }\n .btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n }\n .position-relative {\n position: relative !important;\n }\n .pY-80 {\n padding-top: 80px !important;\n padding-bottom: 80px !important;\n }\n .pX-40 {\n padding-left: 40px !important;\n padding-right: 40px !important;\n }\n .fw-300 {\n font-weight: 300 !important;\n }\n .c-grey-900, .cH-grey-900:hover {\n color: #313435 !important;\n }\n .login-header-text {\n letter-spacing: 0.5px;\n line-height: 31.5px;\n margin-block-end: 40px;\n margin-block-start: 0px;\n margin-bottom: 40px;\n margin-inline-end: 0px;\n margin-inline-start: 0px;\n margin-top: 0px;\n text-align: left;\n text-size-adjust: 100%;\n width: 346.984px;\n -webkit-font-smoothing: antialiased;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n }\n .forgotLinks {\n margin-bottom: 0.5rem;\n }\n .row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .col-8, .col-4, .col-12, .col-md-4 {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n }\n .col-8 {\n flex: 0 0 66.66667%;\n max-width: 66.66667%;\n }\n .col-4 {\n flex: 0 0 33.33333%;\n max-width: 33.33333%;\n }\n .col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n #btnSubmit {\n font-weight: normal;\n font-size: 14px;\n height: 35px;\n }\n input[type=\"text\"], input[type=\"password\"] {\n height: 35px;\n padding: 6px 12px 6px 12px;\n }\n @media (min-width: 768px) {\n .col-md-4 {\n flex: 0 0 33.33333%;\n max-width: 33.33333%;\n }\n }\n #errorMsg {\n text-align: right;\n color: #FF0000;\n font-weight: bold;\n padding: 25px 25px 0 0;\n max-width: 300px;\n }\n #criticalErrorMsg {\n text-align: right;\n color: #FF0000;\n font-weight: bold;\n padding: 20px 0px 0 0;\n }\n #changePwDialog #pwExpiresPrgrph1, #appformParagraph_pwExpiresPrgrph1 .appFormElement {\n line-height: 12px;\n padding: 0;\n margin: 0;\n }\n #changePwDialog #pwExpiresPrgrph2 {\n line-height: 12px;\n font-style: italic;\n margin: 0;\n }\n #changePwDialog #pwExpiresPrgrph4 {\n font-size: 150%;\n margin: 0;\n }\n #changePwDialog label.labelCol {\n text-align: left;\n }\n #changePwDialog .pnlButtonFooter {\n position: absolute;\n bottom: 10px;\n right: 10px;\n }\n #expiringPwDialog, .jqx-popup-classic {\n padding-bottom: 8px;\n }\n #expiringPwDialog button, .jqx-popup-classic button {\n float: right;\n margin-right: 10px;\n }\n .rtl {\n direction: RTL !important;\n }\n </style>\n</head>\n<body>\n<noscript><table align=\"center\" width=\"680\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\" bgcolor=\"#000000\"><tbody><tr><td><table bgcolor=\"#ffffcb\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\"><tbody><tr><td bgcolor=\"#d80000\" align=\"center\"><b><font size=\"3\" color=\"#ffffff\">No Javascript</font></b></td></tr><tr><td><font color=\"#d80000\" size=\"3\">Your browser may be configured to disable JavaScript, or if you have an older browser, it may not support JavaScript. In any case, you will be unable to utilize this website fully without support for JavaScript and properly enabling it.</font></td></tr></tbody></table></td></tr></tbody></table></noscript>\n<div id=\"masterLoginCntnr\">\n <div class='peers ai-s h-100vh'>\n <div class='login-bg' style=\"background-image: url('https://cms.securimate.com/assets/image/login-background.jpg')\">\n <div class='centered'>\n <div class='bgc-white' style=\"width: 200px; height: 75px; border-radius: 10px;\">\n <img class='centered' src='https://cms.securimate.com/assets/image/logo.png' alt='Steele Logo' style=\"width: 175px; height: 50px\" />\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-4 peer pX-40 pY-80 h-100 bgc-white scrollable pos-r\" style=\"min-width: 320px;\">\n <h4 class='fw-300 c-grey-900 login-header-text' style=\"margin-bottom: 40px; font-size: 21px;\">Login</h4>\n <form style=\"margin-bottom: 40px;\">\n <div class=\"form-group\">\n <div id=\"errorMsg\"></div>\n </div>\n <div class=\"form-group\">\n <Label class='text-normal text-dark'>User ID</Label>\n <Input id=\"loginID\" name='email' type='text' class='form-control' required='required' autofocus />\n </div>\n <div class=\"form-group\">\n <Label class='text-normal text-dark'>Password</Label>\n <Input id=\"pw\" name='password' type='password' class='form-control' required='required' autocomplete=\"off\" />\n </div>\n <div class=\"form-group\">\n <div class='row'>\n <div class='col-4'>\n <Input id=\"btnSubmit\" type='submit' value='Login' class='btn btn-primary' />\n </div>\n </div>\n </div>\n </form>\n <div>\n <div class=\"forgotLinks\">\n <a href=\"/forgot/password\" title=\"Forgot your password?\">Forgot your password?</a>\n <a href=\"/forgot/username\" style=\"margin-left: 20px;\" title=\"Forgot Your User ID?\">Forgot Your User ID?</a>\n </div>\n <div id=\"criticalErrorMsg\"></div>\n </div>\n <div>\n <div class=\"supportLinks\">\n <a href=\"https://securimate.zendesk.com/hc/en-us/requests/new\" target=\"_blank\" title=\"Securimate Support\">Securimate Support</a>\n </div>\n <div id=\"criticalErrorMsg\"></div>\n </div>\n </div>\n </div>\n</div>\n</body>\n</html>\n","status":200,"statusText":"OK"},"settings":{"url":"/","type":"POST","isLocal":false,"global":true,"processData":true,"async":true,"contentType":"application/x-www-form-urlencoded; charset=UTF-8","accepts":{"*":"*/*","text":"text/plain","html":"text/html","xml":"application/xml, text/xml","json":"application/json, text/javascript","script":"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},"contents":{"xml":{},"html":{},"json":{},"script":{}},"responseFields":{"xml":"responseXML","text":"responseText","json":"responseJSON"},"converters":{"text html":true},"flatOptions":{"url":true,"context":true},"jsonp":"callback","dataType":"json","data":"utcOffsetSec=-7200&platformData%5B0%5D%5Bname%5D=osName&platformData%5B0%5D%5Bvalue%5D=Mac+OS+X&platformData%5B1%5D%5Bname%5D=browserName&platformData%5B1%5D%5Bvalue%5D=Chrome&platformData%5B2%5D%5Bname%5D=browserVersion&platformData%5B2%5D%5Bvalue%5D=74.0.3729.169&platformData%5B3%5D%5Bname%5D=osPlatform&platformData%5B3%5D%5Bvalue%5D=Linux+x86_64&platformData%5B4%5D%5Bname%5D=deviceType&platformData%5B4%5D%5Bvalue%5D=Desktop&featureData%5B0%5D%5Bname%5D=input_types_date&featureData%5B0%5D%5Bvalue%5D=true&featureData%5B1%5D%5Bname%5D=input_attribute_autofocus&featureData%5B1%5D%5Bvalue%5D=true&featureData%5B2%5D%5Bname%5D=canvas&featureData%5B2%5D%5Bvalue%5D=true&featureData%5B3%5D%5Bname%5D=inlinesvg&featureData%5B3%5D%5Bvalue%5D=true&featureData%5B4%5D%5Bname%5D=svgclippaths&featureData%5B4%5D%5Bvalue%5D=true&op=reportBrowserData&pgAuth=gGwMF92d1ZWNT3JqOyk","dataTypes":["text","json"],"crossDomain":false,"hasContent":true},"err":{}}

Security Headers

This page lists any security headers set by the main page. If you want to understand what these mean and how to use them, head on over to this page

Header Value
Strict-Transport-Security max-age=63072000
X-Frame-Options SAMEORIGIN
X-Xss-Protection 1; mode=block

Indicators

This is a term in the security industry to describe indicators such as IPs, Domains, Hashes, etc. This does not imply that any of these indicate malicious activity.

cms.securimate.com
login.securimate.com
13.93.200.124
96.45.83.163
0898b2d773c55d7f5a8fb4fd1174e618d0b411efc14e2ceeba22a1eccc609928
1d3cb49af8c277a9e780d3d271f12e4e3d8015bf2320f7345436c2475aacd156
2b009570b73aaf6726a54c0c884d6237129d39f13b359c976e365044eefdd465
2f659dd1a2186ce358d466a14b91825f005b130f17b0a3211c04c56408e04741
34e29ba80eabe03e27d58aea64eeac53ac366fbfc81f2569b5b87c42f3b0235d
37bab86dadee3f86698444ddce1abaeb48f4e8d92eaeb3931ecfa54924ccecce
40c0b89461994220bd667486616921855aaca1a8f0164f2af14753291d409f5c
50a12ab5365fbcaf24f5e1581c81daa7f16d4067ce460e5a56d97f96f35e2633
590b2b2fe7f495655772b9bbf3c1c75b5025da757b3374ce4b1cd1da97dbe283
5a35a895f9c6277e62a5c48470c1b9fdc20adba118c1552270952a958df216be
5ce7a3de7e5dec90dab211522c25824f58a1ccfb3bc94287774c7a342f2b9258
637b5ca49195f9be4baf4207189d7c8cd87b7dd4ba2656e7e87fc1a58caa3e0e
63f5563365eb1616a6c00da9c9c998765547db3855bcef905d0f6f5b716f6c7f
723b5079110ff8d2f552bb668e1cc53a4ea36cc173233861b766523c1b3d9ec0
76c978a9d837f0af10c57e6a4f537d0abafca1ea50cbf542ddd05047285b858b
7a1a16e81dd9debf22f08aa52c1a6990c6d3eddbcf05d61d0584bbaa1dd9e739
85963d2b9b34eef85a75ffc66cc3fdc1c2cdb65fed818de876e4ecba817f3989
8c7fcabf3795a63c649ea1a97573040113577064d5cb8719a1ecc2918e4cf3ac
8d354ab7963436fdb40cf23c45839df5bd26e8be1aa71434ea2462110be58ed3
94c67a9b5a876d5479ac7a34a113fa20375b31f7b664e457d353b60b032c6cdf
9708606afd52f4792392cf5b7b2adff284e018bede03eef2684487867c6bb4a8
a22d6f9cd2e88e121dcabcd45931b5f064123d729866838af87bd568bb482976
a82cc70982b54080d9dd9574c38bb1f77610f685ff3e71f343c5743aafea98a8
ac28a6c4c8a52000235daef371a4f9e12c059e4f29e5a133abf540b635218257
ada32cfa1f0baff5d28ae2302f69d31796039e6bb60670f7da9e3860f798549c
bd0c39c97651ea36f105583813fdc5e3cf9fa2aec91dbaa73a4560b14f838435
bf79fd246b243b3ab7f2be84a8d23cf579f0583e268687cddfc44c2f9df7f777
c38499aadc367ebebc10a47525461d4b6168d1a0c478f360271637206f6aa34a
cbe5a0832afc881ed0e56ae16277bfc95d36460ab1cbafb790262d935da7f303
cd2f189be4a97e523e93be277c42ffb62d806143a03e2399e52250fee3d500db
cf75644af6556605b80a5a0137ca96c1c44152455912b2b1d8d99ac8d92f7847
d0545f52bac5c94b8e0c5e232eda0e6a46ad218fc8c4afc22ec26cb4abbcaa3d
da3f2bd706593c7231cec8e4e56fcb0aa7779c0bd312eda2e828d5dc47cc767a
da5533b9a66f1cdcb8304af4f0b99348c369c1125505491ed6e40ef087ae924e
e6a0e7f75b11b8f964af73b85e2ce781179258a153420e2000e31b1705c81b66