// Version 0.2 the .copy() parameters were wrong
// version 1.0 added .show() .hide() .setContents() .setPoint() .setOpacity() .overlap
// version 1.1 Works with GMarkerManager in v2.67, v2.68, v2.69, v2.70 and v2.71
// version 1.2 Works with GMarkerManager in v2.72, v2.73, v2.74 and v2.75
// version 1.3 add .isHidden()
// version 1.4 permit .hide and .show to be used before addOverlay()
// version 1.5 fix positioning bug while label is hidden
// version 1.6 added .supportsHide()
// version 1.7 fix .supportsHide()
function ELabel(point, html, classname, pixelOffset, percentOpacity, overlap, color) {
// Mandatory parameters
this.point = point;
this.html = html;
// Optional parameters
this.classname = classname ? classname : 'label_region';
this.color = color ? color : {}; //color:'#FFFFFF',fill_color:'#FF0000',line_color:'#FF0000'};
this.pixelOffset = pixelOffset||new GSize(0,0);
if (percentOpacity) {
if(percentOpacity<0){percentOpacity=0;}
if(percentOpacity>100){percentOpacity=100;}
}
this.percentOpacity = percentOpacity;
this.overlap=overlap||false;
this.hidden = false;
}
ELabel.prototype = new GOverlay();
ELabel.prototype.initialize = function(map) {
var me = this;
var div = document.createElement("div");
div.style.position = "absolute";
if(this.classname) div.className = this.classname;
//div.innerHTML = '
' + this.html + '
' ;
div.innerHTML = this.html;
if(this.color.color) div.style.color = this.color.color;
if(this.color.fill_color) div.style.backgroundColor = this.color.fill_color;
if(this.color.line_color) {
div.style.borderColor = this.color.line_color;
div.style.borderWidth = '1px';
div.style.borderStyle = 'solid';
}
map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div);
this.map_ = map;
this.div_ = div;
if (this.percentOpacity) {
//if(typeof(div.style.filter)=='string'){div.style.filter='alpha(opacity:'+this.percentOpacity+')';}
if(typeof(div.style.KHTMLOpacity)=='string'){div.style.KHTMLOpacity=this.percentOpacity/100;}
if(typeof(div.style.MozOpacity)=='string'){div.style.MozOpacity=this.percentOpacity/100;}
if(typeof(div.style.opacity)=='string'){div.style.opacity=this.percentOpacity/100;}
}
if (this.overlap) {
var z = GOverlay.getZIndex(this.point.lat());
this.div_.style.zIndex = z;
}
if (this.hidden) {
this.hide();
}
GEvent.addDomListener(div, "click", function(event) {
GEvent.trigger(me, "click");
});
GEvent.addDomListener(div, "mouseover", function() {
me.bringToFront_();
});
GEvent.addDomListener(div, "mouseout", function() {
me.sendBack_();
});
}
ELabel.prototype.remove = function() {
this.div_.parentNode.removeChild(this.div_);
}
ELabel.prototype.copy = function() {
return new ELabel(this.point, this.html, this.classname, this.pixelOffset, this.percentOpacity, this.overlap);
}
ELabel.prototype.redraw = function(force) {
var p = this.map_.fromLatLngToDivPixel(this.point);
var h = parseInt(this.div_.clientHeight);
this.div_.style.left = (p.x + this.pixelOffset.width) + "px";
this.div_.style.top = (p.y +this.pixelOffset.height - h) + "px";
}
ELabel.prototype.show = function() {
if (this.div_) {
this.div_.style.display="";
this.redraw();
}
this.hidden = false;
}
ELabel.prototype.hide = function() {
if (this.div_) {
this.div_.style.display="none";
}
this.hidden = true;
}
ELabel.prototype.isHidden = function() {
return this.hidden;
}
ELabel.prototype.supportsHide = function() {
return true;
}
ELabel.prototype.setContents = function(html) {
this.html = html;
this.div_.innerHTML = '' + this.html + '
' ;
this.redraw(true);
}
ELabel.prototype.getPoint = function(point) {
return this.point;
}
ELabel.prototype.setPoint = function(point) {
this.point = point;
if (this.overlap) {
var z = GOverlay.getZIndex(this.point.lat());
this.div_.style.zIndex = z;
}
this.redraw(true);
}
ELabel.prototype.setColor = function(color) {
if(color.color) this.div_.style.color = color.color;
if(color.fill_color) this.div_.style.backgroundColor = color.fill_color;
//if(color.line_color) this.div_.style.borderColor = color.line_color;
}
ELabel.prototype.setOpacity = function(percentOpacity) {
if (percentOpacity) {
if(percentOpacity<0){percentOpacity=0;}
if(percentOpacity>100){percentOpacity=100;}
}
this.percentOpacity = percentOpacity;
if (this.percentOpacity) {
//if(typeof(this.div_.style.filter)=='string'){this.div_.style.filter='alpha(opacity:'+this.percentOpacity+')';}
if(typeof(this.div_.style.KHTMLOpacity)=='string'){this.div_.style.KHTMLOpacity=this.percentOpacity/100;}
if(typeof(this.div_.style.MozOpacity)=='string'){this.div_.style.MozOpacity=this.percentOpacity/100;}
if(typeof(this.div_.style.opacity)=='string'){this.div_.style.opacity=this.percentOpacity/100;}
}
}
ELabel.prototype.bringToFront_ = function() {
var z = GOverlay.getZIndex(this.point.lat());
this.div_.style.zIndex = 1e9;
}
ELabel.prototype.sendBack_ = function() {
var z = GOverlay.getZIndex(this.point.lat());
this.div_.style.zIndex = z;
}