var poiError = false;
var current_popup;

var size = new OpenLayers.Size(20, 20);
var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));
var poi_icon = new OpenLayers.Icon('beer.png', size, offset);

var styleBox = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);

styleBox.fill = false; 
styleBox.strokeColor = "blue"; 
styleBox.strokeOpacity = 0.4; 
styleBox.strokeWidth = 4;

//POIs

function showhidePOI()
{
	if (document.getElementById("poiSB").disabled == true)
	{
		document.getElementById("poiRefreshB").disabled = false;
		document.getElementById("poiSB").disabled = false;
	}
	else
	{
		document.getElementById("poiRefreshB").disabled = true;
		document.getElementById("poiSB").disabled = true;
	}
	document.getElementById("poiSB").value = ""; 	
	cleanupPOIs();
}

function cleanupPOIs()
{
	poiError = false;
	document.getElementById("searchPOIMessage").innerHTML = "";
	document.getElementById("poiClearB").disabled = true;
	boxes.destroyFeatures();
	pois.clearMarkers();
     	if (current_popup != null)
	{
		map.removePopup(current_popup);			
	}
}

function selectPoi()
{
	//Clear out existing POIs and BB
	cleanupPOIs();

	if (isIE6)
	{
		map.addLayer(boxes); 
		map.addLayer(pois);	
	}
	//Activate spinner.
	document.getElementById("searchPOISpinner").style.display = "block";
	document.getElementById("poiRefreshB").disabled = true;

	//Find current bounding box
	var bb = layerNetwork.getExtent(); 
	var topleft = new OpenLayers.LonLat(bb.left, bb.top);
	var bottomright = new OpenLayers.LonLat(bb.right, bb.bottom);
	
	var latdiff = bb.top - bb.bottom;
	var londiff = bb.right - bb.left;

	topleft

	//Create and draw box.
	var topleftPoint = new OpenLayers.Geometry.Point(bb.left - 0.10*londiff, bb.top + 0.10*latdiff);
	var toprightPoint = new OpenLayers.Geometry.Point(bb.right + 0.10*londiff, bb.top + 0.10*latdiff);
	var bottomleftPoint = new OpenLayers.Geometry.Point(bb.left - 0.10*londiff, bb.bottom - 0.10*latdiff);
	var bottomrightPoint = new OpenLayers.Geometry.Point(bb.right + 0.10*londiff, bb.bottom - 0.10*latdiff);

	var points = [topleftPoint, toprightPoint, bottomrightPoint, bottomleftPoint];
	var boxLR = new OpenLayers.Geometry.LinearRing(points);

	box = new OpenLayers.Feature.Vector(boxLR, null, styleBox);
	boxes.addFeatures(box);

	//AJAX call to with the extended BB.
  	request = getAjaxFunction();
	if (!request) return false; 
  	request.onreadystatechange = displayPois;
  	var queryString = "?mine=" + topleftPoint.x + "&maxe=" + bottomrightPoint.x + "&minn=" + bottomrightPoint.y + "&maxn=" +topleftPoint.y;
  	request.open("GET", "getpubs.php" + queryString, true);
  	request.send(null);
}

function displayPois()
{
	if(request.readyState == 4)
    	{
		//Hide spinner.
		document.getElementById("searchPOISpinner").style.display = "none";
		document.getElementById("poiRefreshB").disabled = false;

     		var text = request.responseText;
      		if (text != null && text.length > 2)
      		{
			if (text.charAt(0) == "_")
			{
				document.getElementById("poiClearB").disabled = false;

				//Add new POIs.
				var poiArr = text.split("\n");
				for (var i = 0; i < poiArr.length; i++)
				{
        				var tokens = poiArr[i].split("|");
        				poi_x = tokens[1];
        				poi_y = tokens[2];
        				name = tokens[3];
        				var xy = new OpenLayers.LonLat(poi_x, poi_y);
        				var the_icon = poi_icon.clone();
       	    		      var poi_marker = new OpenLayers.Marker(xy, the_icon);
					poi_marker.id = name + poi_x + poi_y;      
					if (name == '') { name = 'Unknown name'; }					
					poi_marker.name = name;
                           		poi_marker.events.register("mousedown", poi_marker, function()
                	    		{      	
        					if (current_popup != null)
						{
							map.removePopup(current_popup);			
						}
						var popup = new OpenLayers.Popup.FramedCloud(this.id, 
							this.lonlat, 
							null,
							this.name, 
							the_icon, 
							true);
        					map.addPopup(popup);							
        					current_popup = popup;
                	    		});	
        				pois.addMarker(poi_marker);
				}
				poiError = false;
				document.getElementById("searchPOIMessage").innerHTML = "<span style='color: #111;'>Showing " + poiArr.length + " pubs.</span>";

			}
			else
			{
				//Display error message if appropriate and end here.
				poiError = true;
				boxes.destroyFeatures();
				document.getElementById("searchPOIMessage").innerHTML = text;
			}
		}
	}
}

function clearPOIMessage()
{
	if (poiError)
	{
		poiError = false;
		document.getElementById("searchPOIMessage").innerHTML = "";
	}	
}

function getAjaxFunction()
{
  request = false;
  if (window.XMLHttpRequest) //IE7 & proper browsers
  {
    request = new XMLHttpRequest();
    if (request.overrideMimeType) //Proper browsers
    {
      //This is needed when calling php page that echos back XML, but should not be set if returning XML file directly 
      //- as if the file doesn't exist, HTML 404 response will cause Firefox error if set. //(N.B. Not necessarily a problem.)
      //request.overrideMimeType('text/xml');
    }
    else //IE7
    {
	//request.setRequestHeader("Content-Type", "text/xml");
    }
  }
  else if (window.ActiveXObject) //IE6-
  {
    try { request = new ActiveXObject("Msxml2.XMLHTTP"); } 
    catch (e) { 
      try { request = new ActiveXObject("Microsoft.XMLHTTP"); } 
      catch (e) { }
    }   
  }
  if (!request) {
    alert("This web application requires an AJAX-compatable browser to operate.");
  }
  return request;
}

