if (LINE == null) {
  var LINE = {};
}

LINE.maps = {
  setup: function() {
    if (GBrowserIsCompatible()) {

		LINE.maps.markerTypes = {
			'accommodation': {
				shadow: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
				iconSize: new GSize(21, 34), // size of generated pin
				shadowSize: new GSize(40, 37),
				iconAnchor: new GPoint(17, 38),
				infoWindowAnchor: new GPoint(10, 38)
			},
			'active_accommodation': {
				image: "http://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=home|3865A8|FFFFFF",
				shadow: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
				iconSize: new GSize(21, 34), // size of generated pin
				shadowSize: new GSize(40, 37),
				iconAnchor: new GPoint(17, 38),
				infoWindowAnchor: new GPoint(10, 38)
			},

			'resort': {
				shadow: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
				iconSize: new GSize(21, 34), // size of generated pin
				shadowSize: new GSize(40, 37),
				iconAnchor: new GPoint(17, 38),
				infoWindowAnchor: new GPoint(10, 38)
			},
			'active_resort': {
				image: "http://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=ski|D11246|FFFFFF",
				shadow: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
				iconSize: new GSize(21, 34), // size of generated pin
				shadowSize: new GSize(40, 37),
				iconAnchor: new GPoint(17, 38),
				infoWindowAnchor: new GPoint(10, 38)
			},
			'poi': {
				image: "http://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=airport|FFFF00",
				shadow: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
				iconSize: new GSize(21, 34), // size of generated pin
				shadowSize: new GSize(40, 37),
				iconAnchor: new GPoint(17, 38),
				infoWindowAnchor: new GPoint(17, 38)
			}
		};
      LINE.maps.icons = {};

      var icon = new GIcon();
      icon.image = "/assets/img/markers/active/Active.png";
      icon.shadow = "/assets/img/markers/active/Shadow.png";
      icon.iconSize = new GSize(22, 32);
      icon.shadowSize = new GSize(39, 32);
      icon.iconAnchor = new GPoint(11, 32);
      icon.infoWindowAnchor = new GPoint(11, 32);
      LINE.maps.icons.active = icon;

      // setup the map & add any pins
      LINE.maps.map = new GMap2(document.getElementById("google_map"));
      LINE.maps.map.addControl(new GSmallMapControl());
      LINE.maps.map.addControl(new GMenuMapTypeControl());
      LINE.maps.geocoder = new GClientGeocoder();
      LINE.maps.markers = [];
      LINE.maps.bounds = new GLatLngBounds();
      if (LINE.maps.listings) {
        for (var i in LINE.maps.listings) {
					LINE.maps.addMarker(LINE.maps.listings[i]);
        }
      }
    }
  },
  addGeocodedMarker: function(listinginfo) {
    var needle;
    if (listinginfo.postcode) {
      needle = listinginfo.postcode;
    } else {
      needle = listinginfo.address;
    }
    LINE.maps.geocoder.getLatLng(needle,
    function(latlng) {
      if (latlng) {
       LINE.maps.addMarkerCallback(latlng,listinginfo);
      }
    });
  },
  addMarker: function(listinginfo) {
    if (null == listinginfo.lat || null == listinginfo.lng) {
      LINE.maps.addGeocodedMarker(listinginfo);
    } else {
      var latlng = new GLatLng(listinginfo.lat,listinginfo.lng);
      LINE.maps.addMarkerCallback(latlng,listinginfo);
    }
    if(listinginfo.active) {
      GEvent.trigger(listinginfo.marker, "click");  
    }
    
  },
  addMarkerCallback: function(latlng,listinginfo) {
    LINE.maps.bounds.extend(latlng);
    var zoomlevel = LINE.maps.map.getBoundsZoomLevel(LINE.maps.bounds);
    if (zoomlevel > LINE.maps.constants.maxZoomLevel) {
      zoomlevel = LINE.maps.constants.maxZoomLevel;
    }
    LINE.maps.map.setCenter(LINE.maps.bounds.getCenter(), zoomlevel);

		var icon = false;

		if (listinginfo.markerType != null ) {

			markerType = LINE.maps.markerTypes[listinginfo.markerType];
			icon = new GIcon();

			if (listinginfo.markerIndex != null) {
                if(listinginfo.star_colour) {
                    icon.image = "http://chart.apis.google.com/chart?chst=d_map_xpin_letter&chld=pin_star|" + listinginfo.markerIndex + "|" + listinginfo.markerColour + "|FFFFFF|" + listinginfo.star_colour;
                } else {
    				icon.image = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=" + listinginfo.markerIndex + "|" + listinginfo.markerColour + "|FFFFFF";
                }
			} else {
				icon.image = markerType.image;
			}


			icon.shadow = markerType.shadow;
			icon.iconSize = markerType.iconSize;
			icon.shadowSize = markerType.shadowSize;
			icon.iconAnchor = markerType.iconAnchor;
			icon.infoWindowAnchor = markerType.infoWindowAnchor;

		} else if (listinginfo.marker == 'active') {
      // need active resort and active accommodation
			icon = LINE.maps.icons.active;
    }

		if (icon) {
			// If we're IE6, use GIFs for the markers
			if ($.browser.msie && $.browser.version == '6.0') {
				icon.image = icon.image + '&chof=gif';
				icon.shadow = icon.shadow + '&chof=gif';
			}
			marker = new GMarker(latlng, icon);
		} else {
			marker = new GMarker(latlng);
		}
    LINE.maps.markers.push(marker);
    LINE.maps.map.addOverlay(marker);
    GEvent.addListener(marker, "click", function() {
      var myHtml;
      var descHtml = '';
      if (listinginfo.desc) {
        descHtml = '<p class="desc"><span class="desc">' + listinginfo.desc + '</span></p>';
      }

      if (listinginfo.img) {
          if(listinginfo.url) {
                myHtml = "<div class='infobubble clearfix'><a href='"+listinginfo.url+"'><img src='"+listinginfo.img+"' /></a><h3><a href='"+listinginfo.url+"'>"+listinginfo.title+"</a></h3>"+descHtml+"</p></div>";
          } else {
                myHtml = "<div class='infobubble clearfix'><img src='"+listinginfo.img+"'  /><h3>"+listinginfo.title+"</h3>"+descHtml+"</p></div>";
          }
      } else {
          if(listinginfo.url) {
                myHtml = "<div class='infobubble clearfix'><h3><a href='"+listinginfo.url+"'>"+listinginfo.title+"</a></h3>"+descHtml+"</p></div>";
          } else {
                myHtml = "<div class='infobubble clearfix'><h3>"+listinginfo.title+"</h3>"+descHtml+"</p></div>";
          }
      }
      LINE.maps.map.openInfoWindowHtml(latlng, myHtml);
    });

		// allow links to trigger pin

		if (listinginfo.trigger) {
			listinginfo.marker = marker;
			$("." + listinginfo.trigger).click(function() {
                // ZOOM IN TO LEVEL 7 IF TEXT LINKS SELECTED
                // DON'T ZOOM IS LEVEL IS ALREADY HIGHER THAN 7

                if(LINE.maps.map.getZoom() < listinginfo.zoomlevel) {
                    LINE.maps.map.setCenter( listinginfo.marker.getPoint(), listinginfo.zoomlevel);
                }

                GEvent.trigger(listinginfo.marker, "click");
                $( 'html, body' ).animate( { scrollTop: 0 }, 'slow');
                return false;
             });
		}

  },
  constants: {
    maxZoomLevel: 12
  }
}

$(document).ready(function(){
 /*jQuery.noConflict();*/
   LINE.maps.setup();

});
