| (function($, BMap, window) { | 
|     var sensorNames = { | 
|         "e1": ["PM2.5", "ug/m3"], | 
|         "e2": ["PM10", "ug/m3"], | 
|         "e3": ["颗粒物0.3", "PCS/0.1L"], | 
|         "e4": ["颗粒物2.5", "PCS/0.1L"], | 
|         "e5": ["甲醛", "mg/m3"], | 
|         "e6": ["湿度", "%"], | 
|         "e7": ["温度", "℃"], | 
|         "e8": ["氧气", "%"], | 
|         "e9": ["氯气", "mg/m3"], | 
|         "e10": ["一氧化碳", "mg/m3"], | 
|         "e11": ["二氧化硫", "ug/m3"], | 
|         "e12": ["光照", "Lux"], | 
|         "e13": ["噪音", "dB"], | 
|         "e14": ["氨气", "mg/m3"], | 
|         "e15": ["臭氧", "ug/m3"], | 
|         "e16": ["二氧化氮", "ug/m3"], | 
|         "e17": ["挥发有机气体", "PPB"], | 
|         "e18": ["风速", "m/s"], | 
|         "e19": ["二氧化碳", "mg/m3"] | 
|     } | 
|     var showSensorKeys=["e1","e2","e10","e11","e15","e16"]; | 
|     var moralMap = {}; | 
|     var baiduMap = null; | 
|     /* | 
|      * 根据mac地址获取version | 
|      */ | 
|     // moralMap.getVersion = function(mac){ | 
|     //     var version = null; | 
|     //     $.ajax({ | 
|     //         type:"get", | 
|     //         url:"getversion?mac="+mac, | 
|     //         async:false, | 
|     //         success:function(jsonData){ | 
|     //             if(jsonData!=null&&typeof jsonData=='object'){ | 
|     //                 version = jsonData['version']; | 
|     //             } | 
|     //         } | 
|     //     }); | 
|     //     return version; | 
|     // } | 
|     /* | 
|      * 百度地图初始化 | 
|      */ | 
|     moralMap.mapInit = function() { | 
|         var defaultParam = { | 
|             minZoom: 12, | 
|             maxZoom: 20 | 
|         }; | 
|         if(!!arguments[1]) { | 
|          $.extend(defaultParam,arguments[1]); | 
|         } | 
|         baiduMap = new BMap.Map("mapCanvas",defaultParam); // 创建Map实例,设置地图允许的最小/大级别 | 
|         var map = baiduMap; | 
|         var mapStyle = { | 
|             features: ["road", "building", "water", "land"], //隐藏地图上的poi | 
|             style: "normal" //设置地图风格为高端黑  | 
|         } | 
|         map.setMapStyle(mapStyle); | 
|         var showZoom = !!arguments[2] | 
|         && arguments[2] <=defaultParam.maxZoom | 
|         && arguments[2] >= defaultParam.minZoom?arguments[2]:12; | 
|         var address = arguments[0]; | 
|         var regoinNames = address.split(" "); | 
|         var cityName = regoinNames.length>1?regoinNames[1]:regoinNames[0]; | 
|         map.setCurrentCity(cityName); | 
|             // 将地址解析结果显示在地图上,并调整地图视野 | 
|             // 创建地址解析器实例 | 
|             var myGeo = new BMap.Geocoder(); | 
|             myGeo.getPoint(address, function(point){ | 
|                 if (point) { | 
|                     map.centerAndZoom(point, showZoom); | 
|                 }else{ | 
|                     alert("您选择地址没有解析到结果!"); | 
|                 } | 
|             }, cityName); | 
|         //增加导航控件 | 
|         map.enableScrollWheelZoom(true); | 
|         var navigation = new BMap.NavigationControl({ | 
|             anchor: BMAP_ANCHOR_BOTTOM_RIGHT, | 
|             type: BMAP_NAVIGATION_CONTROL_LARGE | 
|         }); | 
|         map.addControl(navigation); | 
|     } | 
|     moralMap.closeSearchBox = function() { | 
|         moralMap["_searchBoxKey"] = Math.random(); | 
|         $(".search_box").css("display", "none"); | 
|     } | 
|     //延时开启 | 
|     moralMap.openSearchBox = function() { | 
|         key = Math.random(); | 
|         moralMap["_searchBoxKey"] = key; | 
|         setTimeout(function() { | 
|             if(moralMap["_searchBoxKey"] == key) { | 
|                 $(".search_box").css("display", "block"); | 
|             } | 
|         }, 1500); | 
|     } | 
|     /* | 
|      * ----------------适配方法------------------------ | 
|      */ | 
|     moralMap.addEventListener = function(type, fn) { | 
|         baiduMap.addEventListener(type, function() { | 
|             if(type == "zoomstart") { | 
|                 moralMap._zoomStartHandle(); | 
|             } else if(type == "zoomend") { | 
|                 moralMap._zoomEndHandle(); | 
|             } | 
|             fn.apply(baiduMap, arguments); | 
|         }); | 
|     } | 
|     moralMap._zoomStartHandle = function() { | 
|         baiduMap.closeInfoWindow(); | 
|         moralMap.startZoom(baiduMap.getZoom()); | 
|     } | 
|     moralMap._zoomEndHandle = function() { | 
|         if($(".search_box").css("display") == "none") { | 
|             moralMap.openSearchBox(); | 
|         } | 
|         var endZoom = baiduMap.getZoom(); | 
|         var startZoom = moralMap.startZoom(); | 
|         //刷新key防止延迟加载 | 
|         //       var key = moralMap.lazyKeyer(); | 
|         var confine = moralMap.getZoomConfine(); | 
|         if(endZoom > startZoom) { | 
|             //放大超过边界 | 
|             if(endZoom >= confine && startZoom <= confine) { | 
|                 //清空控件 | 
|                 moralMap.layer("equipments"); | 
|                 moralMap.clearOverlays(); | 
|             } | 
|         } else { | 
|             //缩小超过边界 | 
|             if(endZoom != startZoom && startZoom >= confine && endZoom < confine) { | 
|                 //清空控件 | 
|                 moralMap.layer("monitorpoints"); | 
|                 moralMap.clearOverlays(); | 
|             } | 
|         } | 
|     } | 
|     moralMap.layer = (function() { | 
|         var _layers = ["equipments", "monitorpoints"]; | 
|         var _layer = "monitorpoints"; | 
|         return function(layer) { | 
|             if(layer == undefined) { | 
|                 return _layer; | 
|             } else { | 
|                 for(var i in _layers) { | 
|                     if(layer == _layers[i]) { | 
|                         _layer = layer; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     })(); | 
|     // 坐标适配器 | 
|     moralMap.Bounds = function (baiduBounds) { | 
|         if(!!baiduBounds){ | 
|             this.northeastLng = baiduBounds.xl.lng;//东北角经度,大一点 | 
|             this.northeastLat = baiduBounds.xl.lat;//东北角纬度,大一点 | 
|             this.southwestLng = baiduBounds.Ol.lng;//西南角经度坐标,小一点 | 
|             this.southwestLat = baiduBounds.Ol.lat;//西南角经度坐标,小一点 | 
|         }else{ | 
|             this.northeastLng = null;//东北角经度,大一点 | 
|             this.northeastLat = null;//东北角纬度,大一点 | 
|             this.southwestLng = null;//西南角经度坐标,小一点 | 
|             this.southwestLat = null;//西南角经度坐标,小一点 | 
|         } | 
|     } | 
|     moralMap.getBounds = function() { | 
|         return new moralMap.Bounds(baiduMap.getBounds()); //即时bounds; | 
|     } | 
|     moralMap.getMaxBounds = function() { | 
|         var key = "_" + moralMap.layer() + "_bounds"; | 
|         return this[key]; | 
|     } | 
|     moralMap.setMaxBounds = function(bs) { | 
|         var key = "_" + moralMap.layer() + "_bounds"; | 
|         var _bounds = !!this[key]?this[key]:new moralMap.Bounds(); //累积数据 | 
|         //记录最大边界 | 
|         _bounds.northeastLng = _bounds.northeastLng || bs.northeastLng; | 
|         _bounds.northeastLat = _bounds.northeastLat || bs.northeastLat; | 
|         _bounds.southwestLng = _bounds.southwestLng || bs.southwestLng; | 
|         _bounds.southwestLat = _bounds.southwestLat || bs.southwestLat; | 
|         _bounds.northeastLng = bs.northeastLng > _bounds.northeastLng ? bs.northeastLng: _bounds.northeastLng; | 
|         _bounds.northeastLat = bs.northeastLat > _bounds.northeastLat ? bs.northeastLat: _bounds.northeastLat; | 
|         _bounds.southwestLng = bs.southwestLng < _bounds.southwestLng ? bs.southwestLng: _bounds.southwestLng; | 
|         _bounds.southwestLat = bs.southwestLat < _bounds.southwestLat ? bs.southwestLat: _bounds.southwestLat; | 
|         this[key] = _bounds; | 
|     } | 
|     moralMap.isOverBounds = function() { | 
|         var isOver = false; | 
|         var _bounds = moralMap.getMaxBounds(); //累计数据 | 
|         var bs = moralMap.getBounds(); //实际数据 | 
|         if(!_bounds) { | 
|             isOver = true; | 
|             moralMap.setMaxBounds(bs); | 
|         } else { | 
|                 isOver = (bs.northeastLng > _bounds.northeastLng | 
|                         || bs.northeastLat > _bounds.northeastLat | 
|                         || bs.southwestLng < _bounds.southwestLng | 
|                         || bs.southwestLat < _bounds.southwestLat); | 
|               if(isOver){ | 
|                   moralMap.setMaxBounds(bs); | 
|               } | 
|         } | 
|   | 
|         return isOver; | 
|     } | 
|     moralMap.addOverlay = function(overlay) { | 
|         if(overlay.getMap() != baiduMap) { | 
|             // setTimeout(function(){ | 
|                 baiduMap.addOverlay.call(baiduMap, overlay); | 
|             // },10); | 
|             baiduMap.addOverlay.call(baiduMap, overlay); | 
|         } | 
|     } | 
|     moralMap.addOverlays = function(overlays) { | 
|         if(overlays != null && typeof overlays == 'object') { | 
|             for(var i in overlays) { | 
|                 moralMap.addOverlay(overlays[i]); | 
|             } | 
|         } | 
|   | 
|     } | 
|     moralMap.removeOverlay = function(overlay) { | 
|         // baiduMap.removeOverlay(overlay); | 
|         baiduMap.removeOverlay.apply(baiduMap, arguments); | 
|     } | 
|     moralMap.removeOverlays = function(overlays) { | 
|         if(overlays != null && typeof overlays == 'object') { | 
|             for (var i in overlays) { | 
|                 moralMap.removeOverlay(overlays[i]); | 
|             } | 
|         } | 
|     } | 
|     moralMap.getOverlays = function() { | 
|         var overLays = baiduMap.getOverlays.apply(baiduMap, arguments) | 
|         var moralMarker = []; | 
|         for(var i in overLays) { | 
|             if(overLays[i] instanceof BMap.Overlay) { | 
|                 moralMarker.push(overLays[i]); | 
|             } | 
|         } | 
|         return moralMarker; | 
|     } | 
|     moralMap.clearCloseInfoWindow = function () { | 
|         if(!!moralMap["_closeInfoWinTimer"]){ | 
|             clearTimeout(moralMap["_closeInfoWinTimer"]); | 
|             moralMap["_closeInfoWinTimer"] = null; | 
|         } | 
|     } | 
|     moralMap.openInfoWindow = function() { | 
|         moralMap.clearCloseInfoWindow(); | 
|         baiduMap.openInfoWindow.apply(baiduMap, arguments);; //开启信息窗口 | 
|     } | 
|     moralMap.closeInfoWindow = function() { | 
|         var timer = setTimeout(function () { | 
|             baiduMap.closeInfoWindow.apply(baiduMap, arguments); | 
|             moralMap["_closeInfoWinTimer"] = null; | 
|         },1200); | 
|         moralMap["_closeInfoWinTimer"] = timer; | 
|     } | 
|     moralMap.clearOverlays = function() { | 
|         baiduMap.clearOverlays(); | 
|     } | 
|     moralMap.startZoom = ( | 
|         function() { | 
|             var _zoom = null; | 
|             return function(z) { | 
|                 if(z == undefined) { | 
|                     return _zoom; | 
|                 } else { | 
|                     _zoom = z; | 
|                 } | 
|             } | 
|         } | 
|     )(); | 
|     moralMap.lazyKeyer = (function() { | 
|         var _key = null; | 
|         return function(key) { | 
|             if(key == undefined) { | 
|                 _key = Math.random(); | 
|                 return _key; | 
|             } else { | 
|                 return _key == key; | 
|             } | 
|         }; | 
|     })(); | 
|     moralMap.getUtf8Length = function(str) { | 
|         return str.replace(/[\u0391-\uFFE5]/g, "cc").length; | 
|     } | 
|     //弹窗处理 | 
|     moralMap.showPopupbox = function(id) { | 
|         setTimeout(function () { | 
|             $(id).css('display', 'block'); | 
|         },1); | 
|     } | 
|     moralMap.closePopupbox = function(id) { | 
|            $(id).css('display', 'none'); | 
|     } | 
|     moralMap.isPopupBoxShow = function(id) { | 
|         return $(id).css('display') == 'block'; | 
|     } | 
|     moralMap.onItermClick = function(index,select) { | 
|         var row = moralMap.getPopupEqu(index); | 
|         if(row['mac']==null){ | 
|             alert("mac项未配置,请联系管理员设置"); | 
|             return; | 
|         } | 
|         var equ = { | 
|             methodName : 'chart'== select ?'showChart':'showDeviceMonitor', | 
|             name: row['name'], | 
|             mac: (row['mac']).toLowerCase(), | 
|             longitude: row['longitude'], | 
|             latitude: row['latitude'], | 
|             monitorPointId: row['monitorPointId'], | 
|             version:row['deviceVersion']['version'] | 
|         }; | 
|         !!select?equ['monitorPointId'] = row["monitorPointId"]:null; | 
|         var equStr = JSON.stringify(equ); | 
|         if(window["console"]!=undefined){ | 
|             console.log(equStr); | 
|         } | 
|         if(!!window['external']&&!!window['external']['callWin']){ | 
|             window['external'].callWin(equStr); | 
|         }else{ | 
|                 if(!!select&&select==='chart'&&!!window['external']&&!!window['external']['showChartInfo']){ | 
|                     window['external'].showChartInfo(equStr); | 
|                 }else if(!!window['external']&&!!window['external']['showMonitorInfo']){ | 
|                     window['external'].showMonitorInfo(equStr); | 
|                 }else{ | 
|                     alert(equStr); | 
|                 } | 
|         } | 
|   | 
|     } | 
|     moralMap.setPopupEqus = function(arr) { | 
|         moralMap["_equs"] = arr; | 
|     } | 
|     moralMap.getPopupEquMacs = function() { | 
|         var macs = []; | 
|         if(moralMap["_equs"] != null) { | 
|             for(var i in moralMap["_equs"]) { | 
|                 var equ = moralMap["_equs"][i]; | 
|                 macs.push(equ["mac"]); | 
|             } | 
|         } | 
|         return macs; | 
|     } | 
|     moralMap.getPopupEqu = function(index) { | 
|         if(typeof moralMap["_equs"] === 'object') { | 
|             return moralMap["_equs"][index]; | 
|         } | 
|         throw "equs is empty"; | 
|     } | 
|     //{id:必填,url:,pagesize:} | 
|     //list加载 | 
|     moralMap.initListView = function(option) { | 
|         var listView = { | 
|             load: function(url) { | 
|                 if(url != undefined) { | 
|                     $.extend(option, { | 
|                         "url": url | 
|                     }); | 
|                 } | 
|                 option["pageNo"] = 1; | 
|                 _load(option); | 
|             } | 
|         }; | 
|         listView["option"] = option; | 
|         listView.refreshState = function(equstates) { | 
|             if(equstates != null) { | 
|                 for(var i in equstates) { | 
|                     var equstate = equstates[i]; | 
|                     var mac = equstate["mac"]; | 
|                     var state = equstate["state"]; | 
|                     var id_select = "#listview_state_" + mac; | 
|                     var stateObj = _getStateMap(state); | 
|                     var stateClass = stateObj["state"]; | 
|                     var stateName = stateObj["stateName"]; | 
|                     if(!$(id_select).hasClass(state)) { | 
|                         $(id_select).attr("class", stateClass); | 
|                         $(id_select).text(stateName); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|         function _getStateMap(s) { | 
|             var state; | 
|             var stateName; | 
|             switch(parseInt(s)) { | 
|                 case 0: | 
|                     state = 'state00'; | 
|                     stateName = '正常'; | 
|                     break; | 
|                 case 1: | 
|                     state = 'state01'; | 
|                     stateName = '轻度'; | 
|                     break; | 
|                 case 2: | 
|                     state = 'state02'; | 
|                     stateName = '中度'; | 
|                     break; | 
|                 case 3: | 
|                     state = 'state03'; | 
|                     stateName = '严重'; | 
|                     break; | 
|                 case 4: | 
|                     state = 'state04'; | 
|                     stateName = '维保'; | 
|                     break; | 
|             } | 
|             return { | 
|                 "state": state, | 
|                 "stateName": stateName | 
|             }; | 
|         } | 
|   | 
|         function _load(option) { | 
|             if(option['url'] != null && option['url'] != "") { | 
|                 var pageSize = option["pageSize"] || 20; | 
|                 var pageNo = option["pageNo"] || 1; | 
|                 var url = option['url']; | 
|                 url += "&pageNo=" + pageNo; | 
|                 url += "&pageSize=" + pageSize; | 
|                 console.log(url); | 
|                 $.ajax({ | 
|                     type: "get", | 
|                     cache: false, | 
|                     url: url, | 
|                     async: true, | 
|                     success: function(res) { | 
|                         if(res!=null&&res.total!=null) { | 
|                             var rows = res.data; | 
|                             if(rows==null||rows.length == 0) { | 
|                                 $(option['id']).html("没有查询到任何数据!"); | 
|                                 return; | 
|                             } | 
|                             //储存设备信息 | 
|                             moralMap.setPopupEqus(rows); | 
|                             var outHtml = "<ul class='list'>"; | 
|                             for(var i = 0; i < rows.length; i++) { | 
|                                 var e = rows[i]; | 
|                                 var state = 'state01'; | 
|                                 var stateName = ''; | 
|                                 var s = e['state'] == undefined ? 0 : e['state']; | 
|                                 var stateObj = _getStateMap(s); | 
|                                 state = stateObj["state"]; | 
|                                 stateName = stateObj["stateName"]; | 
|                                 var name = e['name']; | 
|                                 if(moralMap.getUtf8Length(name) > 22) { | 
|                                     var stop1 = 0; | 
|                                     for(var stop1_i = 0, len = 0; stop1_i < name.length; stop1_i++) { | 
|                                         len += ((name.charCodeAt(stop1_i) & 0xff00) != 0) ? 2 : 1; | 
|                                         stop1 = stop1_i; | 
|                                         if(len > 8) break; | 
|                                     } | 
|                                     var stop2 = 0; | 
|                                     for(var stop2_i = name.length - 1, len = 0; stop2_i >= 0; stop2_i--) { | 
|                                         len += ((name.charCodeAt(stop2_i) & 0xff00) != 0) ? 2 : 1; | 
|                                         stop2 = stop2_i; | 
|                                         if(len > 10) break; | 
|                                     } | 
|                                     name = name.substring(0, stop1) + "..." + name.substring(stop2, name.length); | 
|                                 } | 
|                                 var li = "<li id='listview_item_" + e['mac'] + "'><span class='list-chart-span' onclick=moralMap.onItermClick(\"" + i + "\",'chart')><img src='/img/chart.png'></span>" | 
|                                     +"<span id='listview_state_" + e['mac'] + "'class='" + state + "'>" + stateName + "</span>" + | 
|                                     "<div style='cursor: pointer;'  onclick=moralMap.onItermClick(\"" + i + "\")>" + name + "</div></li>"; | 
|                                 outHtml += li; | 
|                             } | 
|                             outHtml += "</ul>"; | 
|                             var total = res['total']; | 
|                             var totalPage = Math.ceil(total / pageSize); | 
|                             if(totalPage > 1) { | 
|                                 outHtml += "<div id='page' class='page_div'></div>"; | 
|                             } | 
|                             $(option['id']).html(outHtml); | 
|                             if(totalPage > 1) { | 
|                                 $("#page").paging({ | 
|                                     pageNo: pageNo, | 
|                                     totalPage: totalPage, | 
|                                     totalSize: total, | 
|                                     callback: function(num) { | 
|                                         //先清空内容 | 
|                                         $(option['id']).html(""); | 
|                                         option["pageNo"] = num; | 
|                                         _load(option); | 
|                                     } | 
|                                 }) | 
|                             } | 
|                         } | 
|   | 
|                     } | 
|                 }); | 
|             } | 
|         } | 
|         return listView; | 
|     } | 
|     moralMap.MoralMarker = function(option) { | 
|         var _option = option; | 
|         var _pointObj = new BMap.Point(_option['longitude'], _option['latitude']); | 
|         var _iconObj = _getMapIcon(_option["state"]); | 
|         this._point = _pointObj; | 
|         //获取MapIcon私有方法 | 
|         function _getMapIcon(state) { | 
|             state = state == null ? 0 : state; | 
|             var icon = _option["icon"]; | 
|             //var url = icon["stateIcons"][state]; | 
|             var url = icon["url"] + state + ".png"; | 
|             return new BMap.Icon(url, new BMap.Size(icon["width"], icon["height"]), { | 
|                 imageSize: new BMap.Size(icon["width"], icon["height"]) | 
|             }); | 
|         } | 
|         this.constructor.call(this, _pointObj, { | 
|             icon: _iconObj, | 
|             enableMassClear: true | 
|         }) | 
|         //事件注册 | 
|         var eventType = ['click']; | 
|         for(var index in eventType) { | 
|             var eventName = eventType[index]; | 
|             if(_option[eventName] != undefined && typeof _option[eventName] == "function") { | 
|                 var fn = _option[eventName]; | 
|                 this.addEventListener(eventName, function() { | 
|                     //将arguments转换成数组 | 
|                     var args = Array.prototype.slice.call(arguments); | 
|                     fn.apply(this, args); | 
|                 }); | 
|             } | 
|         } | 
|         return $.extend(this, { | 
|             refreshState: function(state) { | 
|                 //状态发生变化的时候刷新 图标 | 
|                 if(_option['state'] != state){ | 
|                     _option['state'] = state; | 
|                     var iconObj = _getMapIcon(state); | 
|                     this.setIcon(iconObj); | 
|                 } | 
|             }, | 
|             getOption: function() { | 
|                 return _option; | 
|             }, | 
|             setOption: function(option) { | 
|                 _option = option; | 
|             } | 
|         }) | 
|     } | 
|     //new BMap.Marker()这种写法IE7会报错,很奇葩 | 
|     moralMap.MoralMarker.prototype = new BMap.Marker(); | 
|     //监控点对象 包装Mark对象 | 
|     moralMap.Monitorpoint = function(option) { | 
|         if(monitorPointStates){ | 
|             for(var i in monitorPointStates){ | 
|                 var state = monitorPointStates[i]; | 
|                 if(state.id == option.id){ | 
|                     option.state = state.state; | 
|                 } | 
|             } | 
|         } | 
|         var icon = {}; | 
|         icon["stateIcons"] = ["/img/ico00.png", "/img/ico01.png", "/img/ico02.png", "/img/ico03.png", "/img/ico04.png"]; | 
|         icon["url"] = "/img/ico0"; | 
|         icon["width"] = 50; | 
|         icon["height"] = 50; | 
|         option["icon"] = icon; | 
|         var moralMarker = new moralMap.MoralMarker(option); | 
|         //        var mark =new BMap.Marker(pointObj,{icon:iconObj}); | 
|         //==================infoWindow-start============================ | 
|         var infoWindow = (function() { | 
|             //生成信息框 | 
|             var winOpts = { | 
|                 width: 110, // 信息窗口宽度 | 
|                 height: 80, // 信息窗口高度 | 
|                 title: getTitleOutHtml(), // 信息窗口标题 | 
|                 offset: new BMap.Size(-8,-5) //设置信息窗偏移 | 
|             } | 
|   | 
|             function getTitleOutHtml() { | 
|                 //title太长用引号... | 
|                 var title = (option["name"] == null) ? "" : option["name"]; | 
|                 if(title.length > 13) { | 
|                     title = title.slice(0, 13) + "..."; | 
|                 } | 
|                 var titleOutHtml = ""; | 
|                 titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'" | 
|                 titleOutHtml += "title='" + option["name"] + "'>"; | 
|                 titleOutHtml += title + "</p>"; | 
|                 return titleOutHtml; | 
|             } | 
|   | 
|             function getAdressOutHtml() { | 
|                 var address = (option["address"] == null) ? "" : option["address"]; | 
|                 if(address.length > 18) { | 
|                     address = address.slice(0, 18) + "..."; | 
|                 } | 
|                 var adressOutHtml = ""; | 
|                 adressOutHtml += "<div onmouseover='moralMap.clearCloseInfoWindow()'"; | 
|                 adressOutHtml +=    "onmouseout='moralMap.closeInfoWindow()'"; | 
|                 adressOutHtml    +=" style='font:12px arial,sans-serif;margin-top:12px'><table cellspacing='0' style='overflow:hidden;table-layout:fixed;width:100%;font:12px arial,sans-serif'>"; | 
|                 adressOutHtml += "<tbody><tr><td style='vertical-align:top;width:38px;white-space:nowrap;word-break:keep-all'>地址: </td><td style='line-height:16px'>"; | 
|                 adressOutHtml += address + " "; | 
|                 adressOutHtml += "</td></tr>"; | 
|                 //adressOutHtml += "<tr><td style='width:98%;padding-top:10px;'colspan='2'><a href='javascript:void(0);' style='display:block;position: relative;float: right;' onclick='moralMap.showPointMonitor("+option.id+")'>实时数据>></a></td></tr>"; | 
|                 adressOutHtml += "</tbody></table></div>"; | 
|                 return adressOutHtml; | 
|             } | 
|             return new BMap.InfoWindow(getAdressOutHtml(), winOpts); | 
|         })(); | 
|         if(moralMarker["infoWindow"] == undefined) { | 
|             moralMarker["infoWindow"] = infoWindow; | 
|         } | 
|         //弹窗打开和关闭 | 
|         moralMarker.addEventListener("mouseover", function() { | 
|             moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口 | 
|         }); | 
|         moralMarker.addEventListener("mouseout", function() { | 
|             moralMap.closeInfoWindow(); | 
|         }); | 
|         //==================infoWindow-end============================ | 
|         //储存监控点 | 
|         moralMap.putMpoint(option['id'], moralMarker); | 
|         return moralMarker; | 
|     } | 
|     //储存MonitorPoint对象 | 
|     moralMap.putMpoint = function(key, obj) { | 
|         if(moralMap['_mpoints'] == undefined) { | 
|             moralMap['_mpoints'] = {}; | 
|         } | 
|         moralMap['_mpoints'][key] = obj; | 
|     } | 
|     //key为监控点id | 
|     moralMap.getMpoint = function(key) { | 
|         if(typeof moralMap['_mpoints'] === 'object') { | 
|             return moralMap['_mpoints'][key]; | 
|         } | 
|     } | 
|     moralMap.getMpoints = function(key) { | 
|         return moralMap['_mpoints']; | 
|     } | 
|     moralMap.clearMpoints = function() { | 
|         if(moralMap['_mpoints'] != undefined) { | 
|             delete moralMap['_mpoints']; | 
|         } | 
|   | 
|     } | 
|     //设备以mac为key储存 | 
|     //监控点对象 包装MoralMark对象 | 
|     moralMap.Equipment = function(option) { | 
|         if(deviceStates){ | 
|             for(var i in deviceStates){ | 
|                 var state = deviceStates[i]; | 
|                 if(state.id == option.id){ | 
|                     option.state = state.state; | 
|                 } | 
|             } | 
|         } | 
|         var icon = {}; | 
|         icon["stateIcons"] = ["/img/ico_coo00.png", "/img/ico_coo01.png", "/img/ico_coo02.png", "/img/ico_coo03.png", "/img/ico_coo04.png"]; | 
|         icon["url"] = "/img/ico_coo0"; | 
|         icon["width"] = 50; | 
|         icon["height"] = 60; | 
|         option["icon"] = icon; | 
|         option["offline_width"] = 300; | 
|         option["offline_height"] = 80; | 
|         option["online_width"] = 355; | 
|         option["online_height"] = 385; | 
|         var moralMarker = new moralMap.MoralMarker(option); | 
|         //        var mark =new BMap.Marker(pointObj,{icon:iconObj}); | 
|         //==================infoWindow-start============================ | 
|   | 
|         var infoWindow = (function() { | 
|             //生成信息框 | 
|             var winOpts = { | 
|                 width: 110, // 信息窗口宽度 | 
|                 height: 80, // 信息窗口高度 | 
|                 title: getTitleOutHtml(), // 信息窗口标题 | 
|                 offset: new BMap.Size(-8,-5) //设置信息窗偏移 | 
|             } | 
|   | 
|             function getTitleOutHtml() { | 
|                 //title太长用引号... | 
|                 var title = (option["name"] == null) ? "" : option["name"]; | 
|                 if(title.length > 13) { | 
|                     title = title.slice(0, 13) + "..."; | 
|                 } | 
|                 var titleOutHtml = ""; | 
|                 titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'" | 
|                 titleOutHtml += "title='" + option["name"] + "'>"; | 
|                 titleOutHtml += title + "</p>"; | 
|                 return titleOutHtml; | 
|             } | 
|   | 
|             function getAdressOutHtml() { | 
|                 var address = (option["address"] == null) ? "" : option["address"]; | 
|                 if(address.length > 18) { | 
|                     address = address.slice(0, 18) + "..."; | 
|                 } | 
|                 var adressOutHtml = ""; | 
|                 adressOutHtml += "<div onmouseover='moralMap.clearCloseInfoWindow()'"; | 
|                 adressOutHtml +=    "onmouseout='moralMap.closeInfoWindow()'"; | 
|                 adressOutHtml    +=" style='font:12px arial,sans-serif;margin-top:12px'><table cellspacing='0' style='overflow:hidden;table-layout:fixed;width:100%;font:12px arial,sans-serif'>"; | 
|                 adressOutHtml += "<tbody><tr><td style='vertical-align:top;width:38px;white-space:nowrap;word-break:keep-all'>地址: </td><td style='line-height:16px'>"; | 
|                 adressOutHtml += address + " "; | 
|                 adressOutHtml += "</td></tr>"; | 
|                 adressOutHtml += "</tbody></table></div>"; | 
|                 //$("#searchParam").val(address); | 
|                 return adressOutHtml; | 
|             } | 
|             return new BMap.InfoWindow(getAdressOutHtml(), winOpts); | 
|         })(); | 
|   | 
|         /*var infoWindow = (function() { | 
|             //生成信息框 | 
|             var winOpts = { | 
|                 width: option["online_width"], // 信息窗口宽度 | 
|                 height:option["online_height"], // 信息窗口高度 | 
|                 title: getTitleOutHtml(), // 信息窗口标题 | 
|                 offset: new BMap.Size(-2, -10) //设置信息窗偏移 | 
|             } | 
|   | 
|             function getTitleOutHtml() { | 
|                 //title太长用引号... | 
|                 var title = (option["name"] == null) ? "" : option["name"]; | 
|                 if(title.length > 13) { | 
|                     title = title.slice(0, 13) + "..."; | 
|                 } | 
|                 var titleOutHtml = ""; | 
|                 titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'" | 
|                 titleOutHtml += "title='" + option["name"] + "'>"; | 
|                 titleOutHtml += title + "</p>"; | 
|                 return titleOutHtml; | 
|             } | 
|             return new BMap.InfoWindow("", winOpts); | 
|         })(); | 
|         var dataHandle = { | 
|             _getDataOutHtml: function(data) { | 
|                 if(data==null||data["state"]==4){ | 
|                     return "<br/><h3>设备正在维护升级,暂时没有数据!</h3>"; | 
|                 } | 
|                 var mac = data['mac']; | 
|                 var itme_mac_key = "item-" + mac + "-" + key; | 
|                 var dataOutHtml = "<div id='"+itme_mac_key+"' class='equ-data-box'><ul class='equ-data-list'>"; | 
|                 for(var key in data) { | 
|                     if($.inArray(key,showSensorKeys)!=-1) { | 
|                         var dataValue = data[key]; | 
|                         var name = sensorNames[key][0]; | 
|                         var unit = sensorNames[key][1]; | 
|                         var itme_state = dataHandle._getSensorState(data, key); | 
| //                        var itme_name_mac_key = "item-name-" + mac + "-" + key; | 
|                         var itme_data_mac_key = "item-data-" + mac + "-" + key; | 
|                         var item = "<li>"; | 
|                         item += "<p>"+name+"</p>"; | 
|                         item += "<span id='"+itme_data_mac_key+"' class='"+itme_state+"'>"+dataValue+"</span>"; | 
|                         item += "<em>"+unit+"</em>"; | 
|                         item += "</li>"; | 
|                         dataOutHtml += item; | 
|                     } | 
|   | 
|                 } | 
|                 dataOutHtml += "</ul></div>"; | 
|                 return dataOutHtml; | 
|             }, | 
|             _getSensorState: function(data, key) { | 
|                 var grade="grade"; | 
|                 var levels; | 
|                 if(data["level3"]!=null){ | 
|                     levels = data["level3"] instanceof Array ? data["level3"]:JSON.parse(data["level3"]); | 
|                       if($.inArray(key,levels)!=-1){ | 
|                            return grade+"03"; | 
|                       } | 
|                 }  | 
|                 if(data["level2"] !=null){ | 
|                     levels = data["level2"] instanceof Array ? data["level2"]:JSON.parse(data["level2"]); | 
|                    if($.inArray(key,levels)!=-1){ | 
|                        return grade+"02"; | 
|                    } | 
|                 }  | 
|                 if(data["level1"] !=null){ | 
|                     levels = data["level1"] instanceof Array ? data["level1"]:JSON.parse(data["level1"]); | 
|                        if($.inArray(key,levels)!=-1){ | 
|                            return grade+"01"; | 
|                        } | 
|                 } | 
|                 return grade+"00"; | 
|             } | 
|         };*/ | 
|   | 
|         if(moralMarker["infoWindow"] == undefined) { | 
|             moralMarker["infoWindow"] = infoWindow; | 
|         } | 
|         var  mouseOverHandle = option['mouseover']; | 
|         //弹窗打开和关闭 | 
|         /*moralMarker.addEventListener("mouseover", function() { | 
|             if(mouseOverHandle!=null&&mouseOverHandle instanceof  Function){ | 
|                 //将arguments转换成数组 | 
|                 var args = Array.prototype.slice.call(arguments); | 
|                 mouseOverHandle.apply(this, args); | 
|             } | 
|             moralMap.closeSearchBox(); | 
|             baiduMap.openInfoWindow(infoWindow, this._point); //开启信息窗口 | 
|             if(infoWindow.getContent() == "") { | 
|                 var data = this.getData(); | 
|                 var option = this.getOption(); | 
|                 if(data==null||data["state"]==4){ | 
|                     infoWindow.setHeight(option["offline_height"]); | 
|                     infoWindow.setWidth(option["offline_width"]); | 
|                 }else{ | 
|                     infoWindow.setHeight(option["online_height"]); | 
|                     infoWindow.setWidth(option["online_width"]); | 
|                 } | 
|                 infoWindow.setContent(dataHandle._getDataOutHtml(data)); | 
|                 infoWindow.redraw(); | 
|             } | 
|         }); | 
|         moralMarker.addEventListener("mouseout", function() { | 
|             baiduMap.closeInfoWindow(); | 
|             infoWindow.setContent(""); | 
|             moralMap.openSearchBox(); | 
|         });*/ | 
|          | 
|         moralMarker.addEventListener("mouseover", function() { | 
|             moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口 | 
|         }); | 
|         moralMarker.addEventListener("mouseout", function() { | 
|             moralMap.closeInfoWindow(); | 
|         }); | 
|   | 
|         //==================infoWindow-end============================ | 
|         //储存监控点 | 
|         moralMap.putEquipment(option['mac'], moralMarker); | 
|         var _super_refreshState = moralMarker.refreshState; | 
|         //$("#searchParam").val(option['mac']); | 
|         return $.extend(moralMarker, { | 
|             refreshState: function(data) { | 
|                 if(data != null && data!="") { | 
|                         var state = this.getOption()["state"]; | 
|                         this.setData(data); //更新数据 | 
|                         _super_refreshState.call(this, data["state"]); | 
|                         //如果当前窗体时打开的,刷新窗体里的数据 | 
|                                /*if(infoWindow.isOpen()) { | 
|                                     if(data["state"]==4){ | 
|                                         if(state!=4){ | 
|                                          infoWindow.setHeight(option["offline_height"]); | 
|                                          infoWindow.setWidth(option["offline_width"]); | 
|                                           infoWindow.setContent(dataHandle._getDataOutHtml(data)); | 
|                                           infoWindow.redraw(); | 
|                                         } | 
|                                         return; | 
|                                     } | 
|                                     var mac = data["mac"]; | 
|                                     var itme_mac_key = "#item-" + mac + "-" + key; | 
|                                     if($(itme_mac_key).length==0){ | 
|                                         infoWindow.setHeight(option["online_height"]); | 
|                                         infoWindow.setWidth(option["online_width"]); | 
|                                         infoWindow.setContent(dataHandle._getDataOutHtml(data)); | 
|                                         infoWindow.redraw(); | 
|                                     } | 
|                                     for(var key in data) { | 
|                                         if($.inArray(key,showSensorKeys)!=-1) { | 
|                                             var dataValue = data[key]; | 
|                                             var itme_state = dataHandle._getSensorState(data, key); | 
|                                             var itme_data_mac_key = "#item-data-" + mac + "-" + key; | 
|                                             if(!$(itme_data_mac_key).hasClass(itme_state)) { | 
|                                                 $(itme_data_mac_key).attr("class", itme_state); | 
|                                             } | 
|                                             $(itme_data_mac_key).text(dataValue); | 
|                                         } | 
|                                     } | 
|                             }*/ | 
|                 } | 
|             }, | 
|             setData:function(data){ | 
|                 var option = this.getOption(); | 
|                 option["data"] = data; | 
|                 this.setOption(option); | 
|             }, | 
|             getData:function(){ | 
|                 return this.getOption()["data"]; | 
|             } | 
|         }); | 
|     } | 
|     //储存MonitorPoint对象 | 
|     moralMap.putEquipment = function(key, obj) { | 
|         if(key!=null&&key!=""){ | 
|             key = String.prototype.toLowerCase.call(key); | 
|             if(moralMap['_equipments'] == undefined) { | 
|                 moralMap['_equipments'] = {}; | 
|             } | 
|             moralMap['_equipments'][key] = obj; | 
|         } | 
|     } | 
|     moralMap.getEquipment = function(key) { | 
|         if(key == null){ | 
|             return null; | 
|         } | 
|         key = String.prototype.toLowerCase.call(key); | 
|         if(typeof moralMap['_equipments'] === 'object') { | 
|             return moralMap['_equipments'][key]; | 
|         } | 
|     } | 
|     moralMap.getEquipments = function(key) { | 
|         return moralMap['_equipments']; | 
|     } | 
|     moralMap.clearEquipments = function() { | 
|         if(moralMap['_equipments'] != undefined) { | 
|             delete moralMap['_equipments']; | 
|         } | 
|     } | 
|     moralMap.getZoomConfine = function() { | 
|         return 18; | 
|     } | 
|     moralMap.getZoom = function() { | 
|         return baiduMap.getZoom(); | 
|     } | 
|     moralMap.getHorizonMarkers = function(isShow) { | 
|         var bounds = moralMap.getBounds(); | 
|         var oldMarkerList; | 
|         var isShow = (isShow) ? baiduMap : null; | 
|         if(moralMap.layer() == "equipments") { | 
|             oldMarkerList = moralMap.getEquipments(); | 
|         } else { | 
|             oldMarkerList = moralMap.getMpoints(); | 
|         } | 
|         var markers = []; | 
|         if(oldMarkerList != null && typeof oldMarkerList == "object") { | 
|             for(var i in oldMarkerList) { | 
|                 var oldmarker = oldMarkerList[i]; | 
|                 if(oldmarker != null && oldmarker instanceof BMap.Overlay && oldmarker.getMap() == isShow) { | 
|                     var option = oldmarker.getOption(); | 
|                     if(typeof option == 'object') { | 
|                         var longitude = option['longitude']; | 
|                         var latitude = option['latitude']; | 
|                         // 检索当前坐标范围内的组件 | 
|                         if(longitude < bounds.northeastLng && longitude > bounds.southwestLng && latitude < bounds.northeastLat && latitude > bounds.southwestLat) { | 
|                             markers.push(oldmarker); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         return markers; | 
|     } | 
|     moralMap.showPointMonitor = function (id) { | 
|         var mpointMarker = moralMap.getMpoint(id); | 
|         var mpoint = mpointMarker.getOption(); | 
|         if(!!mpoint){ | 
|             delete mpoint['organization']; | 
|             delete mpoint['icon']; | 
|             delete mpoint['click']; | 
|             if(window["console"]!=undefined){ | 
|                 console.log(mpoint); | 
|             } | 
|             $.get("getvers?mptid="+id,function (res) { | 
|                 if(!!res&&res.code==1){ | 
|                     mpoint['versions'] = res.data; | 
|                     mpoint['methodName'] = 'showPointMonitor'; | 
|                     var mpointStr = JSON.stringify(mpoint); | 
|                     if(!!window['external']&&window['external']['callWin']){ | 
|                         window['external'].callWin(mpointStr); | 
|                     }else{ | 
|                         alert(JSON.stringify(mpointStr)); | 
|                     } | 
|                 } | 
|             }) | 
|         }else{ | 
|             if(window["console"]!=undefined){ | 
|                 console.log("option of mpointMarker is null"); | 
|                 console.log(mpointMarker); | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
|     moralMap.callJS = function(condition) { | 
|         var new_point = new BMap.Point(condition.longitude, condition.latitude); | 
|         baiduMap.panTo(new_point); | 
|         baiduMap.setCenter(new_point); | 
|         baiduMap.setZoom(condition.type == "mpoint" ? 17 : 18); | 
|         var interval = setInterval(function(){ | 
|             var marker; | 
|             if (condition.type == "mpoint") { | 
|                 marker = moralMap.getMpoint(condition.id); | 
|             } else if (condition.type == "device") { | 
|                 marker = moralMap.getEquipment(condition.mac); | 
|             } | 
|             if(marker){ | 
|                 clearInterval(interval); | 
|                 moralMap.openInfoWindow(marker["infoWindow"], new_point); | 
|             } | 
|         }, 50); | 
|          | 
|     } | 
|   | 
|     var deviceStates ; | 
|     var monitorPointStates; | 
|     moralMap.refreshState = function(states) { | 
|         if (!monitorPointStates) { | 
|             monitorPointStates = states; | 
|             deviceStates = []; | 
|             for (var i in states) { | 
|                 var state = states[i]; | 
|                 for (var j in state.devices) { | 
|                     var device = state.devices[j]; | 
|                     deviceStates.push(device); | 
|                 } | 
|             } | 
|         } | 
|         for (var i in states) { | 
|             var state = states[i]; | 
|             var mpoint = moralMap.getMpoint(state.id); | 
|             if (mpoint) { | 
|                 mpoint.refreshState(state.state); | 
|             } | 
|             for (var j in state.devices) { | 
|                 var marker = state.devices[j]; | 
|                 var marker_mac = marker["mac"]; | 
|                 var equipment = moralMap.getEquipment(marker_mac); | 
|                 if (equipment) { | 
|                     equipment.refreshState(marker); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     window.moralMap = moralMap; | 
| })(jQuery, BMap, window); |