3 files deleted
22 files added
8 files modified
New file |
| | |
| | | @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;} |
New file |
| | |
| | | /* |
| | | 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;} |
New file |
| | |
| | | |
| | | |
| | | /** |
| | | * @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; |
| | | } |
New file |
| | |
| | | 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: " > ", |
| | | offsetLeft: 0,//(60-buttonWidth)/2, |
| | | offsetTop: offsetTop, |
| | | inputWidth: buttonWidth |
| | | }, { |
| | | type: "button", |
| | | name: "remove", |
| | | value: " < ", |
| | | 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=''/> "+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"); |
| | | } |
| | | } |
New file |
| | |
| | | /** |
| | | * ----------------------------------------------------------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(" <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(); //表单提交。 |
| | | } |
New file |
| | |
| | | //全局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("请安装指纹驱动或启动该服务!"); |
| | | } |
| | | }); |
| | | } |
New file |
| | |
| | | <!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> |
New file |
| | |
| | | <!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> |
| | |
| | | iconCheck: activeCheck, |
| | | path: '/snapshot' |
| | | }, { |
| | | id: 'criminalExecution', |
| | | name: '刑执监督管理', |
| | | icon: infoManage, |
| | | iconCheck: infoCheck, |
| | | path: '/criminalExecution' |
| | | },{ |
| | | id: 'crimeCrackdown', |
| | | name: '扫黑除恶', |
| | | icon: active, |
| | |
| | | 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/'; |
| | |
| | | import QuestionPersonDetail from './page/QuestionPersonDetail'; |
| | | //顶部图片设置 |
| | | import TopImage from './page/TopImage'; |
| | | // 刑执监督管理 |
| | | import CriminalExecution from './page/CriminalExecution'; |
| | | |
| | | |
| | | import NoInspectionReportList from './page/NoInspectionReportList'; |
| | |
| | | <Route path='/entry/examineEdit/:id' component={ExamineEdit} /> |
| | | <Route path='/topImage' component={TopImage} /> |
| | | |
| | | {/* 刑执监督管理 */} |
| | | <Route path='/criminalExecution' component={CriminalExecution} /> |
| | | |
| | | |
| | | {/* 问卷管理部分 */} |
| | | <Route path='/questionnaire/newlyList' component={NewlyList} /> |
New file |
| | |
| | | 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> |
| | | ) |
| | | } |
| | | } |
| | |
| | | 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) |
| | | } |
| | |
| | | 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' |
| | | }, |
| | | // 过滤数组 |
| | |
| | | * 页面的初始数据 |
| | | */ |
| | | 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}` |
| | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad: function (options) { |
| | | onLoad: function(options) { |
| | | var that = this; |
| | | wx.showLoading(); |
| | | that.getData(); |
| | | wx.request({ |
| | | url: app.globalData.url + '/api/article/publicMsgQuery', |
| | | data: { |
| | |
| | | size: 1000, |
| | | flag: '未检动态', |
| | | }, |
| | | success: function (res) { |
| | | success: function(res) { |
| | | wx.hideLoading(); |
| | | console.log('res', res); |
| | | if (res.data.code == 0) { |
| | |
| | | }) |
| | | }, |
| | | |
| | | 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({ |
| | |
| | | <!--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"> |