
var GeoSearch = {};

GeoSearch = {
	init: function() {
	    OpenLayers.Renderer.SVG.prototype.supported = function() {
        var svgFeature = "http://www.w3.org/TR/SVG11/feature#";
        return (document.implementation &&
           (document.implementation.hasFeature("org.w3c.svg", "1.0") ||
            document.implementation.hasFeature(svgFeature + "SVG", "1.1") ||
            document.implementation.hasFeature(svgFeature + "BasicStructure", "1.1") ));
            };

      osMap = new OpenSpace.Map('map');


	// TODO check request parameters for initial position / zoom

      var point = OS.NGR2NE_wtp('SH720583')
      //osMap.setCenter(new OpenSpace.MapPoint(439300, 114760), 8);
      osMap.setCenter(point,1)

      markers = new OpenLayers.Layer.Markers("Markers");
      osMap.addLayer(markers);

        vectorLayer = new OpenLayers.Layer.Vector("Vector Layer");
        osMap.addLayer(vectorLayer);

		screenOverlay = new OpenSpace.Layer.ScreenOverlay("coords");
		screenOverlay.setPosition(new OpenLayers.Pixel(0, 470));
		osMap.addLayer(screenOverlay);


      // Default icon
      //var pos = new OpenSpace.MapPoint(438760, 114760);
      //var marker = new OpenLayers.Marker(pos);

      //markers.addMarker(marker);

      // Different icon
      //var size = new OpenLayers.Size(100, 100);
      //var offset = new OpenLayers.Pixel(-size.w / 2, -size.h / 2);
      //icon = new OpenLayers.Icon('house.gif', size, offset);
      //pos = new OpenSpace.MapPoint(439870, 115048);
      //marker = new OpenLayers.Marker(pos, icon);

      //markers.addMarker(marker);

      var gridProjection = new OpenSpace.GridProjection();

      //GEvent.addListener(osMap, "click", function(ol,pt) {
	  osMap.events.register("click",osMap, function(e) {
        var pt = osMap.getMapPointFromViewPortPx(e.xy);
        if(pt) {
		  var pg = new OpenLayers.LonLat(pt.lon,pt.lat);
		  var po = gridProjection.getMapPointFromLonLat(pg);
          var clicked = document.getElementById('clicked');
          clicked.innerHTML = OS.NE2NGR_wtp(pt.lon,pt.lat) + " : " + pt.lon + "," + pt.lat;
		  //plotClick(pt);
		
		  // zoom in first
		  var zoom = osMap.getZoom();
		  if (zoom < 10) {
		    osMap.setCenter(pt,++zoom);
		  }
		
		  // if zoom is greater or equal to 5, perform search
		  if (osMap.getZoom() >= 5) {
		    var extent = osMap.getExtent();
		    var xdiff = extent.getWidth() / 2.0;
		    var ydiff = extent.getHeight() / 2.0;
		    GeoSearch.plotGeoSearch(pt.lon - ydiff,pt.lon + ydiff,pt.lat - xdiff,pt.lat + xdiff);
		  }
		}
        });

      osMap.events.register("mousemove", osMap, function(e) {
        var pt = osMap.getMapPointFromViewPortPx(e.xy);
        //var lonlat = gridProjection.getLonLatFromMapPoint(pt);
        //var coords = document.getElementById('coords');
        //coords.innerHTML = NE2NGR_wtp(pt.lon,pt.lat);
		screenOverlay.setHTML("<div style='width:120px;background-color:#fff;'>" + OS.NE2NGR_wtp(pt.lon,pt.lat) + "</div>");
      });

	  osMap.events.register("mouseover", osMap, function(e) {
		document.body.style.cursor = "pointer";
	  });

	  osMap.events.register("mouseout", osMap, function(e) {
		document.body.style.cursor = "default";
	  });

      //var elCoords = document.getElementById("coords");
      //var elMap = document.getElementById("map");
	  //alert (elMap.style.top + "," + elMap.style.height + "," + elMap.style.left);
      //elCoords.style.top = '600px';
      //elCoords.style.left = ((window.innerWidth-940)/2) + 'px';

	  

    },

	plotGeoSearch: function(lonmin,lonmax,latmin,latmax) {
		// perform AJAX request for search results
		var params = new Hash();
		//var elAuth = document.getElementById("authenticity_token");
		params.set("authenticity_token", AUTH_TOKEN);
		params.set("lonmin", lonmin);
		params.set("lonmax", lonmax);
		params.set("latmin", latmin);
		params.set("latmax", latmax);
		
		// create route with waypoints
		var req = new Ajax.Request('/application/geosearch', {method: "get",contentType:"application/xml", asynchronous:true, evalScripts:true, onSuccess: function(response){GeoSearch.displayResults(response);},parameters:$H(params)});
	},
	
	displayResults: function(response) {
		// TODO show markers on OS map for these results
		//alert("callback2: " + response);
		var responseXML = response.responseText;
		// now parse the XML and do something useful
		// transform via xslt
		var xslloc = "/xslt/geosearch-results.xsl";
		var xmlDoc = XML.parse(responseXML);
		var genDoc = XML.transform(xmlDoc,xslloc);
		
		var el = document.getElementById("results");
		XML.removeAllChildren(el);
		el.appendChild(genDoc);
		
		el = document.getElementById("results-none");
		el.setAttribute("class","hidden");
		
		// TODO show markers for each of these points! (do this within XSLT)
	},
	
	removeAllMarkers: function() {
		alert("remove all markers called");
	},
	
	addRouteMarker: function(id,lon,lat,title) {
		alert("add route marker called: " + id + ", " + lon + ", " + lat + ", " + title);
	}
}
