var canvas = null;
var context = null;
var imageData = false;
var flashCompleted = false;
var activeHover = null;
var images = {};

$(function()
{	
	if (browser.isIE)
	{
		var div = $("<div id='flash_map_ie'>")
		//.html("No flash installed!")
		//.appendTo("body");
		
		var flashVars = {
			basedir: g_baseDir,
			imagePath: "/images/maps/" + sourceMap + "/map_colors.png",
			project: "NHC002_Netherlands_Helsinki_Committee"
		};
		
		var params = {
			menu: "false",
			allowscriptaccess: "sameDomain",
			allowfullscreen: "false"
		}
		
		var attributes = {};
		
		swfobject.embedSWF(g_baseDir + "/assets/externalinterface.swf",
			"flash_map_ie",
			1,
			1,
			"9.0.0",
			g_baseDir + "/assets/expressInstall.swf",
			flashVars,
			params,
			attributes);
	}
	else
	{
		var colorMap = new Image();
		colorMap.src = g_baseDir + "/images/maps/" + sourceMap + "/map_colors.png";
		colorMap.onload = function()
		{
			canvas = $("<canvas>")
			.attr({
				width: this.width,
				height: this.height
			});
			
			canvas.css('margin-left', '30px');
			
			context = canvas.get(0).getContext("2d");
			
			context.drawImage(colorMap, 0, 0);
			
			imageData = context.getImageData(0, 0, canvas.attr("width"), canvas.attr("height")).data;
		}
	}
	
	$(".mapContainer .viewport").mousemove(function(event)
	{
		var mapLocation = getLocation(getColor(event));
		addHover(mapLocation);
	})
	.click(function(event)
	{
		var mapLocation = getLocation(getColor(event));
		
		if (mapLocation.link)
		{
			window.open(g_baseDir + mapLocation.link, "_self");
		}
	});
	
	$(".mapContainer .viewport").mouseleave(function(event)
	{
		removeHover();
	});
	
});

function removeHover()
{
	$(".mapContainer .viewport .rollover").each(function()
	{
		images[$(this).attr("alt")] = $(this).detach();
	});
}

function addHover(mapLocation)
{
	if (activeHover != mapLocation.name)
	{
		removeHover();
		
		$(".mapContainer .viewport").css({ cursor: "auto" });
		
		if (mapLocation.name)
		{
			if (mapLocation.link != "")
			{
				$(".mapContainer .viewport").css({ cursor: "pointer" });
			}
			
			var image;
			
			if (!images[mapLocation.name])
			{
				image = $("<img>")
				.addClass("rollover")
				.css({
					position: "absolute",
					top: sourceMap == "regions_small" ? 0 : 30,
					left: sourceMap == "regions_small" ? 0 : 30
				})
				.attr({
					src: g_baseDir + "/images/maps/" + sourceMap + "/" + mapLocation.name + ".png",
					alt: mapLocation.name,
					title: ""
				});
			}
			else
			{
				image = images[mapLocation.name];
			}
			
			image.appendTo(".mapContainer .viewport");
		}
		
		activeHover = mapLocation.name;
	}
}

function getColor(event)
{
	var pos = $(".mapContainer .viewport").offset();
	var coords = {
		x: parseInt(event.pageX - pos.left),
		y: parseInt(event.pageY - pos.top)
	};
	
	return browser.isIE ? document.getElementById("flash_map_ie").getPixel(coords) : getPixel(coords);
}

function getLocation(color)
{
	if (mapLocations[color] != undefined)
	{
		return mapLocations[color];
	}
	
	return false;
}

function onFlashComplete()
{
	flashCompleted = true;
}

function getPixel(coords)
{
	if (canvas)
	{
		var x = coords.x;
		var y = coords.y;
		
		var red = imageData[(y * canvas.attr("width") + x) * 4 + 0];
		var green = imageData[(y * canvas.attr("width") + x) * 4 + 1];
		var blue = imageData[(y * canvas.attr("width") + x) * 4 + 2];
		var alpha = imageData[(y * canvas.attr("width") + x) * 4 + 3];
		
		return ((red << 16) | (green << 8) | blue).toString(16);
	}
	
	return false
}
