﻿function ACCQuickRouteViewer(pTopoliszMap, arrRoutes)
{
	this.pTopoliszMap = pTopoliszMap;
	this.arrRoutes = arrRoutes;
	this.pMain = null;
	this.iSub = -1;
	this.div = null;

	var me = this;

	this.Init = function()
	{
		me.div = GetBlock("idQuickRouteViewer");
		me.div.style.display = "block";
		if(me.arrRoutes != null && me.arrRoutes.length > 0)
		{
			var pRoute = me.arrRoutes[0];
			if(pRoute != null && pRoute.arrMains.length > 0)
			{
				me.pMain = pRoute.arrMains[0];
			}
		}
		me.Show();
	}

	this.Show = function()
	{
		while(me.div.firstChild)
			me.div.removeChild(me.div.firstChild);

		var h3 = NewTag("h3", me.div);
		h3.className = "nomobile";
		NewTextTag("Útvonal gyorsnéző", h3)

		var a = NewTag("a", me.div);
		a.setAttribute("href", "javascript:void(0)");
		a.setAttribute("title", "előző szakasz");
		NewTextTag("<<", a);
		AddEvent(a, "click", me.StepBack);

		NewTextTag("\u00a0", me.div);

		a = NewTag("a", me.div);
		a.setAttribute("href", "javascript:void(0)");
		NewTextTag("Áttekintő", a);
		AddEvent(a, "click", me.StepOverview);

		NewTextTag("\u00a0", me.div);

		a = NewTag("a", me.div);
		a.setAttribute("href", "javascript:void(0)");
		a.setAttribute("title", "következő szakasz");
		NewTextTag(">>", a);
		AddEvent(a, "click", me.StepNext);
	}
	
	this.Zoom = function()
	{
		var dLwrX = me.pMain.dLwrX;
		var dLwrY = me.pMain.dLwrY;
		var dUprX = me.pMain.dUprX;
		var dUprY = me.pMain.dUprY;
		var callback = new Function () 
		{
			me.pTopoliszMap.SetMapDiv(me.pTopoliszMap.divMap);
			callback =  me.pTopoliszMap.ScrollPageToMap;
		}
		
		if(me.iSub >= 0 && me.iSub < me.pMain.arrSubs.length)
		{
			dLwrX = me.pMain.arrSubs[me.iSub].dLwrX;
			dLwrY = me.pMain.arrSubs[me.iSub].dLwrY;
			dUprX = me.pMain.arrSubs[me.iSub].dUprX;
			dUprY = me.pMain.arrSubs[me.iSub].dUprY;
			
			var oLwrEOV = new WGS2EOV(dLwrX, dLwrY);
			var oUprEOV = new WGS2EOV(dUprX, dUprY);
			
			callback =  me.pTopoliszMap.ScrollPageToMap;
		}

		if(dLwrX == dUprX && dLwrY == dUprY)
			me.pTopoliszMap.ZoomToPoint(dLwrX, dLwrY, 100);
		else
			me.pTopoliszMap.ZoomToRect(dLwrX, dLwrY, dUprX, dUprY, callback);
	}

	// return: 
	// lwrPT.dX, lwrPT.dY 
	// uprPT.dX, uprPT.dY
	this.GetEOVRect = function (iSub) 
	{
		var dLwrX = me.pMain.arrSubs[iSub].dLwrX;
		var dLwrY = me.pMain.arrSubs[iSub].dLwrY;
		var dUprX = me.pMain.arrSubs[iSub].dUprX;
		var dUprY = me.pMain.arrSubs[iSub].dUprY;		
		var ptLwrEOV = new WGS2EOV(dLwrX, dLwrY);
		var ptUprEOV = new WGS2EOV(dUprX, dUprY);
		return {"lwrPT": ptLwrEOV, "uprPT": ptUprEOV };	
	}
	
	this.IsOutside = function (eovRectRef, eovRectTest)
	{
		var ret = ( (eovRectRef.uprPT.dY < eovRectTest.lwrPT.dY) ||
					(eovRectRef.uprPT.dX < eovRectTest.lwrPT.dX) ||
					(eovRectRef.lwrPT.dY > eovRectTest.uprPT.dY) ||
					(eovRectRef.lwrPT.dX > eovRectTest.uprPT.dX) );
		return ret;
	}
	
	this.IsBigEnough = function (eovRect)
	{
		var w = eovRect.uprPT.dX - eovRect.lwrPT.dX;
		var h = eovRect.uprPT.dY - eovRect.lwrPT.dY;
		var ret = ((w > 50) || (h > 50));
		return ret;
	}
	
	this.StepNext = function ()
	{
		if (me.iSub == -1)
		{
			me.iSub = 0;
			me.Zoom();
		}
		else if (me.iSub == me.pMain.arrSubs.length-1)
		{
			me.iSub = -1;
			me.Zoom();			
		}
		else
		{
			var rectAct = me.GetEOVRect (me.iSub);
			
			var iSub = me.iSub + 1;			
			var rectNext = me.GetEOVRect (iSub);						
			
			iSub++;
			for (; (iSub < me.pMain.arrSubs.length) && (!me.IsBigEnough(rectNext)); iSub++)
			{
				var rect = me.GetEOVRect (iSub);
				rectNext.uprPT.dX = Math.max (rect.uprPT.dX, rectNext.uprPT.dX);
				rectNext.uprPT.dY = Math.max (rect.uprPT.dY, rectNext.uprPT.dY);
				rectNext.lwrPT.dX = Math.min (rect.uprPT.dX, rectNext.lwrPT.dX);
				rectNext.lwrPT.dY = Math.min (rect.uprPT.dY, rectNext.lwrPT.dY);				
			}
			
			if (iSub >= me.pMain.arrSubs.length)
			{
				me.iSub = me.pMain.arrSubs.length-1;
				me.Zoom();				
			}
			else
			{
				me.iSub = iSub - 1;						
				var callback = new Function () 
				{
					me.pTopoliszMap.SetMapDiv(me.pTopoliszMap.divMap);
					callback =  me.pTopoliszMap.ScrollPageToMap;
				}

				if ((rectNext.lwrPT.dX == rectNext.uprPT.dX) && (rectNext.lwrPT.dY == rectNext.uprPT.dY))
					me.pTopoliszMap.ZoomToPoint(rectNext.lwrPT.dX, rectNext.lwrPT.dY, 100);
				else
					me.pTopoliszMap.ZoomToRect(rectNext.lwrPT.dX, rectNext.lwrPT.dY, rectNext.uprPT.dX, rectNext.uprPT.dY, callback);			
			}
		}												
		me.Show();			
	}

	this.StepBack = function ()
	{
		if (me.iSub == -1) 
		{
			me.iSub = me.pMain.arrSubs.length-1;
			me.Zoom();
		}
		else if (me.iSub == 0) 
		{
			me.iSub = -1;
			me.Zoom();		
		}
		else
		{
			var rectAct = me.GetEOVRect (me.iSub);
			
			var iSub = me.iSub - 1;
			
			var rectNext = me.GetEOVRect (iSub);						
			iSub--;
			for (; (iSub >= 0) && (!me.IsBigEnough(rectNext)); iSub--)
			{
				var rect = me.GetEOVRect (iSub);
				rectNext.uprPT.dX = Math.max (rect.uprPT.dX, rectNext.uprPT.dX);
				rectNext.uprPT.dY = Math.max (rect.uprPT.dY, rectNext.uprPT.dY);
				rectNext.lwrPT.dX = Math.min (rect.uprPT.dX, rectNext.lwrPT.dX);
				rectNext.lwrPT.dY = Math.min (rect.uprPT.dY, rectNext.lwrPT.dY);				
			}
			
			if (iSub < 0)
			{				
				me.iSub = 0;
				me.Zoom();				
			}
			else
			{
				me.iSub = iSub + 1;						
				var callback = null;
				callback =  me.pTopoliszMap.ScrollPageToMap;

				if ((rectNext.lwrPT.dX == rectNext.uprPT.dX) && (rectNext.lwrPT.dY == rectNext.uprPT.dY))
					me.pTopoliszMap.ZoomToPoint(rectNext.lwrPT.dX, rectNext.lwrPT.dY, 100);
				else
					me.pTopoliszMap.ZoomToRect(rectNext.lwrPT.dX, rectNext.lwrPT.dY, rectNext.uprPT.dX, rectNext.uprPT.dY, callback);			
			}
		}												
		me.Show();			
	}

	this.StepOverview = function()
	{
		me.iSub = -1;
		me.Zoom();
		me.Show();
	}

	me.Init();
}