/*
*
*	Helper function
*
*/
function xmlUnescape (phpEncodedString) {
	
	encodedString = "" + phpEncodedString;
	while (true) {
		var i = encodedString . indexOf ('+');
		if (i < 0)
			break;
		encodedString = encodedString . substring (0, i) + '%20' +
			encodedString . substring (i + 1, encodedString . length);
	}
	return unescape (encodedString);
	
}

/*
*
*	Creates the map for the gallery thumbnails
*
*/
function galleryGeoCodeMap(markers_xml, lati, longi, bubble_gallery, map_type, zoom_in) {
	
	var galleryGeoCodeMapLatlng = new google.maps.LatLng(lati,longi);
	if (null==zoom_in) {
		zoom_in = 2;
	}
	var galleryGeoCodeMapOptions = {
		zoom: zoom_in,
		center: galleryGeoCodeMapLatlng,
		mapTypeId: map_type,
		streetViewControl: false,
		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
		navigationControlOptions: {style: google.maps.NavigationControlStyle.DEFAULT},
		keyboardShortcuts: false
	};
	var map = new google.maps.Map(document.getElementById("map_gallery"), galleryGeoCodeMapOptions);
	
	var data = xmlUnescape(markers_xml);
	var xml = GXml.parse(data);
	
	var simpleMarkers = xml.documentElement.getElementsByTagName("markerSimple");
	if (null!=simpleMarkers) {
		for (var k = 0; k < simpleMarkers.length; k++) {
			
			var pointSimple = new google.maps.LatLng(parseFloat(simpleMarkers[k].getAttribute("lat")),
													 parseFloat(simpleMarkers[k].getAttribute("lng")));
			var gurl		= simpleMarkers[k].getAttribute("gurl");
			var name		= simpleMarkers[k].getAttribute("name");
			var img			= simpleMarkers[k].getAttribute("img");
			var imgWidth	= simpleMarkers[k].getAttribute("imgWidth");
			var imgHeight	= simpleMarkers[k].getAttribute("imgHeight");
			var isLScpe		= simpleMarkers[k].getAttribute("isLscape");
			var desc		= simpleMarkers[k].getAttribute("desc");
			var type		= simpleMarkers[k].getAttribute("type");
			
			var markerSimple = createMarkerSimple(map, pointSimple, gurl, name, img, isLScpe, desc, type, bubble_gallery, imgWidth, imgHeight);
			markerSimple.setMap(map);
		}
	}
	
	var complexMarkers = xml.documentElement.getElementsByTagName("markerComplex");
	if (null!=complexMarkers) {
		
		for (var i = 0; i < complexMarkers.length; i++) {
			var pointComplex = new google.maps.LatLng(parseFloat(complexMarkers[i].getAttribute("lat")),
													  parseFloat(complexMarkers[i].getAttribute("lng")));
			var complexMarkersChildren = complexMarkers[i].getElementsByTagName("markerComplexChild");
			
			var htmlTemp = "";
			var tableA = '<table border="0"><tbody>';
			var tableZ = '</tbody></table>';
			
			for (var j = 0; j < complexMarkersChildren.length; j++) {
			
				var gurl		= complexMarkersChildren[j].getAttribute("gurl");
				var name		= complexMarkersChildren[j].getAttribute("name");
				var img			= complexMarkersChildren[j].getAttribute("img");
				var imgWidth	= complexMarkersChildren[j].getAttribute("imgWidth");
				var imgHeight	= complexMarkersChildren[j].getAttribute("imgHeight");
				var isLScpe		= complexMarkersChildren[j].getAttribute("isLscape");
				var desc		= complexMarkersChildren[j].getAttribute("desc");
				
				imgOrient = 'width="'+imgWidth+'" height="'+imgHeight+'"';
				
				htmlTemp = htmlTemp + "<tr><th rowspan='2'><a href='" + gurl + "' title='" + name + "'><img src='" + img + "' + '" + imgOrient + "' class='thumbnail' border='0' align='left' hspace='8' vspace='4' alt='" + name + "' /></a></th><td style='height:30px;'><a href='" + gurl + "' title='" + name + "'><b>" + name + "</b></a></td></tr><tr><td style='height:30px;'><p>" + desc + "</p></td></tr>";
				
				if (j < complexMarkersChildren.length-1) {
					htmlTemp = htmlTemp + "<tr><td style='height:10px;'></td><td style='height:10px;'></td></tr>";
				}
			}
			
			var htmlComplex = tableA + htmlTemp + tableZ;
			var markerComplex = createMarkerComplex(map, pointComplex, htmlComplex, bubble_gallery);
			markerComplex.setMap(map);
		}
	}
	
}

/*
*
*	Helper function
*
*/
function createMarkerSimple(map_in, point, gurl, name, img, isLScpe, desc, type, bubble_gallery, imgWidth, imgHeight) {
	
	var markerSimple = new google.maps.Marker({
		position: point,
		map: map_in
	});
	
	if (bubble_gallery != '') {
		var iconGallery = new google.maps.MarkerImage(bubble_gallery,
			new google.maps.Size(32,37),
			new google.maps.Point(0,0),
			new google.maps.Point(0,37));
		markerSimple.setIcon(iconGallery);
	}
	
	if (type == 'gallery') {
		
		imgOrient = 'width="'+imgWidth+'" height="'+imgHeight+'"';
		
		var html = "<table border='0'><tbody><tr><th rowspan='2'><a href='" + gurl + "' title='" + name + "'><img src='" + img + "' + '" + imgOrient + "' class='thumbnail' border='0' align='left' hspace='8' vspace='4' alt='" + name + "' /></a></th><td style='height:30px;'><a href='" + gurl + "' title='" + name + "'><b>" + name + "</b></a></td></tr><tr><td style='height:30px;'><p>" + desc + "</p></td></tr></tbody></table>";
	} else {
		var html = "<b>" + name + "</b><br><p>" + desc + "</p>";
	}
	
	var infoWindow = new google.maps.InfoWindow({
	    content: html
	});
	
	google.maps.event.addListener(markerSimple, 'click', function() {
	  infoWindow.open(map_in,markerSimple);
	});
	
	return markerSimple;
}

/*
*
*	Helper function
*
*/
function createMarkerComplex(map_in, point, html, bubble_gallery) {
	
	var markerComplex = new google.maps.Marker({
		position: point,
		map: map_in
	});
	
	if (bubble_gallery != '') {
		var iconGallery = new google.maps.MarkerImage(bubble_gallery,
			new google.maps.Size(32,37),
			new google.maps.Point(0,0),
			new google.maps.Point(0,37));
		markerComplex.setIcon(iconGallery);
	}
	
	var infoWindow = new google.maps.InfoWindow({
	    content: html
	});
	
	google.maps.event.addListener(markerComplex, 'click', function() {
	  infoWindow.open(map_in,markerComplex);
	});
	
	return markerComplex;
}

