var fromLatLng=null;
var fromAddress="";
var mapZoomLevel=18;
var countryCode="";
var addressIndex=-1;
var maxAddresses=20;
var mapLayer;
var mapLeft;
var mapTop;
var request;

function createRequest()
{
if(window.XMLHttpRequest)
request = new XMLHttpRequest();
else
if(window.ActiveXObject)
request =new ActiveXObject("Microsoft.XMLHTTP");
}
function addressInfo(address, LatLng,companyName,phone)
{
	
	var html ="<span class='companyname'>"+companyName+"<\/span><br\/>";
	html += "<span class='address'>"+address+ "<\/span><br\/>";
	html += "<span class='phone'>"+phone+ "<\/span><br\/>";
	
	var distance = LatLng.distanceFrom(fromLatLng,6378137);
	
	if(!isNaN(distance))
	html +="<span class='distance'>Distance from " + fromAddress + " to here is "+ (distance/1000).toFixed(2) +" km<\/span>";

	return html;
}
function validateAddress(addr)
		{
			
			if(addr.indexOf("lng")>-1 && addr.indexOf("lat")>-1)
			return addr;
			
			var position=addr.indexOf("-");
			if(position>0)
			addr=addr.substring(position+1,addr.length);

			position=addr.indexOf("/");
			if(position>0)
			addr=addr.substring(position+1,addr.length);
			var reg= new RegExp("\\d{1,4}\\s+[A-Za-z\\s*\.*\,*\&*\-*]+\\d{4,}\\s*.*","ig");
			var result=addr.match(reg);
			
			if(result&&result.length>0)
				return result[0];
			else
				return "error";
		}
		function gotolink(web)
		{
			if(typeof(web)=="undefined")return;
			var startpost=web.indexOf("href=");
			if(startpost>0)
			{
				var temp=web.substring(startpost+6,web.length);
				var urlstr=temp.split('"');
var targeturl=urlstr[0].replace(/&amp;/ig,"&");

				window.open(targeturl,"_self");


			}
		}
function markZoom(map,lat,lng,place,companyName,phone,web,isUpdated)
{
	var LatLng = new GLatLng(lat,lng);
	
					if(fromLatLng==null)
					{
						var startlatlng;
						var start = document.getElementsByName("start");
						
						if(start.length!=0)
						{
							var params = start[0].value.split(";");
							var suburb,state,post,country,lng,lat;
							
							for(i=0;i<params.length;i++)
							{
								if(params[i].indexOf("sub")>-1)suburb=params[i].split("=")[1];
								if(params[i].indexOf("state")>-1)state=params[i].split("=")[1];
								if(params[i].indexOf("post")>-1)post=params[i].split("=")[1];
								if(params[i].indexOf("country")>-1)country=params[i].split("=")[1];
								if(params[i].indexOf("lng")>-1)lng=params[i].split("=")[1];
								if(params[i].indexOf("lat")>-1)lat=params[i].split("=")[1];
							}
							fromAddress =(suburb==""?"":suburb+" ")+(state==""?"":state+" ")+(post==""?"":post+" ")+(country==""?"":country);
							fromLatLng = new GLatLng(lat,lng);
						}
						
					map.setCenter(LatLng,mapZoomLevel);
					}
					var marker = new GMarker(LatLng);
					if(companyName !="start")
						map.addOverlay(marker);
					else 
						isUpdated=true;
					
					if(window.location.href.indexOf("Nextpage")==-1)
					{
					GEvent.addListener(marker,"mouseover", function() {
					marker.openInfoWindowHtml(addressInfo(place,LatLng,companyName,phone));
					});
					
					GEvent.addListener(marker,"mouseout", function() {
						marker.closeInfoWindow();
					});
					
					GEvent.addListener(marker,"click", function() {
						gotolink(web);
					});
					
					}
										/*
					if(fromLatLng==null)
						fromLatLng=LatLng;
					
					else
						{
							distance=LatLng.distanceFrom(fromLatLng,6378137);
							setField(distance);
						}
					*/
					
						var point=map.fromLatLngToDivPixel(LatLng);
						var i=1;
						
						var mapHeight,mapWidth;
						mapHeight=parseInt(mapLayer.style.height);
						mapWidth=parseInt(mapLayer.style.width);
	
						while(point.x<0 || point.y<0 || point.x>mapWidth+10 || point.y>mapHeight+10)
						{
							map.setZoom(mapZoomLevel-i);
							i++;
							point=map.fromLatLngToDivPixel(LatLng);
							
						}

						var addresses=document.getElementsByName("addr");
						var table=document.getElementById("DetailTable");
						var codes=document.getElementsByName("code");
						
						if(!isUpdated)
						{
							if(addressIndex >= maxAddresses)return;
							
						var requestString = updateServer+"?code="+codes[addressIndex].value+"&lat="+lat+"&lng="+lng ;
						createRequest();
						request.open("GET",requestString,true);
						request.send(null);
						}
						addressIndex++;
						if(addressIndex >= maxAddresses)return;
						
						var validAddr=validateAddress(addresses[addressIndex].value);
						
	  				if(validAddr != null)
							markAddress(map,validAddr,countryCode,table.rows.item(addressIndex).cells.item(0).innerHTML,table.rows.item(addressIndex).cells.item(1).innerHTML,codes[addressIndex].value,table.rows.item(addressIndex).cells.item(0).innerHTML );
}
function markAddress(map,addr,countryCode,companyName,phone,code,web)
{
		if(addr=="error"){
		var addresses=document.getElementsByName("addr");
var table=document.getElementById("DetailTable");
var codes=document.getElementsByName("code");
		addressIndex++;
		if(addressIndex >= maxAddresses)return;

		var validAddr=validateAddress(addresses[addressIndex].value);
		if(validAddr != null)
			markAddress(map,validAddr,countryCode,table.rows.item(addressIndex).cells.item(0).innerHTML,table.rows.item(addressIndex).cells.item(1).innerHTML,codes[addressIndex].value,table.rows.item(addressIndex).cells.item(0).innerHTML );

	}
else
	if(addr.indexOf('lng')>-1 && addr.indexOf('lat')>-1)
	{
		var tmp=addr.split("lng=")[1].split(",");
		var lng=tmp[0];
		var lat=addr.split("lat=")[1];
		var tmpAddr=addr.split(";")[0];
	
	var LatLng = new GLatLng(lat,lng);
	markZoom(map,lat,lng,tmpAddr, companyName,phone,web,true);
	
	}
	else
		{
		if(map==null || typeof(map)=="undefined"){alert("map address parameter error");reutrn;}
		var geocoder = new GClientGeocoder();
		var addrLatLng;
		geocoder.setBaseCountryCode(countryCode);
		geocoder.getLocations(addr, function(response)
		{
			if(!response || response.Status.code!=200)
			{
			 if(response.Status.code==500)
			 	{;/*alert("google map server error");*/}
			 else
				;//alert(addr+" is not found error code C_"+response.Status.code);
			}
			else
				{
					var place=response.Placemark[0];
					markZoom(map,place.Point.coordinates[1],place.Point.coordinates[0],addr,companyName,phone,web,false);
					}
				}
				);
			}
		}

function createLogo(parentLayer)
{
	var logo = document.createElement("div");
	var url=document.createElement("a");
	var image=document.createElement("img");
	url.href="http://www.coresoft.com.au";
	logo.style.height="28px";
	logo.style.width="90px";
	logo.style.position="relative";
	logo.style.top= parseInt(parentLayer.style.height)-32+"px";
	logo.style.left="65px";
	image.src="http://www.coresoft.com.au/images/logo/MapPowerbyV5.png";
	image.style.height="30px";
	image.style.width="96px";
	image.style.border="0px";
	image.zIndex=65535;
	url.appendChild(image)
	logo.appendChild(url);
	return logo;

}
function getMap(mapWidth,mapHeight, mapBorderColor)
{
			
	if(typeof(mapWidth)=="undefined")
	{mapWidth="500";}
			
	if(typeof(mapHeight)=="undefined")
  	mapHeight="500";
			
	if(typeof(mapBorderColor)=="undefined")
		mapBorderColor="#ffffff";
			
	mapLayer=document.getElementById("map");

	if(mapLayer==null)
		return;
			
	fromLatLng=null;
	var map;
			
	var addresses=document.getElementsByName("addr");
	var table=document.getElementById("DetailTable");
	var codes=document.getElementsByName("code");

if(addresses.length == 0)return;

	if( document.getElementById("auregion")==null)
// window.location.href.toLowerCase().indexOf("prevpage")>-1 || window.location.href.toLowerCase().indexOf("goto")>-1)
	{
		
		mapLayer.style.height="250px";
		mapLayer.style.width="335px";
		map=new GMap2(mapLayer);
	  map.setMapType(G_NORMAL_MAP); 
	  mapZoomLevel=15;
		var validAddr=validateAddress(addresses[0].value);
		addressIndex=-1;
		if(addresses.length<maxAddresses)maxAddresses=addresses.length;
		if(addresses.length>0)
					addressIndex=0;
				else return;
				
		if(validAddr != null)
		{
			markAddress(map,validAddr,countryCode,"","","");
		}
	
	}
	else
		{
				map=new GMap2(mapLayer);
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
				/*map.setMapType(G_HYBRID_MAP);*/
				map.setMapType(G_NORMAL_MAP);
				mapLayer.appendChild(createLogo(mapLayer));		
				
				addressIndex=-1;
				if(addresses.length<maxAddresses)maxAddresses=addresses.length;
				if(addresses.length>0)
					addressIndex=0;
				else return;
					
	  		var address = location.href.split("FIELD01=");
			  	if(address.length>1 && address)
				  {   
						var len= address[1].indexOf("&")==-1 ? address[1].length:address[1].indexOf("&");
						var tempaddress=address[1].substring(0,len);
						if(tempaddress.indexOf("-")>-1)
						{
							fromAddress=tempaddress.replace(/-/ig," ");
			        markAddress(map,fromAddress,countryCode,"start","","");
						}
						else
							fromAddress=table.rows.item(addressIndex).cells.item(0).innerHTML;
					}
					var validAddr=validateAddress(addresses[addressIndex].value);
					if(validAddr != null)
					{
						
						markAddress(map,validAddr,countryCode,table.rows.item(addressIndex).cells.item(0).innerHTML,table.rows.item(addressIndex).cells.item(1).innerHTML,codes[addressIndex].value,table.rows.item(addressIndex).cells.item(0).innerHTML );
					}
			}
}