$(function() {
// var infoWindows=[];
var cd; // countdown
var this_marker; // clicked marker
var _conf;
var _lang;
$.fn.googleMap = function(params) {
params = $.extend( {
zoom : 10,
coords : [42.667884, 23.307406],
type : "ROADMAP",
debug : false,
langage : "english",
overviewMapControl: false,
streetViewControl: false,
scrollwheel: true,
mapTypeControl: true
}, params);
_conf=params.akumConf;
_lang=params.akumLang;
switch(params.type) {
case 'ROADMAP':
case 'SATELLITE':
case 'HYBRID':
case 'TERRAIN':
params.type = google.maps.MapTypeId[params.type];
break;
default:
params.type = google.maps.MapTypeId.ROADMAP;
break;
}
this.each(function() {
var map = new google.maps.Map(this, {
zoom: params.zoom,
center: new google.maps.LatLng(params.coords[0], params.coords[1]),
mapTypeId: params.type,
scrollwheel: params.scrollwheel,
streetViewControl: params.streetViewControl,
overviewMapControl: params.overviewMapControl,
mapTypeControl: params.mapTypeControl,
zoomControl: true,
fullscreenControl: false,
mapTypeControlOptions: {
position: google.maps.ControlPosition.BOTTOM_CENTER,
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
mapTypeIds: ["roadmap","satellite"]
}
});
// Polygons
var kmLayer = new google.maps.KmlLayer({
map: map,
preserveViewport: true,
url: "https://kam.acwa.app/kml/kameno3.kml"
});
// Polygons
var kmLayer = new google.maps.KmlLayer({
map: map,
preserveViewport: true,
url: "https://kam.acwa.app/kml/Burgas_municipality.kml"
});
$(this).data('googleMap', map);
$(this).data('googleLang', params.langage);
$(this).data('googleDebug', params.debug);
$(this).data('googleMarker', new Array());
var bounds=new google.maps.LatLngBounds();
$(this).data('googleBound', bounds);
});
return this;
}
$.fn.addPath = function(cords) {
var path = new google.maps.Polyline({
path: cords,
geodesic: true,
strokeColor: '#6699FF',
strokeOpacity: 0.7,
strokeWeight: 8
});
path.setMap($(this).data('googleMap'));
return path;
}
$.fn.removePath = function(path) {
path.setMap(null);
}
$.fn.addMarker = function(params) {
// trigger opened infoWindow again
// commented for random infoWindow opening on addMarker imarh
// google.maps.event.trigger(this_marker, 'click');
params = $.extend( {
coords : false,
address : false,
url : false,
id : false,
icon : false,
draggable : false,
label : "",
labelClass : "",
labelContent : "",
labelAnchor : "",
labelInBackground : "",
date : "",
last_date : "",
title : "",
info : "",
current_date : "",
types : "",
text : "",
animation : "",
success : function() {}
}, params);
this.each(function() {
$this = $(this);
bounds=$this.data('googleBound');
if(!$this.data('googleMap')) {
if($this.data('googleDebug'))
console.error("jQuery googleMap : Unable to add a marker where there is no map !");
return false;
}
if(!params.coords && !params.address) {
if($this.data('googleDebug'))
console.error("jQuery googleMap : Unable to add a marker if you don't tell us where !");
return false;
}
if(params.address && typeof params.address == "string") {
var geocodeAsync = function($that) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
address : params.address,
bounds : $that.data('googleBound'),
language : $that.data('googleLang')
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
$that.data('googleBound').extend(results[0].geometry.location);
if(params.icon) {
var marker = new MarkerWithLabel({
map: $this.data('googleMap'),
position: results[0].geometry.location,
// label: params.label, // commented for ressolving label remove and random multiply each imarh
labelClass: params.labelClass,
labelContent: params.labelContent,
labelAnchor: params.labelAnchor,
labelInBackground: params.labelInBackground,
date: params.date,
last_date: params.last_date,
title: params.title,
info: params.info,
types: params.types,
current_date : params.current_date,
icon: params.icon,
draggable: params.draggable,
animation: params.animation
});
} else {
var marker = new MarkerWithLabel({
map: $that.data('googleMap'),
position: results[0].geometry.location,
// label: params.label, // commented for ressolving label remove and random multiply each imarh
labelClass: params.labelClass,
labelContent: params.labelContent,
labelAnchor: params.labelAnchor,
labelInBackground: params.labelInBackground,
date: params.date,
last_date: params.last_date,
title: params.title,
info: params.info,
types: params.types,
current_date : params.current_date,
draggable: params.draggable,
animation: params.animation
});
}
if(params.draggable) {
google.maps.event.addListener(marker, 'dragend', function() {
var location = marker.getPosition();
var coords = {};
coords.lat = location.lat();
coords.lon = location.lng();
params.success(coords, $this);
});
}
if(params.title != "" && params.text != "" && !params.url) {
var infowindow = new google.maps.InfoWindow({
content: "
"+params.title+"
"+params.text
});
// infoWindows.push(infowindow);
var map = $that.data('googleMap');
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, marker);
});
} else if(params.url) {
google.maps.event.addListener(marker, 'click', function() {
document.location = params.url;
});
}
if(!params.id) {
$that.data('googleMarker').push(marker);
} else {
$that.data('googleMarker')[params.id] = marker;
}
if($that.data('googleMarker').length == 1) {
// $that.data('googleMap').setCenter(results[0].geometry.location);
// $that.data('googleMap').setZoom($that.data('googleMap').getZoom());
} else {
// $that.data('googleMap').fitBounds($that.data('googleBound'));
}
var coords = {};
coords.lat = results[0].geometry.location.lat();
coords.lon = results[0].geometry.location.lng();
params.success(coords, $this);
} else {
if($this.data('googleDebug'))
console.error("jQuery googleMap : Unable to find the place asked for the marker ("+status+")");
}
});
}($this);
} else {
$this.data('googleBound').extend(new google.maps.LatLng(params.coords[0], params.coords[1]));
var loc=new google.maps.LatLng(params.coords[0], params.coords[1]);
bounds.extend(loc);
if(params.icon) {
var marker = new MarkerWithLabel({
map: $this.data('googleMap'),
position: loc,
// label: params.label, // commented for ressolving label remove and random multiply each imarh
labelClass: params.labelClass,
labelContent: params.labelContent,
labelAnchor: params.labelAnchor,
labelInBackground: params.labelInBackground,
date: params.date,
last_date: params.last_date,
title: params.title,
info: params.info,
types: params.types,
current_date : params.current_date,
icon: params.icon,
draggable: params.draggable,
animation: params.animation
});
} else {
var marker = new MarkerWithLabel({
map: $this.data('googleMap'),
position: loc,
// label: params.label, // commented for ressolving label remove and random multiply each imarh
labelClass: params.labelClass,
labelContent: params.labelContent,
labelAnchor: params.labelAnchor,
labelInBackground: params.labelInBackground,
date: params.date,
last_date: params.last_date,
title: params.title,
info: params.info,
types: params.types,
current_date : params.current_date,
draggable: params.draggable,
animation: params.animation
});
}
if(params.title != "" && params.text != "" && !params.url) {
var infowindow = new google.maps.InfoWindow({
content: ""+params.title+"
"+params.text
});
// infoWindows.push(infowindow);
var map = $this.data('googleMap');
var myZIndex=parseInt(google.maps.Marker.MAX_ZINDEX);
google.maps.event.addListener(marker, 'click', function(t) {
if (!infowindow.getMap()) {
myZIndex=myZIndex + 1;
marker.setZIndex(parseInt(myZIndex));
// $.each(infoWindows, function(k,v) {
// infoWindows[k].close();
// });
$.ajax({
url: "/api/v2/deviceGetInfoWidget",
method: "POST",
data: JSON.stringify({
"devID" : params.title,
"info" : params.info,
"date" : params.current_date
}),
beforeSend: function() {
infowindow.open(map, marker);
infowindow.setContent(''+params.title+'
');
},
success: function(res) {
var data=res.data.devInfo;
this_marker=marker;
var content=''+params.title+'
';
/*
var blink='';
if (data.next_refresh<0) {
blink="blink";
}
content+=''+toHHMMSS(data.next_refresh)+'
';
*/
content+='';
var mapAlarmBgColors={
1:"color: #eea800;",
2:"color: #ed730f;",
3:"color: #dc1e1e;"
}
// map
if (data.params!=null) {
var all_params='';
if (typeof data.alarms==='object' && data.alarms!==null) {
var hasAlarms=true;
var firstAlarmColor='';
var firstAlarmColorID=data.alarms[Object.keys(data.params)[0]];
if (data.alarms.hasOwnProperty(Object.keys(data.params)[0])) {
firstAlarmColor=mapAlarmBgColors[firstAlarmColorID];
var firstBlink="blink";
}
all_params+=''+Object.keys(data.params)[0]+' '+Object.values(data.params)[0]+'
';
}
// graph only first param
var graphParams=[];
graphParams.push(Object.keys(data.params)[0]);
content+='';
var img_url='';
var imgs=' ';
if (data.imgIDs.length) {
$.each(data.imgIDs, function(k,v) {
img_url='imgs/'+params.title+'/'+v;
thumb_url='imgs/'+params.title+'/thumb/'+v;
var lastIMG='';
imgs+=''+lastIMG+'';
});
content+='';
}
content+='';
var graphParamReports=[];
var MinMaxXAxis=[];
var seriesAxis=[];
$.ajax({
url: "/api/v2/reportsGetDataWidget",
method: "POST",
data: JSON.stringify({
"devices" : [params.title],
"params" : graphParams,
}),
beforeSend: function() {
$('.preloader').removeClass('hide');
},
success: function(res) {
var i=0;
$.each(graphParams, function(k,v) {
$.each(res.data.reports, function(k1,v1) {
if (k1.indexOf(v+'[')!=-1) {
graphParamReports.push(res.data.reports[k1]);
if (i==0) {
var p='';
} else {
var p=i+1;
}
i++;
seriesAxis.push({ yaxis: "y"+p+"axis", label: v });
if (i>=9) {
return false;
}
}
})
});
if (graphParamReports.length>0) {
var merged = [].concat.apply([], graphParamReports);
$.each(merged, function(k,v) {
MinMaxXAxis.push(v[0]);
});
var minXaxis=Math.min(...MinMaxXAxis);
var maxXaxis=Math.max(...MinMaxXAxis);
var plot_options={
grid : {
drawGridlines: false,
background: 'transparent',
borderWidth: 0,
shadow: false
},
axes : {
xaxis: {
showTicks : false,
renderer: $.jqplot.DateAxisRenderer,
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
min: minXaxis,
max: maxXaxis
}
},
seriesDefaults: {
shadow: false,
lineWidth: 1,
showMarker: false,
fillToZero: true
},
axesDefaults: {
showTicks : true,
autoscale: true,
tickOptions: {
fontSize: '8px'
},
// useSeriesColor: true,
rendererOptions: {
alignTicks: false
}
},
series: seriesAxis
}
$('#'+params.id+'akumPlot').css('height','80px');
var plot=$.jqplot(params.id+'akumPlot', graphParamReports, plot_options);
}
}
});
}
if (data.last) {
content+=' '+data.last+'
';
}
infowindow.setContent(content);
$("a.fancybox").fancybox({
buttons: [
// "zoom",
// "share",
// "slideShow",
// "fullScreen",
// "download",
// "thumbs",
"close"
],
protect: true,
wheel: "auto"
});
/*
clearInterval(cd);
cd=setInterval(function() {
data.next_refresh=data.next_refresh-1;
$('.infow_countdown').text(toHHMMSS(data.next_refresh));
if (data.next_refresh<=10) {
$('.infow_countdown').addClass('blink');
} else {
$('.infow_countdown').removeClass('blink');
}
}, 1000);
*/
}
});
} else {
infowindow.close();
}
});
} else if(params.url) {
google.maps.event.addListener(marker, 'click', function() {
document.location = params.url;
});
}
if(params.draggable) {
google.maps.event.addListener(marker, 'dragend', function() {
var location = marker.getPosition();
var coords = {};
coords.lat = location.lat();
coords.lon = location.lng();
params.success(coords, $this);
});
}
if(!params.id) {
$this.data('googleMarker').push(marker);
} else {
$this.data('googleMarker')[params.id] = marker;
}
if($this.data('googleMarker').length == 1) {
$this.data('googleMap').setCenter(new google.maps.LatLng(params.coords[0], params.coords[1]));
$this.data('googleMap').setZoom($this.data('googleMap').getZoom());
} else {
if (params.init) {
$this.data('googleMap').fitBounds($this.data('googleBound'));
$this.data('googleMap').setZoom($this.data('googleMap').getZoom());
}
}
// map.panToBounds(bounds);
params.success({
lat: params.coords[0],
lon: params.coords[1]
}, $this);
}
});
return this;
}
$.fn.removeMarker = function(id) {
this.each(function() {
var $this = $(this);
if(!$this.data('googleMap')) {
if($this.data('googleDebug'))
console.log("jQuery googleMap : Unable to delete a marker where there is no map !");
return false;
}
var $markers = $this.data('googleMarker');
if(typeof $markers[id] != 'undefined') {
var label_text=$markers[id].labelContent;
var devID=label_text.substring(0, label_text.indexOf(' '));
$('.pinger_labels.round.'+devID).remove();
// $('.pinger_labels.round:contains('+label_text+')').remove();
$markers[id].setMap(null);
if($this.data('googleDebug'))
console.log('jQuery googleMap : marker deleted');
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < Object.keys($markers).length; i++) {
var marker=Object.values($markers)[i];
var geoCode = new google.maps.LatLng(marker.position.lat(), marker.position.lng());
bounds.extend(geoCode);
}
// $this.data('googleMap').fitBounds(bounds);
// $this.data('googleMap').panToBounds(bounds);
return true;
} else {
if($this.data('googleDebug'))
console.error("jQuery googleMap : Unable to delete a marker if it not exists !");
return false;
}
});
}
$.fn.addWay = function(params) {
params = $.extend( {
start : false,
end : false,
step : [],
route : false,
langage : 'english'
}, params);
var direction = new google.maps.DirectionsService({
region: "fr"
});
var way = new google.maps.DirectionsRenderer({
draggable: true,
map: $(this).data('googleMap'),
panel: document.getElementById(params.route),
provideTripAlternatives: true,
suppressMarkers: true,
// suppressInfoWindows: true,
});
document.getElementById.innerHTML = "";
var waypoints = [];
for(var i in params.step) {
var step;
if(typeof params.step[i] == "object") {
step = new google.maps.LatLng(params.step[i][0], params.step[i][1]);
} else {
step = params.step[i];
}
waypoints.push({
location: step,
stopover: true
});
}
if(typeof params.end != "object") {
var geocodeAsync = function($that) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
address : params.end,
bounds : $that.data('googleBound'),
language : params.langage
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var request = {
origin: params.start,
destination: results[0].geometry.location,
travelMode: google.maps.DirectionsTravelMode.DRIVING,
region: "fr",
waypoints: waypoints
};
direction.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
way.setDirections(response);
} else {
if($that.data('googleDebug'))
console.error("jQuery googleMap : Unable to find the place asked for the route ("+response+")");
}
});
} else {
if($that.data('googleDebug'))
console.error("jQuery googleMap : Address not found");
}
});
}($(this));
} else {
var request = {
// origin: params.start,
origin: new google.maps.LatLng(params.start[0], params.start[1]),
destination: new google.maps.LatLng(params.end[0], params.end[1]),
// travelMode: google.maps.DirectionsTravelMode.DRIVING,
travelMode: google.maps.DirectionsTravelMode.WALKING,
region: "fr",
waypoints: waypoints
};
direction.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
way.setDirections(response);
} else {
if($(this).data('googleDebug'))
console.error("jQuery googleMap : Address not found");
}
});
}
return this;
}
});