// JavaScript Document
function isNetscape() {
	return !document.all;	
}

function arupMap(map_element) {

	var eMap = map_element;
	var map_w = eMap.clientWidth; //map width
	var map_h = eMap.clientHeight; //map height
	
	//map extents
	var ext_x_min = 384757;
	var ext_y_min = 398400;
	var ext_x_max = 385269;
	var ext_y_max = 399100;
	var map_rot = 59 * Math.PI/180; //radians
	
	//model offsets
	var offsetx = 385165.29;
	var offsety = 398631.34;
	var x_offset_correction = -3;
	var y_offset_correction = -4;
	
	function IsMapPix(x, y, border) {
		var ret = false;
		if((x-border)>=eMap.offsetLeft && (x+border)<=(eMap.offsetLeft + eMap.offsetWidth)) {
			if((y-border)>=eMap.offsetTop && (y+border)<=(eMap.offsetTop + eMap.clientHeight)) {
				ret = true;	
			}
		}
		return ret;
	}
	
	Real2PixX = function(real_x, ext_min_x, ext_max_x, map_w) {
		return Math.round( map_w * (real_x - ext_min_x) / (ext_max_x - ext_min_x) );
	}
	
	Real2PixY = function(real_y, ext_min_y, ext_max_y, map_h) {
		return Math.round( map_h * (ext_max_y - real_y) / (ext_max_y - ext_min_y) );
	}
	
	Map2CssX = function(MapX, MapElement) {
		return MapX + MapElement.offsetLeft;
	}
	
	Map2CssY = function(MapY, MapElement) {
		return MapElement.offsetTop + MapY;
	}
	
	this.UpdateLocatorPos = function(LocatorElement, PosX,PosY,RotZ)
	{
		//alert ("x: " + PosX);
		var mapPosX = PosX;
		var mapPosY = PosY;
		
		mapPosX = PosX + offsetx;
		mapPosY = PosY + offsety;
		var mapRotZ = RotZ;
		//alert('real coords: '+mapPosX+', '+mapPosY);
		
		map_x = mapPosX;
		map_y = mapPosY;
		
		//get centre
		var Cx = ext_x_max - ((ext_x_max - ext_x_min)/2);
		var Cy = ext_y_max - ((ext_y_max - ext_y_min)/2);
		//alert('centre coords: '+Cx+', '+Cy);
		
		//get x and y relative to centre
		var MapX_c = mapPosX - Cx;
		var MapY_c = mapPosY - Cy;
		//alert('orig coords: '+MapX_c+', '+MapY_c);
		
		//apply anticlockwise rotational transformation
		var mapX_rot = MapX_c*Math.cos(map_rot) - MapY_c*Math.sin(map_rot);
		var mapY_rot = MapX_c*Math.sin(map_rot) + MapY_c*Math.cos(map_rot);
		//alert('rotated coords: '+mapX_rot+', '+mapY_rot);
		
		//add offset back
		map_x = mapX_rot + Cx;
		map_y = mapY_rot + Cy;
		//alert('end coords: '+map_x+', '+map_y);
		
		map_pix_x = Real2PixX(map_x, ext_x_min, ext_x_max, map_w);
		map_pix_y = Real2PixY(map_y, ext_y_min, ext_y_max, map_h);
		//alert(map_pix_x+', '+map_pix_y);
		
		map_pix_x = Map2CssX(map_pix_x, eMap);
		map_pix_y = Map2CssY(map_pix_y, eMap);
		
		var html = "X: " + mapPosX + "(" + map_pix_x + ")" + "Y: " + mapPosY + "(" + map_pix_y + ") Rot: " + RotZ;
		//element("position_layer").innerHTML = html;
		
		map_pix_x += x_offset_correction;
		map_pix_y += y_offset_correction;
		if(!isNetscape()) map_pix_y -= 17;
		
		if(IsMapPix(map_pix_x, map_pix_y, 10)) {
			LocatorElement.style.display = 'block';
			LocatorElement.style.left = map_pix_x;
			LocatorElement.style.top = map_pix_y;
		}
		else {
			LocatorElement.style.display = 'none';
		}
	}
}