// 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()


      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.6 and 1.5)    5, -1
        // IE 6.0                     0, -1
        // Opera 8.54                 3, -1
        // Opera 9 prev               4, -1
        // Netscape (7.2, 8.0)        5, -1
        // Safari                     5, -1        
        
        var agent = navigator.userAgent.toLowerCase();
        
        var fudge = 5;  // assume Netscape if no match found
       
        if (agent.indexOf("opera") > -1) {
          fudge = 3;
        }   
        if (agent.indexOf("firefox") > -1) {
          fudge = 0;
        }   
        if (agent.indexOf("safari") > -1) {
          fudge = 5;
        }   
        if ((agent.indexOf("msie") > -1) && (agent.indexOf("opera") < 1)){
          fudge = 0;
      }
        if(agent.indexOf("chrome")){
            fudge=0;
        }
        this.fudge = fudge;
      }
      
      var E_STYLE_1 = new EStyle("stem1.png", new GSize(81,87),  "estyle1", new GPoint(-30,87-3));
      var E_STYLE_2 = new EStyle("stem2.png", new GSize(81,87),  "estyle2", new GPoint(-30,87-1));
      var E_STYLE_3 = new EStyle("stem3.png", new GSize(81,87),  "estyle3", new GPoint(-30,87-10));
      var E_STYLE_4 = new EStyle("stem3.png", new GSize(81,87),  "estyle4", new GPoint(-30,87-10));
      var E_STYLE_5 = new EStyle("stem1.png", new GSize(81,87),  "estyle5", new GPoint(-30,87-3));
      var E_STYLE_6 = new EStyle("stem6.png", new GSize(100,50), "estyle6", new GPoint(100-2,20));
      var E_STYLE_7 = new EStyle("stem9.png", new GSize(130, 56), "estyle2", new GPoint(-30, 56 - 20));


      function EWindow(map,estyle) {
        // 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_SHADOW_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_SHADOW_PANE).appendChild(div2);
        //  var div3 = document.createElement("div");
          //map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div3);
          //div3.style.position = "absolute";
          this.div1 = div1;
          this.div2 = div2;
        //  this.div3 = div3;
      }

      EWindow.prototype.openOnMap = function(point, html, offset) {
          this.offset = offset || new GPoint(0, 0);
          this.point = point;
          this.div1.innerHTML = html;
         // this.div3.innerHTML = "<img src='" + site_root + "EWindow/dropshadow.png' />";
          
          if (this.ie && this.estyle.stemImage.toLowerCase().indexOf(".png") > -1) {
              var loader = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + site_root + 'EWindow/' + 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="' + site_root + 'EWindow/' + 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 + 1;
          this.div2.style.zIndex = z + 2;
         // this.div3.style.zIndex = z - 10;
          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;
        this.openOnMap(marker.getPoint(), html, new GPoint(vx,vy));
      }


      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-130) + "px";
          this.div2.style.bottom = (-p.y + this.offset.y - this.estyle.fudge-20) + "px";
          this.div1.style.left = (p.x + this.offset.x + this.estyle.boxOffset.x-130) + "px";
          this.div1.style.bottom = (-p.y + this.offset.y + this.estyle.boxOffset.y) + "px";
        //  this.div3.style.left = (p.x -120) + "px";
         // this.div3.style.bottom = (-p.y + 10 - this.estyle.fudge) + "px";
      }

      EWindow.prototype.remove = function() {
        this.div1.parentNode.removeChild(this.div1);
        this.div2.parentNode.removeChild(this.div2);
       // this.div3.parentNode.removeChild(this.div3);
        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.div3.style.display = "";
        this.visible = true;
      }
      
      EWindow.prototype.hide = function() {
        this.div1.style.display="none";
        this.div2.style.display = "none";
       // this.div3.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;
      }




//      var map;
//      var localSearch = new GlocalSearch();

//      var icon = new GIcon();
//      icon.image = "http://www.google.com/mapfiles/marker.png";
//      icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
//      icon.iconSize = new GSize(20, 34);
//      icon.shadowSize = new GSize(37, 34);
//      icon.iconAnchor = new GPoint(10, 34);


//      function usePointFromPostcode(postcode, callbackFunction) {

//          localSearch.setSearchCompleteCallback(null,
//		function() {

//		    if (localSearch.results[0]) {
//		        var resultLat = localSearch.results[0].lat;
//		        var resultLng = localSearch.results[0].lng;
//		        var point = new GLatLng(resultLat, resultLng);
//		        alert(localSearch.Status.code);
//		        document.forms['latlon'].lat.value = resultLat;
//		        document.forms['latlon'].lon.value = resultLng;
//		        callbackFunction(point);
//		    } else {
//		        alert("Postcode not found!");
//		    }
//		});

//          localSearch.execute(postcode + ", UK");
//      }

//      function placeMarkerAtPoint(point) {
//          var marker = new GMarker(point, icon);
//          map.addOverlay(marker);
//      }

//      function setCenterToPoint(point) {
//          map.setCenter(point, 17);
//      }

//      function showPointLatLng(point) {
//          alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
//      }

//      function mapLoad() {
//          if (GBrowserIsCompatible()) {
//              map = new GMap2(document.getElementById("map"));


//              map.addControl(new GLargeMapControl());
//              map.addControl(new GMapTypeControl());
//              map.setCenter(new GLatLng(54.622978, -2.592773), 5, G_HYBRID_MAP);
//          }
//      }

//      function addLoadEvent(func) {
//          var oldonload = window.onload;
//          if (typeof window.onload != 'function') {
//              window.onload = func;
//          } else {
//              window.onload = function() {
//                  oldonload();
//                  func();
//              }
//          }
//      }

//      function addUnLoadEvent(func) {
//          var oldonunload = window.onunload;
//          if (typeof window.onunload != 'function') {
//              window.onunload = func;
//          } else {
//              window.onunload = function() {
//                  oldonunload();
//                  func();
//              }
//          }
//      }

//      addLoadEvent(mapLoad);
//      addUnLoadEvent(GUnload);