// JavaScript Document
var map;
var request;
var geocoder;

var dropAgents = new Array();
var colAgents = new Array();

function loadMap(field, targetDiv, section){
	
	getObjStyle(targetDiv).display = "block";
	getObjStyle(targetDiv).height = "350px";
	//getObjStyle(targetDiv).border = "1px solid #000";
	
	//set markers
	request = GXmlHttp.create();
	request.open('POST', 'googleMaps/locations2.php', true);
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	
	if(section == "drop"){
		request.onreadystatechange = createDropMarkerMap;
	} else {
		request.onreadystatechange = createColMarkerMap;
	}
	
	var soapLookup = "postcode=" + getObj(field).value;
	request.send(soapLookup);

}

function centerDropMap(point){
	if (!point) {
		getObj('dropTableDiv').innerHTML = "<span class=\"orange\">Postcode not found.</span>";
		getObjStyle('dropTableDiv').display = "block";
	} else {
		map.setCenter(point, 11);
	}
}
function centerColMap(point){
	if (!point) {
		getObj('collectTableDiv').innerHTML = "<span class=\"orange\">Postcode not found.</span>";
		getObjStyle('collectTableDiv').display = "block";
	} else {
		map.setCenter(point, 11);
	}
}


function createDropMarkerMap(){
	if (request.readyState != 4) {
		getObj('dropTableDiv').innerHTML = "Retrieving results...";
		getObjStyle('dropTableDiv').display = "block";
	}
	if (request.readyState == 4) {
		var xmlDoc = request.responseXML;
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		
		var errorField = xmlDoc.documentElement.getElementsByTagName('errorField');
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMessage = errorField[0].getAttribute("errorMessage");
		
		if(errorFlag != 1){
			map = new GMap2(getObj('dropMapWrapper'));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());

			for (var i = 0; i < markers.length; i++) {
			
				theaddy = "<div class=\"mapInfo\" >";
				theaddy +=	"";
				theaddy += 	"<p class=\"storeName\">" + markers[i].getAttribute("siteName") + "</p>";
				theaddy += 	markers[i].getAttribute("address") + "<br/>" + markers[i].getAttribute("city") + "<br/>" + markers[i].getAttribute("county") + " " + markers[i].getAttribute("postcode") + "";
				theaddy +=		"<p><strong>Opening Hours: </strong></p>";
				theaddy +=		"Mon-Fri: ";
				theaddy +=		"" + markers[i].getAttribute("mondayOpen") + "-" + markers[i].getAttribute("mondayClose") + "<br/>";
				theaddy +=		"Sat: ";
				theaddy +=		"" + markers[i].getAttribute("saturdayOpen") + "-" + markers[i].getAttribute("saturdayClose") + "<br/>";
				theaddy +=		"Sun: "
				theaddy +=		"" + markers[i].getAttribute("sundayOpen") + "-" + markers[i].getAttribute("sundayClose") + "";
				theaddy +=	"<div class=\"clear\"></div><p><a href=\"#top\" onclick=\"pageTracker._trackEvent('Book', 'selectDropStore'); setStorePoint(" + i + ", 'drop');\" class=\"button\" style=\"margin-left:0\"><span>Select</span></a></p></div>";
				
				var agent = new agentObject(markers[i].getAttribute("siteNumber"), 
											markers[i].getAttribute("siteName"), 
											markers[i].getAttribute("dclSiteName"), 
											markers[i].getAttribute("address"), 
											markers[i].getAttribute("city"), 
											markers[i].getAttribute("county"), 
											markers[i].getAttribute("postcode"), 
											markers[i].getAttribute("mondayOpen"), 
											markers[i].getAttribute("mondayClose"), 
											markers[i].getAttribute("tuesdayOpen"), 
											markers[i].getAttribute("tuesdayClose"), 
											markers[i].getAttribute("wednesdayOpen"), 
											markers[i].getAttribute("wednesdayClose"), 
											markers[i].getAttribute("thursdayOpen"), 
											markers[i].getAttribute("thursdayClose"), 
											markers[i].getAttribute("fridayOpen"), 
											markers[i].getAttribute("fridayClose"), 
											markers[i].getAttribute("saturdayOpen"), 
											markers[i].getAttribute("saturdayClose"), 
											markers[i].getAttribute("sundayOpen"), 
											markers[i].getAttribute("sundayClose"), 
											markers[i].getAttribute("meters"), 
											markers[i].getAttribute("miles"), 
											markers[i].getAttribute("hdnCode"));	
				dropAgents[i] = agent;
				
				//create a osgb coordinate
				osgb=new GT_OSGB();
				osgb.setGridCoordinates(markers[i].getAttribute("gridx"), markers[i].getAttribute("gridy"));
				
				//convert to a wgs84 coordinate
				wgs84 = osgb.getWGS84();
				//now work with wgs84.latitude and wgs84.longitude
				//alert("Latitude "+ wgs84.latitude + " Longitude "+wgs84.longitude);
				
				if(i == 0){
					var center_point = new GLatLng(parseFloat(wgs84.latitude), parseFloat(wgs84.longitude));
					centerDropMap(center_point);
				}

				var point = new GPoint(parseFloat(wgs84.longitude),parseFloat(wgs84.latitude));
				dropPointMarker = createInfoMarker(point, theaddy, i);
				map.addOverlay(dropPointMarker);
			}
			
			//iniate the tablular results
			if(dropAgents.length > 3){
				showTableMap(0, 3, 'drop');
			} 
			else if (dropAgents.length == 0) {
			getObj('dropTableDiv').innerHTML = "<span class=\"orange\">Sorry, we are experiencing a technical fault which we are working to resolve.</span>";
			getObjStyle('dropTableDiv').display = "block";
			getObjStyle('dropMapWrapper').display = "none";
			}
			else {
				showTableMap(0, dropAgents.length, 'drop');
			}
		} else {
			getObj('dropTableDiv').innerHTML = "<span class=\"orange\">"+ errorMessage +"</span>";
			getObjStyle('dropMapWrapper').display = "none";
		}
	}
}
function createColMarkerMap(){
	if (request.readyState != 4) {
		getObj('collectTableDiv').innerHTML = "Retrieving results...";
		getObjStyle('collectTableDiv').display = "block";
	}

	if (request.readyState == 4) {
		var xmlDoc = request.responseXML;
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		
		var errorField = xmlDoc.documentElement.getElementsByTagName('errorField');
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMessage = errorField[0].getAttribute("errorMessage");
		
		if(errorFlag != 1){
			map = new GMap2(getObj('collectMapWrapper'));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());

			for (var i = 0; i < markers.length; i++) {
			
				theaddy = "<div class=\"mapInfo\" >";
				theaddy +=	"";
				theaddy += 	"<p class=\"storeName\">" + markers[i].getAttribute("siteName") + "</p>";
				theaddy += 	markers[i].getAttribute("address") + "<br/>" + markers[i].getAttribute("city") + "<br/>" + markers[i].getAttribute("county") + " " + markers[i].getAttribute("postcode") + "";
				theaddy +=		"<p><strong>Opening Hours: </strong></p>";
				theaddy +=		"Mon-Fri: ";
				theaddy +=		"" + markers[i].getAttribute("mondayOpen") + "-" + markers[i].getAttribute("mondayClose") + "<br/>";
				theaddy +=		"Sat: ";
				theaddy +=		"" + markers[i].getAttribute("saturdayOpen") + "-" + markers[i].getAttribute("saturdayClose") + "<br/>";
				theaddy +=		"Sun: "
				theaddy +=		"" + markers[i].getAttribute("sundayOpen") + "-" + markers[i].getAttribute("sundayClose") + "";
				theaddy +=	"<div class=\"clear\"></div><p><a href=\"#collectPointDiv\" onclick=\"pageTracker._trackEvent('Book', 'selectCollStore'); setStorePoint(" + i + ", 'coll');\" class=\"button\" style=\"margin-left:0\"><span>Select</span></a></p></div>";
				
				
				
				var agent = new agentObject(markers[i].getAttribute("siteNumber"), 
											markers[i].getAttribute("siteName"), 
											markers[i].getAttribute("dclSiteName"), 
											markers[i].getAttribute("address"), 
											markers[i].getAttribute("city"), 
											markers[i].getAttribute("county"), 
											markers[i].getAttribute("postcode"), 
											markers[i].getAttribute("mondayOpen"), 
											markers[i].getAttribute("mondayClose"), 
											markers[i].getAttribute("tuesdayOpen"), 
											markers[i].getAttribute("tuesdayClose"), 
											markers[i].getAttribute("wednesdayOpen"), 
											markers[i].getAttribute("wednesdayClose"), 
											markers[i].getAttribute("thursdayOpen"), 
											markers[i].getAttribute("thursdayClose"), 
											markers[i].getAttribute("fridayOpen"), 
											markers[i].getAttribute("fridayClose"), 
											markers[i].getAttribute("saturdayOpen"), 
											markers[i].getAttribute("saturdayClose"), 
											markers[i].getAttribute("sundayOpen"), 
											markers[i].getAttribute("sundayClose"), 
											markers[i].getAttribute("meters"), 
											markers[i].getAttribute("miles"), 
											markers[i].getAttribute("hdnCode"));	
				colAgents[i] = agent;
				
				//create a osgb coordinate
				osgb=new GT_OSGB();
				osgb.setGridCoordinates(markers[i].getAttribute("gridx"), markers[i].getAttribute("gridy"));
				
				//convert to a wgs84 coordinate
				wgs84 = osgb.getWGS84();
				//now work with wgs84.latitude and wgs84.longitude
				//alert("Latitude "+ wgs84.latitude + " Longitude "+wgs84.longitude);
				
				if(i == 0){
					var center_point = new GLatLng(parseFloat(wgs84.latitude), parseFloat(wgs84.longitude));
					centerColMap(center_point);
				}
				
				var point = new GPoint(parseFloat(wgs84.longitude),parseFloat(wgs84.latitude));
				dropPointMarker = createInfoMarker(point, theaddy, i);
				map.addOverlay(dropPointMarker);
			}
			
			//iniate the tablular results
			if(colAgents.length > 3){
				showTableMap(0, 3, 'coll');
			} 
			else if (colAgents.length == 0) {
			getObj('collectTableDiv').innerHTML = "<span class=\"orange\">Sorry, there are no results for this postcode.</span>";
			getObjStyle('collectTableDiv').display = "block";
			getObjStyle('collectMapWrapper').display = "none";
			}
			else {
				showTableMap(0, colAgents.length, 'coll');
			}
		} else {
			getObj('collectTableDiv').innerHTML = "<span class=\"orange\">"+ errorMessage +"</span>";
			getObjStyle('collectMapWrapper').display = "none";
		}
	}
}

function showTableMap(startCount, endCount, section){
	
	var agents = new Array();
	
	if(section == "drop"){
		agents = dropAgents;
	} else {
		agents = colAgents;
	}

	var output = "<p>The map shows the 20 nearest Collect+ stores</p>";
	
	var maxRecords = agents.length;
	var remainder = maxRecords % 3;
	
	var tabs = "";
	
	var secondVal = 0;
	
	for(var i = 1; i <= maxRecords; i = i+3){
		if((i + 2) <= maxRecords){
			
			secondVal = secondVal + 3;
			
		} else {
			
			secondVal = secondVal + remainder;
			
		}
		if(i == secondVal){
			tabs += "<a href=\"#top\" class=\"link\" onclick=\"showTableMap("+ parseInt(i - 1) + ", " + secondVal + ", '" + section + "');\" >[" + i + "]</a> ";
		} else {
			tabs += "<a href=\"#top\" class=\"link\" onclick=\"showTableMap("+ parseInt(i - 1) + ", " + secondVal + ", '" + section + "');\" >[" + i + "-" + secondVal + "]</a> ";
		}
	}
	
	for (var i = startCount; i < endCount; i++) {
	
	    var letter = String.fromCharCode("A".charCodeAt(0) + i);

		output += "<div class=\"tableBack\">";
			output += "";
			output += "<p class=\"storeName\"><img src=\"http://www.google.com/mapfiles/marker" + letter + ".png\" border=\"0\" />&nbsp;";
				output += "" + agents[i].siteName + "&nbsp;&nbsp;&nbsp;";
					
			if(section == "drop"){
				output += "<a href=\"#\" onclick=\"pageTracker._trackEvent('Book', 'selectDropStore'); setStorePoint(" + i + ", 'drop');\">Select</a></p>";
			} else {
				output += "<a href=\"#collectPointDiv\" onclick=\"pageTracker._trackEvent('Book', 'selectCollStore'); setStorePoint(" + i + ", 'coll');\">Select</a></p>";
			}
				output += "<p class=\"distance\">(Distance from this Post Code: " + agents[i].miles + " miles)</p>";
			output += "";
			output += "";
				output += "<div class=\"storeAddress\">" + agents[i].address + "<br/> " + agents[i].city + "<br/> " + agents[i].county + "<br/> " + agents[i].postcode + "</div>";
			output += "";
			output += "";
				output += "<div class=\"openingTimes\"><p>Opening Times:</p>";
				output += "Mon - Fri: " + agents[i].mondayOpen + "-" + agents[i].mondayClose +"<br/>";
				output += "Sat: " + agents[i].saturdayOpen + "-" + agents[i].saturdayClose + "<br/>";
				output += "Sun: " + agents[i].sundayOpen + "-" + agents[i].sundayClose;
				output += "</div>";
			
			
			output += "";
		output += "</div>";
		output += "";
	}
	
	output += "<br/><br/><br/><p class=\"moreResults\">See more results:<br/> " + tabs +"</p><div class=\"clear\"></div>";
	
	if(section == "drop"){
		getObj('dropTableDiv').innerHTML = output;
		getObjStyle('dropTableDiv').display = "block";
		//getObjStyle('dropPointDiv').borderBottom = "1px solid #ccc";
		getObjStyle('dropPointDiv').paddingBottom = "10px";
	} else {
		getObj('collectTableDiv').innerHTML = output;
		getObjStyle('collectTableDiv').display = "block";
		//getObjStyle('collectPointDiv').borderBottom = "1px solid #ccc";
		getObjStyle('collectPointDiv').paddingBottom = "10px";
	}
	
}

function setStorePoint(i, section){
	var agents = new Array();
	
	if(section == "drop"){
		var storePointCallback = dropLookupState;
		agents = dropAgents;
	} else {
		var storePointCallback = collectLookupState;
		agents = colAgents;
	}

	var storeData = "section=" + section;
	storeData += "&siteNumber=" + agents[i].siteNumber;
	storeData += "&siteName=" + escape(agents[i].siteName);
	storeData += "&dclSiteName=" + escape(agents[i].dclSiteName);
	storeData += "&address=" + escape(agents[i].address);
	storeData += "&city=" + escape(agents[i].city);
	storeData += "&county=" + escape(agents[i].county);
	storeData += "&postcode=" + agents[i].postcode;
	storeData += "&mondayOpen=" + agents[i].mondayOpen;
	storeData += "&mondayClose=" + agents[i].mondayClose;
	storeData += "&tuesdayOpen=" + agents[i].tuesdayOpen;
	storeData += "&tuesdayClose=" + agents[i].tuesdayClose;
	storeData += "&wednesdayOpen=" + agents[i].wednesdayOpen;
	storeData += "&wednesdayClose=" + agents[i].wednesdayClose;
	storeData += "&thursdayOpen=" + agents[i].thursdayOpen;
	storeData += "&thursdayClose=" + agents[i].thursdayClose;
	storeData += "&fridayOpen=" + agents[i].fridayOpen;
	storeData += "&fridayClose=" + agents[i].fridayClose;
	storeData += "&saturdayOpen=" + agents[i].saturdayOpen;
	storeData += "&saturdayClose=" + agents[i].saturdayClose;
	storeData += "&sundayOpen=" + agents[i].sundayOpen;
	storeData += "&sundayClose=" + agents[i].sundayClose;
	storeData += "&meters=" + agents[i].meters;
	storeData += "&miles=" + agents[i].miles;
	storeData += "&hdnCode=" + agents[i].hdnCode;
	
	processajax ('php/setStorePoint.php', storePointCallback, "post", storeData);
}

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);	

function createInfoMarker(point, theaddy, index) {
	// Create a lettered icon for this point using our icon class
    var letter = String.fromCharCode("A".charCodeAt(0) + index);
    var letteredIcon = new GIcon(baseIcon);
    letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
 
    // Set up our GMarkerOptions object
    markerOptions = { icon:letteredIcon };
	
	var marker = new GMarker(point, markerOptions);
			
	GEvent.addListener(marker, "click",	function() {
			marker.openInfoWindowHtml(theaddy);
		}
	)
	return marker;
}
function agentObject(siteNumber, siteName, dclSiteName, address, city, county, postcode, mondayOpen, mondayClose, tuesdayOpen, tuesdayClose, wednesdayOpen, wednesdayClose, thursdayOpen, thursdayClose, fridayOpen, fridayClose, saturdayOpen, saturdayClose, sundayOpen, sundayClose, meters, miles, hdnCode){
	this.siteNumber = siteNumber;
	this.siteName = siteName;
	this.dclSiteName = dclSiteName;
	this.address = address;
	this.city = city;
	this.county = county;
	this.postcode = postcode;
	this.mondayOpen = mondayOpen;
	this.mondayClose = mondayClose;
	this.tuesdayOpen = tuesdayOpen;
	this.tuesdayClose = tuesdayClose;
	this.wednesdayOpen = wednesdayOpen;
	this.wednesdayClose = wednesdayClose;
	this.thursdayOpen = thursdayOpen;
	this.thursdayClose = thursdayClose;
	this.fridayOpen = fridayOpen;
	this.fridayClose = fridayClose;
	this.saturdayOpen = saturdayOpen;
	this.saturdayClose = saturdayClose;
	this.sundayOpen = sundayOpen;
	this.sundayClose = sundayClose;
	this.meters = meters;
	this.miles = miles;
	this.hdnCode = hdnCode;
}