forked from nsjcy/frontEnd/nsjcy

liuwh
2020-05-27 c9b0f3fa490afc0aeed1df11a723006aba27316b
指纹仪
3 files deleted
22 files added
8 files modified
14412 ■■■■■ changed files
SunshineIns/src/asset/fingerprint/css/box.css 11 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/css/dhtmlx.css 9 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_clearImage.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fingerBg.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fingerBg.png patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fpRegister_clearImage.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fpVerify.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fpVerify_clearImage.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_fpVerify_clearImage.png patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_notFoundMapPic.jpg patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_readCard.png patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_stopReadCard.png patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/image/base_wait.gif patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/js/baseMoth.js 57 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/js/dhtmlxCommon.js 1728 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/js/fingerprint.js 1841 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/js/jquery.js 9420 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/js/main.js 870 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/middleware/zkbioonline.exe patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/指纹比对.html 72 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/指纹登记.html 68 ●●●●● patch | view | raw | blame | history
SunshineIns/src/data/menu.js 6 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/_fetch.js 4 ●●●● patch | view | raw | blame | history
SunshineIns/src/index.jsx 5 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/CriminalExecution.jsx 280 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/Login.jsx 2 ●●● patch | view | raw | blame | history
SunshineLnsMinApp/app.js 4 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/lib/jb_background.png patch | view | raw | blame | history
SunshineLnsMinApp/lib/jb_person.png patch | view | raw | blame | history
SunshineLnsMinApp/lib/jb_phone.png patch | view | raw | blame | history
SunshineLnsMinApp/pages/wjjb/wjjb.js 10 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/zhwj/zhwj.js 23 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/zhwj/zhwj.wxml 2 ●●● patch | view | raw | blame | history
SunshineIns/src/asset/fingerprint/css/box.css
New file
@@ -0,0 +1,11 @@
@CHARSET "UTF-8";
a{text-decoration: none;}
.box{position:absolute;width:450px;left:50%;height:auto;z-index:100;border:1px #ddd solid;padding:1px;}
.box h2{height:10px;font-size:14px;position:relative;padding-left:10px;line-height:10px;color:#fff;}
.box h2 a{position:absolute;right:5px;font-size:12px;color:#fff;}
.box .list{padding:10px;}
.box .list li{height:24px;line-height:24px;}
.box .list li a{color:#aaa;}
.box .list li span{margin:0 5px 0 0;font-family:"宋体";font-size:12px;font-weight:400;color:#ddd;}
.showbtn {font:bold 24px '微软雅黑';}
#bg{background-color:#000000;position:absolute;z-index:99;left:0;top:0;display:none;width:100%;height:100%;opacity:0.3;filter: alpha(opacity=50);-moz-opacity: 0.3;}
SunshineIns/src/asset/fingerprint/css/dhtmlx.css
New file
@@ -0,0 +1,9 @@
/*
Product Name: dhtmlxSuite
Version: 4.0.3
Edition: Professional
License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com
Copyright UAB Dinamenta http://www.dhtmlx.com
*/
.dhtmlxcalendar_ifr{position:absolute;overflow:hidden;background-color:white;}.dhtmlxcalendar_dhx_skyblue{position:absolute;display:block;background-color:white;font-family:Tahoma;font-size:11px;color:black;}.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line{position:relative;display:block;clear:both;margin:0;padding:0;overflow:hidden;width:211px;}.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line li{float:left;position:relative;list-style-type:none;list-style-image:none;text-align:center;vertical-align:middle;cursor:default;overflow:hidden;margin:0;padding:0;}.dhtmlxcalendar_dhx_skyblue.dhtmlxcalendar_in_input{box-shadow:0 0 6px rgba(0,0,0,0.25);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont{position:relative;display:block;width:211px;height:25px;margin:0;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border:1px solid #a4bed4;overflow:hidden;color:black;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-o-user-select:text;user-select:text;-ms-user-select:text;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr{width:211px;height:25px;line-height:25px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow{position:absolute;top:0;width:18px;height:25px;text-align:center;color:inherit;background-position:center center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left{left:4px;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif");opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left_hover{left:4px;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif");opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right{right:4px;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif");opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right_hover{right:4px;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif");opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_year{position:relative;font-weight:bold;color:#34404b;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont{position:relative;display:block;width:211px;margin:0;padding-bottom:1px;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #cbd9e4;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-o-user-select:text;user-select:text;-ms-user-select:text;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line{border-top:1px solid white;padding-left:1px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li{width:29px;height:19px;line-height:19px;margin-right:1px;font-size:9px;background-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell_first{color:#c66200;background-color:#ffe6ae;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont{position:relative;display:block;width:211px;margin:0;padding-bottom:1px;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line{border-top:1px solid white;padding-left:1px;height:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li{color:#909090;background-color:white;border:1px solid white;width:27px;height:24px;line-height:23px;margin-right:1px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_label{width:100%;height:100%;text-align:center;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend{border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_dis{color:#b2b2b2;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday{color:red;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday{color:red;border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_dis{color:red;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_hover{border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_hover{color:red;border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month{color:black;background-color:#ecf4ff;border-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend{color:#c66200;background-color:#fff0d2;border-color:#fff0d2;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date{color:black;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend{color:#c66200;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_dis{color:#b2b2b2;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday{color:red;background-color:#ecf4ff;border-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday{color:red;background-color:#fff0d2;border-color:#fff0d2;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday{color:red;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday{color:red;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_dis{color:red;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_hover{color:black;background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_hover{color:#c66200;background-color:#ffe9bb;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_hover{color:black;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_hover{color:#c66200;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_hover{color:red;background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_hover{color:red;background-color:#ffe9bb;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_hover{color:red;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_hover{color:red;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line div.dhtmlxcalendar_label.dhtmlxcalendar_label_title{background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_mark.gif");background-position:top right;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont{position:relative;display:block;width:211px;height:25px;margin:0;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li{width:211px;height:25px;line-height:24px;color:#34404b;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_time_img{position:absolute;left:66px;top:6px;width:13px;height:13px;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_clock.gif");background-position:center center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_cover{position:absolute;left:1px;background-color:white;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj{position:absolute;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_selector_obj_arrow{position:absolute;bottom:auto;top:0;left:0;width:100%;height:9px;overflow:hidden;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_selector_top.gif");background-position:top center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table{border:1px solid #a4bed4;background-color:white;border-top:none;margin-top:9px;box-shadow:0 0 3px rgba(0,0,0,0.35);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left{width:17px;text-align:center;border-top:1px solid white;padding:0;margin:0;background-color:#ecf4ff;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif");background-position:center center;background-repeat:no-repeat;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left.dhtmlxcalendar_selector_cell_left_hover{background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle{border-top:white 1px solid;border-width:1px 0 0 0;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{width:17px;text-align:center;border-top:1px solid white;border-width:1px 0 0 0;background-color:#ecf4ff;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif");background-position:center center;background-repeat:no-repeat;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right.dhtmlxcalendar_selector_cell_right_hover{background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul{display:block;clear:both;margin:0 0 0 1px;padding:0;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li{float:left;font-family:Tahoma;font-size:10px;color:black;list-style-type:none;list-style-image:none;text-align:center;vertical-align:middle;margin:0 1px 0 0;padding:0;background-color:#e9f3ff;border:1px solid #e9f3ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_active{background-color:#b5deff;border-color:#a1ceed;color:black;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_hover{background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{display:none;width:0;border:0 solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line{height:22px;border-top:none;border-bottom:1px solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell{width:33px;height:20px;line-height:19px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_selector_obj_arrow,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_selector_obj_arrow{top:auto;bottom:0;background-image:url("imgs/dhxcalendar_skyblue/dhxcalendar_selector_bottom.gif");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line{height:19px;border-top:none;border-bottom:1px solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell{width:21px;height:17px;line-height:16px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{display:none;width:0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table{margin-top:0;margin-bottom:9px;border-top:1px solid #a4bed4;border-bottom:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_year,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_hours,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes4,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes5{display:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month div.dhtmlxcalendar_area_selector_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_year div.dhtmlxcalendar_area_selector_year,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_area_selector_hours,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes4,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes5{display:block;}.dhtmlxcalendar_dhx_skyblue span.dhtmlxcalendar_label_minutes span.dhtmlxcalendar_selected_date{border-bottom:2px solid red;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:24px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_first,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:block;width:21px;color:#638eb1;background-color:#d9eaff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:block;width:19px;color:#638eb1;background-color:#d9eaff;border-color:#d9eaff;font-size:10px;}div.dhtmlxcalendar_skin_detect{position:absolute;display:block;visibility:hidden;left:-100px;top:0;width:10px;height:10px;margin:0;padding:0;border:none;overflow:hidden;}div.dhxcombo_dhx_skyblue{position:relative;border:1px solid #a4bed4;overflow:hidden;vertical-align:middle;background-color:white;font-size:1px;height:22px;}div.dhxcombo_dhx_skyblue input.dhxcombo_input{position:relative;top:0;left:1px;height:22px;line-height:21px;*height:20px;*line-height:19px;border:0 solid white;outline:0 solid white;padding:0;margin:0 0 0 2px;background-color:white;font-family:Tahoma;font-size:12px;color:black;vertical-align:middle;}div.dhxcombo_dhx_skyblue div.dhxcombo_select_button{position:absolute;width:18px;height:18px;top:1px;right:1px;font-size:1px;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-radius:2px;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;}div.dhxcombo_dhx_skyblue div.dhxcombo_select_button div.dhxcombo_select_img{position:relative;width:100%;height:100%;background-image:url("imgs/dhxcombo_skyblue/dhxcombo_arrow_down.gif");background-repeat:no-repeat;background-position:center center;}div.dhxcombo_dhx_skyblue div.dhxcombo_top_image{position:absolute;left:0;top:0;width:26px;height:22px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue{position:absolute;font-family:Tahoma;font-size:12px;color:black;border:1px solid #a4bed4;box-shadow:0 2px 3px #ccc;background-color:#e7f1ff;border-bottom-left-radius:2px;border-bottom-right-radius:2px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow-x:none;overflow-y:auto;-moz-transition:height .15s ease 0s;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option{position:relative;font-size:inherit;height:20px;line-height:19px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;vertical-align:middle;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option.dhxcombo_option_selected{background-color:#b5deff!important;border-top:1px solid #a1ceed!important;border-bottom:1px solid #a1ceed!important;color:black;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text{position:relative;padding:0 4px;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_chbx{position:relative;padding:0 4px 0 4px;margin-left:20px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;white-space:nowrap;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox{position:absolute;left:1px;top:1px;width:20px;height:20px;background-image:url("imgs/dhxcombo_skyblue/dhxcombo_chbx.gif");background-repeat:no-repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_0{background-position:0 0;}div.dhxcombolist_dhx_skyblue .dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_1{background-position:-18px 0;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_image{position:relative;padding:0 4px 0 4px;margin-left:20px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;white-space:nowrap;}div.dhxcombo_dhx_skyblue div.dhxcombo_top_image div.dhxcombo_image,div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_image{position:absolute;left:3px;top:1px;width:20px;height:20px;background-repeat:no-repeat;background-position:center center;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;overflow:hidden;cursor:default;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled{border:1px solid #ccc;background-color:#fafafa;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled input.dhxcombo_input{color:#b2b2b2;background-color:#fafafa;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button{border-color:#ccc;background-color:#fefefe;background:linear-gradient(#fefefe,#f4f4f4);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fefefe,endColorStr=#f4f4f4) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button div.dhxcombo_select_img{background-image:url("imgs/dhxcombo_skyblue/dhxcombo_arrow_down_dis.gif");}.dhxgrid_combo_icon{position:absolute;z-index:1;top:0;right:0;}div.dhxcombo_dhx_skyblue.dhxcombo_in_grid{border-top:1px solid white;border-bottom:0 solid white;border-left:1px solid white;border-right:1px solid white;margin-left:-4px;}div.dhxcombo_dhx_skyblue.dhxcombo_in_grid input.dhxcombo_input{height:18px;border-left:2px solid white;line-height:17px;}div.dhxcombo_dhx_skyblue.dhxcombo_in_grid div.dhxcombo_select_button{top:0;}.dhxcombo_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxcolorpicker_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_g_area{position:absolute;width:254px;height:272px;border:1px solid #a4bed4;background-color:#e7f1ff;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory{height:317px!important;}.dhtmlxcp_dhx_skyblue .dhxcp_sub_area{margin:1px;width:252px;height:270px;background-color:#e7f1ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_sub_area{height:229px!important;}.dhtmlxcp_dhx_skyblue .dhxcp_g_color_area{padding:10px;width:232px;height:122px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector{position:absolute;width:210px;height:120px;background-image:url("imgs/dhxcp_skyblue/dhxcp_colors.png");background-repeat:no-repeat;border:1px solid #a4bed4;cursor:pointer;float:left;}.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area{border:1px solid #a4bed4;position:relative;height:120px;width:10px;cursor:pointer;float:right;}.dhtmlxcp_dhx_skyblue .dhxcp_ie_gradient{height:120px;width:10px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_v_line{position:absolute;width:0;height:120px;border-left:1px solid #fff;cursor:pointer;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line,.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line{position:absolute;height:0;border-top:1px solid #fff;cursor:pointer;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line{width:210px;}.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line{width:10px;}.dhtmlxcp_dhx_skyblue .dhxcp_g_input_area{padding:0 10px;width:232px;height:78px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_value_cont{width:60px;height:82px;float:left;}.dhtmlxcp_dhx_skyblue .dhxcp_value_color{width:56px;height:30px;border:1px solid #a4bed4;}.dhtmlxcp_dhx_skyblue .dhxcp_value{width:49px;height:20px;border:1px solid #a4bed4;border-radius:0;background-color:white;margin:5px 0 0 0;padding:1px 3px;font-family:Tahoma;font-size:11px;color:black;text-align:left;}.dhtmlxcp_dhx_skyblue .dhxcp_inputs_cont{border:none;border-spacing:0;width:161px;height:78px;float:right;}.dhtmlxcp_dhx_skyblue .dhxcp_label_hsl,.dhtmlxcp_dhx_skyblue .dhxcp_label_rgb{font-family:Tahoma;font-size:11px;color:black;text-align:right;padding:0 3px 0 0;}.dhtmlxcp_dhx_skyblue td.dhxcp_input_hsl,.dhtmlxcp_dhx_skyblue td.dhxcp_input_rgb{width:27px;border:none;padding:3px 0;margin:0;}.dhtmlxcp_dhx_skyblue input.dhxcp_input_hsl,.dhtmlxcp_dhx_skyblue input.dhxcp_input_rgb{width:25px;height:19px;border:1px solid #a4bed4;border-radius:0;background-color:white;font-family:Tahoma;font-size:11px;color:black;text-align:right;padding:0 3px;line-height:18px;}.dhtmlxcp_dhx_skyblue .dhxcp_g_memory_area{width:232px;height:0;overflow:hidden;border-top:1px solid #fff;margin:10px;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_button_cont{width:232px;margin:0;height:24px;}.dhtmlxcp_dhx_skyblue button{outline:none;border-radius:2px;border:1px solid #a4bed4;font-family:Tahoma;font-size:11px;color:black;padding:0;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcp_dhx_skyblue button:hover{background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcp_dhx_skyblue button:active{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #ccc inset;}.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory{width:232px;height:24px;}.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory .dhxcp_label_bm{background-image:url("imgs/dhxcp_skyblue/dhxcp_icon_save.png");background-repeat:no-repeat;display:inherit;padding-left:15px;background-position:0 4px;height:18px;line-height:18px;width:80px;margin:1px auto;white-space:nowrap;text-align:left;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_els_cont{width:232px;height:25px;margin-top:3px;text-align:center;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el{width:24px;height:24px;background-color:#fff;border:1px solid #a4bed4;display:inline-block;margin:0 1px;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_select{border:1px dashed black!important;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_next{border:1px dashed red!important;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_g_memory_area{height:55px!important;border-top:none!important;margin:5px 10px 5px 10px;}.dhtmlxcp_dhx_skyblue .dhxcp_buttons_area{padding:0 10px;width:232px;height:26px;text-align:right;margin:0;}.dhtmlxcp_dhx_skyblue .dhx_button_save,.dhtmlxcp_dhx_skyblue .dhx_button_cancel{padding:2px 10px;margin:1px;height:24px;line-height:12px;overflow:hidden;text-align:center;}.dhxcp_colorBox{float:right;}.dhxcp_colorInput{float:left;}.dhxcp_frm{position:absolute;background-color:white;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);width:256px;height:274px;}.dhtmlxcp_dhx_skyblue.dhtmlxcp_in_form .dhxcp_g_area{padding:5px;border:1px solid #a4bed4;box-shadow:0 0 9px rgba(0,0,0,0.35);}.dhxslider_skin_detect{position:absolute;left:0;top:-100px;border:0 solid white;width:10px;height:10px;margin:0;padding:0;overflow:hidden;}.dhtmlxslider_dhx_skyblue .dhxsl_hidden{display:none;}.dhtmlxslider_dhx_skyblue .dhxsl_container{position:relative;float:left;clear:left;margin:0;padding:1px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_hr{margin-top:6px;}.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_vr{margin-left:6px;}.dhtmlxslider_dhx_skyblue .dhxsl_runner{position:absolute;margin:0;padding:0;overflow:hidden;width:16px;height:16px;border:1px solid #a4bed4;border-radius:2px;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxslider_dhx_skyblue .dhxsl_runner_dis{border-color:#c9c9c9;background-color:#e8e8e8;background:linear-gradient(#e8e8e8,#dedede);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e8e8e8,endColorStr=#dedede) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxslider_dhx_skyblue .dhxsl_track{border:1px solid #a4bed4;border-radius:2px;background-color:white;margin:0;padding:0;overflow:hidden;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_vr .dhxsl_track{height:100%;width:3px;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_hr .dhxsl_track{width:100%;height:3px;}.dhtmlxslider_dhx_skyblue .dhxsl_track_dis{border:1px solid #c9c9c9;background-color:#f0f0f0;}div.dhx_popup_dhx_skyblue{position:absolute;}div.dhx_popup_dhx_skyblue div.dhx_popup_area{position:relative;margin:10px;padding:3px 0;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;background-color:#e7f1ff;border-radius:2px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td{font-family:Tahoma;font-size:11px;color:black;text-align:left;vertical-align:middle;padding:0 8px;height:24px;line-height:23px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;white-space:nowrap;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td div.dhtmlxcalendar_dhx_skyblue{position:relative;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep{font-size:1px;padding:2px 0;position:relative;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep div.dhx_popup_sep{position:relative;font-size:1px;line-height:1px;height:0;width:100%;border-top:1px solid #a4bed5;overflow:hidden;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:first-child{padding-left:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:last-child{padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr:hover td.dhx_popup_td{background-color:#b5d8ff;border-top:1px solid #8dcef4;border-bottom:1px solid #8dcef4;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode:hover td.dhx_popup_td{background:none;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td{padding-top:8px!important;padding-bottom:8px!important;height:auto;line-height:inherit;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-o-user-select:text;user-select:text;-ms-user-select:text;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td .dhtmlxcalendar_container.dhtmlxcalendar_skin_dhx_skyblue{position:relative!important;background-image:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxtree_dhx_skyblue{background:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxeditor_dhx_skyblue{border:1px solid #a4bed4;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area{position:relative;background-color:#e7f1ff;border:0 solid white;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area div.dhxcp_sub_area{background:#e7f1ff;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie{box-shadow:0 0 6px #ccc;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.dhxnode td.dhx_popup_td{height:1em;line-height:1em;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_single{padding-left:16px;padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_first{padding-left:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_last{padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.tr_hover td.dhx_popup_td{background-color:#b5d8ff;border-top:1px solid #8dcef4;border-bottom:1px solid #8dcef4;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow{position:absolute;background-repeat:no-repeat;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_bottom{width:19px;height:16px;background-image:url("imgs/dhxpopup_skyblue/dhxpopup_arrow_bottom.gif");background-position:top center;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_top{width:19px;height:16px;background-image:url("imgs/dhxpopup_skyblue/dhxpopup_arrow_top.gif");background-position:bottom center;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_right{width:16px;height:19px;background-image:url("imgs/dhxpopup_skyblue/dhxpopup_arrow_right.gif");background-position:center left;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_left{width:16px;height:19px;background-image:url("imgs/dhxpopup_skyblue/dhxpopup_arrow_left.gif");background-position:center right;}div.dhx_popup_skin_detect{position:absolute;display:block;visibility:hidden;left:-100px;top:0;width:10px;height:10px;margin:0;padding:0;border:none;overflow:hidden;}.dhxmenu_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxMenu_dhx_skyblue_Middle{position:relative;height:30px;border:none;overflow:hidden;background-color:#ebebeb;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxMenu_dhx_skyblue_Middle div.top_sep{float:left;position:relative;height:22px;width:0;border-left:1px solid #ddd;margin:4px 2px 0 0;line-height:1px;font-size:1px;overflow:hidden;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxMenu_dhx_skyblue_Middle img.dhtmlxMenu_TopLevel_Item_Icon{float:left;margin:2px 3px 0 3px;width:18px;height:18px;}.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_right{position:absolute;top:8px;left:none;right:8px;font-family:Tahoma;font-size:11px;color:black;cursor:default;}.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_left{position:absolute;top:8px;right:none;left:8px;font-family:Tahoma;font-size:11px;color:black;cursor:default;}.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_left{float:left;}.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_right{float:right;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected{position:relative;float:left;font-family:Tahoma;font-size:11px;color:black;cursor:default;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;height:22px;line-height:22px;vertical-align:middle;margin:3px 2px 0 0;padding:0 3px;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal div.top_level_text,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled div.top_level_text,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected div.top_level_text{float:left;margin:0 3px;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled{border:1px solid #ebebeb;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled{color:#999!important;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected{border:1px solid #a1ceed;background-color:#b5deff;color:black;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;padding:3px 0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px;background-color:#e7f1ff;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td{font-family:Tahoma;font-size:11px;color:black;line-height:normal;padding:0 3px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected td{background-color:#b5deff;border-top:1px solid #a1ceed;border-bottom:1px solid #a1ceed;color:black;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.sub_item_hk{color:#333!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon{width:18px;text-align:center;vertical-align:middle;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon img.sub_icon{float:left;margin:0;width:18px;height:18px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_item_text{padding:0 12px 0 1px;height:22px;line-height:21px;white-space:nowrap;text-align:left;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_item_text{color:#999!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk{padding-left:8px;padding-right:8px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk div.sub_item_hk{font-family:Tahoma;font-size:10px;color:#4d4d4d;text-align:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis td.sub_item_hk div.sub_item_hk{color:#9b9b9b!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow{width:4px;margin:0 2px 0 5px;height:22px;background-image:url("imgs/dhxmenu_skyblue/dhxmenu_subar.gif");background-repeat:no-repeat;background-position:0 0;overflow:hidden;font-size:1px;float:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.complex_arrow{background-position:-4px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.complex_arrow{background-position:-8px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow_loading{width:11px;height:22px;background-position:center center;background-repeat:no-repeat;background-image:url("imgs/dhxmenu_skyblue/dhxmenu_loader.gif");float:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon{float:left;margin:0;width:18px;height:18px;background-position:top right;background-repeat:no-repeat;background-image:url("imgs/dhxmenu_skyblue/dhxmenu_chrd.gif");}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_0{background-position:0 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_1{background-position:-18px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_0{background-position:-36px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_1{background-position:-54px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_0{background-position:-72px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_1{background-position:-90px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_0{background-position:-108px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_1{background-position:-126px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon tr.sub_sep td{padding:2px 0;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon div.sub_sep{position:static;font-size:1px;line-height:1px;height:1px;width:100%;border-top:1px solid #a4bed4;}iframe.dhtmlxMenu_IE6CoverFix_dhx_skyblue{position:absolute;border:none;background:#000;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Over,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled{position:relative;font-size:1px;border-bottom:1px solid #a4bed4;background-image:url("imgs/dhxmenu_skyblue/dhxmenu_arrow_up.gif");background-repeat:no-repeat;background-position:center center;padding:8px 0;margin-bottom:3px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled{background-image:url("imgs/dhxmenu_skyblue/dhxmenu_arrow_up_dis.gif");}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Over,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled{position:relative;font-size:1px;border-top:1px solid #a4bed4;background-image:url("imgs/dhxmenu_skyblue/dhxmenu_arrow_down.gif");background-repeat:no-repeat;background-position:center center;padding:8px 0;margin-top:3px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled{background-image:url("imgs/dhxmenu_skyblue/dhxmenu_arrow_down_dis.gif");}.dhtmlxribbon_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{background-color:#fff;border:1px solid #a4bed4;}.dhtmlxribbon_dhx_skyblue{overflow:hidden;width:100%;background-color:#e7f1ff;}.dhtmlxribbon_dhx_skyblue .dhxrb_background_area{height:115px;background-color:#e7f1ff;margin:1px;}.dhtmlxribbon_dhx_skyblue .dhxrb_with_tabbar{height:145px;}.dhtmlxribbon_dhx_skyblue div.dhx_cell_tabbar{background-color:#e7f1ff!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_g_area{height:115px;float:left;clear:left;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base{margin:3px;float:left;border:1px solid #a4bed4;background-color:#ddebff;border-radius:2px;height:106px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_items{height:84px;float:left;padding:2px 0;overflow:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base>.dhxrb_block_label{height:18px;line-height:17px;*height:auto;*line-height:1em;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_label{text-align:center;clear:left;font-family:Tahoma;font-size:11px;color:#5f85bb;background-color:#d3e7ff;*padding:1px 3px 4px;*font-size:11px;*font-family:Tahoma,FreeSans;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button{margin:0 2px 5px;float:left;text-align:center;padding:4px 6px;height:72px;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_image{width:48px;height:48px;border:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_label_button{margin:0 auto;cursor:default;font-family:Tahoma;font-size:11px;color:black;line-height:10px;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_invisible{visibility:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block{float:left;margin:0 2px 5px;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_invisible{display:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button{height:21px;margin:1px 3px;float:left;clear:left;padding:3px 4px 0 4px;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row{height:20px;margin:1px 3px;float:left;padding:3px 4px 1px;white-space:nowrap;overflow:hidden;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_buttoncombo_cont{height:22px;padding:0 2px!important;overflow:hidden;white-space:nowrap;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont{height:24px;padding:1px 2px!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo{float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_slider,.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_slider{float:left;margin-right:5px;margin-top:6px;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row center,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group center,.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button center{float:left;margin:0;padding:0;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_slider{float:left;margin-right:5px;margin-top:5px;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_slider{width:16px;margin:2px 0;height:50px;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group{height:19px;float:left;padding:2px 4px 1px;border:1px solid #fff;}.dhtmlxribbon_dhx_skyblue .dhxrb_input{float:left;border:1px solid #a4bed4;height:14px;width:80px;font-family:Tahoma;font-size:11px;color:black;padding:1px 2px;}.dhtmlxribbon_dhx_skyblue .dhxrb_input:disabled{border:1px solid #ccc;background-color:#fafafa;color:#b2b2b2;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_image,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_image,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_image{width:18px;height:18px;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_label_button,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_label_button,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_button{float:left;cursor:default;margin:2px 4px 2px 6px;font-family:Tahoma;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont .dhxrb_label_button{float:left;margin-left:3px;height:18px;line-height:18px;cursor:default;font-family:Tahoma;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_label_checkbox{float:left;margin:2px 4px;cursor:default;font-family:Tahoma;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_disable_text_style,.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_label_checkbox{color:#999!important;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_highlight0{border:1px solid #a4bed4;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_highlight1{border:1px solid #a4bed4;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #afc1d4 inset;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight0{border:1px solid #ddedff;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight1{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #afc1d4 inset;border:0;padding:3px 5px 2px 5px;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_hide{display:none!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_rows{float:left;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_row{float:left;clear:left;margin:0 2px;height:28px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_arrow{padding:0 5px;margin-left:2px;background:url("imgs/dhxribbon_skyblue/dhxribbon_arrow.gif") no-repeat 50%;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_group{border:1px solid #a4bed4;background:#e7f1ff;height:24px;border-radius:2px;float:left;clear:left;margin:1px 3px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_row .dhxrb_group{border:1px solid #a4bed4;background:#e7f1ff;height:24px;border-radius:2px;float:left;margin:1px 3px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_hide{display:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_separator_groupp{height:24px;width:0;border-left:1px solid #c4deff;overflow:hidden;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_checked.dhxrb_item_disable>.dhxrb_checkbox{background-image:url("imgs/dhxribbon_skyblue/dhxribbon_checked_dis.gif");background-repeat:no-repeat;}.dhtmlxribbon_dhx_skyblue .dhxrb_checked .dhxrb_checkbox{background-image:url("imgs/dhxribbon_skyblue/dhxribbon_checked.gif");background-repeat:no-repeat;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_checkbox{border:1px solid #aaa;background-color:#eee;}.dhtmlxribbon_dhx_skyblue .dhxrb_checkbox{border:1px solid #a4bed4;background-color:#fff;float:left;width:12px;height:12px;margin-top:2px;overflow:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_text{font-family:Tahoma;font-size:13px;color:#256488;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_item_text{height:19px;line-height:18px;*float:left;*clear:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_item_text,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_item_text{font-family:Tahoma;font-size:14px;color:#256488;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_item_text{font-family:Tahoma;font-size:30px;color:#256488;line-height:72px;height:72px;float:left;clear:left;}.dhxtoolbar_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhx_toolbar_dhx_skyblue{border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);position:relative;padding:0 5px;height:30px;line-height:normal;cursor:default;overflow:hidden;font-family:Tahoma;font-size:11px;color:black;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_left{float:left;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_right{float:right;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw{position:relative;float:left;margin-top:2px;padding:2px 3px;*padding-bottom:4px;margin-right:1px;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:default;height:22px;*height:20px;overflow:hidden;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis{color:#999;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_over,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_over{border:1px solid #a4bed4;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_pres{border:1px solid #a4bed4;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres_dis{color:#999;border:1px solid #c9c9c9;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn img{float:left;margin:2px;width:18px;height:18px;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input{position:relative;float:left;border:1px solid #a4bed4;background-color:white;margin:1px;padding:2px 4px 3px 4px;font-family:Tahoma;font-size:11px;color:black;line-height:normal;direction:ltr;outline:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input:disabled{background-color:#e7eef8;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg{float:left;font:inherit;height:18px;line-height:17px;margin:2px 4px;padding:0;cursor:default;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw{margin-left:-3px;z-index:1;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg{margin:2px 0;padding:0 3px;background-image:url("imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow.gif");background-position:center center;background-repeat:no-repeat;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis div.arwimg{background-image:url("imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow_dis.gif");}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_sep{float:left;border-left:1px solid #c0d9ec;height:20px;margin:5px 6px 0 5px;overflow:hidden;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_text{float:left;vertical-align:middle;margin-top:3px;padding:3px 5px;line-height:17px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r{float:left;height:5px;line-height:1px;margin:8px 0 6px 0;padding:0;width:2px;font-size:1px;border-top:1px solid #a4bed5;border-bottom:1px solid #a4bed5;background-color:#e7f1ff;overflow:hidden;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l{margin-left:4px;border-left:1px solid #a4bed5;border-top-left-radius:2px;border-bottom-left-radius:2px;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r{margin-right:4px;border-right:1px solid #a4bed5;border-top-right-radius:2px;border-bottom-right-radius:2px;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen.dhxtoolbar_over{position:absolute;top:5px;width:7px;height:14px;border:1px solid #a4bed4;background-color:#e1eeff;background:linear-gradient(#e1eeff,#d4e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e1eeff,endColorStr=#d4e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-radius:1px;cursor:default;font-size:1px;line-height:1px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_pen{border-color:#c9c9c9;background-color:#e5e5e5;background:linear-gradient(#e5e5e5,#e0e0e0);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5e5e5,endColorStr=#e0e0e0) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_r{border-color:#c9c9c9;background-color:#e9e9e9;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24{height:36px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw{height:28px;*height:26px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn img{width:24px;height:24px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw div.arwimg{height:24px;line-height:23px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_text{padding-top:6px;padding-bottom:6px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_sep{height:26px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_r{margin-top:11px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_pen{top:8px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:4px;margin-bottom:4px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32{height:44px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw{height:36px;*height:34px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn img{width:32px;height:32px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw div.arwimg{height:32px;line-height:31px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_text{padding-top:10px;padding-bottom:10px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_sep{height:34px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_r{margin-top:15px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_pen{top:12px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:8px;margin-bottom:8px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48{height:60px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw{height:52px;*height:50px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn img{width:48px;height:48px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw div.arwimg{height:48px;line-height:47px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_text{padding-top:18px;padding-bottom:18px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_sep{height:50px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_r{margin-top:23px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_pen{top:20px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:16px;margin-bottom:16px;}div.dhx_toolbar_poly_dhx_skyblue{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;padding:3px 0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px;background-color:#e7f1ff;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}div.dhx_toolbar_poly_dhx_skyblue td{font-family:Tahoma;font-size:11px;color:black;line-height:normal;padding:0 3px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;}div.dhx_toolbar_poly_dhx_skyblue .tr_btn_over td,div.dhx_toolbar_poly_dhx_skyblue .tr_btn_selected td{background-color:#b5deff;border-top:1px solid #a1cef4;border-bottom:1px solid #a1cef4;}div.dhx_toolbar_poly_dhx_skyblue .tr_btn_disabled td{color:#999;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_img{width:18px;text-align:center;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_img img.btn_sel_img{width:18px;height:18px;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_txt div.btn_sel_text{padding:0 12px 0 1px;height:22px;line-height:21px;}div.dhx_toolbar_poly_dhx_skyblue tr.tr_sep td{padding:2px 0;}div.dhx_toolbar_poly_dhx_skyblue div.btn_sep{position:relative;font-size:1px;line-height:1px;height:0;width:100%;border-top:1px solid #a4bed5;}div.dhx_toolbar_slider_label_dhx_skyblue{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;background-color:#e7f1ff;padding:5px 8px;border-radius:2px;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;font-family:Tahoma;font-size:11px;color:black;}.dhxtoolbar_maxopen_test{position:absolute;width:200px;height:50px;overflow-x:none;overflow-y:auto;left:-300px;top:100px;border:1px solid white;visibility:hidden;}.dhxtoolbar_maxopen_test2{height:200px;}.dhxeditor_dhx_skyblue{position:relative;}.dhxeditor_dhx_skyblue iframe.dhxeditor_mainiframe{position:absolute;overflow:hidden;top:0;left:0;width:100%;height:100%;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb{position:relative;height:30px;padding:0 5px;border-bottom:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button{float:left;position:relative;width:18px;height:18px;font-size:2px;margin-left:5px;margin-top:7px;cursor:pointer;background-image:url("imgs/dhxeditor_skyblue/buttons.gif");}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_bold{margin-left:5px;background-position:0 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_italic{background-position:-18px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_underline{background-position:-36px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_clearformat{background-position:-54px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor{position:absolute;background-color:white;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{position:absolute;overflow:hidden;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;border-left-width:0;border-right-width:0;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def{padding:0;border-top:1px solid #a4bed4;}.dhxeditor_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhx_tooltip{display:none;position:absolute;font-family:Tahoma;color:#626262;font-size:11px;z-index:10000;padding:4px 10px 4px 10px;border:1px solid #fff;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-moz-box-shadow:0 0 3px #d9d9d9;-webkit-box-shadow:0 0 3px #d9d9d9;text-shadow:0 1px 1px #fff;box-shadow:0 0 5px #d9d9d9;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#efefef),color-stop(0.5,#f6f6f6),color-stop(1,#efefef));background:-o-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-ms-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-moz-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:#efefef;}.dhx_chart{position:relative;font-family:Tahoma;font-size:11px;color:black;overflow:hidden;}.dhx_chart canvas{position:absolute;left:0;top:0;}.dhx_canvas_text{position:absolute;text-align:center;overflow:hidden;white-space:nowrap;z-index:1000;}.dhx_map_img{width:100%;height:100%;position:absolute;top:0;left:0;border:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity:0;}.dhx_axis_item_y{position:absolute;height:18px;line-height:18px;margin-top:-4px;text-align:right;}.dhx_axis_title_x{text-align:center;}.dhx_axis_title_y{text-align:center;font-family:Tahoma;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);height:18px;line-height:18px;font-size:11px;}.dhx_ie_filter{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);zoom:1;font-family:serif;}.dhx_chart_legend{position:absolute;z-index:1000;}.dhx_chart_legend_item{height:18px;line-height:18px;padding:2px;cursor:pointer;}.dhx_chart_legend_item.hidden{color:#aaa;}.dhx_axis_item_y.dhx_radar{color:#666;font-size:12px;padding-right:3px;height:13px;line-height:13px;margin-top:0;}.dhx_canvas_text.dhx_axis_radar_title{margin-top:0;padding-top:0;}.dhx_axis_item_y,.dhx_axis_item_x{color:#666;}.dhx_axis_item_x{padding-top:2px;}.dhx_tooltip{display:none;position:absolute;font-family:Tahoma;color:#626262;font-size:11px;z-index:10000;padding:4px 10px 4px 10px;border:1px solid #fff;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-moz-box-shadow:0 0 3px #d9d9d9;-webkit-box-shadow:0 0 3px #d9d9d9;text-shadow:0 1px 1px #fff;box-shadow:0 0 5px #d9d9d9;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#efefef),color-stop(0.5,#f6f6f6),color-stop(1,#efefef));background:-o-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-ms-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-moz-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:#efefef;}.dhx_noselect{-moz-user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;}.dhx_allow_selection{-moz-user-select:text;-user-select:text;}.dhx_dataview{overflow-y:auto;-webkit-overflow-scrolling:touch;overflow-x:hidden;-moz-user-select:none;-moz-user-select:-moz-none;-khtml-select:none;}.dhx_drag_zone{position:absolute;border:1px solid #A4BED4;z-index:8000;-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;}.dhx_dataview_default_item,.dhx_dataview_default_item_selected{cursor:pointer;background-color:#fff;}.dhx_dataview .dhx_dataview_default_item,.dhx_dataview .dhx_dataview_default_item_selected{border-right:1px solid #a4bed4;border-bottom:1px dotted #a4bed4;}.dhx_dataview_default_item_selected{background-color:#a1ceed;color:#b5deff;border-color:#a1ceed;background-repeat:repeat-x;}.dhx_dataview_item{font-family:Tahoma;font-size:11px;color:black;}.dhx_dataview_item .dhx_strong{font-weight:bold;display:block;padding-bottom:6px;}.dhx_dataview_default_item_selected .dhx_light{color:#C3C3C3;}.dhx_dataview_item .dhx_light{color:#919191;}.dhx_drag_over{background-color:#faf768;background-image:url("imgs/dhxdataview_skyblue/marker.png");background-repeat:repeat-x;}.dhx_pager_item,.dhx_pager_item_selected{float:left;text-align:center;height:16px;font-family:Tahoma;font-size:10pt;border:1px solid gray;padding:2px 4px;margin-left:5px;cursor:pointer;background-color:white;}.dhx_pager_item_selected{background-color:lightgrey;color:white;cursor:default;font-weight:bold;}.defaultTreeTable{margin:0;padding:0;border:0;}.containerTableStyle{overflow:auto;-webkit-overflow-scrolling:touch;position:relative;top:0;font-size:12px;-khtml-user-select:none;}.containerTableStyleRTL span{direction:rtl;unicode-bidi:bidi-override;}.containerTableStyleRTL{direction:rtl;overflow:auto;position:relative;top:0;font-size:12px;}.standartTreeRow{font-family:Tahoma;font-size:12px;-moz-user-select:none;}.selectedTreeRow{background-color:navy;color:white;font-family:Tahoma;font-size:12px;-moz-user-select:none;}.dragAndDropRow{background-color:navy;color:white;}.standartTreeRow_lor{text-decoration:underline;background-color:#fff;font-family:Tahoma;font-size:12px;-moz-user-select:none;}.selectedTreeRow_lor{text-decoration:underline;background-color:navy;color:white;font-family:Tahoma;font-size:12px;-moz-user-select:none;}.standartTreeImage{width:18px;height:18px;overflow:hidden;border:0;padding:0;margin:0;font-size:1px;}.hiddenRow{width:1px;overflow:hidden;}.dragSpanDiv,.dragSpanDiv td{font-size:12px;background-color:#fff;z-index:999;}.a_dhx_hidden_input{position:absolute;top:-1px;left:-1px;width:1px;height:1px;border:none;background:none;}.a_dhx_hidden_input{position:absolute;top:-1px;left:-1px;width:1px;height:1px;border:none;background:none;}.selectionBox{background-color:#FFC;}.selectionBar{top:0;background-color:black;position:absolute;overflow:hidden;height:2px;z-index:11;}.intreeeditRow{font-size:8pt;height:16px;border:1px solid silver;padding:0;margin:0;margin-left:4px;-moz-user-select:text;-khtml-user-select:text;}.dhx_tree_textSign{font-size:8pt;font-family:monospace;width:21px;color:black;padding:0;margin:0;cursor:pointer;text-align:center;}.dhx_tree_opacity{opacity:0;-moz-opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-moz-user-select:none;user-select:none;}.dhx_bg_img_fix{width:18px;height:18px;background-repeat:no-repeat;background-position:center;background-position-x:center;background-position-y:center;}.dhxtree_dhx_black,.dhxtree_dhx_skyblue{background:#fff;color:black;}*html .dhxtree_dhx_skyblue .standartTreeRow,*html .dhxtree_dhx_skyblue .standartTreeRow_lor{border-right:0 solid red;border-left:0 solid red;}*html .dhxtree_dhx_skyblue span.standartTreeRow,*html .dhxtree_dhx_skyblue span.standartTreeRow_lor{margin-left:1px;}.dhxtree_dhx_skyblue .standartTreeRow,.dhxtree_dhx_skyblue .standartTreeRow_lor{border-right:1px solid transparent;border-left:1px solid transparent;font-family:Tahoma;font-size:12px;overflow:hidden;padding:0;}.dhxtree_dhx_skyblue .selectedTreeRow_lor,.dhxtree_dhx_skyblue .selectedTreeRow{background-color:#b5deff;background-repeat:repeat-x;border:1px solid #a1ceed;color:black;line-height:17px;font-family:Tahoma;font-size:12px;overflow:hidden;}html>body .dhxtree_dhx_skyblue .selectedTreeRow,html>body .dhxtree_dhx_skyblue .selectedTreeRow_lor{padding:1px 0 1px 0;line-height:normal;*display:inline-block;height:13px;}body:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow,body:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow_lor{padding:1px 0 1px 0;padding-top:0;box-sizing:border-box;line-height:12px;height:13px;}.dhxtree_dhx_web .selectedTreeRow_lor,.dhxtree_dhx_web .selectedTreeRow{background-color:transparent;}.dhxtree_dhx_web span.selectedTreeRow_lor,.dhxtree_dhx_web span.selectedTreeRow{background-color:#b5deff;color:black;}.dhxtree_dhx_web td.standartTreeRow,.dhxtree_dhx_web td.selectedTreeRow{padding-left:2px;}.dhxtree_dhx_web span.standartTreeRow,.dhxtree_dhx_web span.selectedTreeRow{padding-left:3px!important;}.dhxtree_dhx_web .standartTreeRow,.dhxtree_dhx_web .standartTreeRow,.dhxtree_dhx_web .selectedTreeRow_lor,.dhxtree_dhx_web .selectedTreeRow{font-family:Tahoma;font-size:12px;overflow:hidden;}.dhxtree_dhx_terrace .standartTreeRow,.dhxtree_dhx_terrace .standartTreeRow,.dhxtree_dhx_terrace .selectedTreeRow_lor,.dhxtree_dhx_terrace .selectedTreeRow{font-family:Tahoma;font-size:12px;padding:3px 1px 4px 2px;}.dhxtree_dhx_terrace .standartTreeImage{padding-left:3px;}.dhxtree_dhx_terrace .selectedTreeRow_lor,.dhxtree_dhx_terrace .selectedTreeRow{background-color:transparent;}.dhxtree_dhx_terrace span.selectedTreeRow_lor,.dhxtree_dhx_terrace span.selectedTreeRow{background-color:#b5deff;color:black;}div.gridbox{overflow:hidden;text-align:left;}.dhx_sub_row{background-color:#fff;}div.gridbox .xhdr{background-color:#D4D0C8;}div.gridbox table.obj{height:1px;}div.gridbox table.hdr td{line-height:normal;font-family:arial;font-size:12px;background-color:#D4D0C8;border:1px solid;border-color:#fff Gray Gray #fff;text-align:center;margin:0;padding:7px 0 7px 0;font-weight:normal;-moz-user-select:none;-moz-user-select:-moz-none;overflow:hidden;empty-cells:show;}div.gridbox table.hdr td div.hdrcell{overflow:hidden;}div.gridbox table.obj td{border:1px solid;border-color:#fff Gray Gray #fff;font-family:Arial;font-size:12px;-moz-user-select:none;-moz-user-select:-moz-none;overflow:hidden;padding-top:0;padding-bottom:0;empty-cells:show;}div.gridbox table.obj th,div.gridbox table.hdr th{padding:0;margin:0;}div.gridbox table.row20px tr td{height:20px;white-space:nowrap;padding:0;}div.gridbox .objbox{background-color:#fff;position:relative;-webkit-overflow-scrolling:touch;}div.gridbox table.obj td span.space,div.gridbox table.obj td img.space{width:18px;}div.gridbox table.obj tr.rowselected td.cellselected,div.gridbox table.obj td.cellselected{background-color:#d8d8d8;color:black;}div.gridbox table.obj tr.rowselected td{background-color:#e1e0d7;color:black;}div.gridbox table.obj td.editable{-moz-user-select:text;}div.gridbox table.obj td.group_row{vertical-align:middle;font-family:Tahoma;font-size:10pt;font-weight:bold;height:30px;border:0;border-bottom:2px solid navy;}.dragSpanDiv{font-size:12px;border:1px gray solid;background-color:#fff;z-index:999;}.dhx_combo_select{font-family:arial;font-size:12px;border:1px solid;border-color:black silver silver black;background-color:#fff;overflow:hidden;cursor:default;position:absolute;height:auto;z-index:600;}.dhx_combo_edit{width:100%;border:0;padding:0;padding-right:1px!ie;margin:0;font:12px arial;overflow:hidden;}.dhx_textarea{border:1px solid;border-color:black silver silver black;position:absolute;height:100px;z-index:600;}.dhx_clist{background-color:#fff;border:1px solid black;padding:2px 2px 2px 2px;z-index:300;}.gridDragLine{position:absolute;top:10px;left:0;width:100%;height:2px;background-color:black;overflow:hidden;}div.pagingBlock{font-size:12px;font-family:verdana,arial;}div.pagingBlock .pagingCurrentPage{font-weight:bold;cursor:default;}div.pagingBlock .pagingPage{cursor:pointer;text-decoration:underline;}span.recordsInfoBlock{font-size:12px;font-family:verdana,arial;}div.pagingBlock a{text-decoration:none;padding-right:2px;color:black;cursor:pointer;}div.pagingBlock a.dhx_not_active{text-decoration:none;cursor:default;}.toolbar_select{font-size:10px;}.dhtmlxGrid_selection{-moz-opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);background-color:yellow;opacity:.5;border:1px dotted black;}div.gridbox div.ftr{position:absolute;left:0;bottom:1px;width:100%;overflow:hidden;}div.gridbox div.ftr td{padding:0;padding-left:10px;padding-right:5px;border-top:1px solid gray;border-right:1px solid gray;background-color:#ffc;font-style:italic;font-family:arial;font-size:12px;overflow:hidden;}div.gridbox table.hdr td.columnTargetR div.hdrcell{border-right:3px double #F60;border-left:3px solid #D4D0C8;}div.gridbox table.hdr td.columnTargetL div.hdrcell{border-right:3px solid #D4D0C8;border-left:3px double #F60;}.dhx_dragColDiv{font-family:Arial;font-size:12px;background-color:#D4D0C8;border:1px solid;border-color:#fff Gray Gray #fff;text-align:center;margin:0;padding:5px 20px 5px 20px;font-weight:normal;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);-moz-opacity:.75;opacity:.75;}.dhtmlx_live_validation_error{background-color:#FFE0E0!important;}.dhtmlx_validation_error{border-bottom:2px solid red!important;}.dhx_header_cmenu{background-color:#fff;border:2px outset silver;z-index:2;}.dhx_header_cmenu_item{white-space:nowrap;}div.gridboxgridbox_dhx_skyblue div.ftr td{text-align:right;color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-color:#a4bed4;}div.gridbox td.filter input,div.gridbox td.filter select{width:90%;font-size:8pt;font-family:Tahoma;-moz-user-select:text;}div.gridbox_dhx_skyblue.gridbox .ftr,div.gridbox_dhx_skyblue.gridbox .xhdr{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.isModern table.hdr tr td{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.isIE table.hdr tr{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.gridbox table.obj tr td{border-width:0;padding-right:4px;padding-left:4px;}div.gridbox_dhx_skyblue.gridbox table.hdr td div.hdrcell{padding-left:10px;width:auto;}div.gridbox_dhx_skyblue.gridbox table.hdr td{border-width:1px 1px 1px 1px;border-color:#e7f1ff #a4bed4 #a4bed4 #e7f1ff;background-color:transparent;font-family:Tahoma;font-size:12px;color:black;vertical-align:top;text-align:left;}div.gridbox_dhx_skyblue.gridbox{border:1px solid #a4bed4;}div.gridbox_dhx_skyblue.gridbox table.obj{font-family:Tahoma;font-size:12px;color:black;}div.gridbox_dhx_skyblue.gridbox table.obj tr td{padding-top:3px;padding-bottom:3px;}* html .gridbox_dhx_skyblue.gridbox .obj td{height:auto;padding-top:3px;padding-bottom:3px;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td{padding-top:1px;padding-bottom:1px;height:23px;border-right:1px solid #fff;border-top:1px solid #fff;border-bottom:1px solid #fff;}div.gridbox_dhx_skyblue.isModern table.obj.row20px tr td{line-height:23px;}div.gridbox_dhx_skyblue table.obj.row20px tr td.editable .treegrid_cell{margin-top:-2px;height:21px;}div.gridbox_dhx_skyblue.gridbox table.obj tr td.editable div.treegrid_cell{padding:1px 4px!important;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected{background-color:#b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td{background-color:#b5deff;color:black;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr.rowselected td,div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr.odd_dhx_skyblue.rowselected td{background-color:#b5deff;border-top:1px solid #a1ceed;border-bottom:1px solid #a1ceed;border-right:1px solid #b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td.cellselected{background-color:#b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr.odd_dhx_skyblue{background:#ebf3ff;border-top:1px solid #ebf3ff;border-bottom:1px solid #ebf3ff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue{background:#ebf3ff;}.dhx_combo_select,.gridbox_dhx_skyblue.gridbox .dhx_combo_edit,.gridbox_dhx_skyblue.gridbox .dhx_textarea{font-family:Tahoma;font-size:12px;}.gridbox_dhx_skyblue .dhx_combo_edit{padding:1px 0 1px 1px;}.gridbox_dhx_skyblue.isIE .dhx_combo_edit{padding:0 0 0 1px;}.gridbox_dhx_skyblue.gridbox .dhx_sub_row{background-color:transparent;}.dhx_header_cmenu{background-color:#fff;border:2px outset silver;z-index:2;}.dhx_header_cmenu_item{white-space:nowrap;}.dhx_pbox{margin-top:3px;border:1px solid #D4D0C8;border-top:0;font-size:10px;}.dhx_pline{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page,.dhx_pager_info{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:black;background-color:gray;padding:1px;}.dhx_pager_info{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active{font-weight:bold;background-color:lightgrey;cursor:default;color:white;}.dhx_pbox_modern{margin-top:3px;border:1px solid #D6D6D6;border-top:0;font-size:10px;}.dhx_pline_modern{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_modern,.dhx_pager_info_modern{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#D6D6D6;padding:1px;}.dhx_pager_info_modern{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_modern div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_modern{font-weight:bold;background-color:#055A78;cursor:default;color:white;}.dhx_pbox_light{margin-top:3px;border:1px solid #C2D5DC;border-top:0;font-size:10px;}.dhx_pline_light{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_light,.dhx_pager_info_light{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#93AFBA;padding:1px;}.dhx_pager_info_light{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_light div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_light{font-weight:bold;background-color:#D1DFE3;cursor:default;color:white;}.dhx_pbox_skyblue{margin-top:3px;border:1px solid #C2D5DC;border-top:0;font-size:10px;}.dhx_pline_skyblue{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_skyblue,.dhx_pager_info_skyblue{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#93AFBA;padding:1px;}.dhx_pager_info_skyblue{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_skyblue div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_skyblue{font-weight:bold;color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border:1px solid #a4bed4;padding:0;cursor:default;}div.dhx_page_active_skyblue div.dhx_page_active_skyblue{border:0 solid #a4bed4;}.calcTable{width:100px;background-color:silver;border:1px black solid;}.calcButton{height:20px;cursor:pointer;text-align:center;background-color:gray;color:white;font-size:10px;font-weight:bold;border-top:1px solid silver;border-right:1px solid silver;}.calcPressed{height:20px;cursor:pointer;text-align:center;background-color:gray;color:white;font-size:10px;font-weight:bold;border-top:1px solid black;border-right:1px solid black;}.calcInput{background-color:white;font-size:10px;font-weight:bold;font-family:tahoma,arial;}.calkSubmit{padding:2px;cursor:pointer;text-align:center;background-color:silver;color:white;font-size:10px;font-weight:bold;border-top:1px solid white;border-right:1px solid white;}.dhxgrid_sort_desc,.dhxgrid_sort_asc{width:9px;height:8px;background-image:url("imgs/dhxgrid_skyblue/sort_desc.gif");background-repeat:no-repeat;}.dhxgrid_sort_asc{background-image:url("imgs/dhxgrid_skyblue/sort_asc.gif");background-repeat:no-repeat;}.dhxform_obj_dhx_skyblue{font-family:Tahoma;float:left;line-height:normal;}.dhxform_obj_dhx_skyblue div.dhxform_base{position:relative;float:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_base_nested{padding:0;clear:both;*display:inline-block;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base_nested{padding:0;}.dhxform_obj_dhx_skyblue.dhxform_block{clear:both;}.dhxform_obj_dhx_skyblue div.block_dhxform_item_label_left{display:block;clear:both;*clear:none;}.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:visited,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:active,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:hover{outline:none;text-decoration:none;color:inherit;cursor:default;overflow:hidden;white-space:normal;apadding-top:1px;}.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:focus{color:#305f87;}.dhxform_obj_dhx_skyblue div.disabled span.nav_link{color:inherit;}.dhxform_obj_dhx_skyblue div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_actv_r{width:18px;height:18px;font-size:1px;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0,.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1,.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0,.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1,.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0,.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1,.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0,.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1{background-image:url("imgs/dhxform_skyblue/dhxform_chbxrd.gif");background-repeat:no-repeat;}.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0{background-position:-162px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1{background-position:-144px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0{background-position:-198px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1{background-position:-180px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0{background-position:-18px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1{background-position:0 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0{background-position:-54px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1{background-position:-36px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0{background-position:-90px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1{background-position:-72px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0{background-position:-126px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1{background-position:-108px 0;}.dhxform_obj_dhx_skyblue div.dhxform_label{font-family:inherit;font-size:inherit;color:black;overflow-x:hidden;overflow:hidden;white-space:normal;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_left{text-align:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_left{text-align:right;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_center{text-align:center;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_right{text-align:right;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_right{text-align:left;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label span.dhxform_item_required{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_item_required{margin-left:5px;margin-right:0;color:red;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label span.dhxform_item_required{margin-left:0;margin-right:5px;}.dhxform_obj_dhx_skyblue input.dhxform_textarea{padding:4px 3px!important;margin:0;font-size:1em;}.dhxform_obj_dhx_skyblue textarea.dhxform_textarea{padding:4px 3px!important;}.dhxform_obj_dhx_skyblue .dhxform_textarea{border:1px solid #a4bed4;font-family:Tahoma;font-size:1em;color:black;resize:none;}.dhxform_obj_dhx_skyblue div.disabled .dhxform_textarea{color:#b2b2b2;background-color:white;border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue.dhxform_rtl .dhxform_textarea{text-align:right;direction:rtl;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node{position:relative;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node .dhxform_textarea{border:1px solid white;background-color:white;color:white;visibility:hidden;*height:1px;*line-height:1px;*display:inline;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_r{float:none;top:2px;left:2px;position:absolute;margin:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_control.dhxform_img_node div.dhxform_img{float:none;top:2px;left:0;position:absolute;margin:0;}.dhxform_obj_dhx_skyblue .dhxform_select{border:1px solid #a4bed4;background-color:#fff;margin:0;padding:3px 2px 3px 0;font-family:Tahoma;font-size:1em;color:black;}.dhxform_obj_dhx_skyblue .dhxform_select option{padding-left:2px;}.dhxform_obj_dhx_skyblue div.disabled .dhxform_select{color:#b2b2b2;background-color:#fff;border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue.dhxform_rtl select,.dhxform_obj_dhx_skyblue.dhxform_rtl option{direction:rtl;}.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left{padding:5px 0 5px 0;}.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left fieldset.dhxform_fs div.dhxform_base_nested.dhxform_fs_nested{margin-right:19px;margin-left:5px;}.dhxform_obj_dhx_skyblue fieldset.dhxform_fs{border:1px solid #a4bed4;margin:0;padding:5px 0 12px 0;clear:left;width:100%;}.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs{border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue fieldset.dhxform_fs legend.fs_legend{font-family:Tahoma;font-size:inherit;color:#7099bb;font-weight:normal;padding:0 4px 1px 4px;margin-left:5px;text-align:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl fieldset.dhxform_fs legend.fs_legend{text-align:right;}.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs legend.fs_legend{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right{clear:both;padding-top:6px;cursor:default;*float:left;*display:inline-block;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_r{float:left;margin:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_img{float:right;margin:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_label{float:left;padding:2px 0 2px 0;margin:2px 0 2px 0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_label{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_control{float:left;margin-right:3px;margin-left:0;*display:inline;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_control{float:right;margin-right:0;margin-left:3px;*display:inline;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left{clear:both;padding-top:6px;cursor:default;*float:left;*display:inline-block;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_r{float:right;amargin:3px 1px 0 5px;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_img{float:left;amargin:3px 5px 0 1px;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_label{float:left;padding:2px 0 2px 0;margin:2px 0 2px 0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_label{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_control{float:left;padding-left:4px;padding-right:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_control{float:right;padding-right:4px;padding-left:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top{clear:both;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_label{float:none;margin-bottom:5px;margin-top:8px;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_control{float:none;margin-left:0;margin-bottom:5px;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_top div.dhxform_control{float:none;margin-right:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_absolute{position:absolute;left:0;top:0;cursor:default;}.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_img,.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_r{position:absolute;}.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_label,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control.dhxform_img_node,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_txt_label2,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_btn,.dhxform_obj_dhx_skyblue div.block_item_absolute div.dhxform_block{position:absolute;}.dhxform_obj_dhx_skyblue div.dhxform_txt_label2{font-family:Tahoma;font-size:inherit;color:#7099bb;font-weight:bold;margin:0 3px;padding:5px 0;cursor:default;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_txt_label2{color:#b2b8bc;}.dhxform_obj_dhx_skyblue div.dhxform_btn{font-family:Tahoma;font-size:inherit;color:black;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);margin:5px 2px;border-radius:2px;float:left;cursor:default;clear:both;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_btn{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_over{background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_pressed{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn{border-color:#ccc;background-color:#f9f9f9;background:linear-gradient(#f9f9f9,#f1f1f1);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f9f9f9,endColorStr=#f1f1f1) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_txt{float:left;margin:0 20px;height:24px;line-height:23px;text-align:center;vertical-align:middle;overflow:hidden;white-space:nowrap;*display:inline;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn div.dhxform_btn_txt{color:#999!important;}.dhxform_obj_dhx_skyblue div.dhxform_btn:focus{outline:1px dotted #909090;}.dhxform_obj_dhx_skyblue div.dhxform_control div.dhxform_note{font-family:Tahoma;font-size:.8em;color:#808080;padding-bottom:3px;white-space:normal;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_control div.dhxform_note{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_info{font-family:Tahoma;font-size:.6em;color:#808080;margin-left:3px;padding-bottom:2px;line-height:100%;vertical-align:middle;cursor:pointer;}.dhxform_obj_dhx_skyblue .validate_error .dhxform_label,.dhxform_obj_dhx_skyblue .validate_error .dhxform_textarea,.dhxform_obj_dhx_skyblue .validate_error .dhxform_select,.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label div.dhxform_label_nav_link:focus{color:red;}.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue{border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue .dhx_combo_input{color:#b2b2b2;background-color:#fff;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker{display:none;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker{display:inline;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fefefe;opacity:.7;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);}.dhxform_obj_dhx_skyblue .dhx_file_uploader{position:relative;width:100%;margin-bottom:4px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls{position:relative;width:100%;height:35px;font-size:2px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button{position:absolute;width:19px;height:19px;top:8px;background-image:url("imgs/dhxform_skyblue/dhxform_upload_buttons.gif");background-repeat:no-repeat;font-size:2px;cursor:pointer;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_info{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_browse{background-position:0 0;right:108px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_upload{background-position:-19px 0;right:79px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel{background-position:-57px 0;right:79px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_clear{background-position:-38px 0;right:50px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls .dhx_uploader_input{position:absolute;left:-1000px;top:0;visibility:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont{position:absolute;width:19px;height:19px;left:0;top:0;cursor:pointer;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form{position:absolute;top:0;right:0;cursor:pointer;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input{opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);cursor:pointer;outline:none;height:19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files{position:relative;width:100%;left:0;top:0;overflow:auto;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file{position:relative;width:100%;height:25px;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_added,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploading{color:black;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploaded{color:#30678a;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_fail{color:#e94a4a;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param{position:absolute;font-family:inherit;font-size:inherit;color:inherit;top:0;height:25px;line-height:25px;vertical-align:middle;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_name{left:20px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_progress{right:50px;width:38px;text-align:right;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_delete{right:30px;width:11px;background-image:url("imgs/dhxform_skyblue/dhxform_upload_buttons.gif");background-position:-76px 0;background-repeat:no-repeat;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_uploading{right:50px;width:38px;text-align:right;background-image:url("imgs/dhxform_skyblue/dhxform_upload_uploading.gif");background-position:center center;background-repeat:no-repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls{height:60px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_files{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_info{display:inline;background-image:none;font-family:Tahoma;font-size:13px;color:#a1a1a1;height:auto;top:0;left:35px;vertical-align:top;padding-top:6px;line-height:20px;cursor:default;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_browse{top:0;width:54px;height:54px;right:35px;background-image:url("imgs/dhxform_skyblue/dhxform_upload_buttons.gif");background-position:0 -38px;background-repeat:no-repeat;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_upload,.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel,.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_clear{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont{width:54px;height:54px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input{height:54px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_info,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_added,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploading,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploaded,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_fail{color:#b2b2b2;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse{background-position:-54px -38px;cursor:default;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_form_cont{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button{cursor:default;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse{background-position:0 -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_upload{background-position:-19px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_cancel{background-position:-57px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_clear{background-position:-38px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file_param.dhx_file_delete{background-position:-87px 0;cursor:default;}.dhtmlx_skin_dhx_skyblue div.dhtmlx_wins_body_inner .dhxform_obj_dhx_skyblue{background-color:white;}.dhxform_obj_dhx_skyblue div.dhxform_control .dhx_combo_box.dhx_skyblue .dhx_combo_input,.dhx_combo_list.dhx_skyblue_list div{font-size:1em!important;}div.dhx_form_skin_detect{position:absolute;display:block;visibility:hidden;left:-100px;top:0;width:10px;height:10px;margin:0;padding:0;border:none;overflow:hidden;}.dhxacc_fullscreen{width:100%;height:100%;margin:0;overflow:hidden;}.dhxacc_base_dhx_skyblue{position:relative;cursor:default;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc{position:relative;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;box-shadow:0 0 3px #e0e0e0;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_cont_acc{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;overflow:hidden;z-index:0;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_cont_acc.dhx_cell_cont_no_borders{border-width:0;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_hdr{position:relative;height:27px;line-height:26px;overflow:hidden;font-family:Tahoma;font-size:11px;color:#34404b;font-weight:bold;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;z-index:3;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text{position:relative;margin:0 26px 0 5px;overflow:hidden;white-space:nowrap;cursor:default;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_hdr img.dhx_cell_hdr_icon{position:absolute;top:5px;left:4px;width:16px;height:16px;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_icon{margin-left:24px;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_arrow{position:absolute;top:6px;right:4px;width:16px;height:16px;background-image:url("imgs/dhxacc_skyblue/dhxacc_btns.gif");background-repeat:no-repeat;background-position:0 0;overflow:hidden;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc.dhx_cell_closed div.dhx_cell_hdr div.dhx_cell_hdr_arrow{background-position:-16px 0;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_cont.dhx_cell_cont_not_last{border-bottom:0 solid white;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_menu_def{position:relative;overflow:hidden;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle,.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top:0 solid white;width:auto;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma;font-size:11px;color:black;background-color:#ddecff;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc.acc_cell_dragged{box-shadow:0 0 5px #829cb2;z-index:5!important;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-position:center 55%;background-image:url("imgs/dhxacc_skyblue/dhxacc_cell_progress.gif");background-repeat:no-repeat;cursor:progress;z-index:2;}.dhxacc_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxlayout_base_dhx_skyblue{position:relative;cursor:default;}.dhxlayout_base_dhx_skyblue div.dhxlayout_sep{position:absolute;background-color:#ebebeb;font-size:1px;margin:0;padding:0;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;background-repeat:no-repeat;background-position:center center;z-index:2;}.dhxlayout_base_dhx_skyblue div.dhxlayout_sep.dhxlayout_sep_resize_v{cursor:w-resize;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_sep_v.gif');}.dhxlayout_base_dhx_skyblue div.dhxlayout_sep.dhxlayout_sep_resize_h{cursor:n-resize;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_sep_h.gif');}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout{position:absolute;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_cont_layout{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid #fff;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_cont_layout.dhx_cell_cont_no_borders{border:0 solid #fff!important;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_cont_layout,.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_cont_layout{display:none;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr{position:relative;height:27px;line-height:26px;overflow:hidden;font-family:Tahoma;font-size:11px;color:#34404b;font-weight:bold;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden{height:0;line-height:0;border-bottom-width:0;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden_no_borders{height:0;line-height:0;border-width:0;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhx_cell_hdr_text{position:relative;margin:0 26px 0 5px;overflow:hidden;white-space:nowrap;cursor:default;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr{height:18px;line-height:17px;color:#333;font-weight:normal;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr{width:18px;background:-moz-linear-gradient(left,#e2efff,#d3e7ff);background:-webkit-linear-gradient(left,#e2efff,#d3e7ff);background:-o-linear-gradient(left,#e2efff,#d3e7ff);background:-ms-linear-gradient(left,#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=1,startColorStr=#e2efff,endColorStr=#d3e7ff);}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text{position:absolute;left:3px;bottom:0;transform:rotate(270deg);-ms-transform:rotate(270deg);transform-origin:left center;color:#333;font-weight:normal;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8{left:-5px;line-height:17px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');margin-bottom:95%;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7{left:-5px;line-height:17px;padding-bottom:10px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6{left:-5px;line-height:17px;padding-bottom:10px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_chrome{left:5px;-webkit-transform:rotate(270deg);-webkit-transform-origin:left center;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow{position:absolute;right:4px;top:6px;width:16px;height:16px;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_btns.gif');background-repeat:no-repeat;cursor:pointer;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va{background-position:-16px 0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb{background-position:-48px 0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha{background-position:-32px 0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb{background-position:0 0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha{background-position:0 -5px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb{background-position:-32px -4px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va{background-position:-45px 0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb{background-position:-13px 0;}.dhxlayout_base_dhx_skyblue div.dhxlayout_resize_area{position:absolute;background-color:#a4bed4;opacity:.15;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=15);z-index:1;border:2px dashed black;cursor:inherit;}.dhxlayout_base_dhx_skyblue div.dhxlayout_resize_sep{position:absolute;background-color:#a4bed4;overflow:hidden;display:block;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);z-index:2;cursor:inherit;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_statusbar_def,.dhxlayout_base_dhx_skyblue div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_statusbar_def{display:none;}.dhxlayout_base_dhx_skyblue div.dhxlayout_hdr_attached{position:relative;}.dhxlayout_base_dhx_skyblue div.dhxlayout_ftr_attached{position:absolute;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_menu_def{position:relative;overflow:hidden;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle,.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:0;width:auto;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma;font-size:11px;color:black;background-color:#ddecff;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxlayout_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);z-index:3;}.dhxlayout_base_dhx_skyblue div.dhxlayout_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:2;}.dhxlayout_base_dhx_skyblue div.dhxlayout_menu{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxlayout_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxlayout_ribbon{border-bottom:2px solid #ebebeb;position:relative;}.dhxlayout_base_dhx_skyblue div.dhxlayout_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxlayout_base_dhx_skyblue div.dhxlayout_statusbar{position:absolute;background-color:#ebebeb;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxlayout_statusbar div.dhxcont_statusbar{position:relative;margin-top:2px;border:1px solid #a4bed4;background-color:#ddecff;font-family:Tahoma;font-size:11px;color:black;padding:3px 4px;}body.dhxlayout_resize_v *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:w-resize!important;}body.dhxlayout_resize_h *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:n-resize!important;}div.dhxlayout_sep_sw_dhx_skyblue{position:absolute;left:0;top:-100px;width:5px;height:1px;font-size:1px;margin:0;padding:0;overflow:hidden;}.dhxlayout_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxtabbar_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxtabbar_fullscreen{width:100%;height:100%;margin:0;overflow:hidden;}.dhxtabbar_base_dhx_skyblue{position:relative;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs{position:absolute;bottom:auto;height:28px;overflow:hidden;white-space:nowrap;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);z-index:2;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs{top:auto;bottom:0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base{position:absolute;top:0;height:28px;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right{position:absolute;width:5000px;height:28px;margin:0 1px;top:0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line{position:absolute;left:0;bottom:0;top:none;width:100%;height:4px;overflow:hidden;z-index:2;border-top:1px solid #a4bed4;border-bottom:0 solid white;background-color:#d3e7ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left{position:absolute;left:0;top:0;width:15px;height:100%;background-color:#fffeff;background:linear-gradient(#fffeff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fffeff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:pointer;z-index:4;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left div.dhxtabbar_arrow_img{position:relative;height:100%;border-right:1px solid #a4bed4;background-image:url("imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif");background-position:0 11px;background-repeat:no-repeat;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right{position:absolute;right:0;top:0;width:15px;height:100%;background-color:#fffeff;background:linear-gradient(#fffeff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fffeff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:pointer;z-index:4;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right div.dhxtabbar_arrow_img{position:relative;height:100%;border-left:1px solid #a4bed4;background-image:url("imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif");background-position:-14px 11px;background-repeat:no-repeat;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar{position:absolute;background-color:white;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;background-image:none!important;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar.dhx_cell_cont_no_borders{border:0 solid white!important;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab{position:relative;height:24px;background-color:white;font-family:Tahoma;font-size:11px;color:#34404b;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;z-index:1;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_left div.dhxtabbar_tab{float:left;margin-left:-1px;margin-right:0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_right div.dhxtabbar_tab{float:right;margin-left:0;margin-right:-1px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis{background-color:#ecf5ff;background:linear-gradient(#ecf5ff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ecf5ff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis{z-index:3;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_hidden{border:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text{position:relative;height:23px;line-height:22px;vertical-align:middle;top:0;border-top:1px solid #fff;color:#34404b;text-align:center;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text.dhxtabbar_tab_text_close{padding-right:9px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{border-left:1px solid #fff;border-right:1px solid #fff;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text{color:#34404b;font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_text,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{color:#999;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close{position:absolute;top:6px;right:5px;width:11px;height:11px;border:1px solid #b4d3ff;border-radius:2px;background-image:url("imgs/dhxtabbar_skyblue/dhxtabbar_button_close.gif");background-position:0 0;background-repeat:no-repeat;line-height:1px;overflow:hidden;z-index:1;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_close{border:1px solid #a4bed4;background-position:-11px 0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_close,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_close{border:1px solid #a4bed4;background-position:-22px 0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_cont_tabbar{border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue{border-bottom-width:0;border-top-width:1px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab{margin-top:4px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis{z-index:3;font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text{top:0;border-top:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close{top:auto;bottom:5px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line{top:0;bottom:none;border-bottom:1px solid #a4bed4;border-top:0 solid white;background-color:#e2efff;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def{position:relative;overflow:hidden;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_menu_def{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue{border-bottom-width:1px;border-top-width:0;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top:0 solid white;width:auto;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma;font-size:11px;color:black;background-color:#ddecff;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-top:0 solid white;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url("imgs/dhxtabbar_skyblue/dhxtabbar_cell_progress.gif");background-position:center center;background-repeat:no-repeat;z-index:2;}span.dhxtabbar_tabs_text_test_dhx_skyblue{position:absolute;visibility:hidden;right:0;top:0;font-weight:bold;font-family:Tahoma;font-size:11px;color:black;}.dhxwins_vp_dhx_skyblue{overflow:hidden;position:relative;cursor:default;}.dhxwins_vp_dhx_skyblue div.dhxwin_active{position:absolute;overflow:hidden;border:1px solid #a4bed4;box-shadow:0 0 3px #cecece;border-radius:3px;background:white;cursor:inherit;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive{position:absolute;overflow:hidden;border:1px solid #c1d1de;box-shadow:0 0 3px #dedede;border-radius:3px;background:white;cursor:inherit;}.dhxwins_vp_dhx_skyblue div.dhxwin_brd{position:absolute;border-left:5px solid #d3e6fe;border-right:5px solid #d3e6fe;border-bottom:5px solid #d3e6fe;border-bottom-left-radius:2px;border-bottom-right-radius:2px;background:white;z-index:0;}.dhxwins_vp_dhx_skyblue div.dhxwin_brd.dhxwin_hdr_hidden{border-top:5px solid #d3e6fe;border-top-left-radius:2px;border-top-right-radius:2px;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_brd{opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;background-color:white;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover .dhxwin_fr_cover_inner{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover{display:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_fr_cover{z-index:4;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_dnd,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_resize{display:block;}.dhxwins_vp_dhx_skyblue iframe.dhxwin_main_fr_cover{position:absolute;background-color:white;border-radius:2px;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr{position:relative;height:30px;line-height:30px;margin:0;padding:0;font-weight:bold;border-top:1px solid white;border-left:1px solid white;border-right:1px solid white;border-top-left-radius:2px;border-top-right-radius:2px;background-color:#e5f0fd;background:linear-gradient(#e5f0fd,#d3e6fe);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5f0fd,endColorStr=#d3e6fe) progid:DXImageTransform.Microsoft.Alpha(opacity=100);font-family:Tahoma;font-size:11px;color:#34404b;cursor:inherit;overflow:hidden;z-index:3;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr{color:#777;opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5f0fd,endColorStr=#d3e6fe);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_parked{border-bottom:1px solid white;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_hidden{visibility:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_icon{position:absolute;left:7px;top:7px;width:18px;height:18px;cursor:default;overflow:hidden;background-image:url("imgs/dhxwins_skyblue/dhxwins_icon.gif");background-position:center center;background-repeat:no-repeat;cursor:inherit;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_icon{opacity:.6;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text{position:relative;padding:0;margin:0;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;cursor:inherit;z-index:1;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text div.dhxwin_text_inside{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns{position:absolute;right:7px;top:6px;height:18px;cursor:default;overflow:hidden;cursor:inherit;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_btns{opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button,.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis{position:relative;float:left;width:15px;height:15px;margin-left:1px;margin-top:2px;border-radius:2px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-ms-user-select:none;background-image:url("imgs/dhxwins_skyblue/dhxwins_buttons.gif");background-repeat:no-repeat;background-position:0 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button:hover{background-color:white;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_close{background-position:-15px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_close_dis{background-position:-15px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmax{background-position:-30px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmax_dis{background-position:-30px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmaxed{background-position:-45px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmaxed_dis{background-position:-45px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_park{background-position:-60px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_park_dis{background-position:-60px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_stick{background-position:-75px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_stick_dis{background-position:-75px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_sticked{background-position:-90px 0;background-color:#a4bed4!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_sticked_dis{background-position:-90px -15px;background-color:#f0f0f0!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_help{background-position:-105px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_help_dis{background-position:-105px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_dock{background-position:-120px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_dock_dis{background-position:-120px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd{box-shadow:0 0 3px #cececf;}.dhxwins_vp_dhx_skyblue.dhxwins_vp_dnd{cursor:move!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_resize{position:absolute;background-color:#d3e6fe;border-radius:3px;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue iframe.dhxwin_resize_fr_cover{position:absolute;background-color:white;border-radius:3px;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwins_mcover{position:absolute;background-color:#e5f0fd;left:0;top:0;width:100%;height:100%;opacity:.53;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=53);}.dhxwins_vp_dhx_skyblue iframe.dhxwins_mcover{position:absolute;background-color:white;left:0;top:0;width:100%;height:100%;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins{position:absolute;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;visibility:visible;z-index:1;opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins{position:absolute;border:1px solid #fff;background-color:#fff;overflow:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders{border:0 solid #fff!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def{position:relative;overflow:hidden;border-bottom:1px solid #d3e6fe;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def{position:relative;overflow:hidden;padding:1px 1px 0 1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{position:relative;border-top-width:1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue{position:relative;border-top-width:1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_ribbon_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_ribbon_def{padding:1px 1px 0 1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma;font-size:11px;color:black;background-color:#d3e6fe;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;white-space:nowrap;overflow:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached{border-radius:0;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_bar,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_img,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url("imgs/dhxwins_skyblue/dhxwins_progress.gif");background-position:center center;background-repeat:no-repeat;z-index:2;}.dhxwins_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}div.dhxwins_vp_dhx_skyblue.dhxwins_vp_fs{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000;padding:0;}.dhtmlx-info{color:#444;border-radius:4px;min-width:120px;padding:10px 10px 10px 20px;background-color:#FFC;font-size:12px;font-family:Tahoma;z-index:10000;margin:0 5px 5px 5px;border:1px solid #d3d3d3;box-shadow:0 0 5px #ccc;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}.dhtmlx-info.hidden{height:0;padding-bottom:0;padding-top:0;border-width:0;margin-top:0;margin-bottom:0;overflow:hidden;}.dhtmlx-error{background-color:#f17373;color:#fff;}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:300px;width:300px!important;text-align:center;position:fixed;background-color:#fff;z-index:20000;-moz-box-shadow:0 0 5px #AAA;-webkit-box-shadow:0 0 0 #AAA;box-shadow:0 0 5px #AAA;border:1px solid #a4bed4;border-radius:6px;}.dhtmlx_popup_title{padding:5px 0;font-size:12px;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;border-radius-top-right:6px;line-height:16px;font-family:Tahoma;font-weight:bold;}.dhtmlx-info,.dhtmlx_popup_title,.dhtmlx_popup_button{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-moz-user-select:-moz-none;cursor:pointer;}.dhtmlx_popup_text{font-size:13px;font-family:Tahoma;color:#444;min-height:30px;padding:20px 10px 10px 10px!important;overflow:hidden;}.dhtmlx_popup_controls{font-family:Tahoma;font-weight:bold;padding:10px 10px 17px 10px!important;}.dhtmlx_popup_button{font-size:12px;font-family:Tahoma;font-weight:bold;min-width:120px;width:120px;height:20px;display:inline-block;margin:0 5px;border-radius:4px;}.dhtmlx_popup_button div{line-height:20px;}div.dhx_modal_cover{background-color:#000;cursor:default;opacity:.2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1;}.dhtmlx_popup_button{color:#2e3947;text-shadow:0 1px 0 #fff;border:1px solid #a4bed4;background-color:#d5e6fc;background-image:-moz-linear-gradient(center bottom,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.00,#ecf2f7),color-stop(0.88,#cce2fe),color-stop(1.00,#e1eeff));background:-o-linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:-ms-linear-gradient(top,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);}.dhtmlx_popup_button:active,.dhtmlx_popup_button:focus{box-shadow:inset 0 0 2px #aaa;background:#bdd9fc;background:-moz-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#C4DDFF),color-stop(88%,#bdd9fc),color-stop(100%,#deeaf4));background:-o-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:-ms-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);}.dhtmlx_popup_title{box-shadow:inset 0 0 2px #fff;display:block;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{color:white;border:1px solid #f17373;background:#f17373;background:-webkit-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-moz-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-o-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-ms-linear-gradient(top,#ff7c7c 0,#f17373 88%,#ffbc75 100%);}.dhtmlx-alert-error.dhtmlx_modal_box,.dhtmlx-confirm-error.dhtmlx_modal_box{border:1px solid #f17373;}.dhtmlx-alert-warning .dhtmlx_popup_title,.dhtmlx-confirm-warning .dhtmlx_popup_title{color:#000;border:1px solid #d2b07f;background:#ff9f37;background:-webkit-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-moz-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-o-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-ms-linear-gradient(top,#ffc786 0,#ff9523 88%,#ffbc75 100%);}.dhtmlx-alert-warning .dhtmlx_popup_controls,.dhtmlx-confirm-warning .dhtmlx_popup_controls{border:1px solid #d5d5d5;border-width:0 1px 1px 1px;}.dhtmlx-alert-warning .dhtmlx_popup_text,.dhtmlx-confirm-warning .dhtmlx_popup_text{border:1px solid #d5d5d5;border-width:0 1px 0 1px;}.dhtmlx-alert .dhtmlx_popup_title,.dhtmlx-confirm .dhtmlx_popup_title{color:#000;border:1px solid #a4bed4;background:#d5e6fc;background:-moz-linear-gradient(center bottom,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0.00,#ecf2f7),color-stop(0.88,#cce2fe),color-stop(1.00,#e1eeff));background:-o-linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:-ms-linear-gradient(top,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);}.dhtmlx-alert .dhtmlx_popup_controls,.dhtmlx-confirm .dhtmlx_popup_controls{border:1px solid #d5d5d5;border-width:0 1px 1px 1px;}.dhtmlx-alert .dhtmlx_popup_text,.dhtmlx-confirm .dhtmlx_popup_text{border:1px solid #d5d5d5;border-width:0 1px 0 1px;}
SunshineIns/src/asset/fingerprint/image/base_clearImage.jpg
SunshineIns/src/asset/fingerprint/image/base_fingerBg.jpg
SunshineIns/src/asset/fingerprint/image/base_fingerBg.png
SunshineIns/src/asset/fingerprint/image/base_fpRegister_clearImage.jpg
SunshineIns/src/asset/fingerprint/image/base_fpVerify.jpg
SunshineIns/src/asset/fingerprint/image/base_fpVerify_clearImage.jpg
SunshineIns/src/asset/fingerprint/image/base_fpVerify_clearImage.png
SunshineIns/src/asset/fingerprint/image/base_notFoundMapPic.jpg
SunshineIns/src/asset/fingerprint/image/base_readCard.png
SunshineIns/src/asset/fingerprint/image/base_stopReadCard.png
SunshineIns/src/asset/fingerprint/image/base_wait.gif
SunshineIns/src/asset/fingerprint/js/baseMoth.js
New file
@@ -0,0 +1,57 @@
     /**
 * @Description 生成随机数
 * @Author: wenxin
 * @Date: 2014-04-15
 */
function getRandomNum()
{
    var random = parseInt(Math.random() * 10000);
    return random;
}
/**
 * 对特殊字符进行转义(+、&、%)
 * @author wenxin
 * @create 2013-08-05 17:20:31 pm
 * @param obj 需要转义的字符
 */
function transferredMeaning(src)
{
    src = src.replace(/\+/g, "%2B");
    src = src.replace(/&/g, "%26");
    src = src.replace(/\%/g, "%25");
    src = src.replace(/\//g, "%2F");
    src = src.replace(/\?/g, "%3F");
    src = src.replace(/\#/g, "%23");
    src = src.replace(/\=/g, "%3D");
    src = src.replace(/\ /g, "%20");
    return src;
}
/**
 * @Description: 计算字符串长度(可同时字母和汉字,字母占一个字符,汉字占2个字符)
 * @Author: ob.huang 黄玲彬
 * @Modified By:
 * @Date: 2013-09-24
 * @param:
 */
function strlen(str)
{
    var len = 0;
    if(str != null)
    {
           for (var i=0; i<str.length; i++)
        {
            var c = str.charCodeAt(i);
            if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f))
            {
                len++;
            }
            else
            {
                len+=2;
            }
        }
    }
    return len;
}
SunshineIns/src/asset/fingerprint/js/dhtmlxCommon.js
New file
@@ -0,0 +1,1728 @@
var myCombos = new Array();
/**
 * @Description: 下面自定义dhtmlx的ajax错误提示(重写)
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: dhtmlx源码参数
 */
if(typeof(_dhtmlxError) != "undefined")
{
    _dhtmlxError.prototype.throwError = function(type, name, params){
        //alert(type + "---" + name + "---" + params[1]);
        //alert(type + "---" + name + "---" + params[0].status);
        if(typeof(params) != "undefined")
        {
            var status = params[0].status;
            dealAjaxError(status);
        }
        return null;
    };
}
/**
 * @Description: 此方法为表单操作页面如何显示的方法,其它需要弹出框的地方,请使用createWindow()方法
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: paramStr 打开页面或者弹出框的参数
 */
var winPath = "";//当前窗口界面的路径
function openWindow(paramStr, isWindow) {
    //persCustomFieldAction!getAllField.action^900^430^新增人员
    var params = paramStr.split("^");//获取参数值
    winPath = params[0];
    if(typeof(isWindow) != "undefined" && isWindow)
    {
        if(isWindow == "yes")
        {
            createWindow(paramStr);
        }
        else
        {
            getAddTemplate(params[0]);
        }
    }
    else
    {
        if(system.isFormByWinOpen)
        {
            createWindow(paramStr);
        }
        else
        {
            getAddTemplate(params[0],"");
        }
    }
}
/**
 * 创建顶层Top窗口,适用于iframe中需要将窗口弹在最外层时
 *
 * @author lynn.chen
 * @since 2015年5月14日 下午1:51:05
 */
function createTopWindow(paramStr, html, confirmFun)
{
    //如果为iframe弹窗的话则调用top弹窗,显示在外层
    if(typeof(window.top.createWindow) != "undefined")
    {
        window.top.createWindow(paramStr, html, confirmFun);
    }
    else
    {
        createWindow(paramStr, html, confirmFun);
    }
}
/**
 * @Description: 创建窗口,窗口个数不受限制
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: paramStr 弹出框的参数(path^x^y^w^h^title-----persCustomFieldAction!getAllField.action^0^0^900^430^导入)
 */
var fixedCWinId = "userWin";
var dhxWins;
var newWin;
function createWindow(paramStr, html, confirmFun)
{
    paramStr = paramStr.replace("#","public_winTemplate.action");
    if(!dhxWins)
    {
        dhxWins = new dhtmlXWindows();
        //dhxWins.enableAutoViewport(false);
        //dhxWins.attachViewportTo(document.body);
        dhxWins.zIndexStep = 15;   //grid分栏后,左边的z-index=11  --zhangc 2014-6-13
        //dhxWins.setSkin((typeof(sysCfg) != "undefined" ? sysCfg.dhxSkin : "dhx_skyblue"));
        //dhxWins.setImagePath("/public/controls/dhtmlx/dhtmlxWindows/codebase/imgs/");
        dhxWins.attachEvent("onClose", function(win){
            //此函数为窗口关闭之后,如何存在下一级的窗口,则对下一级窗口进行屏蔽处理
            //win.setModal(false); //---将会导致下一个弹出框z-index每次增加zIndexStep(50),而当前窗口会关闭,没必要先屏蔽,lynn.chen 陈立
            /*窗口关闭回调函数
             * getCurrentWindow().onClose = function(){
                return false;//返回false不关闭窗口
            };*/
            if($(".dhtmlx_window_active").size() == 0)
            {
                //$(window.top.document.body).removeClass("dhxwins_vp_dhx_web");
            }
            if(win.onClose)
            {
                var ret = win.onClose();
                if(ret == false)
                {
                    return;
                }
            }
            if(win.onFormClose)//表单关闭回调函数
            {
                var ret = win.onFormClose();
                if(ret == false)
                {
                    return;
                }
            }
            try
            {
                //销毁pagingToolbar
                $(".dhtmlx_window_active .gridbox").each(function(index,element){
                    if(document.getElementById(this.id) && mygrids[this.id] && mygrids[this.id].pagingToolbar)
                    {
                        mygrids[this.id].pagingToolbar.unload();
                    }
                });
                //判断函数destroyComboxTree是否存在;如果存在则执行
                if(typeof(destroyComboxTree) == "function")
                {
                    destroyComboxTree();
                }
                $("div[class*='dhtmlxcalendar_in_input']").hide();//时间控件隐藏
                $("div[class^='dhx_popup_dhx_']").hide();//popup提示控件隐藏
            }
            catch(e)
            {
                //alert("not function);
            }
            var lastId = 0;
            dhxWins.forEachWindow(function(){
                lastId++;
            });
            win.setModal(false);//是否进行屏蔽
            if(lastId != 1)
            {
                var id = fixedCWinId + (lastId-1);
                newWin = dhxWins.window(id);
                newWin.setModal(true);//是否进行屏蔽
                /*var newWinZIndex = $(newWin).css("z-index") - dhxWins.zIndexStep;
                $(newWin).css("z-index", newWinZIndex);
                $(".dhx_modal_cover_ifr").css("z-index", newWinZIndex -2);
                $(".dhx_modal_cover_dv").css("z-index", newWinZIndex -2);*/
            }
            else
            {
                //视频ocx控件显示
                $("iframe[src*='.action']:eq(0)").contents().find(".current").css("visibility", "visible");
            }
            window.setTimeout(function(){
                $(".dhxwin_active input[type=text][readonly!=readonly][disabled!='disabled'],.dhxwin_active input[type=password][readonly!=readonly][disabled!='disabled']").eq(0).focus();
            }, 300);
            return true;
        });
        //document.onkeydown=esckeydown;   //esc键关闭弹出框口
    }
    var title = "";
    var idPrefix = 0;
    dhxWins.forEachWindow(function() {
        idPrefix++;
        var oldId = fixedCWinId + idPrefix;
        getCurrentWindow().setModal(false);//是否进行屏蔽
    });
    idPrefix++;//每次进来就来原有的窗口个数下加1
    var id = fixedCWinId +idPrefix;
    //globalCWinId = createWinId ? createWinId : fixedCWinId;
    //path^x^y^w^h^title(persCustomFieldAction!getAllField.action^0^0^900^430^导入)
    var params = paramStr.split("^");//获取参数值
    newWin = dhxWins.createWindow(id, params[1]?params[1] : 0, params[2]?params[2] : 0, params[3]?params[3] : 750, params[4] ? params[4] : 300);
    newWin.setText(params[5]? params[5] : title);
    //添加“正在加载中……”功能
    var loadingHtml = "<div id='progressWin" + id + "' style='float: left;position: absolute;z-index: 999999999;height:100%; width:100%; background:#F4F7FF;text-align:center;'><img src='public/controls/dhtmlx/dhtmlxLayout/codebase/imgs/dhxlayout_dhx_web/dhxlayout_progress.gif' style='margin-top:"+ (params[4]/2-60) +"px'/></div>";
    newWin.attachHTMLString(loadingHtml);
    if(!params[1] && !params[2])
    {
        newWin.center();
    }
    else if(params[1] == 0 && params[2] == 0)
    {
        newWin.center();
    }
    newWin.setModal(true);//是否进行屏蔽
    newWin.denyResize();//是否可以放大
    newWin.button("park").hide();
    newWin.button("minmax1").hide();
    $(".dhxwin_button_close").attr("title", "${common_close}");
    newWin.bringToTop();
    newWin.path = params[0];
    //newWin.hideHeader();
    //视频ocx控件隐藏,避免其覆盖弹出框
    $("iframe[src*='.action']:eq(0)").contents().find(".current").css("visibility", "hidden");
    if(params[0] == "*")//表示直接使用html
    {
        if(html)
        {
            newWin.attachHTMLString(html);
        }
    }
    else
    {
        //添加“正在加载中……”功能
        var xmlHttpObj = createXMLHttpReuestObject();
        var url = params[0];
        var unParm = url.indexOf("?") != -1 ? "&" : "?";
        xmlHttpObj.open("get",url + unParm + "un=" + Math.round(Math.random()*100000));
        xmlHttpObj.url = url;
        xmlHttpObj.win = newWin;
        xmlHttpObj.onload = function(a){
            var status = 200;
            try
            {
                status = this.status;
            }
            catch(e)
            {
                status = 0;
            }
            try
            {
                if((this.readyState == 4 && status == 200) || status == 404 || status == 500)
                {
                    var responseText = this.responseText;
                    try
                    {    //添加对返回结果的判断是否异常结果
                        var tempText = this.responseText.substring(0,20);
                        if(tempText.indexOf("ret") != -1 && (tempText.indexOf(sysCfg.warning) != -1 || tempText.indexOf(sysCfg.error) != -1))
                        {
                            //格式化返回的字符为对象
                            var responseJson = eval("("+this.responseText+")");
                            if(responseJson.ret == 500)
                            {
                                messageBox({messageType:"alert", text:responseJson.msg,callback:closeWindow});
                            }
                            return;
                        }
                    }
                    catch(e)
                    {
                    }
                    var repText = "<span></span>";
                    var text = (html ? html : "");
                    if(responseText.indexOf(repText) != -1)
                    {
                        responseText = responseText.replace("<span></span>", text);
                    }
                    else
                    {
                        responseText += text;
                    }
                    responseText = responseText.replace("confirmFun",confirmFun);
                    this.win.attachHTMLString(loadingHtml + responseText);
                }
            }
            catch(e)
            {
                status = status;
                throw e;
            }
            finally
            {
                //去除转圈处理和获取焦点
                window.setTimeout(function(){
                    $("#progressWin" + id).remove();
                    $(".dhxwin_active input[type=text][readonly!=readonly][disabled!='disabled'],.dhxwin_active input[type=password][readonly!=readonly][disabled!='disabled']").eq(0).focus();
                }, 300);
                if(typeof(dealAjaxError) != "undefined")
                {
                    status = status == 0 ? "${REQUEST_lOGIN_TIME_OUT!201}" : status;
                    dealAjaxError(status);
                }
            }
        }
        /*
        xmlHttpObj.onreadystatechange = function()
        {
            alert("b");
        }*/
        xmlHttpObj.send(null);
    }
    //return newWin;
}
/**
 * @Description: 根据不同浏览器,动态创建XMLHttpRequest对象
 * @Author: 何朗 helang
 * @Date: 2013-04-18
 * @return 创建成功的XMLHttpRequest对象
 */
function createXMLHttpReuestObject()
{
    var XMLHttpFactories = [
        function(){return new XMLHttpRequest()},
        function(){return new ActiveXObject("Msxml2.XMLHTTP")},
        function(){return new ActiveXObject("Msxml3.XMLHTTP")},
        function(){return new ActiveXObject("Microsoft.XMLHTTP")}
    ];
    var xmlHttp = false;
    for(var i=0; i<XMLHttpFactories.length; i++)
    {
        try
        {
            xmlHttp = XMLHttpFactories[i]();
        }
        catch(e)
        {
            continue;
        }
        break;
    }
    return xmlHttp;
}
/**
 * @Description: 修改窗口的属性
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: width 宽
 * @param: height 高
 * @param: text 标题文本
 */
function updateWindow(width, height, text, type)
{
    var idPrefix = 0;
    dhxWins.forEachWindow(function() {
        idPrefix++;
    });
    var id = fixedCWinId + (idPrefix);
    var ob = dhxWins.window(id).getDimension();
    if(type == "+")
    {
        dhxWins.window(id).setDimension(ob[0]+width, ob[1]+height);
    }
    else if(type == "-")
    {
        dhxWins.window(id).setDimension(ob[0]-width, ob[1]-height);
    }
    else
    {
        dhxWins.window(id).setDimension(width, height);
        dhxWins.window(id).center();
    }
    if(text)
    {
        dhxWins.window(id).setText(text);
    }
    $(".dhxwin_active .content_div").height(0);
    $(".dhxwin_active .content_div").height($(".dhxwin_active .content_td").height());
}
/**
 * @Description: 获取当前窗口对象
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-02-25
 */
function getCurrentWindow()
{
    var idPrefix = 0;
    dhxWins.forEachWindow(function() {
        idPrefix++;
    });
    var id = fixedCWinId + idPrefix;
    return dhxWins.window(id);
}
/**
 * @Description: 获取前某个打开的窗口对象
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-02-25
 */
function getPreWindow(index)
{
    var idPrefix = 0;
    dhxWins.forEachWindow(function() {
        idPrefix++;
    });
    var id = fixedCWinId + (idPrefix-index);
    return dhxWins.window(id);
}
/**
 * 得到第一个窗口对象
 *
 * @author lynn.chen
 * @since 2014年12月17日 下午5:45:53
 * @returns dhxWins.window(id)
 */
function getFirstWindow()
{
    var idPrefix = 1;
    if(typeof(dhxWins) == "undefined")
    {
        return null;
    }
    return dhxWins.window(fixedCWinId + idPrefix);
}
/**
 * 刷新之前的某个window
 * @param index
 */
function refreshPreWindow(index)
{
    var preWindow = getPreWindow(index);
    if(preWindow)
    {
        $.get(preWindow.path, function(result) {
             preWindow.attachHTMLString(result);
        }, "html");
    }
}
/**
 * @Description: 刷新窗口,自动获取最前面的窗口进行刷新
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 */
function refreshCurrentWindow()
{
    if(system.isFormByWinOpen && dhxWins)
    {
        var currentWindow = getCurrentWindow();
        $.get(currentWindow.path, function(result) {
            currentWindow.attachHTMLString(result)
        }, "html");
    }
    else
    {
        setIdHtmlByPath(winPath, "addBox");
    }
}
/**
 * @Description: 关闭窗口,自动获取最前面的窗口进行关闭
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 */
function closeWindow()
{
    if(system.isFormByWinOpen && dhxWins)
    {
        if(getCurrentWindow() != null){
            getCurrentWindow().close();
        }
        else
        {
            $("#listBox").show();
            $("#addBox").html("");
            $("#addBox").hide();
        }
    }
    else
    {
        $("#listBox").show();
        $("#addBox").html("");
        $("#addBox").hide();
    }
}
/**
 * @Description: 打开公共模版的进度条
 * @Author: lynn.chen 陈立
 * @Modified By:
 * @Date: 2013-06-15
 * @param: openProgressParams 窗体属性设置,参数前面加*的为必填项
 *         var    openProgressParams =
            {
                "winTitle" : "处理进度",//窗口标题,默认为:处理进度
            *    "dealDataPath" : "dealDataPath.action?id=1,2,3",
                "getProgressPath" : "processAction!getProcess.action",
            *    "singleMode" : true/false,//true:为单进度条模式,false:双进度条模式
                "currentProgressTitle" : "当前设备进度",
                "totalProgressTitle" : "总体进度",
                "callback" : function(){//进度完成时的回调函数
                    alert("进度已完成");
                }
            };
 * @param: selectFun 如果操作后右边选择框存在数据触发的函数
 * @param: noselectFun 如果操作后右边选择框不存在数据触发的函数
 * 说明:var selectedOptions = myForms[objId].getSelect("c_blocked").options;是获取其值的用法
 */
var openProgressParams = null;//全局进度处理参数
function openProgress(progressParams)
{
    openProgressParams = progressParams;
    //如果获取进度路径不存在,默认为:processAction!getProcess.action
    var getProgressPath = openProgressParams.getProgressPath;
    openProgressParams.getProgressPath = (!getProgressPath ||getProgressPath == null || getProgressPath == "" ? "processAction!getProcess.action" : getProgressPath);
    var winTitle = openProgressParams.winTitle ? openProgressParams.winTitle : "${common_op_deal}";//${common_op_deal}:处理进度
    var winParam = "public_opTemplate.action^0^0^600^285^" + winTitle;
    if(openProgressParams.singleMode == true)//这里主要是窗口高度不一样
    {
        winParam = "public_opTemplate.action^0^0^600^245^" + winTitle;
    }
    createWindow(winParam);
}
/**
 * @Description: 左右选择框控件函数
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: leftOptions 左边需要进行备选的数据列,格式如:[{"value":"0","text":"人员编号"},{"value":"1","text":"姓名"},{"value":"2","text":"卡号"}]
 * @param: rightOptions 右边需要进行备选的数据列,格式如:[{"value":"0","text":"人员编号"},{"value":"1","text":"姓名"},{"value":"2","text":"卡号"}]
 * @param: obId 该窗体显示时相应对象的id,也就是它该在哪显示
 * @param: attributes 窗体属性设置
 *             var attributes = {
                "leftLabel":"备选数据列",
                "rightLabel":"备选数据列",
                "size": 12,
                "buttonWidth" : 50,
                "isAllSelect" : true,
                "inputWidth" : 160,
                "labelWidth" : 160,
                "labelHeight" : 20
            };
 * @param: selectFun 如果操作后右边选择框存在数据触发的函数
 * @param: noselectFun 如果操作后右边选择框不存在数据触发的函数
 * 说明:var selectedOptions = myForms[objId].getSelect("c_blocked").options;是获取其值的用法
 */
var myForms = new Array();
function leftRightSelect(leftOptions, rightOptions, objId, attributes, selectFunc, noselectFunc)
{
    if (myForms[objId] && $("#" + objId + " select").size() > 0)
    {
        return;
    }
    else if(myForms[objId])
    {
        myForms[objId].unload();//清空之前的myForm,否则会new多次,出现多个
    }
    attributes = attributes? attributes : new Array();
    var size= attributes.size ? attributes.size : 22;
    var buttonWidth = attributes.buttonWidth ? attributes.buttonWidth : 50;
    buttonWidth = buttonWidth > 60 ? 60 : buttonWidth;
    var inputWidth = attributes.inputWidth? attributes.inputWidth : 210;
    var labelWidth = inputWidth;
    var labelHeight = attributes.labelHeight ? attributes.labelHeight : 20;
    var leftLabel = attributes.leftLabel ? attributes.leftLabel : "备选人员";
    var rightLabel = attributes.rightLabel ? attributes.rightLabel : "已选人员";
    if(attributes.isAllSelect == undefined)
    {
        var isAllSelect = true;
    }
    else
    {
        var isAllSelect = attributes.isAllSelect;
    }
    var allOffsetTop = size*6;
    var offsetTop = isAllSelect ? 0 : size*8;
    var allButtonType = isAllSelect ? "button" : "hidden";
    formData = [
        {
            type: "settings",
            position: "label-top",
            labelWidth: labelWidth,
            inputWidth: inputWidth,
            labelHeight: labelHeight
        },
        {
            type: "multiselect",
            label: leftLabel,
            name: "c_all",
            size: size,
            options: (leftOptions != null ? eval(leftOptions) : [])
        },
        {
            type: "newcolumn"
        },
        {
            type: "block",
            inputWidth:"auto",
            offsetLeft: 0,
            list: [{
                type: allButtonType,
                name: "addAll",
                value: ">>",
                offsetLeft: 0,//(60-buttonWidth)/2,
                offsetTop: allOffsetTop,
                inputWidth: buttonWidth
            }, {
                type: "button",
                name: "add",
                value: "&nbsp;>&nbsp;",
                offsetLeft: 0,//(60-buttonWidth)/2,
                offsetTop: offsetTop,
                inputWidth: buttonWidth
            }, {
                type: "button",
                name: "remove",
                value: "&nbsp;<&nbsp;",
                offsetLeft: 0,//(60-buttonWidth)/2,
                inputWidth : buttonWidth
            }, {
                type: allButtonType,
                name: "removeAll",
                value: "<<",
                offsetLeft: 0,//(60-buttonWidth)/2,
                inputWidth: buttonWidth
            }]
        },
        {
            type: "newcolumn"
        },
        {
            type: "multiselect",
            label: rightLabel,
            name: "c_blocked",
            size: size,
            options: (rightOptions != null ? eval(rightOptions) : [])
        }
    ];
    myForms[objId] = new dhtmlXForm(objId, formData);
    //按钮部分样式修复
    $("#"+ objId +" .in_block").css("padding", "0 5px");
    $("#"+ objId +" .dhxform_btn_txt").css("margin", "0 10px");
    //下面2句是解决ie下已下拉框显示的问题
    /* 暂时屏蔽,Occupancy有问题    $.browser.msie *******梁海波-20140410********* */
    //myForms[objId].getSelect("c_blocked").options.add(new Option("0" , ""));
    //$(myForms[objId].getSelect("c_blocked")).find('option').filter(':eq(0)').remove();
    myForms[objId].attachEvent("onButtonClick", function(name){
        if (name == "add" || name == "remove" || name == "addAll" || name == "removeAll")
        {
            changeContactState(objId, name == "add" || name == "addAll", name, isAllSelect, selectFunc, noselectFunc);
        }
    });
    //双击
    $(".dhxform_select[name^='c_all']").dblclick(function(){
        changeContactState(objId, true, "add", isAllSelect,selectFunc, noselectFunc);
    });
    $(".dhxform_select[name^='c_blocked']").dblclick(function(){
        changeContactState(objId, false, "remove", isAllSelect, selectFunc, noselectFunc);
    });
    //获取当前值
    myForms[objId].getValue = function(){
        var optValue = "";
        var selectedOptions = myForms[objId].getSelect("c_blocked").options;
        for ( var i = 0; i < selectedOptions.length; i++)
        {
            optValue += selectedOptions[i].value + ",";
        }
        return optValue != "" ? optValue.substring(0,optValue.length-1) : optValue;
    };
}
function changeContactState(objId, block, name, isAllSelect, selectFunc, noselectFunc)
{
    var ida = (block ? "c_all" : "c_blocked");
    var idb = (block ? "c_blocked" : "c_all");
    var sa = myForms[objId].getSelect(ida);
    var sb = myForms[objId].getSelect(idb);
    if(name == "addAll" || name == "removeAll")
    {
        for ( var i = 0; i < sa.options.length; i++)
        {
            sb.options.add(new Option(sa.options[i].text, sa.options[i].value));
        }
        for ( var i = 0; i < sa.options.length;)
        {
            $(sa).find('option').filter(':eq(' + i + ')').remove();
        }
    }
    else
    {
        var t = myForms[objId].getItemValue(ida);
        if(t.length == 0)
        {
            return;
        }
        eval("var k={'" + t.join(":true,") + "':true};");
        var w = 0;
        var ind = -1;
        while(w < sa.options.length)
        {
            if(k[sa.options[w].value])
            {
                sb.options.add(new Option(sa.options[w].text,
                        sa.options[w].value));
                $(sa).find('option').filter(':eq(' + w + ')').remove();
                ind = w;
            }
            else
            {
                w++;
            }
        }
        if(sa.options.length > 0 && ind >= 0)
        {
            if(sa.options.length > 0)
            {
                sa.options[t.length > 1 ? 0 : Math.min(ind,
                        sa.options.length - 1)].selected = true;
            }
        }
        //单选
        if(isAllSelect == false && block == true && sb.options.length > 1)
        {
            sa.options.add(new Option(sb.options[0].text, sb.options[0].value));
            $(sb).find('option').filter(':eq(0)').remove();
        }
    }
    //对已选数据列进行判断,是否已选数据
    if(myForms[objId].getSelect("c_blocked").options.length > 0)
    {
        if(selectFunc)
        {
            selectFunc();
        }
    }
    else
    {
        if(noselectFunc)
        {
            noselectFunc();
        }
    }
}
/**
 * @Description: 打开表单页面,只适用于操作栏中进行调用
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-03-06
 * @param: id 操作时的参数,
 * 形如persCustomFieldAction!getAllField.action^0^0^900^430为path^x^y^w^h^title
 */
function openWindowToForm(id)
{
    var objId = "operate";
    var winStr = id;
    if(id.split("^")[0].indexOf("]") > 0)
    {
        objId = id.split("^")[0].substring(1,id.split("^")[0].indexOf("]"));
        winStr = id.substring(id.split("^")[0].indexOf("]")+1);
    }
    if(operateToolbars[objId])
    {
        try
        {
            var isExistId = false;
            operateToolbars[objId].forEachItem( function(itemId){
                if(itemId == id)
                {
                    isExistId = true;
                    return;
                }
            });
            if(isExistId)
            {
                winStr += "^"+operateToolbars[objId].getItemText(id);
            }
            else
            {
                winStr += "^"+operateToolbars[objId].getListOptionText("moreActions",id);
            }
        }
        catch(e)
        {
            winStr += "^"+operateToolbars["leftOperate"].getItemText(id);
        }
    }
    openWindow(winStr);
}
/**
 * @Description: 专门为导出提供,弹出窗口
 * @Author: pokiz.xu
 * id 的格式为accTransactionAction!export.action(type=XLS|PDF)^0^0^500^190#rightGridbox#leftOperate
 *                     ^前面的为导出的action路径,#后面接着哪个grid,与哪个操作区域
 *                     #后面的可以不填,如果填,需要两个一起填写
 *                  (type=...)为导出页面显示的导出格式
 * @Date: 2013-03-06
 * @modify: gordon.zhang@zkteco.com 2014-12-18
 */
function openWindowForExport(id)
{
    var winStr;
    var objId = "operate";
    var gridName;
    var sourceId = id;
    if(id.indexOf("#") >= 1)
    {
        gridName = id.substring(id.indexOf("#")+1, id.lastIndexOf("#"));
        objId = id.substring(id.lastIndexOf("#") + 1, id.length);
        id = id.substring(0, id.indexOf("#"));
    }
    var typeStr="";
    if (id.indexOf("(type=")>=1)
    {
        var typeBegini = id.indexOf("(type=");
        var typeEndi = id.substring(typeBegini).indexOf(")");
        typeStr = id.substring(typeBegini,typeBegini+typeEndi);
        typeStr = typeStr.split("=")[1];
        id = id.substring(0,typeBegini)+id.substring(typeBegini+typeEndi+1);
    }
    var opStr;
    if(id.indexOf("(select") > 0)
    {
        var opParamStr = id.substring(id.indexOf("(select") + "(select".length + 1, id.lastIndexOf(")"));
        var val = $("input:hidden[name='"+opParamStr+"']").val();
        opStr = val;
    }
    var winHtml = "";
    if(operateToolbars[objId])
    {
        winHtml = operateToolbars[objId].getItemText(sourceId);
    }
    else
    {
        winHtml = "${common_op_export}";
    }
    winStr = "^"+winHtml;
    var actionName = id.split("^")[0];
    var size = id.substring(id.indexOf("^"));
    var actionInput = "<input style='display: none' id='actionName' value='"+ actionName +"'/>";
    var gridNameInput = "<input style='display: none' id='gridName' value='"+ gridName +"'/>";
    var custom = "<input style='display: none' id='cutomName' value='"+ opStr +"'/>";
    var typeStr = "<input style='display: none' id='typeStr' value='"+ typeStr +"'/>";
    createWindow("public_opExportRecord.action" + size +winStr, actionInput + gridNameInput + custom+typeStr);
}
/**
 * @Description: 已打开窗口的方式来进行操作,只适用于操作栏中进行调用
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-03-06
 * @param: id 操作时的参数,
 * 形如persCustomFieldAction!getAllField.action^0^0^900^430为path^x^y^w^h^title
 * 下面为需在弹窗前进行进行判断的配置
 * persCustomFieldAction!getAllField.action?
 * id=(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的对象',noRightSelectPrompt:'只能选择一个对象进行操作',split:','})
 * ^0^0^900^430
 */
var currentOperateId;
var operateObjId = "operate";
function openWindowByOperate(id)
{
    var winStr = id;
    if(id.split("^")[0].indexOf("]") > 0)
    {
        operateObjId = id.split("^")[0].substring(1,id.split("^")[0].indexOf("]"));
        winStr = id.substring(id.split("^")[0].indexOf("]")+1);
    }
    else
    {
        operateObjId = "operate";
    }
    if(operateToolbars[operateObjId] && id.split("^").length > 6)
    {
        winStr += "^"+operateToolbars[operateObjId].getItemText(id);
    }
    if(id.indexOf("(id")>0)
    {
        var checkboxName;
        var idStr = "(id)";
        var selectedNum = 1;
        var conditionMode = "!=";
        var noSelectPrompt = "${common_prompt_selectObj}";
        var noRightSelectPrompt = "${common_prompt_onlySelectOneObject}";
        var split = ",";
        var idNum = 0;
        if(id.indexOf("(id*")>0)
        {
            //(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的角色',noRightSelectPrompt:'只能选择一个操作的角色',split:','})
            var opParamStr = id.substring(id.indexOf("(id*") + "(id*".length, id.lastIndexOf(")"));
            var opParams = eval("(" + opParamStr + ")");
            checkboxName = opParams.checkboxName ? opParams.checkboxName : checkboxName;
            selectedNum = opParams.selectedNum != undefined ? opParams.selectedNum : selectedNum;
            conditionMode = opParams.conditionMode ? opParams.conditionMode : conditionMode;
            noSelectPrompt = opParams.noSelectPrompt ? opParams.noSelectPrompt : noSelectPrompt;
            noRightSelectPrompt = opParams.noRightSelectPrompt ? opParams.noRightSelectPrompt : noRightSelectPrompt;
            split = opParams.split ? opParams.split : split;
            idStr = id.substring(id.indexOf("(id*"), id.lastIndexOf(")")+1);
        }
        var checkboxVlaues = getGridCheckboxValue(checkboxName, split);
        if(checkboxVlaues == "")
        {
            messageBox({messageType:"alert",text: noSelectPrompt});
            return;
        }
        else
        {
            idNum = checkboxVlaues.split(split).length;
            switch (conditionMode)
            {
                case "!=":
                    if(idNum != selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
                        return;
                    }
                    break;
                case "==":
                    if(idNum == selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
                        return;
                    }
                    break;
                case ">":
                    if(idNum > selectedNum)
                    {
                        //noRightSelectPrompt = "已选择{0},最多只能选择{1}个对象进行操作";
                        messageBox({messageType:"alert",text: noRightSelectPrompt.format(idNum,selectedNum)});
                        return;
                    }
                    break;
                case ">=":
                    if(idNum >= selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
                        return;
                    }
                    break;
                case "<":
                    if(idNum < selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
                        return;
                    }
                    break;
                case "<=":
                    if(idNum > selectedNum)
                    {
                        var msg = "${common_prompt_noPass}";
                        messageBox({messageType:"alert",text:  msg.format(selectedNum)});
                        return;
                    }
                    break;
                default:
                    messageBox({messageType:"alert",text: "条件运算符不合法,必须为'!=,==,>,>=,<,<='"});
                    return;
                    break;
            }
        }
        winStr = id.replace(idStr, checkboxVlaues);
    }
    var isExistId = false;
    operateToolbars[operateObjId].forEachItem( function(itemId){
        if(itemId == id)
        {
            isExistId = true;
            return;
        }
    });
    if(isExistId)
    {
        winStr += "^"+operateToolbars[operateObjId].getItemText(id);
    }
    else
    {
        winStr += "^" + operateToolbars[operateObjId].getListOptionText("moreActions",id);
    }
    currentOperateId = id;
    createWindow(winStr);
}
/**
 * @Description: 非打开窗口的方式来进行操作,非操作栏中同样可以进行调用
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-03-06
 * @param: id 操作时的参数,
 * 形如persCustomFieldAction!getAllField.action为path
 * 下面为需在弹窗前进行进行判断的配置
 * [operateId]persCustomFieldAction!getAllField.action?
 * id=(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的对象',noRightSelectPrompt:'只能选择一个对象进行操作',split:',',gridName: 'gridbox'})^#自定义提示信息
 *
 */
function executeOperate(id, callbackFun)
{
    var opStr = id.split("^")[0];
    if(id.indexOf("]") > 0)
    {
        operateObjId = id.substring(1,id.indexOf("]"));
        opStr = id.substring(id.indexOf("]")+1);
    }
    else
    {
        operateObjId = "operate";
    }
    var idNum = 0;
    var itemText = "";
    var gridName = null;
    if(id.indexOf("(id")>0)//判断是否是grid复选
    {
        var checkboxName;
        var idStr = "(id)";
        var selectedNum = 0;
        var conditionMode = "==";
        var noSelectPrompt = "${common_prompt_selectObj}";
        var noRightSelectPrompt = "${common_prompt_onlySelectOneObject}";
        var split = ",";
        var isOnline = false;
        if(id.indexOf("(id*")>0)//这里是判断是否存在提示信息参数
        {
            //(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的角色',noRightSelectPrompt:'只能选择一个操作的角色',split:','})
            var opParamStr = id.substring(id.indexOf("(id*") + "(id*".length, id.lastIndexOf(")"));
            var opParams = eval("(" + opParamStr + ")");
            checkboxName = opParams.checkboxName ? opParams.checkboxName : checkboxName;
            selectedNum = opParams.selectedNum != undefined ? opParams.selectedNum : selectedNum;
            conditionMode = opParams.conditionMode ? opParams.conditionMode : conditionMode;
            noSelectPrompt = opParams.noSelectPrompt ? opParams.noSelectPrompt : noSelectPrompt;
            noRightSelectPrompt = opParams.noRightSelectPrompt ? opParams.noRightSelectPrompt : noRightSelectPrompt;
            isOnline = opParams.isOnline ? opParams.isOnline : isOnline ;
            split = opParams.split ? opParams.split : split;
            gridName = opParams.gridName ? opParams.gridName : gridName;
            idStr = id.substring(id.indexOf("(id*"), id.lastIndexOf(")")+1);
        }
        var checkboxVlaues = getGridCheckboxValue(checkboxName, split);
        if(checkboxVlaues == "")
        {
            messageBox({messageType:"alert",text: noSelectPrompt});
            return;
        }
        else
        {
            idNum = checkboxVlaues.split(split).length;
            switch (conditionMode)
            {
                case "!=":
                    if(idNum != selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                case "==":
                    if(idNum == selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                case ">":
                    if(idNum > selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                case ">=":
                    if(idNum >= selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                case "<":
                    if(idNum < selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                case "<=":
                    if(idNum >= selectedNum)
                    {
                        messageBox({messageType:"alert",text: noRightSelectPrompt});
                        return;
                    }
                    break;
                default:
                    messageBox({messageType:"alert",text: "条件运算符不合法"});
                    return;
                    break;
            }
        }
        opStr = opStr.replace(idStr, checkboxVlaues);
    }
    else if(id.indexOf("(select") > 0)
    {
        var opParamStr = id.substring(id.indexOf("(select") + "(select".length + 1, id.lastIndexOf(")"));
        var val = $("input:hidden[name='"+opParamStr+"']").val();
        opStr = id.substring(0, id.indexOf("custom=") + "custom=".length) + (val == undefined ? "" : val);
    }
    var msg = "${common_prompt_executeOperate}";//你确定要执行{0}操作吗?
    if(id.split("^").length >= 2)//判断是否存在自定义文本
    {
        itemText = id.split("^")[1];
        if(itemText.indexOf("#") >= 0)
        {
            msg = itemText.replace("#","");
        }
    }
    else if(operateToolbars[operateObjId])//判断是否是Toolbar中的操作
    {
        var isExistId = false;
        operateToolbars[operateObjId].forEachItem( function(itemId){
            if(itemId == id)
            {
                isExistId = true;
                return;
            }
        });
        if(isExistId)//判断当前操作栏对象中是否存在该id,存在则直接获取文本(通过id来获取文本)
        {
            itemText = operateToolbars[operateObjId].getItemText(id);
        }
        else//不存在时从下来框中去获取,下拉框id统一使用moreActions
        {
            itemText += "^" + operateToolbars[operateObjId].getListOptionText("moreActions",id);
        }
    }
    msg = msg.format(itemText);
    var submit = function (result) {
        if(result)
        {
            //这里判断该操作是否为ajax操作
            if(opStr.indexOf(".action") > 0 || opStr.indexOf(".do") > 0)
            {
                var urlStr=opStr;
                if(opStr.indexOf("?")!=-1){
                    urlStr=opStr.substr(0,opStr.indexOf("?"));
                }
                onLoading(function(){
                    $.ajax({
                        type: "POST",
                        url: urlStr,
                        data:parseURL2JSON(opStr),
                        dataType:"json",
                        async : true,
                        success: function(result)
                        {
                            if(callbackFun)
                            {
                                dealRetResult(result,callbackFun);
                            }
                            else
                            {
                                dealRetResult(result, undefined, gridName);
                            }
                        }
                    });
                   });
            }
            else//不是ajax则为执行函数
            {
                eval(opStr + '()');
            }
        }
        return true; //close
    };
    messageBox({messageType:"confirm", text:msg, callback:submit});
    currentOperateId = id;
}
/**
 * @Description: 根据解析xml来创建操作栏,在list模版页面进行调用
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-01-23
 * @param: pageConfigXML 需要解析的xml路径
 * @param: obId 用于显示对象的id,也就是一个页面可以出现多个,默认为list模版中的operate
 * @param: callback 加载完回调函数
 */
var operateToolbars = new Array();
function createToolbar(pageConfigXML, obj, callback)
{
    var obId = "operate";
    pageConfigXML += (pageConfigXML.indexOf("?") > 0 ? "&" : "?") + "rootType=toolbars";
    if(typeof(obj) == "undefined" || typeof(obj) == "string")//判断是否是对象id字符串
    {
        obId = (obj ? obj : obId);
        operateToolbars[obId] = new dhtmlXToolbarObject(obId);
        $("#" + obId).addClass("dhxToolbar");
    }
    else
    {
        obId = (obj.id ? obj.id : obId);
        operateToolbars[obId] = obj;
    }
    //operateToolbars[obId].setSkin(sysCfg.dhxSkin);
    operateToolbars[obId].attachEvent("onClick", function(id){
        /****
        this.objPull[this.idPrefix + "input_1"];
        inputA = Toolbar.objPull[Toolbar.idPrefix+"input_1"].obj.firstChild;*/
    });
    operateToolbars[obId].setIconSize(18);
    operateToolbars[obId].setIconsPath(sysCfg.rootPath + "/public/images/opToolbar/");
    var path = pageConfigXML + (pageConfigXML.indexOf("?") == -1 ? "?" : "&") + "un=" + new Date().getTime() + "&" + $.param($.ajaxSetup().data);
    operateToolbars[obId].loadXML(path, function(){
        var $dhxToolbar = $(this.base);
        if($dhxToolbar.size() == 1)
        {
            var toolbarWidth = 0;
            $dhxToolbar.find("div.dhx_toolbar_btn").each(function(i){
                toolbarWidth +=  $(this).outerWidth();
            });
            //$(".dhx_cell_cont_layout .dhxToolbar .dhxtoolbar_float_left div.dhx_toolbar_btn").
            var left = $dhxToolbar.offset().left + 30;
            if(left < 50 && $("iframe[src*='.action'],iframe[src*='.do']:eq(0)", parent.document).size() > 0)
            {
                left = $("iframe[src*='.action'],iframe[src*='.do']:eq(0)", parent.document).parent().offset().left + 40;
            }
            if((left + toolbarWidth) > $(window.top.document.body).width())
            {
                $(window.top.document.body).css("min-width",left + toolbarWidth);
                window.top.resizeWindow();
            }
        }
        if(typeof(callback) != "undefined")
        {
            callback();
        }
    });
}
/**
 * @Description: 获取操作栏真实节点id
 * @Author: lynn.chen 陈立
 * @Date: 2015-01-22
 * @param:toolbarId 操作栏对象div id
 * @param:itemId 操作栏节点id
 */
function getToolbarRealItemId(toolbarId, itemId)
{
    return operateToolbars[toolbarId].idPrefix + itemId;
}
/**
 * @Description: 封装dhmlxmessage消息提示框
 * @Author: helang 何朗
 * @Date: 2013-04-22
 * @param:paramsJson  传入的配置参数
        下面是关于paramsJson格式的说明及实例,每个属性都有默认值:
      confirmBox({
          title:"提示信息",
          type:"confirm-error dhtmlx-myCss",(dhtmlxmessage内置的三种type:confirm-warning confirm confirm-error)
          ok:"确定",
          cancel:"取消",
          expire:3000,
          text:"你确定要删除此条信息吗?",
          messageType:"confirm",
          callback:function(result){alert(11);},
          width:250
      });
      title ok cancel text 分别对应消息提示框上相应的文本内容;
      messageType指的是消息提示框类型(有confirm message alert三种);
      callback是回调方法;
      特别注意下type属性,这里可以自己定义样式,指定多个样式以空格分隔开,自定义的类样式中属性必须加!important标识且自定义样式必须用dhtmlx-xxxx这种格式类名。
      expire当组件的messageType为message的时候,设定message提示框多少毫秒消失,width指当消息提示框类型为message的时候,所显示的提示框的宽度,默认250。
 */
function messageBox(paramsJson)
{
    this.messageType = paramsJson.messageType ? $.trim(paramsJson.messageType) : "confirm";
    this.types = "";
      if(paramsJson.type)
      {
          this.typeArray = paramsJson.type.split(" ");
          for(var i=0; i<this.typeArray.length; i++)
          {
              this.types += this.typeArray[i]+" ";
          }
      }
    switch(this.messageType)
    {
        case "confirm":
              this.title = paramsJson.title ? $.trim(paramsJson.title) : "${common_prompt_title}";
              this.type = this.types ? $.trim(this.types) : "confirm";
              this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "${common_edit_ok}";
              this.cancel = paramsJson.cancel ? $.trim(paramsJson.cancel) : "${common_edit_cancel}";
              this.text = paramsJson.text ? $.trim(paramsJson.text) : "${common_prompt_sureToDel}";
              this.width = paramsJson.width ? $.trim(paramsJson.width) : "300px";
              this.callback = paramsJson.callback;
            dhtmlx.confirm({
                title:this.title,
                type:this.type,
                ok:this.ok,
                cancel:this.cancel,
                width: this.width,
                text:this.text,
                callback:this.callback
            });
            break;
        case "confirm-warning":
              this.title = paramsJson.title ? $.trim(paramsJson.title) : "${common_prompt_title}";
              this.type = this.types ? $.trim(this.types) : "confirm-warning";
              this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "${common_edit_ok}";
              this.cancel = paramsJson.cancel ? $.trim(paramsJson.cancel) : "${common_edit_cancel}";
              this.text = paramsJson.text ? $.trim(paramsJson.text) : "${common_prompt_sureToDel}";
              this.width = paramsJson.width ? $.trim(paramsJson.width) : "300px";
              this.callback = paramsJson.callback;
            dhtmlx.confirm({
                title:this.title,
                type:this.type,
                ok:this.ok,
                width: this.width,
                cancel:this.cancel,
                text:this.text,
                callback:this.callback
            });
            break;
        /*case "message":
            //添加当两次message提示框间隔很小出现时,导致提示框样式干扰问题
            if($("#messageIconId").parent().parent().parent())
            {
                $("#messageIconId").parent().parent().empty();
            }
            this.width = paramsJson.width ? paramsJson.width : 250;
            this.type = this.types ? $.trim(this.types) : "warning";
            this.text = paramsJson.text ? $.trim(paramsJson.text) : "";
            this.expire = paramsJson.expire ? $.trim(paramsJson.expire) : 1200;
            dhtmlx.message({
                id:"messageBoxId",
                type:"info",
                text:"<img id='messageIconId' src=''/>&nbsp;&nbsp;"+this.text,
                expire:this.expire
            });
            //动态计算message的显示位置
            //$($(".dhtmlx_message_area")[0]).css("left",(document.body.offsetWidth)/2-40);
            //$($(".dhtmlx_message_area")[0]).css("top",(document.body.offsetHeight)/2);
            //添加icon图片,并动态更新样式
            var messageIconObj = $("#messageIconId");
            messageIconObj.parent().css("text-align","center");
            messageIconObj.parent().css("line-height","38px");
            messageIconObj.parent().css("overflow","hidden");
            messageIconObj.parent().css("height","38px");
            messageIconObj.parent().css("padding-left","8px");
            messageIconObj.parent().css("padding-right","8px");
            messageIconObj.parent().parent().parent().css("width","auto");
            messageIconObj.parent().parent().parent().css("display","inline-table");
            var messageIconPath = "public/controls/dhtmlx/dhtmlxMessage/codebase/icons/";
            //为message框动态指图标,succsee error loading warning 四种不同图标
            switch (this.type)
            {
                case "success" :
                    messageIconObj.attr("src",messageIconPath+"message_success.png");
                    break;
                case "error" :
                    messageIconObj.attr("src",messageIconPath+"message_error.png");
                    break;
                case "loading" :
                    messageIconObj.attr("src",messageIconPath+"message_loading.gif");
                    break;
                case "warning" :
                    messageIconObj.attr("src",messageIconPath+"message_warning.png");
                    break;
            }
            messageIconObj.css("vertical-align","middle");
            break;*/
        case "alert":
            this.title = paramsJson.title ? $.trim(paramsJson.title) : "${common_prompt_title}";
            this.type = this.types ? $.trim(this.types) : "alert";    //'alert', 'alert-warning', 'alert-error
            this.text = paramsJson.text ? $.trim(paramsJson.text) : "";
            this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "${common_edit_ok}";
            this.callback = paramsJson.callback;
            dhtmlx.alert({
                    title:this.title,
                    type:this.type,
                    text:this.text,
                    ok:this.ok,
                    callback:this.callback
            })
            break;
        case "alert-warning":
            this.title = paramsJson.title ? $.trim(paramsJson.title) : "${common_prompt_title}";
            this.type = this.types ? $.trim(this.types) : "alert";    //'alert', 'alert-warning', 'alert-error
            this.text = paramsJson.text ? $.trim(paramsJson.text) : "";
            this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "${common_edit_ok}";
            this.callback = paramsJson.callback;
            dhtmlx.alert({
                    title:this.title,
                    type:this.messageType,
                    text:this.text,
                    ok:this.ok,
                    callback:this.callback
            })
            break;
    }
    //添加样式切换功能
    /*$(".dhtmlx_popup_button").each(function(b){
        $(this).hover(function(){
            $(this).css("background","url(public/images/btn_bg_hover.jpg) repeat scroll 0 0 transparent");
        },
        function(){
            $(this).css("background","url(public/images/btn_bg.jpg) repeat scroll 0 0 transparent");
        });
    });*/
}
/**
 * 限制startTimeId和endTimeId不能大于当前时间
 * startTimeId不能大于endTimeId
 * @author colin.yao 2014-4-16 17:42:14
 * @param mCal new出来的日期控件对象
 * @param startTimeId
 * @param endTimeId
 * @param timeType 日期格式类型
 * @param type 类型(1为开始,2为结束)
 * @return
 */
function limitTime(mCal, startTimeId, endTimeId, timeType, type){
    //获取当前日期
    var myDate = new Date();
    var oneYear = myDate.getFullYear();
    var oneMonth = myDate.getMonth()+1;
    var oneDay = myDate.getDate();
    myDate = oneYear+"-"+oneMonth+"-"+oneDay;
    var startTime = $("#"+startTimeId).val();
    var endTime = $("#"+endTimeId).val();
    if(timeType == 0)
    {
        mCal.setDateFormat(sysCfg.dhxShortDateFmt);
        mCal.hideTime();
    }
    else
    {
        mCal.setDateFormat(sysCfg.dhxLongDateFmt);
    }
    if(type == 1)
    {
        if(endTime == "" || endTime == null)
        {
            mCal.setSensitiveRange(null, myDate);
        }
        else
        {
            mCal.setSensitiveRange(null, endTime);
        }
    }
    else
    {
        if(startTime == "" || startTime == null)
        {
            mCal.setSensitiveRange(null, myDate);
        }
        else
        {
            mCal.setSensitiveRange(startTime, myDate);
        }
    }
}
/**
 * 函数主要用于有开始时间和结束时间需要输入的情况
 * @author liangm 20130427
 * @param mCal 日期控件
 * @param startTimeId 开始时间输入框id
 * @param referTimeId 参照时间id(即当填写开始时间时,那么它的参照时间id即为结束时间输入框id,反之,亦然)
 * @return
 */
function inputTime(mCal, startTimeId, referTimeId, timeType)
{
    if(timeType == 0)
    {
        mCal.setDateFormat(sysCfg.dhxShortDateFmt);
        mCal.hideTime();
    }
    else
    {
        mCal.setDateFormat(sysCfg.dhxLongDateFmt);
    }
    if (referTimeId == startTimeId)
    {
        mCal.setSensitiveRange($("#"+referTimeId).val() == "" ? null : $("#"+referTimeId).val(), null);
    }
    else
    {
        mCal.setSensitiveRange(null, $("#"+referTimeId).val() == "" ? null : $("#"+referTimeId).val());
    }
}
/**
 * 限制开始时间不能大于结束时间、结束时间不能小于开始时间
 * @author Jason 20130620
 * @param myCalendar new出来的日期控件对象
 * @param startTimeId 开始时间输入框id
 * @param referTimeId 参照时间id(即当填写开始时间时,那么它的参照时间id即为结束时间输入框id,反之,亦然)
 * @return
 */
function inputDateTime(myCalendar, startTimeId, referTimeId)
{
    if (referTimeId == startTimeId)
    {
        myCalendar.setSensitiveRange($("#"+referTimeId).val(), null);
    }
    else
    {
        myCalendar.setSensitiveRange(null, $("#"+referTimeId).val());
    }
}
/**
 * @Description: 创建长日期格式的dhx日历控件(格式如:2013-5-20 18:00:00)
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-09-03
 * @param: object 需要解析的xml路径
 */
var myCalendars = new Array();
function createLongDhxCalendar(object, startTime)
{
    var longCalendar;
    var objArray = object.toString().split(",");//保存id值
    //下面是同过ajax请求加载到相应控件中
    longCalendar = new dhtmlXCalendarObject(object);
    longCalendar.setDateFormat(sysCfg.dhxLongDateFmt);
    if(startTime)
    {
        longCalendar.setSensitiveRange(startTime);
    }
    //longCalendar._strToDate(new Date(), sysCfg.dhxShortDateFmt);
    setCalendarTopPosition(longCalendar,objArray);
    myCalendars[object] = longCalendar;
    return longCalendar;
}
/**
 * @Description: 创建短日期格式的dhx日历控件(格式如:2013-5-20)
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-09-03
 * @param: object
 */
function createShortDhxCalendar(object, startDate)
{
    var shortCalendar;
    var objArray = object.toString().split(",");//保存id值
    //下面是同过ajax请求加载到相应控件中
    shortCalendar = new dhtmlXCalendarObject(object);
    shortCalendar.setDateFormat(sysCfg.dhxShortDateFmt);
    if(startDate)
    {
        shortCalendar.setSensitiveRange(startDate);
    }
    shortCalendar.hideTime();//隐藏时间
    setCalendarTopPosition(shortCalendar, objArray);
    myCalendars[object] = shortCalendar;
    return shortCalendar;
}
/**
 * @Description: 自动判断给Calendar设置Position为Top
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2013-09-03
 * @param: calendar 日期控件对象
 * @param: objArray 对象id数组
 * @param: autoJudge 自动判断,false则是一定设置为top
 */
function setCalendarTopPosition(calendar, objArray, autoJudge)
{
    autoJudge = typeof(autoJudge) == "undefined" || autoJudge == null || autoJudge ? true : false;
    function doOnInpClick()
    {
        if(!autoJudge)//非自动,必须使用
        {
            this.calendar.setPosition($(this).offset().left, ($(this).offset().top - $(this.calendar.base).height()));
        }
        else if(($(this).offset().top + $(this.calendar.base).height()) > $(document.body).height() && $(this).offset().top > $(this.calendar.base).height())//动态判断位置
        {
            this.calendar.setPosition($(this).offset().left, ($(this).offset().top - $(this.calendar.base).height()));
        }
    };
    var objectArray = (typeof(objArray) == "string" ? new Array([objArray]) : objArray);
    for(var i = 0; i < objectArray.length; i++)
    {
        var obj = document.getElementById(objectArray[i]);
        if(obj == null || !obj)
        {
            break;
        }
        if(String(obj.tagName).toLowerCase() == "input")
        {
            $(obj).bind("blur", function(){
                if(this.calendar.isVisible())
                {
                    var inputObj = this;
                    var t = window.setTimeout(function(){
                        inputObj.calendar.hide();
                        window.clearTimeout(t);
                    },50);
                }
            });
            $(obj).bind("click", doOnInpClick);
            obj.calendar = calendar;
            obj.autoJudge = autoJudge;
        }
    }
    objArray = null;
}
/**
 * @Description: 给Layout设置Resize自动适应大小变化
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2014-3-20
 * @param: layout dhtmlXLayoutObject对象
 */
function setLayoutResize(layout)
{
    layout.attachEvent("onPanelResizeFinish", setSizesGrid);//内部拖动
    layout.attachEvent("onResize", setSizesGrid); //外部缩放
    layout.attachEvent("onCollapse", setSizesGrid); //按钮缩
    layout.attachEvent("onExpand", setSizesGrid);//按钮展开
    layout.setSizes(false);
}
/**
 * @Description: 重置grid大小
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 201312-27
 * @param: girdName
 */
function resizeLayout(layoutName)
{
    if(document.getElementById(layoutName))
    {
        var height = $("#" + layoutName).outerHeight() - $("#" + layoutName).position().top;
        $("#" + layoutName).height(height);
    }
}
/**
 * @Description: 按钮操作模板高度重置方法
 * @Author: lynn.chen  陈立
 * @Modified By:
 * @Date: 2015-01-23
 */
function opTemplateHeightResize()
{
    if($(".dhxwin_active").size() > 0)
    {
        var $contentDiv = $(".dhxwin_active .content_div");
        $contentDiv.height($(".dhxwin_active .content_td").height());
        $contentDiv.css("overflow", "auto");
    }
    else
    {
        var $contentDiv = $(".dhx_cell_cont_layout .content_div");
        $contentDiv.height($(".dhx_cell_cont_layout .content_td").height());
        $contentDiv.css("overflow", "auto");
    }
}
SunshineIns/src/asset/fingerprint/js/fingerprint.js
New file
@@ -0,0 +1,1841 @@
/**
 * ----------------------------------------------------------common start--------------------------------------------------------------
*/
//采集指纹次数
var FINGERPRINT_NUMBER = 3;
//胁迫指纹数--胁迫指纹时,在普通指纹上加的数
var DURESS_FINGER_NUM = 16;
//胁迫指纹标记
var duressFingerFlag = null;
//是否显示胁迫指纹(用户登记指纹时,不需要胁迫指纹),默认显示胁迫指纹
var duressFingerShowFlag = true;
//手指标记数组
var fingerIdArray = new Array();//[]
//指纹模板数据数组
var templateDataArray = new Array();//[]
//定时器--关闭setTimeOut时用到
var timer = null;
//定时器--验证
var verifyTimer = null;
//判断当前手指是否正在采集中
var collectFlag = false;
//当前点击的手指标记
var fpIdNum = null;
//访问ISSOnline_server的ip
var serverIp = null;
//访问的ISSOnline_server端口
var serverPort = null;
//ISSOnline_server的url的公共部分:http://127.0.0.1:22001/ZKBIOOnline
//var issOnlineUrl = null;
var issOnlineUrl = "http://127.0.0.1:22001/ZKBIOOnline";
//是否是访客
var isVisPager = false;
//定义驱动的版本号
var fpDriverVersion="5.0.0.1";
//是否为比对功能
var isComp= false;
/**
 * 加载xml中ISSOnline_server的ip和port
 * @author wenxin
 * @create 2013-06-15 15:01:31 pm
 * @param url 加载xml的url
 */
function loadXml(url)
{
    $.ajax( {
        type : "GET",
        url : url,
        dataType : "xml",
        async: false,
        success : function(xml)
        {
            $(xml).find('service').each(function(){
                var service = $(this);
                serverIp = service.find('ISSOnline_serverIp').text();
                serverPort = service.find('ISSOnline_serverPort').text();
            })
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            //如果取配置文件出错,则设置默认
            serverIp = "127.0.0.1";
            serverPort = "22001";
        }
    });
    //给issOnlineUrl赋值
    issOnlineUrl = "http://"+serverIp+":"+serverPort+"/ZKBIOOnline";
}
/**
 * 获取编辑时,查询的数据库的指纹标记和指纹模板
 * @author wenxin
 * @create 2013-04-22 10:18:31 am
 * @param fingerIdList 数据库查询的指纹标记
 * @param templateList 数据库查询的指纹模板
 */
function loadFPDataTemplate(fingerIdList, templateList)
{
    if(fingerIdList == "[]")
    {
        $("#fingerId").val(" ");
    }
    else
    {
        $("#fingerId").val(fingerIdList);
    }
    if(templateList == "[]")
    {
        $("#fingerTemplate10").val(" ");
    }
    else
    {
        $("#fingerTemplate10").val(templateList);
    }
}
/**
 * 获取浏览器类型
 * @author wenxin
 * @create 2013-08-09 17:24:31 pm
 */
function getBrowserType()
{
    var browserFlag = "";
     //是否支持html5的cors跨域
    if (typeof(Worker) !== "undefined")
    {
        browserFlag = "html5";
    }
    //此处判断ie8、ie9
    else if(navigator.userAgent.indexOf("MSIE 8.0")>0 || navigator.userAgent.indexOf("MSIE 9.0")>0)
    {
        browserFlag = "simple";
    }
    else
    {
        browserFlag = "upgradeBrowser";//当前浏览器不支持该功能,请升级浏览器
    }
    return browserFlag;
}
/**
 * 判断是否安装指纹驱动
 * @author wenxin
 * @create 2013-04-22 20:18:31 pm
 * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是;false:否
 */
function checkDriver(paramArray, browserFlag, isFPLogin)
{
    var hrefStr = "";
    if(browserFlag == "html5")
    {
        // 发送一个请求,检查是否安装驱动
        getWebServerInfo(paramArray, isFPLogin, "0");
    }
    else if(browserFlag == "simple")
    {
        //发送一个请求,检查是否安装驱动
        getWebServerInfoForSimple(paramArray, isFPLogin, "0");
    }
    else if(browserFlag == "upgradeBrowser")
    {
        if($("#userLoginForm [name='fingerLogin']").val() != undefined)
        {
            $("#userLoginForm [name='fingerLogin']").attr("onclick", "");
            $("#userLoginForm [name='fingerLogin']").attr("title", "当前浏览器不支持改功能,请升级浏览器!");
        }
        if($("#fpRegister").val() != undefined)
        {
            $("#fpRegister").attr("onclick", "");
            $("#fpRegister").attr("title", "当前浏览器不支持改功能,请升级浏览器!");
        }
    }
}
/**
 * 获取webserver的信息
 * @author wenxin
 * @param
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是;false:否
 * @param type 0 表示发送完请求后,还有别的操作。1 表示发送完请求后,没有其余的操作了
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfo(paramArray, isFPLogin, type)
{
    $.ajax( {
        type : "GET",
        url : issOnlineUrl+"/info",
        dataType : "json",
        async: true,
        //timeout:1000,
        success : function(result)
        {
            //检查驱动
            if(type == "0")
            {
                getWebServerInfoCallBack(result, paramArray, isFPLogin);
            }
            //检查动态库连接
            else if(type == "1")
            {
                getDLLConnectCallBack(result,isComp);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
        }
    });
}
/**
 * 获取webserver的信息
 * @author wenxin
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是;false:否
 * @param type 0 表示发送完请求后,还有别的操作。1 表示发送完请求后,没有其余的操作了
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfoForSimple(paramArray, isFPLogin, type)
{
    //创建XDomainRequest实例,用于ie8和ie9跨域访问
    var xDomainRequest = new XDomainRequest();
    //如果xDomainRequest存在,则可以使用xDomainRequest函数,否则,说明不是ie浏览器
    if (xDomainRequest)
    {
        xDomainRequest.open('GET', issOnlineUrl+"/info?random="+getRandomNum());
        xDomainRequest.onload = function()
        {
            //检查驱动
            if(type == "0")
            {
                getInfoForSimpleCallBack(xDomainRequest, paramArray, isFPLogin);
            }
            //检查动态库连接
            else if(type == "1")
            {
                getDLLConnectCallBack(xDomainRequest,isComp);
            }
        };
        xDomainRequest.onerror = function()
        {
            //用完后,将对象置为空
            xDomainRequest = null;
        };
        xDomainRequest.send();
    }
}
/**
 * 获取webserver信息的回调函数
 * @author wenxin
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfoCallBack(result, paramArray, isFPLogin)
{
    //返回码
    var ret = null;
    ret = result.ret;
    //接口调用成功返回时
    if(ret == 0)
    {
        if(isFPLogin)
        {
            //显示指纹登录
            showFPVerify(paramArray);
        }
        else
        {
            //显示登记--可以点击采集指纹
            showRegister(paramArray);
            //计算指纹数量${pers_person_templateCount}:指纹数
            showFPCountInit(paramArray[5], paramArray[6]);
            //鼠标over事件
            //mouseOverEvent();
            // 对比指纹驱动
            if (result.data&&result.data.server_version){
                compareFPDriver(result.data.server_version);
            }
        }
    }
}
/**
 * 显示指纹登录--点击进行指纹验证
 * @author wenxin
 * @create 2013-06-14 10:09:20 am
 * @param paramArray 存放国际化元素的数组
 */
function showFPVerify(paramArray)
{
    $("#userLoginForm .but_fing_disabled").hide();
    $("#userLoginForm .but_fing").show();
}
/**
 * 显示登记--点击采集指纹
 * @author wenxin
 * @create 2013-06-14 10:09:20 am
 * @param paramArray 存放国际化元素的数组
 */
function showRegister(paramArray)
{
    var hrefStr = "";
    var param = '"'+paramArray[0]+'", "'+paramArray[1]+'", "'+paramArray[2]+'", '+null+'';
    $("#fpRegister").remove();
    $("#downloadDriver").remove();
    //webservice接口调用成功,说明驱动已经安装
    hrefStr = "<a id='fpRegister' onclick='submitRegister("+param+", true"+")' title='"+paramArray[3]+"' class='linkStyle'>"+paramArray[3]+"</a>";
    $("#fpRegisterDiv").append(hrefStr);
}
/**
 * 在页面初始化时,计算指纹数量
 * @author wenxin
 * @create 2013-04-25 11:31:20 am
 *
 */
function showFPCountInit(fingerIdCount, text)
{
    $("#fpCountMessage").text(text +" "+ fingerIdCount);
}
/**
 * 对比指纹驱动版本
 * @author gordon.zhang
 * @param oldVersion 旧驱动版本
 * @create 2015-01-28 17:24:31 pm
 */
function compareFPDriver(oldVersion)
{
    var existVersion = fpDriverVersion
    var curVersion = oldVersion;//3.5.2
    var existVersionArr = existVersion.split(".");
    var curVersionArr = curVersion.split(".");
    var isLast = true;
    var len = existVersionArr.length;
    for(var i=len;i>0;i--)
    {
        var existVersionTemp = parseInt(existVersionArr[i-1]);
        var curVersionTemp = parseInt(curVersionArr[i-1]);
        if(existVersionTemp<curVersionTemp)
        {
            isLast = false;
        }
        else if(existVersionTemp>curVersionTemp)
        {
            isLast = true;
        }
        else
        {
            //等于 忽略
        }
    }
}
/**
 * 显示发现新驱动
 * @author gordon.zhang
 * @create 2015-01-28 17:24:31 pm
 */
function showNewDriver(){
    var hrefStr = "<a id='downloadDriver' href='base/middleware/zkbioonline.exe' title='下载新驱动'>下载新驱动</a>";
    $("#driverDownload").append(hrefStr);
}
/**
 * 获取webserver的信息--简易版
 * @author wenxin
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是;false:否
 * @create 2013-08-09 17:43:31 pm
 */
function getInfoForSimpleCallBack(xDomainRequest, paramArray, isFPLogin)
{
    //获取接口返回值
    var resultData = xDomainRequest.responseText;
    //转化为json对象
    var obj = jQuery.parseJSON(resultData);
    //返回码
    var ret = null;
    if(obj != null && obj.ret != undefined)
    {
        ret = obj.ret;
    }
    //接口调用成功返回时
    if(ret == 0)
    {
        if(isFPLogin)
        {
            //显示指纹比对
            showFPVerify(paramArray);
        }
        else
        {
            //显示登记--点击采集指纹
            showRegister(paramArray);
            //计算指纹数量${pers_person_templateCount}:指纹数
            showFPCountInit(paramArray[5], paramArray[6]);
            //鼠标over事件
            //mouseOverEvent();
        }
        //用完后,将对象置为空
        xDomainRequest = null;
    }
}
//------
/**
 * 点击登记,触发事件
 * @author wenxin
 * @create 2013-05-21 11:31:20 am
 * @param title 页面标题国际化内容
 * @param fpCount 指纹数国际化内容
 * @param saveText 提示:是否保存国际化内容
 * @param downloadText 驱动安装国际化内容
 * @param isDriverInstall 是否安装了驱动
 */
function submitRegister(title, fpCount, saveText, downloadText, isDriverInstall)
{
    //支持html5
    if (typeof(Worker) !== "undefined" && isDriverInstall)
    {
        var box=document.getElementById("box");
        var bg=document.getElementById("bg");
           box.style.display="block";//显示内容层,显示覆盖层
         box.style.left=parseInt((document.documentElement.scrollWidth-box.offsetWidth)/2)+document.documentElement.scrollLeft+"px";
         box.style.top=Math.abs(parseInt((document.documentElement.clientHeight-box.offsetHeight)/2))+document.documentElement.scrollTop+"px"; //为内容层设置位置
         bg.style.display="block";
         bg.style.height=document.documentElement.scrollHeight+"px";
         isComp=false;
         dataInitReg();
        //关闭页面时,提示保存数据
        //storeBeforeClose(fpCount, saveText);
    }
    else if(typeof(Worker) == "undefined" && isDriverInstall)
    {
        //createWindow('base_baseFPRegisterSimple.action?random=' + getRandomNum() + '^0^0^465^460^' + title);//public/html/applet.html
        showModalDialog('webapp/html/baseFPRegisterSimple.html',title,'dialogWidth:465px;dialogHeight:460px;dialogLeft:600px;dialogTop:150px;center:yes;resizable:no;status:yes');
        //关闭页面时,提示保存数据
        //storeBeforeClose(fpCount, saveText);
    }
    else if(!isDriverInstall)
    {
        alert("请安装指纹驱动或启动该服务!");
        //messageBox({messageType: "alert", title: "提示", text: "请安装指纹驱动或启动该服务!"});
        if(typeof($("#downloadDriver").val()) == "undefined")
        {
            var hrefStr = "<a id='downloadDriver' href='webapp/middleware/zkbioonline.exe' title='" + downloadText + "'>"+downloadText+"</a>";
            $("#driverDownload").append(hrefStr);
        }
    }
}
/**
 * 关闭页面时,如果有修改操作,则提示用户保存数据
 * @author wenxin
 * @create 2013-06-08 19:36:20 pm
 * @param fpCount 指纹数国际化内容
 * @param saveText 提示:是否保存国际化内容
 */
function storeBeforeClose(fpCount, saveText)
{
     //关闭页面时,监听关闭的onclick事件
    getCurrentWindow().button("close").attachEvent("onClick", function(){
        //判断是否修改了数据(包括新增和删除)
        if ($("#whetherModify").val() != undefined && (fpModifyFlag != undefined && fpModifyFlag))
        {
            //获取指纹标记数据
            var fingerIdData = fingerIdArray;
            //获取指纹模板数据
            var fingerTemplateData = templateDataArray;
            var flag=confirm(saveText);
            saveFPData(flag, fpCount);
        }
        else
        {
            //取消采集
            cancelRegister();
            //将定时器的递归调用关闭
            clearTimeout(timer);
            //closeWindow();
            close();
        }
    });
}
/**
 * 获取页面的指纹数据
 * @author wenxin
 * @create 2013-05-13 10:18:31 am
 * @param
 */
function getDataFromPage()
{
    var fingerId = $("#fingerId").val();
    var fingerTemplate = $("#fingerTemplate10").val();
    //如果有数据
    if($.trim(fingerId) != "")
    {
        fingerId = fingerId.substr(1, fingerId.length-2);
        fingerTemplate = fingerTemplate.substr(1, fingerTemplate.length-2);
        fingerIdArray = fingerId.split(",");
        templateDataArray = fingerTemplate.split(",");
    }else{
        fingerIdArray=new Array();
        templateDataArray=new Array();
    }
}
/**
 * 初始化绘画手指、手掌、圆弧的起始坐标,并做成json格式
 * @author wenxin
 * @create 2013-06-15 15:40:31 pm
 */
function initCoordJson()
{
    var coordJson = [{"num" : 0, "coord" : {"x" : x + 3, "y" : y - 37}},
                     {"num" : 1, "coord" : {"x" : x + 25, "y" : y - 37}},
                     {"num" : 2, "coord" : {"x" : x + 47, "y" : y - 34}},
                     {"num" : 3, "coord" : {"x" : x + 67, "y" : y - 26}},
                     {"num" : 4, "coord" : {"x" : x + 77, "y" : y + 18}},
                     {"num" : 5, "coord" : {"x" : x + 153, "y" : y + 34}},
                     {"num" : 6, "coord" : {"x" : x + 159, "y" : y - 19}},
                     {"num" : 7, "coord" : {"x" : x + 177, "y" : y - 30}},
                     {"num" : 8, "coord" : {"x" : x + 198, "y" : y - 36}},
                     {"num" : 9, "coord" : {"x" : x + 220, "y" : y - 36}},
                     {"num" : 10, "coord" : {"x" : x, "y" : y}},
                     {"num" : 11, "coord" : {"x" : x + 170, "y" : y + 12}},
                     {"num" : 12, "coord" : {"x" : x + 210, "y" : y - 346}}];
    return coordJson;
}
/**
 * 将绘画的坐标点放入数组
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param coordArray 传入的数组,放入坐标后,返回
 * @param x, y 绘画手指的起点的坐标
 * @param num 手指、手掌编号0-9:手指编号;10:左手掌,11:右手掌,12:圆弧。
 */
function initCoordArray(coordArray, x, y, num)
{
    if(num == 0)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 2, y - 35);
        coordArray[2] = new Coord(x + 5, y - 40);
        coordArray[3] = new Coord(x + 11, y - 42);
        coordArray[4] = new Coord(x + 16, y - 40);
        coordArray[5] = new Coord(x + 18, y - 35);
        coordArray[6] = new Coord(x + 18, y + 1);
        coordArray[7] = new Coord(x + 15, y + 5);
        coordArray[8] = new Coord(x + 9, y + 7);
        coordArray[9] = new Coord(x + 3, y + 5);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 1)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 8, y - 50);
        coordArray[2] = new Coord(x + 12, y - 54);
        coordArray[3] = new Coord(x + 19, y - 55);
        coordArray[4] = new Coord(x + 22, y - 53);
        coordArray[5] = new Coord(x + 24, y - 49);
        coordArray[6] = new Coord(x + 18, y + 1);
        coordArray[7] = new Coord(x + 15, y + 6);
        coordArray[8] = new Coord(x + 8, y + 7);
        coordArray[9] = new Coord(x + 3, y + 4);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 2)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 14, y - 54);
        coordArray[2] = new Coord(x + 16, y - 57);
        coordArray[3] = new Coord(x + 23, y - 58);
        coordArray[4] = new Coord(x + 28, y - 55);
        coordArray[5] = new Coord(x + 29, y - 50);
        coordArray[6] = new Coord(x + 17, y + 4);
        coordArray[7] = new Coord(x + 13, y + 8);
        coordArray[8] = new Coord(x + 6, y + 9);
        coordArray[9] = new Coord(x + 1, y + 5);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 3)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 19, y - 37);
        coordArray[2] = new Coord(x + 21, y - 39);
        coordArray[3] = new Coord(x + 28, y - 39);
        coordArray[4] = new Coord(x + 32, y - 36);
        coordArray[5] = new Coord(x + 33, y - 31);
        coordArray[6] = new Coord(x + 17, y + 6);
        coordArray[7] = new Coord(x + 12, y + 10);
        coordArray[8] = new Coord(x + 6, y + 10);
        coordArray[9] = new Coord(x + 1, y + 6);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 4){
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 30, y - 18);
        coordArray[2] = new Coord(x + 34, y - 17);
        coordArray[3] = new Coord(x + 37, y - 14);
        coordArray[4] = new Coord(x + 39, y - 11);
        coordArray[5] = new Coord(x + 39, y - 8);
        coordArray[6] = new Coord(x + 38, y - 6);
        coordArray[7] = new Coord(x + 12, y + 15);
        coordArray[8] = new Coord(x + 8, y + 17);
        coordArray[9] = new Coord(x + 2, y + 14);
        coordArray[10] = new Coord(x - 2, y + 8);
        coordArray[11] = new Coord(x, y);
    }
    else if(num == 5)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x - 26, y - 21);
        coordArray[2] = new Coord(x - 27, y - 24);
        coordArray[3] = new Coord(x - 26, y - 30);
        coordArray[4] = new Coord(x - 21, y - 34);
        coordArray[5] = new Coord(x - 16, y - 34);
        coordArray[6] = new Coord(x + 12, y - 18);
        coordArray[7] = new Coord(x + 15, y - 10);
        coordArray[8] = new Coord(x + 13, y - 3);
        coordArray[9] = new Coord(x + 7, y + 1);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 6)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x - 17, y - 46);
        coordArray[2] = new Coord(x - 17, y - 50);
        coordArray[3] = new Coord(x - 13, y - 56);
        coordArray[4] = new Coord(x - 6, y - 56);
        coordArray[5] = new Coord(x - 3, y - 54);
        coordArray[6] = new Coord(x + 15, y - 11);
        coordArray[7] = new Coord(x + 15, y - 4);
        coordArray[8] = new Coord(x + 11, y + 2);
        coordArray[9] = new Coord(x + 4, y + 2);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 7)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x - 12, y - 54);
        coordArray[2] = new Coord(x - 10, y - 58);
        coordArray[3] = new Coord(x - 5, y - 62);
        coordArray[4] = new Coord(x + 1, y - 61);
        coordArray[5] = new Coord(x + 4, y - 58);
        coordArray[6] = new Coord(x + 18, y - 4);
        coordArray[7] = new Coord(x + 16, y + 1);
        coordArray[8] = new Coord(x + 11, y + 5);
        coordArray[9] = new Coord(x + 5, y + 4);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 8)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x - 5, y - 50);
        coordArray[2] = new Coord(x - 2, y - 54);
        coordArray[3] = new Coord(x + 3, y - 57);
        coordArray[4] = new Coord(x + 9, y - 55);
        coordArray[5] = new Coord(x + 11, y - 52);
        coordArray[6] = new Coord(x + 18, y - 1);
        coordArray[7] = new Coord(x + 14, y + 4);
        coordArray[8] = new Coord(x + 9, y + 6);
        coordArray[9] = new Coord(x + 4, y + 5);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 9)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x, y - 37);
        coordArray[2] = new Coord(x + 3, y - 41);
        coordArray[3] = new Coord(x + 7, y - 43);
        coordArray[4] = new Coord(x + 13, y - 41);
        coordArray[5] = new Coord(x + 15, y - 37);
        coordArray[6] = new Coord(x + 17, y + 1);
        coordArray[7] = new Coord(x + 15, y + 3);
        coordArray[8] = new Coord(x + 10, y + 6);
        coordArray[9] = new Coord(x + 3, y + 4);
        coordArray[10] = new Coord(x, y);
    }
    else if(num == 10)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x + 2, y - 8);
        coordArray[2] = new Coord(x + 6, y - 16);
        coordArray[3] = new Coord(x + 13, y - 23);
        coordArray[4] = new Coord(x + 27, y - 27);
        coordArray[5] = new Coord(x + 37, y - 25);
        coordArray[6] = new Coord(x + 43, y - 23);
        coordArray[7] = new Coord(x + 64, y - 16);
        coordArray[8] = new Coord(x + 69, y - 11);
        coordArray[9] = new Coord(x + 73, y - 3);
        coordArray[10] = new Coord(x + 73, y + 10);
        coordArray[11] = new Coord(x + 71, y + 18);
        coordArray[12] = new Coord(x + 57, y + 40);
        coordArray[13] = new Coord(x + 50, y + 46);
        coordArray[14] = new Coord(x + 41, y + 49);
        coordArray[15] = new Coord(x + 34, y + 49);
        coordArray[16] = new Coord(x + 14, y + 43);
        coordArray[17] = new Coord(x + 10, y + 41);
        coordArray[18] = new Coord(x + 6, y + 36);
        coordArray[19] = new Coord(x + 2, y + 29);
        coordArray[20] = new Coord(x, y);
    }
    else if(num == 11)
    {
        coordArray[0] = new Coord(x, y);
        coordArray[1] = new Coord(x - 2, y - 10);
        coordArray[2] = new Coord(x + 1, y - 20);
        coordArray[3] = new Coord(x + 14, y - 31);
        coordArray[4] = new Coord(x + 47, y - 39);
        coordArray[5] = new Coord(x + 55, y - 38);
        coordArray[6] = new Coord(x + 61, y - 34);
        coordArray[7] = new Coord(x + 68, y - 26);
        coordArray[8] = new Coord(x + 72, y - 16);
        coordArray[9] = new Coord(x + 72, y + 13);
        coordArray[10] = new Coord(x + 68, y + 22);
        coordArray[11] = new Coord(x + 62, y + 29);
        coordArray[12] = new Coord(x + 60, y + 30);
        coordArray[13] = new Coord(x + 39, y + 36);
        coordArray[14] = new Coord(x + 34, y + 36);
        coordArray[15] = new Coord(x + 20, y + 33);
        coordArray[16] = new Coord(x + 16, y + 29);
        coordArray[17] = new Coord(x, y);
    }
    else if(num == 12)
    {
        coordArray[0] = new Coord(x - 10, y);
        coordArray[1] = new Coord(x + 212, y);
        coordArray[2] = new Coord(x + 212, y + 129);
        coordArray[3] = new Coord(x + 201, y + 130);
        coordArray[4] = new Coord(x + 191, y + 131);
        coordArray[5] = new Coord(x + 174, y + 131);
        coordArray[6] = new Coord(x + 159, y + 129);
        coordArray[7] = new Coord(x + 142, y + 127);
        coordArray[8] = new Coord(x + 133, y + 125);
        coordArray[9] = new Coord(x + 114, y + 120);
        coordArray[10] = new Coord(x + 97, y + 113);
        coordArray[11] = new Coord(x + 86, y + 108);
        coordArray[12] = new Coord(x + 72, y + 100);
        coordArray[13] = new Coord(x + 52, y + 87);
        coordArray[14] = new Coord(x + 40, y + 76);
        coordArray[15] = new Coord(x + 29, y + 64);
        coordArray[16] = new Coord(x + 16, y + 48);
        coordArray[17] = new Coord(x + 5, y + 30);
        coordArray[18] = new Coord(x - 10, y);
    }
    return coordArray;
}
/**
 * 坐标点对象
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 */
var Coord = function(x, y)
{
    this.x = x;
    this.y = y;
}
/**
 * 绘画手指
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param renderFlag 渲染标记 stroke:绘画边线;fill:填充
 * @param color 渲染颜色
 */
var renderFinger = function(context, pointArray)
{
    this.context = context;
    this.pointArray = pointArray;
    this.isClick = false;
    this.drawFinger = function(renderFlag, color)
    {
        if(renderFlag == "stroke")
        {
            this.context.strokeStyle = color;
        }
        else if(renderFlag == "fill")
        {
            this.context.fillStyle = color;
        }
        this.context.lineWidth = 1;
        this.context.beginPath();
        for(var i=0; i<this.pointArray.length; i++)
        {
            if(i == 0)
            {
                this.context.moveTo(this.pointArray[0].x, this.pointArray[0].y);
            }
            else
            {
                this.context.lineTo(this.pointArray[i].x, this.pointArray[i].y);
            }
        }
        if(renderFlag == "stroke")
        {
            this.context.stroke();
        }
        else if(renderFlag == "fill")
        {
            this.context.fill();
        }
    };
};
/**
 * 页面加载和重画时渲染手指
 * @author wenxin
 * @create 2013-05-13 15:26:31 pm
 * @param context 2d画布上下文
 * @param num 当前需要渲染的手指编号
 * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 */
function renderInit(context, num, browserFlag)
{
    var fingerId;
    for(var i=0; i<fingerIdArray.length; i++)
    {
        fingerId = eval(fingerIdArray[i]);
        if(fingerId >= DURESS_FINGER_NUM)
        {
            fingerId = fingerId -DURESS_FINGER_NUM;
            if(browserFlag == "html5")
            {
                if(fingerId == num)
                {
                    context.fillStyle = "red";
                    context.fill();
                }
            }
        }
        else
        {
            if(browserFlag == "html5"){
                if(fingerId == num)
                {
                    context.fillStyle = "rgb(122,193,66)";
                    context.fill();
                }
            }
        }
        if(browserFlag == "simple")
        {
            document.getElementById("finger" + fingerId).checked = true;
        }
    }
}
/**
 * 显示指纹图像
 * @author wenxin
 * @create 2013-05-18 11:22:31 am
 * @param context 2d画布上下文
 * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 */
function showImage(context, base64FPImg, browserFlag)
{
    var img;
    var imgSrc = "data:image/jpg;base64,"+base64FPImg;
    if(browserFlag == "html5"){
        img = new Image();
        //img.src = sysCfg.rootPath + "/public/html/bmpFile1.jpg";
        img.src = "";
        img.src = imgSrc;
        img.onload=function() {
            // 保存当前的绘图状态
            context.save();
            // 开始创建路径
            context.beginPath();
            // 画一个椭圆
            context.oval(125, 142, 112, 145);
            // 关闭路径
            context.closePath();
            // 剪切路径
            context.clip();
            //将图片画到画布上
            context.drawImage(img, 70, 70, 112, 145);
            //调用restore最后一次存储的状态会被恢复
            context.restore();
        }
    }
    else if(browserFlag == "verification")
    {
        img = new Image();
        img.src = "";
        img.src = imgSrc;
        img.onload=function() {
            // 保存当前的绘图状态
            context.save();
            // 开始创建路径
            context.beginPath();
            // 画一个椭圆
            context.oval(92, 159, 100, 128);
            // 关闭路径
            context.closePath();
            // 剪切路径
            context.clip();
            //将图片画到画布上
            context.drawImage(img, 37, 90, 112, 145);
            //调用restore最后一次存储的状态会被恢复
            context.restore();
        }
    }
    else if(browserFlag == "clearForVerify" || browserFlag == "clearForRegister")
    {
        img = new Image();
        img.src = "";
        img.src = base64FPImg;
        img.onload=function() {
            // 保存当前的绘图状态
            context.save();
            // 开始创建路径
            context.beginPath();
            // 画一个椭圆
            if(browserFlag == "clearForVerify")
            {
                context.oval(91, 160, 112, 145);
            }
            else if(browserFlag == "clearForRegister")
            {
                context.oval(125, 142, 132, 165);
            }
            // 关闭路径
            context.closePath();
            // 剪切路径
            context.clip();
            //将图片画到画布上
            if(browserFlag == "clearForVerify")
            {
                context.drawImage(img, 12, 54, 160, 213);
            }
            else if(browserFlag == "clearForRegister")
            {
                context.drawImage(img, 60, 60, 132, 165);
            }
            //调用restore最后一次存储的状态会被恢复
            context.restore();
        }
    }
    else if(browserFlag == "simple")
    {
        $("#showFPImageDiv").html("<img src="+imgSrc+" width='112' height='145' />");
    }
    else if(browserFlag == "verifySimple")
    {
        $("#showSeachingDiv").show();
        $("#showSeachingDiv").html("&nbsp;&nbsp;<img src=\"/public/images/searching.gif\" width='20' height='20'/></br><label style='color:yellow;align:center;font-size: 14px;'>处理中...</label>");
    }
    else if(browserFlag == "clearForSimple")
    {
        $("#showFPImageDiv").html("");
    }
}
/**
 * 绘画手掌
 * @author wenxin
 * @create 2013-06-01 09:01:33 am
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param color 渲染颜色
 */
var renderHand = function(context, pointArray)
{
    this.context = context;
    this.pointArray = pointArray;
    this.isClick = false;
    this.drawHand = function(color)
    {
        this.context.strokeStyle = color;
        this.context.lineWidth = 1;
        this.context.beginPath();
        for(var i=0; i<this.pointArray.length; i++)
        {
            if(i == 0)
            {
                this.context.moveTo(this.pointArray[0].x, this.pointArray[0].y);
            }
            else
            {
                this.context.lineTo(this.pointArray[i].x, this.pointArray[i].y);
            }
        }
        this.context.stroke();
    };
};
/**
 * 检查指纹采集器
 * @author wenxin
 * @create 2013-06-17 20:18:31 pm
 * @param context 2d画布上下文
 * @param paramArray 存放国际化元素的数组
 * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 */
function checkFPReader(context, paramArray, browserFlag)
{
    if(browserFlag == "html5")
    {
        $.ajax( {
            type : "GET",
            url : issOnlineUrl+"/fingerprint/beginCapture?type=1&FakeFunOn=0&random="+getRandomNum(),
            dataType : "json",
            async: false,
            //timeout:1000,
            success : function(result)
            {
                //返回码
                var ret = null;
                ret = result.ret;
                //接口调用成功返回时
                if(ret == 0)
                {
                    //显示框--采集提示
                    collectTips(context, paramArray[0], "html5");
                }
                else if(ret == -2001)
                {
                    //显示框--采集提示
                    collectTips(context, paramArray[1], "html5");
                }
                else if(ret == -2002)
                {
                    getWebServerInfo(null, null, "1");
                }
                else if(ret == -2005)
                {
                    //显示框--采集提示
                    collectTips(context, paramArray[3], "html5");
                }
                collectFlag = true;
                //取消采集
                cancelRegister();
            },
            error : function(XMLHttpRequest, textStatus, errorThrown)
            {
                alert("请安装指纹驱动或启动该服务!");
                //messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${base_fp_connectPrompt}"});
            }
        });
    }
    else if(browserFlag == "simple")
    {
        //创建XDomainRequest实例,用于ie8和ie9跨域访问
        var xDomainRequest = new XDomainRequest();
        //如果xDomainRequest存在,则可以使用xDomainRequest函数,否则,说明不是ie浏览器
        if (xDomainRequest)
        {
            xDomainRequest.open('GET', issOnlineUrl+"/fingerprint/beginCapture?type=1&FakeFunOn=0&random="+getRandomNum());
            xDomainRequest.onload = function()
            {
                //获取接口返回值
                var resultData = xDomainRequest.responseText;
                //转化为json对象
                var obj = jQuery.parseJSON(resultData);
                //返回码
                var ret = null;
                if(obj != null && obj.ret != undefined)
                {
                    ret = obj.ret;
                }
                //接口调用成功返回时
                if(ret == 0)
                {
                    //显示框--采集提示
                    collectTips(null, paramArray[0], "simple");
                }
                else if(ret == -2001)
                {
                    //显示框--采集提示
                    collectTips(null, paramArray[1], "simple");
                }
                else if(ret == -2002)
                {
                    getWebServerInfoForSimple(null, null, "1");
                }
                collectFlag = true;
                //取消采集
                cancelRegister();
            };
            xDomainRequest.onerror = function()
            {
                //用完后,将对象置为空
                xDomainRequest = null;
            };
            xDomainRequest.send();
        }
    }
}
/**
 * 显示框--显示采集次数、采集成功、失败等信息
 * @author wenxin
 * @create 2013-05-16 16:56:31 pm
 * @param context 2d画布上下文
 * @param text  显示信息内容
 * @param browserFlag 浏览器标记或比对验证标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 * --verification:指纹验证标记
 */
function collectTips(context, text, browserFlag)
{
    if(browserFlag == "simple")
    {
        $("#showCollInfoDiv").html("<span style='color:rgb(122,193,66); font-size: 12px;word-break: break-all; word-wrap: break-word;'>"+text+"</span>");
    }
    else if(browserFlag == "html5")
    {
        context.fillStyle = bgColor;//bgColor;
        context.fillRect(205, 18, 240, 16);
        //文字右对齐
        context.fillStyle = "rgb(122,193,66)";
        context.font ="12px Arial,微软雅黑";
        //context.shadowColor = 'white';
        //context.shadowBlur = 10;
        //context.strokeText(text, 230, 30);
        context.textAlign = "end";
        context.fillText(text, 400, 30);
    }
    else if(browserFlag == "verification")
    {
        //#6BA5D7
        context.fillStyle = "#F3F5F0";//#6BA5D7
        context.fillRect(2, 8, 600, 30);
        //获取canvas对象
        var canvas ="";
        if(isComp){
            canvas = document.getElementById("canvasComp");
        }else{
            canvas = document.getElementById("canvas");
        }
//        canvas.width = canvas.width;
        //返回一个文本的度量信息对象metrics
        var metrics = context.measureText(text);
        //文本宽度
        var textWidth = metrics.width;
        //canvas宽度
        canvas != null?canvasWidth = canvas.width:canvasWidth = 450;
        //文本开始x坐标
        var x = textWidth/2 + (canvasWidth - textWidth)/2;
        //context.fillStyle = bgColor;
        //context.fillRect(0, 18, 445, 16);
        //文字右对齐
        context.fillStyle = "rgb(122,193,66)";
        context.font ="24px Arial,微软雅黑";
        context.textAlign = "center";
        //自动换行
        autoWordBreak(context,text,canvasWidth,x);
        context.restore();
    }
    else if(browserFlag == "verifyForSimple")
    {
        $("#showCollInfoDiv").html("<span style='color:yellow;align:center;font-size: 18px;word-break: break-all; word-wrap: break-word;'>"+text+"</span>");
    }
}
/**
 * 画进度条
 * @author wenxin
 * @create 2013-05-16 16:56:31 pm
 * @param context 2d画布上下文
 * @param x,y,width,height 进度条底框的坐标和宽度、高度
 */
function drawProgressBar(context, collCount)
{
    var x = 300;
    var y = 60;
    var width = 90;
    var height = 20;
    context.fillStyle = bgColor;
    context.fillRect(x, y, width, height);
    if(collCount == 0)
    {
        context.fillStyle = "rgb(175,181,185)";
        context.fillRect(x + 4, y + 2, width - 52, height - 4);
        context.fillRect(x + 46, y + 2, width -52, height - 4);
        context.fillRect(x + 86, y + 2, width - 52, height - 4);
    }
    else if(collCount == 1)
    {
        context.fillStyle = "rgb(122,193,66)";
        context.fillRect(x + 4, y + 2, width - 52, height - 4);
        context.fillStyle = "rgb(175,181,185)";
        context.fillRect(x + 46, y + 2, width - 52, height - 4);
        context.fillRect(x + 86, y + 2, width - 52, height - 4);
    }
    else if(collCount == 2)
    {
        context.fillStyle = "rgb(122,193,66)";
        context.fillRect(x + 4, y + 2, width - 52, height - 4);
        context.fillRect(x + 46, y + 2, width - 52, height - 4);
        context.fillStyle = "rgb(175,181,185)";
        context.fillRect(x + 86, y + 2, width - 52, height - 4);
    }
    else if(collCount == 3)
    {
        context.fillStyle = "rgb(122,193,66)";
        context.fillRect(x + 4, y + 2, width - 52, height - 4);
        context.fillRect(x + 46, y + 2, width - 52, height - 4);
        context.fillRect(x + 86, y + 2, width - 52, height - 4);
    }
}
/**
 * 判断当前手指是否在fingerIdArray中,如果在,则说明此手指已经采集指纹
 * @author wenxin
 * @create 2013-05-15 16:26:31 pm
 * @param num 手指编号
 * @param fingerIdArray 存放手指编号的数组
 * @return 返回boolean值 true:num包含在fingerIdArray中;false:没有包含
 */
function isContains(fingerIdArray, num)
{
    var fingerId;
    var isCollected = false;
    for(var j=0; j<fingerIdArray.length; j++)
    {
        fingerId = eval(fingerIdArray[j]);
        if(fingerId >= DURESS_FINGER_NUM)
        {
            fingerId = fingerId -DURESS_FINGER_NUM;
        }
        if(fingerId == num)
        {
            isCollected = true;
        }
    }
    return isCollected;
}
/**
 * 清空指纹图像
 * @author wenxin
 * @create 2013-09-05 15:15:11 pm
 */
function clearFPImage(context, browserFlag)
{
    if(browserFlag == "verification")
    {
//        showImage(context, "${base}/base/images/base_fpVerify_clearImage.png", "clearForVerify");
    }
    else if(browserFlag == "register")
    {
        showImage(context, "image/base_fpVerify_clearImage.png", "clearForRegister");
    }
    else if(browserFlag == "verifyForSimple" || browserFlag == "registerForSimple")
    {
        showImage(null, "", "clearForSimple");
    }
}
/**
 * 获取指纹模板
 * @author wenxin
 * @create 2013-05-22 19:51:31 pm
 * @param paramArray 存放国际化元素的数组
 * @param flag 判断是登记和验证标记 register:登记;verification:验证
 */
function getFPTemplate(paramArray, flag)
{
    var fpTemplate = "";
    var collectSuccessFlag = false;
    $.ajax( {
        type : "GET",
        url : issOnlineUrl+"/fingerprint/getTemplate?random="+getRandomNum(),
        dataType : "json",
        async: false,
        success : function(result)
        {
            //返回码
            var ret = null;
            ret = result.ret;
            if(ret == 0)
            {
                fpTemplate = result.data.template;
            }
            //成功
            if(ret == 0)
            {
                collectSuccessFlag = true;
                if(flag == "register")
                {
                    //判断手指是否已经采集指纹
                    var compareRet = "";
                    //如果前面已经录入指纹
                    if(templateDataArray.length > 0)
                    {
                        //发送请求,进行后台指纹比对yls
                        //compareRet = fpComparision(fpTemplate, templateDataArray, paramArray[3]);
                    }
                    if($.trim(compareRet) == "dllNotExist")
                    {
                        //采集完指纹,渲染手指
                        renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
                        //显示框--采集提示
                        collectTips(globalContext, "动态库加载失败", "html5");
                    }
                    else
                    {
                        if(compareRet == "noFingerServer")
                        {
                            //采集完指纹,渲染手指
                            renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
                            //显示框--采集提示
                            collectTips(globalContext, "未启动比对服务", "html5");
                        }
                        else
                        {
                            //此手指未采集指纹
                            if(compareRet != "ok")
                            {
                                //采集完指纹,渲染手指
                                renderAfterColl(globalContext, fpIdNum, bgColor, true);//bgColor判断
                                //显示框--采集提示
                                collectTips(globalContext, paramArray[0], "html5");
                                //胁迫指纹
                                if(duressFingerFlag)
                                {
                                    //将手指标记保存到数组中
                                    fingerIdArray[fingerIdArray.length] = fpIdNum + DURESS_FINGER_NUM;
                                }
                                else
                                {
                                    //将手指标记保存到数组中
                                    fingerIdArray[fingerIdArray.length] = fpIdNum;
                                }
                                //将指纹模板保存到数组中
                                templateDataArray[templateDataArray.length] = fpTemplate;
                            }
                            else
                            {
                                //采集完指纹,渲染手指
                                renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
                                //Please don't repeat input fingerprint!
                                //显示框--采集提示
                                collectTips(globalContext, paramArray[2], "html5");
                            }
                        }
                    }
                }
                else if(flag == "verification")
                {
                    verifyFlag = false;
                    //指纹比对
                    fpComparison(fpTemplate);
                }
            }
            else if(ret == -2003)
            {
                //采集完指纹,渲染手指
                renderAfterColl(globalContext, fpIdNum, bgColor, false);
                //显示框--采集提示
                collectTips(globalContext, paramArray[1], "html5");
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert(paramArray[3]);
            //messageBox({messageType: "alert", title: "${common_prompt_title}", text: paramArray[3]});
        }
    });
    return collectSuccessFlag;
}
/**
 * 发送请求到后台,进行比对
 * @author wenxin
 * @create 2013-08-05 16:20:31 pm
 * @param fpTemplate 指纹模板
 * @param templateArray 指纹模板数组
 * @param errorMsg ajax请求报错,错误信息
 */
function fpComparision(fpTemplate, templateArray, errorMsg)
{
    var ret = "";
    var templates = templateArray.toString();
    //特殊字符转义
    fpTemplate = transferredMeaning(fpTemplate);
    templates = transferredMeaning(templates);
    $.ajax( {
        type : "POST",
        url : "baseBioVerifyAction!fpComparison.action",
        contentType : "application/x-www-form-urlencoded;charset=UTF-8",
        data : "verifyTemplate="+fpTemplate+"&templates="+templates,
        dataType : "json",
        async: false,
        success : function(result)
        {
            if(result.ret == "ok")
            {
                ret = "ok";
            }
            if(result.msg == "noFingerServer")
            {
                ret = "noFingerServer";
            }
            if(result.msg == "dllNotExist")
            {
                ret = "dllNotExist";
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert("服务器处理数据失败,请重试!错误码:");
            //messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${common_prompt_serverError}"});
        }
    });
    return ret;
}
/**
 * 采集完指纹后渲染手指
 * @author wenxin
 * @create 2013-05-18 11:33:31 am
 * @param context 2d画布上下文
 * @param num 当前需要渲染的手指编号
 * @param fillColor 采集完后填充颜色
 * @param successOrNot 采集是否成功--布尔值 true:采集成功;false:采集失败
 */
function renderAfterColl(context, num, fillColor, successOrNot)
{
    var canvas="";
    if(isComp){
        canvas = document.getElementById("canvasComp");
    }else{
        canvas = document.getElementById("canvas");
    }
    var localContext = canvas.getContext("2d");
    var coordArray = new Array();
    //初始化起始坐标,并返回json格式数据
    var coordJson = initCoordJson();
    //进来页面,点击删除
    if(num == null)
    {
        num = fpIdNum;
    }
    //点击的手指编号和json中num相等
    if(coordJson[num].num == num)
    {
        //初始化坐标数组和绘画手指
        initCoordAndDrawFinger(context, coordArray, coordJson[num].coord.x, coordJson[num].coord.y, num);
    }
    //采集成功,填充颜色(红、绿)
    if(successOrNot)
    {
        if(duressFingerFlag)
        {
            localContext.fillStyle = "red";//fillColor
            localContext.fill();
            fpModifyFlag = true;
        }
        else
        {
            localContext.fillStyle = "rgb(122,193,66)";//fillColor
            localContext.fill();
            fpModifyFlag = true;
        }
    }
    else
    {
        //采集失败,填充背景色--消除颜色(黄)
        localContext.fillStyle = fillColor;
        localContext.fill();
    }
}
/**
 * 初始化坐标数组和绘画手指--获取当前的context
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param x,y 绘画当前手指的起始坐标
 * @param num 手指标记
 */
function initCoordAndDrawFinger(context, coordArray, x, y, num)
{
    coordArray = initCoordArray(coordArray, x, y, num);
    new renderFinger(context, coordArray).drawFinger(strokeStyle, fingerBorderColor);
}
/**
 * 点击取消按钮时,触发事件
 * @author wenxin
 * @create 2013-05-15 17:21:13 pm
 * @param "${base_fp_save}":确认保存当前修改吗?
 */
function cancelEvent(saveText, fpCountText)
{
    if(!fpModifyFlag)
    {
        if(collectFlag)
        {
            //取消采集
            cancelRegister();
            //将定时器的递归调用关闭
            clearTimeout(timer);
        }
        //closeWindow();
        close();
    }
    else
    {
        var flag=confirm(saveText);
        if(flag){
            saveFPData(flag, fpCountText);
        }else{
            close();
        }
    }
}
/**
 * 点击取消按钮和关闭页面时,弹出框保存数据
 * cancelEvent()和submitRegister()函数中回调用到
 * @author wenxin
 * @create 2013-05-14 15:11:31 pm
 * @param result 弹出框选择确定还是取消
 * @param fpCount 指纹数国际化内容
 * @param ${pers_person_templateCount}:指纹数
 */
var saveFPData = function(result, fpCount)
{
    if(collectFlag)
    {
        //取消采集
        cancelRegister();
        //将定时器的递归调用关闭
        clearTimeout(timer);
    }
    if(result)
    {
        storeDataToHtml();
        showFPCount(fpCount);
        //closeWindow();
        close();
    }
    else
    {
        clearImageData();
        //closeWindow();
        close();
    }
}
/**
 * 判断指纹数量--页面加载时,没有计算。只是在采集完指纹后计算指纹数量
 * @author wenxin
 * @create 2013-04-22 21:26:31 pm
 */
function showFPCount(text)
{
    var fingerId = $("#fingerId").val();
    if($.trim(fingerId) == "")
    {
        $("#fpCountMessage").text(text + " " + 0);
    }
    else
    {
        fingerId = fingerId.substr(1, fingerId.length - 2);
        var fingerIdArray = new Array();
        fingerIdArray = fingerId.split(",");
        $("#fpCountMessage").text(text + " " + fingerIdArray.length);
    }
}
/**
 * 将指纹数据保存到页面
 * @author wenxin
 * @create 2013-05-24 16:12:21 pm
 */
function storeDataToHtml()
{
    //没有手指标记数据
    if(fingerIdArray.length == 0)
    {
        $("#fingerId").val(" ");
    }
    else
    {
        //将手指标记数据保存到页面
        $("#fingerId").val("["+fingerIdArray.toString()+"]");
    }
    //没有指纹模板数据
    if(templateDataArray.length == 0)
    {
        $("#fingerTemplate10").val(" ");
    }
    else
    {
        //将指纹模板数据保存到页面
        $("#fingerTemplate10").val("["+templateDataArray.toString()+"]");
    }
}
//关闭窗体
function close(){
    $("#bg").css("display", "none");
    $("#box").css("display", "none");
    $("#comparisonDiv").css("display", "none");
    globalContext="";
}
/**
 * 点击已经采集指纹的手指时,弹出框删除数据
 * 删除时的回调函数
 * @author wenxin
 * @create 2013-05-14 17:12:21 pm
 * @param result 弹出框选择确定还是取消
 * @param context 2d画布上下文
 * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
 */
var delFPData = function(result, context, browserFlag)
{
    var fingerId;
    if(result)
    {
        //将数组中的指定元素删除
        for(var i=0; i<fingerIdArray.length; i++)
        {
            fingerId = eval(fingerIdArray[i]);
            if(fingerId >= DURESS_FINGER_NUM)
            {
                fingerId = fingerId - DURESS_FINGER_NUM;
                if(fingerId == fpIdNum)
                {
                    //fingerIdArray.remove(i);
                    //templateDataArray.remove(i);
                    removeItem(fingerIdArray, i);
                    removeItem(templateDataArray, i);
                }
            }
            else
            {
                if(fingerId == fpIdNum)
                {
                    //fingerIdArray.remove(i);
                    //templateDataArray.remove(i);
                    removeItem(fingerIdArray, i);
                    removeItem(templateDataArray, i);
                }
            }
        }
        if(browserFlag == "simple")
        {
            document.getElementById("finger" + fingerId).checked = false;
        }
        else if(browserFlag == "html5")
        {
            //将手指颜色改变--重画时也要判断
            context.fillStyle = bgColor;
            context.fill();
            if(lastFPIdNum != null && lastFPIdNum != lastFPIdNum)
            {
                //消除原来手指的颜色
                renderAfterColl(globalContext, lastFPIdNum, bgColor, false);
            }
            //消除需要删除的手指颜色
            renderAfterColl(globalContext, fpIdNum, bgColor, false);
        }
        fpModifyFlag = true;
        $("#duressFinger").attr("disabled", false);
        $("#submitButtonId").attr("disabled", false);
    }
    else
    {
        if(browserFlag == "simple")
        {
            document.getElementById("finger" + fpIdNum).checked = true
            collectFlag = true;
        }
        else if(browserFlag == "html5")
        {
            //消除原来手指的颜色--有问题,如果原来手指和现在的一样,有问题
            //renderAfterColl(globalContext, lastFPIdNum, bgColor, false);
        }
    }
}
/**
 * 删除数组元素 -- 从dx下标开始,删除一个元素
 * @author wenxin
 * @create 2013-05-15 11:11:31 am
 * @param dx 要删除元素的下标
 */
function removeItem(array, dx)
{
   array.splice(dx, 1);
}
/**
 * 指纹验证
 * @author wenxin
 * @create 2013-06-21 11:09:20 am
 * @param title 页面标题国际化内容
 * @param isDriverInstall 是否安装了驱动
 * @param downloadPrompt 提示安装驱动国际化内容
 */
function fpVerification(title, downloadPrompt, isDriverInstall,context)
{
    //安装驱动
    if(isDriverInstall)
    {
        //支持html5
        if(typeof(Worker) != "undefined")
        {
            //createWindow('base_baseFPVerify.do?random=' + getRandomNum() + '^0^0^465^320^'+title);
            var comparisonDiv=document.getElementById("comparisonDiv");
            var bg=document.getElementById("bg");
            comparisonDiv.style.display="block";//显示内容层,显示覆盖层
            comparisonDiv.style.left=parseInt((document.documentElement.scrollWidth-comparisonDiv.offsetWidth)/2)+document.documentElement.scrollLeft+"px";
            comparisonDiv.style.top=Math.abs(parseInt((document.documentElement.clientHeight-comparisonDiv.offsetHeight)/2))+document.documentElement.scrollTop+"px"; //为内容层设置位置
             bg.style.display="block";
             bg.style.height=document.documentElement.scrollHeight+"px";
             isComp= true;
             //开始采集
             //beginCapture(context);
             dataInitComp();
            //关闭页面前,取消采集
            //cancelCaptureBeforeClose("html5");
        }
        else
        {
            createWindow('base_baseFPVerifySimple.do?random=' + getRandomNum() + '^0^0^465^320^' + title);
            //关闭页面前,取消采集
            //cancelCaptureBeforeClose("simple");
        }
    }
    else
    {
        alert(downloadPrompt);
        //messageBox({messageType: "alert", title: "提示", text: downloadPrompt});
    }
}
/**
 * 画布文本自动换行
 * @author chenpf
 * @create 2015-03-10 16:56:31 pm
 * @param context 2d画布上下文
 * @param text  显示信息内容
 * @param CWidth 画布宽度
 * @param x 文本X坐标值
 *
 */
function autoWordBreak(context,text,CWidth,x){
    context.clear();
    var rownum = CWidth / 10;
    var len = strlen(text);
    if (rownum > len)
    {
        context.fillText(text, x, 30);
    }
    else
    {
        var endInd = rownum<text.length?rownum:text.length;
        var beginInd = 0;
        var endTemp=0;
        for (var i = 0; i <= text.length / rownum; i++)
        {
            endTemp = text.substr(beginInd, endInd).lastIndexOf(" ");
            if(endTemp!=-1)
                endInd=beginInd+endTemp;
            context.fillText(text.substr(beginInd, endInd), x, (i + 1) * 30);
            beginInd = endInd+1;
            if(beginInd>=text.length)
                break;
            endInd = beginInd + rownum;
        }
    }
}
//清除画布内容
CanvasRenderingContext2D.prototype.clear =
      CanvasRenderingContext2D.prototype.clear || function (preserveTransform) {
        if (preserveTransform) {
          this.save();
          this.setTransform(1, 0, 0, 1, 0, 0);
        }
        this.clearRect(0, 0, this.canvas.width, this.canvas.height);
        if (preserveTransform) {
          this.restore();
        }
    };
    /**
     * 关闭页面前,如果正在进行验证,则先取消采集
     * @author wenxin
     * @create 2013-06-24 19:57:11 pm
     * @param browserFlag 浏览器标记 simple:简易版本,表示是ie浏览器;html5:表示支持html5的浏览器
     */
    function cancelCaptureBeforeClose(browserFlag)
    {
         //关闭页面时,监听关闭的onclick事件
        getCurrentWindow().button("close").attachEvent("onClick", function()
        {
            clearTimeout(verifyTimer);
            if(browserFlag == "html5")
            {
                //正在进行验证,还没有关闭指纹采集
                if(verifyFlag)
                {
                    //取消采集
                    cancelCapture();
                }
                //关闭页面
                closeWindow();
            }
            else if(browserFlag == "simple")
            {
                //alert("cancel capture before close window!");
                //将定时器的递归调用关闭
                clearTimeout(timer);
                //取消采集
                cancelRegister();
                //此处应该在取消结束后,再关闭窗口
                closeWindow();
            }
        });
    }
    /**
     * 表单提交
     * @author wenxin
     * @create 2013-08-05 15:19:11 pm
     */
    function formSubmit(id)
    {
        $('#'+id).serialize();
        $('#'+id).ajaxForm(function(data){
            callBackFormSubmit(data);
        });
        $('#'+id).submit(); //表单提交。
    }
SunshineIns/src/asset/fingerprint/js/jquery.js
New file
Diff too large
SunshineIns/src/asset/fingerprint/js/main.js
New file
@@ -0,0 +1,870 @@
//全局2d画笔
var globalContext = null;
//页面右上角圆弧的背景色
var arcBgColor = "rgb(54, 100, 139)";
//页面背景色
//var bgColor = "rgb(0, 0, 0)";
//验证标记--是否已经进行验证 true:正在进行验证;false:否
var verifyFlag = false;
//模式:1--1:1,2--1:N
var model = "2";
//绘画双手的起点横坐标
var x = 28;
//绘画双手的起点纵坐标
var y = 346;
//存放画手指函数的数组
var fingerList = [];
//保存当前正在采集的手指标记--删除时,消除当前正在采集的手指颜色时用到
var lastFPIdNum = null;
//绘画手指的边框颜色
var fingerBorderColor = "rgb(71,75,79)";
//页面右上角圆弧的背景色
//var arcBgColor = "rgb(243, 245,240)";
//页面背景色
var bgColor = "rgb(243, 245,240)";
//绘画的图形边框样式--边线绘图
var strokeStyle = "stroke";
//绘画的图形填充样式--填充绘图
var fillStyle = "fill";
//点击手指 的颜色
var fillFingerColor="rgb(71,75,79)";
//判断是否修改了数据(包括新增和删除)
var fpModifyFlag = false;
/**
 * 画椭圆 -- 给context添加绘画椭圆的属性
 * @author wenxin
 * @create 2013-05-15 10:11:21 am
 * @param x, y 椭圆定位的坐标
 * @param width, height 椭圆的宽度和高度
 */
CanvasRenderingContext2D.prototype.oval = function(x, y, width, height)
{
    var k = (width/0.75)/2,w = width/2,h = height/2;
    this.strokeStyle = bgColor;
    this.beginPath();
    this.moveTo(x, y-h);
    this.bezierCurveTo(x+k, y-h, x+k, y+h, x, y+h);
    this.bezierCurveTo(x-k, y+h, x-k, y-h, x, y-h);
    this.closePath();
    this.stroke();
    return this;
}
 /**
 * 查动态库连接回调函数
 * @author wenxin
 * @create 2013-05-15 17:12:21 pm
 * @param ${pers_person_templateCount}:指纹数
 */
function getDLLConnectCallBack(result,isComp)
{
    if(globalContext == null)
    {
        if(isComp==true){
            globalContext = document.getElementById("canvasComp").getContext("2d");
        }else{
            globalContext = document.getElementById("canvas").getContext("2d");
        }
    }
    //返回码
    var ret = null;
    ret = result.ret;
    //接口调用成功返回时
    if(ret == 0)
    {
        //${base_fp_connectFail}:连接指纹采集器失败
        collectTips(globalContext, "未检测到指纹采集器.", "verification");
    }
    else
    {
        //${base_fp_loadFail}:加载ZKFinger10失败
        collectTips(globalContext, "加载动态库失败.", "verification");
    }
}
/**
 * 调用begincapture接口,开始采集指纹
 * @author wenxin
 * @create 2013-06-24 10:11:21 am
 * @param context 2d画布上下文
 */
function beginCapture(context)
{
    $.ajax( {
        type : "GET",
        url : issOnlineUrl+"/fingerprint/beginCapture?type=2&FakeFunOn=0&random="+getRandomNum(),
        dataType : "json",
        async: true,
        success : function(result)
        {
            //返回码
            var ret = null;
            ret = result.ret;
            //接口调用成功返回时
            if(ret == 0)
            {
                verifyFlag = true;
                //检查采集、显示图像
                checkColl();
            }
            else if(ret == -2001)
            {
                //${base_fp_connectFail}:连接指纹采集器失败
                //显示框--采集提示
                collectTips(context, "未检测到指纹采集器.", "verification");
            }
            else if(ret == -2002)
            {
                getWebServerInfo(null, null, "1");
            }
            else if(ret == -2005)
            {
                //取消采集
                cancelCapture();
                //开始采集
                beginCapture(globalContext);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert("请安装指纹驱动或启动该服务!");
            //messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${base_fp_connectPrompt}"});
        }
    });
}
/**
 * 检查采集--递归调用,如果有采集到指纹,显示图像,获取模板,进行比对
 * @author wenxin
 * @create 2013-06-24 10:11:21 am
 */
function checkColl()
{
    var base64FPImg = "";
    //返回码
    var ret = null;
    $.ajax( {
        type : "GET",
        url : issOnlineUrl+"/fingerprint/getImage?random="+getRandomNum(),
        dataType : "json",
        async: true,
        success : function(result)
        {debugger;
            //alert(objToStr(data));
            //指纹采集次数
            var collCount = 0;
            ret = result.ret;
            if(ret == 0)
            {
                collCount = result.data.enroll_index;
                base64FPImg = result.data.jpg_base64;
            }
            if(collCount == 0)
            {
                //定时器
                timer = setTimeout("checkColl()", 200);//比对失败重新开始
            }
            else
            {
                //将定时器关闭
                clearTimeout(verifyTimer);
                //显示指纹图像
                showImage(globalContext, base64FPImg, "verification");
                //存放国际化元素数组
                var paramArray = new Array();
                paramArray[0] = '成功登记指纹';//${base_fp_registerSuccess}:成功登记指纹
                paramArray[1] = '请重按手指';//${base_fp_pressFingerAgain}:请重按手指
                paramArray[3] = '请检查网络连接';//${base_fp_connectPrompt}:请检查网络连接
                //获取指纹模板
                getFPTemplate(paramArray, "verification");
                $("#oneToMany").attr("disabled", false);
                $("#oneToOne").attr("disabled", false);
                setTimeout("beginCapture(null)", 200);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert("请安装指纹驱动或启动该服务!");
            //messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${base_fp_connectPrompt}"});
        }
    });
}
/**
 * 指纹比对
 * @author wenxin
 * @create 2013-06-24 17:41:21 pm
 * @param fpTemplate 指纹模板
 */
function fpComparison(fpTemplate)
{
    if(model == "1")
    {
        if($("#persNumText").val() != "${pers_person_pin}")
        {
            $("#pin").val($("#persNumText").val());
        }
    }
    $("#verifyModel").val(model);
    $("#verifyTemplate").val(fpTemplate);
    //表单提交
    //formSubmit("fpVerifyForm");
}
/**
 * 取消采集
 * @author wenxin
 * @create 2013-06-24 19:57:11 pm
 */
function cancelCapture()
{
    //将定时器的递归调用关闭
    clearTimeout(timer);
    //取消采集
    $.ajax( {
        type : "GET",
        url : issOnlineUrl+"/fingerprint/cancelCapture?random="+getRandomNum(),
        dataType : "json",
        async: true,
        success : function(result)
        {
            verifyFlag = false;
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert("请安装指纹驱动或启动该服务!");
            //messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${base_fp_connectPrompt}"});
        }
    });
}
/**
 * 确定按钮事件
 * @author wenxin
 * @create 2013-06-26 16:57:11 pm
 */
function beginVerify()
{
    if($("#persNumText").val() == "${pers_person_pin}" && model == "1")
    {
        //${base_fp_enterPin}:请输入人员编号
        //显示框--采集提示
        collectTips(globalContext, "请输入人员编号", "verification");
        return;
    }
    else
    {
        //${base_fp_verifyInfo}:请水平按压手指验证
        //显示框--采集提示
        collectTips(globalContext, "请水平按压手指验证", "verification");
    }
    //取消采集--如果当前正在采集
    cancelEvent();
    $("#oneToMany").attr("disabled", true);
    $("#oneToOne").attr("disabled", true);
    //开始采集
    beginCapture(globalContext);
}
/**
 * 清空
 * @author wenxin
 * @create 2013-09-05 16:57:11 pm
 */
function clearImageData()
{
    if(isComp){
        //清空指纹图像
        clearFPImage(globalContext, "verification");
        //显示框--采集提示
        collectTips(globalContext, "请水平按压手指验证", "verification");
    }else{
        //清空指纹图像
        clearFPImage(globalContext, "register");
    }
}
/**
 * 表单提交回调函数
 * @author wenxin
 * @create 2013-06-26 16:57:11 pm
 */
function callBackFormSubmit(msg)
{
    if(msg.ret == "ok")//成功
    {
        collectTips(globalContext, "验证通过", "verification");
        setTimeout("closeVerify()", 1000);
        setTimeout(_callBackFunction("dashboard.action"), 1000);
    }
    else if(msg.msg == "disabled")
    {
        collectTips(globalContext, "${auth_login_disabled}", "verification");
        setTimeout("closeVerify()", 1000);
        $(".errorTip").html("${auth_login_disabled}");
        $(".errorTip").show();
    }else if(msg.msg == "notExist")
    {
        collectTips(globalContext, "验证失败", "verification");
        setTimeout("clearImageData()", 1000);
        beginCapture(globalContext);
    }
}
/**
 * 关闭比对页面
 * @author wenxin
 * @create 2013-06-21 14:57:11 pm
 */
function closeVerify()
{
    //正在进行验证,还没有关闭指纹采集
    if(verifyFlag)
    {
        //取消采集
        cancelCapture();
    }
    close();
}
/**
 * 页面加载时,初始化数据
 * @author wenxin
 * @create 2013-07-09 15:18:31 pm
 */
function dataInitComp()
{
    var canvas = document.getElementById("canvasComp");
    var context = canvas.getContext("2d");
    globalContext = context;
    //文本框内提示信息并清空
    //checkText();
    //${base_fp_verifyInfo}:请水平按压手指验证
    //显示框--采集提示
    collectTips(context, "请水平按压手指验证", "verification");
    //开始采集
    beginCapture(context);
    //定时器
    verifyTimer = setTimeout("closeVerify()", 500000);
}
//初始化数据
//dataInit();
/**
 * 点击确定按钮时,触发事件
 * @author wenxin
 * @create 2013-05-15 17:12:21 pm
 * @param ${pers_person_templateCount}:指纹数
 */
function submitEvent()
{
    storeDataToHtml();
    showFPCount('指纹数:');
    //closeWindow();
    close();
}
 /**
  * 采集指纹
  * @author wenxin
  * @create 2013-05-13 10:18:31 am
  * @param context 2d画布上下文
  */
 function fpCollection(context)
 {
     $.ajax( {
         type : "GET",
         url : issOnlineUrl+"/fingerprint/beginCapture?type=1&FakeFunOn=0&random="+getRandomNum(),
         dataType : "json",
         async: true,
         success : function(result)
         {
             //返回码
             var ret = null;
             ret = result.ret;
             //接口调用成功返回时
             if(ret == 0)
             {
                 //检查采集次数、显示图像
                 checkCollCount();
             }
             else if(ret == -2001)
             {
                 //${base_fp_connectFail}:连接指纹采集器失败
                 //显示框--采集提示
                 collectTips(globalContext, "未检测到指纹采集器.", "html5");
             }
             else if(ret == -2002)
             {
                 getWebServerInfo(null, null, "1");
             }
             else if(ret == -2005)
             {
                 //取消采集
                 cancelRegister();
                 //切换手指后,渲染手指(消除原来手指的颜色)
                 renderAfterColl(globalContext, fpIdNum, bgColor, false);
                 //${base_fp_pressFinger}:请选择手指
                 //显示框--采集提示
                 collectTips(globalContext, "请选择手指.", "html5");
             }
         },
         error : function(XMLHttpRequest, textStatus, errorThrown)
         {
             alert("请安装指纹驱动或启动该服务!");
             //messageBox({messageType: "alert", title: "提示", text: "请安装指纹驱动或启动该服务!"});
         }
     });
 }
 /**
  * 检查采集次数
  * @author wenxin
  * @create 2013-05-22 09:24:31 am
  * @param collCount 采集次数
  */
 function checkCollCount()
 {
     var base64FPImg = "";
     //返回码
     var ret = null;
     $.ajax( {
         type : "GET",
         url : issOnlineUrl+"/fingerprint/getImage?random="+getRandomNum(),
         dataType : "json",
         async: false,
         success : function(result)
         {
             //alert(objToStr(data));
             //指纹采集次数
             var collCount = 0;
             ret = result.ret;
             if(ret == 0)
             {
                 collCount = result.data.enroll_index;
                 base64FPImg = result.data.jpg_base64;
             }
             if(collCount != 3)
             {
                 //第一次和第二次采集,显示采集次数、指纹图像、进度条
                 if(collCount == 1 || collCount == 2)
                 {
                     //${base_fp_collCount}:按压指纹剩余次数:
                     var text = "按压剩余次数:"+(FINGERPRINT_NUMBER - collCount);
                     //显示框--采集提示
                     collectTips(globalContext, text, "html5");
                     //进度条
                     drawProgressBar(globalContext, collCount);
                     //显示指纹图像
                     showImage(globalContext, base64FPImg, "html5");
                     //清空图像
                     setTimeout("clearImageData()", 200);
                 }
                 //定时器
                 timer = setTimeout("checkCollCount()", 200);
             }
             else
             {
                 //显示指纹图像
                 showImage(globalContext, base64FPImg, "html5");
                 //清空图像
                 setTimeout("clearImageData()", 200);
                 //存放国际化元素数组
                 var paramArray = new Array();
                 paramArray[0] = "成功登记指纹.";//base_fp_registerSuccess:成功登记指纹
                 paramArray[1] = "采集失败,请重新登记.";//base_fp_pressFingerAgain:请重按手指
                 paramArray[2] = "请不要重复录入指纹!";//base_fp_repeatCollection:请不要重复录入指纹!
                 paramArray[3] = "请安装指纹驱动或启动该服务!";//base_fp_connectPrompt:请检查网络连接
                 //进度条
                 drawProgressBar(globalContext, collCount);
                 //获取指纹模板
                 if(!getFPTemplate(paramArray, "register"))
                 {
                     drawProgressBar(globalContext, 0);//进度条灰显
                 }
                 //如果胁迫指纹选中,则取消选中
                 if(duressFingerFlag)
                 {
                     $("#duressFinger").attr("checked", false);
                 }
                 $("#duressFinger").attr("disabled", false);
                 $("#submitButtonId").attr("disabled", false);
                 collectFlag = false;
                 fpIdNum = -1;
                 return collCount;
             }
         },
         error : function(XMLHttpRequest, textStatus, errorThrown)
         {
             alert("请安装指纹驱动或启动该服务!");
             //messageBox({messageType: "alert", title: "提示", text: "请安装指纹驱动或启动该服务!"});
         }
     });
 }
 /**
  * 取消采集,当采集中断时
  * @author wenxin
  * @create 2013-05-27 17:46:31 pm
  */
 function cancelRegister()
 {
     //当前有手指在采集指纹
     if(collectFlag)
     {
         //将定时器的递归调用关闭
         clearTimeout(timer);
         //取消采集
         $.ajax( {
             type : "GET",
             url : issOnlineUrl+"/fingerprint/cancelCapture?random="+getRandomNum(),
             dataType : "json",
             async: false,
             success : function(result)
             {
                 //如果胁迫指纹选中,则取消选中
                 if(duressFingerFlag)
                 {
                     $("#duressFinger").attr("checked", false);
                 }
                 if(fpModifyFlag)
                 {
                     $("#submitButtonId").attr("disabled", false);
                 }
                 $("#duressFinger").attr("disabled", false);
                 if(fpIdNum != null)
                 {
                     //消除原来手指的颜色
                     renderAfterColl(globalContext, lastFPIdNum, bgColor, false);
                 }
                 collectFlag = false;
             },
             error : function(XMLHttpRequest, textStatus, errorThrown)
             {
                 alert("请安装指纹驱动或启动该服务!");
                 //messageBox({messageType: "alert", title: "提示", text: "请安装指纹驱动或启动该服务!"});
             }
         });
     }
 }
 /**
  * 绘画
  * @author wenxin
  * @create 2013-05-13 10:18:31 am
  * @param context 2d画布上下文
  * @param x, y 绘画左手掌的第一个点的坐标,后面的绘画手指和右手掌的坐标都是相对于此点坐标来计算
  * @param color 绘画手指和手掌的边框颜色
  */
 function draw(context, x, y, color)
 {
     var coordArray = new Array();
     //初始化起始坐标,并返回json格式数据
     var coordJson = initCoordJson();
     for(var i=0; i<coordJson.length; i++)
     {
         //绘画双手和圆弧
         drawHandAndArc(context, coordArray, color, coordJson[i].coord.x, coordJson[i].coord.y, coordJson[i].num);
//          drawHandAndArc(context, coordArray, color, coordJson[i].coord.x, coordJson[i].coord.y, i);
         coordArray = null;
         coordArray = new Array();
     }
     //存放国际化元素数组
     var paramArray = new Array();
     paramArray[0] = "请选择手指.";
     paramArray[1] = "未检测到指纹采集器.";
     paramArray[2] = "加载动态库失败.";
     paramArray[3] = "请选择手指.";
     //检查指纹采集器
     checkFPReader(context, paramArray, "html5");
     //进度条
     drawProgressBar(context, 0);
     //将确定按钮置灰
     $("#submitButtonId").attr("disabled", true);
 }
 /**
  * 绘画双手和圆弧
  * @author wenxin
  * @create 2013-06-17 10:18:31 am
  * @param context 2d画布上下文
  * @param coordArray 坐标数组
  * @param x, y 绘画左手掌的第一个点的坐标,后面的绘画手指和右手掌的坐标都是相对于此点坐标来计算
  * @param color 绘画手指和手掌的边框颜色
  * @param num 当前会话对象编号
  */
 function drawHandAndArc(context, coordArray, color, x, y, num)
 {
     //初始化坐标
     coordArray = initCoordArray(coordArray, x, y, num);
     var drawObj = null;
     //绘画手指
     if(num < 10)
     {
         drawObj = "finger"+num;
         drawObj = new renderFinger(context, coordArray);
         drawObj.drawFinger(strokeStyle, color);
         //初始化时,渲染手指
         renderInit(context, num, "html5");
         //将绘画的手指实例放入数组,方便重画时用
         if(fingerList.length < 10)
         {
             fingerList.push(drawObj);
         }
     }
     //绘画双手掌心
     else if(num < 12)
     {
         new renderHand(context, coordArray).drawHand(color);
     }
     //绘画圆圈
     showImage(context, "image/base_fpVerify_clearImage.png", "clearForRegister");
     //绘画圆弧
     //else if(num == 12)
     //{
     //    new FillArc(context, coordArray).drawArc(arcBgColor);
     //}
 }
 /**
  * 重画
  * @author wenxin
  * @create 2013-05-13 10:18:31 am
  * @param x, y 鼠标点击处的坐标
  */
 function redraw(x, y)
 {
     var canvas = document.getElementById("canvas");
     if (canvas.getContext)
     {
         var context = canvas.getContext("2d");
         //是否点击在手指区域
         var isInFingerArea = false;
         //判断当前点击是否在手指区域
         for ( var i = 0; i < fingerList.length; i++)
         {
             var finger = fingerList[i];
             finger.drawFinger(strokeStyle, fingerBorderColor);
             if (context.isPointInPath(x, y))
             {
                 isInFingerArea = true;
                 break;
             }
         }
         outerloop:
         for ( var i = 0; i < fingerList.length; i++)
         {
             if(collectFlag)
             {
                 //当点击的是同一个手指时,如何判断?(编辑指纹时,有问题)
                 if(fpIdNum == i)
                 {
                     //切换手指后,渲染手指(消除原来手指的颜色)
                     renderAfterColl(globalContext, fpIdNum, bgColor, false);
                 }
             }
             var finger = fingerList[i];
             finger.drawFinger(strokeStyle, fingerBorderColor);
             //currentContext = context;
             if (context.isPointInPath(x, y))
             {
                 globalContext = context;
                 //两次是否点击的同一个手指进行采集。如果是,则第二次点击时取消采集。
                 var iaSameFinger = false;
                 if(fpIdNum == i && collectFlag)
                 {
                     iaSameFinger = true;
                 }
                 var fingerId;
                 //判断该手指是否已经有指纹
                 var isCollected = false;
                 isCollected = isContains(fingerIdArray, i);
                 fpIdNum = i;
                 if(!isCollected)
                 {
                     //保存当前正在采集的手指标记
                     lastFPIdNum = fpIdNum;
                 }
                 //如果已经有指纹
                 if(isCollected)
                 {
                     //取消采集
                     cancelRegister();
                     var flag=confirm("删除当前选中的指纹吗?");
                     if(flag){
                         delFPData(flag, context, "html5");
                         collectTips(globalContext, "请选择手指.", "html5");
                         //进度条
                         drawProgressBar(globalContext, 0);
                     }
                     break outerloop;
                 }
                 else
                 {
                     //两次点击的同一个手指进行采集,则第二次取消采集。
                     if(iaSameFinger)
                     {
                         //取消采集
                         cancelRegister();
                         //取消采集后重新提示请选择手指
                         collectTips(globalContext, "请选择手指.", "html5");
                         //取消采集后重新绘制进度条
                         drawProgressBar(context, 0);
                         fpIdNum = -1;
                     }
                     else
                     {
                         //取消采集
                         cancelRegister();
                         context.fillStyle = fillFingerColor;
                         context.fill();
                         //globalContext = context;
                         collectFlag = true;//需要判断,当重复点击时,颜色改变
                         $("#duressFinger").attr("disabled", true);
                         $("#submitButtonId").attr("disabled", true);
                         //${base_fp_collCount}:按压指纹剩余次数:
                         var text = "按压剩余次数:"+FINGERPRINT_NUMBER;
                         //进度条
                         drawProgressBar(globalContext, 0);
                         //显示框--采集提示
                         collectTips(globalContext, text, "html5");
                         //指纹采集
                         fpCollection(context);
                     }
                 }
             }
             else
             {
                 context.fillStyle = bgColor;
                 context.fill();
                 renderInit(context, i, "html5");
                 if(collectFlag)
                 {
                     if(fpIdNum == i && !isInFingerArea)
                     {
                         context.fillStyle = fillFingerColor;
                         context.fill();
                     }
                 }
             }
         }
     }
 }
 /**
  * 页面加载时,初始化数据
  * @author wenxin
  * @create 2013-07-09 15:18:31 pm
  */
 function dataInitReg()
 {
     if(!duressFingerShowFlag)
     {
         $("#duressFingerDiv").hide();
     }
     var canvas = document.getElementById("canvas");
     var context = canvas.getContext("2d");
     fpIdNum = null;
     //获取页面的指纹数据
     getDataFromPage();
     //绘画
     draw(context, x, y, fingerBorderColor);
     //jquery在ie下实现cors跨域请求
     jQuery.support.cors = true;
     //鼠标事件
     canvas.onmousedown = function(event){
         //event.which == 1--鼠标左键
         if(event.which == 1)
         {
             var pageInfo = canvas.getBoundingClientRect();
             var x = event.clientX - pageInfo.left;
             var y = event.clientY - pageInfo.top;
             duressFingerFlag = $("#duressFinger").attr("checked");
             //重画
             redraw(x, y);
         }
     }
 }
function myfunction(){
    //加载xml中ISSOnline_server的ip和port
    //loadXml("<%=basePath%>"+"webapp/xml/BaseISSOnlineServer.xml");
    //加载指纹标记和指纹模板数据到页面
    loadFPDataTemplate("[]", "[]");
    var browserFlag = "";
    //存放国际化元素数组
    var paramArray = new Array();
    //获取浏览器类型
    browserFlag = getBrowserType();
    paramArray[0] = '指纹';
    paramArray[1] = '指纹数:';
    paramArray[2] = '确认保存当前修改吗?';
    paramArray[3] = '登记';
    paramArray[4] = '请安装指纹驱动或启动该服务!';
    paramArray[5] = '0';
    paramArray[6] = '指纹数:';
    paramArray[7] = '验证';
    //检查驱动
    checkDriver(paramArray, browserFlag, false);
}
function closeCompa()
{
    $("#bg").css("display", "none");
    $("#box").css("display", "none");
    $("#comparisonDiv").css("display", "none");
}
//初始化界面数据,即清除指纹记录。
function cleanData()
{
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    fpIdNum = null;
    getDataFromPage();
    draw(context, x, y, fingerBorderColor);
    jQuery.support.cors = true;
    redraw(x, y);
}
function doVerify()
{
    var regTemplate = "TVFTUjIyAAAEEhAFBQUHCc7QAAAcE2kAAAAAgyEgiBKiAacPlQABAIIdnAHcAH4PagBlEmYN6ACJAA0PLhKrAaoPSADAAZcdEQGWACsONgA8EqwMzQAYAEYPZBJMAIMOhAB3AJodXgGdALIPeAB5EmQPqQBZADAMNxKXAbMPRACKAMIdAABwAM4PYQAbEvkOoQA9Ab0PAhMXAFMOtQCeAfAdlwGIAM0PZABvEucMcgDfAEoPyBJqAUgOngDAAX0dcAEyANkPUAAnE/cOIwBXAH8PAxMHAFMMGQDiAMEdLAmp3xIhWOopGLPgtfpCBkfzxGWAgSogmv2fgkJ1qPtygM/6FgYnAf6ecoBWeeZzdz8K4i9neo/e2VeB9g7jj7PzfPgBCHvu5hdWAxMP/QzLAbaAsJMYEaa8IAtOidYD9w2j/FoCFgk3ia4jhmX6I8cHuYf3hcMQ8AG335Nj830/ERZyASuC6G9qhZJs8OoY8hMfC8filOfG4M5Wk4TO7EYDExab4gbnvZFXfbcHvvW69PsZcAGv37/XMgzfEcLuzLf4/cQJBBIDMVlMFw+e9VYh1l1f/06bOqskIQADRB4qBMUsBEicDQA4AFoBwIJDgiUARABXVXhw7cCVw4DDb0fAf9CGxRQAVACnosXSwkSEwsDCBosDEmABXpNcDsWHBHvCgWd4eAbFngRlx8HAwwUAHwAN7P7ZDAAOAoZ4+9FSbgMAGQWJwwgSYhNTwVyABYgZEswVj6lpwkl6ldSDocPBSQnF1R0dwf/9/f4kwQDJCIGOBAAbLviECxMNL6mZfsUFwcDSwcMRAO83WcPFgJONkMQLAKs4SNLDcMHClhbFp0r7/P3A+fjAm/767PzB/f/9wOMDBNtTgcMJAJmlU6XUyMLDDQELoEkyVMHB+10GAMtrOYHBDQAUazAFc4BuBQG8b3Cn3gDPYEf//vz9/D76+u38//7///w7/vns//v9wP3A3gEPb0j///9HwDhU++3+/ztE/0beAQiBSP/+PlP+Ov/7UsH8///AwDv/xewLARSXKXivhQ4SNp0peIOJzgEPvVIqV8AzDsUMvznDdcFsb8HdARSuXVVTPsDA7v867f9LBwAMyvWZaB4ADsta/0eQ/kkeABDZXP/COcFP0zMHAAveJwbAxNECAZ3fdP3QAQTsZUZM//5bBf/60j/BChAXC9N0emUGEZ8Icf6F/w0DAgtiPkr/yBEGC2ZL/8D+wzr+XRYRWVt9MgrUAiJ1RcH/ZAwQyynz63PD/8PAasIQED0XwMDCagjVDjU7n8GNBRChhXTEKgQR5kNtRcEQ511sRVJCABmGAQYTAccAWl8AxACmEoXUAAAZRZcAQFAAAAAAABbFAAQSAzIAAAAAxQBBUA==";
    var fpTemplate = "TVFTUjIyAAAEEhAFBQUHCc7QAAAcE2kAAAAAgyEgiBKiAacPlQABAIIdnAHcAH4PagBlEmYN6ACJAA0PLhKrAaoPSADAAZcdEQGWACsONgA8EqwMzQAYAEYPZBJMAIMOhAB3AJodXgGdALIPeAB5EmQPqQBZADAMNxKXAbMPRACKAMIdAABwAM4PYQAbEvkOoQA9Ab0PAhMXAFMOtQCeAfAdlwGIAM0PZABvEucMcgDfAEoPyBJqAUgOngDAAX0dcAEyANkPUAAnE/cOIwBXAH8PAxMHAFMMGQDiAMEdLAmp3xIhWOopGLPgtfpCBkfzxGWAgSogmv2fgkJ1qPtygM/6FgYnAf6ecoBWeeZzdz8K4i9neo/e2VeB9g7jj7PzfPgBCHvu5hdWAxMP/QzLAbaAsJMYEaa8IAtOidYD9w2j/FoCFgk3ia4jhmX6I8cHuYf3hcMQ8AG335Nj830/ERZyASuC6G9qhZJs8OoY8hMfC8filOfG4M5Wk4TO7EYDExab4gbnvZFXfbcHvvW69PsZcAGv37/XMgzfEcLuzLf4/cQJBBIDMVlMFw+e9VYh1l1f/06bOqskIQADRB4qBMUsBEicDQA4AFoBwIJDgiUARABXVXhw7cCVw4DDb0fAf9CGxRQAVACnosXSwkSEwsDCBosDEmABXpNcDsWHBHvCgWd4eAbFngRlx8HAwwUAHwAN7P7ZDAAOAoZ4+9FSbgMAGQWJwwgSYhNTwVyABYgZEswVj6lpwkl6ldSDocPBSQnF1R0dwf/9/f4kwQDJCIGOBAAbLviECxMNL6mZfsUFwcDSwcMRAO83WcPFgJONkMQLAKs4SNLDcMHClhbFp0r7/P3A+fjAm/767PzB/f/9wOMDBNtTgcMJAJmlU6XUyMLDDQELoEkyVMHB+10GAMtrOYHBDQAUazAFc4BuBQG8b3Cn3gDPYEf//vz9/D76+u38//7///w7/vns//v9wP3A3gEPb0j///9HwDhU++3+/ztE/0beAQiBSP/+PlP+Ov/7UsH8///AwDv/xewLARSXKXivhQ4SNp0peIOJzgEPvVIqV8AzDsUMvznDdcFsb8HdARSuXVVTPsDA7v867f9LBwAMyvWZaB4ADsta/0eQ/kkeABDZXP/COcFP0zMHAAveJwbAxNECAZ3fdP3QAQTsZUZM//5bBf/60j/BChAXC9N0emUGEZ8Icf6F/w0DAgtiPkr/yBEGC2ZL/8D+wzr+XRYRWVt9MgrUAiJ1RcH/ZAwQyynz63PD/8PAasIQED0XwMDCagjVDjU7n8GNBRChhXTEKgQR5kNtRcEQ511sRVJCABmGAQYTAccAWl8AxACmEoXUAAAZRZcAQFAAAAAAABbFAAQSAzIAAAAAxQBBUA==";
    $.ajax( {
        type : "POST",
        url : "http://127.0.0.1:22001/ZKBIOOnline/fingerprint/verify",
        dataType : "json",
        data:JSON.stringify({'reg':regTemplate,
            'ver':fpTemplate}),
        async: true,
        success : function(data)
        {
            //返回码
            var ret = null;
             ret = data.ret;
             //接口调用成功返回时
             if(ret == 0)
            {
                alert("score:" + data.score);
            }
            else
            {
                alert("ret:" + data.ret);
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert("请安装指纹驱动或启动该服务!");
        }
    });
}
SunshineIns/src/asset/fingerprint/middleware/zkbioonline.exe
Binary files differ
SunshineIns/src/asset/fingerprint/指纹比对.html
New file
@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html>
<head>
<title>指纹比对</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/box.css" type="text/css">
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/fingerprint.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/baseMoth.js"></script>
<script type="text/javascript" src="js/dhtmlxCommon.js"></script>
</head>
<body onload="myfunction()">
    <form method="post" id="fpVerifyForm" name="fpVerifyForm"
        action="authLoginAction!login.do?fpLogin=fpLogin"
        enctype="multipart/form-data" style="display: none">
        <input type="hidden" id="verifyModel" name="verifyModel" /> <input
            type="hidden" id="verifyTemplate" name="verifyTemplate" />
    </form>
    <div id="fpRegisterDiv" style="display: none; height: do">
        <a id="fpRegister"
            onclick='submitRegister("指纹", "指纹数:", "确认保存当前修改吗?", "驱动下载", false)'
            title="请安装指纹驱动或启动该服务" class="showGray"
            onmouseover="this.className='showGray'">注册</a>
    </div>
    <div id="driverDownload" style="display: inline; margin: 0 0 0 5px;">
        <a id='downloadDriver' href='middleware/zkbioonline.exe'
            title='驱动下载'>驱动下载</a>
    </div>
    <div id="comparison" style="display: inline"
        onclick='fpVerification("指纹比对","请安装指纹驱动或启动服务",true,globalContext)'>比对</div>
    <div>
        <input type="button" onclick="doVerify()" value="测试1:1接口"/>
    </div>
    <div id="comparisonDiv" class="box" style="display: none">
        <h2>指纹比对</h2>
        <div class="list">
            <canvas id="canvasComp" width="430" height="320"
                style="background: url('image/base_fpVerify.jpg') rgb(243, 245, 240);"></canvas>
            <input type="button" value="关闭" onclick='closeCompa()' />
        </div>
    </div>
    <div id="bg" style="display: none;"></div>
    <div id="box" class="box" style="display: none;">
        <h2>指纹登记</h2>
        <div class="list">
            <canvas id="canvas" width="430" height="450"
                style="background: rgb(243, 245, 240)"></canvas>
            <input type="hidden" id="whetherModify" name="whetherModify" alt=""
                value="111" />
            <div
                style="position: absolute; left: 310px; top: 325px; width: 70px; height: 28px;">
                <button type="button" id="submitButtonId" name="makeSureName"
                    onclick="submitEvent()" class="button-form">确定</button>
                <!-- ${common_edit_ok}:确定 -->
            </div>
            <div
                style="position: absolute; left: 310px; top: 365px; width: 70px; height: 28px;">
                <button class="button-form" type="button" id="closeButton"
                    name="closeButton" onclick='cancelEvent("确认保存当前修改吗?", "指纹数:");'>
                    取消</button>
                <!-- ${common_edit_cancel}:取消 -->
            </div>
        </div>
    </div>
</body>
</html>
SunshineIns/src/asset/fingerprint/指纹登记.html
New file
@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html>
<head>
<title>指纹登记</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/box.css" type="text/css">
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/fingerprint.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/baseMoth.js"></script>
<script type="text/javascript" src="js/dhtmlxCommon.js"></script>
</head>
<body onload="myfunction()">
    <form method="post" id="fpVerifyForm" name="fpVerifyForm"
        action="authLoginAction!login.do?fpLogin=fpLogin"
        enctype="multipart/form-data" style="display: none">
        <input type="hidden" id="verifyModel" name="verifyModel" /> <input
            type="hidden" id="verifyTemplate" name="verifyTemplate" />
    </form>
    <div id="fpRegisterDiv" style="display: inline; height: do">
        <a id="fpRegister"
            onclick='submitRegister("指纹", "指纹数:", "确认保存当前修改吗?", "驱动下载", false)'
            title="请安装指纹驱动或启动该服务" class="showGray"
            onmouseover="this.className='showGray'">注册</a>
    </div>
    <div id="driverDownload" style="display: inline; margin: 0 0 0 5px;">
        <a id='downloadDriver' href='middleware/zkbioonline.exe'
            title='驱动下载'>驱动下载</a>
    </div>
    <div id="comparison" style="display: none"
        onclick='fpVerification("指纹比对","请安装指纹驱动或启动服务",true,globalContext)'>比对</div>
    <div id="comparisonDiv" class="box" style="display: none">
        <h2>指纹比对</h2>
        <div class="list">
            <canvas id="canvasComp" width="430" height="320"
                style="background: url('image/base_fpVerify.jpg') rgb(243, 245, 240);"></canvas>
            <input type="button" value="关闭" onclick='closeCompa()' />
        </div>
    </div>
    <div id="bg" style="display: none;"></div>
    <div id="box" class="box" style="display: none;">
        <h2>指纹登记</h2>
        <div class="list">
            <canvas id="canvas" width="430" height="450"
                style="background: rgb(243, 245, 240)"></canvas>
            <input type="hidden" id="whetherModify" name="whetherModify" alt=""
                value="111" />
            <div
                style="position: absolute; left: 310px; top: 325px; width: 70px; height: 28px;">
                <button type="button" id="submitButtonId" name="makeSureName"
                    onclick="submitEvent()" class="button-form">确定</button>
                <!-- ${common_edit_ok}:确定 -->
            </div>
            <div
                style="position: absolute; left: 310px; top: 365px; width: 70px; height: 28px;">
                <button class="button-form" type="button" id="closeButton"
                    name="closeButton" onclick='cancelEvent("确认保存当前修改吗?", "指纹数:");'>
                    取消</button>
                <!-- ${common_edit_cancel}:取消 -->
            </div>
        </div>
    </div>
</body>
</html>
SunshineIns/src/data/menu.js
@@ -78,6 +78,12 @@
  iconCheck: activeCheck,
  path: '/snapshot'
}, {
  id: 'criminalExecution',
  name: '刑执监督管理',
  icon: infoManage,
  iconCheck: infoCheck,
  path: '/criminalExecution'
},{
  id: 'crimeCrackdown',
  name: '扫黑除恶',
  icon: active,
SunshineIns/src/fetch/_fetch.js
@@ -1,9 +1,9 @@
import fetch from 'hife/fetch';
// export const base = 'http://xnwj.gznsjc.gov.cn';
export const base = 'http://nsjc.vaiwan.com';
// export const base = 'http://nsjc.vaiwan.com';
// export const base = 'http://192.168.16.109:6060/';
// export const base = 'http://120.79.193.119:9021/';
export const base = 'http://120.79.193.119:9021/';
// export const base = 'http://localhost:6060';
export const domain = base + '/nsjc-charge/';
SunshineIns/src/index.jsx
@@ -51,6 +51,8 @@
import QuestionPersonDetail from './page/QuestionPersonDetail';
//顶部图片设置
import TopImage from './page/TopImage';
// 刑执监督管理
import CriminalExecution from './page/CriminalExecution';
import NoInspectionReportList from './page/NoInspectionReportList';
@@ -120,6 +122,9 @@
          <Route path='/entry/examineEdit/:id' component={ExamineEdit} />
          <Route path='/topImage' component={TopImage} />
          {/* 刑执监督管理 */}
          <Route path='/criminalExecution' component={CriminalExecution} />
          
          {/* 问卷管理部分 */}
          <Route path='/questionnaire/newlyList' component={NewlyList} />
SunshineIns/src/page/CriminalExecution.jsx
New file
@@ -0,0 +1,280 @@
import React from 'react';
import HeadView from '../view/HeadView';
import TableBtnView from '../view/TableBtnView';
import CommonSearchForm from '../view/CommonSearchForm';
import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Modal } from 'antd';
import moment from 'moment';
import Fetch from '../fetch';
import TableView from '../view/TableView';
const Option = Select.Option;
function typeOfName(type) {
    switch (type) {
        case 1:
            return "跟踪帮教";
        case 2:
            return "合适成年人";
        case 3:
            return "社会调查";
        case 4:
            return "心理疏导";
        case 5:
            return "法律援助";
    }
}
const taskNodeIds = {
    1: '跟踪帮教',
    2: '合适成年人',
    3: '社会调查',
    4: '心理疏导',
    5: '法律援助',
}
const activityTypeList = [
    1,
    2,
    3,
    4,
    5
]
const activityStatusIds = {
    0: '未开始',
    1: '进行中',
    2: '已结束',
    99: '暂停',
}
const activityStatusList = [
    0,
    1,
    2
]
export default class CareList extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            data: [],
            formData: {
                __key: Date.now(),
                page: 1,
                size: 10,
            },
            resetKey: Date.now(),
            loading: false
        };
    }
    componentDidMount() {
        document.title = '社会观护管理';
        this.getData();
    }
    setFormData = data => {
        console.log('form', data);
        this.setState({
            formData: data,
        });
    }
    getData = () => {
        const { formData } = this.state;
        this.setState({ loading: true })
        Fetch.socialQuery({ ...formData })
            .then(res => {
                console.log(res)
                for (var i = 0; i < res.rows.length; i++) {
                    res.rows[i]['index'] = i + 1;
                }
                this.setState({
                    data: res.rows,
                    loading: false,
                });
            });
    }
    onInputChange = ({ target: { value, name } }) => {
        this.setState(({ formData }) => ({
            formData: {
                ...formData,
                [name]: value
            }
        }))
    }
    Seaech = () => {
        const { formData } = this.state;
        Fetch.getSweeping(formData)
            .then(res => {
                for (var i = 0; i < res.length; i++) {
                    res[i]['index'] = i + 1;
                }
                this.setState({
                    data: res
                });
            });
    }
    Reset = () => {
        this.setState({
            resetKey: Date.now(),
            formData: {}
        }, this.getData);
    }
    confirm = (e) => {
        console.log(e);
        this.setState({ loading: true })
        Fetch.socialDelete(e).then(res => {
            if (res.code == 0) {
                console.log(res)
                this.setState({ loading: false })
                message.success('删除成功');
                this.getData();
            } else {
                this.setState({ loading: false })
                message.error('删除失败,请联系管理员', 2)
            }
        }
        )
    }
    showModal = (id) => {
        this.setState({
          visible: true,
        });
        // Fetch.socialCompanyDetail(id)
        //   .then(res => {
        //     this.setState({ savedate: res })
        //   })
      }
    renderColumns = () => {
        return [{
            title: '任务标题',
            dataIndex: 'taskTitle',
            key: 'taskTitle'
        }, {
            title: '任务类型',
            dataIndex: 'taskType',
            key: 'taskType',
            render: text => <span>{typeOfName(text)}</span>
        }, {
            title: '状态',
            dataIndex: 'status',
            key: 'status',
            render: text => (
                text == 0 ?
                    <Badge style={{ backgroundColor: '#6C757C' }} count={'未开始'} /> : text == 1 ? <Badge count={'进行中'} style={{ backgroundColor: '#F1C40F' }} /> : text == 2 ? <Badge count={'已结束'} style={{ backgroundColor: '#2ECC71' }} /> : <Badge count={'暂停'} style={{ backgroundColor: '#2ECC71' }} />
            )
        }, {
            title: '创建时间',
            dataIndex: 'createTime',
            key: 'createTime',
            render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>
        }, {
            title: '开始时间',
            dataIndex: 'startTime',
            key: 'startTime',
            render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>
        }, {
            title: '结束时间',
            dataIndex: 'endTime',
            key: 'endTime',
            render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>
        }, {
            title: '操作',
            key: 'action',
            render: (text, record) => (
                <span>
                    {
                        record.status == 0 ?
                            <React.Fragment>
                                <a onClick={() => this.showModal(record.id)}>编辑</a>
                                <Divider type="vertical" />
                                <Popconfirm
                                    title="确认删除任务吗?"
                                    id={record.id}
                                    onConfirm={e => this.confirm(record.id)}
                                    okText="确定"
                                    cancelText="取消"
                                >
                                    <a href="#">删除</a>
                                    <Divider type="vertical" />
                                </Popconfirm>
                                <a onClick={() => this.reboot(record.id, 99)}>暂停</a>
                            </React.Fragment> :
                            record.status == 1 ?
                                <React.Fragment>
                                    <a onClick={() => this.showModal(record.id)}>查看</a>
                                    <Divider type="vertical" />
                                    <a onClick={() => this.showModal(record.id)}>结束任务</a>
                                    <Divider type="vertical" />
                                    <a onClick={() => this.reboot(record.id, 99)}>暂停</a>
                                </React.Fragment> :
                                <React.Fragment>
                                    <a onClick={() => this.showModal(record.id)}>查看</a>
                                    <Divider type="vertical" />
                                    <a onClick={() => this.reboot(record.id, 0)}>重启</a>
                                </React.Fragment>
                    }
                </span>
            ),
        }]
    }
    render() {
        const { data, resetKey, visible, loading, savedate, closeKey, formData } = this.state;
        return (
            <div className="app-page">
                <HeadView history={this.props.history} />
                <div style={{ marginLeft: '90%', marginBottom: '20px', marginTop: '20px' }}>
                    <Button type="primary" size='large' onClick={() => this.showModal('new')}>新增</Button>
                </div>
                <div style={{ background: '#fff', margin: 20 }}>
                    <CommonSearchForm
                        {...this.props}
                        formData={formData}
                        setFormData={this.setFormData}
                        searchonClick={this.searchonClick}
                        pathName={this.props.location.pathname}
                        data={[
                            {
                                type: 'input', name: '公司名称', label: '公司名称', key: 'companyName'
                            },
                            {
                                type: 'input', name: '法人姓名', label: '法人姓名', key: 'companyLegal'
                            },
                            {
                                type: 'input', name: '联系电话', label: '联系电话', key: 'companyTel'
                            },
                        ]} />
                    <TableView columns={this.renderColumns()} data={data} pageSize='10' size='default' loading={loading} />
                </div>
                <Modal
                    key={closeKey}
                    confirmLoading={loading}
                    visible={visible}
                    title="公司信息"
                    onOk={this.handleOk}
                    onCancel={this.handleCancel}
                    bodyStyle={{ lineHeight: 4 }}
                >
                    <iframe
                        className="h-100"
                        style={{ width: '100%' }}
                        onLoad={() => { }}
                        ref="iframe"
                        src='../../asset/fingerprint/指纹登记.html'
                        width="100%"
                        scrolling="no"
                        frameBorder="0"
                    />
                </Modal>
            </div>
        )
    }
}
SunshineIns/src/page/Login.jsx
@@ -43,7 +43,7 @@
      if (res.code === 0) {
        // location.href = res.data;
        // location.href ='http://localhost:8080/index.html#/'
        location.href ='http://nsjcy.hugeinfo.com.cn/nsjc-charge/pc/index.html#/'
        location.href ='http://120.79.193.119:9021/nsjc-charge/pc/index.html#/'
      } else {
        message.error(res.msg, 2)
      }
SunshineLnsMinApp/app.js
@@ -10,11 +10,11 @@
  globalData: {
    userInfo: null,
    pageData: {},
    //  url: 'https://nsjcy.hugeinfo.com.cn/nsjc-charge',
     url: 'https://nsjcy.hugeinfo.com.cn/nsjc-charge',
    // url: 'http://1p885086k1.iok.la/nsjc-charge',
    //url: 'http://localhost:6060/nsjc-charge',
    imgUrl: 'https://nsjcy.hugeinfo.com.cn/nsjc-charge',
    url: 'http://nsjc.vaiwan.com/nsjc-charge',
    // url: 'http://nsjc.vaiwan.com/nsjc-charge',
    // imgUrl: 'http://nsjc.vaiwan.com/nsjc-charge'
  },
  // 过滤数组
SunshineLnsMinApp/lib/jb_background.png
Binary files differ
SunshineLnsMinApp/lib/jb_person.png
Binary files differ
SunshineLnsMinApp/lib/jb_phone.png
Binary files differ
SunshineLnsMinApp/pages/wjjb/wjjb.js
@@ -6,20 +6,20 @@
   * 页面的初始数据
   */
  data: {
    jb_background: './../../lib/jb_background.png',
    jb_person: './../../lib/jb_person.png',
    jb_phone: './../../lib/jb_phone.png',
    jb_background: app.globalData.imgUrl + '/image/jb_background.png',
    jb_person: app.globalData.imgUrl + '/image/jb_person.png',
    jb_phone: app.globalData.imgUrl + '/image/jb_phone.png',
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  onLoad: function(options) {
  },
  // 跳转
  linkFunction: function (event) {
  linkFunction: function(event) {
    var str = event.currentTarget.dataset['str'];
    wx.navigateTo({
      url: `../${str}/${str}`
SunshineLnsMinApp/pages/zhwj/zhwj.js
@@ -67,9 +67,10 @@
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  onLoad: function(options) {
    var that = this;
    wx.showLoading();
    that.getData();
    wx.request({
      url: app.globalData.url + '/api/article/publicMsgQuery',
      data: {
@@ -77,7 +78,7 @@
        size: 1000,
        flag: '未检动态',
      },
      success: function (res) {
      success: function(res) {
        wx.hideLoading();
        console.log('res', res);
        if (res.data.code == 0) {
@@ -101,8 +102,24 @@
    })
  },
  getData: function() {
    var that = this;
    wx.request({
      url: app.globalData.url + '/api/social/findImage',
      success: function(res) {
        wx.hideLoading();
        console.log('res', res);
        if (res.data.code == 0) {
          that.setData({
            topImage: res.data.data.length > 0 ? res.data.data[0].url : 'https://xnwj.gznsjc.gov.cn/nsjc-charge/image/juxing.png'
          })
        }
      }
    })
  },
  // 跳转
  linkFunction: function (event) {
  linkFunction: function(event) {
    var str = event.currentTarget.dataset['str'];
    var id = event.currentTarget.dataset['id'];
    wx.navigateTo({
SunshineLnsMinApp/pages/zhwj/zhwj.wxml
@@ -1,6 +1,6 @@
<!--pages/zhwj/zhwj.wxml-->
<view class="bg-img padding-tb-xl" style="background-image: url('https://xnwj.gznsjc.gov.cn/nsjc-charge/image/juxing.png');height: 414rpx;">
<view class="bg-img padding-tb-xl" style="background-image:url( '{{ topImage}}');height: 414rpx;">
</view>
<view class="zhwj-list">