//------------------------------------------------------------GLOBALS	
var map;								//Openelayers map layer
var theMapFile = "mapstudio.map";	//Path to the map file
var http;
var vlayer;								//Layer that contains the mapping
var rLayer;								//Layer that contains Radials
var baselayer;							//Layer that contains the mapping
var pointLayer = new OpenLayers.Layer.Markers( "Markers" );
var polygonExtentFeature;
var polygonRadialFeature = new Array();
var drawFeatureControl;
var modifyControl;
var zoomScales = new Array(11320000,5660000,2830000,1132000,566000,283000,113200,56600,28300,11320,5660);
var initialExtent = new Array(1800000,-4000000,3800000,-2400000);
var fullExtent = new Array(0,-5000000,5000000,0);
var baseMapLayers = '20m 10m 5m 2m 1m 500k 200k 100k 50k 20k';   //addd 10k
var zoomWidth = 16000
var popup, feature, marker;


//Product point Globals
var currentViewWidth = 2241654.62284;
var currentViewHeight = 1561040.8237049999;
var prodThresholdSize = 100000;
var prodBufferDistance = 15000; //Metres
var prodCentreX = null;
var prodCentreY = null;

var prodScriptPath = "http://www.mapstudio.co.za/getproducts.php?";  			//Location of script to retrieve the Product points
var selFeatureControl;
var poiLayer;
var productsLayer = null;

var feature = null;

OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '3';
OpenLayers.Feature.Vector.style['default']['fillColor'] = 'red';
OpenLayers.Feature.Vector.style['default']['strokeColor'] = 'red';
OpenLayers.Feature.Vector.style['default']['fillOpacity'] = '0.3';
OpenLayers.Feature.Vector.style['default']['graphicOpacity'] = '1';
OpenLayers.Feature.Vector.style['select']['strokeWidth'] = '3';
OpenLayers.Feature.Vector.style['select']['fillColor'] = 'red';
OpenLayers.Feature.Vector.style['select']['strokeColor'] = 'red';
OpenLayers.Feature.Vector.style['select']['fillOpacity'] = '0.3';
OpenLayers.Feature.Vector.style['select']['graphicOpacity'] = '1';

//------------------------------------------------------------MAP SETUP

//**************************************Initializes the map

var SHADOW_Z_INDEX = 10;
var MARKER_Z_INDEX = 11;


function initMap(passedCoordinates,passedRadials,passedCenter,userX,userY,passedExtent,theClassCode){
	//Define graphic map styles
	var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
	layer_style.fillOpacity = 0.2;
	layer_style.graphicOpacity = 1;

	//Map extent styles
	mapextenstyle = OpenLayers.Util.extend({}, layer_style);
	mapextenstyle.strokeColor = "#CC0000";
	mapextenstyle.fillColor = "#666666";
	mapextenstyle.strokeWidth = 4;
	//If a map already set destroy it
	if(map != null){
		map.destroy();
	}
		
	//Define the map and relvant options
	map = new OpenLayers.Map(('homeShopMap'), { controls: [], 
	//map = new OpenLayers.Map( mapObj, { controls: [], 
		//projection: 'EPSG:2805',    //4326',
		units:'m',  
		maxExtent: new OpenLayers.Bounds(fullExtent[0],fullExtent[1],fullExtent[2],fullExtent[3]), 				
		scales: zoomScales});

	//Create base mapping layer				  
	baselayer = new OpenLayers.Layer.MapServer( "Base",
					//"http://www.planvu.co.uk/cgi-bin/mapserv",
					"http://77.246.162.227/cgi-bin/mapserv.exe",
					{ map: theMapFile,
					  layers: baseMapLayers}, { singleTile: true, isBaseLayer: true, transitionEffect: 'resize'});				  
	
	
	//Create layer for markers to be drawn on
	map.addLayers([baselayer, pointLayer]);
	map.fractionalZoom = false;
	
	var bounds = new OpenLayers.Bounds(initialExtent[0],initialExtent[1],initialExtent[2],initialExtent[3]);
	if (!map.getCenter()) map.zoomToExtent(bounds);
	 	 
	//Add map controls 
	map.addControl(new OpenLayers.Control.PanZoomBar());
  	map.addControl(new OpenLayers.Control.Navigation());		
	//map.addControl(new OpenLayers.Control.LayerSwitcher());

	
	//Draw POI on map move
	map.events.register('moveend', map, function(evt) { 				
		//Check if we need to get new selection (No if zooming in)
		var theViewExtent = map.getExtent().toBBOX();
		var theViewExtentArray = theViewExtent.split(",");	
		var newViewWidth = (theViewExtentArray[2] - theViewExtentArray[0]);
		var newViewHeight = (theViewExtentArray[3] - theViewExtentArray[1]);	
		
		//Add products point onto the map
		var getProds = false;
		if((prodCentreX == null) || (prodCentreY == null)){
			getProds = true;
		}else{
			if(Math.sqrt((prodCentreX - map.getCenter().lon) * (prodCentreX - map.getCenter().lon)) > prodBufferDistance){
				getProds = true;
			}
			if(Math.sqrt((prodCentreY - map.getCenter().lat) * (prodCentreY - map.getCenter().lat)) > prodBufferDistance){
				getProds = true;
			}
		}	
		if(getProds){
			addProductMarkers();
		}
			
		
		currentViewWidth = newViewWidth;
		currentViewHeight = newViewHeight;
		
	});
			
		
	//Add products point onto the map on load
	addProductMarkers();
	
}

//------------------------------------------------------PRODUCT MARKER STUFF

//**************************Unselect feature on popup close
function onPopupClose(evt) {
	selFeatureControl.unselect(this.feature);
}
//**************************Show popup on feature select
function onFeatureSelect(evt) {
    feature = evt.feature; 
    popup = new OpenLayers.Popup.FramedCloud("featurePopup",
                             feature.geometry.getBounds().getCenterLonLat(),
                             new OpenLayers.Size(100,100),
                             "<h2>"+feature.attributes.title + "</h2>" +
                             feature.attributes.description,
                             null, true, onPopupClose);
    popup.autosize = true;
	popup.panMapIfOutOfView = false;
	feature.popup = popup;		
    popup.feature = feature;
    map.addPopup(popup);		
}
//**************************Destroy popup on feature unselect
function onFeatureUnselect(evt) {
    feature = evt.feature;
    if (feature.popup) {
        popup.feature = null;
        map.removePopup(feature.popup);
        feature.popup.destroy();
        feature.popup = null;
    }
}

//**************************Adds town markers where there is a town
function addProductMarkers(){
	
	//Define the current view extent	
	var theViewExtent = map.getExtent().toBBOX();
	var theViewExtentArray = theViewExtent.split(",");	
	var newViewWidth = (theViewExtentArray[2] - theViewExtentArray[0]);
	var newViewHeight = (theViewExtentArray[3] - theViewExtentArray[1]);	
		
	var qstring = "extent=" + theViewExtent + "&buffer=" + prodBufferDistance; 		

	if(productsLayer != null){					//Ensure the Products layer is removed before adding	
		productsLayer.destroy();
		productsLayer = null;	
		//Remove any popups showing
		if(feature != null){
			if (feature.popup) {
				popup.feature = null;
				map.removePopup(feature.popup);
				feature.popup.destroy();
				feature.popup = null;
			}
		}
	}
	
	var prodScript = prodScriptPath + qstring;
	
	productsLayer = new OpenLayers.Layer.GML("Products", prodScript, { format: OpenLayers.Format.Text});
	map.addLayer(productsLayer);

	selFeatureControl = new OpenLayers.Control.SelectFeature(productsLayer); 
 	map.addControl(selFeatureControl);
	selFeatureControl.activate();
		
	productsLayer.events.on({
   'featureselected': onFeatureSelect,
    'featureunselected': onFeatureUnselect
	});
	
	//Store the center point that the POI were retrieved from
	prodCentreX = map.getCenter().lon;
	prodCentreY = map.getCenter().lat;
			
}



function shopBy()	{
/*	
	var pointsArray = document.getElementById("pointsArray").innerHTML;
	//alert("Old Array: " + pointsArray)
	pointsArray = pointsArray.substring(0, pointsArray.length - 1);
	//alert("New Array: " + pointsArray)

	
	var allPoints = new Array();
	allPoints=pointsArray.split("|");
	
	for (var i=0; i < allPoints.length; i++ ){
		
		var zoomArray = allPoints[i].split(",")
		var theX = zoomArray[0]
		var theY = zoomArray[1]
		
		var theHTML = "hello, world!";
		addMarkerToMap(theX,theY,theHTML)
	}
*/
}



/*---------------------End of File------------*/