/** 
JavaScript Document
Functions for retrieving and POI information and creating POI markers
**/
var onload = true;
var currentHighlightedMarker;
/**
Populate the Information Tab with selected POI data
**/
function selectedPoiInfo(id, name){
	var xmlHttp2 = getXMLHttp();
	xmlHttp2.onreadystatechange = function(){
		if(xmlHttp2.readyState == 4){
			document.getElementById("poiInfo").innerHTML = xmlHttp2.responseText;
			if(satNav){
				selectedPoiSatNav();
			}
		}
	}
	mapMarker = reverseMarkers[id];
	if(mapMarker != undefined && mapMarker.packageName != undefined){
		if(currentHighlightedMarker){
			currentHighlightedMarker.setImage(rootImageDirectory+"mapIcons/"+currentHighlightedMarker.packageName+".png");
		}
		mapMarker.setImage(rootImageDirectory+"menuIcons/"+mapMarker.packageName+".png");
		currentHighlightedMarker = mapMarker;
	}
	
	xmlHttp2.open("GET", rootApplicationDirectory+"poiTabInformation.php?poid="+id, true); 
	xmlHttp2.send("");
}

/**
Populate the Sat nav Tab ready to download the POI data
**/
function selectedPoiSatNav(){
	var xmlHttp2 = getXMLHttp();
	xmlHttp2.onreadystatechange = function(){
		if(xmlHttp2.readyState == 4){
			document.getElementById("satNav").innerHTML = xmlHttp2.responseText;
		}
	}
	xmlHttp2.open("GET", rootApplicationDirectory+"satNavTab.php", true); 
	xmlHttp2.send("");
}

/**
Parse the encrypted response containing the layer information
**/
function parseLayersXML(response){
	xml = handlePOIResponse(response);
	var xmlDoc = GXml.parse(xml);	
	parseRootPOI(xmlDoc);
    var layers = xmlDoc.documentElement.getElementsByTagName("layer");

	for (var i = 0; i < layers.length; i++){
		var layerName = layers[i].getAttribute("id");
		var layerSize = layers[i].getAttribute("size");
		layerXML = layers[i];
		markerArray = parsePOIXML(layerXML, layerName);
		addPOILayer(markerArray,layerName, layerSize, i, layerXML.getAttribute("idPackage"));
	}
	document.getElementById("categoryCheckboxes").style.display = "block";
}

/**
Parse the root POI around which the layer POI's have been retrieved
**/
function parseRootPOI(xmlDoc){
	var layers = xmlDoc.documentElement.getElementsByTagName("rootLayer");
	for (var i = 0; i < layers.length; i++){
		var layerName = layers[i].getAttribute("id");
		layerXML = layers[i];
		marker = createRootMarker(layerXML, layerName);
		if(marker != 0){
			addRootPOILayer(marker, layerName);
		}
	}
}


/**
Parse the individual POIs from the xml
**/
function parsePOIXML(layerXML, layerName){
    var results = layerXML.getElementsByTagName("poi");
	if (results.length > 0) {
		markerArray = createPOIMarkers(results, layerName, layerXML);
		return markerArray;
	}
}

/**
Create the GMarkers for each pois in the layer and return 
**/
function createPOIMarkers(pois, layerName, layerXML){
	var markerArray = [];
	for (var i = 0; i < pois.length; i++){
		// Obtain the attributes of each marker
		var lat = parseFloat(pois[i].getAttribute("lat"));
		var lng = parseFloat(pois[i].getAttribute("lng"));
		var point = new GLatLng(lat,lng);               
		var id = parseFloat(pois[i].getAttribute("id"));
		var distance = parseFloat(pois[i].getAttribute("distance"));
	 	var title = pois[i].getAttribute("name")+" ("+distance+" km away)";
		
		var rootIcon = configureMarker(layerXML.getAttribute("idPackage"));
		var marker = new GMarker(point, {icon: rootIcon, title:title});
		marker.poiId = id;
		marker.packageName = layerXML.getAttribute("idPackage");
		GEvent.addListener(marker, "click", function(marker) {
			selectedPoiInfo(this.poiId, this.title);
		});
		markerArray.push(marker);
		reverseMarkers[pois[i].getAttribute("id")] = marker;
	}
	return markerArray;
}

/**
Create a marker for the root POI
**/
function createRootMarker(pois, layerName){
	var results = layerXML.getElementsByTagName("poi");
	// Obtain the attributes of each marker
	var lat = parseFloat(results[0].getAttribute("lat"));
	var lng = parseFloat(results[0].getAttribute("lng"));
	var point = new GLatLng(lat,lng);               
	var id = parseFloat(results[0].getAttribute("id"));
	var name = results[0].getAttribute("name");
	document.title = "Autopilot Concierge - "+name;
	selectedPoiInfo(id);
	if(!isNaN(lat)){
		map.setCenter(new GLatLng(lat, lng), mapZoomLevel);
		var cIcon = new GIcon();
		cIcon.image = rootImageDirectory+"elements/rootMarker.png";
		cIcon.iconSize = new GSize(32,32);
		cIcon.iconAnchor = new GPoint(16,32);
		var marker = new GMarker(point,{title:name, icon:cIcon});
		marker.poiId = id;
		marker.name = name;
		marker.title = name;
		GEvent.addListener(marker, "click", function(marker) {
			selectedPoiInfo(this.poiId);
		});
		return marker;
	}else{
		return 0;
	}
}

function configureMarker(idPackage){
	var cIcon = new GIcon();
	cIcon.image = rootImageDirectory+"mapIcons/"+idPackage+".png";
	cIcon.iconSize = new GSize(20,20)
	cIcon.iconAnchor = new GPoint(10,10)
	return cIcon;
}
