function CMiniMapInfo ()
{
	this.iInnerFrameWidth = 0;
	this.iInnerFrameHeight = 0;
	this.iInnerFrameTop = 0;
	this.iInnerFrameLeft = 0;
}

function CMiniMapFrame (pMainMap, pMiniMap)
{
	this.pMainMap = pMainMap;
	this.pMiniMap = pMiniMap;

	this.divFrameFill = null;
	this.divFrame = null;
	this.divSecFrame = null;
	this.divSecFrameFill = null;

	var me = this;

	// szinkronban a style.css div.minimap margin vastagsággal !!!
	me.miniMapMargin = 2;
	// szinkronban a style.css div.minimapframe border vastagsággal !!!
	me.miniMapFrameBorder = 2; 
	me.miniMapSecFrameFillBorder = 1;


	this.MouseMoveOnFrame = function (pEvent)
	{
		me.pMiniMap.OnMouseMoveFunc(pEvent);

		StopEventPropagation(pEvent);
		return false;
	}

	this.MouseOutOnMovingFrame = function (pEvent)
	{
		me.divSecFrame.style.visibility = "hidden";
		me.divSecFrameFill.style.visibility = "hidden";
		me.pMiniMap.bFrameMouseDown = false; 

		StopEventPropagation(pEvent); 
		return false;
	}

	this.MouseOutOnFrame = function (pEvent)
	{
		StopEventPropagation(pEvent);
		return false;
	}

	this.MouseUpOnFrame = function (pEvent)
	{
		if (pEvent == undefined)
		{
			me.pMiniMap.bFrameMouseDown = false;
			me.divSecFrame.style.visibility = "hidden";
			StopEventPropagation(pEvent);
			document.onselectstart = function () {return true;};
			return false;		
		}
	
		var x = GetLayerX(pEvent);
		var y = GetLayerY(pEvent);
	  
		me.pMiniMap.OnMouseUpFunc(x,y,pEvent);
		me.pMiniMap.bFrameMouseDown = false;
		me.divSecFrame.style.visibility = "hidden";

		StopEventPropagation(pEvent);
		document.onselectstart = function () {return true;};
		return false;
	}

	this.MouseDownOnFrame = function (pEvent)
	{
		document.onselectstart = function () {return false;};
		me.ReArrange ();

		var x = GetLayerX(pEvent);
		var y = GetLayerY(pEvent);

		var fb = me.miniMapFrameBorder;
		var ww = GetLayerWidth(me.divFrame);
		var hh = GetLayerHeight(me.divFrame);

		if  ((x < 0) || (y < 0) || (x >= ww-2*fb) || (y >= hh-2*fb))
			return false;

		me.divSecFrame.style.visibility = 'visible';
		me.divSecFrameFill.style.visibility = 'visible';

		x += me.GetFrameLeft();
		y += me.GetFrameTop();

		me.pMiniMap.bFrameMouseDown = true;
		me.pMiniMap.iFrameMouseX = x;
		me.pMiniMap.iFrameMouseY = y;
		me.pMiniMap.iFrameMouseStartX = GetEventXNew (pEvent); //x
		me.pMiniMap.iFrameMouseStartY = GetEventYNew (pEvent); //y				

		StopEventPropagation(pEvent);
		return false;
	}

	this.Init = function ()
	{
		setAlpha(".minimapsecframefill");
		setAlpha(".minimapframefill");
		me.divFrameFill = document.createElement("div");
		me.divFrameFill.id = me.pMiniMap.divMap.id + "_framefill";
		me.pMiniMap.divFace.appendChild(me.divFrameFill);
		me.divFrameFill.className = "minimapframefill";
		SetOpac(me.divFrameFill, 35);

		me.divFrame = document.createElement("div");
		me.divFrame.id = me.pMiniMap.divMap.id + "_frame";
		me.pMiniMap.divFace.appendChild(me.divFrame);
		me.divFrame.className = "minimapframe";
		me.divFrame.onmousemove = me.MouseMoveOnFrame;
		me.divFrame.onmousedown = me.MouseDownOnFrame;
		me.divFrame.onmouseup = me.MouseUpOnFrame;
		me.divFrame.onmouseout = me.MouseOutOnFrame;

		me.divSecFrame = document.createElement("div");
		me.divSecFrame.style.visibility = 'hidden';
		me.divSecFrame.id = me.pMiniMap.divMap.id + "_secframe";
		me.pMiniMap.divFace.appendChild(me.divSecFrame);
		me.divSecFrame.className = "minimapsecframe";
		me.divSecFrame.onmouseout = me.MouseOutOnMovingFrame; 


		me.divSecFrameFill = document.createElement("div");
		me.divSecFrameFill.style.visibility = 'hidden';
		me.divSecFrameFill.id = me.pMiniMap.divMap.id + "_secframefill";
		me.pMiniMap.divFace.appendChild(me.divSecFrameFill);
		me.divSecFrameFill.className = "minimapsecframefill";
		SetOpac(me.divSecFrameFill, 35);

	}

	// a minimap-on levo keret pozicionalasa
	// ez mutatja meg, hogy a main mapon mi lathato


    // bCaseMapResize: lehet undefinded

	this.ReArrange = function (bCaseMapResize)
	{						
		var mainMapPD = me.pMainMap.GetPixelDensity ();
		var miniMapPD = me.pMiniMap.GetPixelDensity ();
		var ratio = mainMapPD / miniMapPD;

		var mainAbsLeft = me.pMainMap.pGridMain.GetViewAbsoluteLeft ();
		var mainAbsTop = me.pMainMap.pGridMain.GetViewAbsoluteTop ();
		var miniAbsLeft = me.pMiniMap.pGridMain.GetViewAbsoluteLeft ();
		var miniAbsTop = me.pMiniMap.pGridMain.GetViewAbsoluteTop ();

		var FW = Math.ceil (me.pMainMap.GetMapViewWidth () * ratio);
		var FH = Math.ceil (me.pMainMap.GetMapViewHeight () * ratio);		
		
		var SFW = FW;
		var SFH = FH;
		var SFFW = SFW - 2 * me.miniMapSecFrameFillBorder;
		var SFFH = SFH - 2 * me.miniMapSecFrameFillBorder;
		if (SFFW < 0) SFFW = 0;
		if (SFFH < 0) SFFH = 0;
		
		var SFW = FW;
		var SFH = FH;
		var SFFW = Math.max(SFW - 2 * me.miniMapSecFrameFillBorder, 0);
		var SFFH = Math.max(SFH - 2 * me.miniMapSecFrameFillBorder, 0);
		
		var FL = Math.ceil (mainAbsLeft * ratio) - miniAbsLeft - (me.miniMapMargin + 1);
		var FT = Math.ceil (mainAbsTop * ratio) - miniAbsTop - (me.miniMapMargin + 1);

		var oldFL = GetLayerLeft (me.divFrame) + me.miniMapFrameBorder;
		var oldFT = GetLayerTop (me.divFrame) + me.miniMapFrameBorder;


		// ez az egy pixeles vizsgálat azért kell, mert nem mindig mozog a minimap,
		// ha picit mozog a main map (ez helyes), minek kovetkezteben 1px-t ide-oda
		// ugralt a frame

		if (((Math.abs (FL - oldFL) > 1) || (Math.abs (FT - oldFT) > 1)) || (bCaseMapResize==true))
		{		    
			me.divFrame.style.width = FW + "px";
			me.divFrame.style.height = FH + "px";
			me.divFrame.style.left = (FL - me.miniMapFrameBorder) + "px";
			me.divFrame.style.top = (FT - me.miniMapFrameBorder) + "px";


			me.divFrameFill.style.width = FW + "px";
			me.divFrameFill.style.height = FH + "px";
			me.divFrameFill.style.left = FL + "px";
			me.divFrameFill.style.top = FT + "px";

			me.divSecFrame.style.width = SFW + "px";
			me.divSecFrame.style.height = SFH + "px";
			me.divSecFrame.style.left = FL + "px";
			me.divSecFrame.style.top = FT + "px";

			me.divSecFrameFill.style.width = SFFW + "px";
			me.divSecFrameFill.style.height = SFFH + "px";
			me.divSecFrameFill.style.left = FL + "px";
			me.divSecFrameFill.style.top = FT + "px";

		}
		else
		{
			me.divSecFrame.style.left = oldFL + "px";
			me.divSecFrame.style.top = oldFT + "px";

			me.divSecFrameFill.style.left = oldFL + "px";
			me.divSecFrameFill.style.top = oldFT + "px";
		}
	}

	this.GetFrameTop = function ()
	{
		return GetLayerTop (me.divFrame);
		//return GetAbsLayerTop (me.divFrame) - GetAbsLayerTop (me.pMiniMap.divFace);
	}

	this.GetFrameLeft = function ()
	{
		return GetLayerLeft (me.divFrame);
	//return GetAbsLayerLeft (me.divFrame) - GetAbsLayerLeft (me.pMiniMap.divFace);
	}

	me.Init();
}

