var isDragging = false;
var curApartment;

function initMagnifier()
{
	addEvent(getProtoLayer('coordinateDetector').ref,'mousedown',magMouseDown,false);
	addEvent(getProtoLayer('coordinateDetector').ref,'mousemove',magMouseMove,false);
	addEvent(getProtoLayer('coordinateDetector').ref,'mouseup',cancelMouseMove,false);
	getProtoLayer('magnifier').write('<div style="background-image: url(/_img/white_sq.png); color: #03629C; font-size: 0.7em; font-weight: bold; height: 67px; margin: 0; text-align: center; padding: 12px 0 0 0; width: 63px; position: absolute; top: 0;"><p style="padding: 0; margin: 0;">Click and drag here to look around</p></div>');
}

function viewPlan(floorNum)
{
	hidePlans();
	getProtoLayer("level"+floorNum).inherit();
	getProtoLayer("detailedplan"+floorNum).inherit();
	getProtoLayer("floor_indicator_"+floorNum).inherit();
	document.getElementById("button_"+floorNum).className='buttonOn ir';
	curFloor = floorNum;
	//Show any apartment details
	var magElm = getProtoLayer('magnifier');
	findApartment(magElm.x+magElm.w/2,magElm.y+magElm.h/2);
	return false;
}

function hidePlans()
{
	for(var i=0;i<4;i++)
	{
		getProtoLayer("level"+i).hide();
		getProtoLayer("detailedplan"+i).hide();
		getProtoLayer("floor_indicator_"+i).hide();
		document.getElementById("button_"+i).className='ir buttonOff';
	}
}

function magMouseDown(e)
{
	getProtoLayer('magnifier').write('');
	isDragging = true;
	if(typeof event=="undefined")var event=e;
	var x = event.layerX ? event.layerX : event.offsetX;
	var y = event.layerY ? event.layerY : event.offsetY;
//	alert(x+" "+y);
	positionMagnifier(x,y);
	if(event.preventDefault)event.preventDefault();
	if(event.returnValue)event.returnValue=false;
	return false;
}

function magMouseMove(e)
{
	if(isDragging)
	{
		if(typeof event=="undefined")var event=e;
		var x = event.layerX ? event.layerX : event.offsetX;
		var y = event.layerY ? event.layerY : event.offsetY;
		positionMagnifier(x,y);
	}
}

function cancelMouseMove(e)
{
	isDragging = false;
}

function positionMagnifier(x,y)
{
	var magElm = getProtoLayer('magnifier');
	var detectorElm = getProtoLayer('coordinateDetector');
	//Keep the magnifier bounded by the large map area
	x-=magElm.w/2;
	y-=magElm.h/2;
	if(x<0)x=0;
	if(y<0)y=0;
	if(x+magElm.w>detectorElm.w)x=detectorElm.w - magElm.w;
	if(y+magElm.h>detectorElm.h)y=detectorElm.h - magElm.h;
	//Move the various elements: magnifier and detailed plans
	magElm.moveTo(x,y);
	positionDetailedPlan(x,y);
	//Show any apartment details
	findApartment(x+magElm.w/2,y+magElm.h/2);
}

function positionDetailedPlan(magX,magY)
{
	var detectorElm = getProtoLayer('coordinateDetector');
	var magElm = getProtoLayer('magnifier');
	var detailBlock = getProtoLayer('detailed_plans');
	//Move all the detailed plans at once so it all lines up when we switch between floors
	for(var i=0;i<4;i++)
	{
		var detailedElm = getProtoLayer('detailedplan'+i);
		detailedElm.moveTo(-magX * (detailedElm.w/(detectorElm.w)),-magY * (detailedElm.h/(detectorElm.h)));
	}
}

function findApartment(x,y)
{
	var minDistance = 10000;
	var closest = null;
	for(var i=0;i<apartments[curFloor].length;i++)
	{
		var apartment = apartments[curFloor][i];
		var distance = Math.sqrt((Math.abs(x-apartment.x)*Math.abs(x-apartment.x))+(Math.abs(y-apartment.y)*Math.abs(y-apartment.y)));
		
		if(distance<minDistance)
		{
			minDistance = distance;
			closest = apartment;
		}
	}
	//Don't show the closest apartment if the closest one is out of sight
	if(closest&&(parseInt(minDistance)<50))
	{
		if(curApartment != closest)
		{
			getProtoLayer('details').ref.innerHTML=closest.detail;
		}
		curApartment = closest;
	}
	else
	{
		if(curApartment)getProtoLayer('details').ref.innerHTML="";
		curApartment = null;
	}
}

var apartments = new Array();

function Apartment(no,x,y,floor,detail)
{
	if(!apartments[floor])apartments[floor] = new Array();
	apartments[floor][apartments[floor].length] = this;
	this.no = no;
	this.x = x;
	this.y = y;
	this.floor = floor;
	this.detail = detail;
}