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":{}}
|