	/* PUBLIC VARS */

	var gmap_id_controls = "controls";
	var gmap_id_typeSelector = "ctr_mapTypeSelector";		
	var gmap_id_zoomSliderTrack = "ctr_slider_track";
	var gmap_id_zoomSliderHandle = "ctr_slider_handle";	
	var gmap_id_zoomOut = "ctr_zoom_out";	
	var gmap_id_zoomIn = "ctr_zoom_in";
	
	/* PRIVATE VARS */
	
	var gmap_controls = null;
	var gmap_typeSelector = null;
	var gmap_zoomSlider = null;
	var gmap_zoomOut = null;
	var gmap_zoomIn = null;

	
	/* PUBLIC METHODS */
	
    function gmap_getBounds(){
		var bounds = gmap.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngDelta = northEast.lng() - southWest.lng();
		var latDelta = northEast.lat() - southWest.lat();
		var rectBounds = new GLatLngBounds(
		    new GLatLng(southWest.lat() + latDelta, southWest.lng() + lngDelta),
		    new GLatLng(northEast.lat() - latDelta, northEast.lng() - lngDelta));
		return rectBounds
	}
    
   	function gmap_setZoom(a){
   		gmap.setZoom(a);		
   		if(gmap_enable_debug){ gmap_debug_show("Zoom Set : "+gmap.getZoom(),3) }
   	}
    
    function gmap_setZoomIn(a) {
		gmap.setZoom(gmap.getZoom() + a);
		if(gmap_enable_debug){ gmap_debug_show("Zoom Set : "+gmap.getZoom(),3) }
    }
    
	function gmap_setZoomOut(a) {
		gmap.setZoom(gmap.getZoom() - a);
		if(gmap_enable_debug){ gmap_debug_show("Zoom Set : "+gmap.getZoom(),3) }
    }   
    
    function gmap_setDefaultPosition() {
		gmap.returnToSavedPosition();
		if(gmap_enable_debug){ gmap_debug_show("Map reset to default position",3) }
    }    

    function gmap_setMapType(a) {
    	var mapType = null;
    	a = parseFloat(a);
		switch(a){
			case 1:
				mapType = G_NORMAL_MAP;
				break;
			case 2:
				mapType = G_SATELLITE_TYPE;
				break;
			case 3:
				mapType = G_HYBRID_TYPE;
				break;
			case 4:
				var types = gmap.getMapTypes();
				mapType = types[3];
				break;
			default:
				mapType = G_NORMAL_MAP;
				break;
		}
		if(gmap_enable_debug){ gmap_debug_show("Map Type Set : "+mapType.getName(),3) }
		gmap.setMapType(mapType);
    }
    
    function gmap_move(a) {
	   	var dir = null;
		switch(a){
			case 1:
				gmap.panDirection(+1,0);
				break;
			case 2:
				gmap.panDirection(+1, +1);
				break;		
			case 3:
				gmap.panDirection(0, +1);
				break;	
			case 4:
				gmap.panDirection(-1,+1);
				break;
			case 5:
				gmap.panDirection(-1,0);
				break;	
			case 6:
				gmap.panDirection(-1,-1);
				break;					
			case 7:
				gmap.panDirection(0,-1);
				break;
			case 8:
				gmap.panDirection(+1,-1);
				break;	
		}
		if(gmap_enable_debug){ gmap_debug_show("Moved The Map..",3) }
    }
	
	function gmap_getMapMetrics(){
    	var cPoint = gmap.getCenter();
    	var centreLatLngDisplay = "lat : " + cPoint.lat() + " lng : " + cPoint.lng();
    	if(gmap_enable_debug){ gmap_debug_show(centreLatLngDisplay,3) }    		
    	
    	var bounds = gmap_getBounds();
    	var boundsDisplay = "SW : " + bounds.getSouthWest() + " NE : " + bounds.getNorthEast();
    	if(gmap_enable_debug){ gmap_debug_show(boundsDisplay,3) }    			
    } 
	

    /* HANDLE CONTROL EVENTS */ 
    
    function gmap_ONTYPESELECTCHANGE(theElement){
    	// reset focus to the body to prevent scrolly inside select list
    	// after selection
    	document.body.focus( );
    	
    	typeId = gmap_typeSelector.value;
    	gmap_setMapType(typeId);
    }
    
    function gmap_ONZOOMSLIDERCHANGE(){ 
    	//var zoom = gmap_zoomSlider.getValue(); 
		//gmap_setZoom(zoom);
    }
    
     function gmap_ONZOOMSLIDEROUT(){ 
    	var zoom = gmap_zoomSlider.getValue(); 
		gmap_setZoom(zoom);
    }
    
    function gmap_ONZOOMIN(){    	
    	gmap_setZoomIn(1);
    }
    
    function gmap_ONZOOMOUT(){    	
    	gmap_setZoomOut(1);
    }
    
	
	/* PUBLIC METHODS */ 

	function gmap_init_customControls() {
		
		gmap_controls = document.getElementById(gmap_id_controls);
		gmap_controls.style.display = "block";
		
    	gmap_typeSelector = document.getElementById(gmap_id_typeSelector);
    	gmap_typeSelector.onchange = gmap_ONTYPESELECTCHANGE;
    	
    	// slider control from here http://webfx.eae.net/dhtml/slider/api.html    	
    	gmap_zoomSlider = new Slider(document.getElementById(gmap_id_zoomSliderTrack), document.getElementById(gmap_id_zoomSliderHandle));        
        gmap_zoomSlider.setMinimum(gmap_minZoom);
        gmap_zoomSlider.setMaximum(gmap_maxZoom);
        gmap_zoomSlider.setValue(gmap_initZoom);
        gmap_zoomSlider.setUnitIncrement(1);
        gmap_zoomSlider.onchange = gmap_ONZOOMSLIDERCHANGE;
        
        var zoomSlider = document.getElementById(gmap_id_zoomSliderTrack);
        zoomSlider.onmouseup = gmap_ONZOOMSLIDEROUT;
        
        gmap_zoomIn = document.getElementById(gmap_id_zoomIn);
        gmap_zoomIn.onclick = gmap_ONZOOMIN;
        
        gmap_zoomOut = document.getElementById(gmap_id_zoomOut);
        gmap_zoomOut.onclick = gmap_ONZOOMOUT;
    	
    	var ctr = document.getElementById("tl");
    	ctr.onclick = function(){ gmap_move(2) } ;
    	
    	var ctr = document.getElementById("t");
    	ctr.onclick = function(){ gmap_move(3) } ;
    	
    	var ctr = document.getElementById("tr");
    	ctr.onclick = function(){ gmap_move(4) } ;
    	
    	var ctr = document.getElementById("ml");
    	ctr.onclick = function(){ gmap_move(1) } ;
    	
    	var ctr = document.getElementById("m");
    	ctr.onclick = function(){ gmap_setDefaultPosition() } ;
    	
    	var ctr = document.getElementById("mr");
    	ctr.onclick = function(){ gmap_move(5) } ;
    	
    	var ctr = document.getElementById("bl");
    	ctr.onclick = function(){ gmap_move(8) } ;
    	
    	var ctr = document.getElementById("b");
    	ctr.onclick = function(){ gmap_move(7) } ;
    	
    	var ctr = document.getElementById("br");
    	ctr.onclick = function(){ gmap_move(6) } ;
	    
	    if(gmap_enable_debug){ gmap_debug_show("CUSTOM CONTROL SETUP COMPLETE",1) }	    
		    
    }
    

