var yMapMarkers= new Object();

function createYMapMarker(location, data, id, swcontent, icon) {
	var marker = null;
	
	if (typeof icon == 'object') {
		var marker = new YMarker(location, id, icon);
	} else {
		var marker = new YMarker(location, id);
	}
	var label = data.label;
	marker.addLabel(label);
	YEvent.Capture(marker, EventsList.MouseClick, function() { focusYMapMarker(data.name); });
	return marker;
}

// Add all the markers to the map
function addYMapMarkers(map, jsonobj, menuId, detailId, initialMarkerIdx) {
	var markers = jsonobj.markers;
	var menuObj= document.getElementById(menuId);
	var detailObj= document.getElementById(detailId);
	var hasMenu = (menuObj == null) ? false : true;
	var hasDetail = (menuObj == null) ? false : true;
	var initialMarker= '';
	if (typeof initialMarkerIdx != 'number' || initialMarkerIdx >= markers.marker.length) {
		initialMarkerIdx = 0;
	}
	
	for(var idx = 0; idx < markers.marker.length; idx++) {
		var markerName = markers.marker[idx].name;
		var yMapPoint= null;
		var yMapPointArray= new Array();
        
        // determine array of points
		if (!('lattitude' in markers.marker[idx]) || !('longitude' in markers.marker[idx])) {
			if (markers.marker[idx].address.length > 0) yMapPointArray.push(markers.marker[idx].address);
			if (markers.marker[idx].city.length > 0) yMapPointArray.push(markers.marker[idx].city);
			if (markers.marker[idx].state.length > 0) yMapPointArray.push(markers.marker[idx].state);
			if (markers.marker[idx].zip.length > 0) yMapPointArray.push(markers.marker[idx].zip);
			yMapPoint= yMapPointArray.join(', ');
		} else {
			yMapPoint= new YGeoPoint(
				parseFloat(markers.marker[idx].lattitude),
			    parseFloat(markers.marker[idx].longitude)
			);
		}
		
		// add the item to the menu UL
		if (hasMenu == true) {
			menuObj.innerHTML += '<li id="' + menuId + idx + '"><a href="javascript:focusYMapMarker(' + "'" + markerName + "'" + ');">' + markerName + '</a></li>';
		}
		// add the item's amentities
		if (hasDetail == true) {
			detailObj.innerHTML += '<div id="' + detailId + idx + '" style="display:none;">'
				 + markers.marker[idx].amenities
				 + '</div>';
		}
		// build smartwindow pop-up
		var yMapSWContent= "<div style='width: 150px; max-width: 150px; margin: 0 3px 2px 3px;'>" 
				 + "<b>" + markers.marker[idx].name + "</b><br />" 
				 + markers.marker[idx].address + "<br />"
				 + markers.marker[idx].city + ',' + markers.marker[idx].state + " " + markers.marker[idx].zip + "<br />"
				 + "<b>" + markers.marker[idx].manager + "</b><br />" 
				 + markers.marker[idx].phone + "<br /><br />" 
				 + "<a style=\"color:blue;\" href='" + markers.marker[idx].url + "'>" 
				 + markers.marker[idx].link + "</a><br /><br />"
				 + markers.marker[idx].description + "</div>";
		
		var icon = null;
		if ('iconurl' in markers.marker[idx]) {
			icon = new YImage();
			icon.src = markers.marker[idx].iconurl;
			icon.size = new YSize(markers.marker[idx].iconheight, markers.marker[idx].iconwidth);
			icon.offsetSmartWindow(0, 0);
		}
		
		// put the points on the map
		var yMapMarker = createYMapMarker(yMapPoint, markers.marker[idx], markerName, yMapSWContent, icon);
		yMapMarkers[markerName] = new Object();
		yMapMarkers[markerName]['marker'] = yMapMarker;
		yMapMarkers[markerName]['swcontent'] = yMapSWContent;
		if (hasMenu == true) {
			yMapMarkers[markerName]['menuidx'] = menuId + idx;
		}
		if (hasDetail == true) {
			yMapMarkers[markerName]['detailidx'] = detailId + idx;
		}
		if (idx == initialMarkerIdx) {
			initialMarker = markerName;
		}
		
		map.addOverlay(yMapMarker);
	}

	focusYMapMarker(initialMarker);
}

function focusYMapMarker(id) {
	var marker = yMapMarkers[id]['marker'];
	marker.openSmartWindow(yMapMarkers[id]['swcontent']);
	
	var hasMenu = ('menuidx' in yMapMarkers[id])? true: false;
	var hasDetailPane = ('detailidx' in yMapMarkers[id])? true: false;
	if (hasMenu || hasDetailPane) {
		for (var i in yMapMarkers) {
			var markerMenuItem= null;
			var markerDetailPane= null;
			if (hasMenu == true) markerMenuItem= document.getElementById(yMapMarkers[i]['menuidx']);
			if (hasDetailPane) markerDetailPane= document.getElementById(yMapMarkers[i]['detailidx']);
			if (i == id) {
				if (hasMenu == true) markerMenuItem.className = 'here';
				if (hasDetailPane) markerDetailPane.style.display = 'block';
			} else {
				if (hasMenu == true) markerMenuItem.className = '';
				if (hasDetailPane) markerDetailPane.style.display = 'none';
			}
		}
	}
}
