// EWindow.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  Initial version 
// Version 0.1  10/10/2006 Added E_STYLE_7 
// Version 0.2  17/05/2007 Added .isHidden() and .supportsHide()
// Version 0.3  14/09/2007 added .zindex()
// Version 0.4  09/02/2008 moved the window to the G_MAP_FLOAT_PANE
// Version 0.5  16/10/2008 updated the fudge factors

var GetPoint;

      function EStyle(stemImage, stemSize, boxClass, boxOffset) {
        this.stemImage = stemImage;
        this.stemSize = stemSize;
        this.boxClass = boxClass;
        this.boxOffset = boxOffset;
        //this.border = border;
        
        // Known fudge factors are:
        // Firefox 1.0, 1.5, 2.0      5, -1
        // Firefox 3.0                4, -1
        // IE 6.0                     0, -1
        // Opera 8.54                 3, -1
        // Opera 9                    4, -1
        // Netscape (7.2, 8.0)        5, -1
        // Safari                     5, -1
        // Chrome                     5, -1        
        
        var agent = navigator.userAgent.toLowerCase();
        
        var fudge = 5;  // assume Netscape if no match found
       
        if (agent.indexOf("opera/9") > -1) {
          fudge = 4;
        }   
        else if (agent.indexOf("opera") > -1) {
          fudge = 3;
        }   
        else if (agent.indexOf("firefox/3") > -1) {
          fudge = 4;
        }   
        else if (agent.indexOf("firefox") > -1) {
          fudge = 5;
        }   
        else if (agent.indexOf("chrome") > -1) {
          fudge = 5;
        }   
        else if (agent.indexOf("safari") > -1) {
          fudge = 5;
        }   
        else if (agent.indexOf("msie") > -1) {
          fudge = 0;
        }
        this.fudge = fudge;
      }
   
      var E_STYLE_1 = new EStyle("images/stem1.png", new GSize(81,87),  "estyle1", new GPoint(-30,87-3));
      var E_STYLE_2 = new EStyle("images/stem2.png", new GSize(81,87),  "estyle2", new GPoint(-30,87-1));
      var E_STYLE_3 = new EStyle("images/stem3.png", new GSize(81,87),  "estyle3", new GPoint(-30,87-10));
      var E_STYLE_4 = new EStyle("images/stem3.png", new GSize(81,87),  "estyle4", new GPoint(-30,87-10));
      var E_STYLE_5 = new EStyle("images/stem1.png", new GSize(81,87),  "estyle5", new GPoint(-30,87-3));
      var E_STYLE_6 = new EStyle("images/stem6.png", new GSize(100,50), "estyle6", new GPoint(100-2,20));
      var E_STYLE_7 = new EStyle("images/stem7.png", new GSize(24,24),  "estyle2", new GPoint(-10,23));

      function EWindow(map,estyle) {
     
       if(document.getElementById("H_ewindow").value =="Hmap")
       {
        // parameters
        this.map=Hmap;
       }
       else
       {
       // parameters
        this.map=map;
       }
       
        this.estyle=estyle;
        // 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}
      } 
      
      EWindow.prototype = new GOverlay();

      EWindow.prototype.initialize = function(map) {
        var div1 = document.createElement("div");
        div1.style.position = "absolute";
        map.getPane(G_MAP_FLOAT_PANE).appendChild(div1);
        //var div2 = document.createElement("div");
        //div2.style.position = "absolute";
        //div2.style.width = this.estyle.stemSize.width+"px";
        //map.getPane(G_MAP_FLOAT_PANE).appendChild(div2);
        var Mdiv= document.getElementById("map")
        this.Mdiv=Mdiv
        this.div1 = div1;
       // this.div2 = div2;
      }

      EWindow.prototype.openOnMap = function(point, html, offset) {
        this.offset = offset||new GPoint(0,0);
        this.point = point;
        this.div1.innerHTML = '<div class="' + this.estyle.boxClass + '"><nobr>' + html + '</nobr></div>';
        if (this.ie && this.estyle.stemImage.toLowerCase().indexOf(".png")>-1) {
          var loader = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.estyle.stemImage+"', sizingMethod='scale');";
         // this.div2.innerHTML = '<div style="height:' +this.estyle.stemSize.height+ 'px; width:'+this.estyle.stemSize.width+'px; ' +loader+ '" ></div>';
        } else {
        //  this.div2.innerHTML = '<img src="' + this.estyle.stemImage + '" width="' + this.estyle.stemSize.width +'" height="' + this.estyle.stemSize.height +'">';
        }
        var z = GOverlay.getZIndex(this.point.lat());
        this.div1.style.zIndex = z;
       // this.div2.style.zIndex = z+1;
        this.visible = true;
        this.show();
        this.redraw(true);
        
      }
      
      EWindow.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;
       
        //-----set position 
       var w = map.getContainer().clientWidth;
          var h = map.getContainer().clientHeight;
          var p = this.map.fromLatLngToDivPixel(marker.getPoint());
     
  
        var w2=w
        var h1=100
        var h2=h-50
     
           var h1=100
        var h2=h-50
   
       this.div1.style.bottom =(-p.y ) + "px";
     
    if(p.y > h2)
          {
         
           var mindex=p.y-30
           this.div1.style.bottom =(-mindex ) + "px";
          }
    
     if (p.y < h1 )
          {
          
           var mindex=p.y+50
           this.div1.style.bottom = (-mindex ) + "px";
          }
          
         if(p.y<75)
         {
        
          var mindex=p.y+85
           this.div1.style.bottom =(-mindex ) + "px";
         }
         else if(p.y<30)
         {
        
          var mindex=p.y+120
           this.div1.style.bottom =(-mindex ) + "px";
        
         } 
          
          
          
          var mxw= w2-p.x
         if(mxw<240)
         {
         var mindex= p.x -150
            if(mxw<100)
            {
            if(mxw<50){mindex= p.x -300}
              mindex= p.x-200
            }
         this.div1.style.left   = mindex + "px";
     }else
       {
           this.div1.style.left   = (p.x) + "px";
        }
     
     //-----------------------------------------------------//

    
       
        this.openOnMap(marker.getPoint(), html, new GPoint(vx,vy));
    // GetPoint=marker.getPoint()
     //alert("marker.getPoint():"+marker.getPoint())
      }
      

      EWindow.prototype.redraw = function(force) {
        if (!this.visible) {return;}
        var p = this.map.fromLatLngToDivPixel(this.point);
    
       // this.div2.style.left   = (p.x + this.offset.x) + "px";
       // this.div2.style.bottom = (-p.y + this.offset.y -this.estyle.fudge) + "px";
       //  this.div1.style.left   = (p.x + this.offset.x) + "px";
       // this.div1.style.bottom = (-p.y ) + "px";
    
      }

      EWindow.prototype.remove = function() {
        this.div1.parentNode.removeChild(this.div1);
       // this.div2.parentNode.removeChild(this.div2);
        this.visible = false;
      }

      EWindow.prototype.copy = function() {
        return new EWindow(this.map, this.estyle);
      }

      EWindow.prototype.show = function() {
        this.div1.style.display="";
       // this.div2.style.display="";
        this.visible = true;
      }
      
      EWindow.prototype.hide = function() {
        this.div1.style.display="none";
       // this.div2.style.display="none";
        this.visible = false;
      }
      
      EWindow.prototype.isHidden = function() {
        return !this.visible;
      }
      
      EWindow.prototype.supportsHide = function() {
        return true;
      }

      EWindow.prototype.zindex = function(zin) {
        var z = GOverlay.getZIndex(this.point.lat());
        this.div1.style.zIndex = z+zin;
       // this.div2.style.zIndex = z+1+zin;
      }
      
//      
//     function EWindow(map,estyle) {
//     var x = 4;
//     }


