Odin HomeODIN logoODIN logo
TableJSON

Products

Cyble Vision
Cyber threat intelligence platform
Cyble Hawk
Threat detection and intelligence capabilities built for federal bodies
AmIBreached
Identify, Prioritize and Mitigate darkweb risks
The Cyber Express
Cyber Security News and Magazine

Search

HostsExposed BucketsExposed Files

Resources

API DocumentationPlatform GuideODIN CLIPostmanSDKs
GoPythonJavaScript

Contact Us

[email protected]

Legal

Terms of ServiceSecurity Disclosure PolicyPrivacy Policy
Leading Threat Intelligence Company
LinkedInTwitter XYoutube
ODIN logoODIN logo
LinkedInGithubMediumTwitter XYoutube
Launch YC: Odin - Attack surface monitoring and internet scanning for everyone

Made with ❤️ from Cupertino

© 2025 Cyble Inc. All Rights Reserved.

182.52.164.114

SummaryCVE DetailsRaw Data
02 Dec 2025, 09:43:24 UTC
{
  "scan_id": 1764431206,
  "ip": "182.52.164.114",
  "is_ipv4": true,
  "is_ipv6": false,
  "location": {
    "network": "182.52.164.0/22",
    "postal_code": "76000",
    "coordinates": {
      "latitude": "13.0672",
      "longitude": "100.0552"
    },
    "geo_point": "13.0672, 100.0552",
    "locale_code": "en",
    "continent": "Asia",
    "country_code": "TH",
    "country_name": "Thailand",
    "city": "Phetchaburi"
  },
  "location_updated_at": "2025-11-29T00:43:02Z",
  "asn": {
    "number": "AS23974",
    "organization": "Ministry of education",
    "country_code": ""
  },
  "asn_updated_at": "0001-01-01T00:00:00Z",
  "whois": {
    "network": "182.52.128.0/17",
    "organization": "TOT Public Company Limited",
    "descr": "TOT Public Company Limited",
    "_encoding": {
      "raw": "BASE64"
    }
  },
  "whois_updated_at": "2024-12-09T11:26:54Z",
  "tags": [
    {
      "name": "is_anonymous_proxy",
      "pretty_name": "Anonymous Proxy",
      "value": false,
      "last_updated_at": "2025-11-29T00:43:02Z"
    },
    {
      "name": "is_cdn",
      "pretty_name": "CDN",
      "value": false,
      "last_updated_at": "2025-11-29T05:22:57Z"
    },
    {
      "name": "is_satellite_provider",
      "pretty_name": "Satellite Provider",
      "value": false,
      "last_updated_at": "2025-11-29T00:43:02Z"
    }
  ],
  "hostnames": [
    {
      "name": "node-whe.pool-182-52.dynamic.nt-isp.net",
      "last_updated_at": "2025-12-02T10:17:42.618935535Z"
    }
  ],
  "services": [
    {
      "port": 80,
      "protocol": "tcp",
      "name": "http",
      "version": "",
      "product": "ZTE web server 1.0 ZTE corp 2015.",
      "extra_info": "",
      "tunnel": "",
      "modules": {
        "http": {
          "body": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"format-detection\" content=\"telephone=no,email=no,address=no\">\n<link rel=\"shortcut icon\" href=\"/img/favicon.ico\" />\n<title>&#72;&#56;&#49;&#48;&#50;&#69;</title>\n<style type=\"text/css\">\nhtml, body {\nmin-height:101%;\n}\nbody {\ntext-align: center;\nbackground: #F2F2F2;\noverflow-y: scroll;\n}\nbody, input, textarea, select, label, td, th {\nfont-size: 12px;\ncolor: #313131;\nfont-family: \"Microsoft YaHei\",Arial,SimSun,Verdana,Helvetica,Sans-Serif,Geneva;\n}\nbody, form, h1, h3, h4, p, ul, ol {\nmargin: 0;\n}\nul, ol {\npadding-left: 0;\nlist-style-type: none;\n}\na img {border: 0;}\ntable {\nborder-collapse: collapse;\nborder-spacing: 0;\n}\n#page_container {\nposition: relative;\nwidth: 960px;\nmargin: 0 auto;\npadding: 0 30px 15px 30px;\ntext-align: left;\nbackground: url(../img/site_holder.gif) repeat-y scroll center top;\n}\n#page_header {\npadding-bottom: 20px;\n}\n#banner {\nposition: relative;\nwidth: 100%;\nheight: 74px;\noverflow: hidden;\npadding-bottom: 5px;\n}\n#mainNavigator {\nwidth: 100%;\nheight: 38px;\ntext-align: center;\nmargin: 0 auto;\noverflow:hidden;\nbackground: #737373;\n}\n#page_content {\nposition: relative;\nmin-height: 510px;\nheight: auto !important;\nheight: 480px;\noverflow: visible;\ntext-align: center;\n}\n#page_footer {\nheight: 43px;\nline-height: 43px;\ntext-align: left;\nbackground-color: #F4F4F4;\nmargin-top: 15px;\npadding: 0 10px;\nborder-top: 1px solid #D7D7D7;\n}\n.logo {\nwidth: 110px;\nheight: 72px;\nfloat: left;\nbackground: url(../img/Logo_ZTE.png) no-repeat 5px 30px;\n}\n#banner_switchArea {\nwidth: 500px;\nheight: 25px;\nline-height: 25px;\nposition: absolute;\nbottom: 2px;\nright: 0px;\n}\n.AttentionMessage {\nleft:140px;\ntop:20px;\ncolor:red;\nfont-weight:bold;\nposition:absolute;\n}\n.timeArea {\nwidth: 300px;\nheight: 25px;\nline-height: 25px;\nposition: absolute;\nbottom: 2px;\nleft: 140px;\n}\n#banner_switchArea div {\nfloat: right;\ntext-align: center;\nmargin: 0 8px;\n}\n#banner_switchArea div.logUser{\npadding: 0px;\ntext-align: right;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\nmax-width: 180px;\n}\n.clickable {\ncursor: pointer;\n}\n#mainNavigator ul,li {\nmargin:0;\npadding:0;\nlist-style: none;\n}\n#mainNavigator {\nposition: relative;\n}\n#mainNavigator ul {\nposition: relative;\nleft: 50%;\nfloat: left;\n}\n#mainNavigator li {\nfloat: left;\nposition: relative;\nright: 50%;\nline-height: 34px;\n}\n#homeLi {\n}\n#mainNavigator a {\ndisplay: block;\nwidth: 100%;\nheight: 100%;\nbackground: url(../img/nv_middle.gif) repeat-x;\ntext-decoration: none;\n}\n#mainNavigator a:link,\n#mainNavigator a:visited {\ncolor: #FFFFFF;\n}\n#mainNavigator a.SelectMenuItem {\ncolor: #FFFFFF;\nbackground: url(../img/nv_s.gif) repeat-x;\n}\n#mn_first, #mn_last {\nheight: 100%;\nwidth: 5px;\nposition: absolute;\n}\n#mn_li {\nbackground: url(../img/nv_middle.gif) repeat-x;\nheight: 100%;\n}\n#mn_first {\nbackground: url(../img/nv_left.gif) no-repeat;\ntop: 0px;\nleft: 0px;\n}\n#mn_last {\nbackground: url(../img/nv_right.gif) no-repeat;\ntop: 0px;\nright: 0px;\n}\n#slogan {\nwidth: 200px;\nfloat: right;\nmargin: 0px;\ntext-align: right;\n}\n.caption2,\nh1 {\nborder-bottom: 1px dotted #313131;\nfont-size: 16px;\nfont-weight: normal;\npadding-bottom: 8px;\nmargin-bottom: 10px;\n}\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"file\"],\ntextarea,\nselect {\n-moz-box-sizing: border-box;\n-webkit-box-sizing: border-box;\nbox-sizing: border-box;\nheight: 26px;\n*height: 20px;\npadding: 2px;\nmargin: 2px 0;\nborder: 1px solid;\nborder-color: #AAAAAA #CCCCCC #CCCCCC #AAAAAA;\nborder-radius: 3px;\nbox-shadow: 0 1px 2px #CCCCCC inset;\n}\nselect {\n*height: 26px;\n}\ntextarea {\nmargin: 0;\nwidth: 100%;\n*width: 99%;\nresize: none;\nheight: 180px;\noverflow: auto;\n}\ninput[type=\"text\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"file\"]:focus,\ntextarea:focus {\nborder-color: #FF8040;\n-webkit-box-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\n-moz-box-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\nbox-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\n}\nselect:focus {\nborder-color: #FF8040;\n}\ninput[type=\"text\"]:disabled,\ninput[type=\"password\"]:disabled,\ninput[type=\"file\"]:disabled,\ntextarea:disabled,\nselect:disabled {\ncolor: #898989;\nbackground-color: #ECE9D8;\n}\ninput[type=\"checkbox\"] {\nmargin-left: 0;\nmargin-top: 9px;\n}\ninput[type=\"radio\"] {\nmargin-left: 0;\n}\n.Button,\n.button,\n.longBtn ,\n.disableBtn,\n.disableLongBtn,\n.BrowseBtn {\ncursor: pointer;\nheight: 28px;\nborder: none;\npadding: 0 15px;\nmin-width: 100px;\nborder-radius: 3px;\n}\n.Button,\n.button,\n.longBtn  {\nbackground-color: #0099cc;\nbackground-image: -moz-linear-gradient(top , #34c3f9, #0099cc);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#34c3f9), to(#0099cc));\nbackground-image: -webkit-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: -o-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: -ms-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: linear-gradient(top, #34c3f9, #0099cc);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#34c3f9', endColorstr='#0099cc', GradientType=0);\ncolor: #fff;\n}\n.Button:hover,\n.button:hover,\n.longBtn:hover,\n.Button:focus,\n.button:focus,\n.longBtn:focus {\nfont-weight: bold;\nfont-style: oblique;\n}\n.disableBtn,\n.disableLongBtn,\n.BrowseBtn {\nborder: 1px solid #878889;\nbackground-color: #ddd;\nbackground-image: -moz-linear-gradient(top , #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#ebebeb), to(#cdcdcd),color-stop(45%,#ddd));\nbackground-image: -webkit-linear-gradient(top, #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -o-linear-gradient(top, #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -ms-linear-gradient(top, #ebebeb, #cdcdcd);\nbackground-image: linear-gradient(top, #ebebeb, #cdcdcd);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#cdcdcd', GradientType=0);\n}\n.BrowseBtn\n{\ncolor: #000;\n}\n.disableBtn,\n.disableLongBtn {\ncursor: default;\ncolor: #898989;\n}\n.disableBtn:hover,\n.disableBtn:focus,\n.disableLongBtn:hover,\n.disableLongBtn:focus {\nfont-weight: normal;\nfont-style: normal;\n}\n.mac {\nwidth: 23px;\n}\n.ip {\nwidth: 32px;\n}\n.port {\nwidth: 67px;\n}\n.w37 {\nwidth: 37px;\n}\n.w40 {\nwidth: 40px;\n}\n.w45 {\nwidth: 45px;\n}\n.w50 {\nwidth: 50px;\n}\n.w60 {\nwidth: 60px;\n}\n.w70 {\nwidth: 70px;\n}\n.w75 {\nwidth: 75px;\n}\n.w80 {\nwidth: 80px;\n}\n.w100, .inputShort {\nwidth: 100px;\n}\n.w120 {\nwidth: 120px;\n}\n.w130 {\nwidth: 130px;\n}\n.w140 {\nwidth: 140px;\n}\n.w150, .inputNorm , .selectNorm {\nwidth: 150px;\n}\n.w160 {\nwidth: 160px;\n}\n.w165 {\nwidth: 165px;\n}\n.w170 {\nwidth: 170px;\n}\n.w175 {\nwidth: 175px;\n}\n.w180 {\nwidth: 180px;\n}\n.w200 {\nwidth: 200px;\n}\n.w210 {\nwidth: 210px;\n}\n.w217 {\nwidth: 217px;\n}\n.w220 {\nwidth: 220px;\n}\n.w230 {\nwidth: 230px;\n}\n.w250, .inputLong, .selectLong {\nwidth: 250px;\n}\n.w280 {\nwidth: 280px;\n}\n.w400 {\nwidth: 400px;\n}\n.emColor {\ncolor: #0099cc;\n}\n.bgColorRow {\nbackground-color: #F2F2F2;\n}\n.green {\ncolor:#385401;\nfont-weight: bold;\n}\n.red {\ncolor:#6c0101;\nfont-weight: bold;\n}\n.emFont {\nfont-weight: bold;\n}\n.ctrlFont,\n.link2More {\ntext-decoration: underline;\ncursor: pointer;\n}\n.ctrlFont {\ntext-decoration: none;\n}\n.sdRightPos{\nfloat:right;\nmargin-right:10px;\n}\n.disableFont {\ncursor: default;\ntext-decoration: none;\ncolor: #898989;\n}\n.readonlyInputBg {\nbackground-color: #ECE9D8;\n}\n.alignLeft {\ntext-align: left;\n}\n.alignRight {\ntext-align: right;\n}\n.alignCenter {\ntext-align: center;\n}\n.caption1 {\nfont-size: 1.1em;\nfont-weight: bold;\n}\n.caption3 {\nfont-size: 1em;\nfont-weight: bold;\n}\n.statusRow {\nwidth: 100%;\nheight: 24px;\n}\n.statusRow div {\nfloat: left;\nborder: 1px solid #BDBDBD;\npadding: 3px;\ntext-align: center;\noverflow: hidden;\n}\n.redFont {\ncolor: red;\n}\n.instCfgArea {\nmargin: 0;\npadding: 0 0 50px 0;\n}\n.buttongroup,\n.unfloatBtnGroup {\npadding: 25px 25px 20px 25px;\nheight: 30px;\n}\n.buttongroup input {\nfloat: right;\nmargin-left: 15px;\n}\n.unfloatBtnGroup input {\nmargin: 0;\n}\n.radioInput {\nwidth: auto;\nfloat: left;\n}\n.submitArea {\ntext-align: right;\npadding: 20px 0;\n}\n.externErrorHint,\n.succHint,\n.errorHint,\n.warnHint,\n.infoHint,\n.waitHint {\nmargin: 30px 0;\ntext-align: left;\npadding: 10px 10px 10px 70px;\n}\n.externErrorHint,\n.errorHint {\ncolor: #6c0101;\nbackground: #FFEBE4 url(../img/err_m.png) no-repeat 15px;\n}\n.succHint {\ncolor: #385401;\nbackground: #E7FFE4 url(../img/succ_m.png) no-repeat 15px;\n}\n.warnHint {\ncolor: #443500;\nbackground: #FFF9E4 url(../img/warn_m.png) no-repeat 15px;\n}\n.infoHint {\ncolor: #012f4c;\nbackground: #E4EFFF url(../img/info_m.png) no-repeat 15px;\n}\n.waitHint {\ncolor: #012f4c;\nbackground: #E7FFE4 url(../img/waiting_Small.gif) no-repeat 15px;\n}\n.staticInfoHint,\n.staticInfoHintReal {\ndisplay: block;\nbackground: url(../img/info_s.png) no-repeat 25px 1px;\nmargin-bottom: 20px;\ntext-align: left;\npadding: 0 25px;\n}\n.staticInfoHintReal {\nbackground: url(../img/info_s.png) no-repeat 0px 1px;\npadding: 0;\n}\n.staticInfoHint p,\n.staticInfoHintReal p {\nline-height: 18px;\ntext-align: justify;\ntext-indent: 2em;\nmargin-bottom: 5px;\n}\n.sceneTip {\npadding: 0 0 10px 0;\nmargin: 0;\ntext-align: justify;\n}\n.sceneTipLink {\npadding: 0;\n}\n.sceneTip a,\n.sceneTipLink a,\n.sceneTip_close a {\ncolor: #0099CC;\ntext-decoration: underline;\ncursor: pointer;\n}\n.sceneTip_close a {\ntext-decoration: none;\npadding-right: 5px;\n}\n.help_content,\n.sceneTip_container {\nbackground-color: #EFF8FF;\npadding: 5px 0;\n}\n.help_close,\n.sceneTip_close {\ntext-align: right;\n}\n.inlineTip {\nfloat: left;\npadding-left: 60px;\nline-height: 30px;\n}\n.black_overlay\n{\nposition: fixed;\n_position: absolute;\ntop: 0%;\nleft: 0%;\nwidth: 100%;\nheight: 100%;\nbackground-color: #A7A7A7;\nz-index: 100;\n-moz-opacity: 0.5;\n-khtml-opacity: 0.5;\nopacity: 0.5;\nfilter: alpha(opacity=50);\n}\n.white_content\n{\ndisplay: none;\nwidth: 365px;\nmin-height: 195px;\nheight: auto !important;\nheight: 195px;\nbackground:  url(../img/waiting.gif) no-repeat center center;\nz-index: 101;\noverflow: auto;\nposition: fixed;\n_position: absolute;\n}\n.white_content_Qos\n{\ndisplay: none;\nwidth: 775px;\nheight: auto !important;\nbackground: #FFFFFF;\nz-index: 101;\noverflow: auto;\nposition: fixed;\nleft: 25%;\ntop: 80px;\n}\n#confirmLayer {\nborder: 8px solid #7D7D7D;\ntext-align: left;\npadding: 0 10px;\nbackground: #FFFFFF;\n}\n#confirmMsg {\nmin-height: 32px;\nheight: auto !important;\nheight: 32px;\npadding: 25px 0;\nbackground: url(\"../img/info_m.png\") no-repeat 20px 50%;\n}\n#confirmMsg p {\npadding-left: 60px;\nfont-size: 1.2em;\nline-height: 24px;\n}\n#waitingImgArea {\nheight: 50px;\npadding-bottom: 25px;\nbackground:  url(../img/waiting_w.gif) no-repeat top center;\n}\n#confirmBtnArea {\nheight: 28px;\nborder-top: 1px dotted #313131;\npadding: 10px;\n}\n#confirmBtnArea input {\nfloat: right;\nmargin-left: 20px;\n}\n#dynamicTip {\nposition: absolute;\ndisplay: none;\nfont-size: 11px;\n}\n#dynamicTip div {\nfloat: left;\nheight: 34px;\npadding-top: 5px;\n}\n#dTip_l {\nwidth: 16px;\nbackground: url(../img/dTip_l.gif) no-repeat left top;\n}\n#dTip_m {\npadding: 2px 8px 0 5px;\nbackground: url(../img/dTip_m.gif) repeat-x;\n}\n#dTip_r {\nwidth: 6px;\nbackground: url(../img/dTip_r.gif) no-repeat left top;\n}\ndiv.errorLabelWraper{\nbackground: url(../img/fail_s.png) no-repeat 5px 6px;\ndisplay:inline-block;\npadding-left: 23px;\nline-height: 30px;\n}\nlabel.error{\ncolor: #FF0000;\n}\n.expandArrow {\nbackground: url(../img/expandArrow.png) no-repeat 0px 8px;\n}\n.collapseArrow {\nbackground: url(../img/collapseArrow.png) no-repeat 0px 8px;\n}\n.apStatusRow {\ncursor:pointer\n}\n.apConnectting {\nbackground: url(../img/waiting_Small.gif) no-repeat 0px 8px;\n}\n.qrCodeContainer {\nbottom: 160px;\nposition: fixed;\nright: 0;\nz-index: 1;\n}\n@media screen and (max-width: 1100px) {\n.qrCodeContainer {\ndisplay: none;\n}\n}\n.captchaImg {\nvertical-align: middle;\n}\n.bannerswtch {\ncolor: #0099cc;\n}\n.white_content_security\n{\ndisplay: none;\nwidth: 350px;\nmin-height: 195px;\nheight: auto !important;\nheight: 195px;\nz-index: 99;\noverflow: auto;\nposition: absolute;\n_position: absolute;\nbottom: 0px;\nright:  10px;\n}\n.sercurityNotice {\nborder: 8px solid #7D7D7D;\ntext-align: left;\npadding: 0 10px;\nbackground: #FFFFFF;\n}\n.sercurityNoticeMsg {\nmin-height: 32px;\nheight: auto !important;\nheight: 32px;\npadding: 25px 0;\nbackground: url(\"../img/info_m.png\") no-repeat 20px 50%;\n}\n.sercurityNoticeMsg li {\npadding-left: 60px;\nfont-size: 12px;\nline-height: 24px;\n}\n#commLeft {\nwidth: 197px;\nmargin: 0;\npadding:0;\nfloat: left;\nbackground-color: #EEEFF5;\n}\n#commRight {\nmin-height:415px;\nheight:auto !important;\nheight: 415px;\nmargin-left: 215px;\nmargin-right: 0;\npadding-left: 0px;\ntext-align: left;\n}\n#class2MenuItem {\nwidth: 100%;\nmargin: 0px;\npadding: 0px;\n}\n#class2MenuItem li {\ndisplay: block;\nmargin: -1px 0 0 0;\n}\n#class2MenuItem a {\ndisplay: block;\nheight: 30px;\nline-height: 30px;\ntext-align: left;\ntext-decoration: none;\ncolor: #000;\npadding: 0 20px;\nbackground-color: #fbfbfb;\nborder: 1px solid #d0d0d0;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\n}\n#class2MenuItem a.selectClass2Menu {\nbackground-color: #eee;\nbackground-image: -moz-linear-gradient(top , #f7f7f7, #e6e6e6);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#f7f7f7), to(#e6e6e6));\nbackground-image: -webkit-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: -o-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: -ms-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: linear-gradient(top, #f7f7f7, #e6e6e6);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7f7f7', endColorstr='#e6e6e6', GradientType=0);\ncolor: #0099CC;\n}\n#class3Menu {\nheight:30px;\nmargin-bottom: 30px;\nborder-bottom: 1px solid #0099CC;\n}\n#scrollLeftBtn,\n#scrollRightBtn {\nheight: 30px;\nwidth: 30px;\nfloat: left;\n}\n.EnableScrollBtn {\ncursor: pointer;\n}\n.scrollRightBtn {\nbackground: url(\"../img/collapse_B.png\") no-repeat scroll right center;\n}\n.scrollLeftBtn {\nbackground: url(\"../img/leftArrow.png\") no-repeat scroll left center;\n}\n.scrollRightBtnDisable {\nbackground: url(\"../img/rightArrowDisable.png\") no-repeat scroll right center;\ncursor: default;\n}\n.scrollLeftBtnDisable {\nbackground: url(\"../img/leftArrowDisable.png\") no-repeat scroll left center;\ncursor: default;\n}\n#scrollLeftBtn p,\n#scrollRightBtn p {\nheight: 30px;\n}\n#class3MenuMainContent {\nwidth:697px;\noverflow:hidden;\nfloat:left;\nmargin-top: -1px;\n}\n#class3MenuMainContent ul {\nwidth: 5000px;\n}\n#class3MenuMainContent li {\nfloat: left;\nlist-style: none outside none;\n}\n#class3MenuMainContent ul p {\ntext-decoration: none !important;\nheight: 30px;\nline-height: 30px;\npadding: 0 30px;\nfloat: left;\ncursor: pointer;\n}\n.AEleMenu3 {\ncolor: #313131;\nborder: 1px solid #D0D0D0;\nborder-bottom: 1px solid #0099CC;\nbackground-color: #F5F5F5;\n}\n.AEleMenu3Selected {\ncolor: #0099CC;\nborder: 1px solid #0099CC;\nborder-bottom: 1px solid #FFFFFF;\n}\n.HeadDIV,\n.fakeHeadDIV  {\npadding-top: 20px;\n}\n.pageIntroduce {\nfont-size: 18px;\n}\n.pIntroContent {\npadding: 8px 0;\n}\n.row,\n.rowBox,\n.colorTblRow,\n.segmentRow {\nclear: both;\n}\n.row,\n.rowBox,\n.colorTblRow,\n.outRow,\n.rowWithoutClear {\nmin-height: 30px;\nheight: auto !important;\nheight: 30px;\npadding: 0 25px;\n}\n.rowBox div {\ndisplay: inline-block;\n}\n.rowPaddingClear {\npadding: 0px;\n}\n.outRow  {\npadding: 0;\nmargin: 10px 0;\n}\n.selectRow {\nmin-height: 80px;\n}\n.segmentRow {\nheight: 15px;\nbackground-color: #F7F7F7;\n}\n.left,\n.right,\nlabel.cfgLabel {\nfloat: left;\nline-height: 30px;\n}\n.collapBarWithDataTrans,\n.collapsibleBar {\npadding-left: 25px;\ncursor: pointer;\nbackground: url(../img/collapse_B.png) no-repeat 0px 30%;\n}\n.collapsibleBarExp {\nbackground: url(../img/expand_B.png) no-repeat 0px 30%;\n}\n.colorTbl {\nborder: 1px solid #D0D0D0;\nline-height: 30px;\nmargin-top: 10px;\noverflow: auto;\n}\n.colorRow {\nbackground: #EFF8FF;\n}\n.colorTblRow,\n.textareaRow {\npadding: 0 25px;\n}\n.colorTblRow span {\ndisplay:inline-block;\n*display:inline;\n*zoom:1;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\nmargin-right: 3px;\nvertical-align: middle;\n*vertical-align: top;\n}\n.titleRow {\nbackground: #C8E6FE;\n}\n.noDataHint {\nheight: 30px;\nline-height: 30px;\nborder: 1px solid #D0D0D0;\npadding: 0 5px 0 45px;\nbackground: #C8E6FE url(../img/info_s.png) no-repeat 23px 50%;\n}\n.formTblWrap {\nborder: 1px solid #D0D0D0;\nline-height: 30px;\nbackground: #F7F7F7;\nmargin: -1px 0;\nzoom: 1;\n}\n.formTbl {\npadding: 10px 0 0;\noverflow: auto;\n*overflow: hidden;\n}\n.formTblCtrlBar, .addInstBar {\nheight: 30px;\nline-height: 30px;\nborder: 1px solid #D0D0D0;\nbackground: #EEEEEE;\nposition: relative;\n}\n.formTblCtrlBar div {\ndisplay: inline;\n}\n.instName, .instNew {\npadding-left: 25px;\noutline: none;\ncolor: #313131;\nheight: 100%;\ncursor: pointer;\ndisplay: block;\nwidth: 200px;\n}\n.instName {\nbackground: url(../img/collapse.png) no-repeat 0 50%;\nwhite-space: nowrap;\ntext-overflow: ellipsis;\noverflow: hidden;\n}\n.instNew {\nbackground: url(../img/newInst.png) no-repeat 2px 50%;\n}\n.instNameExp {\nbackground: url(../img/expand.png) no-repeat 0 50%;\n}\n.noHand {\ncursor: default;\n}\n.instSwitch {\nposition: absolute;\nleft: 300px;\ntop: 3px;\n}\n.instDelete,\n.closePopLayer {\nposition: absolute;\nright: 20px;\ntop: 7px;\ncursor: pointer;\n}\n.closePopLayer {\ntop: 10px;\n}\n.clear {\nclear: both;\noverflow:hidden;\n}\n.ExceedWidthEllipsis {\nwhite-space: nowrap;\ntext-overflow: ellipsis;\noverflow: hidden;\n}\n.divQoSStatisticsCfg {\npadding: 20px;\ntext-align: left;\n}\n.picQoSTrans {\nbackground:  url(../img/uploading.gif) no-repeat;\n}\n.partDivision {\nborder-bottom: 1px dotted #313131;\npadding-bottom: 8px;\nmargin: 10px 0 30px;\n}\n.emptyRow10 {\nmargin: 10px;\n}\n.emptyRow20 {\nmargin: 20px;\n}\n.fontSize {\nfont-size:15px;\n}\n.DMSPathDiv {\nborder: 1px solid #0099CC;\nwidth: 710px;\n*width: 690px;\noverflow: auto;\nmargin: 10px auto;\npadding: 5px;\n}\n.hr0 {\nheight:1px;\nborder:none;\nborder-top:1px solid #D0D0D0;\n}\n.sideShortCut {\nposition: fixed;\nwidth:28px;\nheight:50px;\nbottom:105px;\nright:0px;\n_position:absolute;\n_right:auto;\ncursor:pointer;\nz-index: 1000;\n}\n.BackToTop {\ndisplay: block;\nheight: 50px;\nwidth: 28px;\ntext-decoration:none;\nbackground: url(../img/TOP.gif) no-repeat;\n}\n.pinspan {\ncolor: #313131;\nbackground: #E7FFE4;\n}\n.pin_remain {\ncolor: red;\nfont-size: 1.1em;\nfont-weight: bold;\n}\n._LuQUID_SelAccessDevice{\ncolor: #0099CC;\ncursor: pointer;\ntext-decoration: none;\n}\n._LuQUID_AccessDeviceList{\nmargin-left:150px;\nheight:auto !important;\nmin-height: 30px;\npadding: 0 5px 0 0;\nclear: both;\n}\n._LuQUID_HideAccessDevice{\ncolor: #0099CC;\ncursor: pointer;\ntext-decoration: none;\n}\n.AddIconControl{\ncursor: pointer;\nposition: relative;\ntop: 2px;\n}\n.DelIconControl{\ncursor: pointer;\nposition: relative;\ntop: 2px;\n}\nbody {\ntext-align: center;\noverflow-y: scroll;\n}\n#page_container {\nposition: relative;\nwidth: 960px;\nmargin: 0 auto;\ntop:35px;\npadding: 0 30px 15px 30px;\ntext-align: left;\nbackground: #FFFFFF;\n}\n#loginWrapper {\nwidth: 473px;\nmin-height: 300px;\nheight:auto !important;\nheight: 425px;\nmargin: 50px auto;\nposition: relative;\n}\n.logo {\nwidth: 345px;\nheight: 72px;\nfloat: left;\nbackground: url(../img/catLogo.png) no-repeat 5px 9px;\n}\n.catLogo {\nwidth: 345px;\nheight: 72px;\nfloat:left;\nbackground: url(../img/catLogo.png) no-repeat 5px 9px;\n}\n.zteLogo {\nwidth: 210px;\nheight: 72px;\nfloat:right;\nbackground: url(../img/Logo_ZTE.png) no-repeat 5px 9px;\n}\n.catInternet {\nposition: relative;\nwidth: 180px;\nheight: 140px;\nmargin-left: 400px;\ntop:50px;\n}\n.catText {\nwidth:600px;\nfont-size:14px;\nfont-weight:bold;\nmargin-left:160px;\ntext-align:center;\n}\n.timeArea {\nleft: 342px;\n}\n\n</style>\n<script type=\"text/javascript\" src=\"jquery/common_lib.js\"></script>\n<script type=\"text/javascript\">\nfunction StatusOfLRBtnOf3MenuHandle(nowScrollLocation)\n{\nif (nowScrollLocation == \"\")\n{\nnowScrollLocation = 0;\n}\nvar class3MenuContainerWidth = $(\"#class3MenuMainContent\").width();\nvar totalTabWidth = $(\"#_totalTabWidth\").val();\nif ( nowScrollLocation >= (totalTabWidth - class3MenuContainerWidth) )\n{\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtnDisable\");\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtn EnableScrollBtn\");\n}\nelse if ( nowScrollLocation == 0 )\n{\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtnDisable\");\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtn EnableScrollBtn\");\n}\nelse\n{\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtn EnableScrollBtn\");\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtn EnableScrollBtn\");\n}\n}\nfunction Menu3TabStyleHandle()\n{\nvar class3MenuContainer = $(\"#class3MenuMainContent\");\nvar ContainerWidth = $(\"#commRight\").width()- $(\"#scrollLeftBtn\").width()\n- $(\"#scrollRightBtn\").width();\nclass3MenuContainer.width(ContainerWidth);\nvar tabTotalWidth = 0;\nvar tab = $(\"li\",class3MenuContainer);\nfor (var i=0; i< tab.length; i++)\n{\nvar LiWidth = parseInt(tab[i].offsetWidth);\ntabTotalWidth = tabTotalWidth + LiWidth;\n}\n$(\"#_totalTabWidth\").val(tabTotalWidth);\nvar class3MenuUl = $(\"ul\",class3MenuContainer);\nif ( tabTotalWidth > ContainerWidth )\n{\nclass3MenuUl.css(\"width\", 5000);\n$(\"#scrollLeftBtn,#scrollRightBtn\").addClass(\"EnableScrollBtn\");\nvar nowScrollLocation = $(\"#_Menu3Location\").text();\nif ((tabTotalWidth-ContainerWidth) < nowScrollLocation)\n{\nnowScrollLocation = tabTotalWidth-ContainerWidth;\n}\nclass3MenuContainer.scrollLeft(nowScrollLocation);\nStatusOfLRBtnOf3MenuHandle(nowScrollLocation);\n}\nelse\n{\n$(\"#scrollLeftBtn\").removeClass(\"scrollLeftBtn\");\n$(\"#scrollRightBtn\").removeClass(\"scrollRightBtn\");\n}\n}\nfunction MenuItemClass(menuItemJSON) {\nthis.menuItemJSON = menuItemJSON;\n}\nMenuItemClass.prototype.findMenu = function (menuid) {\nvar menuItemJSON = this.menuItemJSON;\nvar menuItemId = menuItemJSON.id;\nif (menuItemId == menuid)\n{\nreturn menuItemJSON;\n}\nvar children = menuItemJSON.children;\nif ( !children )\n{\nreturn null;\n}\nfor (var i = 0; i < children.length; i++) {\nvar childItem = children[i];\nvar childID = childItem.id;\nif ( menuid == childID )\n{\nreturn childItem;\n}\nif ( childItem.children )\n{\nvar childObj = new MenuItemClass(childItem);\nvar targetMenu = childObj.findMenu(menuid);\nif (targetMenu)\n{\nreturn targetMenu;\n}\n}\n}\nreturn null\n}\nMenuItemClass.prototype.getLeftMostPageJSON = function () {\nvar menuItemJSON = this.menuItemJSON;\nvar menuItemId = menuItemJSON;\nvar children = menuItemJSON.children;\nif ( !children )\n{\nreturn menuItemJSON;\n}\nvar leftMostSon = children[0];\nvar menuObj = new MenuItemClass(leftMostSon);\nreturn menuObj.getLeftMostPageJSON();\n}\nfunction MenuTreeClass(menuTreeJSON)\n{\nthis.menuTreeJSON = menuTreeJSON\n}\nMenuTreeClass.prototype.findMenu = function(menuid) {\nvar menuTreeJSON = this.menuTreeJSON\nfor (var i = 0; i < menuTreeJSON.length; i++) {\nvar menu1table = menuTreeJSON[i];\nvar menu1Obj = new MenuItemClass(menu1table);\nvar targetMenu = menu1Obj.findMenu(menuid);\nif ( targetMenu )\n{\nreturn targetMenu;\n}\n}\nreturn null\n};\nfunction GetLeftMostPageID(menuid)\n{\nvar menuTable = menuTreeObj.findMenu(menuid);\nvar menuObj = new MenuItemClass(menuTable);\nvar pageJSON = menuObj.getLeftMostPageJSON();\nreturn pageJSON.id;\n}\nfunction Class3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId)\n{\nif ( selectThdId == \"\" )\n{\n$(\"#class3Menu\").css(\"display\", \"none\");\nreturn;\n}\nvar class2MenuNode = menuTreeObj.findMenu(selectMidId);\nvar class3MenuJSON = class2MenuNode.children;\nvar class3MenuContent = \"\";\nfor (var index in class3MenuJSON)\n{\nvar menu = class3MenuJSON[index]\nvar class3MenuID = menu.id\nvar class3MenuName = menu.name\nif ( class3MenuID == selectThdId )\n{\nAEleMenu3Class = \"AEleMenu3Selected\";\n}\nelse\n{\nAEleMenu3Class = \"AEleMenu3\";\n}\nclass3MenuContent = class3MenuContent\n+ \"<li><p class='\" + AEleMenu3Class + \"'\"\n+ \"MenuClass='3'\"\n+ \"id='\"+ class3MenuID + \"'\"\n+ \"MenuPage='\"+ GetLeftMostPageID(class3MenuID) +\"'\"\n+ \"href='#\" + class3MenuID + \"'>\"\n+ class3MenuName\n+ \"</p></li>\";\n}\n$(\"#class3MenuMainContent ul\").html(class3MenuContent);\n$(\"#class3MenuMainContent ul li p\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\nMenu3TabStyleHandle();\n$(window).resize(function(){\nMenu3TabStyleHandle();\n});\nvar t;\n$(\"#scrollRightBtn,#scrollLeftBtn\").mousedown(function(e){\nif ( ! $(this).hasClass(\"EnableScrollBtn\"))\n{\nconsoleLog(\"no scroll button!!\");\nreturn;\n}\nvar step = 10;\nif ( $(this).attr(\"id\") == \"scrollLeftBtn\" )\n{\nstep = 0-step;\n}\nif(1 == e.which)\n{\nt = window.setInterval(function() {\nvar scrollTarget = $(\"#class3MenuMainContent\");\nvar nowPosition = scrollTarget.scrollLeft();\nvar tabWidth = $(\"#_totalTabWidth\").val();\nvar srcollTotalLen = tabWidth - scrollTarget.width();\nif ( (srcollTotalLen - nowPosition) >= step )\n{\nscrollTarget.scrollLeft(nowPosition + step);\n}\nelse if ( (srcollTotalLen - nowPosition) >= 0 )\n{\nscrollTarget.scrollLeft(srcollTotalLen);\n}\nvar afterPosition = scrollTarget.scrollLeft();\nStatusOfLRBtnOf3MenuHandle(afterPosition);\n}, 20);\n}\n});\n$(\"#scrollRightBtn,#scrollLeftBtn\").mouseup(function(e){\nif(1 == e.which)\n{\nwindow.clearInterval(t);\n}\n});\n}\nfunction Class2MenuShow(selectPageID, selectSupId, selectMidId)\n{\nif ( selectMidId == \"\" )\n{\nreturn;\n}\nvar class1MenuNode = menuTreeObj.findMenu(selectSupId);\nvar class2MenuJSON = class1MenuNode.children;\nvar class2MenuContent = \"\";\nvar class2MenuClass = \"\";\nfor (var index in class2MenuJSON)\n{\nvar menu = class2MenuJSON[index]\nvar class2MenuID = menu.id\nvar class2MenuName = menu.name\nif ( class2MenuID == selectMidId )\n{\nclass2MenuClass = \"selectClass2Menu\";\n}\nelse\n{\nclass2MenuClass = \"\";\n}\nclass2MenuContent = class2MenuContent\n+ \"<li>\"\n+ \"<a class='\" + class2MenuClass + \"' \"\n+ \"href='javascript:void(0);' \"\n+ \"MenuClass='2' \"\n+ \"id='\"+ class2MenuID + \"' \"\n+ \"MenuPage='\"+ GetLeftMostPageID(class2MenuID)\n+ \"' title='\" + class2MenuName\n+ \"'>\"\n+ class2MenuName\n+ \"</a></li>\";\n}\n$(\"#class2MenuItem\").html(class2MenuContent);\n$(\"#class2MenuItem li a\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\n}\nfunction Class1MenuShow(selectPageID, selectSupId)\n{\nvar FirstMenuContent = \"<ul>\";\nvar SupClass = \"\";\nvar SupLiID = \"\";\nvar FirstOne = \"yes\";\nvar navBarWidth = $(\"#mainNavigator\").width();\nvar leftPadWidth = $(\"#mn_first\").width();\nvar rightPadWidth = $(\"#mn_last\").width();\nvar menuAreaWidth = navBarWidth - leftPadWidth - rightPadWidth;\nmenuAreaWidth -= 7;\nvar menuWidth = menuAreaWidth/(menuTreeJSON.length);\nmenuWidth = Math.floor(menuWidth);\nfor (var index in menuTreeJSON)\n{\nvar menu = menuTreeJSON[index]\nvar supId = menu.id\nvar supName = menu.name\nif ( supId == selectSupId )\n{\nSupClass = \"SelectMenuItem\";\n}\nelse\n{\nSupClass = \"MenuItem\";\n}\nif ( FirstOne == \"yes\" )\n{\nSupLiID = \"homeLi\";\nFirstOne = \"no\";\n}\nelse\n{\nSupLiID = \"\";\n}\nFirstMenuContent = FirstMenuContent\n+ \"<li id=\\\"\" + SupLiID + \"\\\">\"\n+ \"<a href=\\\"javascript:void(0);\\\" class=\\\"\" + SupClass\n+ \"\\\" \"\n+ \"style='width:\" + menuWidth + \"px' \"\n+ \"MenuClass='1' \"\n+ \"id='\"+ supId + \"' \"\n+ \"MenuPage='\"+ GetLeftMostPageID(supId) +\"'\"\n+ \">\"\n+ supName\n+ \"</a></li>\";\n}\nFirstMenuContent = FirstMenuContent + \"</ul>\";\n$(\"#mn_li\").html(FirstMenuContent);\n$(\"#mn_li li a\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\n}\nfunction checkDisClickAttr(obj)\n{\nif (\"off\" == obj.attr(\"EnableClick\"))\n{\nreturn false;\n}\nhandleDisClickAttr(\"off\");\nreturn true;\n}\nfunction handleDisClickAttr(ret)\n{\nvar selectSupId = $(\"#_NowSupIdInfo\",_MenuInfo).text();\nvar selectMidId = $(\"#_NowMidIdInfo\",_MenuInfo).text();\nvar selectThdId = $(\"#_NowThdIdInfo\",_MenuInfo).text();\nif(selectThdId)\n{\nvar objs = [$(\"#\" + selectSupId),$(\"#\" + selectMidId),$(\"#\" + selectThdId)];\n}\nelse\n{\nif(selectMidId)\n{\nvar objs = [$(\"#\" + selectSupId),$(\"#\" + selectMidId)];\n}\nelse\n{\nvar objs = [$(\"#\" + selectSupId)];\n}\n}\nfor (var i = 0; i < objs.length; i++)\n{\nif (objs[i].length > 0)\n{\nobjs[i].attr(\"EnableClick\", ret);\n}\n}\n}\nfunction AjaxPageGet(PageName, MenuClass, Area)\n{\nvar pageContainer = $(\"#commPageContainer\");\npageContainer.succfunction = function(html){\npageContainer.html(html);\nvar _MenuInfo = $(\"#_MenuInfo\");\nvar selectPageID = $(\"#_NextPageInfo\",_MenuInfo).text();\nvar selectSupId = $(\"#_NowSupIdInfo\",_MenuInfo).text();\nvar selectMidId = $(\"#_NowMidIdInfo\",_MenuInfo).text();\nvar selectThdId = $(\"#_NowThdIdInfo\",_MenuInfo).text();\nif ( \"mmHome\" == selectPageID )\n{\n$(document).scrollTop(0);\nreturn;\n}\nif (MenuClass == '1')\n{\nClass1MenuShow(selectPageID, selectSupId);\n}\nClass2MenuShow(selectPageID, selectSupId, selectMidId);\nClass3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId);\n$(document).scrollTop(0);\nhandleDisClickAttr(\"on\");\nvar targetAreaId = Area;\nif (targetAreaId){\nsetTimeout(function(){\nvar thisPage = $(\".instCfgArea\");\nvar areas = $(\"h1\", thisPage);\nvar targetArea = $(\"#\"+targetAreaId, thisPage);\nareas.each(function(){\nif ($(this).hasClass(\"collapsibleBarExp\")) {\n$(this).click();\n}\n});\nif (targetArea.length > 0){\ntargetArea.click();\n$(document).scrollTop(targetArea.offset().top);\n}\n}\n,500);\n}\n};\npageContainer.errorfunction = function(){\nconsoleLog(\"page get fail\");\nshowWaitTip(false);\npageContainer.html(\"Page request failed, please try again!\");\nhandleDisClickAttr(\"on\");\n};\nshowWaitTip(true);\npageContainer.dataTransfer( PageName, \"GET\", pageContainer.succfunction,\npageContainer.errorfunction, false,\nundefined, 'html'\n);\n}\nfunction AjaxQuery_ClassMenuClick(MenuOBJ)\n{\nvar MenuClass = MenuOBJ.attr(\"MenuClass\");\nvar page = MenuOBJ.attr(\"MenuPage\");\nvar scrollTarget = $(\"#class3MenuMainContent\");\nvar Menu3Location = scrollTarget.scrollLeft();\nvar pageFile = \"/?_type=menuView&_tag=\"\n+ page + \"&Menu3Location=0\";\nif ( MenuClass == 3 )\n{\npageFile = \"/?_type=menuView&_tag=\"\n+ page + \"&Menu3Location=\" + Menu3Location;\n}\nAjaxPageGet(pageFile, MenuClass);\n}\nfunction openLink(pageurl, areaId)\n{\nvar PageName = \"/?_type=menuView&_tag=\" + pageurl;\nAjaxPageGet(PageName, 1, areaId);\n}\nfunction MenuShow(Menuclass, selectPageID, selectSupId, selectMidId, selectThdId)\n{\nif (Menuclass == \"ClassAll\")\n{\nClass1MenuShow(selectPageID, selectSupId);\nClass2MenuShow(selectPageID, selectSupId, selectMidId);\nClass3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId);\n}\nelse if (Menuclass == \"ClassOne\")\n{\nClass1MenuShow(selectPageID, selectSupId);\n}\nelse if (Menuclass == \"ClassTwo\")\n{\nClass2MenuShow(selectPageID, selectSupId);\n}\nelse\n{\nconsoleLog(\"[menu_api.lp][MenuShow]    Menuclass(\"+ Menuclass + \"filling is not right!!\");\n}\n}\nfunction FakeClass1MenuShow()\n{\nvar FirstMenuContent = \"<ul>\";\nvar SupClass = \"MenuItem\";\nvar SupLiID = \"\";\nvar FirstOne = \"yes\";\nvar navBarWidth = $(\"#mainNavigator\").width();\nvar leftPadWidth = $(\"#mn_first\").width();\nvar rightPadWidth = $(\"#mn_last\").width();\nvar menuAreaWidth = navBarWidth - leftPadWidth - rightPadWidth;\nmenuAreaWidth -= 7;\nvar menuWidth = menuAreaWidth/(menuTreeJSON.length);\nmenuWidth = Math.floor(menuWidth);\nfor (var index in menuTreeJSON)\n{\nvar menu = menuTreeJSON[index]\nvar supId = menu.id\nvar supName = menu.name\nif ( FirstOne == \"yes\" )\n{\nSupLiID = \"homeLi\";\nFirstOne = \"no\";\n}\nelse\n{\nSupLiID = \"\";\n}\nFirstMenuContent = FirstMenuContent\n+ \"<li id=\\\"\" + SupLiID + \"\\\">\"\n+ \"<a href=\\\"javascript:void(0);\\\" class=\\\"\" + SupClass\n+ \"\\\" \"\n+ \"style='width:\" + menuWidth + \"px;\"\n+ \"color:#BFBDBE; cursor:default;'\"\n+ \" hidefocus=\\\"true\\\" onclick=\\\" \\\">\"\n+ supName\n+ \"</a></li>\";\n}\nFirstMenuContent = FirstMenuContent + \"</ul>\";\n$(\"#mn_li\").html(FirstMenuContent);\n}\nfunction showWaitTip(show, TipMsg, StopTag)\n{\nvar TipMsgTmp = TipMsg;\nif( show )\n{\n$(\"#blackMask,#tipLayer,#confirmBtnArea\").css(\"display\", \"block\");\nif (TipMsgTmp == undefined || TipMsgTmp == \"\")\n{\n$(\"#waitingImgArea\").css(\"display\", \"none\");\nif(true==StopTag)\n{\n$(\"#confirmStop\").css(\"display\", \"block\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"none\");\n}\nelse\n{\n$(\"#confirmStop\").css(\"display\", \"none\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"block\");\n}\n}\nelse\n{\n$(\"#confirmLayer, #waitingImgArea\").css(\"display\", \"block\");\n$(\"#confirmMsg p\").text(TipMsgTmp);\nif(true==StopTag)\n{\n$(\"#confirmStop\").css(\"display\", \"block\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"none\");\n}\nelse\n{\n$(\"#confirmCancel,#confirmOK,#confirmStop\").css(\"display\", \"none\");\n}\n}\n$('#confirmLayer :button:visible:first').focus();\n$(\"#page_container\").bind(\"keyup\", function(event){\nif (event.which == 9) {\n$('#confirmLayer :button:visible:first').focus();\n}\n});\nreposition_box(\"tipLayer\");\n}\nelse\n{\n$(\"#blackMask, #tipLayer, #confirmLayer\").css(\"display\", \"none\");\n$(\"#page_container\").unbind(\"keyup\");\n}\n}\nfunction IniConfirm(msg)\n{\nshowWaitTip(true);\nvar confirmLayerOBJ = $(\"#confirmLayer\");\nconfirmLayerOBJ.css(\"display\", \"block\");\n$(\"#confirmMsg p\",confirmLayerOBJ).text(msg);\n$(\"#confirmCancel\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmOK\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmStop\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmCancel\",confirmLayerOBJ).bind(\"click\", function(event){\nshowWaitTip(false);\n});\n$('#confirmLayer :button:visible:first').focus();\nreturn confirmLayerOBJ;\n}\nfunction getStyle(obj,attr)\n{\nif (obj.currentStyle)\n{\nreturn obj.currentStyle[attr];\n}\nelse\n{\nreturn document.defaultView.getComputedStyle(obj,null)[attr];\n}\n}\nfunction reposition_box(divId)\n{\nvar box=document.getElementById(divId);\nif (null!=box)\n{\nvar boxObj = $(\"#\"+divId);\nvar winH = $(window).height();\nvar winW = $(window).width();\nvar divH = boxObj.height();\nvar divW = boxObj.width();\nvar h = (winH-divH)/2;\nh = (h > 0) ? h : 5;\nvar w = (winW-divW)/2;\nw = (w > 0) ? w : 5;\nboxObj.css({top:h, left:w});\nif ( divH > winH || divW > winW)\n{\nboxObj.css(\"position\", \"absolute\");\n}\nelse\n{\nboxObj.css(\"position\", \"fixed\");\n}\n}\n}\n$.validator.setDefaults({\nerrorPlacement: function (error, element) {\nvar tipHTML = \"<div class=\\\"errorLabelWraper\\\"></div>\";\nvar tipObj = $(tipHTML);\nerror.appendTo(tipObj);\nvar rowObj = element.closest(\".row\");\nif ( rowObj.length == 0 )\n{\nconsoleLog(\"element id=[\"+element.attr(\"id\")+\"] is not in row div.\");\nreturn ;\n}\nvar rowWidth = rowObj.width();\nvar usedWidth = 0;\nvar rightObj = undefined;\nrowObj.children().each(function(){\nif (!($(this).hasClass(\"_LuQUID_AccessDeviceList\")||\n$(this).hasClass(\"clear\"))){\nusedWidth += $(this).outerWidth(true);\n}\nif ($(this).hasClass(\"right\")){\nrightObj = $(this);\n}\n});\nvar errWidth = rowWidth - usedWidth;\ntipObj.width(errWidth-5-23);\nif (rightObj != undefined)\n{\ntipObj.insertAfter(rightObj);\n}\nelse\n{\ntipObj.appendTo(rowObj);\n}\n}\n});\njQuery.extend(jQuery.validator.messages, {\nrequired: \"This field is required. \",\nremote: \"Please fix this field. \",\nemail: \"Please enter a valid email address. \",\nurl: \"Please enter a valid URL. \",\ndate: \"Please enter a valid date. \",\ndateISO: \"Please enter a valid date (ISO). \",\nnumber: \"Please enter a valid number. \",\ndigits: \"Please enter an integer. \",\ncreditcard: \"Please enter a valid credit card number. \",\nequalTo: \"Please enter the same value again. \",\nmaxlength: jQuery.validator.format(\"Please enter no more than {0} characters. \"),\nminlength: jQuery.validator.format(\"Please enter at least {0} characters. \"),\nrangelength: jQuery.validator.format(\"Please enter a value with {0} ~ {1} characters. \"),\nrange: jQuery.validator.format(\"Please enter a value between {0} and {1}. \"),\nmax: jQuery.validator.format(\"Please enter a value less than or equal to {0}. \"),\nmin: jQuery.validator.format(\"Please enter a value greater than or equal to {0}. \")\n});\nfunction AsciiPasswordCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch == 9)\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction AsciiCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch<32 || ch>126)\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction AsciiCheckWithLen(Key, LenLimit)\n{\nif (Key.length != LenLimit)\n{\nreturn false;\n}\nif ( false == AsciiCheck(Key) )\n{\nreturn false;\n}\nreturn true;\n}\nfunction HexCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif (!((ch >= 65 && ch <= 70)\n||(ch >= 97 && ch <= 102)\n||(ch >= 48 && ch <= 57)))\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction HexCheckWithLen(Key, LenLimit)\n{\nif (Key.length != LenLimit)\n{\nreturn false;\n}\nif ( false == HexCheck(Key) )\n{\nreturn false;\n}\nreturn true;\n}\nfunction checkIPv4Addr(ipaddr)\n{\nvar re = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\nif(re.test(ipaddr) == true)\n{\nvar parts = ipaddr.split(\".\");\nfor(var i=0; i<parts.length; i++)\n{\nif(parts[i].indexOf(\"0\") == 0 && parts[i].length > 1)\nreturn false;\nif (parseInt((parts[i]),10) > 255 || parseInt((parts[i]),10) < 0)\n{\nreturn false;\n}\n}\nreturn true;\n}\nreturn false;\n}\njQuery.validator.addMethod(\n\"IPv4Addr\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif(checkIPv4Addr(value) == true)\n{\nreturn true;\n}\nreturn false;\n},\n\"Please enter a valid IPv4 Address. \"\n);\nfunction checkIPv6Addr(ipaddr)\n{\nif (ipaddr.match(\"[^0-9a-fA-F:.]\") != null)\nreturn false;\naddrParts = ipaddr.split(':');\nDoublecolon = ipaddr.split('::');\nipv4Parts = ipaddr.split('.');\nif(addrParts.length<3||addrParts.length>8)\n{\nreturn false;\n}\nelse if(Doublecolon.length==1&&ipv4Parts.length==1&&addrParts.length!=8)\n{\nreturn false;\n}\nelse if(Doublecolon.length==1&&ipv4Parts.length>1&&addrParts.length!=6)\n{\nreturn false;\n}\nelse if(Doublecolon.length>1&&ipv4Parts.length>1&&addrParts.length>6)\n{\nreturn false;\n}\nelse if(Doublecolon.length>2||ipaddr.split(':::').length>1)\n{\nreturn false;\n}\nelse\n{\nif(addrParts[0]==\"\"&&addrParts[1]!=\"\")\n{\nreturn false;\n}\nfor(var i=0;i<addrParts.length;i++)\n{\nif(i==addrParts.length-1&&addrParts[i]==\"\"&&addrParts[i-1]!=\"\")\n{\nreturn false;\n}\nif(addrParts[i].length>4 && addrParts[i].split('.').length<2)\n{\nreturn false;\n}\n}\n}\nvar pos = ipaddr.lastIndexOf(\":\");\nvar ipv4Parts = ipaddr.split('.');\nif(ipv4Parts.length>1)\n{\nvar ipv4=ipaddr.substring(pos+1,ipaddr.length);\nif( false == checkIPv4Addr(ipv4) )\n{\nreturn false;\n}\n}\nreturn true;\n}\njQuery.validator.addMethod(\n\"IPv6Addr\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn checkIPv6Addr(value);\n},\n\"Please enter a valid IPv6 Address. \"\n);\njQuery.validator.addMethod(\n\"DomainName\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nvar firstChar = value.substr(0,1);\nvar lastChar = value.substr(len-1,1);\nvar maxlen = 64;\nif(len>64||len<1)\n{\nreturn false;\n}\nif (value.match(\"[^0-9a-zA-Z.-]\") != null)\n{\nreturn false;\n}\nif(firstChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nif(lastChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nvar pos = value.lastIndexOf(\".\");\nif(pos == -1)\n{\nvar str = value;\nvar templen = value.length;\nfor(var i=0;i<len;i++)\n{\nvar tempvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tempvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\nelse\n{\nvar str = value.substr(pos+1);\nvar tmplen = value.length - (pos + 1);\nfor(var i=0;i<tmplen;i++)\n{\nvar tmpvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tmpvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\n},\n\"Please enter a valid Domain Name. \"\n);\njQuery.validator.addMethod(\n\"HostName\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nvar firstChar = value.substr(0,1);\nvar lastChar = value.substr(len-1,1);\nif (value.match(\"[^0-9a-zA-Z.-]\") != null)\n{\nreturn false;\n}\nif(firstChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nif(lastChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nvar pos = value.lastIndexOf(\".\");\nif(pos == -1)\n{\nvar str = value;\nvar templen = value.length;\nfor(var i=0;i<len;i++)\n{\nvar tempvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tempvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\nelse\n{\nvar str = value.substr(pos+1);\nvar tmplen = value.length - (pos + 1);\nfor(var i=0;i<tmplen;i++)\n{\nvar tmpvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tmpvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\n},\n\"Please enter a valid Host Name. \"\n);\njQuery.validator.addMethod(\n\"url\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nif( (len < 1) || (len > 256) )\n{\nreturn false;\n}\nif (value.match(\"[^0-9a-zA-Z.:;,!@%#?_/&=+*'$()\\\\[\\\\]-]\") != null)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter a valid URL. \"\n);\njQuery.validator.addMethod(\n\"PasswordASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nif ( false == AsciiPasswordCheck(value) )\n{\nparams = 0;\nreturn false;\n}\nif ( false == AsciiCheck(value) )\n{\nparams = 1;\nreturn false;\n}\nreturn true;\n},\nfunction(param, element)\n{\nvar error = [\"The format of password is wrong. Please clear it and re-enter. \", \"Please enter only ASCII characters. \"];\nvar value = $(element).val();\nvar ret = 0;\nif ( false == AsciiPasswordCheck(value) )\n{\nret = 0;\n}\nelse if( false == AsciiCheck(value) )\n{\nret = 1;\n}\nelse\n{\n}\nif ( ret <= error.length )\n{\nreturn error[ret];\n}\n}\n);\njQuery.validator.addMethod(\n\"PasswordRangeLength\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nif ( value.length >= params[0] && value.length <= params[1] )\n{\nreturn true;\n}\nreturn false;\n},\njQuery.validator.format(\"Please enter a value with {0} ~ {1} characters. \")\n);\njQuery.validator.addMethod(\n\"ASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( false == AsciiCheck(value) )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\nfunction AsciiCheckContainSpace(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch<32 || ch>126)\n{\nreturn false;\n}\n}\nreturn true;\n}\njQuery.validator.addMethod(\n\"ASCII_CONTAINSPACE\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( false == AsciiCheckContainSpace(value) )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\njQuery.validator.addMethod(\n\"DigitASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar reg = /^[0-9]+$/;\nreturn reg.test(value);\n},\n\"Please enter a value composed of 0 ~ 9.\"\n);\njQuery.validator.addMethod(\n\"utf8\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\njQuery.validator.addMethod(\n\"WEPKey128Bit\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 13;\nvar HexLenLimit = 26;\nif ( AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 13 ASCII characters or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WEPAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nvar AsciiLenLimit13 = 13;\nvar HexLenLimit26 =26;\nif (AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false\n&& AsciiCheckWithLen(value, AsciiLenLimit13) == false\n&& HexCheckWithLen(value, HexLenLimit26) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 or 13 ASCII characters, or enter 10 or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"PasswordWEPAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nvar AsciiLenLimit13 = 13;\nvar HexLenLimit26 =26;\nif (AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false\n&& AsciiCheckWithLen(value, AsciiLenLimit13) == false\n&& HexCheckWithLen(value, HexLenLimit26) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 or 13 ASCII characters, or enter 10 or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WEPKey64Bit\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nif ( AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 ASCII characters or 10 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WPAAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (!(value.length >= 8 && value.length <= 63)\n&& HexCheckWithLen(value, 64) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter a value with 8 ~ 63 characters, or enter 64 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"HEX\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( HexCheck(value) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only hexadecimal characters. \"\n);\njQuery.validator.addMethod(\n\"fixedlength\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value.length != param)\n{\nreturn false;\n}\nreturn true;\n},\njQuery.validator.format(\"Please enter {0} characters. \")\n);\njQuery.validator.addMethod(\n\"fixedValue\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value != param)\n{\nreturn false;\n}\nreturn true;\n},\njQuery.validator.format(\"The only allowed value is {0}.\")\n);\nfunction hexCompare(hexNum, hexRefer)\n{\nvar num = parseInt(hexNum, 16);\nvar refer = parseInt(hexRefer, 16);\nif (num < refer)\n{\nreturn -1;\n}\nelse if (num > refer)\n{\nreturn 1;\n}\nelse\n{\nreturn 0;\n}\n}\njQuery.validator.addMethod(\n\"hexRange\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (typeof(params[0]) == \"object\")\n{\nfor (var i=0; i<params.length; i++)\n{\nvar range = params[i];\nif (typeof(range) == \"object\")\n{\nif (hexCompare(value, range[0]) != -1 && hexCompare(value, range[1]) != 1 )\n{\nreturn true;\n}\n}\n}\n}\nelse\n{\nif (hexCompare(value, params[0]) != -1 && hexCompare(value, params[1]) != 1 )\n{\nreturn true;\n}\n}\nreturn false;\n},\nfunction(params, element){\nvar rangesStr = \"\";\nif (typeof(params[0]) == \"object\")\n{\nvar rangesLen = params.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = params[i];\nif (hexCompare(range[0], range[1]) != 0)\n{\nrangesStr += range[0] + \"~\" + range[1];\n}\nelse\n{\nrangesStr += range[0];\n}\nif ( i < rangesLen-1 )\n{\nrangesStr += \", \";\n}\n}\n}\nelse\n{\nrangesStr = params[0] + \"~\" + params[1];\n}\nreturn $.validator.format(\"Please enter a hexadecimal value in the ranges of {0}. \", rangesStr);\n}\n);\njQuery.validator.addMethod(\n\"ranges\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar rangesLen = param.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = param[i];\nif ( typeof range === 'number' )\n{\nif ( value == range )\n{\nreturn true;\n}\n}\nelse\n{\nif ( value >= range[0] && value <= range[1] )\n{\nreturn true;\n}\n}\n}\nreturn false;\n},\nfunction(param, element){\nvar rangesStr = \"\";\nvar rangesLen = param.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = param[i];\nif ( typeof range === 'number' )\n{\nrangesStr += range;\n}\nelse\n{\nrangesStr += range[0] + \"~\" + range[1];\n}\nif ( i < rangesLen-1 )\n{\nrangesStr += \",\";\n}\n}\nreturn $.validator.format(\"Please enter a value in the ranges of {0}. \", rangesStr);\n}\n);\njQuery.validator.addMethod(\n\"integer\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn /^-?\\d+$/.test(value);\n},\n\"Please enter an integer. \"\n);\njQuery.validator.addMethod(\n\"even\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar mod = (parseInt(value))%2;\nif ( mod != 0)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please input an even number. \"\n);\njQuery.validator.addMethod(\n\"concurrence\",\nfunction(value, element, param)\n{\nif (1 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[0]);\nif (obj.is(\":hidden\"))\n{\nreturn true;\n}\nif (\"\" == value && \"\" == obj.val())\n{\nreturn true;\n}\nif (\"\" != value && \"\" != obj.val())\n{\nreturn true;\n}\nreturn false;\n},\n\"Please input valid prefix. \"\n);\nfunction get_element_obj(obj, id)\n{\nvar instTplt = obj.closest(\"[id^=template_]\");\nvar elementID = obj.attr(\"id\");\nvar arr = elementID.split(':');\nvar strId = id;\nif (arr.length > 1)\n{\nvar exNum = arr[arr.length-1];\nstrId = id + \":\" + exNum;\n}\nreturn $(\"[id^='\"+strId+\"']\", instTplt);\n};\nfunction test_greatThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value greater than \\\"{0}\\\". \" : \"Please enter a value greater than the former. \" ,\n\"2\" : param[2].separate ? \"Please enter a value not less than \\\"{0}\\\". \" : \"Please enter a value not less than the former. \" ,\n\"3\" : param[2].separate ? \"Please ensure the difference with the latter not greater than {1}. \" : \"Please ensure the difference with the former not greater than {1}. \"\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) >= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) > Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(value) - Number(tmpvalue) <= Number(param[2].discrepantMode);\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nobj.parent().next().children().hide();\nreturn true;\n}\n};\nfunction test_lessThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value less than \\\"{0}\\\". \" : \"Please enter a value less than the latter. \" ,\n\"2\" : param[2].separate ? \"Please enter a value not greater than \\\"{0}\\\". \" : \"Please enter a value not greater than the latter. \" ,\n\"3\" : param[2].separate ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \"\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) <= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) < Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(tmpvalue) - Number(value) <= Number(param[2].discrepantMode)\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nobj.parent().next().children().hide();\nreturn true;\n}\n};\njQuery.validator.addMethod(\n\"extremumRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length)\n{\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nif (obj.is(\":hidden\") || \"\" == obj.val())\n{\nreturn true;\n}\nvar selectMode = {\n\"greatThan\" : test_greatThan,\n\"lessThan\" : test_lessThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\nfunction(param,element)\n{\nvar selectMode = {\n\"greatThan\" : test_greatThan,\n\"lessThan\" : test_lessThan\n};\nreturn selectMode[param[0]](\"\", \"\", param, \"errstring\");\n}\n);\nfunction range_greatThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value greater than \\\"{0}\\\". \" : ( param[2].objPosition ==\"first\" ? \"Please enter a value greater than the former. \" : \"Please enter a value greater than the latter.\" ),\n\"2\" : param[2].separate ? \"Please enter a value not less than \\\"{0}\\\". \" : ( param[2].objPosition ==\"first\" ? \"Please enter a value not less than the former. \" : \"Please enter a value not less than the latter. \" ) ,\n\"3\" : param[2].separate ? \"Please ensure the difference with \\\"{0}\\\" not greater than {1}. \" : ( param[2].objPosition ==\"first\" ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \")\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nobj.parent().next().children().hide();\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) >= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) > Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(value) - Number(tmpvalue) <= Number(param[2].discrepantMode);\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nreturn true;\n}\n};\nfunction range_lessThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value less than \\\"{0}\\\". \" : ( param[2].objPosition == \"first\" ? \"Please enter a value less than the former. \" : \"Please enter a value less than the latter. \" ),\n\"2\" : param[2].separate ? \"Please enter a value not greater than \\\"{0}\\\". \" : ( param[2].objPosition == \"first\" ? \"Please enter a value not greater than the former.\" : \"Please enter a value not greater than the latter. \" ),\n\"3\" : param[2].separate ? \"Please ensure the difference with \\\"{0}\\\" not greater than {1}. \" : ( param[2].objPosition == \"first\" ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \" )\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nobj.parent().next().children().hide();\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) <= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) < Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(tmpvalue) - Number(value) <= Number(param[2].discrepantMode)\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nreturn true;\n}\n};\njQuery.validator.addMethod(\n\"compareRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length)\n{\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nvar selectMode = {\n\"greatThan\" : range_greatThan,\n\"lessThan\" : range_lessThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\nfunction(param,element)\n{\nvar selectMode = {\n\"greatThan\" : range_greatThan,\n\"lessThan\" : range_lessThan\n};\nreturn selectMode[param[0]](\"\", \"\", param, \"errstring\");\n}\n);\njQuery.validator.addMethod(\n\"banValue\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar paramLen = param.length;\nfor (var i = 0;i < paramLen;i++)\n{\nvar range = param[i];\nif (typeof range === 'string' )\n{\nif (value == range)\n{\nreturn false;\n}\n}\nelse\n{\nif (value >= range[0] && value <= range[1])\n{\nreturn false;\n}\n}\n}\nreturn true;\n},\nfunction(param, element){\nvar rangesStr = \"\";\nvar paramLen = param.length;\nfor (var i=0; i<paramLen; i++)\n{\nvar paraVal = param[i];\nif ( \"object\" === typeof paraVal )\n{\nrangesStr += paraVal[0] + \"~\" + paraVal[1];\n}\nelse\n{\nrangesStr += paraVal;\n}\nif ( i < paramLen-1 )\n{\nrangesStr += \", \";\n}\n}\nif (paramLen > 1)\n{\nreturn $.validator.format(\"Please ensure the input NOT in the ranges of \\\"{0}\\\". \", rangesStr);\n}\nelse\n{\nreturn $.validator.format(\"Please ensure the input NOT equal to \\\"{0}\\\". \", rangesStr);\n}\n}\n);\njQuery.validator.addClassRules({\nipSepCheck: {\n\"required\": true,\n\"integer\": true,\n\"range\":[0,255]\n},\nmacSepCheck:{\n\"required\": true,\n\"HEX\": true,\n\"fixedlength\": 2\n}\n});\nfunction compareIPv4(firstIP, secondIP)\n{\nvar fIP;\nvar sIP;\nfIP = firstIP.split(\".\");\nsIP = secondIP.split(\".\");\nfor (var i = 0; i < 4; i++)\n{\nif (fIP[i] != \"\" && sIP[i] != \"\")\n{\nfIP[i] = parseInt(fIP[i],10);\nsIP[i] = parseInt(sIP[i],10);\n}\nif (fIP[i] > sIP[i])\n{\nreturn 1;\n}\nelse if (fIP[i] < sIP[i])\n{\nreturn -1;\n}\n}\nreturn 0;\n}\nfunction checkWholeIPv4(k, v, ipValue)\n{\nvar vLen = v.length;\nvar retMsg = \"\";\nfor (var j = 0; j < vLen; j++)\n{\nif (retMsg != \"\")\n{\nretMsg += \", \";\n}\nvar range = v[j];\nif (typeof range === 'string')\n{\nretMsg += range;\n}\nelse\n{\nretMsg += range[0]+\" ~ \"+range[1];\n}\n}\nif (k == \"banValue\")\n{\nretMsg = \" is NOT allowed to input the following value(s): {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (typeof range === 'string')\n{\nif (ipValue == range)\n{\nreturn [false, k, retMsg];\n}\n}\nelse\n{\nif (\"-1\" != compareIPv4(ipValue, range[0]) &&\n\"1\" != compareIPv4(ipValue, range[1]))\n{\nreturn [false, k, retMsg];\n}\n}\n}\n}\nelse if (k == \"allowRange\")\n{\nretMsg = \"'s input is invalid. Please ensure the input is in the following range: {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (\"-1\" != compareIPv4(ipValue, range[0]) &&\n\"1\" != compareIPv4(ipValue, range[1]))\n{\nreturn [true, \"\", \"\"];\n}\n}\nreturn [false, k, retMsg];\n}\nelse if (k == \"notLessThan\")\n{\n}\nelse if (k == \"notMoreThan\")\n{\n}\nelse\n{\n}\nreturn [true, \"\", \"\"];\n}\nfunction checkWholeMac(k, v, macValue)\n{\nvar vLen = v.length;\nvar retMsg = \"\";\nfor (var j = 0; j < vLen; j++)\n{\nif (retMsg != \"\")\n{\nretMsg += \", \";\n}\nvar range = v[j];\nif (typeof range === 'string')\n{\nretMsg += range;\n}\nelse\n{\nretMsg += range[0]+\" ~ \"+range[1];\n}\n}\nif (k == \"banValue\")\n{\nretMsg = \" is NOT allowed to input the following value(s): {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (typeof range === 'string')\n{\nif (macValue.toLowerCase() == range.toLowerCase())\n{\nreturn [false, k, retMsg];\n}\n}\n}\n}\nelse\n{\n}\nreturn [true, \"\", \"\"];\n}\nfunction getMsgofWholeMACIPCheck(checkRetArray, ruleObj, checkValue, checkParaName)\n{\nvar errMsg = \"\";\nswitch (checkRetArray[1])\n{\ncase \"banValue\":\n{\nif (ruleObj.messages.banValue != undefined)\n{\nerrMsg = ruleObj.messages.banValue;\n}\nelse\n{\nif (checkParaName != \"\")\n{\nerrMsg = checkParaName + checkRetArray[2];\n}\nelse\n{\nerrMsg = \"Current operation is invalid, please check configuration parameters. \"+\"[\"+\"Error Input: \"+checkValue+\"]\";\n}\n}\nbreak;\n}\ncase \"allowRange\":\n{\nif (ruleObj.messages.allowRange != undefined)\n{\nerrMsg = ruleObj.messages.allowRange;\n}\nelse\n{\nif (checkParaName != \"\")\n{\nerrMsg = checkParaName + checkRetArray[2];\n}\nelse\n{\nerrMsg = \"Current operation is invalid, please check configuration parameters. \"+\"[\"+\"Error Input: \"+checkValue+\"]\";\n}\n}\nbreak;\n}\ndefault:\n{\nerrMsg = \"error msg undefined!\"\n}\n}\nreturn errMsg;\n}\njQuery.validator.addMethod(\n\"utf8LengthRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar valLength = value.length;\nvar param1 = param[0];\nvar param2 = param[1];\nif (param2 < 3)\n{\nalert(\"utf8LengthRange is invalid![\"+param2+\"<\"+3 +\"]\");\n}\nelse\n{\nparam1 = Math.ceil(parseInt(param[0])/ 3);\nparam2 = Math.floor(parseInt(param[1]) / 3);\nif (param1 < param2)\n{\nif (valLength >= param1 && valLength <= param2 )\n{\nreturn true;\n}\n}\nelse if (param1 == param2)\n{\nif (valLength == param2)\n{\nreturn true;\n}\n}\nelse\n{\nalert(\"utf8LengthRange [\"+param1+\",\"+param2+\"] is invalid!\");\n}\n}\nreturn false;\n},\nfunction(param, element){\nvar lengthStr = \"\";\nvar param1 = param[0];\nvar param2 = param[1];\nif (param2 < 3)\n{\nlengthStr = \" Range Error!!!!!![param2<WEB_UTF8_REALBYTE]\";\n}\nelse\n{\nparam1 = Math.ceil(parseInt(param[0])/ 3);\nparam2 = Math.floor(parseInt(param[1]) / 3);\nif (param1 < param2)\n{\nlengthStr = param1 + \" ~ \" + param2;\n}\nelse if (param1 == param2)\n{\nlengthStr = param2;\n}\nelse\n{\nlengthStr = \" Range Error!!!!!![\"+param1+\",\"+param2+\"]\";\n}\n}\nreturn $.validator.format(\"Please enter a value with {0} characters.\", lengthStr);\n}\n);\njQuery.validator.addMethod(\n\"differentWith\",\nfunction(value, element, param) {\nvar target = $(param);\nif (this.settings.onfocusout) {\ntarget.unbind(\".validate-differentWith\").bind(\"blur.validate-differentWith\", function() {\n$(element).valid();\n});\n}\nreturn value != target.val();\n},\nfunction(param, element){\nvar t = $(param).closest(\"[id^=template_]\");\nvar id = $(param).attr(\"id\");\nvar labelObj = $(\"label[for='\"+id+\"']\",t);\nvar label = labelObj.text();\nif($(element).is(\"select\"))\n{\nreturn $.validator.format(\"Please select an option different with \\\"{0}\\\".\", label);\n}\nelse\n{\nreturn $.validator.format(\"Please enter a value different with \\\"{0}\\\".\", label);\n}\n}\n);\nfunction checkTimeHMS(timestr) {\nvar re = /^([0-1]{1}[0-9]{1}|[2]{1}[0-3]{1}):[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/;\nif (re.test(timestr) == true) {\nreturn true;\n}\nreturn false;\n}\njQuery.validator.addMethod(\n\"checkTimeHMS\",\nfunction (value, element, params) {\nif (this.optional(element)) {\nreturn \"dependency-mismatch\";\n}\nif (checkTimeHMS(value) == true) {\nreturn true;\n}\nreturn false;\n},\n\"Please enter the correct time format like HH:MM:SS.\"\n);\nfunction get_element_obj(obj, id) {\nvar instTplt = obj.closest(\"[id^=template_]\");\nvar elementID = obj.attr(\"id\");\nvar arr = elementID.split(':');\nvar strId = id;\nif (arr.length > 1) {\nvar exNum = arr[arr.length - 1];\nstrId = id + \":\" + exNum;\n}\nreturn $(\"[id^='\" + strId + \"']\", instTplt);\n};\nfunction time_earlierThan(obj, value, param, type) {\nvar tmpvalue = obj.val();\nvar ret = true;\nvar valuearr = value.split(\":\")\nvar tmpvaluearr = tmpvalue.split(\":\")\nif (valuearr[0] < tmpvaluearr[0]) {\nreturn true;\n} else {\nif (valuearr[0] === tmpvaluearr[0] && valuearr[1] < tmpvaluearr[1]) {\nreturn true;\n} else {\nif (valuearr[1] === tmpvaluearr[1] && valuearr[2] < tmpvaluearr[2]) {\nreturn true;\n}\n}\nreturn false;\n}\n};\nfunction time_laterThan(obj, value, param, type) {\nvar tmpvalue = obj.val();\nvar ret = true;\nvar valuearr = value.split(\":\")\nvar tmpvaluearr = tmpvalue.split(\":\")\nif (valuearr[0] > tmpvaluearr[0]) {\nreturn true;\n} else {\nif (valuearr[0] === tmpvaluearr[0] && valuearr[1] > tmpvaluearr[1]) {\nreturn true;\n} else {\nif (valuearr[1] === tmpvaluearr[1] && valuearr[2] > tmpvaluearr[2]) {\nreturn true;\n}\n}\nreturn false;\n}\n};\njQuery.validator.addMethod(\n\"timeComparison\",\nfunction (value, element, param) {\nif (this.optional(element)) {\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length) {\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length) {\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nif (obj.is(\":hidden\") || \"\" == obj.val()) {\nreturn true;\n}\nvar selectMode = {\n\"laterThan\": time_laterThan,\n\"earlierThan\": time_earlierThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\n\"Start time must be earlier than end time.\"\n);\nfunction randomNum(num)\n{\nvar t='';\nfor(var i=0;i<num;i++)\n{\nt+=Math.floor(Math.random()*10);\n}\nreturn t;\n}\nfunction encodeKey(key, iv)\n{\nvar pubKey = \"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodPTerkUVCYmv28SOfRV\\n7UKHVujx/HjCUTAWy9l0L5H0JV0LfDudTdMNPEKloZsNam3YrtEnq6jqMLJV4ASb\\n1d6axmIgJ636wyTUS99gj4BKs6bQSTUSE8h/QkUYv4gEIt3saMS0pZpd90y6+B/9\\nhZxZE/RKU8e+zgRqp1/762TB7vcjtjOwXRDEL0w71Jk9i8VUQ59MR1Uj5E8X3WIc\\nfYSK5RWBkMhfaTRM6ozS9Bqhi40xlSOb3GBxCmliCifOJNLoO9kFoWgAIw5hkSIb\\nGH+4Csop9Uy8VvmmB+B3ubFLN35qIa5OG5+SDXn4L7FeAA5lRiGxRi8tsWrtew8w\\nnwIDAQAB\\n-----END PUBLIC KEY-----\";\nvar str = key + \"+\" + iv;\nvar encrypt = new JSEncrypt();\nencrypt.setPublicKey(pubKey);\nvar encrypted = encrypt.encrypt(str);\nvar encryptkey = encrypted.toString();\nif(encryptkey.length == 0 || encryptkey == \"false\")\n{\nencryptkey = \"\";\n}\nreturn encryptkey;\n}\nfunction encodePara(data, key, iv)\n{\nvar key = CryptoJS.SHA256(key);\nvar iv = CryptoJS.SHA256(iv);\nvar encrypted =CryptoJS.AES.encrypt(data,key,\n{\niv:iv,\nmode:CryptoJS.mode.CBC,\npadding:CryptoJS.pad.ZeroPadding\n});\nreturn encrypted.toString();\n}\nfunction decodePara(encrypted, key, iv)\n{\nif (encrypted == \"\")\n{\nreturn \"\";\n}\ntry {\nvar key = CryptoJS.SHA256(key);\nvar iv = CryptoJS.SHA256(iv);\nvar decrypted = CryptoJS.AES.decrypt(encrypted, key, {\niv: iv,\nmode: CryptoJS.mode.CBC,\npadding: CryptoJS.pad.ZeroPadding\n});\nreturn decrypted.toString(CryptoJS.enc.Utf8);\n} catch (e) {\nconsoleLog(\"secure_common: decode error!!\")\nconsoleLog(e);\nreturn encrypted;\n}\n}\n\nvar menuTreeJSON = [{\"id\":\"homePage\",\"name\":\"Home\",\"area\":[{\"area\":\"home_t.lp\"}]},{\"id\":\"internet\",\"name\":\"Internet\"},{\"id\":\"localnet\",\"name\":\"Local Network\"},{\"id\":\"mgrAndDiag\",\"name\":\"Management & Diagnosis\"}];\nvar menuTreeObj = new MenuTreeClass(menuTreeJSON);\nvar _sessionTmpToken = \"\";\nvar preLoadImg = [];\npreLoadImg[0] = \"/img/nv_s.gif\";\npreLoadImg[1] = \"/img/nv_left.gif\";\npreLoadImg[2] = \"/img/nv_right.gif\";\npreLoadImg[3] = \"/img/nv_middle.gif\";\npreLoadImg[4] = \"/img/waiting.gif\";\npreLoadImg[5] = \"/img/info_m.png\";\npreLoadImg[6] = \"/img/waiting_w.gif\";\nfunction preload(Img)\n{\nvar imgTmp = [];\nfor (var i=0; i<Img.length; i++)\n{\nimgTmp[i] = new Image();\nimgTmp[i].src = Img[i];\n}\n}\npreload(preLoadImg);\n</script>\n</head>\n<body>\n<script type=\"text/javascript\">\nif(top != self)\n{\ndocument.getElementsByTagName(\"body\")[0].style.display = 'none';\ntop.location = self.location;\n}\nfunction LogOff()\n{\nshowWaitTip(true);\n$.post( \"/?_type=loginData&_tag=logout_entry\", {IF_LogOff:1, _sessionTOKEN:_sessionTmpToken}, undefined, \"json\" )\n.done(function( data ) {\nif ( data.need_refresh )\n{\ntop.location.href = top.location.href;\n}\nelse\n{\nalert(\"This page has expired, please refresh and try again. \");\nshowWaitTip(false);\n}\n});\n}\n</script>\n<div id=\"blackMask\" class=\"black_overlay\" style=\"display:none;\"></div>\n<div id=\"tipLayer\" class=\"white_content\">\n<div id=\"confirmLayer\" style=\"display:none;\">\n<div id=\"confirmMsg\">\n<p>are you sure?</p>\n</div>\n<div id=\"waitingImgArea\" style=\"display:none;\">\n</div>\n<div id=\"confirmBtnArea\" style=\"display:none;\">\n<input type=\"button\" class=\"button\" id=\"confirmCancel\" value=\"Cancel\" />\n<input type=\"button\" class=\"button\" id=\"confirmOK\" value=\"OK\" />\n<input type=\"button\" class=\"button\" id=\"confirmStop\" value=\"Stop\" />\n</div>\n</div>\n</div>\n<div id=\"page_container\">\n<div class=\"white_content_security\">\n<div class=\"sercurityNotice\" >\n<div class=\"sercurityNoticeMsg\">\n<ul>\n<li id=\"LastIP\"></li>\n<li id=\"LastCurrentTime\"></li>\n</ul>\n</div>\n<div id=\"confirmBtnArea\">\n<input type=\"button\" class=\"button\" id=\"sercurityNoticeOK\" value=\"OK\">\n</div>\n</div>\n</div>\n<div id=\"page_header\">\n<div id=\"banner\">\n<div id=\"logo\" class=\"logo\"></div>\n<div class=\"timeArea\" id=\"timeArea\" style=\"display:none;\">\nCurrent Time: <span id=\"_DevCurrTime\">Loading...</span>\n</div>\n<div id=\"banner_switchArea\">\n<div id=\"logOff\" class=\"emColor clickable\" onclick=\"LogOff()\">\n<div id=\"LogOffLnk\"> Logout</div>\n<div id=\"logUser\" class=\"logUser\" title=\"\">\n\n</div>\n</div>\n</div>\n</div>\n<div id=\"mainNavigator\">\n<div id=\"mn_first\"></div>\n<div id=\"mn_li\"></div>\n<div id=\"mn_last\"></div>\n</div>\n</div>\n<div id=\"page_content\">\n\n<script type=\"text/javascript\">\n\nvar loginLockInterval = null;\nvar editableInputs;\nvar dftFcsTaget;\nvar IsAllowedSubmit = true;\nfunction createTimeCountDownMessage(lockingTime, promptMsg)\n{\nif((promptMsg != null && promptMsg.length > 0) || lockingTime > 0 )\n{\n\nvar timeOutHint = promptMsg.concat(\"Please retry after {1} seconds. \");\n$(\"#login_error_waittime\").text(timeOutHint.format(3,lockingTime)).show();\n}\nelse\n{\n$(\"#login_error_waittime\").hide();\n}\n}\nfunction timer(seconds, promptMsg) {\nwindow.setTimeout(function() {\neditableInputs.removeAttr(\"disabled\");\ndftFcsTaget.focus();\n$(\"#LoginId\").removeAttr(\"disabled\").removeClass(\"disableBtn\");\n$(\"#login_error\").hide();\n$(\"#login_error_waittime\").hide().text(\"\");\nif (loginLockInterval) {\nwindow.clearInterval(loginLockInterval);\nconsoleLog(\"timeout to clearInterval!!!\");\n}\n}, seconds * 1000);\nloginLockInterval = window.setInterval((function(sec, msg){\nreturn function () {\nif (sec > 0){\nsec--;\n}\ncreateTimeCountDownMessage(sec, msg);\n}\n})(seconds, promptMsg), 1000);\n}\nfunction showTimeCountDown(lockingTime, promptMsg)\n{\nif(lockingTime > 0)\n{\ncreateTimeCountDownMessage(lockingTime, promptMsg);\n$(\"#LoginId\").attr(\"disabled\",\"true\").addClass(\"disableBtn\");\neditableInputs.attr(\"disabled\",\"true\");\ntimer(lockingTime, promptMsg);\n}\n}\nfunction DisplayLoginErrorTip(loginData)\n{\nvar loginErrMsg = loginData.loginErrMsg;\nvar lockingTime = loginData.lockingTime;\nvar promptMsg = loginData.promptMsg;\nlockingTime = parseInt(lockingTime);\nif ( IsBrowserSupportCookie() == false )\n{\n$(\"#login_error\").show();\n$(\"#login_error_span\").text(\"Your browser's cookie functionality is turned off, please turn it on before login.\");\n}\nelse if(loginErrMsg.length > 0 || promptMsg.length > 0)\n{\n$(\"#login_error\").show();\nif(loginErrMsg.length > 0)\n{\n$(\"#login_error_span\").text(loginErrMsg).show();\n}\nelse\n{\n$(\"#login_error_span\").hide();\n}\nif (lockingTime > 0 || promptMsg.length > 0)\n{\nshowTimeCountDown(lockingTime, promptMsg);\n}\n}\nelse\n{\n$(\"#login_error\").hide();\n}\n}\nfunction g_loginToken(xml)\n{\nvar xmlObj = $(xml).text();\nvar Password =$(\"#Frm_Password\").val();\nvar SHA256Password =sha256(Password+xmlObj);\nvar postData = {};\npostData[\"Password\"] = SHA256Password;\npostData[\"Username\"] = $(\"#Frm_Username\").val();\npostData[\"_sessionTOKEN\"] = $(\"#_sessionTOKEN\").val();\npostData[\"action\"] = \"login\";\npostData[\"captcha\"] = $(\"#Frm_captchaCode\").val();\nPassword = undefined;\nSHA256Password = undefined;\n$.post( \"/?_type=loginData&_tag=login_entry\", postData, undefined, \"json\" )\n.done(function( data ) {\n$(\"#_sessionTOKEN\").val(data.sess_token);\nif ( data.login_need_refresh )\n{\ntop.location.href = top.location.href;\n}\nelse\n{\nDisplayLoginErrorTip(data);\n}\n});\npostData = undefined;\n}\nvar throttle = function (fn, delay, atleast) {\nvar timer = null, previous = null;\nreturn function () {\nvar context = this, args = arguments, now = +new Date();\nif (!previous) {previous = now;}\nif (now - previous > atleast) {\nfn.apply(context, args);\nprevious = now;\n} else {\nclearTimeout(timer);\ntimer = setTimeout(function() {\nfn.apply(context, args);\n}, delay);\n}\n}\n};\nfunction ElementCheck(obj, errormsg)\n{\nvar errorobj = obj.parents(\".row\").find(\".errorLabelWraper\");\nerrorobj.remove();\nobj.removeClass(\"error\");\nif (obj.attr(\"type\") == \"text\")\n{\nif (obj.val() == \"\")\n{\n$(this).addClass(\"error\");\nIsAllowedSubmit = false;\nShowError(obj, errormsg);\n}\nelse\n{\nIsAllowedSubmit = true;\n}\n}\nif (obj.attr(\"type\") == \"checkbox\")\n{\nif (obj.is(\":checked\"))\n{\nIsAllowedSubmit = true;\n}\nelse\n{\n$(this).addClass(\"error\");\nIsAllowedSubmit = false;\nShowError(obj, errormsg);\n}\n}\n}\nfunction ShowError(element, errormsg) {\nvar rowObj = element.closest(\".row\");\nif ( rowObj.length == 0 )\n{\nconsoleLog(\"element id=[\"+element.attr(\"id\")+\"] is not in row div.\");\nreturn ;\n}\nvar id = element.attr(\"id\");\nvar errorHTML = \"<label for='\" + id + \" generated='true' class='error'>\" + errormsg + \" </label>\";\nvar error = $(errorHTML);\nvar tipHTML = \"<div class=\\\"errorLabelWraper\\\"></div>\";\nvar tipObj = $(tipHTML);\nerror.appendTo(tipObj);\nvar rowWidth = rowObj.width();\nvar usedWidth = 0;\nvar rightObj = undefined;\nrowObj.children().each(function(){\nif (!($(this).hasClass(\"_LuQUID_AccessDeviceList\")||\n$(this).hasClass(\"clear\"))){\nusedWidth += $(this).outerWidth(true);\n}\nif ($(this).hasClass(\"right\")){\nrightObj = $(this);\n}\n});\nvar errWidth = rowWidth - usedWidth;\ntipObj.width(errWidth-5-23);\nif (rightObj != undefined)\n{\ntipObj.insertAfter(rightObj);\n}\nelse\n{\ntipObj.appendTo(rowObj);\n}\n}\n$(document).ready(function(){\nvar loginForm = $(\".loginInstCfgArea\");\neditableInputs = $(\"input\",loginForm).not(\":disabled\").not(\"[readonly=readonly]\");\nnew ShowHidePwdClass(\"Frm_Password\", \"loginWrapper\", \"OBJ_USERINFO_ID\");\n$(\"#captchaImg\",loginForm).click(function(){\ngetCaptcha($(this));\n});\n$(\"#Frm_captchaCode\",loginForm).focus(function(){\nvar imgTemp = $(\"#captchaImg\",loginForm);\nif(!imgTemp.hasClass(\"__CheckVaildImgShow\")){\nimgTemp.click();\n}\n});\n$.getJSON(\"/?_type=loginData&_tag=login_entry\")\n.done(function( json ) {\n$(\"#_sessionTOKEN\").val(json.sess_token);\nDisplayLoginErrorTip(json);\n})\n.fail(function( jqxhr, textStatus, error ) {\nvar err = textStatus + \", \" + error;\nconsoleLog( \"Request Failed: \" + err );\n});\neditableInputs.each(function(){\nif ($(this).val() == \"\") {\n$(this).focus();\ndftFcsTaget = $(this);\nreturn false;\n}\n});\n$(\"#LoginId\").bind(\"click\", throttle(function(){\nif ( true == IsAllowedSubmit )\n{\nvar loadAllowAddr = \"/?_type=loginData&_tag=login_token\";\n$(this).dataTransfer(loadAllowAddr, \"GET\", g_loginToken, undefined, false);\n}\n}, 300, 300));\nshowWaitTip(false);\neditableInputs.keydown(function(event){\nif(event.keyCode==13){\nevent.preventDefault();\nevent.stopPropagation();\n$(\"#LoginId\").click();\n}\n});\n});\nString.prototype.format = function(args) {\nvar result = this;\nif (arguments.length > 0)\n{\nfor (var i = 0; i < arguments.length; i++)\n{\nif (arguments[i] != undefined) {\nvar reg = new RegExp(\"({[\" + i + \"]})\", \"g\");\nresult = result.replace(reg, arguments[i]);\n}\n}\n}\nreturn result;\n};\nfunction showOrHideRowDiv(action, RowDiv)\n{\nvar subWidget = RowDiv.find(\"*[id!='']\")\nif ( action == \"show\" )\n{\nRowDiv.showIt(true);\nsubWidget.removeClass(\"PostIgnore\");\n}\nelse\n{\nRowDiv.showIt(false);\nsubWidget.addClass(\"PostIgnore\");\n}\n}\nfunction colonStripping(str)\n{\nvar colonLocation = str.indexOf(\":\");\nif ( colonLocation != -1 )\n{\nreturn str.substring(0, colonLocation);\n}\nreturn str;\n}\nfunction colonStrippingLast(str)\n{\nvar colonLocation = str.lastIndexOf(\":\");\nif ( colonLocation != -1 )\n{\nreturn str.substring(0, colonLocation);\n}\nreturn str;\n}\njQuery.fn.showIt = function(show) {\nif (show)\n{\n$(this).css(\"display\", \"\");\n}\nelse\n{\n$(this).css(\"display\", \"none\");\n}\n};\nfunction GetSuffixedIDorName(oldValue, suffix, splitter, forParaName)\n{\nvar newValue = \"\";\nif ( forParaName == true )\n{\noldValue = oldValue.split(\":\");\noldValue[0] += splitter + suffix;\nnewValue = oldValue.join(\":\");\n}\nelse\n{\nnewValue = oldValue + splitter + suffix;\n}\nreturn newValue;\n}\njQuery.fn.cloneWithSuffix = function(suffix, splitter, forParaName) {\nvar source = $(this);\nvar clone = source.clone(true);\nclone.attr(\"id\", clone.attr(\"id\")+\"_\"+suffix);\nif ( undefined == splitter )\n{\nsplitter = \":\";\n}\nif ( undefined == forParaName )\n{\nforParaName = false;\n}\nvar idElems = clone.find(\"*[id!='']\");\nidElems.each(function(){\nvar idEle = $(this);\nvar oldID = idEle.attr(\"id\");\nif (oldID != undefined)\n{\nvar newID = GetSuffixedIDorName(oldID, suffix, splitter, forParaName);\nidEle.attr(\"id\", newID);\n}\nvar oldName = idEle.attr(\"name\");\nif (oldName != undefined)\n{\nvar newName = GetSuffixedIDorName(oldName, suffix, splitter, forParaName);\nidEle.attr(\"name\", newName);\n}\n});\nlabelForElems = clone.find(\"label\");\nlabelForElems.each(function(){\nvar labelForEle = $(this);\nvar oldFor = labelForEle.attr(\"for\");\nif (oldFor != undefined)\n{\nvar newFor = GetSuffixedIDorName(oldFor, suffix, splitter, forParaName);\nlabelForEle.attr(\"for\", newFor);\n}\n});\nclone.trigger(\"applyPromptCheckJSON\", [clone]);\n$.publish(\"modify_promptcheck\",[clone]);\nreturn clone;\n};\nfunction initial_sceneTip()\n{\n$(\".sceneTip_container\").each(function(){\n$(this).hide();\n});\n$(\".sceneTipLink\").each(function(){\nvar sceneTipLinkContent = $(this).children();\nsceneTipLinkContent.unbind( \"click\" );\nsceneTipLinkContent.click(function(event){\nevent.preventDefault();\n$(this).parent().next().slideToggle(\"normal\");\n});\n});\n$(\".sceneTip_close\").each(function(){\nvar sceneTip_closeLink = $(this).children();\nsceneTip_closeLink.unbind( \"click\" );\nsceneTip_closeLink.click(function(){\n$(this).parent().parent().slideUp(\"normal\");\n});\n});\n}\nfunction succHintShow(template)\n{\nvar PostFeedbackOBJ = $(\".succHint\",template);\nPostFeedbackOBJ.fadeIn(1000);\nwindow.setTimeout(\nfunction() {\nPostFeedbackOBJ.fadeOut(1000);\nPostFeedbackOBJ.hide();\n},\n2000\n);\n}\njQuery.fn.dataTransfer = function(URL, transferType, success_func, error_func, IfShowWaitTip, async, dataType){\nif ( !URL || URL == \"\" )\n{\nconsoleLog(\"[dataTransfer]URL is illegal!\");\nreturn;\n}\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nvar asyncTemp = async;\nif ( asyncTemp == undefined )\n{\nasyncTemp = true;\n}\nif ( !dataType )\n{\nvar dataType = \"xml\";\n}\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\nvar Head = $(this);\n$.ajax({\nurl:URL,\ntype: transferType,\ndataType: dataType,\ntimeout: 30000,\nasync: asyncTemp,\ncache:false,\nerror: function(){\nif ($.isFunction(error_func))\n{\nerror_func();\n}\nelse\n{\nif (Head != undefined)\n{\nvar ajaxTransferFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar externErrorHint = $(\".externErrorHint\",Head);\nif ( externErrorHint != undefined )\n{\n$(\"span\",externErrorHint).text(ajaxTransferFailHint);\nexternErrorHint.showIt(true);\n}\n}\nshowWaitTip(false);\n}\n},\nsuccess: function(xml){\nsuccess_func(xml);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n};\nfunction HTMLEnCode(str)\n{\nvar s = \"\";\nif (typeof(str) != \"string\")\n{\nreturn str;\n}\nif(str.length == 0)\n{\nreturn \"\";\n}\ns = str.replace(/&/g, \"&#38;\");\ns = s.replace(/</g, \"&#60;\");\ns = s.replace(/>/g, \"&#62;\");\ns = s.replace(/ /g, \"&#32;\");\ns = s.replace(/\\'/g, \"&#39;\");\ns = s.replace(/\\\"/g, \"&#34;\");\nreturn s;\n}\nfunction addSlash(srcStr)\n{\nvar str = \"\";\nvar ch = \"\";\nif (typeof(srcStr) != \"string\")\n{\nreturn srcStr;\n}\nfor(var i = 0; i < srcStr.length; i++)\n{\nch = srcStr.substr(i, 1);\nif( \"\\\\\" == ch )\n{\nch = \"\\\\\\\\\";\n}\nelse if( \"\\'\" == ch )\n{\nch = \"\\\\\\'\";\n}\nelse if( \"\\\"\" == ch )\n{\nch = \"\\\\\\\"\";\n}\nstr = str + ch;\n}\nreturn str;\n}\nfunction SetSelectValue(SelectElem, data)\n{\n$(\"option[class='_optExpHandle']\", SelectElem).remove();\nvar findOption = 0;\n$(\"option\", SelectElem).removeAttr(\"selected\");\n$(\"option\", SelectElem).each(function(){\nvar OptionObj = $(this);\nif ( OptionObj.val() == data )\n{\nfindOption = 1\nSelectElem.val(data);\nreturn false;\n}\n});\nif ( findOption == 0 )\n{\nSelectElem.append(\"<option value='\"+ HTMLEnCode(data)\n+ \"' title='--Unknown--' class='_optExpHandle'>\"\n+ \"--Unknown--\" + \"</option>\");\nSelectElem.val(addSlash(data));\n}\n}\njQuery.fn.fillDataByType = function(data){\nvar Elems = $(this);\nif (Elems.is(\"input\"))\n{\nswitch (Elems.attr(\"type\"))\n{\ncase \"hidden\":\n{\nElems.val(data);\nif (Elems.attr(\"_LuQUID_splitMACID\") != undefined)\n{\nvar splitMACID = Elems.attr(\"_LuQUID_splitMACID\");\nElems.FillIPorMacDataBySplit(splitMACID, \":\", 6);\n}\nelse if (Elems.attr(\"_LuQUID_splitIPID\") != undefined)\n{\nvar splitIPID = Elems.attr(\"_LuQUID_splitIPID\");\nElems.FillIPorMacDataBySplit(splitIPID, \".\", 4);\n}\nbreak;\n}\ncase \"text\":\ncase \"password\":\n{\nif( Elems.attr(\"encode\") == \"1\")\n{\nvar key = _sessionTmpToken;\nvar iv = key.split(\"\").reverse().join(\"\");\ndata = decodePara(data,key,iv);\n}\nElems.val(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\nbreak;\n}\ncase \"checkbox\":\n{\nif( 1 == data )\n{\nElems.prop(\"checked\", true);\n}\nelse\n{\nElems.prop(\"checked\", false);\n}\nElems.val(data);\nbreak;\n}\ndefault:\n{\nbreak;\n}\n}\n}\nelse if (Elems.is(\"span\"))\n{\nElems.text(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\n}\nelse if (Elems.is(\"a\"))\n{\nElems.text(data);\nElems.attr(\"href\",data);\n}\nelse if (Elems.is(\"select\"))\n{\nSetSelectValue(Elems, data);\n}\nelse if (Elems.is(\"textarea\"))\n{\nElems.val(data);\n}\nelse if (Elems.is(\"label\"))\n{\nElems.text(data);\n}\nelse if (Elems.is(\"div\"))\n{\nvar radioObj = $(\"input[type=radio]\", Elems);\nradioObj.each(function(){\nvar thisObj = $(this);\nif (thisObj.val() == data)\n{\nthisObj.prop(\"checked\", true);\n}\nelse\n{\nthisObj.prop(\"checked\", false);\n}\n});\n}\nelse if (Elems.is(\"td\"))\n{\nElems.text(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\n}\nelse\n{\n}\n};\njQuery.fn.fillDataByOBJID = function(xml, OBJIDs, Clone, suffix, splitter){\nif ( undefined == splitter )\n{\nsplitter = \":\";\n}\n$(xml).find(\"encode\").each(function(){\nvar encodePara= $(this).text().split(\",\");\nfor(var i in encodePara)\n{\n$(\"input[id^=\"+encodePara[i]+\"]\", Clone).attr(\"encode\",\"1\");\n}\n});\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJIDSplit = OBJID.split(\":\");\nvar OBJIDIndex = 0;\nvar isSplitterExist = 0;\nif ( OBJIDSplit.length == 2 )\n{\nOBJID = OBJIDSplit[0];\nOBJIDIndex = parseInt(OBJIDSplit[1]);\nisSplitterExist = 1;\n}\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar OBJ;\nif ( OBJIDIndex < OBJs.length )\n{\nOBJ = OBJs.get(OBJIDIndex);\n}\nelse\n{\ncontinue;\n}\nvar instances;\nif ( 1 == isSplitterExist )\n{\ninstances = $(\"Instance\", OBJ);\n}\nelse\n{\ninstances = $(\"Instance\", OBJs);\n}\nif ( instances.length <= suffix\n|| suffix < 0 )\n{\nconsoleLog(\"suffix off normal upper!!\");\ncontinue;\n}\nvar InstOBJ = instances.eq(suffix);\nInstOBJ.find(\"ParaName\").each(function(){\nvar ParaName = $(this).text();\nvar ParaValue = $(this).next().text();\nvar Elems = $(\"[id^='\"+ParaName+splitter+\"']\", Clone);\nif ( Elems.length == 0 )\n{\nElems = $(\"[id='\"+ParaName+\"']\", Clone);\n}\nif ( Elems.length > 0 )\n{\nif ( Elems.length > 1 )\n{\nconsoleLog(\"this ele id is duplicate[\" +Elems.attr(\"id\")+ \"]\");\n}\nElems.fillDataByType(ParaValue);\n}\nelse\n{\nif ( \"_InstID\" != ParaName )\n{\nconsoleLog(\"XML ParaName(\"+ParaName+\") cannot map to HTML \"\n+ \"by fillDataByType, so it may be useless, \"\n+ \"web security require deleting it!\");\n}\n}\n});\n}\n$(\".SpecialPassword\", Clone).each(function(i){\n$(this).val(\"\t\t\t\t\t\t\");\n});\n};\njQuery.fn.InstantializeForTemplateBox = function(xml, OBJIDs, container){\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar ruleTemplate = $(\"[id='\"+OBJID+\"']._LuQuid_TempalteBox\", container);\nif( ruleTemplate.length == 0 )\n{\ncontinue;\n}\n$(\"[id^='\"+OBJID+\"_']._LuQuid_TempalteBox\", container).remove();\nvar subWidget = ruleTemplate.find(\"*[id!='']\");\nsubWidget.removeClass(\"PostIgnore\");\nvar instances = $(\"Instance\", OBJs);\nvar ruleNum = instances.length;\nfor (var i=0; i<ruleNum; i++)\n{\nvar clone = ruleTemplate.cloneWithSuffix(i, \"_\", true);\nruleTemplate.before(clone);\nvar DataOBJID = [OBJID];\nclone.fillDataByOBJID(xml, DataOBJID, clone, i, \"_\");\nclone.showIt(true);\n}\n$(\"[id='\"+OBJID+\"._OBJ_InstNUM']\", container).val(ruleNum);\nvar templateInstID = $(\"[id='\"+OBJID+\"._OBJ_InstID']\", container);\ntemplateInstID.addClass(\"PostIgnore\");\nsubWidget.addClass(\"PostIgnore\");\n}\n};\njQuery.fn.FillDataOnlyForTemplateBox = function(xml, OBJIDs, container){\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar ruleTemplate = $(\"[id='\"+OBJID+\"']._LuQuid_TempalteBox\", container);\nif( ruleTemplate.length == 0 )\n{\ncontinue;\n}\n$(\"[id^='\"+OBJID+\"_']._LuQuid_TempalteBox\", container).each(function(){\nvar instObj = $(this);\nvar instId = instObj.find(\"[id^='\"+OBJID+\"._OBJ_InstID']\").val();\nvar index = -1;\nvar instances = $(\"Instance\", OBJs);\nvar ruleNum = instances.length;\nfor (var i=0; i<ruleNum; i++)\n{\nvar instIdName = OBJID+\"._OBJ_InstID\";\nvar ToOperParaArray = {};\nToOperParaArray[instIdName] = {\nValueOrigin: \"\"\n};\nxmlParaInInstOperate(xml, OBJID, i, ToOperParaArray);\nvar ruleInstId = ToOperParaArray[instIdName].ValueOrigin;\nif ( instId == ruleInstId )\n{\nindex = i;\nbreak;\n}\n}\nif ( index > -1 )\n{\nvar DataOBJID = [OBJID];\ninstObj.fillDataByOBJID(xml, DataOBJID, instObj, index, \"_\");\n}\nelse\n{\nconsoleLog(\"instId(\"+instId+\") cannot match xml instance\");\n}\n});\n}\n};\njQuery.fn.createPageDataByClone = function(RuleNum,DataOBJID,xml,fillDataByCustom){\nvar Head = $(this);\nvar HeadID = Head.attr(\"id\");\nvar TemplateOBJ = $(\"#template_\"+HeadID , Head);\n$(\"#_InstNum\", Head).val(RuleNum);\nfor (var i=0; i<RuleNum; i++)\n{\nvar clone = TemplateOBJ.cloneWithSuffix(i);\nTemplateOBJ.before(clone);\nclone.fillDataByOBJID(xml ,DataOBJID, clone, i);\nif ( $.isFunction(fillDataByCustom) )\n{\nfillDataByCustom(i,clone);\n}\nelse\n{\nclone.trigger(\"fillDataByCustom\",[i,clone]);\n}\nclone.showIt(true);\n}\n};\njQuery.fn.hasError = function(xml, location, container){\nvar ContentContainer = $(\"#\"+container);\nvar cmapiErrorContainer;\nvar errStr = $(\"IF_ERRORSTR\", $(xml));\nvar errParam = $(\"IF_ERRORPARAM\", $(xml));\nif (errStr.length <= 0 || errParam.length <= 0)\n{\nconsoleLog(\"[hasError:]cannot find IF_ERRORSTR or IF_ERRORPARAM\");\nreturn;\n}\nif(!container)\n{\nContentContainer = $(this);\n}\nif (!location)\n{\nlocation = \"errorHint\";\n}\nif (location == \"externErrorHint\")\n{\ncmapiErrorContainer = $(\".externErrorHint\",ContentContainer);\n}\nelse\n{\ncmapiErrorContainer = $(\".\"+location,ContentContainer);\n}\nvar ErrorString = $(\"IF_ERRORSTR\", $(xml)).text();\nvar ErrorParam = $(\"IF_ERRORPARAM\", $(xml)).text();\nif ( ErrorString == \"SUCC\" )\n{\ncmapiErrorContainer.showIt(false);\nreturn 0;\n}\nelse if ( ErrorString == \"SessionTimeout\" )\n{\nif (typeof(pro_SessionTimeout) == \"function\")\n{\npro_SessionTimeout();\n}\nelse\n{\ntop.location.href = top.location.href;\n}\nreturn 1;\n}\nelse\n{\nvar cmapiErrorContainerHtml = \"\";\nvar paraString = \"\";\nif ( ErrorParam != \"SUCC\")\n{\nvar LabelFindResult = 0;\nErrorString = \"Current operation is invalid, please check whether {0} is legal. \"\nvar paraLabel = ContentContainer.find(\"label[for^='\"+ErrorParam+\"\\\\:']\");\nif ( paraLabel.length <= 0 )\n{\nparaLabel = ContentContainer.find(\"label[for='\"+ErrorParam+\"']\");\n}\nif ( paraLabel.length > 0 )\n{\nparaLabel.each(function(){\nvar labelTmp = $(this);\nif ( !labelTmp.hasClass(\"error\"))\n{\nparaString = labelTmp.text();\nLabelFindResult = 1;\nreturn false;\n}\n});\n}\nif ( LabelFindResult == 0 || paraString.trim() == \"\")\n{\nErrorString = \"Current operation is invalid, please check configuration parameters. \";\n}\ncmapiErrorContainerHtml = ErrorString.format(paraString);\n}\nelse\n{\nif ( \"FAIL\" == ErrorString\n|| \"Current operation is invalid, please check whether {0} is legal. \" == ErrorString )\n{\nErrorString = \"Current operation is invalid, please check configuration parameters. \";\n}\ncmapiErrorContainerHtml = ErrorString;\n}\n$(\"span\",cmapiErrorContainer).html(cmapiErrorContainerHtml);\ncmapiErrorContainer.showIt(true);\nreturn 1;\n}\n};\njQuery.fn.ShouldPostIgnore = function(){\nif($(this).hasClass(\"PostIgnore\"))\n{\nreturn true;\n}\nreturn false;\n};\njQuery.fn.InitialPostData = function(actionType){\nvar AND = \"&\";\nvar template = $(this);\nvar PostData = \"IF_ACTION=\" + actionType;\nvar cryptoKey = randomNum(16);\nvar cryptoIv = randomNum(16);\nvar needEncode = false;\nvar formInputContent = template.find(\"input,select\");\nformInputContent.each(function(key){\nvar Elems = $(this);\nif ( Elems.ShouldPostIgnore() )\n{\nreturn true;\n}\nvar ElemsID = Elems.attr(\"id\");\nif (typeof(ElemsID) != \"string\") {\nreturn true;\n}\nif ( Elems.attr(\"type\") == \"radio\" )\n{\nif ( Elems.is(':checked') )\n{\nElemsID = Elems.attr(\"name\");\n}\nelse\n{\nreturn true;\n}\n}\nvar ElemsMainID = colonStripping(ElemsID);\nvar ElemsValue = \"\";\nif ( Elems.is(\"input\") )\n{\nswitch (Elems.attr(\"type\"))\n{\ncase \"hidden\":\n{\nif (Elems.attr(\"_LuQUID_splitMACID\") != undefined)\n{\nvar splitMACID = Elems.attr(\"_LuQUID_splitMACID\");\nElems.FillIPorMacDataCombination(splitMACID, \":\", 6);\n}\nelse if (Elems.attr(\"_LuQUID_splitIPID\") != undefined)\n{\nvar splitIPID = Elems.attr(\"_LuQUID_splitIPID\");\nElems.FillIPorMacDataCombination(splitIPID, \".\", 4);\n}\nElemsValue = Elems.val();\nvar OriValue = ElemsValue;\nif(Elems.attr(\"encode\") == \"1\")\n{\nElemsValue = encodePara(ElemsValue,cryptoKey,cryptoIv);\nif (OriValue != ElemsValue)\n{\nneedEncode = true;\n}\n}\nbreak;\n}\ncase \"text\":\ncase \"password\":\ncase \"radio\":\n{\nElemsValue = Elems.val();\nvar OriValue = ElemsValue;\nif(Elems.attr(\"encode\") == \"1\")\n{\nElemsValue = encodePara(ElemsValue,cryptoKey,cryptoIv);\nif (OriValue != ElemsValue)\n{\nneedEncode = true;\n}\n}\nbreak;\n}\ncase \"checkbox\":\n{\nif( Elems.is(':checked')==true )\n{\nElemsValue = 1;\n}\nelse\n{\nElemsValue = 0;\n}\nbreak;\n}\ndefault:\n{\nbreak;\n}\n}\n}\nelse if ( Elems.is(\"select\") )\n{\nElemsValue = Elems.val();\n}\nelse\n{\nconsoleLog(\"when create post data, find not support elements type!!\");\n}\nvar NameValueJson = {\n\"ElemsMainID\": ElemsMainID,\n\"ElemsValue\": ElemsValue\n};\ntemplate.trigger(\"PostDataChangeByCustom\",[NameValueJson,template]);\nvar RealElemsValue = encodeURIComponent(NameValueJson.ElemsValue);\nPostData += AND + ElemsMainID + \"=\" + RealElemsValue;\n});\nif(needEncode)\n{\nPostData += AND + \"encode=\" + encodeURIComponent(encodeKey(cryptoKey,cryptoIv));\n}\nreturn PostData;\n};\nfunction RefreshClickHandle(Head)\n{\n$(\".Btn_refresh\", Head).each(function(){\n$(this).unbind(\"click\");\n$(this).bind(\"click\", function(){\nvar buttonOBJ = $(this);\nif (buttonOBJ.hasClass(\"disableBtn\")\n||buttonOBJ.hasClass(\"disableLongBtn\"))\n{\nreturn;\n}\nvar HeadID = Head.attr(\"id\");\nHead.find(\"[id^='template_\"+HeadID+\"_']\").each(function(){\n$(this).remove();\n});\nvar ServerAddr = $(\"address span\", Head).text();\nHead.dataTransfer(ServerAddr,\n\"GET\",\nHead.succfunction,\nHead.failfunction,\nundefined,\ntrue);\n});\n})\n}\nfunction initialStatusArea(Head)\n{\nif ( 0 == $(\"._LuQUID_STATUS_OBJID\", Head).length )\n{\nreturn;\n}\nvar OBJID = [];\nvar OBJDOMs = $(\"._LuQUID_STATUS_OBJID>li\", Head);\nOBJDOMs.each(function(){\nvar identity = $(this).text();\nOBJID.push(identity);\n})\nvar isMultiInst = $(\".maxInstNum\", Head).val();\nvar ServerAddr = $(\"address span\", Head).text();\nHead.succfunction = function(xml){\nif (Head.hasError(xml,\"externErrorHint\") == 0)\n{\nHead.trigger(\"changeXMLDataBeforeFillData\", [xml]);\nvar XMLOBJ = $(xml).find(OBJID[0]);\nvar RuleNum = $(\"Instance\", XMLOBJ).length;\nif (RuleNum == 0)\n{\n$(\".noDataHint\",Head).showIt(true);\n$(\".form_content\",Head).showIt(false);\n}\nelse\n{\n$(\".noDataHint\",Head).showIt(false);\n$(\".form_content\",Head).showIt(true);\nif (isMultiInst == 0)\n{\nHead.fillDataByOBJID(xml ,OBJID, Head, 0);\nHead.trigger(\"fillDataByCustom\",[0, Head]);\nvar template = $(\"[id^='template_']\", Head);\ntemplate.trigger(\"fillDataByCustom\",[0, template]);\ntemplate.showIt(true);\n}\nelse\n{\nHead.fillDataByCustom = undefined;\nHead.createPageDataByClone(RuleNum, OBJID, xml,\nHead.fillDataByCustom);\n}\ncolorTblRow(\".colorTbl\", \"even\", Head);\n}\n}\n};\nRefreshClickHandle(Head);\nif ( $(\".collapBarWithDataTrans\",Head).length <= 0 )\n{\nHead.dataTransfer(ServerAddr,\n\"GET\",\nHead.succfunction);\n}\nelse\n{\ninitial_collapBarWithDataTrans(Head);\n}\n}\nfunction initial_special_password(Head)\n{\n$(\".SpecialPassword\", Head).each(function(){\n$(this).mouseup( function(){\nif(this.focused){\nthis.focused=false;\nreturn false;\n}\n});\n});\n$(\".SpecialPassword\", Head).each(function(){\n$(this).focus( function(){\nthis.select();\nthis.focused=true;\n});\n});\n}\nfunction initial_button(buttonType, Head, IfShowWaitTip)\n{\nif ( !Head )\n{\nconsoleLog(\"incoming para:Head is not defined!\");\nreturn;\n}\nvar buttonClass = \"\";\nvar eventHandler = \"\";\nif ( buttonType == \"Apply\" )\n{\nbuttonClass = \"Btn_apply\";\neventHandler = \"fillDataByApplyResult\";\n}\nelse if ( buttonType == \"Cancel\" )\n{\nbuttonClass = \"Btn_cancel\";\neventHandler = \"fillDataByCancelResult\";\n}\nelse if ( buttonType == \"Delete\" )\n{\nbuttonClass = \"Btn_delete\";\neventHandler = \"fillDataByDeleteResult\";\n}\nelse\n{\n}\n$(\".\"+buttonClass, Head).each(function(){\n$(this).unbind(\"click\");\n$(this).bind(\"click\",function(event){\nvar buttonOBJ = $(this);\nif (buttonOBJ.hasClass(\"disableBtn\")\n||buttonOBJ.hasClass(\"disableLongBtn\"))\n{\nreturn;\n}\nvar Head = buttonOBJ.parents(\".HeadDIV\").eq(0);\nvar template = buttonOBJ.parents(\"[id^='template']\");\nvar ActionBeforePostResult = {result: \"Process\"};\ntemplate.trigger(\"ActionBeforePostByCustom\",[template,ActionBeforePostResult]);\nif (ActionBeforePostResult.result != \"Process\")\n{\nreturn;\n}\nvar ThisInstID = $(\"[id^='_InstID']\",template).val();\nif ( ThisInstID == undefined )\n{\nvar luquidObjUl = $(\"._LuQUID_CONFIG_OBJID\", Head);\nvar objId = $(\"li\", luquidObjUl).eq(0).text();\nvar instId = objId + \"\\\\._OBJ_InstID\";\nThisInstID = $(\"[id^='\"+ instId +\"']\",template).val();\n}\nif ( ThisInstID == -1\n&& (buttonType == \"Cancel\" || buttonType == \"Delete\") )\n{\ntemplate.remove();\nreturn;\n}\nvar ServerAddr = $(\"address span\", Head).text();\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif ( buttonType == \"Apply\" )\n{\nvar formOBJ = $(\".form_content\", template);\nif ( formOBJ.length > 0 && false == formOBJ.valid() )\n{\nreturn;\n}\nelse\n{\nvar IPMACCheckResult = {result: \"checkOK\"};\ntemplate.trigger(\"wholeIPorMACCheck\",[template,IPMACCheckResult]);\nif (IPMACCheckResult.result != \"checkOK\")\n{\nreturn;\n}\nvar formObj = $(\".form_content\", template);\nvar txtInputObjs = $(\"input[type='text']\", formObj);\ntxtInputObjs.each(function(){\nvar obj = $(this);\nvar rules = obj.rules();\nif (rules.integer)\n{\nvar intStr = obj.val();\nvar sign, digits;\nif ( intStr.charAt(0) == '-' )\n{\nsign = \"-\";\ndigits = intStr.substring(1);\n}\nelse\n{\nsign = \"\";\ndigits = intStr;\n}\nwhile(digits.charAt(0) == '0' && digits.length > 1)\n{\ndigits = digits.substring(1);\n}\nintStr = sign + digits;\nobj.val(intStr);\n}\n});\nvar passObj = $(\".passRules\",template);\nfor(var i=0;i<passObj.length;i++)\n{\nif(passObj.eq(i).is(\":visible\"))\n{\nvar passVal = passObj.eq(i).val();\nif(passVal != \"\t\t\t\t\t\t\" &&(!(getPwdLevel(passVal,\"\")) || template.find(\".redFont\").text() == \"Weak\"))\n{\nvar msg = \" Current password is weak,a strong password should contain characters,digits and special symbols. Are you sure to continue?\";\nvar confirmLayerOBJ = IniConfirm(msg);\n$(\"#confirmOK\",confirmLayerOBJ).bind(\"click\", {FuncOBJ: template}, function(event){\ndataPost(buttonType, eventHandler, ServerAddr, template, undefined, IfShowWaitTipTmp);\n});\nreturn;\n}\n}\n}\n}\n}\ndataPost(buttonType, eventHandler, ServerAddr, template, undefined, IfShowWaitTipTmp);\n});\n});\n}\nfunction dataPost(actionType, PostSuccHandler, ServerAddr, template, PostData, IfShowWaitTip, asyncFlag)\n{\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif (asyncFlag == undefined)\n{\nasyncFlag = true;\n}\nvar PostDataTmp = \"\";\nif (PostData == undefined)\n{\ntemplate.trigger(\"hiddenValueChangeByCustom\",[template, actionType]);\nPostDataTmp = template.InitialPostData(actionType);\n}\nelse\n{\nPostDataTmp = PostData;\n}\nPostDataTmp += \"&_sessionTOKEN=\"+_sessionTmpToken;\nvar procData = true;\nif (PostDataTmp.indexOf(\"%20\") >= 0)\n{\nprocData = false;\n}\nvar selfHeader = {};\nselfHeader[\"Check\"] = sha256(PostDataTmp);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\n$.ajax({\nurl:ServerAddr,\ntype: 'POST',\ndata: PostDataTmp,\ndataType: 'xml',\nheaders: selfHeader,\nprocessData: procData,\nasync: asyncFlag,\ntimeout: 30000,\ncache:false,\nerror: function(){\nvar ajaxPostFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar errorContainer = $(\".errorHint\",template);\nvar changeArea = $(\".ChangeArea\",template);\nvar collapsibleInst = $(\".collapsibleInst\",template);\nif (template.data(\"defined_ActionByDataPostError\") != true){\nif ( errorContainer != undefined )\n{\n$(\"span\", errorContainer).text(ajaxPostFailHint);\nerrorContainer.showIt(true);\nif ( changeArea != undefined )\n{\nchangeArea.showIt(true);\n}\nif ( collapsibleInst != undefined )\n{\ncollapsibleInst.addClass(\"instNameExp\");\n}\ntemplate.showIt(true);\n}\nshowWaitTip(false);\n}\nelse\n{\ntemplate.trigger(\"ActionByDataPostError\");\n}\n},\nsuccess: function(xml){\n_LuQUID_setTemplateDefEvents(template, PostSuccHandler);\ntemplate.trigger(PostSuccHandler,[xml,template]);\nif (template.hasError(xml,\"_noExist\") == 0)\n{\n$(\".SpecialPassword\", template).each(function(i){\n$(this).val(\"\t\t\t\t\t\t\");\n});\n}\nvar formObj = $(\".form_content\", template);\nvar errObjs = $(\".errorLabelWraper > .error\", formObj);\nerrObjs.attr(\"style\", \"display:none\");\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n}\nfunction dataPostJson(PostSuccHandler, ServerAddr, template, PostData, IfShowWaitTip, asyncFlag)\n{\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif (asyncFlag == undefined)\n{\nasyncFlag = true;\n}\nPostData[\"_sessionTOKEN\"] = _sessionTmpToken;\nvar procData = true;\nvar postDataStr = \"\";\nfor(var key in PostData) {\npostDataStr += key + \"=\" + encodeURIComponent(PostData[key]) + \"&\";\n}\npostDataStr = postDataStr.substring(0,postDataStr.length - 1);\nif (postDataStr.indexOf(\"%20\") >= 0)\n{\nprocData = false;\n}\nvar selfHeader = {};\nselfHeader[\"Check\"] = sha256(postDataStr);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\n$.ajax({\nurl:ServerAddr,\ntype: 'POST',\ndata: PostData,\ndataType: 'json',\nheaders: selfHeader,\nprocessData: procData,\nasync: asyncFlag,\ntimeout: 30000,\ncache:false,\nerror: function(){\nvar ajaxPostFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar errorContainer = $(\".errorHint\",template);\nvar changeArea = $(\".ChangeArea\",template);\nvar collapsibleInst = $(\".collapsibleInst\",template);\nif (template.data(\"defined_ActionByDataPostError\") != true){\nif ( errorContainer != undefined )\n{\n$(\"span\", errorContainer).text(ajaxPostFailHint);\nerrorContainer.showIt(true);\nif ( changeArea != undefined )\n{\nchangeArea.showIt(true);\n}\nif ( collapsibleInst != undefined )\n{\ncollapsibleInst.addClass(\"instNameExp\");\n}\ntemplate.showIt(true);\n}\nshowWaitTip(false);\n}\nelse\n{\ntemplate.trigger(\"ActionByDataPostError\");\n}\n},\nsuccess: function(data){\nif(data.tError.IF_ERRORID == 0){\ntemplate.trigger(PostSuccHandler,[data,template]);\n}else{\nvar ajaxFailHint = \"Page request failed, please try again!\";\n$(\".errorHint span\",template).text(ajaxFailHint);\n$(\".errorHint\",template).showIt(true);\n}\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n}\nfunction focusAndSelectInput(jqObj)\n{\nvar disValue = jqObj.attr(\"disabled\");\nif (disValue != \"disabled\" && disValue != true)\n{\njqObj.focus();\njqObj.select();\n}\n}\nfunction FocusAutoJump(obj,value,e)\n{\nvar objJQ = $(obj);\nvar prevOBJ = objJQ.prev(\"input\");\nvar nextOBJ = objJQ.next(\"input\");\nvar valLen = value.length;\nvar keynum;\nif (window.event)\n{\nkeynum = e.keyCode;\n}\nelse if (e.which)\n{\nkeynum = e.which;\n}\nvar temp = value.substring(valLen-1, valLen);\nif (\".\" == temp && objJQ.hasClass(\"ip\") && 0 != valLen)\n{\nobjJQ.val(value.substring(0, valLen-1))\nif (\".\" != value)\n{\nfocusAndSelectInput(nextOBJ);\n}\n}\nif (valLen == obj.maxLength)\n{\nif (nextOBJ.length <= 0)\n{\nreturn;\n}\nif (9 != keynum && 16 != keynum && 35 != keynum && 36 != keynum &&\n37 != keynum && 38 != keynum && 39 != keynum && 40 != keynum &&\n46 != keynum && 8 != keynum && objJQ.valid() == 1)\n{\nfocusAndSelectInput(nextOBJ);\n}\n}\nelse if (valLen == 0 && 37 == keynum)\n{\nif (prevOBJ.length <= 0)\n{\nreturn;\n}\nfocusAndSelectInput(prevOBJ);\n}\nelse\n{\nreturn;\n}\n}\nfunction autoJumpBack(obj,value,e)\n{\nvar objJQ = $(obj);\nvar prevOBJ = objJQ.prev(\"input\");\nvar nextOBJ = objJQ.next(\"input\");\nvar valLen = value.length;\nvar keynum;\nif (window.event)\n{\nkeynum = e.keyCode;\n}\nelse if (e.which)\n{\nkeynum = e.which;\n}\nif (8 == keynum && valLen == 0)\n{\nif (prevOBJ.length <= 0)\n{\nreturn;\n}\nfocusAndSelectInput(prevOBJ);\n}\n}\njQuery.fn.FillIPorMacDataBySplit = function(subid,Delimiter,length) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar value = IPOBJ.val();\nif ( !value )\n{\nreturn;\n}\nvar temp= value.split(Delimiter);\nif (length != temp.length)\n{\nreturn;\n}\nfor(var i=0; i<length; i++)\n{\nvar fillOBJ = $(\"[id^='\"+subid+i+\"']\",containerOBJ);\nfillOBJ.val(temp[i]);\n}\n};\njQuery.fn.FillIPorMacDataToInput = function(subid) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar value = IPOBJ.val();\nif ( !value )\n{\nreturn\n}\nvar fillOBJ = $(\"[id^='\"+subid+\"']\",containerOBJ);\nfillOBJ.val(value);\n};\njQuery.fn.FillIPorMacDataCombination = function(subid,Delimiter,length) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar temp = \"\";\nfor(var i=0; i<length; i++)\n{\nvar tempObj = $(\"[id^='\"+subid+i+\"']\",containerOBJ);\nif(0!=i)\n{\ntemp += Delimiter;\n}\nvar tempValue = tempObj.val();\nif ( !tempValue )\n{\ntempValue = \"\";\n}\ntemp += tempValue;\ntempObj.addClass(\"PostIgnore\");\n}\nIPOBJ.val(temp);\nreturn temp;\n};\njQuery.fn.checkIPorMACbyApply = function(checkIPorMACObj, template, IPMACCheckResult){\nvar breakFlag = 0;\n$.each(checkIPorMACObj, function(key, value){\nif (breakFlag != 0)\n{\nreturn false;\n}\nif ($(\"[id^='sub_\"+key+\"']\",template).is(\":visible\") != true)\n{\nreturn true;\n}\nvar labelId = value.labelId;\nvar paraName = \"\";\nvar paraNameObj = template.find(\"label[for^='\"+labelId+\"\\\\:']\");\nif ( paraNameObj.length <= 0 )\n{\nparaNameObj = template.find(\"label[for='\"+labelId+\"']\");\n}\nif ( paraNameObj.length > 0 )\n{\nparaNameObj.each(function(){\nvar labelTmp = $(this);\nif (labelTmp.hasClass(\"error\"))\n{\nreturn true;\n}\nparaName = labelTmp.text();\nreturn false;\n});\n}\nvar elementType = value.eleType;\nif (elementType == \"IP\")\n{\nvar IPObj = $(\"[id^='\"+key+\"']\",template);\nIPObj.FillIPorMacDataCombination(\"sub_\"+key, \".\", 4);\nvar ipValue = IPObj.val();\nif (value.rules != undefined)\n{\n$.each(value.rules, function(k, v){\nvar ipRet = checkWholeIPv4(k, v, ipValue);\nif (ipRet[0] == false)\n{\nvar errMsg = getMsgofWholeMACIPCheck(ipRet, value, ipValue, paraName);\n$(\".errorHint\",template).show();\n$(\".errorHint span\",template).text(errMsg);\nIPMACCheckResult.result = \"checkFail\";\nbreakFlag = 1;\nreturn false;\n}\nelse\n{\n$(\".errorHint\",template).hide();\n}\n});\n}\n}\nelse if (elementType == \"MAC\")\n{\nvar MACObj = $(\"[id^='\"+key+\"']\",template);\nMACObj.FillIPorMacDataCombination(\"sub_\"+key, \":\", 6);\nvar macValue = MACObj.val();\nif (value.rules != undefined)\n{\n$.each(value.rules, function(k, v){\nvar macRet = checkWholeMac(k, v, macValue);\nif (macRet[0] == false)\n{\nvar errMsg = getMsgofWholeMACIPCheck(macRet, value, macValue, paraName);\n$(\".errorHint\",template).show();\n$(\".errorHint span\",template).text(errMsg);\nIPMACCheckResult.result = \"checkFail\";\nbreakFlag = 1;\nreturn false;\n}\nelse\n{\n$(\".errorHint\",template).hide();\n}\n});\n}\n}\nelse\n{\nconsoleLog(\"ElementType +'\"+elementType+\"' is not supported now!\")\n}\n});\n};\njQuery.fn.setPromptCheckJSON = function(checkJSONTempObj, template){\nvar templateID = template.attr(\"id\");\nvar instIndex = templateID.match(/\\d+$/);\nvar suffix = \"\";\nif ( instIndex )\n{\nsuffix = \":\"+instIndex;\n}\nvar checkJSONInstObj = {\"groups\":{}, \"rules\":{}, \"messages\":{}};\nif ( checkJSONTempObj.groups != undefined )\n{\n$.each(checkJSONTempObj.groups, function(key, value) {\nvar valJSONStr = value;\nvar idArr = value.split(\" \");\nfor ( var i=0; i<idArr.length; i++ )\n{\nidArr[i] += suffix;\n}\nvalJSONStr = idArr.join(\" \");\nvar parameterJSON = eval(\"({'\"+key+suffix+\"':'\" + valJSONStr + \"'})\");\n$.extend(checkJSONInstObj.groups, parameterJSON);\n});\n}\nif ( checkJSONTempObj.rules != undefined )\n{\n$.each(checkJSONTempObj.rules, function(key, value) {\nvar parameterJSON = {};\nparameterJSON[key + suffix] = value;\n$.ext",
          "body_murmur": 2044468638,
          "body_sha256": "1dd9d8c1d82b33dfed32ce1e37a4129e175bd32e75db7c097100eaa4fffdfe84",
          "content_length": 149583,
          "favicon": {
            "md5_hash": "5e966bb5036dc2624a0187a91e59d3dd",
            "murmur_hash": 459900502,
            "path": "http://182.52.164.114:80/img/favicon.ico",
            "size": 1150
          },
          "headers": {
            "accept_ranges": [
              "bytes"
            ],
            "cache_control": [
              "no-cache,no-store"
            ],
            "content_length": [
              "149583"
            ],
            "content_security_policy": [
              "frame-ancestors 'self' data:"
            ],
            "content_type": [
              "text/html; charset=utf-8"
            ],
            "server": [
              "ZTE web server 1.0 ZTE corp 2015."
            ],
            "set_cookie": [
              "SID=6882cd229b73755fd18a796ed0150127e490790a1861cd0f4b7ded1f117cc37e; PATH=/; HttpOnly",
              "_TESTCOOKIESUPPORT=1; PATH=/; HttpOnly"
            ],
            "x_content_type_options": [
              "nosniff"
            ],
            "x_frame_options": [
              "SAMEORIGIN"
            ],
            "x_xss_protection": [
              "1; mode=block"
            ]
          },
          "protocol": "HTTP/1.1",
          "request": {
            "headers": {
              "accept": [
                "*/*"
              ],
              "user_agent": [
                "Mozilla/5.0 (compatible; Odin; https://docs.getodin.com/)"
              ]
            },
            "method": "GET",
            "url": {
              "host": "182.52.164.114",
              "path": "",
              "scheme": "http"
            }
          },
          "status_code": 200,
          "title": "H8102E"
        }
      },
      "url": "http://182.52.164.114/",
      "_meta": {
        "name": "",
        "desc": "",
        "category": ""
      },
      "last_updated_at": "2025-12-02T09:43:24.93Z"
    },
    {
      "port": 443,
      "protocol": "tcp",
      "name": "https",
      "version": "",
      "product": "ZTE web server 1.0 ZTE corp 2015.",
      "extra_info": "",
      "tunnel": "ssl",
      "modules": {
        "http": {
          "body": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"format-detection\" content=\"telephone=no,email=no,address=no\">\n<link rel=\"shortcut icon\" href=\"/img/favicon.ico\" />\n<title>&#72;&#56;&#49;&#48;&#50;&#69;</title>\n<style type=\"text/css\">\nhtml, body {\nmin-height:101%;\n}\nbody {\ntext-align: center;\nbackground: #F2F2F2;\noverflow-y: scroll;\n}\nbody, input, textarea, select, label, td, th {\nfont-size: 12px;\ncolor: #313131;\nfont-family: \"Microsoft YaHei\",Arial,SimSun,Verdana,Helvetica,Sans-Serif,Geneva;\n}\nbody, form, h1, h3, h4, p, ul, ol {\nmargin: 0;\n}\nul, ol {\npadding-left: 0;\nlist-style-type: none;\n}\na img {border: 0;}\ntable {\nborder-collapse: collapse;\nborder-spacing: 0;\n}\n#page_container {\nposition: relative;\nwidth: 960px;\nmargin: 0 auto;\npadding: 0 30px 15px 30px;\ntext-align: left;\nbackground: url(../img/site_holder.gif) repeat-y scroll center top;\n}\n#page_header {\npadding-bottom: 20px;\n}\n#banner {\nposition: relative;\nwidth: 100%;\nheight: 74px;\noverflow: hidden;\npadding-bottom: 5px;\n}\n#mainNavigator {\nwidth: 100%;\nheight: 38px;\ntext-align: center;\nmargin: 0 auto;\noverflow:hidden;\nbackground: #737373;\n}\n#page_content {\nposition: relative;\nmin-height: 510px;\nheight: auto !important;\nheight: 480px;\noverflow: visible;\ntext-align: center;\n}\n#page_footer {\nheight: 43px;\nline-height: 43px;\ntext-align: left;\nbackground-color: #F4F4F4;\nmargin-top: 15px;\npadding: 0 10px;\nborder-top: 1px solid #D7D7D7;\n}\n.logo {\nwidth: 110px;\nheight: 72px;\nfloat: left;\nbackground: url(../img/Logo_ZTE.png) no-repeat 5px 30px;\n}\n#banner_switchArea {\nwidth: 500px;\nheight: 25px;\nline-height: 25px;\nposition: absolute;\nbottom: 2px;\nright: 0px;\n}\n.AttentionMessage {\nleft:140px;\ntop:20px;\ncolor:red;\nfont-weight:bold;\nposition:absolute;\n}\n.timeArea {\nwidth: 300px;\nheight: 25px;\nline-height: 25px;\nposition: absolute;\nbottom: 2px;\nleft: 140px;\n}\n#banner_switchArea div {\nfloat: right;\ntext-align: center;\nmargin: 0 8px;\n}\n#banner_switchArea div.logUser{\npadding: 0px;\ntext-align: right;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\nmax-width: 180px;\n}\n.clickable {\ncursor: pointer;\n}\n#mainNavigator ul,li {\nmargin:0;\npadding:0;\nlist-style: none;\n}\n#mainNavigator {\nposition: relative;\n}\n#mainNavigator ul {\nposition: relative;\nleft: 50%;\nfloat: left;\n}\n#mainNavigator li {\nfloat: left;\nposition: relative;\nright: 50%;\nline-height: 34px;\n}\n#homeLi {\n}\n#mainNavigator a {\ndisplay: block;\nwidth: 100%;\nheight: 100%;\nbackground: url(../img/nv_middle.gif) repeat-x;\ntext-decoration: none;\n}\n#mainNavigator a:link,\n#mainNavigator a:visited {\ncolor: #FFFFFF;\n}\n#mainNavigator a.SelectMenuItem {\ncolor: #FFFFFF;\nbackground: url(../img/nv_s.gif) repeat-x;\n}\n#mn_first, #mn_last {\nheight: 100%;\nwidth: 5px;\nposition: absolute;\n}\n#mn_li {\nbackground: url(../img/nv_middle.gif) repeat-x;\nheight: 100%;\n}\n#mn_first {\nbackground: url(../img/nv_left.gif) no-repeat;\ntop: 0px;\nleft: 0px;\n}\n#mn_last {\nbackground: url(../img/nv_right.gif) no-repeat;\ntop: 0px;\nright: 0px;\n}\n#slogan {\nwidth: 200px;\nfloat: right;\nmargin: 0px;\ntext-align: right;\n}\n.caption2,\nh1 {\nborder-bottom: 1px dotted #313131;\nfont-size: 16px;\nfont-weight: normal;\npadding-bottom: 8px;\nmargin-bottom: 10px;\n}\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"file\"],\ntextarea,\nselect {\n-moz-box-sizing: border-box;\n-webkit-box-sizing: border-box;\nbox-sizing: border-box;\nheight: 26px;\n*height: 20px;\npadding: 2px;\nmargin: 2px 0;\nborder: 1px solid;\nborder-color: #AAAAAA #CCCCCC #CCCCCC #AAAAAA;\nborder-radius: 3px;\nbox-shadow: 0 1px 2px #CCCCCC inset;\n}\nselect {\n*height: 26px;\n}\ntextarea {\nmargin: 0;\nwidth: 100%;\n*width: 99%;\nresize: none;\nheight: 180px;\noverflow: auto;\n}\ninput[type=\"text\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"file\"]:focus,\ntextarea:focus {\nborder-color: #FF8040;\n-webkit-box-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\n-moz-box-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\nbox-shadow: 0 0 3px rgba(255, 128, 64, 0.7);\n}\nselect:focus {\nborder-color: #FF8040;\n}\ninput[type=\"text\"]:disabled,\ninput[type=\"password\"]:disabled,\ninput[type=\"file\"]:disabled,\ntextarea:disabled,\nselect:disabled {\ncolor: #898989;\nbackground-color: #ECE9D8;\n}\ninput[type=\"checkbox\"] {\nmargin-left: 0;\nmargin-top: 9px;\n}\ninput[type=\"radio\"] {\nmargin-left: 0;\n}\n.Button,\n.button,\n.longBtn ,\n.disableBtn,\n.disableLongBtn,\n.BrowseBtn {\ncursor: pointer;\nheight: 28px;\nborder: none;\npadding: 0 15px;\nmin-width: 100px;\nborder-radius: 3px;\n}\n.Button,\n.button,\n.longBtn  {\nbackground-color: #0099cc;\nbackground-image: -moz-linear-gradient(top , #34c3f9, #0099cc);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#34c3f9), to(#0099cc));\nbackground-image: -webkit-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: -o-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: -ms-linear-gradient(top, #34c3f9, #0099cc);\nbackground-image: linear-gradient(top, #34c3f9, #0099cc);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#34c3f9', endColorstr='#0099cc', GradientType=0);\ncolor: #fff;\n}\n.Button:hover,\n.button:hover,\n.longBtn:hover,\n.Button:focus,\n.button:focus,\n.longBtn:focus {\nfont-weight: bold;\nfont-style: oblique;\n}\n.disableBtn,\n.disableLongBtn,\n.BrowseBtn {\nborder: 1px solid #878889;\nbackground-color: #ddd;\nbackground-image: -moz-linear-gradient(top , #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#ebebeb), to(#cdcdcd),color-stop(45%,#ddd));\nbackground-image: -webkit-linear-gradient(top, #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -o-linear-gradient(top, #ebebeb 15%, #ddd 45%, #cdcdcd 85%);\nbackground-image: -ms-linear-gradient(top, #ebebeb, #cdcdcd);\nbackground-image: linear-gradient(top, #ebebeb, #cdcdcd);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb', endColorstr='#cdcdcd', GradientType=0);\n}\n.BrowseBtn\n{\ncolor: #000;\n}\n.disableBtn,\n.disableLongBtn {\ncursor: default;\ncolor: #898989;\n}\n.disableBtn:hover,\n.disableBtn:focus,\n.disableLongBtn:hover,\n.disableLongBtn:focus {\nfont-weight: normal;\nfont-style: normal;\n}\n.mac {\nwidth: 23px;\n}\n.ip {\nwidth: 32px;\n}\n.port {\nwidth: 67px;\n}\n.w37 {\nwidth: 37px;\n}\n.w40 {\nwidth: 40px;\n}\n.w45 {\nwidth: 45px;\n}\n.w50 {\nwidth: 50px;\n}\n.w60 {\nwidth: 60px;\n}\n.w70 {\nwidth: 70px;\n}\n.w75 {\nwidth: 75px;\n}\n.w80 {\nwidth: 80px;\n}\n.w100, .inputShort {\nwidth: 100px;\n}\n.w120 {\nwidth: 120px;\n}\n.w130 {\nwidth: 130px;\n}\n.w140 {\nwidth: 140px;\n}\n.w150, .inputNorm , .selectNorm {\nwidth: 150px;\n}\n.w160 {\nwidth: 160px;\n}\n.w165 {\nwidth: 165px;\n}\n.w170 {\nwidth: 170px;\n}\n.w175 {\nwidth: 175px;\n}\n.w180 {\nwidth: 180px;\n}\n.w200 {\nwidth: 200px;\n}\n.w210 {\nwidth: 210px;\n}\n.w217 {\nwidth: 217px;\n}\n.w220 {\nwidth: 220px;\n}\n.w230 {\nwidth: 230px;\n}\n.w250, .inputLong, .selectLong {\nwidth: 250px;\n}\n.w280 {\nwidth: 280px;\n}\n.w400 {\nwidth: 400px;\n}\n.emColor {\ncolor: #0099cc;\n}\n.bgColorRow {\nbackground-color: #F2F2F2;\n}\n.green {\ncolor:#385401;\nfont-weight: bold;\n}\n.red {\ncolor:#6c0101;\nfont-weight: bold;\n}\n.emFont {\nfont-weight: bold;\n}\n.ctrlFont,\n.link2More {\ntext-decoration: underline;\ncursor: pointer;\n}\n.ctrlFont {\ntext-decoration: none;\n}\n.sdRightPos{\nfloat:right;\nmargin-right:10px;\n}\n.disableFont {\ncursor: default;\ntext-decoration: none;\ncolor: #898989;\n}\n.readonlyInputBg {\nbackground-color: #ECE9D8;\n}\n.alignLeft {\ntext-align: left;\n}\n.alignRight {\ntext-align: right;\n}\n.alignCenter {\ntext-align: center;\n}\n.caption1 {\nfont-size: 1.1em;\nfont-weight: bold;\n}\n.caption3 {\nfont-size: 1em;\nfont-weight: bold;\n}\n.statusRow {\nwidth: 100%;\nheight: 24px;\n}\n.statusRow div {\nfloat: left;\nborder: 1px solid #BDBDBD;\npadding: 3px;\ntext-align: center;\noverflow: hidden;\n}\n.redFont {\ncolor: red;\n}\n.instCfgArea {\nmargin: 0;\npadding: 0 0 50px 0;\n}\n.buttongroup,\n.unfloatBtnGroup {\npadding: 25px 25px 20px 25px;\nheight: 30px;\n}\n.buttongroup input {\nfloat: right;\nmargin-left: 15px;\n}\n.unfloatBtnGroup input {\nmargin: 0;\n}\n.radioInput {\nwidth: auto;\nfloat: left;\n}\n.submitArea {\ntext-align: right;\npadding: 20px 0;\n}\n.externErrorHint,\n.succHint,\n.errorHint,\n.warnHint,\n.infoHint,\n.waitHint {\nmargin: 30px 0;\ntext-align: left;\npadding: 10px 10px 10px 70px;\n}\n.externErrorHint,\n.errorHint {\ncolor: #6c0101;\nbackground: #FFEBE4 url(../img/err_m.png) no-repeat 15px;\n}\n.succHint {\ncolor: #385401;\nbackground: #E7FFE4 url(../img/succ_m.png) no-repeat 15px;\n}\n.warnHint {\ncolor: #443500;\nbackground: #FFF9E4 url(../img/warn_m.png) no-repeat 15px;\n}\n.infoHint {\ncolor: #012f4c;\nbackground: #E4EFFF url(../img/info_m.png) no-repeat 15px;\n}\n.waitHint {\ncolor: #012f4c;\nbackground: #E7FFE4 url(../img/waiting_Small.gif) no-repeat 15px;\n}\n.staticInfoHint,\n.staticInfoHintReal {\ndisplay: block;\nbackground: url(../img/info_s.png) no-repeat 25px 1px;\nmargin-bottom: 20px;\ntext-align: left;\npadding: 0 25px;\n}\n.staticInfoHintReal {\nbackground: url(../img/info_s.png) no-repeat 0px 1px;\npadding: 0;\n}\n.staticInfoHint p,\n.staticInfoHintReal p {\nline-height: 18px;\ntext-align: justify;\ntext-indent: 2em;\nmargin-bottom: 5px;\n}\n.sceneTip {\npadding: 0 0 10px 0;\nmargin: 0;\ntext-align: justify;\n}\n.sceneTipLink {\npadding: 0;\n}\n.sceneTip a,\n.sceneTipLink a,\n.sceneTip_close a {\ncolor: #0099CC;\ntext-decoration: underline;\ncursor: pointer;\n}\n.sceneTip_close a {\ntext-decoration: none;\npadding-right: 5px;\n}\n.help_content,\n.sceneTip_container {\nbackground-color: #EFF8FF;\npadding: 5px 0;\n}\n.help_close,\n.sceneTip_close {\ntext-align: right;\n}\n.inlineTip {\nfloat: left;\npadding-left: 60px;\nline-height: 30px;\n}\n.black_overlay\n{\nposition: fixed;\n_position: absolute;\ntop: 0%;\nleft: 0%;\nwidth: 100%;\nheight: 100%;\nbackground-color: #A7A7A7;\nz-index: 100;\n-moz-opacity: 0.5;\n-khtml-opacity: 0.5;\nopacity: 0.5;\nfilter: alpha(opacity=50);\n}\n.white_content\n{\ndisplay: none;\nwidth: 365px;\nmin-height: 195px;\nheight: auto !important;\nheight: 195px;\nbackground:  url(../img/waiting.gif) no-repeat center center;\nz-index: 101;\noverflow: auto;\nposition: fixed;\n_position: absolute;\n}\n.white_content_Qos\n{\ndisplay: none;\nwidth: 775px;\nheight: auto !important;\nbackground: #FFFFFF;\nz-index: 101;\noverflow: auto;\nposition: fixed;\nleft: 25%;\ntop: 80px;\n}\n#confirmLayer {\nborder: 8px solid #7D7D7D;\ntext-align: left;\npadding: 0 10px;\nbackground: #FFFFFF;\n}\n#confirmMsg {\nmin-height: 32px;\nheight: auto !important;\nheight: 32px;\npadding: 25px 0;\nbackground: url(\"../img/info_m.png\") no-repeat 20px 50%;\n}\n#confirmMsg p {\npadding-left: 60px;\nfont-size: 1.2em;\nline-height: 24px;\n}\n#waitingImgArea {\nheight: 50px;\npadding-bottom: 25px;\nbackground:  url(../img/waiting_w.gif) no-repeat top center;\n}\n#confirmBtnArea {\nheight: 28px;\nborder-top: 1px dotted #313131;\npadding: 10px;\n}\n#confirmBtnArea input {\nfloat: right;\nmargin-left: 20px;\n}\n#dynamicTip {\nposition: absolute;\ndisplay: none;\nfont-size: 11px;\n}\n#dynamicTip div {\nfloat: left;\nheight: 34px;\npadding-top: 5px;\n}\n#dTip_l {\nwidth: 16px;\nbackground: url(../img/dTip_l.gif) no-repeat left top;\n}\n#dTip_m {\npadding: 2px 8px 0 5px;\nbackground: url(../img/dTip_m.gif) repeat-x;\n}\n#dTip_r {\nwidth: 6px;\nbackground: url(../img/dTip_r.gif) no-repeat left top;\n}\ndiv.errorLabelWraper{\nbackground: url(../img/fail_s.png) no-repeat 5px 6px;\ndisplay:inline-block;\npadding-left: 23px;\nline-height: 30px;\n}\nlabel.error{\ncolor: #FF0000;\n}\n.expandArrow {\nbackground: url(../img/expandArrow.png) no-repeat 0px 8px;\n}\n.collapseArrow {\nbackground: url(../img/collapseArrow.png) no-repeat 0px 8px;\n}\n.apStatusRow {\ncursor:pointer\n}\n.apConnectting {\nbackground: url(../img/waiting_Small.gif) no-repeat 0px 8px;\n}\n.qrCodeContainer {\nbottom: 160px;\nposition: fixed;\nright: 0;\nz-index: 1;\n}\n@media screen and (max-width: 1100px) {\n.qrCodeContainer {\ndisplay: none;\n}\n}\n.captchaImg {\nvertical-align: middle;\n}\n.bannerswtch {\ncolor: #0099cc;\n}\n.white_content_security\n{\ndisplay: none;\nwidth: 350px;\nmin-height: 195px;\nheight: auto !important;\nheight: 195px;\nz-index: 99;\noverflow: auto;\nposition: absolute;\n_position: absolute;\nbottom: 0px;\nright:  10px;\n}\n.sercurityNotice {\nborder: 8px solid #7D7D7D;\ntext-align: left;\npadding: 0 10px;\nbackground: #FFFFFF;\n}\n.sercurityNoticeMsg {\nmin-height: 32px;\nheight: auto !important;\nheight: 32px;\npadding: 25px 0;\nbackground: url(\"../img/info_m.png\") no-repeat 20px 50%;\n}\n.sercurityNoticeMsg li {\npadding-left: 60px;\nfont-size: 12px;\nline-height: 24px;\n}\n#commLeft {\nwidth: 197px;\nmargin: 0;\npadding:0;\nfloat: left;\nbackground-color: #EEEFF5;\n}\n#commRight {\nmin-height:415px;\nheight:auto !important;\nheight: 415px;\nmargin-left: 215px;\nmargin-right: 0;\npadding-left: 0px;\ntext-align: left;\n}\n#class2MenuItem {\nwidth: 100%;\nmargin: 0px;\npadding: 0px;\n}\n#class2MenuItem li {\ndisplay: block;\nmargin: -1px 0 0 0;\n}\n#class2MenuItem a {\ndisplay: block;\nheight: 30px;\nline-height: 30px;\ntext-align: left;\ntext-decoration: none;\ncolor: #000;\npadding: 0 20px;\nbackground-color: #fbfbfb;\nborder: 1px solid #d0d0d0;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\n}\n#class2MenuItem a.selectClass2Menu {\nbackground-color: #eee;\nbackground-image: -moz-linear-gradient(top , #f7f7f7, #e6e6e6);\nbackground-image: -webkit-gradient(linear,0% 0%, 0% 100%, from(#f7f7f7), to(#e6e6e6));\nbackground-image: -webkit-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: -o-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: -ms-linear-gradient(top, #f7f7f7, #e6e6e6);\nbackground-image: linear-gradient(top, #f7f7f7, #e6e6e6);\nfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7f7f7', endColorstr='#e6e6e6', GradientType=0);\ncolor: #0099CC;\n}\n#class3Menu {\nheight:30px;\nmargin-bottom: 30px;\nborder-bottom: 1px solid #0099CC;\n}\n#scrollLeftBtn,\n#scrollRightBtn {\nheight: 30px;\nwidth: 30px;\nfloat: left;\n}\n.EnableScrollBtn {\ncursor: pointer;\n}\n.scrollRightBtn {\nbackground: url(\"../img/collapse_B.png\") no-repeat scroll right center;\n}\n.scrollLeftBtn {\nbackground: url(\"../img/leftArrow.png\") no-repeat scroll left center;\n}\n.scrollRightBtnDisable {\nbackground: url(\"../img/rightArrowDisable.png\") no-repeat scroll right center;\ncursor: default;\n}\n.scrollLeftBtnDisable {\nbackground: url(\"../img/leftArrowDisable.png\") no-repeat scroll left center;\ncursor: default;\n}\n#scrollLeftBtn p,\n#scrollRightBtn p {\nheight: 30px;\n}\n#class3MenuMainContent {\nwidth:697px;\noverflow:hidden;\nfloat:left;\nmargin-top: -1px;\n}\n#class3MenuMainContent ul {\nwidth: 5000px;\n}\n#class3MenuMainContent li {\nfloat: left;\nlist-style: none outside none;\n}\n#class3MenuMainContent ul p {\ntext-decoration: none !important;\nheight: 30px;\nline-height: 30px;\npadding: 0 30px;\nfloat: left;\ncursor: pointer;\n}\n.AEleMenu3 {\ncolor: #313131;\nborder: 1px solid #D0D0D0;\nborder-bottom: 1px solid #0099CC;\nbackground-color: #F5F5F5;\n}\n.AEleMenu3Selected {\ncolor: #0099CC;\nborder: 1px solid #0099CC;\nborder-bottom: 1px solid #FFFFFF;\n}\n.HeadDIV,\n.fakeHeadDIV  {\npadding-top: 20px;\n}\n.pageIntroduce {\nfont-size: 18px;\n}\n.pIntroContent {\npadding: 8px 0;\n}\n.row,\n.rowBox,\n.colorTblRow,\n.segmentRow {\nclear: both;\n}\n.row,\n.rowBox,\n.colorTblRow,\n.outRow,\n.rowWithoutClear {\nmin-height: 30px;\nheight: auto !important;\nheight: 30px;\npadding: 0 25px;\n}\n.rowBox div {\ndisplay: inline-block;\n}\n.rowPaddingClear {\npadding: 0px;\n}\n.outRow  {\npadding: 0;\nmargin: 10px 0;\n}\n.selectRow {\nmin-height: 80px;\n}\n.segmentRow {\nheight: 15px;\nbackground-color: #F7F7F7;\n}\n.left,\n.right,\nlabel.cfgLabel {\nfloat: left;\nline-height: 30px;\n}\n.collapBarWithDataTrans,\n.collapsibleBar {\npadding-left: 25px;\ncursor: pointer;\nbackground: url(../img/collapse_B.png) no-repeat 0px 30%;\n}\n.collapsibleBarExp {\nbackground: url(../img/expand_B.png) no-repeat 0px 30%;\n}\n.colorTbl {\nborder: 1px solid #D0D0D0;\nline-height: 30px;\nmargin-top: 10px;\noverflow: auto;\n}\n.colorRow {\nbackground: #EFF8FF;\n}\n.colorTblRow,\n.textareaRow {\npadding: 0 25px;\n}\n.colorTblRow span {\ndisplay:inline-block;\n*display:inline;\n*zoom:1;\noverflow: hidden;\ntext-overflow: ellipsis;\nwhite-space: nowrap;\nmargin-right: 3px;\nvertical-align: middle;\n*vertical-align: top;\n}\n.titleRow {\nbackground: #C8E6FE;\n}\n.noDataHint {\nheight: 30px;\nline-height: 30px;\nborder: 1px solid #D0D0D0;\npadding: 0 5px 0 45px;\nbackground: #C8E6FE url(../img/info_s.png) no-repeat 23px 50%;\n}\n.formTblWrap {\nborder: 1px solid #D0D0D0;\nline-height: 30px;\nbackground: #F7F7F7;\nmargin: -1px 0;\nzoom: 1;\n}\n.formTbl {\npadding: 10px 0 0;\noverflow: auto;\n*overflow: hidden;\n}\n.formTblCtrlBar, .addInstBar {\nheight: 30px;\nline-height: 30px;\nborder: 1px solid #D0D0D0;\nbackground: #EEEEEE;\nposition: relative;\n}\n.formTblCtrlBar div {\ndisplay: inline;\n}\n.instName, .instNew {\npadding-left: 25px;\noutline: none;\ncolor: #313131;\nheight: 100%;\ncursor: pointer;\ndisplay: block;\nwidth: 200px;\n}\n.instName {\nbackground: url(../img/collapse.png) no-repeat 0 50%;\nwhite-space: nowrap;\ntext-overflow: ellipsis;\noverflow: hidden;\n}\n.instNew {\nbackground: url(../img/newInst.png) no-repeat 2px 50%;\n}\n.instNameExp {\nbackground: url(../img/expand.png) no-repeat 0 50%;\n}\n.noHand {\ncursor: default;\n}\n.instSwitch {\nposition: absolute;\nleft: 300px;\ntop: 3px;\n}\n.instDelete,\n.closePopLayer {\nposition: absolute;\nright: 20px;\ntop: 7px;\ncursor: pointer;\n}\n.closePopLayer {\ntop: 10px;\n}\n.clear {\nclear: both;\noverflow:hidden;\n}\n.ExceedWidthEllipsis {\nwhite-space: nowrap;\ntext-overflow: ellipsis;\noverflow: hidden;\n}\n.divQoSStatisticsCfg {\npadding: 20px;\ntext-align: left;\n}\n.picQoSTrans {\nbackground:  url(../img/uploading.gif) no-repeat;\n}\n.partDivision {\nborder-bottom: 1px dotted #313131;\npadding-bottom: 8px;\nmargin: 10px 0 30px;\n}\n.emptyRow10 {\nmargin: 10px;\n}\n.emptyRow20 {\nmargin: 20px;\n}\n.fontSize {\nfont-size:15px;\n}\n.DMSPathDiv {\nborder: 1px solid #0099CC;\nwidth: 710px;\n*width: 690px;\noverflow: auto;\nmargin: 10px auto;\npadding: 5px;\n}\n.hr0 {\nheight:1px;\nborder:none;\nborder-top:1px solid #D0D0D0;\n}\n.sideShortCut {\nposition: fixed;\nwidth:28px;\nheight:50px;\nbottom:105px;\nright:0px;\n_position:absolute;\n_right:auto;\ncursor:pointer;\nz-index: 1000;\n}\n.BackToTop {\ndisplay: block;\nheight: 50px;\nwidth: 28px;\ntext-decoration:none;\nbackground: url(../img/TOP.gif) no-repeat;\n}\n.pinspan {\ncolor: #313131;\nbackground: #E7FFE4;\n}\n.pin_remain {\ncolor: red;\nfont-size: 1.1em;\nfont-weight: bold;\n}\n._LuQUID_SelAccessDevice{\ncolor: #0099CC;\ncursor: pointer;\ntext-decoration: none;\n}\n._LuQUID_AccessDeviceList{\nmargin-left:150px;\nheight:auto !important;\nmin-height: 30px;\npadding: 0 5px 0 0;\nclear: both;\n}\n._LuQUID_HideAccessDevice{\ncolor: #0099CC;\ncursor: pointer;\ntext-decoration: none;\n}\n.AddIconControl{\ncursor: pointer;\nposition: relative;\ntop: 2px;\n}\n.DelIconControl{\ncursor: pointer;\nposition: relative;\ntop: 2px;\n}\nbody {\ntext-align: center;\noverflow-y: scroll;\n}\n#page_container {\nposition: relative;\nwidth: 960px;\nmargin: 0 auto;\ntop:35px;\npadding: 0 30px 15px 30px;\ntext-align: left;\nbackground: #FFFFFF;\n}\n#loginWrapper {\nwidth: 473px;\nmin-height: 300px;\nheight:auto !important;\nheight: 425px;\nmargin: 50px auto;\nposition: relative;\n}\n.logo {\nwidth: 345px;\nheight: 72px;\nfloat: left;\nbackground: url(../img/catLogo.png) no-repeat 5px 9px;\n}\n.catLogo {\nwidth: 345px;\nheight: 72px;\nfloat:left;\nbackground: url(../img/catLogo.png) no-repeat 5px 9px;\n}\n.zteLogo {\nwidth: 210px;\nheight: 72px;\nfloat:right;\nbackground: url(../img/Logo_ZTE.png) no-repeat 5px 9px;\n}\n.catInternet {\nposition: relative;\nwidth: 180px;\nheight: 140px;\nmargin-left: 400px;\ntop:50px;\n}\n.catText {\nwidth:600px;\nfont-size:14px;\nfont-weight:bold;\nmargin-left:160px;\ntext-align:center;\n}\n.timeArea {\nleft: 342px;\n}\n\n</style>\n<script type=\"text/javascript\" src=\"jquery/common_lib.js\"></script>\n<script type=\"text/javascript\">\nfunction StatusOfLRBtnOf3MenuHandle(nowScrollLocation)\n{\nif (nowScrollLocation == \"\")\n{\nnowScrollLocation = 0;\n}\nvar class3MenuContainerWidth = $(\"#class3MenuMainContent\").width();\nvar totalTabWidth = $(\"#_totalTabWidth\").val();\nif ( nowScrollLocation >= (totalTabWidth - class3MenuContainerWidth) )\n{\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtnDisable\");\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtn EnableScrollBtn\");\n}\nelse if ( nowScrollLocation == 0 )\n{\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtnDisable\");\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtn EnableScrollBtn\");\n}\nelse\n{\n$(\"#scrollRightBtn\").attr(\"class\",\"scrollRightBtn EnableScrollBtn\");\n$(\"#scrollLeftBtn\").attr(\"class\", \"scrollLeftBtn EnableScrollBtn\");\n}\n}\nfunction Menu3TabStyleHandle()\n{\nvar class3MenuContainer = $(\"#class3MenuMainContent\");\nvar ContainerWidth = $(\"#commRight\").width()- $(\"#scrollLeftBtn\").width()\n- $(\"#scrollRightBtn\").width();\nclass3MenuContainer.width(ContainerWidth);\nvar tabTotalWidth = 0;\nvar tab = $(\"li\",class3MenuContainer);\nfor (var i=0; i< tab.length; i++)\n{\nvar LiWidth = parseInt(tab[i].offsetWidth);\ntabTotalWidth = tabTotalWidth + LiWidth;\n}\n$(\"#_totalTabWidth\").val(tabTotalWidth);\nvar class3MenuUl = $(\"ul\",class3MenuContainer);\nif ( tabTotalWidth > ContainerWidth )\n{\nclass3MenuUl.css(\"width\", 5000);\n$(\"#scrollLeftBtn,#scrollRightBtn\").addClass(\"EnableScrollBtn\");\nvar nowScrollLocation = $(\"#_Menu3Location\").text();\nif ((tabTotalWidth-ContainerWidth) < nowScrollLocation)\n{\nnowScrollLocation = tabTotalWidth-ContainerWidth;\n}\nclass3MenuContainer.scrollLeft(nowScrollLocation);\nStatusOfLRBtnOf3MenuHandle(nowScrollLocation);\n}\nelse\n{\n$(\"#scrollLeftBtn\").removeClass(\"scrollLeftBtn\");\n$(\"#scrollRightBtn\").removeClass(\"scrollRightBtn\");\n}\n}\nfunction MenuItemClass(menuItemJSON) {\nthis.menuItemJSON = menuItemJSON;\n}\nMenuItemClass.prototype.findMenu = function (menuid) {\nvar menuItemJSON = this.menuItemJSON;\nvar menuItemId = menuItemJSON.id;\nif (menuItemId == menuid)\n{\nreturn menuItemJSON;\n}\nvar children = menuItemJSON.children;\nif ( !children )\n{\nreturn null;\n}\nfor (var i = 0; i < children.length; i++) {\nvar childItem = children[i];\nvar childID = childItem.id;\nif ( menuid == childID )\n{\nreturn childItem;\n}\nif ( childItem.children )\n{\nvar childObj = new MenuItemClass(childItem);\nvar targetMenu = childObj.findMenu(menuid);\nif (targetMenu)\n{\nreturn targetMenu;\n}\n}\n}\nreturn null\n}\nMenuItemClass.prototype.getLeftMostPageJSON = function () {\nvar menuItemJSON = this.menuItemJSON;\nvar menuItemId = menuItemJSON;\nvar children = menuItemJSON.children;\nif ( !children )\n{\nreturn menuItemJSON;\n}\nvar leftMostSon = children[0];\nvar menuObj = new MenuItemClass(leftMostSon);\nreturn menuObj.getLeftMostPageJSON();\n}\nfunction MenuTreeClass(menuTreeJSON)\n{\nthis.menuTreeJSON = menuTreeJSON\n}\nMenuTreeClass.prototype.findMenu = function(menuid) {\nvar menuTreeJSON = this.menuTreeJSON\nfor (var i = 0; i < menuTreeJSON.length; i++) {\nvar menu1table = menuTreeJSON[i];\nvar menu1Obj = new MenuItemClass(menu1table);\nvar targetMenu = menu1Obj.findMenu(menuid);\nif ( targetMenu )\n{\nreturn targetMenu;\n}\n}\nreturn null\n};\nfunction GetLeftMostPageID(menuid)\n{\nvar menuTable = menuTreeObj.findMenu(menuid);\nvar menuObj = new MenuItemClass(menuTable);\nvar pageJSON = menuObj.getLeftMostPageJSON();\nreturn pageJSON.id;\n}\nfunction Class3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId)\n{\nif ( selectThdId == \"\" )\n{\n$(\"#class3Menu\").css(\"display\", \"none\");\nreturn;\n}\nvar class2MenuNode = menuTreeObj.findMenu(selectMidId);\nvar class3MenuJSON = class2MenuNode.children;\nvar class3MenuContent = \"\";\nfor (var index in class3MenuJSON)\n{\nvar menu = class3MenuJSON[index]\nvar class3MenuID = menu.id\nvar class3MenuName = menu.name\nif ( class3MenuID == selectThdId )\n{\nAEleMenu3Class = \"AEleMenu3Selected\";\n}\nelse\n{\nAEleMenu3Class = \"AEleMenu3\";\n}\nclass3MenuContent = class3MenuContent\n+ \"<li><p class='\" + AEleMenu3Class + \"'\"\n+ \"MenuClass='3'\"\n+ \"id='\"+ class3MenuID + \"'\"\n+ \"MenuPage='\"+ GetLeftMostPageID(class3MenuID) +\"'\"\n+ \"href='#\" + class3MenuID + \"'>\"\n+ class3MenuName\n+ \"</p></li>\";\n}\n$(\"#class3MenuMainContent ul\").html(class3MenuContent);\n$(\"#class3MenuMainContent ul li p\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\nMenu3TabStyleHandle();\n$(window).resize(function(){\nMenu3TabStyleHandle();\n});\nvar t;\n$(\"#scrollRightBtn,#scrollLeftBtn\").mousedown(function(e){\nif ( ! $(this).hasClass(\"EnableScrollBtn\"))\n{\nconsoleLog(\"no scroll button!!\");\nreturn;\n}\nvar step = 10;\nif ( $(this).attr(\"id\") == \"scrollLeftBtn\" )\n{\nstep = 0-step;\n}\nif(1 == e.which)\n{\nt = window.setInterval(function() {\nvar scrollTarget = $(\"#class3MenuMainContent\");\nvar nowPosition = scrollTarget.scrollLeft();\nvar tabWidth = $(\"#_totalTabWidth\").val();\nvar srcollTotalLen = tabWidth - scrollTarget.width();\nif ( (srcollTotalLen - nowPosition) >= step )\n{\nscrollTarget.scrollLeft(nowPosition + step);\n}\nelse if ( (srcollTotalLen - nowPosition) >= 0 )\n{\nscrollTarget.scrollLeft(srcollTotalLen);\n}\nvar afterPosition = scrollTarget.scrollLeft();\nStatusOfLRBtnOf3MenuHandle(afterPosition);\n}, 20);\n}\n});\n$(\"#scrollRightBtn,#scrollLeftBtn\").mouseup(function(e){\nif(1 == e.which)\n{\nwindow.clearInterval(t);\n}\n});\n}\nfunction Class2MenuShow(selectPageID, selectSupId, selectMidId)\n{\nif ( selectMidId == \"\" )\n{\nreturn;\n}\nvar class1MenuNode = menuTreeObj.findMenu(selectSupId);\nvar class2MenuJSON = class1MenuNode.children;\nvar class2MenuContent = \"\";\nvar class2MenuClass = \"\";\nfor (var index in class2MenuJSON)\n{\nvar menu = class2MenuJSON[index]\nvar class2MenuID = menu.id\nvar class2MenuName = menu.name\nif ( class2MenuID == selectMidId )\n{\nclass2MenuClass = \"selectClass2Menu\";\n}\nelse\n{\nclass2MenuClass = \"\";\n}\nclass2MenuContent = class2MenuContent\n+ \"<li>\"\n+ \"<a class='\" + class2MenuClass + \"' \"\n+ \"href='javascript:void(0);' \"\n+ \"MenuClass='2' \"\n+ \"id='\"+ class2MenuID + \"' \"\n+ \"MenuPage='\"+ GetLeftMostPageID(class2MenuID)\n+ \"' title='\" + class2MenuName\n+ \"'>\"\n+ class2MenuName\n+ \"</a></li>\";\n}\n$(\"#class2MenuItem\").html(class2MenuContent);\n$(\"#class2MenuItem li a\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\n}\nfunction Class1MenuShow(selectPageID, selectSupId)\n{\nvar FirstMenuContent = \"<ul>\";\nvar SupClass = \"\";\nvar SupLiID = \"\";\nvar FirstOne = \"yes\";\nvar navBarWidth = $(\"#mainNavigator\").width();\nvar leftPadWidth = $(\"#mn_first\").width();\nvar rightPadWidth = $(\"#mn_last\").width();\nvar menuAreaWidth = navBarWidth - leftPadWidth - rightPadWidth;\nmenuAreaWidth -= 7;\nvar menuWidth = menuAreaWidth/(menuTreeJSON.length);\nmenuWidth = Math.floor(menuWidth);\nfor (var index in menuTreeJSON)\n{\nvar menu = menuTreeJSON[index]\nvar supId = menu.id\nvar supName = menu.name\nif ( supId == selectSupId )\n{\nSupClass = \"SelectMenuItem\";\n}\nelse\n{\nSupClass = \"MenuItem\";\n}\nif ( FirstOne == \"yes\" )\n{\nSupLiID = \"homeLi\";\nFirstOne = \"no\";\n}\nelse\n{\nSupLiID = \"\";\n}\nFirstMenuContent = FirstMenuContent\n+ \"<li id=\\\"\" + SupLiID + \"\\\">\"\n+ \"<a href=\\\"javascript:void(0);\\\" class=\\\"\" + SupClass\n+ \"\\\" \"\n+ \"style='width:\" + menuWidth + \"px' \"\n+ \"MenuClass='1' \"\n+ \"id='\"+ supId + \"' \"\n+ \"MenuPage='\"+ GetLeftMostPageID(supId) +\"'\"\n+ \">\"\n+ supName\n+ \"</a></li>\";\n}\nFirstMenuContent = FirstMenuContent + \"</ul>\";\n$(\"#mn_li\").html(FirstMenuContent);\n$(\"#mn_li li a\").click(function(){\nvar MenuOBJ = $(this);\nif ( !checkDisClickAttr(MenuOBJ) )\n{\nreturn;\n}\nAjaxQuery_ClassMenuClick(MenuOBJ);\n});\n}\nfunction checkDisClickAttr(obj)\n{\nif (\"off\" == obj.attr(\"EnableClick\"))\n{\nreturn false;\n}\nhandleDisClickAttr(\"off\");\nreturn true;\n}\nfunction handleDisClickAttr(ret)\n{\nvar selectSupId = $(\"#_NowSupIdInfo\",_MenuInfo).text();\nvar selectMidId = $(\"#_NowMidIdInfo\",_MenuInfo).text();\nvar selectThdId = $(\"#_NowThdIdInfo\",_MenuInfo).text();\nif(selectThdId)\n{\nvar objs = [$(\"#\" + selectSupId),$(\"#\" + selectMidId),$(\"#\" + selectThdId)];\n}\nelse\n{\nif(selectMidId)\n{\nvar objs = [$(\"#\" + selectSupId),$(\"#\" + selectMidId)];\n}\nelse\n{\nvar objs = [$(\"#\" + selectSupId)];\n}\n}\nfor (var i = 0; i < objs.length; i++)\n{\nif (objs[i].length > 0)\n{\nobjs[i].attr(\"EnableClick\", ret);\n}\n}\n}\nfunction AjaxPageGet(PageName, MenuClass, Area)\n{\nvar pageContainer = $(\"#commPageContainer\");\npageContainer.succfunction = function(html){\npageContainer.html(html);\nvar _MenuInfo = $(\"#_MenuInfo\");\nvar selectPageID = $(\"#_NextPageInfo\",_MenuInfo).text();\nvar selectSupId = $(\"#_NowSupIdInfo\",_MenuInfo).text();\nvar selectMidId = $(\"#_NowMidIdInfo\",_MenuInfo).text();\nvar selectThdId = $(\"#_NowThdIdInfo\",_MenuInfo).text();\nif ( \"mmHome\" == selectPageID )\n{\n$(document).scrollTop(0);\nreturn;\n}\nif (MenuClass == '1')\n{\nClass1MenuShow(selectPageID, selectSupId);\n}\nClass2MenuShow(selectPageID, selectSupId, selectMidId);\nClass3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId);\n$(document).scrollTop(0);\nhandleDisClickAttr(\"on\");\nvar targetAreaId = Area;\nif (targetAreaId){\nsetTimeout(function(){\nvar thisPage = $(\".instCfgArea\");\nvar areas = $(\"h1\", thisPage);\nvar targetArea = $(\"#\"+targetAreaId, thisPage);\nareas.each(function(){\nif ($(this).hasClass(\"collapsibleBarExp\")) {\n$(this).click();\n}\n});\nif (targetArea.length > 0){\ntargetArea.click();\n$(document).scrollTop(targetArea.offset().top);\n}\n}\n,500);\n}\n};\npageContainer.errorfunction = function(){\nconsoleLog(\"page get fail\");\nshowWaitTip(false);\npageContainer.html(\"Page request failed, please try again!\");\nhandleDisClickAttr(\"on\");\n};\nshowWaitTip(true);\npageContainer.dataTransfer( PageName, \"GET\", pageContainer.succfunction,\npageContainer.errorfunction, false,\nundefined, 'html'\n);\n}\nfunction AjaxQuery_ClassMenuClick(MenuOBJ)\n{\nvar MenuClass = MenuOBJ.attr(\"MenuClass\");\nvar page = MenuOBJ.attr(\"MenuPage\");\nvar scrollTarget = $(\"#class3MenuMainContent\");\nvar Menu3Location = scrollTarget.scrollLeft();\nvar pageFile = \"/?_type=menuView&_tag=\"\n+ page + \"&Menu3Location=0\";\nif ( MenuClass == 3 )\n{\npageFile = \"/?_type=menuView&_tag=\"\n+ page + \"&Menu3Location=\" + Menu3Location;\n}\nAjaxPageGet(pageFile, MenuClass);\n}\nfunction openLink(pageurl, areaId)\n{\nvar PageName = \"/?_type=menuView&_tag=\" + pageurl;\nAjaxPageGet(PageName, 1, areaId);\n}\nfunction MenuShow(Menuclass, selectPageID, selectSupId, selectMidId, selectThdId)\n{\nif (Menuclass == \"ClassAll\")\n{\nClass1MenuShow(selectPageID, selectSupId);\nClass2MenuShow(selectPageID, selectSupId, selectMidId);\nClass3MenuShow(selectPageID, selectSupId, selectMidId, selectThdId);\n}\nelse if (Menuclass == \"ClassOne\")\n{\nClass1MenuShow(selectPageID, selectSupId);\n}\nelse if (Menuclass == \"ClassTwo\")\n{\nClass2MenuShow(selectPageID, selectSupId);\n}\nelse\n{\nconsoleLog(\"[menu_api.lp][MenuShow]    Menuclass(\"+ Menuclass + \"filling is not right!!\");\n}\n}\nfunction FakeClass1MenuShow()\n{\nvar FirstMenuContent = \"<ul>\";\nvar SupClass = \"MenuItem\";\nvar SupLiID = \"\";\nvar FirstOne = \"yes\";\nvar navBarWidth = $(\"#mainNavigator\").width();\nvar leftPadWidth = $(\"#mn_first\").width();\nvar rightPadWidth = $(\"#mn_last\").width();\nvar menuAreaWidth = navBarWidth - leftPadWidth - rightPadWidth;\nmenuAreaWidth -= 7;\nvar menuWidth = menuAreaWidth/(menuTreeJSON.length);\nmenuWidth = Math.floor(menuWidth);\nfor (var index in menuTreeJSON)\n{\nvar menu = menuTreeJSON[index]\nvar supId = menu.id\nvar supName = menu.name\nif ( FirstOne == \"yes\" )\n{\nSupLiID = \"homeLi\";\nFirstOne = \"no\";\n}\nelse\n{\nSupLiID = \"\";\n}\nFirstMenuContent = FirstMenuContent\n+ \"<li id=\\\"\" + SupLiID + \"\\\">\"\n+ \"<a href=\\\"javascript:void(0);\\\" class=\\\"\" + SupClass\n+ \"\\\" \"\n+ \"style='width:\" + menuWidth + \"px;\"\n+ \"color:#BFBDBE; cursor:default;'\"\n+ \" hidefocus=\\\"true\\\" onclick=\\\" \\\">\"\n+ supName\n+ \"</a></li>\";\n}\nFirstMenuContent = FirstMenuContent + \"</ul>\";\n$(\"#mn_li\").html(FirstMenuContent);\n}\nfunction showWaitTip(show, TipMsg, StopTag)\n{\nvar TipMsgTmp = TipMsg;\nif( show )\n{\n$(\"#blackMask,#tipLayer,#confirmBtnArea\").css(\"display\", \"block\");\nif (TipMsgTmp == undefined || TipMsgTmp == \"\")\n{\n$(\"#waitingImgArea\").css(\"display\", \"none\");\nif(true==StopTag)\n{\n$(\"#confirmStop\").css(\"display\", \"block\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"none\");\n}\nelse\n{\n$(\"#confirmStop\").css(\"display\", \"none\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"block\");\n}\n}\nelse\n{\n$(\"#confirmLayer, #waitingImgArea\").css(\"display\", \"block\");\n$(\"#confirmMsg p\").text(TipMsgTmp);\nif(true==StopTag)\n{\n$(\"#confirmStop\").css(\"display\", \"block\");\n$(\"#confirmCancel,#confirmOK\").css(\"display\", \"none\");\n}\nelse\n{\n$(\"#confirmCancel,#confirmOK,#confirmStop\").css(\"display\", \"none\");\n}\n}\n$('#confirmLayer :button:visible:first').focus();\n$(\"#page_container\").bind(\"keyup\", function(event){\nif (event.which == 9) {\n$('#confirmLayer :button:visible:first').focus();\n}\n});\nreposition_box(\"tipLayer\");\n}\nelse\n{\n$(\"#blackMask, #tipLayer, #confirmLayer\").css(\"display\", \"none\");\n$(\"#page_container\").unbind(\"keyup\");\n}\n}\nfunction IniConfirm(msg)\n{\nshowWaitTip(true);\nvar confirmLayerOBJ = $(\"#confirmLayer\");\nconfirmLayerOBJ.css(\"display\", \"block\");\n$(\"#confirmMsg p\",confirmLayerOBJ).text(msg);\n$(\"#confirmCancel\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmOK\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmStop\",confirmLayerOBJ).unbind( \"click\" );\n$(\"#confirmCancel\",confirmLayerOBJ).bind(\"click\", function(event){\nshowWaitTip(false);\n});\n$('#confirmLayer :button:visible:first').focus();\nreturn confirmLayerOBJ;\n}\nfunction getStyle(obj,attr)\n{\nif (obj.currentStyle)\n{\nreturn obj.currentStyle[attr];\n}\nelse\n{\nreturn document.defaultView.getComputedStyle(obj,null)[attr];\n}\n}\nfunction reposition_box(divId)\n{\nvar box=document.getElementById(divId);\nif (null!=box)\n{\nvar boxObj = $(\"#\"+divId);\nvar winH = $(window).height();\nvar winW = $(window).width();\nvar divH = boxObj.height();\nvar divW = boxObj.width();\nvar h = (winH-divH)/2;\nh = (h > 0) ? h : 5;\nvar w = (winW-divW)/2;\nw = (w > 0) ? w : 5;\nboxObj.css({top:h, left:w});\nif ( divH > winH || divW > winW)\n{\nboxObj.css(\"position\", \"absolute\");\n}\nelse\n{\nboxObj.css(\"position\", \"fixed\");\n}\n}\n}\n$.validator.setDefaults({\nerrorPlacement: function (error, element) {\nvar tipHTML = \"<div class=\\\"errorLabelWraper\\\"></div>\";\nvar tipObj = $(tipHTML);\nerror.appendTo(tipObj);\nvar rowObj = element.closest(\".row\");\nif ( rowObj.length == 0 )\n{\nconsoleLog(\"element id=[\"+element.attr(\"id\")+\"] is not in row div.\");\nreturn ;\n}\nvar rowWidth = rowObj.width();\nvar usedWidth = 0;\nvar rightObj = undefined;\nrowObj.children().each(function(){\nif (!($(this).hasClass(\"_LuQUID_AccessDeviceList\")||\n$(this).hasClass(\"clear\"))){\nusedWidth += $(this).outerWidth(true);\n}\nif ($(this).hasClass(\"right\")){\nrightObj = $(this);\n}\n});\nvar errWidth = rowWidth - usedWidth;\ntipObj.width(errWidth-5-23);\nif (rightObj != undefined)\n{\ntipObj.insertAfter(rightObj);\n}\nelse\n{\ntipObj.appendTo(rowObj);\n}\n}\n});\njQuery.extend(jQuery.validator.messages, {\nrequired: \"This field is required. \",\nremote: \"Please fix this field. \",\nemail: \"Please enter a valid email address. \",\nurl: \"Please enter a valid URL. \",\ndate: \"Please enter a valid date. \",\ndateISO: \"Please enter a valid date (ISO). \",\nnumber: \"Please enter a valid number. \",\ndigits: \"Please enter an integer. \",\ncreditcard: \"Please enter a valid credit card number. \",\nequalTo: \"Please enter the same value again. \",\nmaxlength: jQuery.validator.format(\"Please enter no more than {0} characters. \"),\nminlength: jQuery.validator.format(\"Please enter at least {0} characters. \"),\nrangelength: jQuery.validator.format(\"Please enter a value with {0} ~ {1} characters. \"),\nrange: jQuery.validator.format(\"Please enter a value between {0} and {1}. \"),\nmax: jQuery.validator.format(\"Please enter a value less than or equal to {0}. \"),\nmin: jQuery.validator.format(\"Please enter a value greater than or equal to {0}. \")\n});\nfunction AsciiPasswordCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch == 9)\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction AsciiCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch<32 || ch>126)\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction AsciiCheckWithLen(Key, LenLimit)\n{\nif (Key.length != LenLimit)\n{\nreturn false;\n}\nif ( false == AsciiCheck(Key) )\n{\nreturn false;\n}\nreturn true;\n}\nfunction HexCheck(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif (!((ch >= 65 && ch <= 70)\n||(ch >= 97 && ch <= 102)\n||(ch >= 48 && ch <= 57)))\n{\nreturn false;\n}\n}\nreturn true;\n}\nfunction HexCheckWithLen(Key, LenLimit)\n{\nif (Key.length != LenLimit)\n{\nreturn false;\n}\nif ( false == HexCheck(Key) )\n{\nreturn false;\n}\nreturn true;\n}\nfunction checkIPv4Addr(ipaddr)\n{\nvar re = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\nif(re.test(ipaddr) == true)\n{\nvar parts = ipaddr.split(\".\");\nfor(var i=0; i<parts.length; i++)\n{\nif(parts[i].indexOf(\"0\") == 0 && parts[i].length > 1)\nreturn false;\nif (parseInt((parts[i]),10) > 255 || parseInt((parts[i]),10) < 0)\n{\nreturn false;\n}\n}\nreturn true;\n}\nreturn false;\n}\njQuery.validator.addMethod(\n\"IPv4Addr\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif(checkIPv4Addr(value) == true)\n{\nreturn true;\n}\nreturn false;\n},\n\"Please enter a valid IPv4 Address. \"\n);\nfunction checkIPv6Addr(ipaddr)\n{\nif (ipaddr.match(\"[^0-9a-fA-F:.]\") != null)\nreturn false;\naddrParts = ipaddr.split(':');\nDoublecolon = ipaddr.split('::');\nipv4Parts = ipaddr.split('.');\nif(addrParts.length<3||addrParts.length>8)\n{\nreturn false;\n}\nelse if(Doublecolon.length==1&&ipv4Parts.length==1&&addrParts.length!=8)\n{\nreturn false;\n}\nelse if(Doublecolon.length==1&&ipv4Parts.length>1&&addrParts.length!=6)\n{\nreturn false;\n}\nelse if(Doublecolon.length>1&&ipv4Parts.length>1&&addrParts.length>6)\n{\nreturn false;\n}\nelse if(Doublecolon.length>2||ipaddr.split(':::').length>1)\n{\nreturn false;\n}\nelse\n{\nif(addrParts[0]==\"\"&&addrParts[1]!=\"\")\n{\nreturn false;\n}\nfor(var i=0;i<addrParts.length;i++)\n{\nif(i==addrParts.length-1&&addrParts[i]==\"\"&&addrParts[i-1]!=\"\")\n{\nreturn false;\n}\nif(addrParts[i].length>4 && addrParts[i].split('.').length<2)\n{\nreturn false;\n}\n}\n}\nvar pos = ipaddr.lastIndexOf(\":\");\nvar ipv4Parts = ipaddr.split('.');\nif(ipv4Parts.length>1)\n{\nvar ipv4=ipaddr.substring(pos+1,ipaddr.length);\nif( false == checkIPv4Addr(ipv4) )\n{\nreturn false;\n}\n}\nreturn true;\n}\njQuery.validator.addMethod(\n\"IPv6Addr\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn checkIPv6Addr(value);\n},\n\"Please enter a valid IPv6 Address. \"\n);\njQuery.validator.addMethod(\n\"DomainName\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nvar firstChar = value.substr(0,1);\nvar lastChar = value.substr(len-1,1);\nvar maxlen = 64;\nif(len>64||len<1)\n{\nreturn false;\n}\nif (value.match(\"[^0-9a-zA-Z.-]\") != null)\n{\nreturn false;\n}\nif(firstChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nif(lastChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nvar pos = value.lastIndexOf(\".\");\nif(pos == -1)\n{\nvar str = value;\nvar templen = value.length;\nfor(var i=0;i<len;i++)\n{\nvar tempvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tempvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\nelse\n{\nvar str = value.substr(pos+1);\nvar tmplen = value.length - (pos + 1);\nfor(var i=0;i<tmplen;i++)\n{\nvar tmpvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tmpvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\n},\n\"Please enter a valid Domain Name. \"\n);\njQuery.validator.addMethod(\n\"HostName\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nvar firstChar = value.substr(0,1);\nvar lastChar = value.substr(len-1,1);\nif (value.match(\"[^0-9a-zA-Z.-]\") != null)\n{\nreturn false;\n}\nif(firstChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nif(lastChar.match(\"[^0-9a-zA-Z]\") != null)\n{\nreturn false;\n}\nvar pos = value.lastIndexOf(\".\");\nif(pos == -1)\n{\nvar str = value;\nvar templen = value.length;\nfor(var i=0;i<len;i++)\n{\nvar tempvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tempvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\nelse\n{\nvar str = value.substr(pos+1);\nvar tmplen = value.length - (pos + 1);\nfor(var i=0;i<tmplen;i++)\n{\nvar tmpvalue = str.substring(i,i+1);\nif(isNaN(parseInt(tmpvalue)))\n{\nreturn true;\n}\n}\nreturn false;\n}\n},\n\"Please enter a valid Host Name. \"\n);\njQuery.validator.addMethod(\n\"url\",\nfunction(value, element, params) {\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar len = value.length;\nif( (len < 1) || (len > 256) )\n{\nreturn false;\n}\nif (value.match(\"[^0-9a-zA-Z.:;,!@%#?_/&=+*'$()\\\\[\\\\]-]\") != null)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter a valid URL. \"\n);\njQuery.validator.addMethod(\n\"PasswordASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nif ( false == AsciiPasswordCheck(value) )\n{\nparams = 0;\nreturn false;\n}\nif ( false == AsciiCheck(value) )\n{\nparams = 1;\nreturn false;\n}\nreturn true;\n},\nfunction(param, element)\n{\nvar error = [\"The format of password is wrong. Please clear it and re-enter. \", \"Please enter only ASCII characters. \"];\nvar value = $(element).val();\nvar ret = 0;\nif ( false == AsciiPasswordCheck(value) )\n{\nret = 0;\n}\nelse if( false == AsciiCheck(value) )\n{\nret = 1;\n}\nelse\n{\n}\nif ( ret <= error.length )\n{\nreturn error[ret];\n}\n}\n);\njQuery.validator.addMethod(\n\"PasswordRangeLength\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nif ( value.length >= params[0] && value.length <= params[1] )\n{\nreturn true;\n}\nreturn false;\n},\njQuery.validator.format(\"Please enter a value with {0} ~ {1} characters. \")\n);\njQuery.validator.addMethod(\n\"ASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( false == AsciiCheck(value) )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\nfunction AsciiCheckContainSpace(Key)\n{\nfor (var j = 0 ;j < Key.length; j++)\n{\nvar ch = Key.charCodeAt(j);\nif(ch<32 || ch>126)\n{\nreturn false;\n}\n}\nreturn true;\n}\njQuery.validator.addMethod(\n\"ASCII_CONTAINSPACE\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( false == AsciiCheckContainSpace(value) )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\njQuery.validator.addMethod(\n\"DigitASCII\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar reg = /^[0-9]+$/;\nreturn reg.test(value);\n},\n\"Please enter a value composed of 0 ~ 9.\"\n);\njQuery.validator.addMethod(\n\"utf8\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn true;\n},\n\"Please enter only ASCII characters. \"\n);\njQuery.validator.addMethod(\n\"WEPKey128Bit\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 13;\nvar HexLenLimit = 26;\nif ( AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 13 ASCII characters or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WEPAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nvar AsciiLenLimit13 = 13;\nvar HexLenLimit26 =26;\nif (AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false\n&& AsciiCheckWithLen(value, AsciiLenLimit13) == false\n&& HexCheckWithLen(value, HexLenLimit26) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 or 13 ASCII characters, or enter 10 or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"PasswordWEPAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value == \"\t\t\t\t\t\t\")\n{\nreturn true;\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nvar AsciiLenLimit13 = 13;\nvar HexLenLimit26 =26;\nif (AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false\n&& AsciiCheckWithLen(value, AsciiLenLimit13) == false\n&& HexCheckWithLen(value, HexLenLimit26) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 or 13 ASCII characters, or enter 10 or 26 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WEPKey64Bit\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar AsciiLenLimit = 5;\nvar HexLenLimit = 10;\nif ( AsciiCheckWithLen(value, AsciiLenLimit) == false\n&& HexCheckWithLen(value, HexLenLimit) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter 5 ASCII characters or 10 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"WPAAsciiOrHexLen\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (!(value.length >= 8 && value.length <= 63)\n&& HexCheckWithLen(value, 64) == false)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter a value with 8 ~ 63 characters, or enter 64 hexadecimal digits. \"\n);\njQuery.validator.addMethod(\n\"HEX\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif ( HexCheck(value) == false )\n{\nreturn false;\n}\nreturn true;\n},\n\"Please enter only hexadecimal characters. \"\n);\njQuery.validator.addMethod(\n\"fixedlength\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value.length != param)\n{\nreturn false;\n}\nreturn true;\n},\njQuery.validator.format(\"Please enter {0} characters. \")\n);\njQuery.validator.addMethod(\n\"fixedValue\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (value != param)\n{\nreturn false;\n}\nreturn true;\n},\njQuery.validator.format(\"The only allowed value is {0}.\")\n);\nfunction hexCompare(hexNum, hexRefer)\n{\nvar num = parseInt(hexNum, 16);\nvar refer = parseInt(hexRefer, 16);\nif (num < refer)\n{\nreturn -1;\n}\nelse if (num > refer)\n{\nreturn 1;\n}\nelse\n{\nreturn 0;\n}\n}\njQuery.validator.addMethod(\n\"hexRange\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (typeof(params[0]) == \"object\")\n{\nfor (var i=0; i<params.length; i++)\n{\nvar range = params[i];\nif (typeof(range) == \"object\")\n{\nif (hexCompare(value, range[0]) != -1 && hexCompare(value, range[1]) != 1 )\n{\nreturn true;\n}\n}\n}\n}\nelse\n{\nif (hexCompare(value, params[0]) != -1 && hexCompare(value, params[1]) != 1 )\n{\nreturn true;\n}\n}\nreturn false;\n},\nfunction(params, element){\nvar rangesStr = \"\";\nif (typeof(params[0]) == \"object\")\n{\nvar rangesLen = params.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = params[i];\nif (hexCompare(range[0], range[1]) != 0)\n{\nrangesStr += range[0] + \"~\" + range[1];\n}\nelse\n{\nrangesStr += range[0];\n}\nif ( i < rangesLen-1 )\n{\nrangesStr += \", \";\n}\n}\n}\nelse\n{\nrangesStr = params[0] + \"~\" + params[1];\n}\nreturn $.validator.format(\"Please enter a hexadecimal value in the ranges of {0}. \", rangesStr);\n}\n);\njQuery.validator.addMethod(\n\"ranges\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar rangesLen = param.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = param[i];\nif ( typeof range === 'number' )\n{\nif ( value == range )\n{\nreturn true;\n}\n}\nelse\n{\nif ( value >= range[0] && value <= range[1] )\n{\nreturn true;\n}\n}\n}\nreturn false;\n},\nfunction(param, element){\nvar rangesStr = \"\";\nvar rangesLen = param.length;\nfor (var i=0; i<rangesLen; i++)\n{\nvar range = param[i];\nif ( typeof range === 'number' )\n{\nrangesStr += range;\n}\nelse\n{\nrangesStr += range[0] + \"~\" + range[1];\n}\nif ( i < rangesLen-1 )\n{\nrangesStr += \",\";\n}\n}\nreturn $.validator.format(\"Please enter a value in the ranges of {0}. \", rangesStr);\n}\n);\njQuery.validator.addMethod(\n\"integer\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nreturn /^-?\\d+$/.test(value);\n},\n\"Please enter an integer. \"\n);\njQuery.validator.addMethod(\n\"even\",\nfunction(value, element, params)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar mod = (parseInt(value))%2;\nif ( mod != 0)\n{\nreturn false;\n}\nreturn true;\n},\n\"Please input an even number. \"\n);\njQuery.validator.addMethod(\n\"concurrence\",\nfunction(value, element, param)\n{\nif (1 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[0]);\nif (obj.is(\":hidden\"))\n{\nreturn true;\n}\nif (\"\" == value && \"\" == obj.val())\n{\nreturn true;\n}\nif (\"\" != value && \"\" != obj.val())\n{\nreturn true;\n}\nreturn false;\n},\n\"Please input valid prefix. \"\n);\nfunction get_element_obj(obj, id)\n{\nvar instTplt = obj.closest(\"[id^=template_]\");\nvar elementID = obj.attr(\"id\");\nvar arr = elementID.split(':');\nvar strId = id;\nif (arr.length > 1)\n{\nvar exNum = arr[arr.length-1];\nstrId = id + \":\" + exNum;\n}\nreturn $(\"[id^='\"+strId+\"']\", instTplt);\n};\nfunction test_greatThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value greater than \\\"{0}\\\". \" : \"Please enter a value greater than the former. \" ,\n\"2\" : param[2].separate ? \"Please enter a value not less than \\\"{0}\\\". \" : \"Please enter a value not less than the former. \" ,\n\"3\" : param[2].separate ? \"Please ensure the difference with the latter not greater than {1}. \" : \"Please ensure the difference with the former not greater than {1}. \"\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) >= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) > Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(value) - Number(tmpvalue) <= Number(param[2].discrepantMode);\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nobj.parent().next().children().hide();\nreturn true;\n}\n};\nfunction test_lessThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value less than \\\"{0}\\\". \" : \"Please enter a value less than the latter. \" ,\n\"2\" : param[2].separate ? \"Please enter a value not greater than \\\"{0}\\\". \" : \"Please enter a value not greater than the latter. \" ,\n\"3\" : param[2].separate ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \"\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) <= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) < Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(tmpvalue) - Number(value) <= Number(param[2].discrepantMode)\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nobj.parent().next().children().hide();\nreturn true;\n}\n};\njQuery.validator.addMethod(\n\"extremumRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length)\n{\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nif (obj.is(\":hidden\") || \"\" == obj.val())\n{\nreturn true;\n}\nvar selectMode = {\n\"greatThan\" : test_greatThan,\n\"lessThan\" : test_lessThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\nfunction(param,element)\n{\nvar selectMode = {\n\"greatThan\" : test_greatThan,\n\"lessThan\" : test_lessThan\n};\nreturn selectMode[param[0]](\"\", \"\", param, \"errstring\");\n}\n);\nfunction range_greatThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value greater than \\\"{0}\\\". \" : ( param[2].objPosition ==\"first\" ? \"Please enter a value greater than the former. \" : \"Please enter a value greater than the latter.\" ),\n\"2\" : param[2].separate ? \"Please enter a value not less than \\\"{0}\\\". \" : ( param[2].objPosition ==\"first\" ? \"Please enter a value not less than the former. \" : \"Please enter a value not less than the latter. \" ) ,\n\"3\" : param[2].separate ? \"Please ensure the difference with \\\"{0}\\\" not greater than {1}. \" : ( param[2].objPosition ==\"first\" ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \")\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nobj.parent().next().children().hide();\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) >= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) > Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(value) - Number(tmpvalue) <= Number(param[2].discrepantMode);\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nreturn true;\n}\n};\nfunction range_lessThan(obj, value, param, type)\n{\nif (\"errstring\" == type )\n{\nvar tempstring = {\n\"1\" : param[2].separate ? \"Please enter a value less than \\\"{0}\\\". \" : ( param[2].objPosition == \"first\" ? \"Please enter a value less than the former. \" : \"Please enter a value less than the latter. \" ),\n\"2\" : param[2].separate ? \"Please enter a value not greater than \\\"{0}\\\". \" : ( param[2].objPosition == \"first\" ? \"Please enter a value not greater than the former.\" : \"Please enter a value not greater than the latter. \" ),\n\"3\" : param[2].separate ? \"Please ensure the difference with \\\"{0}\\\" not greater than {1}. \" : ( param[2].objPosition == \"first\" ? \"Please ensure the difference with the former not greater than {1}. \" : \"Please ensure the difference with the latter not greater than {1}. \" )\n};\nreturn $.validator.format(tempstring[param[2].ret], param[2].idtext, param[2].discrepantMode);\n}\nelse\n{\nobj.parent().next().children().hide();\nvar tmpvalue = obj.val();\nvar ret = true;\nif (param[2].equal)\n{\nret = Number(value) <= Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"2\";\nreturn false;\n}\n}\nelse\n{\nret = Number(value) < Number(tmpvalue);\nif (!ret)\n{\nparam[2].ret = \"1\";\nreturn false;\n}\n}\nif (param[2].discrepantMode)\n{\nret = Number(tmpvalue) - Number(value) <= Number(param[2].discrepantMode)\nif (!ret)\n{\nparam[2].ret = \"3\";\nreturn false;\n}\n}\nreturn true;\n}\n};\njQuery.validator.addMethod(\n\"compareRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length)\n{\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length)\n{\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nvar selectMode = {\n\"greatThan\" : range_greatThan,\n\"lessThan\" : range_lessThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\nfunction(param,element)\n{\nvar selectMode = {\n\"greatThan\" : range_greatThan,\n\"lessThan\" : range_lessThan\n};\nreturn selectMode[param[0]](\"\", \"\", param, \"errstring\");\n}\n);\njQuery.validator.addMethod(\n\"banValue\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar paramLen = param.length;\nfor (var i = 0;i < paramLen;i++)\n{\nvar range = param[i];\nif (typeof range === 'string' )\n{\nif (value == range)\n{\nreturn false;\n}\n}\nelse\n{\nif (value >= range[0] && value <= range[1])\n{\nreturn false;\n}\n}\n}\nreturn true;\n},\nfunction(param, element){\nvar rangesStr = \"\";\nvar paramLen = param.length;\nfor (var i=0; i<paramLen; i++)\n{\nvar paraVal = param[i];\nif ( \"object\" === typeof paraVal )\n{\nrangesStr += paraVal[0] + \"~\" + paraVal[1];\n}\nelse\n{\nrangesStr += paraVal;\n}\nif ( i < paramLen-1 )\n{\nrangesStr += \", \";\n}\n}\nif (paramLen > 1)\n{\nreturn $.validator.format(\"Please ensure the input NOT in the ranges of \\\"{0}\\\". \", rangesStr);\n}\nelse\n{\nreturn $.validator.format(\"Please ensure the input NOT equal to \\\"{0}\\\". \", rangesStr);\n}\n}\n);\njQuery.validator.addClassRules({\nipSepCheck: {\n\"required\": true,\n\"integer\": true,\n\"range\":[0,255]\n},\nmacSepCheck:{\n\"required\": true,\n\"HEX\": true,\n\"fixedlength\": 2\n}\n});\nfunction compareIPv4(firstIP, secondIP)\n{\nvar fIP;\nvar sIP;\nfIP = firstIP.split(\".\");\nsIP = secondIP.split(\".\");\nfor (var i = 0; i < 4; i++)\n{\nif (fIP[i] != \"\" && sIP[i] != \"\")\n{\nfIP[i] = parseInt(fIP[i],10);\nsIP[i] = parseInt(sIP[i],10);\n}\nif (fIP[i] > sIP[i])\n{\nreturn 1;\n}\nelse if (fIP[i] < sIP[i])\n{\nreturn -1;\n}\n}\nreturn 0;\n}\nfunction checkWholeIPv4(k, v, ipValue)\n{\nvar vLen = v.length;\nvar retMsg = \"\";\nfor (var j = 0; j < vLen; j++)\n{\nif (retMsg != \"\")\n{\nretMsg += \", \";\n}\nvar range = v[j];\nif (typeof range === 'string')\n{\nretMsg += range;\n}\nelse\n{\nretMsg += range[0]+\" ~ \"+range[1];\n}\n}\nif (k == \"banValue\")\n{\nretMsg = \" is NOT allowed to input the following value(s): {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (typeof range === 'string')\n{\nif (ipValue == range)\n{\nreturn [false, k, retMsg];\n}\n}\nelse\n{\nif (\"-1\" != compareIPv4(ipValue, range[0]) &&\n\"1\" != compareIPv4(ipValue, range[1]))\n{\nreturn [false, k, retMsg];\n}\n}\n}\n}\nelse if (k == \"allowRange\")\n{\nretMsg = \"'s input is invalid. Please ensure the input is in the following range: {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (\"-1\" != compareIPv4(ipValue, range[0]) &&\n\"1\" != compareIPv4(ipValue, range[1]))\n{\nreturn [true, \"\", \"\"];\n}\n}\nreturn [false, k, retMsg];\n}\nelse if (k == \"notLessThan\")\n{\n}\nelse if (k == \"notMoreThan\")\n{\n}\nelse\n{\n}\nreturn [true, \"\", \"\"];\n}\nfunction checkWholeMac(k, v, macValue)\n{\nvar vLen = v.length;\nvar retMsg = \"\";\nfor (var j = 0; j < vLen; j++)\n{\nif (retMsg != \"\")\n{\nretMsg += \", \";\n}\nvar range = v[j];\nif (typeof range === 'string')\n{\nretMsg += range;\n}\nelse\n{\nretMsg += range[0]+\" ~ \"+range[1];\n}\n}\nif (k == \"banValue\")\n{\nretMsg = \" is NOT allowed to input the following value(s): {0}. \".format(retMsg);\nfor (var i = 0; i < vLen; i++)\n{\nvar range = v[i];\nif (typeof range === 'string')\n{\nif (macValue.toLowerCase() == range.toLowerCase())\n{\nreturn [false, k, retMsg];\n}\n}\n}\n}\nelse\n{\n}\nreturn [true, \"\", \"\"];\n}\nfunction getMsgofWholeMACIPCheck(checkRetArray, ruleObj, checkValue, checkParaName)\n{\nvar errMsg = \"\";\nswitch (checkRetArray[1])\n{\ncase \"banValue\":\n{\nif (ruleObj.messages.banValue != undefined)\n{\nerrMsg = ruleObj.messages.banValue;\n}\nelse\n{\nif (checkParaName != \"\")\n{\nerrMsg = checkParaName + checkRetArray[2];\n}\nelse\n{\nerrMsg = \"Current operation is invalid, please check configuration parameters. \"+\"[\"+\"Error Input: \"+checkValue+\"]\";\n}\n}\nbreak;\n}\ncase \"allowRange\":\n{\nif (ruleObj.messages.allowRange != undefined)\n{\nerrMsg = ruleObj.messages.allowRange;\n}\nelse\n{\nif (checkParaName != \"\")\n{\nerrMsg = checkParaName + checkRetArray[2];\n}\nelse\n{\nerrMsg = \"Current operation is invalid, please check configuration parameters. \"+\"[\"+\"Error Input: \"+checkValue+\"]\";\n}\n}\nbreak;\n}\ndefault:\n{\nerrMsg = \"error msg undefined!\"\n}\n}\nreturn errMsg;\n}\njQuery.validator.addMethod(\n\"utf8LengthRange\",\nfunction(value, element, param)\n{\nif ( this.optional(element) )\n{\nreturn \"dependency-mismatch\";\n}\nvar valLength = value.length;\nvar param1 = param[0];\nvar param2 = param[1];\nif (param2 < 3)\n{\nalert(\"utf8LengthRange is invalid![\"+param2+\"<\"+3 +\"]\");\n}\nelse\n{\nparam1 = Math.ceil(parseInt(param[0])/ 3);\nparam2 = Math.floor(parseInt(param[1]) / 3);\nif (param1 < param2)\n{\nif (valLength >= param1 && valLength <= param2 )\n{\nreturn true;\n}\n}\nelse if (param1 == param2)\n{\nif (valLength == param2)\n{\nreturn true;\n}\n}\nelse\n{\nalert(\"utf8LengthRange [\"+param1+\",\"+param2+\"] is invalid!\");\n}\n}\nreturn false;\n},\nfunction(param, element){\nvar lengthStr = \"\";\nvar param1 = param[0];\nvar param2 = param[1];\nif (param2 < 3)\n{\nlengthStr = \" Range Error!!!!!![param2<WEB_UTF8_REALBYTE]\";\n}\nelse\n{\nparam1 = Math.ceil(parseInt(param[0])/ 3);\nparam2 = Math.floor(parseInt(param[1]) / 3);\nif (param1 < param2)\n{\nlengthStr = param1 + \" ~ \" + param2;\n}\nelse if (param1 == param2)\n{\nlengthStr = param2;\n}\nelse\n{\nlengthStr = \" Range Error!!!!!![\"+param1+\",\"+param2+\"]\";\n}\n}\nreturn $.validator.format(\"Please enter a value with {0} characters.\", lengthStr);\n}\n);\njQuery.validator.addMethod(\n\"differentWith\",\nfunction(value, element, param) {\nvar target = $(param);\nif (this.settings.onfocusout) {\ntarget.unbind(\".validate-differentWith\").bind(\"blur.validate-differentWith\", function() {\n$(element).valid();\n});\n}\nreturn value != target.val();\n},\nfunction(param, element){\nvar t = $(param).closest(\"[id^=template_]\");\nvar id = $(param).attr(\"id\");\nvar labelObj = $(\"label[for='\"+id+\"']\",t);\nvar label = labelObj.text();\nif($(element).is(\"select\"))\n{\nreturn $.validator.format(\"Please select an option different with \\\"{0}\\\".\", label);\n}\nelse\n{\nreturn $.validator.format(\"Please enter a value different with \\\"{0}\\\".\", label);\n}\n}\n);\nfunction checkTimeHMS(timestr) {\nvar re = /^([0-1]{1}[0-9]{1}|[2]{1}[0-3]{1}):[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/;\nif (re.test(timestr) == true) {\nreturn true;\n}\nreturn false;\n}\njQuery.validator.addMethod(\n\"checkTimeHMS\",\nfunction (value, element, params) {\nif (this.optional(element)) {\nreturn \"dependency-mismatch\";\n}\nif (checkTimeHMS(value) == true) {\nreturn true;\n}\nreturn false;\n},\n\"Please enter the correct time format like HH:MM:SS.\"\n);\nfunction get_element_obj(obj, id) {\nvar instTplt = obj.closest(\"[id^=template_]\");\nvar elementID = obj.attr(\"id\");\nvar arr = elementID.split(':');\nvar strId = id;\nif (arr.length > 1) {\nvar exNum = arr[arr.length - 1];\nstrId = id + \":\" + exNum;\n}\nreturn $(\"[id^='\" + strId + \"']\", instTplt);\n};\nfunction time_earlierThan(obj, value, param, type) {\nvar tmpvalue = obj.val();\nvar ret = true;\nvar valuearr = value.split(\":\")\nvar tmpvaluearr = tmpvalue.split(\":\")\nif (valuearr[0] < tmpvaluearr[0]) {\nreturn true;\n} else {\nif (valuearr[0] === tmpvaluearr[0] && valuearr[1] < tmpvaluearr[1]) {\nreturn true;\n} else {\nif (valuearr[1] === tmpvaluearr[1] && valuearr[2] < tmpvaluearr[2]) {\nreturn true;\n}\n}\nreturn false;\n}\n};\nfunction time_laterThan(obj, value, param, type) {\nvar tmpvalue = obj.val();\nvar ret = true;\nvar valuearr = value.split(\":\")\nvar tmpvaluearr = tmpvalue.split(\":\")\nif (valuearr[0] > tmpvaluearr[0]) {\nreturn true;\n} else {\nif (valuearr[0] === tmpvaluearr[0] && valuearr[1] > tmpvaluearr[1]) {\nreturn true;\n} else {\nif (valuearr[1] === tmpvaluearr[1] && valuearr[2] > tmpvaluearr[2]) {\nreturn true;\n}\n}\nreturn false;\n}\n};\njQuery.validator.addMethod(\n\"timeComparison\",\nfunction (value, element, param) {\nif (this.optional(element)) {\nreturn \"dependency-mismatch\";\n}\nif (2 > param.length) {\nreturn true;\n}\nvar obj = get_element_obj($(element), param[1]);\nif (3 > param.length) {\nparam[2] = {};\n}\nparam[2][\"idtext\"] = obj.parent().prev().text();\nif (obj.is(\":hidden\") || \"\" == obj.val()) {\nreturn true;\n}\nvar selectMode = {\n\"laterThan\": time_laterThan,\n\"earlierThan\": time_earlierThan\n};\nreturn selectMode[param[0]](obj, value, param);\n},\n\"Start time must be earlier than end time.\"\n);\nfunction randomNum(num)\n{\nvar t='';\nfor(var i=0;i<num;i++)\n{\nt+=Math.floor(Math.random()*10);\n}\nreturn t;\n}\nfunction encodeKey(key, iv)\n{\nvar pubKey = \"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodPTerkUVCYmv28SOfRV\\n7UKHVujx/HjCUTAWy9l0L5H0JV0LfDudTdMNPEKloZsNam3YrtEnq6jqMLJV4ASb\\n1d6axmIgJ636wyTUS99gj4BKs6bQSTUSE8h/QkUYv4gEIt3saMS0pZpd90y6+B/9\\nhZxZE/RKU8e+zgRqp1/762TB7vcjtjOwXRDEL0w71Jk9i8VUQ59MR1Uj5E8X3WIc\\nfYSK5RWBkMhfaTRM6ozS9Bqhi40xlSOb3GBxCmliCifOJNLoO9kFoWgAIw5hkSIb\\nGH+4Csop9Uy8VvmmB+B3ubFLN35qIa5OG5+SDXn4L7FeAA5lRiGxRi8tsWrtew8w\\nnwIDAQAB\\n-----END PUBLIC KEY-----\";\nvar str = key + \"+\" + iv;\nvar encrypt = new JSEncrypt();\nencrypt.setPublicKey(pubKey);\nvar encrypted = encrypt.encrypt(str);\nvar encryptkey = encrypted.toString();\nif(encryptkey.length == 0 || encryptkey == \"false\")\n{\nencryptkey = \"\";\n}\nreturn encryptkey;\n}\nfunction encodePara(data, key, iv)\n{\nvar key = CryptoJS.SHA256(key);\nvar iv = CryptoJS.SHA256(iv);\nvar encrypted =CryptoJS.AES.encrypt(data,key,\n{\niv:iv,\nmode:CryptoJS.mode.CBC,\npadding:CryptoJS.pad.ZeroPadding\n});\nreturn encrypted.toString();\n}\nfunction decodePara(encrypted, key, iv)\n{\nif (encrypted == \"\")\n{\nreturn \"\";\n}\ntry {\nvar key = CryptoJS.SHA256(key);\nvar iv = CryptoJS.SHA256(iv);\nvar decrypted = CryptoJS.AES.decrypt(encrypted, key, {\niv: iv,\nmode: CryptoJS.mode.CBC,\npadding: CryptoJS.pad.ZeroPadding\n});\nreturn decrypted.toString(CryptoJS.enc.Utf8);\n} catch (e) {\nconsoleLog(\"secure_common: decode error!!\")\nconsoleLog(e);\nreturn encrypted;\n}\n}\n\nvar menuTreeJSON = [{\"id\":\"homePage\",\"name\":\"Home\",\"area\":[{\"area\":\"home_t.lp\"}]},{\"id\":\"internet\",\"name\":\"Internet\"},{\"id\":\"localnet\",\"name\":\"Local Network\"},{\"id\":\"mgrAndDiag\",\"name\":\"Management & Diagnosis\"}];\nvar menuTreeObj = new MenuTreeClass(menuTreeJSON);\nvar _sessionTmpToken = \"\";\nvar preLoadImg = [];\npreLoadImg[0] = \"/img/nv_s.gif\";\npreLoadImg[1] = \"/img/nv_left.gif\";\npreLoadImg[2] = \"/img/nv_right.gif\";\npreLoadImg[3] = \"/img/nv_middle.gif\";\npreLoadImg[4] = \"/img/waiting.gif\";\npreLoadImg[5] = \"/img/info_m.png\";\npreLoadImg[6] = \"/img/waiting_w.gif\";\nfunction preload(Img)\n{\nvar imgTmp = [];\nfor (var i=0; i<Img.length; i++)\n{\nimgTmp[i] = new Image();\nimgTmp[i].src = Img[i];\n}\n}\npreload(preLoadImg);\n</script>\n</head>\n<body>\n<script type=\"text/javascript\">\nif(top != self)\n{\ndocument.getElementsByTagName(\"body\")[0].style.display = 'none';\ntop.location = self.location;\n}\nfunction LogOff()\n{\nshowWaitTip(true);\n$.post( \"/?_type=loginData&_tag=logout_entry\", {IF_LogOff:1, _sessionTOKEN:_sessionTmpToken}, undefined, \"json\" )\n.done(function( data ) {\nif ( data.need_refresh )\n{\ntop.location.href = top.location.href;\n}\nelse\n{\nalert(\"This page has expired, please refresh and try again. \");\nshowWaitTip(false);\n}\n});\n}\n</script>\n<div id=\"blackMask\" class=\"black_overlay\" style=\"display:none;\"></div>\n<div id=\"tipLayer\" class=\"white_content\">\n<div id=\"confirmLayer\" style=\"display:none;\">\n<div id=\"confirmMsg\">\n<p>are you sure?</p>\n</div>\n<div id=\"waitingImgArea\" style=\"display:none;\">\n</div>\n<div id=\"confirmBtnArea\" style=\"display:none;\">\n<input type=\"button\" class=\"button\" id=\"confirmCancel\" value=\"Cancel\" />\n<input type=\"button\" class=\"button\" id=\"confirmOK\" value=\"OK\" />\n<input type=\"button\" class=\"button\" id=\"confirmStop\" value=\"Stop\" />\n</div>\n</div>\n</div>\n<div id=\"page_container\">\n<div class=\"white_content_security\">\n<div class=\"sercurityNotice\" >\n<div class=\"sercurityNoticeMsg\">\n<ul>\n<li id=\"LastIP\"></li>\n<li id=\"LastCurrentTime\"></li>\n</ul>\n</div>\n<div id=\"confirmBtnArea\">\n<input type=\"button\" class=\"button\" id=\"sercurityNoticeOK\" value=\"OK\">\n</div>\n</div>\n</div>\n<div id=\"page_header\">\n<div id=\"banner\">\n<div id=\"logo\" class=\"logo\"></div>\n<div class=\"timeArea\" id=\"timeArea\" style=\"display:none;\">\nCurrent Time: <span id=\"_DevCurrTime\">Loading...</span>\n</div>\n<div id=\"banner_switchArea\">\n<div id=\"logOff\" class=\"emColor clickable\" onclick=\"LogOff()\">\n<div id=\"LogOffLnk\"> Logout</div>\n<div id=\"logUser\" class=\"logUser\" title=\"\">\n\n</div>\n</div>\n</div>\n</div>\n<div id=\"mainNavigator\">\n<div id=\"mn_first\"></div>\n<div id=\"mn_li\"></div>\n<div id=\"mn_last\"></div>\n</div>\n</div>\n<div id=\"page_content\">\n\n<script type=\"text/javascript\">\n\nvar loginLockInterval = null;\nvar editableInputs;\nvar dftFcsTaget;\nvar IsAllowedSubmit = true;\nfunction createTimeCountDownMessage(lockingTime, promptMsg)\n{\nif((promptMsg != null && promptMsg.length > 0) || lockingTime > 0 )\n{\n\nvar timeOutHint = promptMsg.concat(\"Please retry after {1} seconds. \");\n$(\"#login_error_waittime\").text(timeOutHint.format(3,lockingTime)).show();\n}\nelse\n{\n$(\"#login_error_waittime\").hide();\n}\n}\nfunction timer(seconds, promptMsg) {\nwindow.setTimeout(function() {\neditableInputs.removeAttr(\"disabled\");\ndftFcsTaget.focus();\n$(\"#LoginId\").removeAttr(\"disabled\").removeClass(\"disableBtn\");\n$(\"#login_error\").hide();\n$(\"#login_error_waittime\").hide().text(\"\");\nif (loginLockInterval) {\nwindow.clearInterval(loginLockInterval);\nconsoleLog(\"timeout to clearInterval!!!\");\n}\n}, seconds * 1000);\nloginLockInterval = window.setInterval((function(sec, msg){\nreturn function () {\nif (sec > 0){\nsec--;\n}\ncreateTimeCountDownMessage(sec, msg);\n}\n})(seconds, promptMsg), 1000);\n}\nfunction showTimeCountDown(lockingTime, promptMsg)\n{\nif(lockingTime > 0)\n{\ncreateTimeCountDownMessage(lockingTime, promptMsg);\n$(\"#LoginId\").attr(\"disabled\",\"true\").addClass(\"disableBtn\");\neditableInputs.attr(\"disabled\",\"true\");\ntimer(lockingTime, promptMsg);\n}\n}\nfunction DisplayLoginErrorTip(loginData)\n{\nvar loginErrMsg = loginData.loginErrMsg;\nvar lockingTime = loginData.lockingTime;\nvar promptMsg = loginData.promptMsg;\nlockingTime = parseInt(lockingTime);\nif ( IsBrowserSupportCookie() == false )\n{\n$(\"#login_error\").show();\n$(\"#login_error_span\").text(\"Your browser's cookie functionality is turned off, please turn it on before login.\");\n}\nelse if(loginErrMsg.length > 0 || promptMsg.length > 0)\n{\n$(\"#login_error\").show();\nif(loginErrMsg.length > 0)\n{\n$(\"#login_error_span\").text(loginErrMsg).show();\n}\nelse\n{\n$(\"#login_error_span\").hide();\n}\nif (lockingTime > 0 || promptMsg.length > 0)\n{\nshowTimeCountDown(lockingTime, promptMsg);\n}\n}\nelse\n{\n$(\"#login_error\").hide();\n}\n}\nfunction g_loginToken(xml)\n{\nvar xmlObj = $(xml).text();\nvar Password =$(\"#Frm_Password\").val();\nvar SHA256Password =sha256(Password+xmlObj);\nvar postData = {};\npostData[\"Password\"] = SHA256Password;\npostData[\"Username\"] = $(\"#Frm_Username\").val();\npostData[\"_sessionTOKEN\"] = $(\"#_sessionTOKEN\").val();\npostData[\"action\"] = \"login\";\npostData[\"captcha\"] = $(\"#Frm_captchaCode\").val();\nPassword = undefined;\nSHA256Password = undefined;\n$.post( \"/?_type=loginData&_tag=login_entry\", postData, undefined, \"json\" )\n.done(function( data ) {\n$(\"#_sessionTOKEN\").val(data.sess_token);\nif ( data.login_need_refresh )\n{\ntop.location.href = top.location.href;\n}\nelse\n{\nDisplayLoginErrorTip(data);\n}\n});\npostData = undefined;\n}\nvar throttle = function (fn, delay, atleast) {\nvar timer = null, previous = null;\nreturn function () {\nvar context = this, args = arguments, now = +new Date();\nif (!previous) {previous = now;}\nif (now - previous > atleast) {\nfn.apply(context, args);\nprevious = now;\n} else {\nclearTimeout(timer);\ntimer = setTimeout(function() {\nfn.apply(context, args);\n}, delay);\n}\n}\n};\nfunction ElementCheck(obj, errormsg)\n{\nvar errorobj = obj.parents(\".row\").find(\".errorLabelWraper\");\nerrorobj.remove();\nobj.removeClass(\"error\");\nif (obj.attr(\"type\") == \"text\")\n{\nif (obj.val() == \"\")\n{\n$(this).addClass(\"error\");\nIsAllowedSubmit = false;\nShowError(obj, errormsg);\n}\nelse\n{\nIsAllowedSubmit = true;\n}\n}\nif (obj.attr(\"type\") == \"checkbox\")\n{\nif (obj.is(\":checked\"))\n{\nIsAllowedSubmit = true;\n}\nelse\n{\n$(this).addClass(\"error\");\nIsAllowedSubmit = false;\nShowError(obj, errormsg);\n}\n}\n}\nfunction ShowError(element, errormsg) {\nvar rowObj = element.closest(\".row\");\nif ( rowObj.length == 0 )\n{\nconsoleLog(\"element id=[\"+element.attr(\"id\")+\"] is not in row div.\");\nreturn ;\n}\nvar id = element.attr(\"id\");\nvar errorHTML = \"<label for='\" + id + \" generated='true' class='error'>\" + errormsg + \" </label>\";\nvar error = $(errorHTML);\nvar tipHTML = \"<div class=\\\"errorLabelWraper\\\"></div>\";\nvar tipObj = $(tipHTML);\nerror.appendTo(tipObj);\nvar rowWidth = rowObj.width();\nvar usedWidth = 0;\nvar rightObj = undefined;\nrowObj.children().each(function(){\nif (!($(this).hasClass(\"_LuQUID_AccessDeviceList\")||\n$(this).hasClass(\"clear\"))){\nusedWidth += $(this).outerWidth(true);\n}\nif ($(this).hasClass(\"right\")){\nrightObj = $(this);\n}\n});\nvar errWidth = rowWidth - usedWidth;\ntipObj.width(errWidth-5-23);\nif (rightObj != undefined)\n{\ntipObj.insertAfter(rightObj);\n}\nelse\n{\ntipObj.appendTo(rowObj);\n}\n}\n$(document).ready(function(){\nvar loginForm = $(\".loginInstCfgArea\");\neditableInputs = $(\"input\",loginForm).not(\":disabled\").not(\"[readonly=readonly]\");\nnew ShowHidePwdClass(\"Frm_Password\", \"loginWrapper\", \"OBJ_USERINFO_ID\");\n$(\"#captchaImg\",loginForm).click(function(){\ngetCaptcha($(this));\n});\n$(\"#Frm_captchaCode\",loginForm).focus(function(){\nvar imgTemp = $(\"#captchaImg\",loginForm);\nif(!imgTemp.hasClass(\"__CheckVaildImgShow\")){\nimgTemp.click();\n}\n});\n$.getJSON(\"/?_type=loginData&_tag=login_entry\")\n.done(function( json ) {\n$(\"#_sessionTOKEN\").val(json.sess_token);\nDisplayLoginErrorTip(json);\n})\n.fail(function( jqxhr, textStatus, error ) {\nvar err = textStatus + \", \" + error;\nconsoleLog( \"Request Failed: \" + err );\n});\neditableInputs.each(function(){\nif ($(this).val() == \"\") {\n$(this).focus();\ndftFcsTaget = $(this);\nreturn false;\n}\n});\n$(\"#LoginId\").bind(\"click\", throttle(function(){\nif ( true == IsAllowedSubmit )\n{\nvar loadAllowAddr = \"/?_type=loginData&_tag=login_token\";\n$(this).dataTransfer(loadAllowAddr, \"GET\", g_loginToken, undefined, false);\n}\n}, 300, 300));\nshowWaitTip(false);\neditableInputs.keydown(function(event){\nif(event.keyCode==13){\nevent.preventDefault();\nevent.stopPropagation();\n$(\"#LoginId\").click();\n}\n});\n});\nString.prototype.format = function(args) {\nvar result = this;\nif (arguments.length > 0)\n{\nfor (var i = 0; i < arguments.length; i++)\n{\nif (arguments[i] != undefined) {\nvar reg = new RegExp(\"({[\" + i + \"]})\", \"g\");\nresult = result.replace(reg, arguments[i]);\n}\n}\n}\nreturn result;\n};\nfunction showOrHideRowDiv(action, RowDiv)\n{\nvar subWidget = RowDiv.find(\"*[id!='']\")\nif ( action == \"show\" )\n{\nRowDiv.showIt(true);\nsubWidget.removeClass(\"PostIgnore\");\n}\nelse\n{\nRowDiv.showIt(false);\nsubWidget.addClass(\"PostIgnore\");\n}\n}\nfunction colonStripping(str)\n{\nvar colonLocation = str.indexOf(\":\");\nif ( colonLocation != -1 )\n{\nreturn str.substring(0, colonLocation);\n}\nreturn str;\n}\nfunction colonStrippingLast(str)\n{\nvar colonLocation = str.lastIndexOf(\":\");\nif ( colonLocation != -1 )\n{\nreturn str.substring(0, colonLocation);\n}\nreturn str;\n}\njQuery.fn.showIt = function(show) {\nif (show)\n{\n$(this).css(\"display\", \"\");\n}\nelse\n{\n$(this).css(\"display\", \"none\");\n}\n};\nfunction GetSuffixedIDorName(oldValue, suffix, splitter, forParaName)\n{\nvar newValue = \"\";\nif ( forParaName == true )\n{\noldValue = oldValue.split(\":\");\noldValue[0] += splitter + suffix;\nnewValue = oldValue.join(\":\");\n}\nelse\n{\nnewValue = oldValue + splitter + suffix;\n}\nreturn newValue;\n}\njQuery.fn.cloneWithSuffix = function(suffix, splitter, forParaName) {\nvar source = $(this);\nvar clone = source.clone(true);\nclone.attr(\"id\", clone.attr(\"id\")+\"_\"+suffix);\nif ( undefined == splitter )\n{\nsplitter = \":\";\n}\nif ( undefined == forParaName )\n{\nforParaName = false;\n}\nvar idElems = clone.find(\"*[id!='']\");\nidElems.each(function(){\nvar idEle = $(this);\nvar oldID = idEle.attr(\"id\");\nif (oldID != undefined)\n{\nvar newID = GetSuffixedIDorName(oldID, suffix, splitter, forParaName);\nidEle.attr(\"id\", newID);\n}\nvar oldName = idEle.attr(\"name\");\nif (oldName != undefined)\n{\nvar newName = GetSuffixedIDorName(oldName, suffix, splitter, forParaName);\nidEle.attr(\"name\", newName);\n}\n});\nlabelForElems = clone.find(\"label\");\nlabelForElems.each(function(){\nvar labelForEle = $(this);\nvar oldFor = labelForEle.attr(\"for\");\nif (oldFor != undefined)\n{\nvar newFor = GetSuffixedIDorName(oldFor, suffix, splitter, forParaName);\nlabelForEle.attr(\"for\", newFor);\n}\n});\nclone.trigger(\"applyPromptCheckJSON\", [clone]);\n$.publish(\"modify_promptcheck\",[clone]);\nreturn clone;\n};\nfunction initial_sceneTip()\n{\n$(\".sceneTip_container\").each(function(){\n$(this).hide();\n});\n$(\".sceneTipLink\").each(function(){\nvar sceneTipLinkContent = $(this).children();\nsceneTipLinkContent.unbind( \"click\" );\nsceneTipLinkContent.click(function(event){\nevent.preventDefault();\n$(this).parent().next().slideToggle(\"normal\");\n});\n});\n$(\".sceneTip_close\").each(function(){\nvar sceneTip_closeLink = $(this).children();\nsceneTip_closeLink.unbind( \"click\" );\nsceneTip_closeLink.click(function(){\n$(this).parent().parent().slideUp(\"normal\");\n});\n});\n}\nfunction succHintShow(template)\n{\nvar PostFeedbackOBJ = $(\".succHint\",template);\nPostFeedbackOBJ.fadeIn(1000);\nwindow.setTimeout(\nfunction() {\nPostFeedbackOBJ.fadeOut(1000);\nPostFeedbackOBJ.hide();\n},\n2000\n);\n}\njQuery.fn.dataTransfer = function(URL, transferType, success_func, error_func, IfShowWaitTip, async, dataType){\nif ( !URL || URL == \"\" )\n{\nconsoleLog(\"[dataTransfer]URL is illegal!\");\nreturn;\n}\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nvar asyncTemp = async;\nif ( asyncTemp == undefined )\n{\nasyncTemp = true;\n}\nif ( !dataType )\n{\nvar dataType = \"xml\";\n}\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\nvar Head = $(this);\n$.ajax({\nurl:URL,\ntype: transferType,\ndataType: dataType,\ntimeout: 30000,\nasync: asyncTemp,\ncache:false,\nerror: function(){\nif ($.isFunction(error_func))\n{\nerror_func();\n}\nelse\n{\nif (Head != undefined)\n{\nvar ajaxTransferFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar externErrorHint = $(\".externErrorHint\",Head);\nif ( externErrorHint != undefined )\n{\n$(\"span\",externErrorHint).text(ajaxTransferFailHint);\nexternErrorHint.showIt(true);\n}\n}\nshowWaitTip(false);\n}\n},\nsuccess: function(xml){\nsuccess_func(xml);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n};\nfunction HTMLEnCode(str)\n{\nvar s = \"\";\nif (typeof(str) != \"string\")\n{\nreturn str;\n}\nif(str.length == 0)\n{\nreturn \"\";\n}\ns = str.replace(/&/g, \"&#38;\");\ns = s.replace(/</g, \"&#60;\");\ns = s.replace(/>/g, \"&#62;\");\ns = s.replace(/ /g, \"&#32;\");\ns = s.replace(/\\'/g, \"&#39;\");\ns = s.replace(/\\\"/g, \"&#34;\");\nreturn s;\n}\nfunction addSlash(srcStr)\n{\nvar str = \"\";\nvar ch = \"\";\nif (typeof(srcStr) != \"string\")\n{\nreturn srcStr;\n}\nfor(var i = 0; i < srcStr.length; i++)\n{\nch = srcStr.substr(i, 1);\nif( \"\\\\\" == ch )\n{\nch = \"\\\\\\\\\";\n}\nelse if( \"\\'\" == ch )\n{\nch = \"\\\\\\'\";\n}\nelse if( \"\\\"\" == ch )\n{\nch = \"\\\\\\\"\";\n}\nstr = str + ch;\n}\nreturn str;\n}\nfunction SetSelectValue(SelectElem, data)\n{\n$(\"option[class='_optExpHandle']\", SelectElem).remove();\nvar findOption = 0;\n$(\"option\", SelectElem).removeAttr(\"selected\");\n$(\"option\", SelectElem).each(function(){\nvar OptionObj = $(this);\nif ( OptionObj.val() == data )\n{\nfindOption = 1\nSelectElem.val(data);\nreturn false;\n}\n});\nif ( findOption == 0 )\n{\nSelectElem.append(\"<option value='\"+ HTMLEnCode(data)\n+ \"' title='--Unknown--' class='_optExpHandle'>\"\n+ \"--Unknown--\" + \"</option>\");\nSelectElem.val(addSlash(data));\n}\n}\njQuery.fn.fillDataByType = function(data){\nvar Elems = $(this);\nif (Elems.is(\"input\"))\n{\nswitch (Elems.attr(\"type\"))\n{\ncase \"hidden\":\n{\nElems.val(data);\nif (Elems.attr(\"_LuQUID_splitMACID\") != undefined)\n{\nvar splitMACID = Elems.attr(\"_LuQUID_splitMACID\");\nElems.FillIPorMacDataBySplit(splitMACID, \":\", 6);\n}\nelse if (Elems.attr(\"_LuQUID_splitIPID\") != undefined)\n{\nvar splitIPID = Elems.attr(\"_LuQUID_splitIPID\");\nElems.FillIPorMacDataBySplit(splitIPID, \".\", 4);\n}\nbreak;\n}\ncase \"text\":\ncase \"password\":\n{\nif( Elems.attr(\"encode\") == \"1\")\n{\nvar key = _sessionTmpToken;\nvar iv = key.split(\"\").reverse().join(\"\");\ndata = decodePara(data,key,iv);\n}\nElems.val(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\nbreak;\n}\ncase \"checkbox\":\n{\nif( 1 == data )\n{\nElems.prop(\"checked\", true);\n}\nelse\n{\nElems.prop(\"checked\", false);\n}\nElems.val(data);\nbreak;\n}\ndefault:\n{\nbreak;\n}\n}\n}\nelse if (Elems.is(\"span\"))\n{\nElems.text(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\n}\nelse if (Elems.is(\"a\"))\n{\nElems.text(data);\nElems.attr(\"href\",data);\n}\nelse if (Elems.is(\"select\"))\n{\nSetSelectValue(Elems, data);\n}\nelse if (Elems.is(\"textarea\"))\n{\nElems.val(data);\n}\nelse if (Elems.is(\"label\"))\n{\nElems.text(data);\n}\nelse if (Elems.is(\"div\"))\n{\nvar radioObj = $(\"input[type=radio]\", Elems);\nradioObj.each(function(){\nvar thisObj = $(this);\nif (thisObj.val() == data)\n{\nthisObj.prop(\"checked\", true);\n}\nelse\n{\nthisObj.prop(\"checked\", false);\n}\n});\n}\nelse if (Elems.is(\"td\"))\n{\nElems.text(data);\nif (typeof(Elems.attr(\"title\")) != \"undefined\")\n{\nElems.attr(\"title\", data);\n}\n}\nelse\n{\n}\n};\njQuery.fn.fillDataByOBJID = function(xml, OBJIDs, Clone, suffix, splitter){\nif ( undefined == splitter )\n{\nsplitter = \":\";\n}\n$(xml).find(\"encode\").each(function(){\nvar encodePara= $(this).text().split(\",\");\nfor(var i in encodePara)\n{\n$(\"input[id^=\"+encodePara[i]+\"]\", Clone).attr(\"encode\",\"1\");\n}\n});\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJIDSplit = OBJID.split(\":\");\nvar OBJIDIndex = 0;\nvar isSplitterExist = 0;\nif ( OBJIDSplit.length == 2 )\n{\nOBJID = OBJIDSplit[0];\nOBJIDIndex = parseInt(OBJIDSplit[1]);\nisSplitterExist = 1;\n}\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar OBJ;\nif ( OBJIDIndex < OBJs.length )\n{\nOBJ = OBJs.get(OBJIDIndex);\n}\nelse\n{\ncontinue;\n}\nvar instances;\nif ( 1 == isSplitterExist )\n{\ninstances = $(\"Instance\", OBJ);\n}\nelse\n{\ninstances = $(\"Instance\", OBJs);\n}\nif ( instances.length <= suffix\n|| suffix < 0 )\n{\nconsoleLog(\"suffix off normal upper!!\");\ncontinue;\n}\nvar InstOBJ = instances.eq(suffix);\nInstOBJ.find(\"ParaName\").each(function(){\nvar ParaName = $(this).text();\nvar ParaValue = $(this).next().text();\nvar Elems = $(\"[id^='\"+ParaName+splitter+\"']\", Clone);\nif ( Elems.length == 0 )\n{\nElems = $(\"[id='\"+ParaName+\"']\", Clone);\n}\nif ( Elems.length > 0 )\n{\nif ( Elems.length > 1 )\n{\nconsoleLog(\"this ele id is duplicate[\" +Elems.attr(\"id\")+ \"]\");\n}\nElems.fillDataByType(ParaValue);\n}\nelse\n{\nif ( \"_InstID\" != ParaName )\n{\nconsoleLog(\"XML ParaName(\"+ParaName+\") cannot map to HTML \"\n+ \"by fillDataByType, so it may be useless, \"\n+ \"web security require deleting it!\");\n}\n}\n});\n}\n$(\".SpecialPassword\", Clone).each(function(i){\n$(this).val(\"\t\t\t\t\t\t\");\n});\n};\njQuery.fn.InstantializeForTemplateBox = function(xml, OBJIDs, container){\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar ruleTemplate = $(\"[id='\"+OBJID+\"']._LuQuid_TempalteBox\", container);\nif( ruleTemplate.length == 0 )\n{\ncontinue;\n}\n$(\"[id^='\"+OBJID+\"_']._LuQuid_TempalteBox\", container).remove();\nvar subWidget = ruleTemplate.find(\"*[id!='']\");\nsubWidget.removeClass(\"PostIgnore\");\nvar instances = $(\"Instance\", OBJs);\nvar ruleNum = instances.length;\nfor (var i=0; i<ruleNum; i++)\n{\nvar clone = ruleTemplate.cloneWithSuffix(i, \"_\", true);\nruleTemplate.before(clone);\nvar DataOBJID = [OBJID];\nclone.fillDataByOBJID(xml, DataOBJID, clone, i, \"_\");\nclone.showIt(true);\n}\n$(\"[id='\"+OBJID+\"._OBJ_InstNUM']\", container).val(ruleNum);\nvar templateInstID = $(\"[id='\"+OBJID+\"._OBJ_InstID']\", container);\ntemplateInstID.addClass(\"PostIgnore\");\nsubWidget.addClass(\"PostIgnore\");\n}\n};\njQuery.fn.FillDataOnlyForTemplateBox = function(xml, OBJIDs, container){\nfor (var i=0; i<OBJIDs.length; i++)\n{\nvar OBJID = OBJIDs[i];\nvar OBJs = $(xml).find(OBJID);\nif ( OBJs.length == 0 )\n{\ncontinue;\n}\nvar ruleTemplate = $(\"[id='\"+OBJID+\"']._LuQuid_TempalteBox\", container);\nif( ruleTemplate.length == 0 )\n{\ncontinue;\n}\n$(\"[id^='\"+OBJID+\"_']._LuQuid_TempalteBox\", container).each(function(){\nvar instObj = $(this);\nvar instId = instObj.find(\"[id^='\"+OBJID+\"._OBJ_InstID']\").val();\nvar index = -1;\nvar instances = $(\"Instance\", OBJs);\nvar ruleNum = instances.length;\nfor (var i=0; i<ruleNum; i++)\n{\nvar instIdName = OBJID+\"._OBJ_InstID\";\nvar ToOperParaArray = {};\nToOperParaArray[instIdName] = {\nValueOrigin: \"\"\n};\nxmlParaInInstOperate(xml, OBJID, i, ToOperParaArray);\nvar ruleInstId = ToOperParaArray[instIdName].ValueOrigin;\nif ( instId == ruleInstId )\n{\nindex = i;\nbreak;\n}\n}\nif ( index > -1 )\n{\nvar DataOBJID = [OBJID];\ninstObj.fillDataByOBJID(xml, DataOBJID, instObj, index, \"_\");\n}\nelse\n{\nconsoleLog(\"instId(\"+instId+\") cannot match xml instance\");\n}\n});\n}\n};\njQuery.fn.createPageDataByClone = function(RuleNum,DataOBJID,xml,fillDataByCustom){\nvar Head = $(this);\nvar HeadID = Head.attr(\"id\");\nvar TemplateOBJ = $(\"#template_\"+HeadID , Head);\n$(\"#_InstNum\", Head).val(RuleNum);\nfor (var i=0; i<RuleNum; i++)\n{\nvar clone = TemplateOBJ.cloneWithSuffix(i);\nTemplateOBJ.before(clone);\nclone.fillDataByOBJID(xml ,DataOBJID, clone, i);\nif ( $.isFunction(fillDataByCustom) )\n{\nfillDataByCustom(i,clone);\n}\nelse\n{\nclone.trigger(\"fillDataByCustom\",[i,clone]);\n}\nclone.showIt(true);\n}\n};\njQuery.fn.hasError = function(xml, location, container){\nvar ContentContainer = $(\"#\"+container);\nvar cmapiErrorContainer;\nvar errStr = $(\"IF_ERRORSTR\", $(xml));\nvar errParam = $(\"IF_ERRORPARAM\", $(xml));\nif (errStr.length <= 0 || errParam.length <= 0)\n{\nconsoleLog(\"[hasError:]cannot find IF_ERRORSTR or IF_ERRORPARAM\");\nreturn;\n}\nif(!container)\n{\nContentContainer = $(this);\n}\nif (!location)\n{\nlocation = \"errorHint\";\n}\nif (location == \"externErrorHint\")\n{\ncmapiErrorContainer = $(\".externErrorHint\",ContentContainer);\n}\nelse\n{\ncmapiErrorContainer = $(\".\"+location,ContentContainer);\n}\nvar ErrorString = $(\"IF_ERRORSTR\", $(xml)).text();\nvar ErrorParam = $(\"IF_ERRORPARAM\", $(xml)).text();\nif ( ErrorString == \"SUCC\" )\n{\ncmapiErrorContainer.showIt(false);\nreturn 0;\n}\nelse if ( ErrorString == \"SessionTimeout\" )\n{\nif (typeof(pro_SessionTimeout) == \"function\")\n{\npro_SessionTimeout();\n}\nelse\n{\ntop.location.href = top.location.href;\n}\nreturn 1;\n}\nelse\n{\nvar cmapiErrorContainerHtml = \"\";\nvar paraString = \"\";\nif ( ErrorParam != \"SUCC\")\n{\nvar LabelFindResult = 0;\nErrorString = \"Current operation is invalid, please check whether {0} is legal. \"\nvar paraLabel = ContentContainer.find(\"label[for^='\"+ErrorParam+\"\\\\:']\");\nif ( paraLabel.length <= 0 )\n{\nparaLabel = ContentContainer.find(\"label[for='\"+ErrorParam+\"']\");\n}\nif ( paraLabel.length > 0 )\n{\nparaLabel.each(function(){\nvar labelTmp = $(this);\nif ( !labelTmp.hasClass(\"error\"))\n{\nparaString = labelTmp.text();\nLabelFindResult = 1;\nreturn false;\n}\n});\n}\nif ( LabelFindResult == 0 || paraString.trim() == \"\")\n{\nErrorString = \"Current operation is invalid, please check configuration parameters. \";\n}\ncmapiErrorContainerHtml = ErrorString.format(paraString);\n}\nelse\n{\nif ( \"FAIL\" == ErrorString\n|| \"Current operation is invalid, please check whether {0} is legal. \" == ErrorString )\n{\nErrorString = \"Current operation is invalid, please check configuration parameters. \";\n}\ncmapiErrorContainerHtml = ErrorString;\n}\n$(\"span\",cmapiErrorContainer).html(cmapiErrorContainerHtml);\ncmapiErrorContainer.showIt(true);\nreturn 1;\n}\n};\njQuery.fn.ShouldPostIgnore = function(){\nif($(this).hasClass(\"PostIgnore\"))\n{\nreturn true;\n}\nreturn false;\n};\njQuery.fn.InitialPostData = function(actionType){\nvar AND = \"&\";\nvar template = $(this);\nvar PostData = \"IF_ACTION=\" + actionType;\nvar cryptoKey = randomNum(16);\nvar cryptoIv = randomNum(16);\nvar needEncode = false;\nvar formInputContent = template.find(\"input,select\");\nformInputContent.each(function(key){\nvar Elems = $(this);\nif ( Elems.ShouldPostIgnore() )\n{\nreturn true;\n}\nvar ElemsID = Elems.attr(\"id\");\nif (typeof(ElemsID) != \"string\") {\nreturn true;\n}\nif ( Elems.attr(\"type\") == \"radio\" )\n{\nif ( Elems.is(':checked') )\n{\nElemsID = Elems.attr(\"name\");\n}\nelse\n{\nreturn true;\n}\n}\nvar ElemsMainID = colonStripping(ElemsID);\nvar ElemsValue = \"\";\nif ( Elems.is(\"input\") )\n{\nswitch (Elems.attr(\"type\"))\n{\ncase \"hidden\":\n{\nif (Elems.attr(\"_LuQUID_splitMACID\") != undefined)\n{\nvar splitMACID = Elems.attr(\"_LuQUID_splitMACID\");\nElems.FillIPorMacDataCombination(splitMACID, \":\", 6);\n}\nelse if (Elems.attr(\"_LuQUID_splitIPID\") != undefined)\n{\nvar splitIPID = Elems.attr(\"_LuQUID_splitIPID\");\nElems.FillIPorMacDataCombination(splitIPID, \".\", 4);\n}\nElemsValue = Elems.val();\nvar OriValue = ElemsValue;\nif(Elems.attr(\"encode\") == \"1\")\n{\nElemsValue = encodePara(ElemsValue,cryptoKey,cryptoIv);\nif (OriValue != ElemsValue)\n{\nneedEncode = true;\n}\n}\nbreak;\n}\ncase \"text\":\ncase \"password\":\ncase \"radio\":\n{\nElemsValue = Elems.val();\nvar OriValue = ElemsValue;\nif(Elems.attr(\"encode\") == \"1\")\n{\nElemsValue = encodePara(ElemsValue,cryptoKey,cryptoIv);\nif (OriValue != ElemsValue)\n{\nneedEncode = true;\n}\n}\nbreak;\n}\ncase \"checkbox\":\n{\nif( Elems.is(':checked')==true )\n{\nElemsValue = 1;\n}\nelse\n{\nElemsValue = 0;\n}\nbreak;\n}\ndefault:\n{\nbreak;\n}\n}\n}\nelse if ( Elems.is(\"select\") )\n{\nElemsValue = Elems.val();\n}\nelse\n{\nconsoleLog(\"when create post data, find not support elements type!!\");\n}\nvar NameValueJson = {\n\"ElemsMainID\": ElemsMainID,\n\"ElemsValue\": ElemsValue\n};\ntemplate.trigger(\"PostDataChangeByCustom\",[NameValueJson,template]);\nvar RealElemsValue = encodeURIComponent(NameValueJson.ElemsValue);\nPostData += AND + ElemsMainID + \"=\" + RealElemsValue;\n});\nif(needEncode)\n{\nPostData += AND + \"encode=\" + encodeURIComponent(encodeKey(cryptoKey,cryptoIv));\n}\nreturn PostData;\n};\nfunction RefreshClickHandle(Head)\n{\n$(\".Btn_refresh\", Head).each(function(){\n$(this).unbind(\"click\");\n$(this).bind(\"click\", function(){\nvar buttonOBJ = $(this);\nif (buttonOBJ.hasClass(\"disableBtn\")\n||buttonOBJ.hasClass(\"disableLongBtn\"))\n{\nreturn;\n}\nvar HeadID = Head.attr(\"id\");\nHead.find(\"[id^='template_\"+HeadID+\"_']\").each(function(){\n$(this).remove();\n});\nvar ServerAddr = $(\"address span\", Head).text();\nHead.dataTransfer(ServerAddr,\n\"GET\",\nHead.succfunction,\nHead.failfunction,\nundefined,\ntrue);\n});\n})\n}\nfunction initialStatusArea(Head)\n{\nif ( 0 == $(\"._LuQUID_STATUS_OBJID\", Head).length )\n{\nreturn;\n}\nvar OBJID = [];\nvar OBJDOMs = $(\"._LuQUID_STATUS_OBJID>li\", Head);\nOBJDOMs.each(function(){\nvar identity = $(this).text();\nOBJID.push(identity);\n})\nvar isMultiInst = $(\".maxInstNum\", Head).val();\nvar ServerAddr = $(\"address span\", Head).text();\nHead.succfunction = function(xml){\nif (Head.hasError(xml,\"externErrorHint\") == 0)\n{\nHead.trigger(\"changeXMLDataBeforeFillData\", [xml]);\nvar XMLOBJ = $(xml).find(OBJID[0]);\nvar RuleNum = $(\"Instance\", XMLOBJ).length;\nif (RuleNum == 0)\n{\n$(\".noDataHint\",Head).showIt(true);\n$(\".form_content\",Head).showIt(false);\n}\nelse\n{\n$(\".noDataHint\",Head).showIt(false);\n$(\".form_content\",Head).showIt(true);\nif (isMultiInst == 0)\n{\nHead.fillDataByOBJID(xml ,OBJID, Head, 0);\nHead.trigger(\"fillDataByCustom\",[0, Head]);\nvar template = $(\"[id^='template_']\", Head);\ntemplate.trigger(\"fillDataByCustom\",[0, template]);\ntemplate.showIt(true);\n}\nelse\n{\nHead.fillDataByCustom = undefined;\nHead.createPageDataByClone(RuleNum, OBJID, xml,\nHead.fillDataByCustom);\n}\ncolorTblRow(\".colorTbl\", \"even\", Head);\n}\n}\n};\nRefreshClickHandle(Head);\nif ( $(\".collapBarWithDataTrans\",Head).length <= 0 )\n{\nHead.dataTransfer(ServerAddr,\n\"GET\",\nHead.succfunction);\n}\nelse\n{\ninitial_collapBarWithDataTrans(Head);\n}\n}\nfunction initial_special_password(Head)\n{\n$(\".SpecialPassword\", Head).each(function(){\n$(this).mouseup( function(){\nif(this.focused){\nthis.focused=false;\nreturn false;\n}\n});\n});\n$(\".SpecialPassword\", Head).each(function(){\n$(this).focus( function(){\nthis.select();\nthis.focused=true;\n});\n});\n}\nfunction initial_button(buttonType, Head, IfShowWaitTip)\n{\nif ( !Head )\n{\nconsoleLog(\"incoming para:Head is not defined!\");\nreturn;\n}\nvar buttonClass = \"\";\nvar eventHandler = \"\";\nif ( buttonType == \"Apply\" )\n{\nbuttonClass = \"Btn_apply\";\neventHandler = \"fillDataByApplyResult\";\n}\nelse if ( buttonType == \"Cancel\" )\n{\nbuttonClass = \"Btn_cancel\";\neventHandler = \"fillDataByCancelResult\";\n}\nelse if ( buttonType == \"Delete\" )\n{\nbuttonClass = \"Btn_delete\";\neventHandler = \"fillDataByDeleteResult\";\n}\nelse\n{\n}\n$(\".\"+buttonClass, Head).each(function(){\n$(this).unbind(\"click\");\n$(this).bind(\"click\",function(event){\nvar buttonOBJ = $(this);\nif (buttonOBJ.hasClass(\"disableBtn\")\n||buttonOBJ.hasClass(\"disableLongBtn\"))\n{\nreturn;\n}\nvar Head = buttonOBJ.parents(\".HeadDIV\").eq(0);\nvar template = buttonOBJ.parents(\"[id^='template']\");\nvar ActionBeforePostResult = {result: \"Process\"};\ntemplate.trigger(\"ActionBeforePostByCustom\",[template,ActionBeforePostResult]);\nif (ActionBeforePostResult.result != \"Process\")\n{\nreturn;\n}\nvar ThisInstID = $(\"[id^='_InstID']\",template).val();\nif ( ThisInstID == undefined )\n{\nvar luquidObjUl = $(\"._LuQUID_CONFIG_OBJID\", Head);\nvar objId = $(\"li\", luquidObjUl).eq(0).text();\nvar instId = objId + \"\\\\._OBJ_InstID\";\nThisInstID = $(\"[id^='\"+ instId +\"']\",template).val();\n}\nif ( ThisInstID == -1\n&& (buttonType == \"Cancel\" || buttonType == \"Delete\") )\n{\ntemplate.remove();\nreturn;\n}\nvar ServerAddr = $(\"address span\", Head).text();\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif ( buttonType == \"Apply\" )\n{\nvar formOBJ = $(\".form_content\", template);\nif ( formOBJ.length > 0 && false == formOBJ.valid() )\n{\nreturn;\n}\nelse\n{\nvar IPMACCheckResult = {result: \"checkOK\"};\ntemplate.trigger(\"wholeIPorMACCheck\",[template,IPMACCheckResult]);\nif (IPMACCheckResult.result != \"checkOK\")\n{\nreturn;\n}\nvar formObj = $(\".form_content\", template);\nvar txtInputObjs = $(\"input[type='text']\", formObj);\ntxtInputObjs.each(function(){\nvar obj = $(this);\nvar rules = obj.rules();\nif (rules.integer)\n{\nvar intStr = obj.val();\nvar sign, digits;\nif ( intStr.charAt(0) == '-' )\n{\nsign = \"-\";\ndigits = intStr.substring(1);\n}\nelse\n{\nsign = \"\";\ndigits = intStr;\n}\nwhile(digits.charAt(0) == '0' && digits.length > 1)\n{\ndigits = digits.substring(1);\n}\nintStr = sign + digits;\nobj.val(intStr);\n}\n});\nvar passObj = $(\".passRules\",template);\nfor(var i=0;i<passObj.length;i++)\n{\nif(passObj.eq(i).is(\":visible\"))\n{\nvar passVal = passObj.eq(i).val();\nif(passVal != \"\t\t\t\t\t\t\" &&(!(getPwdLevel(passVal,\"\")) || template.find(\".redFont\").text() == \"Weak\"))\n{\nvar msg = \" Current password is weak,a strong password should contain characters,digits and special symbols. Are you sure to continue?\";\nvar confirmLayerOBJ = IniConfirm(msg);\n$(\"#confirmOK\",confirmLayerOBJ).bind(\"click\", {FuncOBJ: template}, function(event){\ndataPost(buttonType, eventHandler, ServerAddr, template, undefined, IfShowWaitTipTmp);\n});\nreturn;\n}\n}\n}\n}\n}\ndataPost(buttonType, eventHandler, ServerAddr, template, undefined, IfShowWaitTipTmp);\n});\n});\n}\nfunction dataPost(actionType, PostSuccHandler, ServerAddr, template, PostData, IfShowWaitTip, asyncFlag)\n{\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif (asyncFlag == undefined)\n{\nasyncFlag = true;\n}\nvar PostDataTmp = \"\";\nif (PostData == undefined)\n{\ntemplate.trigger(\"hiddenValueChangeByCustom\",[template, actionType]);\nPostDataTmp = template.InitialPostData(actionType);\n}\nelse\n{\nPostDataTmp = PostData;\n}\nPostDataTmp += \"&_sessionTOKEN=\"+_sessionTmpToken;\nvar procData = true;\nif (PostDataTmp.indexOf(\"%20\") >= 0)\n{\nprocData = false;\n}\nvar selfHeader = {};\nselfHeader[\"Check\"] = sha256(PostDataTmp);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\n$.ajax({\nurl:ServerAddr,\ntype: 'POST',\ndata: PostDataTmp,\ndataType: 'xml',\nheaders: selfHeader,\nprocessData: procData,\nasync: asyncFlag,\ntimeout: 30000,\ncache:false,\nerror: function(){\nvar ajaxPostFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar errorContainer = $(\".errorHint\",template);\nvar changeArea = $(\".ChangeArea\",template);\nvar collapsibleInst = $(\".collapsibleInst\",template);\nif (template.data(\"defined_ActionByDataPostError\") != true){\nif ( errorContainer != undefined )\n{\n$(\"span\", errorContainer).text(ajaxPostFailHint);\nerrorContainer.showIt(true);\nif ( changeArea != undefined )\n{\nchangeArea.showIt(true);\n}\nif ( collapsibleInst != undefined )\n{\ncollapsibleInst.addClass(\"instNameExp\");\n}\ntemplate.showIt(true);\n}\nshowWaitTip(false);\n}\nelse\n{\ntemplate.trigger(\"ActionByDataPostError\");\n}\n},\nsuccess: function(xml){\n_LuQUID_setTemplateDefEvents(template, PostSuccHandler);\ntemplate.trigger(PostSuccHandler,[xml,template]);\nif (template.hasError(xml,\"_noExist\") == 0)\n{\n$(\".SpecialPassword\", template).each(function(i){\n$(this).val(\"\t\t\t\t\t\t\");\n});\n}\nvar formObj = $(\".form_content\", template);\nvar errObjs = $(\".errorLabelWraper > .error\", formObj);\nerrObjs.attr(\"style\", \"display:none\");\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n}\nfunction dataPostJson(PostSuccHandler, ServerAddr, template, PostData, IfShowWaitTip, asyncFlag)\n{\nvar IfShowWaitTipTmp = IfShowWaitTip;\nif ( IfShowWaitTipTmp == undefined )\n{\nIfShowWaitTipTmp = true;\n}\nif (asyncFlag == undefined)\n{\nasyncFlag = true;\n}\nPostData[\"_sessionTOKEN\"] = _sessionTmpToken;\nvar procData = true;\nvar postDataStr = \"\";\nfor(var key in PostData) {\npostDataStr += key + \"=\" + encodeURIComponent(PostData[key]) + \"&\";\n}\npostDataStr = postDataStr.substring(0,postDataStr.length - 1);\nif (postDataStr.indexOf(\"%20\") >= 0)\n{\nprocData = false;\n}\nvar selfHeader = {};\nselfHeader[\"Check\"] = sha256(postDataStr);\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(true);\n}\n$.ajax({\nurl:ServerAddr,\ntype: 'POST',\ndata: PostData,\ndataType: 'json',\nheaders: selfHeader,\nprocessData: procData,\nasync: asyncFlag,\ntimeout: 30000,\ncache:false,\nerror: function(){\nvar ajaxPostFailHint = \"The server is not available now. Please refresh page to reload. \";\nvar errorContainer = $(\".errorHint\",template);\nvar changeArea = $(\".ChangeArea\",template);\nvar collapsibleInst = $(\".collapsibleInst\",template);\nif (template.data(\"defined_ActionByDataPostError\") != true){\nif ( errorContainer != undefined )\n{\n$(\"span\", errorContainer).text(ajaxPostFailHint);\nerrorContainer.showIt(true);\nif ( changeArea != undefined )\n{\nchangeArea.showIt(true);\n}\nif ( collapsibleInst != undefined )\n{\ncollapsibleInst.addClass(\"instNameExp\");\n}\ntemplate.showIt(true);\n}\nshowWaitTip(false);\n}\nelse\n{\ntemplate.trigger(\"ActionByDataPostError\");\n}\n},\nsuccess: function(data){\nif(data.tError.IF_ERRORID == 0){\ntemplate.trigger(PostSuccHandler,[data,template]);\n}else{\nvar ajaxFailHint = \"Page request failed, please try again!\";\n$(\".errorHint span\",template).text(ajaxFailHint);\n$(\".errorHint\",template).showIt(true);\n}\nif ( IfShowWaitTipTmp == true )\n{\nshowWaitTip(false);\n}\n}\n});\n}\nfunction focusAndSelectInput(jqObj)\n{\nvar disValue = jqObj.attr(\"disabled\");\nif (disValue != \"disabled\" && disValue != true)\n{\njqObj.focus();\njqObj.select();\n}\n}\nfunction FocusAutoJump(obj,value,e)\n{\nvar objJQ = $(obj);\nvar prevOBJ = objJQ.prev(\"input\");\nvar nextOBJ = objJQ.next(\"input\");\nvar valLen = value.length;\nvar keynum;\nif (window.event)\n{\nkeynum = e.keyCode;\n}\nelse if (e.which)\n{\nkeynum = e.which;\n}\nvar temp = value.substring(valLen-1, valLen);\nif (\".\" == temp && objJQ.hasClass(\"ip\") && 0 != valLen)\n{\nobjJQ.val(value.substring(0, valLen-1))\nif (\".\" != value)\n{\nfocusAndSelectInput(nextOBJ);\n}\n}\nif (valLen == obj.maxLength)\n{\nif (nextOBJ.length <= 0)\n{\nreturn;\n}\nif (9 != keynum && 16 != keynum && 35 != keynum && 36 != keynum &&\n37 != keynum && 38 != keynum && 39 != keynum && 40 != keynum &&\n46 != keynum && 8 != keynum && objJQ.valid() == 1)\n{\nfocusAndSelectInput(nextOBJ);\n}\n}\nelse if (valLen == 0 && 37 == keynum)\n{\nif (prevOBJ.length <= 0)\n{\nreturn;\n}\nfocusAndSelectInput(prevOBJ);\n}\nelse\n{\nreturn;\n}\n}\nfunction autoJumpBack(obj,value,e)\n{\nvar objJQ = $(obj);\nvar prevOBJ = objJQ.prev(\"input\");\nvar nextOBJ = objJQ.next(\"input\");\nvar valLen = value.length;\nvar keynum;\nif (window.event)\n{\nkeynum = e.keyCode;\n}\nelse if (e.which)\n{\nkeynum = e.which;\n}\nif (8 == keynum && valLen == 0)\n{\nif (prevOBJ.length <= 0)\n{\nreturn;\n}\nfocusAndSelectInput(prevOBJ);\n}\n}\njQuery.fn.FillIPorMacDataBySplit = function(subid,Delimiter,length) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar value = IPOBJ.val();\nif ( !value )\n{\nreturn;\n}\nvar temp= value.split(Delimiter);\nif (length != temp.length)\n{\nreturn;\n}\nfor(var i=0; i<length; i++)\n{\nvar fillOBJ = $(\"[id^='\"+subid+i+\"']\",containerOBJ);\nfillOBJ.val(temp[i]);\n}\n};\njQuery.fn.FillIPorMacDataToInput = function(subid) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar value = IPOBJ.val();\nif ( !value )\n{\nreturn\n}\nvar fillOBJ = $(\"[id^='\"+subid+\"']\",containerOBJ);\nfillOBJ.val(value);\n};\njQuery.fn.FillIPorMacDataCombination = function(subid,Delimiter,length) {\nvar IPOBJ = $(this);\nif ( IPOBJ.length == 0 )\n{\nreturn;\n}\nvar containerOBJ = IPOBJ.parents(\"[id^='template_']\");\nvar temp = \"\";\nfor(var i=0; i<length; i++)\n{\nvar tempObj = $(\"[id^='\"+subid+i+\"']\",containerOBJ);\nif(0!=i)\n{\ntemp += Delimiter;\n}\nvar tempValue = tempObj.val();\nif ( !tempValue )\n{\ntempValue = \"\";\n}\ntemp += tempValue;\ntempObj.addClass(\"PostIgnore\");\n}\nIPOBJ.val(temp);\nreturn temp;\n};\njQuery.fn.checkIPorMACbyApply = function(checkIPorMACObj, template, IPMACCheckResult){\nvar breakFlag = 0;\n$.each(checkIPorMACObj, function(key, value){\nif (breakFlag != 0)\n{\nreturn false;\n}\nif ($(\"[id^='sub_\"+key+\"']\",template).is(\":visible\") != true)\n{\nreturn true;\n}\nvar labelId = value.labelId;\nvar paraName = \"\";\nvar paraNameObj = template.find(\"label[for^='\"+labelId+\"\\\\:']\");\nif ( paraNameObj.length <= 0 )\n{\nparaNameObj = template.find(\"label[for='\"+labelId+\"']\");\n}\nif ( paraNameObj.length > 0 )\n{\nparaNameObj.each(function(){\nvar labelTmp = $(this);\nif (labelTmp.hasClass(\"error\"))\n{\nreturn true;\n}\nparaName = labelTmp.text();\nreturn false;\n});\n}\nvar elementType = value.eleType;\nif (elementType == \"IP\")\n{\nvar IPObj = $(\"[id^='\"+key+\"']\",template);\nIPObj.FillIPorMacDataCombination(\"sub_\"+key, \".\", 4);\nvar ipValue = IPObj.val();\nif (value.rules != undefined)\n{\n$.each(value.rules, function(k, v){\nvar ipRet = checkWholeIPv4(k, v, ipValue);\nif (ipRet[0] == false)\n{\nvar errMsg = getMsgofWholeMACIPCheck(ipRet, value, ipValue, paraName);\n$(\".errorHint\",template).show();\n$(\".errorHint span\",template).text(errMsg);\nIPMACCheckResult.result = \"checkFail\";\nbreakFlag = 1;\nreturn false;\n}\nelse\n{\n$(\".errorHint\",template).hide();\n}\n});\n}\n}\nelse if (elementType == \"MAC\")\n{\nvar MACObj = $(\"[id^='\"+key+\"']\",template);\nMACObj.FillIPorMacDataCombination(\"sub_\"+key, \":\", 6);\nvar macValue = MACObj.val();\nif (value.rules != undefined)\n{\n$.each(value.rules, function(k, v){\nvar macRet = checkWholeMac(k, v, macValue);\nif (macRet[0] == false)\n{\nvar errMsg = getMsgofWholeMACIPCheck(macRet, value, macValue, paraName);\n$(\".errorHint\",template).show();\n$(\".errorHint span\",template).text(errMsg);\nIPMACCheckResult.result = \"checkFail\";\nbreakFlag = 1;\nreturn false;\n}\nelse\n{\n$(\".errorHint\",template).hide();\n}\n});\n}\n}\nelse\n{\nconsoleLog(\"ElementType +'\"+elementType+\"' is not supported now!\")\n}\n});\n};\njQuery.fn.setPromptCheckJSON = function(checkJSONTempObj, template){\nvar templateID = template.attr(\"id\");\nvar instIndex = templateID.match(/\\d+$/);\nvar suffix = \"\";\nif ( instIndex )\n{\nsuffix = \":\"+instIndex;\n}\nvar checkJSONInstObj = {\"groups\":{}, \"rules\":{}, \"messages\":{}};\nif ( checkJSONTempObj.groups != undefined )\n{\n$.each(checkJSONTempObj.groups, function(key, value) {\nvar valJSONStr = value;\nvar idArr = value.split(\" \");\nfor ( var i=0; i<idArr.length; i++ )\n{\nidArr[i] += suffix;\n}\nvalJSONStr = idArr.join(\" \");\nvar parameterJSON = eval(\"({'\"+key+suffix+\"':'\" + valJSONStr + \"'})\");\n$.extend(checkJSONInstObj.groups, parameterJSON);\n});\n}\nif ( checkJSONTempObj.rules != undefined )\n{\n$.each(checkJSONTempObj.rules, function(key, value) {\nvar parameterJSON = {};\nparameterJSON[key + suffix] = value;\n$.ext",
          "body_murmur": 2044468638,
          "body_sha256": "1dd9d8c1d82b33dfed32ce1e37a4129e175bd32e75db7c097100eaa4fffdfe84",
          "content_length": 149583,
          "favicon": {
            "md5_hash": "5e966bb5036dc2624a0187a91e59d3dd",
            "murmur_hash": 459900502,
            "path": "https://182.52.164.114:443/img/favicon.ico",
            "size": 1150
          },
          "headers": {
            "accept_ranges": [
              "bytes"
            ],
            "cache_control": [
              "no-cache,no-store"
            ],
            "content_length": [
              "149583"
            ],
            "content_security_policy": [
              "frame-ancestors 'self' data:"
            ],
            "content_type": [
              "text/html; charset=utf-8"
            ],
            "server": [
              "ZTE web server 1.0 ZTE corp 2015."
            ],
            "set_cookie": [
              "SID_HTTPS_=9863c00fc2805727bc371c1946d5e3d9393d93ee93d8960f44d985f0da821710; PATH=/; HttpOnly; Secure",
              "_TESTCOOKIESUPPORT_HTTPS_=1; PATH=/; HttpOnly; Secure"
            ],
            "x_content_type_options": [
              "nosniff"
            ],
            "x_frame_options": [
              "SAMEORIGIN"
            ],
            "x_xss_protection": [
              "1; mode=block"
            ]
          },
          "protocol": "HTTP/1.1",
          "request": {
            "headers": {
              "accept": [
                "*/*"
              ],
              "user_agent": [
                "Mozilla/5.0 (compatible; Odin; https://docs.getodin.com/)"
              ]
            },
            "method": "GET",
            "url": {
              "host": "182.52.164.114",
              "path": "",
              "scheme": "https"
            }
          },
          "status_code": 200,
          "title": "H8102E"
        },
        "tls": {
          "certificate": {
            "extensions": {
              "basic_constraints": {
                "is_ca": true
              },
              "key_usage": {
                "certificate_sign": false,
                "content_commitment": false,
                "crl_sign": false,
                "data_encipherment": false,
                "decipher_only": false,
                "digital_signature": true,
                "encipher_only": false,
                "key_agreement": false,
                "key_encipherment": true,
                "non_repudiation": true
              }
            },
            "fingerprint_md5": "A601C9F7D23FE6BFE93F884C1E1AE804",
            "fingerprint_sha1": "DB2CF636B2091612BDDF1E591706D472B6400CBD",
            "fingerprint_sha256": "4CAA880F5DB7A65CB4554B8A07D7D178F4BC8076FA18A83A980E805E18998532",
            "issuer": {
              "common_name": [
                "ZTE-ROOT-CA"
              ],
              "country": [
                "CN"
              ],
              "email_address": [
                "[email protected]"
              ],
              "locality": [
                "Shenzhen"
              ],
              "organization": [
                "ZTE"
              ],
              "organizational_unit": [
                "Wireline Product R&D Institute"
              ],
              "province": [
                "GuangDong"
              ]
            },
            "issuer_dn": "/C=CN/ST=GuangDong/L=Shenzhen/O=ZTE/OU=Wireline Product R&D Institute/CN=ZTE-ROOT-CA/[email protected]",
            "jarm": "29d14d00029d29d00029d14d29d29df26cd45df722aff084b72395f8d18d1b",
            "redacted": false,
            "revocation": {
              "ocsp": {
                "reason": "UNKNOWN",
                "revoked": false
              }
            },
            "serial_number": "10896366476775576542",
            "signature": {
              "algorithm": {
                "name": "SHA512-RSA",
                "oid": "1.2.840.113549.1.1.13"
              },
              "self_signed": false,
              "value": "NzYxNTUyYWEyNTk3MDA0NTZmOTE5ZTlhN2M0MzIwNWQxNjQyZGExOGE3OTI1Njg4YTk2MWYwYWEwZDk0OTU5MmRkODk0MmJlMDJhNDI1YWRmNWM3Mzk0YTBiNDU1ZDVmODRmN2EzZjczN2JkYWM1Yjc4YmQ3YjFlNzY5YTMyY2E1MzJlOTg0NTM1MTIwZmZlYjg3YjY4MmE3OGE4MDFhNmFlOGQzZWVmYjM5NTM4ODRiYjYyZmI1ZDRjMjFmZGQ1OThmMTAzNTAyZGYxYjA2YWUxYmU0ZGQ4NTMzNjk0YjBlZmUyOWJkNjY2YTRlNGZmYjBmNTYxNjYwMDY0MTY5ZThiOTIwZjkwNzUzMmFmMWFmMDhmZDM2ZmQzNWI0ZGNlNDZjYzhkZWRkODk0YjBjNzJhZjBhN2YwODM1ZDQ3NWFiMDc2MTQzNzQ5ZGIwZDU5MTI4MzRjNDNjMGMyYjU2NDg2NWJkMmEyODQ0MzhhZjI5MTgzYTY0OWRlOGE3OGE4ODkwMjY3NzJhM2U0OGE1OGMxZWVjNzBlODAzZjhjYzE0NDFkYjBkNDRjOGE5MzRkM2IwNzMwZTYzOTRhMDAzMGFjOGZkMzcxM2FjNmJlMTRiMWM4MTI1MDdhYWRmM2Y1MDE5NjFjZWNjNzQzYTViMzVjMjQ3ZWYyNzVlMTUyZjk="
            },
            "subject": {
              "common_name": [
                "192.168.1.1"
              ],
              "country": [
                "CN"
              ],
              "email_address": [
                "[email protected]"
              ],
              "locality": [
                "Nanjing"
              ],
              "organization": [
                "ZTE"
              ],
              "organizational_unit": [
                "FN Nanjing Software Development Dept III"
              ],
              "province": [
                "JiangSu"
              ]
            },
            "subject_alt_name": {
              "dns_names": [
                "192.168.1.1"
              ],
              "extended_dns_names": []
            },
            "subject_dn": "/C=CN/ST=JiangSu/L=Nanjing/O=ZTE/OU=FN Nanjing Software Development Dept III/CN=192.168.1.1/[email protected]",
            "subject_key_info": {
              "_key": "rsa",
              "dh": [],
              "dsa": [],
              "ecdsa": [],
              "fingerprint_sha256": "5d1013f24374f498e411193e1b70b757630b27a2b02054e7e9804490673f1327",
              "key_algorithm": "RSA",
              "rsa": {
                "exponent": 65537,
                "length": 2048,
                "modulus": "MHhiZDA5MDRmYzIwZjJiOGRjMjM0MGRkYzZjNWQzOTlmYWIxZmY3ZDZjMzE1NmI1MmM2ZGU3OTgzNDhkOTgxZWY0N2Y4YmFlOTBjOTNkOTRiMGJjMjZkMWVlZGZiYTU5MTQ3NDMyMWY3M2IyYzdlMjBjZTk4NjU2NTk1OGM3ZDQ3YTk3ZTFiZGUzZDVjNGYwZTY4YTAzZDRjOTZhNjYyODYxNDZmYmZiNzRjMzIxOTM0OTY2NjcwYjZmYWIxMWUxYzlhMzQ0NzU2NTQ0MmYzYTg1MmM2NzRjOWU5YWQ4ODBmMzM5MmVlZDIxMTViMTgwYmE4NmU1MWI1YzA5ZTg1ZTA3MGU5YWI4YjUwZTljZjg3NDYzNjY1YjllN2JlY2JlYThhMmQyNjg2YmRmNDZiMmQwNTVhMmU2MTQwN2Y4OTNiMDViOTIzNWM0NGQ4ZjhlOWQ5MTE5YmNmM2FkMmNmODQ5MTc0NDYzOGU2NjE3ZGM2ZTVmNDIwZTBiNWVjZDg3MjA1MmQ3MDc0ODk2NmI4N2RhOTNiYmMzOTk1YTFmMGE0YmNlYmEzZDgzYzM5ZTQwNDNhNzc4YTE5MjgyOThlYTk5NWEzM2E4N2UyZDJhOTc3ZmZiOWQ1MmM1NDdjMDEzOTk1MTg0OGM2OTVjZTRlNDhlY2I2ZTRhNzQ3NWJjM2YyMw=="
              }
            },
            "tbs_fingerprint": "fdaa9038c1a94220b4aeba2d1b58bcc8b2fa269a50fddef0861afdcc88aef54f",
            "validation_level": "OV",
            "validity": {
              "length_seconds": 473040000,
              "not_after": "2031-07-10T01:32:15",
              "not_before": "2016-07-13T01:32:15"
            },
            "version": 2
          },
          "fingerprint_sha256": "4CAA880F5DB7A65CB4554B8A07D7D178F4BC8076FA18A83A980E805E18998532",
          "precert": false,
          "raw": "MIID6DCCAtCgAwIBAgIJAJc3q5RGrtPeMA0GCSqGSIb3DQEBDQUAMIGhMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3VhbmdEb25nMREwDwYDVQQHEwhTaGVuemhlbjEMMAoGA1UEChMDWlRFMScwJQYDVQQLDB5XaXJlbGluZSBQcm9kdWN0IFImRCBJbnN0aXR1dGUxFDASBgNVBAMTC1pURS1ST09ULUNBMR4wHAYJKoZIhvcNAQkBFg96YW5lQHp0ZS5jb20uY24wHhcNMTYwNzEzMDEzMjE1WhcNMzEwNzEwMDEzMjE1WjCBqDELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0ppYW5nU3UxEDAOBgNVBAcTB05hbmppbmcxDDAKBgNVBAoTA1pURTExMC8GA1UECxMoRk4gTmFuamluZyBTb2Z0d2FyZSBEZXZlbG9wbWVudCBEZXB0IElJSTEUMBIGA1UEAxMLMTkyLjE2OC4xLjExHjAcBgkqhkiG9w0BCQEWD3phbmVAenRlLmNvbS5jbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0JBPwg8rjcI0DdxsXTmfqx/31sMVa1LG3nmDSNmB70f4uukMk9lLC8JtHu37pZFHQyH3Oyx+IM6YZWWVjH1HqX4b3j1cTw5ooD1MlqZihhRvv7dMMhk0lmZwtvqxHhyaNEdWVELzqFLGdMnprYgPM5Lu0hFbGAuoblG1wJ6F4HDpq4tQ6c+HRjZluee+y+qKLSaGvfRrLQVaLmFAf4k7BbkjXETY+OnZEZvPOtLPhJF0RjjmYX3G5fQg4LXs2HIFLXB0iWa4fak7vDmVofCkvOuj2Dw55AQ6d4oZKCmOqZWjOofi0ql3/7nVLFR8ATmVGEjGlc5OSOy25KdHW8PyMCAwEAAaMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQENBQADggEBAHYVUqollwBFb5GemnxDIF0WQtoYp5JWiKlh8KoNlJWS3YlCvgKkJa31xzlKC0VdX4T3o/c3vaxbeL17HnaaMspTLphFNRIP/rh7aCp4qAGmro0+77OVOIS7YvtdTCH91ZjxA1At8bBq4b5N2FM2lLDv4pvWZqTk/7D1YWYAZBaei5IPkHUyrxrwj9Nv01tNzkbMje3YlLDHKvCn8INdR1qwdhQ3SdsNWRKDTEPAwrVkhlvSooRDivKRg6ZJ3op4qIkCZ3Kj5IpYwe7HDoA/jMFEHbDUTIqTTTsHMOY5SgAwrI/TcTrGvhSxyBJQeq3z9QGWHOzHQ6WzXCR+8nXhUvk=",
          "tags": [
            "ov",
            "trusted"
          ]
        }
      },
      "url": "https://182.52.164.114/",
      "_meta": {
        "name": "",
        "desc": "",
        "category": ""
      },
      "last_updated_at": "2025-12-02T07:36:11.823Z"
    }
  ],
  "services_hash": "5473d89d68e9ecd525e697899c2025102d7f68f4fd81bb52906051dbc201c2a9",
  "last_updated_at": "2025-12-02T09:43:24.93Z",
  "banner": [
    "http",
    "tls"
  ],
  "is_vuln": false
}