var map = null;
var geocoder = null;
var myPano;
var directions;
var directionsPanel;

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}

function initialize() {
  if (GBrowserIsCompatible()) {
	document.getElementById('searchBoxBranches').style.display='block';
	document.getElementById('map_canvas').style.display='block';
	map = new GMap2(document.getElementById("map_canvas"));
	map.setCenter(new GLatLng(54.3,-3.4), 5);

	map.removeMapType(G_HYBRID_MAP);
	var mapControl = new GMapTypeControl();
	map.addControl(mapControl);
	var mapControl2 = new GLargeMapControl();
	map.addControl(mapControl2);
	
	geocoder = new GClientGeocoder();
	directionsPanel = document.getElementById("route");
	directions = new GDirections(map, directionsPanel);
  }
}

function addBranches()
{
address = document.forms.searchBranchesForm.address.value;
if (address != '' && address != ' ')// added by MK
{
	//Add branches and agencies markers
	GDownloadUrl("./chelsea-branches.xml", function(data) {
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
	var infoText = '';
	for (var i = 0; i < markers.length; i++) {
	  var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
							  parseFloat(markers[i].getAttribute("lng")));
		//build info box (htmlText variable) - name, address, phone etc
		htmlText = '<div class="branchDataContainer"><h5 id="branchTitle">' + markers[i].getAttribute("name") + ' ' + markers[i].getAttribute("type") + '</h5>';

		//add photo (street view)
		if (markers[i].getAttribute("streetViewLat") && markers[i].getAttribute("streetViewLng") && markers[i].getAttribute("streetViewYaw") && markers[i].getAttribute("streetViewPitch") && markers[i].getAttribute("streetViewZoom"))
		htmlText = htmlText + '<a href="#streetView" class="noprint" onclick="showStreetView(' + 
								markers[i].getAttribute("streetViewLat") + ',' +
								markers[i].getAttribute("streetViewLng") + ',' +
								markers[i].getAttribute("streetViewYaw") + ',' +
								markers[i].getAttribute("streetViewPitch") + ',' +
								markers[i].getAttribute("streetViewZoom") + '); return true">Show street view</a><br><br>';
		if (markers[i].getAttribute("photoBranch"))
		htmlText = htmlText + '<p><a href="#streetView" class="noprint" onclick="showBranchPhoto(\'' + 
								markers[i].getAttribute("photoBranch") + '\'); return true">Show <span style="text-transform: lowercase">' + markers[i].getAttribute("type") + '</span> photo</a></p>';
									
		//add address
		htmlText = htmlText + '<div class="htmlTextColumn1">' +
				  markers[i].getAttribute("address1") + '<br>' +
				  markers[i].getAttribute("address2") + '<br>';
		if (markers[i].getAttribute("address3") != "") htmlText = htmlText + markers[i].getAttribute("address3") + '<br>';
		if (markers[i].getAttribute("address4") != "") htmlText = htmlText + markers[i].getAttribute("address4") + '<br>';
		htmlText = htmlText + markers[i].getAttribute("pc") + '<br><br>'; 

		//add phone and fax
		if (markers[i].getAttribute("telephone") != "") htmlText = htmlText + 'Phone: ' + markers[i].getAttribute("telephone") + '<br>';
		if (markers[i].getAttribute("fax") != "") htmlText = htmlText + 'Fax: ' + markers[i].getAttribute("fax");
		htmlText = htmlText + '</div>';

		//add opening hours
		htmlText = htmlText + '<div class="htmlTextColumn2">';
		if (markers[i].getAttribute("open") != "") htmlText = htmlText + 'Opening times:<br>' + markers[i].getAttribute("open") + '<br>';
		if (markers[i].getAttribute("open2") != "") htmlText = htmlText + markers[i].getAttribute("open2") + '<br>';
		if (markers[i].getAttribute("open3") != "") htmlText = htmlText + markers[i].getAttribute("open3") + '<br>';

		//add ATM
		if (markers[i].getAttribute("atm") == "Available") htmlText = htmlText + '<br>ATM available';
		htmlText = htmlText + '</div>';

		//additional info
		if (markers[i].getAttribute("info") != "") htmlText = htmlText + '<br clear=all>' + markers[i].getAttribute("info");

		//directions
	    var toAddress = markers[i].getAttribute("pc");
		htmlText = htmlText + '<br clear=all><div class="directionsContainer"><a href="#" class="noprint" onclick="showDirectionsLayer(); return false">Get directions</a> ';
		var toBranchDetails = markers[i].getAttribute("name") + ' ' + markers[i].getAttribute("type");
		htmlText = htmlText + '<div id="directionsFormLayer">to this <span>' + markers[i].getAttribute("type") + '</span> from: <form id="directionsForm" name="directionsForm" method=get action="#" onsubmit="getDirections(\'' + toAddress + '\', \' ' + toBranchDetails + ' \'); return false"><input type="text" name="directionsTo" id="directionsTo" value="" class="directionsToField"> <input type="image" src="/img/buttons/go.gif" value="Go!" class="directionsGoField"></form></div></div></div>'; //this.closeInfoWindow(); 
		
	map.addOverlay(createMarker(latlng, htmlText));
	}
	// Creates a marker with info window containing htmlText
    function createMarker(point, htmlText) {
      var ybsIcon = new GIcon();
      ybsIcon.image = "/img/chelsea-branch-marker.png";
	  ybsIcon.iconSize = new GSize(44, 43);
	  ybsIcon.iconAnchor = new GPoint(19, 38);
	  ybsIcon.infoWindowAnchor = new GPoint(5, 1);

	// Set up our GMarkerOptions object
      markerOptions = { icon:ybsIcon };
      var marker = new GMarker(point, markerOptions);

      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(htmlText);
		document.getElementById("branchDetails").innerHTML = htmlText; //print only
		document.getElementById("pano").innerHTML = ''; //clears any previous street views
		
		//revised tracking just to see branch name and nothing more
		selectedBranchNameVal = $("#branchTitle").text();
		// trim " Branch" text from the string
		selectedBranchName = selectedBranchNameVal.replace(' Branch','');
		// send hit to omniture
		selectedBranchTrack(selectedBranchName);
      });
      return marker;
    }
});
document.getElementById("pano").innerHTML = ''; //clears any previous street views
}
}


function showAddress(address) {
if (address == '' || address == ' ') alert(address + "Please enter town or postcode."); // added by MK
else {
  	if (address.indexOf("M") == 0 && address.indexOf("1") == 1 && address.indexOf(" ") == 2) // M1 with a space returns M1 motorway near Leicester - fix this
	 {
	  var manchesterBug = new Array();
	  manchesterBug = address.split('M1 ');
	  address = 'M1' + manchesterBug[1];
	 }
  	if (address.indexOf("m") == 0 && address.indexOf("1") == 1 && address.indexOf(" ") == 2)
	 {
	  var manchesterBug = new Array();
	  manchesterBug = address.split('m1 ');
	  address = 'm1' + manchesterBug[1];
	 }
 
  if(checkPostCode(address) == false)
  addressUK = address + ', UK';
  else addressUK = address + ', postcode';
  
  if (geocoder) {
		  geocoder.getLatLng(
			addressUK,
			function(point) {
			  if (!point) {
				alert(address + " not found");
			  } else {
				map.setCenter(point, 12); 
					  GDownloadUrl("chelsea-branches.xml", function(data) {
					  var xml = GXml.parse(data);
					  var markers = xml.documentElement.getElementsByTagName("marker");
					  var localBranch = 0; //localBranch = 1|0 on the visible map 
					  var sum = 0;
					  localBranches();
					  function localBranches() {
						  for (var i = 0; i < markers.length; i++) {
						  latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
													parseFloat(markers[i].getAttribute("lng")));
						  var bounds = map.getBounds();
						  var southWest = bounds.getSouthWest();
						  var northEast = bounds.getNorthEast();
						  var lngDelta = (northEast.lng() - southWest.lng()) / 19;
						  var latDelta = (northEast.lat() - southWest.lat()) / 19;
					  
						  if ((latlng.lng() > (southWest.lng() + lngDelta)) && 
							  (latlng.lng() < (northEast.lng() - lngDelta)) &&
							  (latlng.lat() > (southWest.lat() + latDelta)) && 
							  (latlng.lat() < (northEast.lat() - latDelta))) 
						  	{
							  localBranch = 1;
							  distanceToClosestBranch = point.distanceFrom(latlng)/1609.344;
							  if (distanceToClosestBranch > 20) 
							  	  {
								  document.getElementById('no-branches-nearby').style.display = 'block';
								  }
							}
							  else {localBranch = 0;}

						  sum = sum + localBranch;
						  if (sum > 0) i = markers.length; //one local branch found, stop looking
						  }
					  }
						var zoomNumber = 10;
						//check for branches and zoom out until at least one branch is found
						while (sum == 0) {
						  map.setCenter(point, zoomNumber); 
						  localBranches(); 
						  zoomNumber = zoomNumber - 1;
						}
				  });
			  }
			}
		  );
		}
	}
}

// Street View
var panoOpts = {
  features: {
    userPhotos: false
  }
};

function showStreetView(streetViewLat,streetViewLng,streetViewYaw,streetViewPitch,streetViewZoom)
{
  document.getElementById('pano').style.display = 'block';
  var myPano = new GStreetviewPanorama(document.getElementById("pano"), panoOpts);
  branchPhoto = new GLatLng(streetViewLat,streetViewLng);
  myPOV = {yaw:streetViewYaw,pitch:streetViewPitch,zoom:streetViewZoom};
  myPano.setLocationAndPOV(branchPhoto, myPOV);
  GEvent.addListener(myPano, "error", handleNoFlash);
}

function showBranchPhoto(branchPhoto)
{	
	document.getElementById("pano").innerHTML = '<img src="../../images/branches/' + branchPhoto + '.jpg">'
}

function handleNoFlash(errorCode) {
  if (errorCode == 603) {
	alert("Error: Flash doesn't appear to be supported by your browser");
	return;
  }
}  
function zoomOut() {
  var bounds = map.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var lngSpan = northEast.lng() - southWest.lng();
  var latSpan = northEast.lat() - southWest.lat();
}

// Directions 
function showDirectionsLayer()
{	  
if (document.getElementById('directionsFormLayer').style.display == 'inline') 
	document.getElementById('directionsFormLayer').style.display='none'
else document.getElementById('directionsFormLayer').style.display='inline';
}
function getDirections(toAddress,toBranchDetails) { 
var fromAddress = document.getElementById('directionsTo').value + ' UK GB Great Britain United Kingdom';
directions.load("from: " + fromAddress + " to: " + toAddress);
	  map.clearOverlays();
	  document.getElementById('directionsHeader').innerHTML = '<h2>Directions to ' + toBranchDetails + '</h2>';

}
//Clear any previous results - street view and directions
function clearResults()
{
directions.clear(); 
map.clearOverlays();
document.getElementById("pano").innerHTML = '';
document.getElementById('directionsHeader').innerHTML = '';
document.getElementById('no-branches-nearby').style.display = 'none';
}

// BRANCH FINDER SPECIFIC - OMNITURE TRACKING
//tracking update where the hash value is bound to a prop(props are custom omniture variables) and sent to omniture
function selectedBranchTrack(selectedBranchName) {	
	// BEFORE SENDING THE SELECTED BRANCH VALUE TO OMNITURE, RUN CHECK TO SEE WHAT THE HASH VALUE IS
	// THIS IS A CLEANUP TO ENSURE THAT IF URL HAS THE SOLE VALUE OF "#" THEN CHANGE THE VALUE SENT TO OMNITURE TO BLANK SO AS NOT TO CREATE A NEW ENTRY FOR "#"
	if (selectedBranchName == "") {
		// DO NOTHING
	}
	else {
		var s=s_gi('ybschelsea');
		s.linkTrackVars='prop4';
		s.linkTrackEvents='event1';
		s.prop4 = selectedBranchName;
		//console.log(s.prop4);	
		//alert(s.prop4);
		s.tl(this,'o','Selected Branch');	  
	}	
};

// Get rid of special characters
function searchMethodParser(searchMethod) {
	
	addressEntered = $('#address').val();
	addressEntered = addressEntered.replace(/\</g,'');
	addressEntered = addressEntered.replace(/\>/g,'');
	addressEntered = addressEntered.replace(/\'/g,'');
	addressEntered = addressEntered.replace(/\"/g,'');	
	addressEntered = addressEntered.replace(/\*/g,'');	
	addressEntered = addressEntered.replace(/\//g,'');
	addressEntered = addressEntered.replace(/\?/g,'');
	addressEntered = addressEntered.replace(/\;/g,'');
	searchMethod = addressEntered;	
	
	if (searchMethod == "" || searchMethod == "Search...") {
		
		// attempted submission of empty search - write error message
		$("#searchErrorMessage").html('Please enter a valid address'); 
		
	}	
	else {
		
		// either a geolocation or manual search has been executed
		initialize(searchMethod)
		
	}
	
}

