/**
 *  IA Map Widget
 * @param sElementId ID of DIV (or other) element in which to render the map
 * @param p_config Configuration
 * @return
 */
var IAMapWidget = function (sElementId, results, p_config) {
		
	var map;
	var ypHash = {};
	var redDot;
	var bigRedDot;
	var prevHlRec;
	
	/* Constructor */
	
	map = new  YMap(document.getElementById(sElementId));

	// Array of YGeoPoint objects
	var points = [];
	
	
	map.addZoomLong();

	redDot = new YImage(); 
	redDot.src = ROOT_LEVEL + '/assets/red5.png';
	redDot.size = new YSize(5,5); 
	redDot.offsetSmartWindow = new YCoordPoint(3,3);
	
	bigRedDot = new YImage(); 
	bigRedDot.src = ROOT_LEVEL + '/assets/red16.png';
	bigRedDot.size = new YSize(16,16); 
	bigRedDot.offsetSmartWindow = new YCoordPoint(8,8);
	
	for (var i = 0; i < results.length; i++) {
		var rec = results[i];
		if (rec == null) {
			continue;
		}
		
		ypHash[rec.id] = rec;
		
		// Sanity check. TODO: Remove in production.
		if (rec.lat < 40.0) {
			continue;
		}
		
		var point = new YGeoPoint(rec.lat,rec.lon);
		points.push(point);
		var marker = createYMarker( point, createBubbleText(rec), redDot);
		map.addOverlay(marker);
		rec.marker = marker;
	}
	
	if (points.length > 0) {
		var bestZaC = map.getBestZoomAndCenter(points);
		var bestZoom = bestZaC.zoomLevel;
		if (bestZoom < 5) bestZoom = 5;
		map.drawZoomAndCenter(bestZaC.YGeoPoint, bestZoom);
	} else {
		map.drawZoomAndCenter(new YGeoPoint(53.4,-7.6),12);
	}
	
	// End of Constructor
	
	
	
	function createYMarker(geopoint, swtext, markerImage) { 
		var marker = new YMarker(geopoint,markerImage);
		marker.setSmartWindowColor("blue");
		marker.addAutoExpand(swtext);
		YEvent.Capture(marker,EventsList.MouseClick, function() { 
			marker.openSmartWindow(swtext)
		}); 
		return marker; 
	}
	function createBubbleText (rec) {
	 	var btext = "<a href=\""
			+ (rec.path_to_yp ? rec.path_to_yp : "")
			+ "yp-" + rec.id + ".html\">" + rec.name
			+ "</a>";
		if (rec.image_id) {
			btext += "<br /><img src=\"" + ROOT_LEVEL + "/image/tn/"
			+ rec.image_id + ".jpg\"/>";
		}
		return btext;
	}


	return {
		highlight:  function (ypId) {
			var yp = ypHash[ypId];
			if (yp == null) {
				return;
			}
		
			var point;
		
			// If one is already highlighted, replace with regular marker
			if (prevHlRec) {
				map.removeOverlay(prevHlRec.marker);
				point = new YGeoPoint (prevHlRec.lat,prevHlRec.lon);
				map.addOverlay(createYMarker( point, createBubbleText(yp), redDot));
			}
		
			// Replace regular marker with highlight marker
			point = new YGeoPoint (yp.lat,yp.lon);
			map.removeOverlay(yp.marker);
			yp.marker=createYMarker( point, createBubbleText(yp), bigRedDot);
			map.addOverlay(yp.marker);
		
			//yp.marker.openAutoExpand();
			//map.panToLatLon(point);
			//yp.marker.changeImage(bigRedDot); 
			//map.drawZoomAndCenter(new YGeoPoint(yp.lat,yp.lon),12);
			
			prevHlRec = yp;
		}
	}
	// End public section

};



	function createSinglePointMarker(geopoint, num, subcategory, swtext) { 
		var myImage = new YImage(); 
		myImage.src = ROOT_LEVEL + '/assets/red16.png';
		myImage.size = new YSize(16,16); 
		myImage.offsetSmartWindow = new YCoordPoint(8,8); 
 		var marker = new YMarker(geopoint,myImage); 
 		marker.setSmartWindowColor("blue");
		marker.addAutoExpand(swtext);
		YEvent.Capture(marker,EventsList.MouseClick, function() {
			marker.openSmartWindow(swtext)
		}); 
		return marker; 
	} 
	
/**
 * Draw map showing location of YP
 */
function drawYPMap (ypId, ypName, latitude, longitude) {	
	map = new  YMap(document.getElementById('mapContainer'));
	map.addZoomLong();
	var myPoint = new YGeoPoint(latitude,longitude);
	map.drawZoomAndCenter(myPoint, 6);
	map.addOverlay(createSinglePointMarker(myPoint, 1, "(subcat)", ypName));
	
	/*
	 * Create button for print map
	 */
	var buttonDivEl = YUtility.createNode('div','main');
	var buttonDivStyle = {zIndex:2};
	YUtility.setStyle(buttonDivEl,buttonDivStyle);
	var buttonEl = document.createElement("button");
	buttonDivEl.appendChild(buttonEl);
	buttonEl.innerHTML = "Open Map Window";
	YAHOO.util.Event.addListener(buttonEl,"click", function (e) {
		mapWindow = window.open("http://cms.galway.net/IA/jsp/itinerary/popup-map.jsp?id=" + ypId
		+"&lat=" + latitude + "&lon=" + longitude + "&name=" + encodeURIComponent(ypName), 
		'printMap', 
		'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=600'
		);
	});
	
	
	var customOverlay = new YCustomOverlay(new YCoordPoint(120,325), buttonDivEl);
	map.addOverlay(customOverlay);
	
}

