function usePointFromPostcode(postcode, callbackFunction) {
	
	localSearch.setSearchCompleteCallback(null, 
		function() {
			
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				callbackFunction(point);
			}else{
				alert("Address not found!");
			}
		});	

	localSearch.execute(postcode + ", UK");
}


function placeMarkerAtPoint(point)
{
	//var marker = new GMarker(point);
	//map.addOverlay(marker);
              map.setCenter(point, 13);

}

        
        
    function showAddress(address) {
      usePointFromPostcode(address, placeMarkerAtPoint);


    }

			function load(){
				map = new GMap2(document.getElementById('mapdiv'));


        var otherOpts = { 
          buttonStartingStyle: {background: '#FFF', paddingTop: '4px', paddingLeft: '4px', border:'1px solid black'},
          buttonHTML: '<img title="Drag Zoom In" src="img/zoomin.gif">',
          buttonStyle: {width:'25px', height:'23px'},
          buttonZoomingHTML: 'Drag a region on the map (click here to reset)',
          buttonZoomingStyle: {background:'yellow',width:'75px', height:'100%'},
          backButtonHTML: '<img title="Zoom Back Out" src="img/zoomout.gif">',  
          backButtonStyle: {display:'none',marginTop:'5px',width:'25px', height:'23px'},
          backButtonEnabled: true, 
          overlayRemoveTime: 1500} 

        map.addControl(new DragZoomControl({}, otherOpts, {}), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,15)));


				//geocoder = new GClientGeocoder();

			      var myTileLayer = new GTileLayer(new GCopyrightCollection(""),1,17);
			      myTileLayer.myBaseURL='http://www.tilecache.no-ip.com/CallCrop.aspx?http://www.bgrow.no-ip.org/scripts/mapserv.exe?map=D:/Websites/BlaenauGwentROW/mapserver/map/WMSBGPath.map';
			      myTileLayer.myLayers='BGPath';

			      			      
			      myTileLayer.myFormat='image/png';
        		      myTileLayer.getTileUrl=CustomGetTileUrl;

      			      myTileLayer.myOpacity=0.69;
      			      myTileLayer.myOpacity=0.5;
			      myTileLayer.getOpacity=customOpacity;
			      


			      			var layer2=[G_NORMAL_MAP.getTileLayers()[0],myTileLayer];
				  		var custommap2 = new GMapType(layer2, G_NORMAL_MAP.getProjection(), "Map");
				  	map.addMapType(custommap2);


			       var layer=[G_SATELLITE_MAP.getTileLayers()[0],myTileLayer];
			       var custommap = new GMapType(layer, G_SATELLITE_MAP.getProjection(), "Aerial");
			        map.addMapType(custommap);

		       var layer3=[G_HYBRID_MAP.getTileLayers()[0],G_HYBRID_MAP.getTileLayers()[1],myTileLayer];
			       var custommap3 = new GMapType(layer3, G_HYBRID_MAP.getProjection(), "Hybrid");
			        map.addMapType(custommap3);

map.removeMapType(G_SATELLITE_MAP);
map.removeMapType(G_NORMAL_MAP);
map.removeMapType(G_HYBRID_MAP);
			      



				var x = getURLParameters("X");
				var y = getURLParameters("Y");
				var mapScale = getURLParameters("mapScale");
				if (x=='') {
					//map.setCenter(new GLatLng(52.4369079238803,-0.294280430498201), 15);
					

					map.setCenter(new GLatLng(51.7369,-3.1235), 13);
				} else {
					map.setCenter(new GLatLng(parseFloat(y),parseFloat(x)), parseFloat(mapScale));
				}

				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
				map.addControl(new GOverviewMapControl());
				map.addControl(new GScaleControl());

				var center = map.getCenter();

				map.setMapType(custommap2);

				GEvent.addListener(map,"click", function (overlay, point){
					if(overlay){ return; }
					var pt = new GLatLng(point.y,point.x);
					getInfo(pt);
					}
				);


			}


			function getURLParameters(paramName) {
				var sURL = window.document.URL.toString();
				var ans='';
				if (sURL.indexOf("?") > 0) {
					var arrURLParams = window.location.search.substring(1).split("&amp;");
					var arrParamNames = new Array(arrURLParams.length);
					var arrParamValues = new Array(arrURLParams.length);
					var i = 0;
					for (i=0;i<arrURLParams.length;i++) {
						var sParam =  arrURLParams[i].split("=");
						arrParamNames[i] = sParam[0];
						if (sParam[1] != "")
							arrParamValues[i] = unescape(sParam[1]);
						else
							arrParamValues[i] = "";
						if (arrParamNames[i]==paramName)
							ans = arrParamValues[i];
					}
				}
				return ans
			}


	function getInfo(pt){

		// code from Lance on the Google Maps Group

		var b = map.getBounds();
		var sw = b.getSouthWest();
		var ne = b.getNorthEast();
		var w = sw.lng();
		var e = ne.lng();
		var n = ne.lat();
		var s = sw.lat();
		var ts = s;
		var tw = w;
		if(n<s) { s=n; n = ts; }
		if(e<w){ w=e; e = tw; }
		if(s<-90)s=-90;
		if(n>90)n=90;
		if(e>180)e=180;
		if(w<-180)w=-180;

		var span_ew = Math.abs(e - w);
		var span_ns = Math.abs(n - s);
		var width  = 768*span_ew/span_ns;
		var height = 768;

		var x = (pt.x - w) * width/span_ew;
		var y = (n - pt.y) * height/span_ns;


		var URL = GetURL(x, y, w, s, e, n, width, height);

		GDownloadUrl(URL, function(data, responseCode) {
				gResult = data;
				addInfoTipMarker(pt);
		});
	}

function addInfoTipMarker(pt) {

   		var p = new GPoint(pt);
		var label1 = 'Info';
		var label2 = 'Email';
		var htm = "";
		//var html2 = "You clicked on <br>" + pt;

//create a wgs84 coordinate
wgs84=new GT_WGS84();
wgs84.setDegrees(pt.lat(), pt.lng());

//convert to OSGB
osgb=wgs84.getOSGB();

//get a grid reference with 3 digits of precision
gridref = osgb.getGridRef(4);

if (gResult.length>0) {
		sTitle = getVal(gResult,"<tr><td><b>Route Code:</b></td><td>") + " at " + gridref
     		
		//document.getElementById('side_bar').innerHTML = URL;

		htm += '<a href="javascript:zoomIn('+p+');">Zoom In</a>&nbsp;|&nbsp;<a href="javascript:zoomOut('+p+');">Zoom Out</a><br><br>';
		htm +=  gResult 


htm2 = "<h5>Email a comment or report a fault on this path</h5>"
htm2 += "<div id='mailsection'>"
htm2 += "<div id='mailstatus'>STATUS: COMPOSING NEW MESSAGE</div>"
htm2 += "<form id='mail' action=''><table>"

htm2 += "<tr><td>SUBJECT</td><td><input name='subject' type='text' class='mailfield' size='30' title='Enter message subject' DISABLED value='" + sTitle + "'/></td></tr>"
htm2 += "<tr><td>FROM</td><td><input name='from' type='text' class='mailfield' title='Enter your email address' size='30'/></td></tr></table>"
htm2 += "<p><textarea name='message' title='Type your message here' rows='3' cols='35' ></textarea></p>"
htm2 += "<p><input name='send' type='button' value='Send Message' class='mailbutton' title='Send Message' onclick='sendEmailRequest();false' />"
htm2 += "<input name='clear' type='reset' value='Clear Message' class='mailbutton' title='Clear Message' /></p>"
htm2 += "</form>"
htm2 += "</div>"




		//map.openInfoWindowHtml(pt, htm);
		map.openInfoWindowTabsHtml(pt, [new GInfoWindowTab(label1,htm), new GInfoWindowTab(label2,htm2)])
gResult='';
} else {

}

	}

	function zoomIn(pt) {
           map.setCenter(pt,map.getZoom()+1);

        }

	function zoomOut(pt) {
           map.setCenter(pt,map.getZoom()-1);
        }

	function GetURL(x, y, w, s, e, n, width, height){
		r = "http://www.bgrow.no-ip.org/scripts/mapserv.exe?map=D:/Websites/BlaenauGwentROW/mapserver/map/WMSBGPath.map";
		r+="&SERVICE=WMS";
		r+="&SRS=EPSG:4326";
		r+="&VERSION=1.1.1";
		r+="&REQUEST=GetFeatureInfo";
		r+="&X=" + parseInt(x);
		r+="&Y=" + parseInt(y);
		r+="&QUERY_LAYERS=BGPath";
		r+="&LAYERS=BGPath";
		r+="&INFO_FORMAT=text/html";
		r+="&BBOX="+w+","+s+","+e+","+n;
		r+="&WIDTH="+parseInt(width)+"&HEIGHT="+ parseInt(height);
		return r;
	}



// getXMLHttpRequest object
function getXMLHttpRequestObject(){
    var xmlobj;
    // check for existing requests
    if(xmlobj!=null&&xmlobj.readyState!=0&&xmlobj.readyState!=4){
        xmlobj.abort();
    }
    try{
        // instantiate object for Mozilla, Nestcape, etc.
        xmlobj=new XMLHttpRequest();
    }
    catch(e){
        try{
            // instantiate object for Internet Explorer
            xmlobj=new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e){
            // Ajax is not supported by the browser
            xmlobj=null;
            return false;
        }
    }
            return xmlobj;
}
    


//Not used at the moment    
function intitializeEmailClient(){
alert('init')
    if(document.getElementById&&document.getElementsByTagName&&document.createElement){
alert('init2')
        var sendbtn=document.getElementsByTagName('form')['mail'].elements['send'];
        if(!sendbtn){return};
        // assign 'onlick' event handler to 'send' button
        sendbtn.onclick=function(){
            // display message
            //document.getElementsByTagName('h3')['mailstatus'].firstChild.data='STATUS: SENDING MESSAGE...';
	    xGetElementById('mailstatus').innerHTML = 'STATUS: SENDING MESSAGE...';
            // send email request
            sendEmailRequest();     
        }
        var clearbtn=document.getElementsByTagName('form')['mail'].elements['clear'];
        if(!clearbtn){return};
        // assign 'onlick' event handler to 'clear message' button
        clearbtn.onclick=function(){xGetElementById('mailstatus').innerHTML='STATUS: COMPOSING NEW MESSAGE'};

    }
}


function sendEmailRequest(){

    var message=document.getElementsByTagName('form')['mail'].elements['message'].value;
    if(message.length>1000){message=message.substring(0,1000)};
    // open socket connection
    emailXMLHttpObj.open('POST','sendmail.aspx',true);
    // set form http header
    emailXMLHttpObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    // get form values and send http request
    emailXMLHttpObj.send(getFormValues(document.getElementsByTagName('form')['mail']));
    emailXMLHttpObj.onreadystatechange=emailStatusChecker;
}
    
    
// get form values
function getFormValues(fobj){
    var str='';
    for(var i=0;i< fobj.elements.length;i++){
    	str+=fobj.elements[i].name+'='+ escape(fobj.elements[i].value)+'&';
    }
    str=str.substr(0,(str.length-1));
    return str;
}     
    
    // check status of email requester object
function emailStatusChecker(){
    // if mail request is completed
    if(emailXMLHttpObj.readyState==4){
        if(emailXMLHttpObj.status==200){
            // if status == 200 display server response
            displayServerResponse();
        }
        else{
            alert('Failed to get response :'+emailXMLHttpObj.statusText);
        }
    }
}
// display server response
function displayServerResponse(){
    //var status=document.getElementsByTagName('h3')['mailstatus'].firstChild;
    var status=xGetElementById('mailstatus').innerHTML;
    if(!status){return};
    // display messages by <h1> header
    xGetElementById('mailstatus').innerHTML=emailXMLHttpObj.responseText;  
}



  		function getVal(s,key) {
			var p1;
			var p2;
			var t;

			p1 = s.indexOf(key) + key.length;
			p2 = s.indexOf('</td></tr>',p1);
			t = s.substring(p1,p2);
			return t;
		}




