var map;

var markerGroups = { "cottage": [], "hotel": [], "bandb": [], "hostel": [], "camping": [], "farmstay": [], "inn": []
	, "castle": [], "garden": [], "house": [], "unusual": [], "military": [], "industrial": [], "wildlife": [], "themepark": [], "natural": [], "church": [], "maritime": [], "museum": [], "railway": []};


//Create an icon for the clusters
var iconCluster = new GIcon();
iconCluster.image = "http://www.cornwalls.co.uk/images/gmap/accom_cluster_gray.png";
iconCluster.shadow = "http://www.cornwalls.co.uk/images/gmap/cluster_shadow.png";
iconCluster.iconSize = new GSize(34, 34);
iconCluster.shadowSize = new GSize(52, 34);
iconCluster.iconAnchor = new GPoint(17, 17);
iconCluster.infoWindowAnchor = new GPoint(17, 17);
iconCluster.infoShadowAnchor = new GPoint(17, 17);

//create an icon for the pins
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.cornwalls.co.uk/images/gmap/accom_shadow.png";
baseIcon.iconSize = new GSize(20, 32);
baseIcon.shadowSize = new GSize(37, 32);
baseIcon.iconAnchor = new GPoint(3, 30);
baseIcon.infoWindowAnchor = new GPoint(10, 4);
//baseIcon.infoShadowAnchor = new GPoint(6, 6);

var iconBlue = new GIcon(baseIcon);
iconBlue.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_blue.png";

var iconRed = new GIcon(baseIcon);
iconRed.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_red.png";

var iconGreen = new GIcon(baseIcon);
iconGreen.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_green.png";

var iconOrange = new GIcon(baseIcon);
iconOrange.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_orange.png";

var iconYellow = new GIcon(baseIcon);
iconYellow.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_yellow.png";

var iconGray = new GIcon(baseIcon);
iconGray.image = "http://www.cornwalls.co.uk/images/gmap/accom_marker_gray.png";

//Create an icon for the clusters
var iconAttrCluster = new GIcon();
iconAttrCluster.image = "http://www.cornwalls.co.uk/images/gmap/icons/cluster.png";
iconAttrCluster.shadow = "http://www.cornwalls.co.uk/images/gmap/icons/cluster_shadow.png";
iconAttrCluster.iconSize = new GSize(46, 50);
iconAttrCluster.shadowSize = new GSize(72, 50);
iconAttrCluster.iconAnchor = new GPoint(23, 25);
iconAttrCluster.infoWindowAnchor = new GPoint(23, 25);
iconAttrCluster.infoShadowAnchor = new GPoint(23, 25);

var attrIcon = new GIcon();
attrIcon.shadow = "http://www.cornwalls.co.uk/images/gmap/icons/shadow.png";
attrIcon.iconSize = new GSize(32, 37);
attrIcon.shadowSize = new GSize(51, 37);
attrIcon.iconAnchor = new GPoint(16, 18);
attrIcon.infoWindowAnchor = new GPoint(16, 18);
attrIcon.infoShadowAnchor = new GPoint(16, 18);

var iconCastle = new GIcon(attrIcon);
iconCastle.image = "http://www.cornwalls.co.uk/images/gmap/icons/castle.png";

var iconGarden = new GIcon(attrIcon);
iconGarden.image = "http://www.cornwalls.co.uk/images/gmap/icons/flowers.png";

var iconHouse = new GIcon(attrIcon);
iconHouse.image = "http://www.cornwalls.co.uk/images/gmap/icons/stately_home.png";

var iconUnusual = new GIcon(attrIcon);
iconUnusual.image = "http://www.cornwalls.co.uk/images/gmap/icons/toys.png";

var iconMilitary = new GIcon(attrIcon);
iconMilitary.image = "http://www.cornwalls.co.uk/images/gmap/icons/military.png";

var iconIndustrial = new GIcon(attrIcon);
iconIndustrial.image = "http://www.cornwalls.co.uk/images/gmap/icons/factory.png";

var iconWildlife = new GIcon(attrIcon);
iconWildlife.image = "http://www.cornwalls.co.uk/images/gmap/icons/animals.png";

var iconThemePark = new GIcon(attrIcon);
iconThemePark.image = "http://www.cornwalls.co.uk/images/gmap/icons/family.png";

var iconNatural = new GIcon(attrIcon);
iconNatural.image = "http://www.cornwalls.co.uk/images/gmap/icons/beautiful.png";

var iconChurch = new GIcon(attrIcon);
iconChurch.image = "http://www.cornwalls.co.uk/images/gmap/icons/church.png";

var iconMaritime = new GIcon(attrIcon);
iconMaritime.image = "http://www.cornwalls.co.uk/images/gmap/icons/maritime.png";

var iconMuseum = new GIcon(attrIcon);
iconMuseum.image = "http://www.cornwalls.co.uk/images/gmap/icons/justice.png";

var iconRailway = new GIcon(attrIcon);
iconRailway.image = "http://www.cornwalls.co.uk/images/gmap/icons/railway.png";

function init() {
	
	map = new GMap2(document.getElementById("bigMap"));
	
	//Restricting the range of Zoom Levels
  // Get the list of map types      
  var mt = map.getMapTypes();
  // Overwrite the getMinimumResolution() and getMaximumResolution() methods
  for (i in mt) {
    mt[i].getMinimumResolution = function() {return 10;}
    mt[i].getMaximumResolution = function() {return 18;}
  }


      map.addControl(new GLargeMapControl3D());
      map.addControl(new GMapTypeControl());
      map.addControl(new GScaleControl());

	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

//Pass in a initial point for the center
    updateMarkers(new GLatLng(centerLatitude, centerLongitude));

    //GEvent.addListener(map,'click',function(overlay,point) {
        //Pass in the point for the center
        //updateMarkers(point);
    //});

	//alert('Note: This example has been limited to data from Hawaii');
}

function updateMarkers(point) {

    //remove the existing points
    map.clearOverlays();

    //create the boundry for the data to provide
    //initial filtering
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var getVars = centerLatitude + ',' + centerLongitude
	+ '/' + northEast.toUrlValue()
	+ '/' + southWest.toUrlValue();
	
	getVars += '/' + mapType;

    //log the URL for testing
    //GLog.writeUrl('server_cps.php?'+getVars);

    //retrieve the points
    var request = GXmlHttp.create();
    request.open('GET', '/town/map_data/'+getVars, true);
    request.onreadystatechange = function() {
         if (request.readyState == 4) {
              var jscript = request.responseText;
              var points;
              eval(jscript);

              //create each point from the list
              for (i in points) {
                  var point = new GLatLng(points[i].lat,points[i].lng);
                  var marker = createMarker(point,points[i].type,points[i].list_type, points[i].name, points[i].id, points[i].town, points[i].short_desc, points[i].url);
                  
							    
                  map.addOverlay(marker);
              }
         }
    }
    request.send(null);
}



function createMarker(point, type, list_type, name, item, town, short_desc, url) {
		//create the marker with the appropriate icon
	if(type=='c') {
		switch(mapType){
			case 'attractions':
			var marker = new GMarker(point,iconAttrCluster,true);
			break;
			case 'accommodation':
			var marker = new GMarker(point,iconCluster,true);
			break;
		}
			
	} else {
		list_type = parseInt(list_type);
		switch(list_type){
			case 3:
			  var marker = new GMarker(point,iconOrange);
			  markerGroups['hotel'].push(marker);
			  break;
			case 14:
			  var marker = new GMarker(point,iconBlue);
			  markerGroups['cottage'].push(marker);
			  break;
			case 16:
			  var marker = new GMarker(point,iconGreen);
			  markerGroups['camping'].push(marker);
			  break;
			case 17:
			  var marker = new GMarker(point,iconYellow);
			  markerGroups['hostel'].push(marker);
			  break;
			case 19:
			  var marker = new GMarker(point,iconRed);
			  markerGroups['bandb'].push(marker);
			  break;
			  
			case 21:
			  var marker = new GMarker(point,iconCastle);
			  markerGroups['castle'].push(marker);
			  break;
			case 23:
			  var marker = new GMarker(point,iconGarden);
			  markerGroups['garden'].push(marker);
			  break;
			case 24:
			  var marker = new GMarker(point,iconHouse);
			  markerGroups['house'].push(marker);
			  break;
			case 27:
			  var marker = new GMarker(point,iconUnusual);
			  markerGroups['unusual'].push(marker);
			  break;
			case 28:
			  var marker = new GMarker(point,iconMilitary);
			  markerGroups['military'].push(marker);
			  break;
			case 29:
			  var marker = new GMarker(point,iconIndustrial);
			  markerGroups['industrial'].push(marker);
			  break;
			case 30:
			  var marker = new GMarker(point,iconWildlife);
			  markerGroups['wildlife'].push(marker);
			  break;
			case 31:
			  var marker = new GMarker(point,iconThemePark);
			  markerGroups['themepark'].push(marker);
			  break;
			case 32:
			  var marker = new GMarker(point,iconNatural);
			  markerGroups['natural'].push(marker);
			  break;
			case 78:
			  var marker = new GMarker(point,iconChurch);
			  markerGroups['church'].push(marker);
			  break;
			case 128:
			  var marker = new GMarker(point,iconMaritime);
			  markerGroups['maritime'].push(marker);
			  break;
			case 129:
			  var marker = new GMarker(point,iconMuseum);
			  markerGroups['museum'].push(marker);
			  break;
			case 130:
			  var marker = new GMarker(point,iconRailway);
			  markerGroups['railway'].push(marker);
			  break;
			  
			default:
			  var marker = new GMarker(point,iconGray);
			}
	}
	 if(list_type<20){
	 	var item_img = "/public/accommodation/"+item+"s.jpg";
		}
		else{
			var item_img = "/public/attractions/"+item+"_1.jpg";
		}
			 GEvent.addListener(marker,'click',function(overlay,point) {
			    html = '<a href="'+url+'"><img src="'+item_img+'" alt="" width="80" align="left" /></a><a href="'+url+'"><b>'+name+'</b></a><br />'+short_desc;
			    marker.openInfoWindowHtml('<div class="gBox">'+html+'</div>');
			    //dropTo(item);
			    //alert(html);
			});

	
	return marker;
}

function toggleGroup(type) {
      for (var i = 0; i < markerGroups[type].length; i++) {
        var marker = markerGroups[type][i];
        if (marker.isHidden()) {
          marker.show();
        } else {
          marker.hide();
        }
      } 
    }


window.onload = init;

