// EBubble.js 
//
//   This Javascript is provided by Mike Williams
//   Community Church Javascript Team
//   http://www.bisphamchurch.org.uk/   
//   http://econym.org.uk/gmap/
//
//   This work is licenced under a Creative Commons Licence
//   http://creativecommons.org/licenses/by/2.0/uk/
//
// Version 0.0  13/07/2007 Initial version
// Version 0.1  14/07/2007 Bugfix: Was failing to apply the position offset.
// Version 0.2  30/07/2007 Bugfix: Wasn't clearingout the old contents.
// Version 0.3  21/09/2007 Added noCloseOnClick parameter
// version 0.4  25/12/2007 Bugfix: Problem with offset
// version 0.5  13/01/2009 Bugfix: Problem with offset (thanks to Joerg Wagner)

      function EBubble(map,image,size,insize,inset,anchor,noCloseOnClick,noCloseOnDrag) {
        // parameters
        var that=this;
        this.map = map;
        this.image=image;
        this.size=size;
        this.insize=insize;
        this.inset=inset;
        this.anchor=anchor;
        this.noCloseOnClick=noCloseOnClick;
		this.noCloseOnDrag=noCloseOnDrag;
        // internal variables
        this.visible = false;
        // browser - specific variables
        this.ie = false;
        var agent = navigator.userAgent.toLowerCase();
        if ((agent.indexOf("msie") > -1) && (agent.indexOf("opera") < 1)){ this.ie = true} else {this.ie = false}

        this.div1 = document.createElement("div");
        this.div1.style.position = "absolute";
        this.div1.style.display="none";
        document.body.appendChild(this.div1);


        if (this.ie && this.image.indexOf(".png")>-1) {
          var loader = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.image+"', sizingMethod='scale');";
          this.div1.innerHTML = '<div style="height:' +this.size.height+ 'px; width:'+this.size.width+'px; ' +loader+ '" ></div>';
        } else {
          this.div1.innerHTML = '<img src="' + this.image + '" width="' + this.size.width +'" height="' + this.size.height +'">';
        }
        // === Close the bubble if the map moves ===
        GEvent.addListener(map, "dragstart", function() {
          if (!that.noCloseOnDrag) that.hide();
        } );
        GEvent.addListener(map, "movestart", function() {
          if (!that.noCloseOnDrag) that.hide();
        } );
		
        // === Listen for clicks and mousedowns ===
        GEvent.addDomListener(this.div1,"click", function() {
          if (!that.noCloseOnClick) that.hide();
          GEvent.trigger(that,"click");
        });
        GEvent.addDomListener(this.div1,"mousedown", function() {
          if (!that.noCloseOnClick) that.hide();
          GEvent.trigger(that,"click");
        });
		

        this.div2 = document.createElement("div");
        this.div1.appendChild(this.div2);
        this.div2.style.position = "absolute";
        this.div2.style.left = this.inset.x + "px"; 
        this.div2.style.top = this.inset.y + "px";
        this.div2.style.width = this.insize.width + "px";
        this.div2.style.height = this.insize.height + "px";

//botonet

		this.inset2=new GPoint(220,7);
		this.image2='laX.png';
		this.size2=new GSize(8,8);
		
        this.div3 = document.createElement("div");
        this.div1.appendChild(this.div3);
        this.div3.style.position = "absolute";
        this.div3.style.left = this.inset2.x + "px"; 
        this.div3.style.top = this.inset2.y + "px";
		this.div3.style.cursor = "pointer";
		
		this.div3.style.display="none";
		

        if (this.ie && this.image2.indexOf(".png")>-1) {
          var loader2 = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.image2+"', sizingMethod='scale');";
          this.div3.innerHTML = '<div style="height:' +this.size2.height+ 'px; width:'+this.size2.width+'px; ' +loader2+ '" ></div>';
        } else {
          this.div3.innerHTML = '<img src="' + this.image2 + '" width="' + this.size2.width +'" height="' + this.size2.height +'">';
        }
		
        // === Listen for clicks and mousedowns ===
        GEvent.addDomListener(this.div3,"click", function() {
          that.hide();
		  map.setCenter(new GLatLng(41.75,1.58), 7);
          GEvent.trigger(that,"click");
        });
        GEvent.addDomListener(this.div3,"mousedown", function() {
          that.hide();
		  map.setCenter(new GLatLng(41.75,1.58), 7);
          GEvent.trigger(that,"click");
        });
		

      } 
      

      EBubble.prototype.openOnMap = function(point, html, offset) {
        this.offset = offset||new GPoint(0,0);
        this.point = point;


        //div2.style.backgroundColor = "#0000ff"; 
        this.div2.innerHTML = html;

        // pixel relative to map world
        var p = this.map.fromLatLngToDivPixel(point);

        // map world relative to map container
        var dragObject = this.map.getPane(G_MAP_MAP_PANE).parentNode;
        var x = p.x + parseInt(dragObject.style.left);
        var y = p.y + parseInt(dragObject.style.top);

        // map container relative to the page
        var container = this.map.getContainer();
        while(container != null){
          y += container.offsetTop;
          x += container.offsetLeft;
          container = container.offsetParent
        }
        
        // offset by the requested anchor position
        y -= this.anchor.y;
        x -= this.anchor.x;

        // offset by the specified offset position
        y -= this.offset.y;
        x -= this.offset.x;


        // Apply those values 
        this.div1.style.left = x+"px";
        this.div1.style.top = y+"px";
		
        this.div3.style.left = this.inset2.x+"px";
        this.div3.style.top = this.inset2.y+"px";
       
        // make it visible
        this.visible = true;
        this.show();
      }
      
      EBubble.prototype.openOnMarker = function(marker,html) {
        var vx = marker.getIcon().iconAnchor.x - marker.getIcon().infoWindowAnchor.x;
        var vy = marker.getIcon().iconAnchor.y - marker.getIcon().infoWindowAnchor.y;
        this.openOnMap(marker.getPoint(), html, new GPoint(vx,vy));
      }
      

      EBubble.prototype.show = function() {
        this.div1.style.display="";
        this.div2.style.display="";
		this.div3.style.display="";
        this.visible = true;
      }
      
      EBubble.prototype.hide = function() {
        this.div1.style.display="none";
		this.div3.style.display="none";
        this.div2.style.display="none";
        this.visible = false;
      }

      EBubble.prototype.setCloseOnDrag = function(noCloseOnDrag) {
        this.noCloseOnDrag=noCloseOnDrag;
      }


      EBubble.prototype.isHidden = function() {
        return !this.visible;
      }
      
      EBubble.prototype.supportsHide = function() {
        return true;
      }
      
        