﻿function CUtvonaltervRouteResult (div, pTopoliszMap)
{
	// Teljes div, amiben lehet garazdalkodni
	this.divMain = div;

	// Közlekedési összegzőt tartalmazó div
	this.divTotal = null;
	
	// Alternativa táblázat
	this.tableItinerList = null;

	this.pTopoliszMap = pTopoliszMap;
	this.pTopoliszMap.pTextResult = this;

	//Útvonal kereső osztály
	this.pRouteSearch = null;

	this.arrRoutes = [];
	this.pRoute = null;
	this.iActiveAlt = 0;
	this.arrSortColumns = ["iAlternative", "dtStart", "dtStop", "iTravelSeconds", "iRunChanges"];
	this.strSort = "iAlternative";
	this.iSortDir = 1;
	
	this.iColCount =  4; // hány oszlopból áll az itiner
	
	this.iMaxAlternatives = 1;
	
	this.iStartOrder = 0;
	
	this.iAltDiffStepHour = 1;
	this.iAltDifferenceBeforeHour = -this.iAltDiffStepHour;
	this.iAltDifferenceAfterHour = +this.iAltDiffStepHour;
	
	this.strTrafficTime = "";
	
	/// Banners
	this.BannerBox = function(strPictureUrl, strLinkUrl)
	{
		this.strPictureUrl = strPictureUrl;
		this.strLinkUrl = strLinkUrl;
		this.strFlashUrl = strPictureUrl;
		this.iMinX = 0;
		this.iMinY = 0;
		this.iMaxX = 0;
		this.iMaxY = 0;
		this.arrDivsDisplayArea = [];
		this.arrSpansDontHide = [];
		this.strBgColor = null;
		this.div = null;
		
		var me = this;
		this.AddDisplayArea = function(td)
		{
			if(me.iMinX == 0 && me.iMaxX == 0)
			{
				me.iMinX = GetAbsLayerLeft(td);
				me.iMaxX = GetAbsLayerRight(td);
			}
			else
			{
				//me.iMinX = Math.max(GetAbsLayerLeft(td), me.iMinX);
				//me.iMaxX = Math.min(GetAbsLayerRight(td), me.iMaxX);
				me.iMinX = Math.min(GetAbsLayerLeft(td), me.iMinX);
				me.iMaxX = Math.max(GetAbsLayerRight(td), me.iMaxX);

			}

			if(me.iMinY == 0 && me.iMaxY == 0)
			{
				me.iMinY = GetAbsLayerTop(td)+2;
				me.iMaxY = GetAbsLayerBottom(td);
			}
			else
			{
				me.iMinY = Math.min(GetAbsLayerTop(td)+2, me.iMinY);
				me.iMaxY = Math.max(GetAbsLayerBottom(td), me.iMaxY);
			}
		}
		this.AddDontHideArea = function(span)
		{
			if(GetAbsLayerLeft(span) < (me.iMinX + me.iMaxX)/2)
				me.iMinX = Math.max(GetAbsLayerRight(span), me.iMinX);
			else
				me.iMaxX = Math.min(GetAbsLayerLeft(span), me.iMaxX);
		}
		this.ComputeMinMax = function()
		{
			for(var i=0; i<me.arrDivsDisplayArea.length; i++)
			{
				me.AddDisplayArea(me.arrDivsDisplayArea[i]);
			}
			for(var i=0; i<me.arrSpansDontHide.length; i++)
			{
				me.AddDontHideArea(me.arrSpansDontHide[i]);
			}
		}
		this.Show = function(divParent)
		{
			if(me.iMinX < me.iMaxX && me.iMinY < me.iMaxY)
			{
				var iBaseX = GetAbsLayerLeft(divParent);
				var iBaseY = GetAbsLayerTop(divParent);
				var div = NewTag('div', divParent);
				div.className = "noprint";
				div.style.position = "absolute";
				div.style.textAlign = "right";
				//div.style.backgroundColor = "red";
				div.style.left = (-iBaseX + me.iMinX) + "px";
				div.style.top = (-iBaseY + me.iMinY) + "px";
				div.style.width = (me.iMaxX - me.iMinX) + "px";
				div.style.height = (me.iMaxY - me.iMinY)+ "px";
				var a;
				if(me.strLinkUrl != null)
				{
					a = NewTag('a', div);
					a.setAttribute("href", me.strLinkUrl);
					a.setAttribute("target", "_blank");
				}
				else
					a = NewTag('span', div);
				
				if(me.strPictureUrl.toLowerCase().lastIndexOf(".swf") > 0)
				{
					var flash = NewFlash(me.strPictureUrl, Math.min(400,me.iMaxX-me.iMinX), Math.min(50, me.iMaxY-me.iMinY), a);
				}
				else
				{
					var img = NewTag('img', a);
					SetImage(img, me.strPictureUrl, Math.min(400,me.iMaxX-me.iMinX), Math.min(50, me.iMaxY-me.iMinY), "");
				}
				me.div = div;
				if(me.strBgColor != null)
				{
					for(var i=0; i<me.arrDivsDisplayArea.length; i++)
					{
						var div2 = me.arrDivsDisplayArea[i];
						div2.style.backgroundColor = me.strBgColor;
					}
				}
			}
		}
		this.Clear = function()
		{
			if(me.strBgColor != null)
			{
				for(var i=0; i<me.arrDivsDisplayArea.length; i++)
				{
					var div2 = me.arrDivsDisplayArea[i];
					div2.style.backgroundColor = "";
				}
			}
			if(me.div && me.div.parentNode)
			{
				me.div.parentNode.removeChild(me.div);
				me.div = null;
			}
			me.ClearParentArea();
		}

		this.ClearParentArea = function()
		{
			me.iMinX = me.iMinY = me.iMaxX = me.iMaxY = 0;
			me.arrDivsDisplayArea = [];
			me.arrSpansDontHide = [];
		}
		this.AddParentArea = function(tdDisplay, spanDontHide)
		{
			me.arrDivsDisplayArea[me.arrDivsDisplayArea.length] = tdDisplay;
			me.arrSpansDontHide[me.arrSpansDontHide.length] = spanDontHide;
		}
		
		this.AlignLeft = function(pBanner)
		{
			me.iMinX = pBanner.iMinX = Math.max(me.iMinX, pBanner.iMinX);
		}
	}
	this.Banner = function(dateFrom, dateTo, pStartBox, pStopBox, strAVCode, strBgColor)
	{
		this.dateFrom = (dateFrom != null ? dateFrom : new Date(2000, 0, 22));
		this.dateTo   = (dateTo != null ? dateTo : new Date(2020,0,23));
		this.pStartBox = pStartBox;
		this.pStartBox.strBgColor = strBgColor;
		this.pStopBox = pStopBox;
		this.pStopBox.strBgColor = strBgColor;
		this.strAVCode = strAVCode;
		this.strBgColor = strBgColor;
		
		var me = this;

		this.Show = function(divParent)
		{
			if(me.pStartBox && me.pStopBox)
			{
				eval(me.strAVCode);

				me.pStartBox.ComputeMinMax();
				me.pStopBox.ComputeMinMax();
				me.pStartBox.AlignLeft(me.pStopBox);
				me.pStartBox.Show(divParent);
				me.pStopBox.Show(divParent);
			}
		}
		this.Clear = function()
		{
			me.pStartBox.Clear();
			me.pStopBox.Clear();
		}

	}




	this.bShowStartStopBanners = true;
	this.arrStartStopBanners = 
	[
		new this.Banner(new Date(2010,1,1), new Date(2010,1,8), new this.BannerBox("images/banners/sin_felso.gif", "http://ghu.hit.gemius.pl/hitredir/id=dwBLAgsyEFobk6Ih0WkzltU533OBGC_6Y19aofNHjZP.t7/stparam=unfffxlmjg/url=http://www.toyota.hu/1000000/index.aspx?WT.mc_id=2010_jan_Stock_Ou&WT.adsite=utvonalterv"), new this.BannerBox("images/banners/sin_also.jpg", "http://ghu.hit.gemius.pl/hitredir/id=dwBLAgsyEFobk6Ih0WkzltU533OBGC_6Y19aofNHjZP.t7/stparam=nlqrkpoozr/url=http://www.toyota.hu/1000000/index.aspx?WT.mc_id=2010_jan_Stock_Ou&WT.adsite=utvonalterv"),"_gde_xmoobkshol = new Image(1,1);_gde_xmoobkshol.src='http://ghu.hit.gemius.pl/_'+(new Date()).getTime()+'/redot.gif?id=dwBLAgsyEFobk6Ih0WkzltU533OBGC_6Y19aofNHjZP.t7/stparam=xmoobkshol';", "#D6A14D"),
		new this.Banner(new Date(2010,1,15), new Date(2010,1,22), new this.BannerBox("images/banners/400x50_indulas.swf", null), new this.BannerBox("images/banners/400x50_erkezes.swf"),"_gde_qihgimdklg = new Image(1,1);_gde_qihgimdklg.src='http://huomdgde.hit.gemius.pl/_'+(new Date()).getTime()+'/redot.gif?id=za1KT6rNxym5Ky4C3CTjh.TYLcBdJmbLrU6YIvkvu.D.I7/stparam=qihgimdklg';", null)
	];
	//this.arrStartBanners = [new this.Banner("images/banners/400x50-100115-indulas.swf",new Date(2010,0,25), new Date(2010,1,1))];
	//this.arrStopBanners = [new this.Banner("images/banners/400x50-100115-erkezes.swf", new Date(2010,0,25), new Date(2010,1,1))];
	var me = this;

	// events
	this.OnShow = null;
	
	this.pLanguageSupporter = new LanguageSupporter ();

	this.Init = function()
	{
	}

	/// protected:
	/// Itt kell megadni azt a div-et, ahova a kozlekedesi lista kerul
//	this.SetDiv = function(div)
//	{
//		me.divMain = div;				
//	}

	/// protected:
	this.GetDiv = function()
	{
		return me.divMain;
	}

	/// protected:
	/// A CTopoliszMap osztaly egy peldanya, ez fogja megjeleniteni az utvonalat a terkepen
	this.SetMap = function(pTopoliszMap)
	{
		me.pTopoliszMap = pTopoliszMap;
			me.pTopoliszMap.pTextResult = me;
	}
	
	
	this.IsCarSub = function(routeSub)
	{
		return me.pRouteSearch.IsCarString(routeSub.strVehicleType);
	}

	this.IsTaxiSub = function(routeSub)
	{
		return me.pRouteSearch.IsTaxiString(routeSub.strVehicleType);
	}

	this.IsBicycleSub = function(routeSub)
	{
		return me.pRouteSearch.IsBicycleString(routeSub.strVehicleType);
	}

	this.IsCar = function()
	{
		return me.pRoute && me.pRouteSearch.IsCarString(me.pRoute.strTrafficType);
	}
	
	this.IsTaxi = function()
	{
		return me.pRoute && me.pRouteSearch.IsTaxiString(me.pRoute.strTrafficType);
	}

	this.IsPublicTransport = function()
	{
		if(me.pRoute && me.pRoute.strTrafficType)
		{
			return me.pRouteSearch.IsPublicTransportString(me.pRoute.strTrafficType);
		}
		return false;
	}


	this.CalcRunChanges = function(pRoute)
	{
		var iChanges = -1;
		for(var iMain=0; iMain < pRoute.arrMains.length; iMain++)
		{
			var pMain = pRoute.arrMains[iMain];
			for(var iSub=0; iSub < pMain.arrSubs.length; iSub++)
			{
				var pSub = pMain.arrSubs[iSub];
				if(pSub.arrPTRuns.length > 0)
					iChanges++;
			}
		}
		pRoute.iRunChanges = iChanges;
		return iChanges;
	}

	this.ShowChangeData = function(tdParent, pRoute)
	{
		var iChanges = -1;
		//var spanNumber = NewTag('span', tdParent);
		
		for(var iMain =0; iMain < pRoute.arrMains.length; iMain++)
		{
			var pMain = pRoute.arrMains[iMain];
			for(var iSub = 0; iSub < pMain.arrSubs.length; iSub++)
			{
				var pSub = pMain.arrSubs[iSub];
				if(pSub.arrPTRuns.length > 0)
				{
					iChanges++;
					if(iChanges > 0)
					{
						var img = NewTag('img', tdParent);
						img.className = "UI_itinerlist_change";
						SetImage(img, GetAbsUrl("design/ICON_PTChange.gif"), 17, 13, "->");
					}
					var pRun = pSub.arrPTRuns[0];
					if(pRun.bShowName && !pRun.bShowDescription)
					{
						var span = NewTag('span', tdParent);
						span.className = pRun.strClass;
						NewTextTag(pRun.strName, span);
					}
					else
					{
						var strImage = me.GetVehicleTypeImage(pRun.iVehicleTypeID);
						if(strImage != "")
						{
							var img = NewTag('img', tdParent);
							img.className = "UI_itinerlist_icon";
							SetImage(img, "design/" + strImage, 35, 25);
						}
					}
				}
			}
		}
		//NewTextTag(iChanges + ": ", spanNumber);
	}

	this.ConvertToMinutes = function(strTime)
	{
		var iPos = strTime.indexOf(':');
		if(iPos >= 0)
		{
			var iHours = parseInt(strTime.substr(0, iPos));
			var iMinutes = parseInt(strTime.substr(iPos+1));
			return 60 * iHours + iMinutes;
		}
		return strTime;
	}

	this.RouteCompare = function(route1, route2)
	{
		var value1 = eval('route1.' + me.strSort);
		var value2 = eval('route2.' + me.strSort);
		
		if(me.strSort == "dtStart" || me.strSort == "dtStop")
		{
			value1 = me.ConvertToMinutes(value1);
			value2 = me.ConvertToMinutes(value2);
		}
		
		var iRetval = 0;
		if(value1 < value2)
			iRetval = -1;
		else if(value1 > value2)
			iRetval = +1;
		
		if(me.iSortDir < 0)
			iRetval = iRetval * -1;
		return iRetval;
	}

	this.SortColumn = function(iCol, iDir)
	{
		me.strSort = me.arrSortColumns[iCol];
		me.iSortDir = iDir;
		me.arrRoutes.sort(me.RouteCompare);
		me.Show();
	}
	

	this.ShowItinerList = function(divParent)
	{
		var colorPanel = new ColorPanel(divParent);
		var table = NewTag('table', colorPanel.td);
		table.setAttribute('border', "0");
		table.style.marginTop = "0px";
		table.style.marginBottom = "10px";
		table.className = 'UI_panel'
		table.cellPadding = 0;
		table.cellSpacing = 0;
		table.style.width = "100%";
		me.tableItinerList = table;
		tbody = NewTag('tbody', table);
		var tr = NewTag('tr', tbody);
		tr.className = "UI_itinerlist_header";
		var th = NewTag('th', tr);
		th.style.fontSize = "12px";
		th.colSpan = 5;
		th.style.padding = "10px";
		NewTextTag("ÚTVONALAJÁNLATOK A MEGADOTT INDULÁSI IDŐ SZERINT", th);
		var div = NewTag('div', th);
		div.style.fontWeight = "normal";
		div.style.fontSize = "10px";
		NewTextTag("(az oszlopok mellett lévő nyilakra kattintva rendezheti a találatokat)", div);
		
		
		var MakeColumn = function(tr, strText)
		{
			var iCol = tr.childNodes.length;
			var th = NewTag('th', tr);
			th.className = "UI_itinerlist";
			NewTextTag(strText, th);
			NewTag('br', th);
			var a = NewTag('a', th);
			a.setAttribute('href', 'javascript:void(0)');
			AddEvent(a, "click", function() {me.SortColumn(iCol,+1);});
			if(me.iSortDir > 0 && me.arrSortColumns[iCol] == me.strSort)
			{
				var img = NewTag('img', a);
				SetImage(img, "images/trafficctrl/triangle_up_act.gif", 10, 5, "Növekvő rendezés");
			}
			else
			{
				new ImgLink(a, 10, 5, "images/trafficctrl/triangle_up.gif", "images/trafficctrl/triangle_up_act.gif", null, null, "Növekvő rendezés", false);
			}

			a = NewTag('a', th);
			a.setAttribute('href', 'javascript:void(0)');
			AddEvent(a, "click", function() {me.SortColumn(iCol,-1);});
			if(me.iSortDir < 0 && me.arrSortColumns[iCol] == me.strSort)
			{
				var img = NewTag('img', a);
				SetImage(img, "images/trafficctrl/triangle_down_act.gif", 10, 5, "Csökkenő rendezés");
			}
			else
			{
				new ImgLink(a, 10, 5, "images/trafficctrl/triangle_down.gif", "images/trafficctrl/triangle_down_act.gif", null, null, "Csökkenő rendezés", false);
			}
			return th;
		}

		var CreateCell = function(tr, iAlt)
		{
			var td = NewTag('td', tr);
			td.className = "UI_itinerlist";
			AddEvent(td, "click", function() { me.SwitchItiner(iAlt); });
			return td;
		}

		tr = NewTag('tr', tbody);
		tr.className = "UI_itinerlist_header";
		if (screen.width > 300)
		{
			MakeColumn(tr, "Útvonal");
			MakeColumn(tr, "Indulás");
			MakeColumn(tr, "Érkezés");
			MakeColumn(tr, "Menetidő");
			th = MakeColumn(tr, "Átszállás");
		}
		else
		{
			MakeColumn(tr, "Ssz");
			MakeColumn(tr, "Ind");
			MakeColumn(tr, "Érk");
			MakeColumn(tr, "Idő");
			th = MakeColumn(tr, "Jármű");
		}
		th.className = "UI_itinerlist_last";

		me.ShowMakeAltRow(tbody, me.iAltDifferenceBeforeHour);
		for(var iAlt=0; iAlt<me.arrRoutes.length; iAlt++)
		{
			tr = NewTag('tr', tbody);
			tr.className = "UI_itinerlist";
			var pRoute = me.arrRoutes[iAlt];
			if(me.arrRoutes.length > 1)
			{
				if(pRoute == me.pRoute)
				{
					$(tr).addClass("UI_itinerlist_active");
				}
				$(tr).hover(
					function () {
						$(this).addClass("UI_itinerlist_hover");
					},
					function () {
						$(this).removeClass("UI_itinerlist_hover");
					}
				);
			}

			td = CreateCell(tr, pRoute.iAlternative);
			NewTextTag((pRoute.iAlternative + 1) + ".", td);

			td = CreateCell(tr, pRoute.iAlternative);
			NewTextTag(pRoute.dtStart, td);

			td = CreateCell(tr, pRoute.iAlternative);
			NewTextTag(pRoute.dtStop, td);

			td = CreateCell(tr, pRoute.iAlternative);
			NewTextTag(me.GetTimeText(pRoute.iTravelSeconds), td);

			td = CreateCell(tr, pRoute.iAlternative);
			me.ShowChangeData(td, pRoute);

		}
		me.ShowMakeAltRow(tbody, me.iAltDifferenceAfterHour);
	}
	
	this.ShowMakeAltRow = function(tbody, iDiffHour)
	{
			tr = NewTag('tr', tbody);
			tr.className = "UI_itinerlist";

			td = NewTag('td', tr);
			td.className = "UI_itinerlist";
			NewTextTag("\u00a0", td);

			td = NewTag('td', tr);
			td.className = "UI_itinerlist";
			var a = NewTag('a', td);
			a.setAttribute('href', 'javascript:void(0)');
			AddEvent(a, "click", function() {me.FindAltRoute(iDiffHour); });
			NewTextTag(Math.abs(iDiffHour), a);
			if(iDiffHour < 0)
				NewTextTag(' órával előbb', a);
			else
				NewTextTag(' órával később', a);

			td = NewTag('td', tr);
			a = NewTag('a', td);
			a.setAttribute('href', 'javascript:void(0)');
			AddEvent(a, "click", function() {me.FindAltRoute(iDiffHour); });

			td.className = "UI_itinerlist_last";
			td.colSpan = 3;
			NewTextTag("Kattintson ide a kiszámításhoz!", a);
	}

	this.FindAltRoute = function(iDiffHour)
	{
		var strParams = "iDiffHour=" + iDiffHour;
		var tr, td;
		if(iDiffHour < 0)
			tr = me.tableItinerList.firstChild.childNodes[2];
		else
			tr = me.tableItinerList.firstChild.lastChild;
		var td = tr.lastChild;
		while(td.firstChild)
			td.removeChild(td.firstChild);

		var div = NewTag('div', td);
		div.className = 'UI_routingprogress';

		var tt = NewTextTag(g_Babel.GetWord("capRoutingInProgress"), div);
		me.pLanguageSupporter.Add(tt,"nodeValue","capRoutingInProgress","","");

		me.pTopoliszMap.InciServer.CallFunction("FindAltRoute", strParams, 0, me.FillAltRoute, iDiffHour);
	}

	this.SetAltRoute = function(iAlt)
	{
		if(me.arrRoutes != null)
		{
			if(iAlt >= 0 && iAlt < me.arrRoutes.length)
			{
				var tr = null;
				if(me.tableItinerList)
				{
					tr = me.tableItinerList.firstChild.firstChild;
					tr = tr.nextSibling; // táblazatcím
					tr = tr.nextSibling; // fejléc
					tr = tr.nextSibling; // korábbi
				}
				for(var i=0; i<me.arrRoutes.length; i++)
				{
					if(me.arrRoutes[i].iAlternative == iAlt)
					{
						me.pRoute = me.arrRoutes[iAlt];
						me.iActiveAlt = iAlt;
						if(tr)
						{
							$(tr).addClass("UI_itinerlist_active");
						}
						else
							break;
					}
					else if(tr)
					{
						$(tr).removeClass("UI_itinerlist_active");
					}
					if(tr)
						tr = tr.nextSibling;
				}
				if(me.tableItinerList)
					me.ShowTotal();
				me.pTopoliszMap.InciServer.CallFunction("SetAltRoute", "iAlt=" + iAlt, 0, me.pTopoliszMap.DrawRoute, null);
			}
		}
	}

	this.SwitchItiner = function(iAlternative)
	{
		if(iAlternative != me.iActiveAlt)
		{
			me.HideStartStopBanners();
			me.SetAltRoute(iAlternative);
			k = $("div.DetailedPTItiner").fadeOut(1000, me.SwitchItinerAnimateCallback);
		}
	}

	this.SwitchItinerAnimateCallback = function()
	{
		$("table.UI_itinerary").remove();
		jqDiv = $("div.DetailedPTItiner");
		var divP = jqDiv.get()[0];
		me.ShowItiner(me.pRoute, divP);
		jqDiv.fadeIn(500);
	}


	/// protected:
	/// Megjeleneti a kozlekedesi listat
	this.Show = function()
	{
		if(me.divMain)
		{
			while (me.divMain.hasChildNodes()) {
				me.divMain.removeChild(me.divMain.firstChild);
			}
			me.divMain.style.position = "relative";

			var divNoPrint = NewTag('div', me.divMain);
			divNoPrint.className = 'noprint';
			var table = NewTag('table', divNoPrint);
			table.className = 'UI_panel_header_container';
			table.cellPadding = 0;
			table.cellSpacing = 0;
			var tbody = NewTag('tbody', table);
			var tr = NewTag('tr', tbody);

			var td = NewTag('td', tr);
			td.className = 'UI_panel_header_left_off';
			td.style.width = "12px";
			var td = NewTag('td', tr);
			td.className = 'UI_panel_header_middle_off';

			var div = NewTag('div', td);
			div.className ='UI_panel_header_title';
			div.style.textAlign = "center";
			NewTextTag(g_Babel.GetWord('RouteResult'), div);

			var td = NewTag('td', tr);
			td.className = 'UI_panel_header_right_off';



			table = NewTag('table', me.divMain);
			table.className = 'UI_panel'
			table.cellPadding = 0;
			table.cellSpacing = 0;
			table.style.width = "100%";

			var td = AddThreeColRow(table, 'UI_panel_top');
			var img = NewTag('img', td);
			SetImage(img, GetAbsUrl('design/clear.gif'), 1, 1);

			var td = AddThreeColRow(table, 'UI_panel_content');

			me.ShowLinks(td);
			me.divTotal = NewTag('div', td);
			me.ShowTotal();
			if(me.IsPublicTransport())
			{
				me.ShowItinerList(td);
				var div = NewTag('div', td);
				div.className = "DetailedPTItiner";
				me.ShowItiner(me.pRoute, div);
			}
			else
			{
				me.ShowItiner(me.pRoute, td);
			}
			me.ShowLinks(td);

			var td = AddThreeColRow(table, 'UI_panel_bottom');
			var img = NewTag('img', td);
			SetImage(img, GetAbsUrl('design/clear.gif'), 1, 1);

			me.divRegistered = NewTag('div', me.divMain);
			if(GetBlock("idBannerMapBottom"))
				window.scrollTo(/*GetAbsLayerLeft(me.divMain)*/0, GetAbsLayerTop(GetBlock("idBannerMapBottom"))-10);
			
			if (me.OnShow) {
				try {
					me.OnShow();
				}
				catch (exp) {
					if(me.pTopoliszMap.OnError)
						me.pTopoliszMap.OnError(exp,'CUtvonaltervRouteResult.OnShow');
				}
			}
		}
	}


	this.GetAddressFlagUrl = function(iAddress)
	{
		if(me.pRoute && me.pRoute.arrMains)
		{
			if(iAddress == 0)
				return GetAbsUrl('design/ICON_flag_green.gif');
			if(iAddress == me.pRoute.arrMains.length)
				return GetAbsUrl('design/ICON_flag_red.gif');
		}
		return GetAbsUrl('design/ICON_flag_gray.gif');
	}
	
	this.GetAddressCaption = function(iAddress)
	{
		var strCaption = "";
		if(me.pRoute && me.pRoute.arrMains)
		{
			if(iAddress == 0)
			{
				strCaption = g_Babel.GetWord('Start');				
			}
			else if(iAddress == me.pRoute.arrMains.length)
			{
				strCaption = g_Babel.GetWord('Stop');
			}
			else
			{
				//strCaption = (iAddress) + ". " + "köztes célpont";
				strCaption = (iAddress+1) + ". ";
			}
		}
		return strCaption;
	}
	
	this.GetAddressTextSpan = function(iAddress)
	{
		var span = NewTag("span");
		var pMain = null;
		if(iAddress == 0)
		{
			pMain = me.pRoute.arrMains[0];
			if(pMain.strNameFrom != null && pMain.strNameFrom.length > 0)
			{
				NewTextTag(pMain.strNameFrom, span);
				NewTag('br', span);
				NewTextTag(pMain.strAddressFrom, span);
			}
			else
				NewTextTag(pMain.strAddressFrom, span);
		}
		else
		{
			pMain = me.pRoute.arrMains[iAddress-1];
			if(pMain.strNameTo != null && pMain.strNameTo.length > 0)
			{
				NewTextTag(pMain.strNameTo, span);
				NewTag('br', span);
				NewTextTag(pMain.strAddressTo, span);
			}
			else
				NewTextTag(pMain.strAddressTo, span);
		}
		return span;
	}
	
	this.GetAddressCoord = function(iAddress)
	{
		if(iAddress == 0)
			return new CCoordinate(me.pRoute.arrMains[0].dFromX, me.pRoute.arrMains[0].dFromY);
		else
			return new CCoordinate(me.pRoute.arrMains[iAddress-1].dToX, me.pRoute.arrMains[iAddress-1].dToY);
	}


	this.ShowTotal = function()
	{
		if(me.divTotal)
		{
			while(me.divTotal.firstChild)
				me.divTotal.removeChild(me.divTotal.firstChild);

			if(me.pRoute && me.pRoute.arrMains && me.pRoute.arrMains.length > 0)
			{
				var table = NewTag('table', me.divTotal);
				table.className = "UI_itiner_summary";
				table.cellPadding = 0;
				table.cellSpacing = 0;
				var tbody = NewTag('tbody', table);
				var tr = NewTag('tr', tbody);
				var td = NewTag('td', tr);
				td.colSpan = 4;
				td.className = "strong";
				var img = NewTag('img', td);
				img.className = "UI_icon";
				SetImage(img, GetAbsUrl('design/ICON_list_off.gif'), 13, 14);
				NewTextTag(g_Babel.GetWord("capRouteDetails"), td);

				var AddInfo = function(tbody, strName, nodeValue, iCol)
				{
					var tr = null;
					if(iCol > 0)
					{
						for(tr=tbody.firstChild; tr != null; tr = tr.nextSibling)
						{
							var arrTDs = tr.childNodes;
							if(arrTDs.length == 2* iCol)
								break;
						}
					}
					if(tr == null)
					{
						tr = NewTag('tr', tbody);
						for(var iTD =0; iTD < 2* iCol; iTD++)
						{
							var td = NewTag('td', tr);
							NewTextTag('\u00a0', td);
						}
					}
					
					var td = NewTag('td', tr);
					NewTextTag(strName, td);
					td = NewTag('td', tr);
					td.className = "strong";
					//NewTextTag(strValue, td);
					AddTag(nodeValue, td);
				}

				for(var iAddress = 0; iAddress< me.pRoute.arrMains.length+1; iAddress++)
				{
					AddInfo(tbody, me.GetAddressCaption(iAddress), me.GetAddressTextSpan(iAddress), 0);
				}

				if(me.IsCar() || me.IsPublicTransport())
				{
					var strTrafficTime = me.strTrafficTime;
					if(me.pRoute.iDiffHour < 0 || me.pRoute.iDiffHour > 0)
					{
						if(me.pRoute.iDiffHour > 0)
							strTrafficTime += " +";
						else
							strTrafficTime += " ";
							
						strTrafficTime += me.pRoute.iDiffHour + " " + g_Babel.GetWord("HourLong");
					}
					AddInfo(tbody, g_Babel.GetWord("capDetartureTime"), NewTextTag(strTrafficTime), 1);
				}

				// Időre optimalizálásnál az idő legyen előbb, távolságnál a távolság
				var iOptim = 0;
				if(me.IsCar())
					iOptim = me.pRouteSearch.iCarOptim;
				var bLengthDisplayed = false;
				for(var j=0; j<2; j++)
				{
					if((iOptim != j) && !bLengthDisplayed)
					{
						AddInfo(tbody, g_Babel.GetWord("capDistance"), NewTextTag(me.GetLengthText(me.pRoute.iLength)), 1);
						bLengthDisplayed = true;
					}
					else
					{
						if(me.pRoute.iTravelSeconds >= 60)
						{
							AddInfo(tbody, g_Babel.GetWord("capTravelTime"), NewTextTag(g_Babel.GetWord("Approx","kb.") + " " + me.GetTimeText(me.pRoute.iTravelSeconds)), 1);
						}
					}
				}

				if(me.pRouteSearch.dConsumption > 0 && me.pRouteSearch.dFuelPrice > 0 && me.IsCar())
				{
					var iFuelCost = me.ComputeFuelCost(me.pRoute);
					AddInfo(tbody, g_Babel.GetWord("capFuelCost"), NewTextTag(iFuelCost + " Ft"), 1);
				}
				
				if(me.pRouteSearch.dTaxiFeeBasic >= 0 && me.pRouteSearch.dTaxiFeeKm >= 0 && me.IsTaxi())
				{
					var iTaxiCost = me.ComputeTaxiCost(me.pRoute);
					AddInfo(tbody, g_Babel.GetWord("capTaxiCost"), NewTextTag(iTaxiCost + " Ft"), 1);
				}
				me.divTotal.style.display = "";
			}
			else
			{
				me.divTotal.style.display = "none";
			}
		}
	}
	
	this.ComputeFuelCost = function(pRoute)
	{
		var dCarLength = 0;
		for(var iMain = 0; iMain<pRoute.arrMains.length; iMain++)
		{
			var pMain = pRoute.arrMains[iMain];
			for(var iSub = 0; iSub < pMain.arrSubs.length; iSub++)
			{
				var pSub = pMain.arrSubs[iSub];
				if(me.IsCarSub(pSub))
					dCarLength += pSub.iLength;
			}
		}
		var iFuelCost = Math.round(dCarLength * me.pRouteSearch.dConsumption * me.pRouteSearch.dFuelPrice / 100000);
		return iFuelCost;
	}

	this.ComputeTaxiCost = function(pRoute)
	{
		var iGetOns = 0;
		var bInTaxi = false;
		var dTaxiLength = 0;
		
		for(var iMain = 0; iMain<pRoute.arrMains.length; iMain++)
		{
			var pMain = pRoute.arrMains[iMain];
			bInTaxi = false;
			for(var iSub = 0; iSub < pMain.arrSubs.length; iSub++)
			{
				var pSub = pMain.arrSubs[iSub];
				if(me.IsTaxiSub(pSub))
				{
					if(!bInTaxi)
						iGetOns++;
					bInTaxi = true;
					dTaxiLength += pSub.iLength;
				}
				else
					bInTaxi = false;
			}
		}
		var iTaxiCost = Math.round(iGetOns * me.pRouteSearch.dTaxiFeeBasic + dTaxiLength / 1000 * me.pRouteSearch.dTaxiFeeKm);
		return iTaxiCost;
	}

	this.ScrollToMap = function()
	{
		me.pTopoliszMap.ZoomToRect(me.pRoute.dLwrX, me.pRoute.dLwrY, me.pRoute.dUprX, me.pRoute.dUprY);
		var divPage = GetBlock("idPage");
		if(divPage)
			window.scrollTo(0, GetAbsLayerTop(divPage));
		else
			window.scrollTo(0,0);
	}

	this.AddThroughAddress = function()
	{
		me.pRouteSearch.AddThroughAddress();
		me.ScrollToMap();
	}
	
	
	this.ShowLinks = function(divParent, divBefore)
	{
		var div = NewTag('div', divParent, divBefore);
		div.className = 'noprint';
		var colorpanel = new ColorPanel(div);
		var panel = new Panel(colorpanel.td);

		var tr = panel.tr;

		var txtBtn = new TextButton();
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(15, 14, "design/icon_home_off.gif", "design/icon_home_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		var aa = txtBtn.CreateText(g_Babel.GetWord("capJumpToTheMap"));
		me.pLanguageSupporter.Add(aa,"innerHTML","capJumpToTheMap","","");
		txtBtn.OnClick = me.ScrollToMap;

		var txtBtn = new TextButton();
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(14, 15, "design/icon_mail_off.gif", "design/icon_mail_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
					
		if(typeof(g_TopoliszControls) != "undefined" && g_TopoliszControls.pLogin && g_TopoliszControls.pLogin && g_TopoliszControls.pLogin.name)
		{
			var mailToDef = g_TopoliszControls.pLogin.name ;
			var mailBody = "www.utvonalterv.hu/Handler.ashx?command=loadState%26info=" + g_TopoliszMap.SaveState();
			var mailSubject = "Utvonalterv.hu";			
			var mailHREF = "mailto:" + mailToDef + "?subject=" + mailSubject + "&body=" + mailBody;	
			td.innerHTML = "<a href=" + mailHREF + ">" + g_Babel.GetWord("capSendViaEmail") + "</a>";
		}
		else
		{
			txtBtn.SetTextParent(td);
			var aa = txtBtn.CreateText(g_Babel.GetWord("capSendViaEmail"));
			me.pLanguageSupporter.Add(aa,"innerHTML","capSendViaEmail","","");
			txtBtn.OnClick = me.SendMail;
		}
		//txtBtn.SetTextParent(td);
		//aa = txtBtn.CreateText(g_Babel.GetWord("capSendViaEmail"));
		//me.pLanguageSupporter.Add(aa,"innerHTML","capSendViaEmail","","");				
		//this.HandlerUrl + "?command=loadState&info=" + strState;
		//txtBtn.OnClick = me.SendMail;

		var txtBtn = new TextButton();
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(9, 15, "design/icon_sms_off.gif", "design/icon_sms_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		aa = txtBtn.CreateText(g_Babel.GetWord("capSendViaMMS"));
		me.pLanguageSupporter.Add(aa,"innerHTML","capSendViaMMS","","");
		txtBtn.OnClick = me.InnenOda;

		var txtBtn = new TextButton();
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(12, 15, "design/icon_print_off.gif", "design/icon_print_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		aa = txtBtn.CreateText(g_Babel.GetWord("capPrint"));
		me.pLanguageSupporter.Add(aa,"innerHTML","capPrint","","");
		txtBtn.OnClick = function() 
		{ 
			//print(); 
			me.pTopoliszMap.DrawPrintPreview();
			window.print();			
		};


		var txtBtn = new TextButton();
		txtBtn.SetHref("mailto:topolisz@topolisz.hu?subject=Panaszkodom");
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(15, 15, "design/icon_sad_off.gif", "design/icon_sad_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		aa = txtBtn.CreateText(g_Babel.GetWord('mailSad'));
		me.pLanguageSupporter.Add(aa,"innerHTML","hintRouteClear","","");

		var txtBtn = new TextButton();
		txtBtn.SetHref("mailto:topolisz@topolisz.hu?subject=Dics%c3%a9rek");
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(15, 15, "design/icon_happy_off.gif", "design/icon_happy_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		aa = txtBtn.CreateText(g_Babel.GetWord('mailHappy'));
		me.pLanguageSupporter.Add(aa,"innerHTML","hintRouteClear","","");


		var txtBtn = new TextButton();
		var td = NewTag('td', tr);
		td.className = 'right';
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(14, 14, "design/icon_delete_off.gif", "design/icon_delete_on.gif", null, null, false);
		var td = NewTag('td', tr);
		td.className = 'left';
		txtBtn.SetTextParent(td);
		aa = txtBtn.CreateText(g_Babel.GetWord('hintRouteClear'));
		me.pLanguageSupporter.Add(aa,"innerHTML","hintRouteClear","","");
		txtBtn.OnClick = me.Reset;
	}

	
	var iTR = 0;
	var GetTRParityClass = function()
	{
		if(iTR % 2 == 0 && me.IsPublicTransport())
			return 'odd';
		else
			return 'even';
	}

	var NewTR = function(tbody, bFirstItem, strCssClass)
	{
		if(bFirstItem)
		{
			if(tbody.lastChild && (tbody.firstChild != tbody.lastChild))
				tbody.lastChild.className += ' last';
		}
		var tr = NewTag('tr', tbody);
		tr.className = strCssClass;
		if(bFirstItem)
		{
			iTR++;
			tr.className += " first";
		}
		tr.className += ' ' + GetTRParityClass();
		return tr;
	}
	

	this.ShowItiner = function(pRoute, divParent, divBefore)
	{
		iTR = 0;
		var table = NewTag("table", divParent, divBefore);
		table.className = "UI_itinerary";

		if (me.IsCar()) {
			//GetBlock("adaptiveiframe").setAttribute("src", "adaptivemedia.html");
			//GetBlock("adaptiveiframe").style.display = "block";
		}
		else {
			//GetBlock("adaptiveiframe").style.display = "none";
		}

		var pBanner = me.GetStartStopBanner();
		if(pBanner)
			pBanner.Clear();


		//table.setAttribute('border', '1');
		table.cellPadding = 0;
		table.cellSpacing = 0;
		var tbody = NewTag("tbody", table);
		var tr, td, a, img;
		// az elso colspan nélküli sor
		tr = NewTag('tr', tbody);
		tr.className = "ROUTE_firstline";
		if(me.IsPublicTransport())
		{
			me.iColCount = 7;
		}
		else
		{
			me.iColCount = 5;
		}

		var arrColWidth = [ 0, 0, 0, 0, 0, 0, 30, 60 ];
		for(var i=0; i<me.iColCount; i++)
		{
			td = NewTag('td', tr);
			td.className = ""; //arrColStyles[i];
		//	if(arrColWidth[i] > 0)
		//		td.style.width = arrColWidth[i] + "px";
			img = NewTag('img', td);
			SetImage(img, GetAbsUrl('images/transparent.gif'), 1, 1, "");
		}

		me.iStartOrder = 0;
		for(var iMain=-1; (pRoute.arrMains!=null)&& (iMain<pRoute.arrMains.length); iMain++)
		{
			if(iMain >= 0)
			{
				if(me.IsPublicTransport())
					me.ShowDetailsPublic(tbody, pRoute, iMain);
				else
					me.ShowDetailsCar(tbody, pRoute, iMain, 0);
			}
			var pBanner = null;
			if(iMain == -1)
			{
				pBanner = me.GetStartBanner();
			}
			else if(iMain == pRoute.arrMains.length -1)
			{
				pBanner = me.GetStopBanner();
			}
			
			tr = NewTR(tbody, true, "ROUTE_addressflag");
			var td = NewTag('td', tr);
			if(iMain < 0)
			{
				td.style.borderTop = 'none';
				td.style.paddingTop = '0px';
//				td.style.backgroundColor = 'yellow';
			}
			td.colSpan = me.iColCount;
			td.className = 'strong';
			var img = NewTag('img', td);
			img.className = 'UI_icon';
			SetImage(img, me.GetAddressFlagUrl(iMain+1), 14, 14, "");
			var span = NewTag("span", td);
			NewTextTag(me.GetAddressCaption(iMain+1), span);
			if(pBanner)
				pBanner.AddParentArea(td, span);
			

			tr = NewTR(tbody, false, "ROUTE_address");
			
			if(me.IsPublicTransport())
			{
				td = NewTag('td', tr);
				td.className = "ROUTE_time";
				if(iMain < 0)
					NewTextTag(pRoute.arrMains[0].dtStart, td);
				else
					NewTextTag(pRoute.arrMains[iMain].dtStop, td);
				if(pBanner)
          pBanner.AddParentArea(td, td);
			}

			var td = NewTag('td', tr);
			if(me.IsPublicTransport())
				td.colSpan = me.iColCount - 2;
			else
				td.colSpan = me.iColCount - 1;

			td.className = 'strong';
			var span = me.GetAddressTextSpan(iMain+1);
			AddTag(span, td);
			var tdMapLink = me.AddMapLinkCell(tr, "", pRoute, iMain+1, -1, false, null);
			if(pBanner)
			{
				pBanner.AddParentArea(td, span);
				pBanner.AddParentArea(tdMapLink, tdMapLink);
			}
			

		}
		tr.className += ' last';
		me.ShowStartStopBanners();
	}
	
	this.ShowDetailsCar = function(tbody, pRoute, iRouteMain, iRouteSub)
	{
		var pMain = pRoute.arrMains[iRouteMain];

		var bHasRealData = false;
		var trOrigLast = tbody.lastChild;

		var iSumLength = 0;
		var iSumTime = 0;
		var eBlockType = 0;
		var iHiddenLength = 0;

		var iPass = 0;
		var iMaxPass = 0;
		var iTr = 0;
		var iMaxRouteSub = iRouteSub;
		for(iMaxRouteSub = iRouteSub; iMaxRouteSub < pMain.arrSubs.length -1; iMaxRouteSub++)
		{
			var routeSub = pMain.arrSubs[iMaxRouteSub];
			if(routeSub.arrPTRuns != null && routeSub.arrPTRuns.length > 0)
			{
				iMaxRouteSub--;
				break;
			}
		}
		while(iRouteSub<=iMaxRouteSub)
		{
			var routeSub = pMain.arrSubs[iRouteSub];
			var bHeader = false;
			var bFirstItem = false; // Header alatti sor
			var bLastItem = false; // Utolsó sor alatti összesítő oszlop
			var strClassPostFix = "";

			//Hányszor menjünk végig rajta
			if(iPass == 0)
			{
				if(routeSub.eType == 1 || routeSub.eType == 2)
					iMaxPass++;
				if(iRouteSub == iMaxRouteSub)
				{
					iMaxPass++;
				}
			}
			
			
			if(routeSub.eType == 1 || routeSub.eType == 2)
			{
				eBlockType = routeSub.eType;
				if(iPass == 0)
				{
					bHeader = true;
				}
				else if(iPass == 1)
					bFirstItem = true;
			}
			
			if((iPass == iMaxPass) && (iRouteSub == iMaxRouteSub)) 
			{
				bLastItem = true;
			}

			var bNumbered = false; // Kell-e új sorszám illetve iránytábla
			if(eBlockType==1) // Országos útaknál fejlécben jelezzük ki, a többinél pedig pont fejlécben nem.			
			{
				bNumbered = bHeader;
			}
			else
			{
				bNumbered = !bHeader;
			}

			var bSkip = false; //Nem kijelzett szakaszok
			if(!bHeader && eBlockType==1 && !bLastItem)
			{
				if(routeSub.strCity == "")   //Országos útnál a név nélküli szakaszokat nem kell kíirni
					bSkip = true;
				//Ha ez az első szakasz a blokkban és az előző szakasszak megegyezik a településnév akkor ezt a települést már nem kell kiírni.
				if(iRouteSub > 0 && bFirstItem)
				{
					if(pMain.arrSubs[iRouteSub-1].strCity == routeSub.strCity)
						bSkip = true;
				}
				
				//Ha a következő szakasz egy település fejléc és egyeznek a nevek, akkor azt a települést már nem kell kiírni
				if(iRouteSub+1<pMain.arrSubs.length)
				{
					if((pMain.arrSubs[iRouteSub+1].eType == 2) &&
					  (pMain.arrSubs[iRouteSub+1].strCity == routeSub.strCity))
						bSkip = true;
				}
			}
			if(!bHeader && eBlockType!=1)
			{
				if(routeSub.bFoot && routeSub.strStreet == "")
					bSkip = true;
			}

			if(!bSkip)
			{
				var tr = NewTag('tr', tbody);
				tr.className = "UI_itinerary" + ((iTr++)%2);

				if(eBlockType == 1)
					strClassPostFix = 'Road';
				else if(eBlockType==2)
					strClassPostFix = 'City';
		
				if(!bHeader)
					strClassPostFix += 'Item';

				// Sorszám helye
				if(me.IsPublicTransport())
					me.CreateOrderCell(tr, false);

				// Össztáv
				td = NewTag('td', tr);
				td.className = 'RouteSumLength' + strClassPostFix;
				if(iSumLength > 0)
					NewTextTag(me.GetLengthText(iSumLength), td);
				else
					NewTextTag('\u00a0', td);

				// Összidő
				td = NewTag('td', tr);
				td.className = 'RouteSumTime' + strClassPostFix;
				if(iSumTime > 0)
					NewTextTag(me.GetTimeText(iSumTime), td);
				else
					NewTextTag('\u00a0', td);
	
//			// Ikon
//			td = NewTag('td', tr);
//			td.className = 'RouteItemIcon' + strClassPostFix;
//			img = NewTag('img');
//			SetImage(img, GetAbsUrl('images/transparent.gif'), 1, 1, "");

				// Irány :
				td = NewTag('td', tr);
				td.className = 'RouteDirection' + strClassPostFix;
				img = NewTag('img');
				img.className = "turninfo";
				if(bNumbered && !bLastItem) // Országos útaknál fejlécben jelezzük ki, a többinél pedig pont fejlécben nem.
					me.SetTurnImage(img, routeSub.eTurnInfo);
				else
					SetImage(img, "images/transparent.gif", 30, 22);
				AddTag(img, td);

				//Szöveg
				td = NewTag('td', tr);
				if(me.IsPublicTransport())
					td.colSpan = 2;
				td.className = 'RouteText' + strClassPostFix;
				if(bLastItem)
				{
					NewTextTag('\u00a0', td);
				}
				else
				{
					if(bHeader && routeSub.eType == 1)
					{
						var span = me.NewRoadTag(routeSub.strRoad); // Országos ut fejlec
						if(span.hasChildNodes())
						{
							AddTag(span, td); // Országos ut fejlec
							bHasRealData = true;
						}
					}
					else if(bHeader && routeSub.eType == 2)
					{
						if(routeSub.strCity != null && routeSub.strCity.length > 0)
						{
							NewTextTag(routeSub.strCity, td); // Település fejléc
							bHasRealData = true;
						}
					}
					else
					{
						me.AddPedCrossingImage(td, routeSub);
						var span = me.NewRoadTag(me.GetSubText(routeSub,eBlockType));
						if(span.hasChildNodes())
						{
							AddTag(span, td);
							me.AddPedTypeImages(td, routeSub);
							bHasRealData = true;
						}
					}

					// Szakasztáv
					var span = NewTag('span', td);
					span.className = 'RouteLength' + strClassPostFix;

					var iLength = 0;
					if(bHeader && eBlockType == 1) // Országos fejlécnél az alatta szereplő szakaszok hossza
					{
						iLength = me.GetRoadLength(pMain, iRouteSub);
					}
					else if(eBlockType == 1) // Országos sornál: semmi
					{
						iLength = 0;
					}
					else if(!bHeader) // Városi sor: szakaszhossz
					{
						iLength = routeSub.iLength;
					}
					else // Városi fejléc: semmi
					{
						iLength = 0;
					}
					if(iLength > 0)
					{
						NewTextTag(" (" + me.GetLengthText(iLength) + ")", span);
					}
				}
				// MapLink
				if(bLastItem)
				{
					td.colSpan = 4;
				}
				else
				{
					me.AddMapLinkCell(tr, strClassPostFix, pRoute, iRouteMain, iRouteSub,bHeader, null);
				}

				iHiddenLength = 0;
			}
			else
			{
				iHiddenLength += routeSub.iLength; // Nemlátható szakaszhosszak összegyűjtése országos utak alá tördelt települések számára
			}

			if(!bFirstItem && (iPass == 0))
			{
				iSumLength += routeSub.iLength;
				iSumTime += routeSub.iTravelSeconds;
			}
			//if((bHeader && iPass == 0))
			if(iPass < iMaxPass)
			{
				iPass++;
			}
			else
			{
				iPass = 0;
				iMaxPass = 0;
				iRouteSub++;
			}
		}
		if(!bHasRealData)
		{
			while(tbody.lastChild && (tbody.lastChild != trOrigLast))
			{
				tbody.removeChild(tbody.lastChild);
			}
		}
		return iRouteSub;
	}
	
	this.GetVehicleTypeImage = function(iVehicleTypeID)
	{
		var strImage = "";
		if(iVehicleTypeID == 1 || (7 <= iVehicleTypeID && iVehicleTypeID <= 12) 
		 ||iVehicleTypeID == 16 || iVehicleTypeID == 24 || iVehicleTypeID == 29)
			strImage = "VEHICLE_bus.gif";
		else if(iVehicleTypeID == 5)
			strImage = "VEHICLE_tram.gif";
		else if(iVehicleTypeID == 3)
			strImage = "VEHICLE_HEV_railway.gif";
		else if(iVehicleTypeID == 4)
			strImage = "VEHICLE_metro.gif";
		else if(iVehicleTypeID == 6)
			strImage = "VEHICLE_trolleybus.gif";
		else if(13 <= iVehicleTypeID)
			strImage = "VEHICLE_train.gif";
		return strImage;
	}
	
	this.CreateOrderCell = function(tr, bNewNumber)
	{
		// Sorszám
		var td = NewTag('td', tr);
		td.className = 'ROUTE_order';
		td.className += ' ' + GetTRParityClass();
		if(bNewNumber)
		{
			var div = NewTag('div', td);
			div.className = "UI_itinerary_number";
			NewTextTag( (++me.iStartOrder) +'.', div);
		}
		else
			NewTextTag('\u00a0', td);
		return td;
	}
	
	this.GetFootDistanceAndTime = function(pRoute, iRouteMain, iRouteSub)
	{
		var pMain = pRoute.arrMains[iRouteMain];
		var iLength = 0;
		var iTravelSeconds = 0;
		while(iRouteSub<pMain.arrSubs.length)
		{
			var routeSub = pMain.arrSubs[iRouteSub];
			if(routeSub.arrPTRuns != null && routeSub.arrPTRuns.length > 0)
				break;
			iLength += routeSub.iLength;
			iTravelSeconds += routeSub.iTravelSeconds;
			iRouteSub++;
		}
		var obj = new Object();
		obj.iLength = iLength;
		obj.iTravelSeconds = iTravelSeconds;
		return obj;
	}
	

	this.ShowDetailsPublic = function(tbody, pRoute, iRouteMain)
	{
		var tr, td, a, img;
		var pMain = pRoute.arrMains[iRouteMain];

		for(var iRouteSub=0; iRouteSub<pMain.arrSubs.length; iRouteSub++)
		{
			var routeSub = pMain.arrSubs[iRouteSub];

			var strClassPostFix = 'Item';
			// Átszállás azonos megállóban: 0 hosszú gyalogos szakasz előtte, utána tömeg;
			if ( iRouteSub > 0 && iRouteSub < pMain.arrSubs.length-1 
				&& (routeSub.iLength == 0)
				&& (pMain.arrSubs[iRouteSub-1].arrPTRuns != null && pMain.arrSubs[iRouteSub-1].arrPTRuns.length > 0)
				&& (pMain.arrSubs[iRouteSub+1].arrPTRuns != null && pMain.arrSubs[iRouteSub+1].arrPTRuns.length > 0)
				)
			{
				tr = NewTR(tbody, true, "ROUTE_line");
				//Sorszám
				me.CreateOrderCell(tr, true);
				// Ikon
				td = NewTag('td', tr);
				td.className = 'ROUTE_icon';
				var img = NewTag('img', td);
				//SetImage(img, "design/VEHICLE_pedestrian.gif", 35, 25);
				SetImage(img, "images/transparent.gif", 35, 25);
				// Név
				td = NewTag('td', tr);
				td.className = ('ROUTE_line');
				td.colSpan = 4;

				NewTextTag(g_Babel.GetWord("PTChangeHere"), td);

				var span = NewTag('span', td);
				span.className = 'RouteLength' + strClassPostFix;
				NewTextTag(" (" + routeSub.strStreet +")", span);

				// Térképlink
				me.AddMapLinkCell(tr, strClassPostFix, pRoute, iRouteMain, iRouteSub,false, routeSub.strVehicleType);
			}
			// Gyalogos szakaszok
			else if(routeSub.arrPTRuns == null || routeSub.arrPTRuns.length == 0)
			{
				tr = NewTR(tbody, true, "ROUTE_line");
				//Sorszám
				me.CreateOrderCell(tr, true);
				// Ikon
				td = NewTag('td', tr);
				td.className = 'ROUTE_icon';
				var img = NewTag('img', td);
				if(me.IsCarSub(routeSub))
					SetImage(img, "design/VEHICLE_car.gif", 35, 25);
				else if (me.IsBicycleSub(routeSub))
					SetImage(img, "design/VEHICLE_bicycle.gif", 35, 25);
				else if (me.IsTaxiSub(routeSub))
					SetImage(img, "design/VEHICLE_taxi.gif", 35, 25);
				else
					SetImage(img, "design/VEHICLE_pedestrian.gif", 35, 25);
				// Név
				td = NewTag('td', tr);
				td.className = ('ROUTE_line');
				td.colSpan = 4;

				if(me.IsCarSub(routeSub))
					NewTextTag(g_Babel.GetWord("VT_CAR"), td);
				else if (me.IsBicycleSub(routeSub))
					NewTextTag(g_Babel.GetWord("VT_BICYCLE"), td);
				else if (me.IsTaxiSub(routeSub))
					NewTextTag("Taxi", td);
				else
					NewTextTag(g_Babel.GetWord("Walking"), td);

				var obj = me.GetFootDistanceAndTime(pRoute, iRouteMain, iRouteSub);
				if(obj.iLength > 0 || obj.iTravelSeconds > 0)
				{
					var span = NewTag('span', td);
					span.className = 'RouteLength' + strClassPostFix;
					NewTextTag(" (", span);
					if(obj.iLength > 0)
					{
						NewTextTag(me.GetLengthText(obj.iLength), span);
						if(obj.iTravelSeconds >= 60)
							NewTextTag(", ", span);
					}
					if(obj.iTravelSeconds >= 60)
						NewTextTag(me.GetTimeText(obj.iTravelSeconds), span);
					NewTextTag(")", span);
				}
				
				
				// Térképlink
				me.AddMapLinkCell(tr, strClassPostFix, pRoute, iRouteMain, iRouteSub,false, routeSub.strVehicleType);
				// Autós itiner
				var iNextRouteSub = me.ShowDetailsCar(tbody, pRoute, iRouteMain, iRouteSub);
				if(iNextRouteSub < pMain.arrSubs.length)
				{
					iRouteSub = iNextRouteSub;
					routeSub = pMain.arrSubs[iRouteSub];
				}
				else
					break;
			}

			for(var iRun=0; (routeSub.arrPTRuns!=null) && (iRun<routeSub.arrPTRuns.length); iRun++)
			{
				var pRun = routeSub.arrPTRuns[iRun];
				if(iRun == 0)
					tr = NewTR(tbody, true, "ROUTE_line");
				else
					tr = NewTR(tbody, false, "ROUTE_altline");
				
				// Sorszám
				me.CreateOrderCell(tr, iRun==0);

				// Icon
				td = NewTag('td', tr);
				td.className = 'ROUTE_icon';
				var strImage = "";
				if(iRun == 0)
				{
					strImage = me.GetVehicleTypeImage(pRun.iVehicleTypeID);
				}
				if(strImage != "")
				{
					var img = NewTag('img', td);
					SetImage(img, "design/" + strImage, 35, 25);
				}
				else
				{
					//if(iRun != 0)
					//	td.style.borderTop = "none";
					NewTextTag('\u00a0', td);
				}

				//járatnév
				td = NewTag('td', tr);
				td.className = (iRun == 0 ? 'ROUTE_line' : 'ROUTE_altline');
				td.colSpan = 3;
				if(iRun != 0)
				{
					var span = NewTag('span', td);
					span.style.fontWeight = 'normal';
					span.style.marginRight = '2mm';
					NewTextTag("vagy:", span);
				}
				
				if(pRun.bShowName && pRun.bShowDescription)
				{ // MÁV
					var iPos = pRun.strName.indexOf(' ');
					if(iPos > 0)
					{ // IC
						span = NewTag('span', td);
						span.className = "weak";
						NewTextTag(pRun.strName.substr(0, iPos), span);
						span = NewTag('span', td);
						span.className = pRun.strClass;
						NewTextTag(pRun.strName.substr(iPos+1) + " " + pRun.strVehicleType, span);
						span = NewTag('span', td);
						span.className = "weak";
						NewTextTag("("+pRun.strDescription +")", span);
					}
					else
					{ // Hagyományos
						span = NewTag('span', td);
						span.className = "weak";
						NewTextTag(pRun.strName, span);
						span = NewTag('span', td);
						span.className = pRun.strClass;
						NewTextTag(pRun.strDescription, span);
						NewTextTag(pRun.strVehicleType, td);
					}
				}
				else 
				{ 
					span = NewTag('span', td);
					span.className = pRun.strClass;

					if(pRun.bShowName)
					{ // Bkv
						NewTextTag(pRun.strName, span);
					}
					
					if(pRun.bShowDescription)
					{ // Volán
						NewTextTag(pRun.strName, span);
					}

					NewTextTag(pRun.strVehicleType, td);
				}
				

				//járatlink
				me.AddInfoLinkCell(tr, pRun.strLink);

				//Maplink helye - szolgáltató ikon
				td = NewTag('td', tr);
				td.className = "ROUTE_spicon";
				//td.colSpan = 2;
				var strImage = "";
				if(iRun == 0)
				{
					if(pRun.iServiceProviderID == 1)
						strImage = "PTLOGO_bkv_100x35.gif";
					else if(pRun.iServiceProviderID == 2)
						strImage = "PTLOGO_mavstart_180x35.gif";
				}
				if(strImage != "")
				{
					var img = NewTag('img', td);
					if(pRun.iServiceProviderID == 2)
						SetImage(img, "design/" + strImage, 90, 20);
					else
						SetImage(img, "design/" + strImage, 60, 20);
				}
				else
					NewTextTag('\u00a0', td);


				//Járathoz tartozó sorok
				if(iRun == 0)
				{
					// Felszáll Sor
					tr = NewTR(tbody, false, "ROUTE_geton");
					// Sorszám helye
					me.CreateOrderCell(tr, false);
					// Felszállás ideje
					td = NewTag('td', tr);
					td.className = "ROUTE_time";
					NewTextTag(routeSub.dtStart, td);
					// Felszállás:
					td = NewTag('td', tr);
					td.className = "ROUTE_geton";
					NewTextTag(g_Babel.GetWord('PTGetOn'), td);
					// Felszállás megállója
					td = NewTag('td', tr);
					td.colSpan = 3;
					td.className = "ROUTE_stop";
					NewTextTag(routeSub.strStopFrom, td);

					// Utazás sor
					tr = NewTR(tbody, false, "ROUTE_travel");
					// Sorszám helye
					td = me.CreateOrderCell(tr, false);
					td.colSpan = 3;

					// hány megálló
					td = NewTag('td', tr);
					td.colSpan = 3;
					td.className = 'ROUTE_travel';
					NewTextTag(pRun.iStops, td);
					NewTextTag(" " + g_Babel.GetWord('PTStops'), td);
					if(routeSub.iLength > 0)
					{
						NewTextTag(", " + me.GetLengthText(routeSub.iLength), td);
					}
					// MapLink Járat
					me.AddMapLinkCell(tr, "PT", pRoute, iRouteMain, iRouteSub,true, null);
					
					// Leszáll Sor
					tr = NewTR(tbody, false, "ROUTE_getoff");
					// Sorszám helye
					me.CreateOrderCell(tr, false);
					// Leszállás ideje
					td = NewTag('td', tr);
					td.className = "ROUTE_time";
					NewTextTag(routeSub.dtStop, td);
					// Leszállás
					td = NewTag('td', tr);
					td.className = "ROUTE_getoff";
					NewTextTag(g_Babel.GetWord('PTGetOff'), td);
					// Leszállás megállója
					td = NewTag('td', tr);
					td.className = "ROUTE_stop";
					td.colSpan = 4;
					NewTextTag(routeSub.strStopTo, td);
				}
			}
		}
	}
	
	this.AddMapLinkCell = function(tr, strClassPostFix, pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType)
	{
		var td = NewTag('td', tr);
		td.className = 'RouteMapLink' + strClassPostFix;
		var txtBtn = new TextButton();
		txtBtn.SetImgParent(td);
		txtBtn.CreateImage(12, 15, "design/ICON_display_WHITE_off.gif", "design/ICON_display_WHITE_on.gif", null, null, false);
		txtBtn.SetTextParent(td);
		var txt = txtBtn.CreateText(g_Babel.GetWord("capMap"));
		me.pLanguageSupporter.Add(txt,"innerHTML","capMap","","");
		var switchsubmap = function()
		{
			me.SwitchSubMap(txtBtn, pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType);
		}
		txtBtn.OnClick = switchsubmap;
		return td;
	}

	this.AddInfoLinkCell = function(tr, strLink)
	{
		var td = NewTag('td', tr);
		td.className = 'ROUTE_infolink';
		if(strLink != null && strLink.length > 0)
		{
			var txtBtn = new TextButton();
			txtBtn.SetHref(strLink);
			txtBtn.SetImgParent(td);
			txtBtn.CreateImage(10, 15, "design/ICON_document_off.gif", "design/ICON_document_on.gif", null, null, false);
			txtBtn.SetTextParent(td);
			var txt = txtBtn.CreateText(g_Babel.GetWord("RunInfoLink"));
			me.pLanguageSupporter.Add(txt,"innerHTML","RunInfoLink","","");
		}
		else
		{
			NewTextTag('\u00a0', td);
		}
	}


	var GetOrderTD = function(tr)
	{
		if(tr.firstChild && tr.firstChild.className.indexOf('ROUTE_order') >= 0)
			return tr.firstChild;
		return null;
	}

	this.GetBlockCount = function(pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType)
	{
		if(pRoute)
		{
			var pMain = pRoute.arrMains[iRouteMain];
			if( (iRouteSub<pMain.arrSubs.length) && (pMain.arrSubs[iRouteSub] != null))
			{
				if(bHeader || (strVehicleType != null))
				{
					if(strVehicleType != null)
						strVehicleType = strVehicleType.toLowerCase();
					var iCount = 1;
					for(i=iRouteSub+1; i<pMain.arrSubs.length; i++)
					{
						if(bHeader && (pMain.arrSubs[i].eType > 0))
							break;
						if((strVehicleType != null) && pMain.arrSubs[i].strVehicleType.toLowerCase() != strVehicleType)
							break;
						iCount++;
					}
					return iCount;
				}
				return 1;
			}
		}
		return 0;
	}


	this.SwitchSubMap = function(txtBtn, pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType)
	{
		me.HideStartStopBanners();
		var td = null;
		var tdMaplink = txtBtn.aText.parentNode;
		var trParent = tdMaplink.parentNode;
		if(trParent.nextSibling && (trParent.nextSibling.className.indexOf('ROUTE_map') >= 0))
		{
			trParent.parentNode.removeChild(trParent.nextSibling);
			return;
		}

		var tr = NewTag('tr', trParent.parentNode, trParent.nextSibling);
		var strClassName = trParent.className;
		var iPos = strClassName.indexOf("first");
		if(iPos >= 0)
			strClassName = strClassName.substr(0, iPos) + strClassName.substr(iPos+6);
		strClassName += " ROUTE_map";

		tr.className = strClassName;

		var iColSpan = me.iColCount;
		var tdOrder = GetOrderTD(trParent);
		if(tdOrder)
		{
			td = NewTag('td', tr);
			td.className = tdOrder.className;
			NewTextTag('\u00a0', td);
			iColSpan--;
		}
		td = NewTag('td', tr);
		td.colSpan = iColSpan;

		me.ShowSubMap(td, pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType);
		/*
		td = NewTag('td', tr);
		td.className = tdMaplink.className;
		NewTextTag('\u00a0', td);
		*/
	}
	
	
	this.ShowSubMap = function(divParent, pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType)
	{
		if(pRoute)
		{
			var pMain = pRoute.arrMains[iRouteMain];

			var dLwrX, dLwrY, dUprX, dUprY;
			if(iRouteSub < 0)
			{
				var coord = me.GetAddressCoord(iRouteMain);
				dLwrX = dUprX = coord.dX;
				dLwrY = dUprY = coord.dY;
				/*
				dLwrX = Math.min(pMain.dLwrX, pMain.dUprX);
				dLwrY = Math.min(pMain.dLwrY, pMain.dUprY);
				dUprX = Math.max(pMain.dLwrX, pMain.dUprX);
				dUprY = Math.max(pMain.dLwrY, pMain.dUprY);*/
			}
			else if( (iRouteSub<pMain.arrSubs.length) && (pMain.arrSubs[iRouteSub] != null))
			{
				var pSub = pMain.arrSubs[iRouteSub];
				dLwrX = Math.min(pSub.dLwrX, pSub.dUprX);
				dLwrY = Math.min(pSub.dLwrY, pSub.dUprY);
				dUprX = Math.max(pSub.dLwrX, pSub.dUprX);
				dUprY = Math.max(pSub.dLwrY, pSub.dUprY);
				var i;
				var iCount = me.GetBlockCount(pRoute, iRouteMain, iRouteSub, bHeader, strVehicleType);
				for(i=iRouteSub+1; i<iRouteSub+iCount; i++)
				{
					if(pMain.arrSubs[i].dLwrX < dLwrX)
						dLwrX = pMain.arrSubs[i].dLwrX;
					if(pMain.arrSubs[i].dUprX < dLwrX)
						dLwrX = pMain.arrSubs[i].dUprX;

					if(pMain.arrSubs[i].dLwrY < dLwrY)
						dLwrY = pMain.arrSubs[i].dLwrY;
					if(pMain.arrSubs[i].dUprY < dLwrY)
						dLwrY = pMain.arrSubs[i].dUprY;

					if(pMain.arrSubs[i].dLwrX > dUprX)
						dUprX = pMain.arrSubs[i].dLwrX;
					if(pMain.arrSubs[i].dUprX > dUprX)
						dUprX = pMain.arrSubs[i].dUprX;

					if(pMain.arrSubs[i].dLwrY > dUprY)
						dUprY = pMain.arrSubs[i].dLwrY;
					if(pMain.arrSubs[i].dUprY > dUprY)
						dUprY = pMain.arrSubs[i].dUprY;
				}
			}
			else
				return;
				
			var div = NewTag('div', divParent);
			div.className = "ROUTE_map";
			//div.style.width = GetLayerWidth(divParent) + "px";
			//div.style.marginLeft = "auto";

			var pMap = new CTopoliszMap(me.pTopoliszMap.GetSessionID(), div, false);
			pMap.strRole = "itinermap";
			pMap.UnSetFocus();
			pMap.Init();
			new CUtvonaltervMapPalette(pMap, true);
			me.pTopoliszMap.CopyMarkersAndPois(pMap);
			pMap.InitGrid ();
			
			pMap.iMainGridImageOpacity=me.pTopoliszMap.iMainGridImageOpacity;
			pMap.m_bPaleMapGridImage = me.pTopoliszMap.m_bPaleMapGridImage;
			
			if(dLwrX == dUprX && dLwrY == dUprY)
				pMap.ZoomToPoint(dLwrX, dLwrY, 100);
			else
				pMap.ZoomToRect(dLwrX, dLwrY, dUprX, dUprY);
				
			pMap.Show();
			pMap.SetBorderThickness (2);
		}
	}



	/// protected:
	// -----------------------------------------------
	/// Kiuriti a kozlekedesi listat, letorli a kozlekedest a terkeprol
	this.Reset = function()
	{
		me.ScrollToMap();
		me.pRouteSearch.Reset();
	}
	
	this.ResetAltTimes = function()
	{
		me.iAltDifferenceBeforeHour = -me.iAltDiffStepHour;
		me.iAltDifferenceAfterHour = me.iAltDiffStepHour;
	}
	

	/// private:
	this.FillRoute = function(pRouteRes, clientParams)
	{
		var bZoomMap = clientParams.bZoomMap;
		me.strTrafficTime = clientParams.strTrafficTime;
		me.pRouteSearch.ClearAlertDiv();
		me.DeleteRoute(false);
		me.arrRoutes = pRouteRes;
		me.pRoute = null;
		me.iActiveAlt = 0;
		me.ResetAltTimes();
		
		if(me.arrRoutes != null && me.arrRoutes.length > 0)
		{
			me.pRoute = me.arrRoutes[0];
			if (me.IsCar() || me.IsTaxi())
			{
				SetWaType("car");
				me.pTopoliszMap.SetPalingGridImage (true);				
	            if (me.pTopoliszMap.pConnectedMiniMap)
       				me.pTopoliszMap.pConnectedMiniMap.SetPalingGridImage (true);
			}
			else
			{
				me.pTopoliszMap.SetPalingGridImage (true);
	            if (me.pTopoliszMap.pConnectedMiniMap)
       				me.pTopoliszMap.pConnectedMiniMap.SetPalingGridImage (true);
			
				if(me.pRouteSearch)
				{
					if(me.pRouteSearch.bUsePTLocal && me.pRouteSearch.bUsePTTrain)
						SetWaType("pt");
					else if(me.pRouteSearch.bUsePTLocal)
						SetWaType("bkv");
					else if(me.pRouteSearch.bUsePTTrain)
						SetWaType("train");
				}
				for(var i=0; i<me.arrRoutes.length; i++)
				{
					me.CalcRunChanges(me.arrRoutes[i]);
				}
				me.pTopoliszMap.iMainGridImageOpacity = 100;
                if (me.pTopoliszMap.pConnectedMiniMap)				
                    me.pTopoliszMap.pConnectedMiniMap.iMainGridImageOpacity = 100;				
			}
			me.Show();
			if(bZoomMap)
			{
				var pRoute = me.arrRoutes[0];
				me.pTopoliszMap.ZoomToRect(pRoute.dLwrX, pRoute.dLwrY, pRoute.dUprX, pRoute.dUprY);
			}
			else
			{
				//if (me.pTopoliszMap.bHasMiniMap == true) alert("5");
				me.pTopoliszMap.DrawRoute();
			}
			var strTitle = "Útvonalterv.hu";
			for(var iMain=0; (me.pRoute.arrMains!=null)&& (iMain<=me.pRoute.arrMains.length); iMain++)
			{
				strTitle += " - ";
				if(iMain == 0)
					strTitle += me.pRoute.arrMains[iMain].strAddressFrom;
				else
					strTitle += me.pRoute.arrMains[iMain-1].strAddressTo;
			}
			strTitle += " " + g_Babel.GetWord("titleMapAndItiner");
			
			document.title = strTitle;
		}
		else
		{
			var strMessage = g_Babel.GetWord('TrafficErrorCar');
			if (me.pRouteSearch.IsByPublicTransport())
			{
				strMessage = g_Babel.GetWord('TrafficErrorBkvDefault');

				strMessage += " (" + me.strTrafficTime + ")";
			}
			else if(me.pRouteSearch.IsOnFoot())
				strMessage = g_Babel.GetWord('TrafficErrorFootDefault');
			var alertbox = new Alert(me.pRouteSearch.GetAlertDiv());
			NewTextTag("Figyelmeztetés", alertbox.th);
			NewTextTag(strMessage, alertbox.td);
			window.scrollTo(0, GetAbsLayerTop(alertbox.table));
		}
	}
	
	this.FillAltRoute = function(pRouteRes, iDiffHour)
	{
		if(pRouteRes != null)
		{
			if(iDiffHour >= 0)
			{
				for(var i=0; i<pRouteRes.length; i++)
				{
					pRouteRes[i].iDiffHour = iDiffHour;
					me.CalcRunChanges(pRouteRes[i]);
					me.arrRoutes[me.arrRoutes.length] = pRouteRes[i];
				}
			}
			else
			{
				var i=me.arrRoutes.length; 
				while(i--)
				{
					me.arrRoutes[i].iAlternative += pRouteRes.length;
					me.arrRoutes[i + pRouteRes.length] = me.arrRoutes[i];
					
				}
				for(i=0; i<pRouteRes.length; i++)
				{
					pRouteRes[i].iDiffHour = iDiffHour;
					me.CalcRunChanges(pRouteRes[i]);
					me.arrRoutes[i] = pRouteRes[i];
				}
			}
			me.arrRoutes.sort(me.RouteCompare);
		}
		if(iDiffHour == me.iAltDifferenceBeforeHour)
			me.iAltDifferenceBeforeHour -= me.iAltDiffStepHour;
		else if(iDiffHour == me.iAltDifferenceAfterHour)
			me.iAltDifferenceAfterHour += me.iAltDiffStepHour;

		me.Show();
	}

	/// private:
	/// Torli a kozlekedesi listat
	this.DeleteRoute = function ()
	{
		//document.title = "Útvonalterv.hu - " + me.pTopoliszMap.strDefaultCountry +" " + g_Babel.GetWord("titleMap");
		if(me.divMain)
		{
			while(me.divMain.firstChild)
				me.divMain.removeChild(me.divMain.firstChild);
		}
	}

	//iBlockType: 
	//1: In a Road block, show only City
	//2: In a City block: show global
	this.GetSubText = function(routeSub,eBlockType)
	{
		var strName = "";
		// RoadBlock
		if(eBlockType == 1)
		{
			strName = routeSub.strCity;
		}
		else //if(iBlockType == 2)
		{
			strName = routeSub.strStreet;
			if(strName == "")
				strName = routeSub.strRoad;
			if(strName == "")
				strName = routeSub.strInternational;
		}
		//if(strName == "" && eBlockType == 3)
		//{
		//	strName = "Gyaloglás";
		//}
		
		return strName;
	}

	this.GetRoadLength = function(pRouteMain, iRouteSub)
	{
		var iRoadLength = 0;
		var bFirst = true;
		for(;iRouteSub< pRouteMain.arrSubs.length; iRouteSub++)
		{
			var routeSub = pRouteMain.arrSubs[iRouteSub];

			if(bFirst)
			{
				if(routeSub.eType != 1)
					break;
				bFirst = false;
			}
			else
			{
				if(routeSub.eType == 1 || routeSub.eType == 2)
					break;
			}
			iRoadLength += routeSub.iLength;
		}
		return iRoadLength;
	}

	this.GetLengthText = function(iMeter)
	{
		var str = "";
		if(iMeter > 0)
		{
			iMeter = parseInt(iMeter, 10);
			if(iMeter < 1000)
				str = iMeter + " m";
			else
				str = (Math.round(iMeter/100)/10) + " km";
		}
		return str;
	}

	this.GetTimeText = function(iSeconds)
	{
		var str = "";
		var iMinutes = Math.floor(iSeconds / 60);
		if(iMinutes > 0)
		{
			if(iMinutes<60)
				str = iMinutes + "'";//g_Babel.GetWord('Minute');
			else
			{
				var iMin = iMinutes%60;
				str = Math.floor(iMinutes/60) + g_Babel.GetWord('HourShort') + (iMin>9 ? iMin : "0"+iMin) + g_Babel.GetWord('MinuteShort');
			}
		}
		return str;
	}

	this.SetTurnImage = function(img, eTurnInfo)
	{
		var strUrl = GetAbsUrl("images/turninfo/");
		var strAlt = "";
		switch(eTurnInfo)
		{
			case 2: //TI_SLIGHTLY_LEFT
				strUrl += "slight_left.gif"; strAlt = "enyhén balra"; break;
			case 4: //TI_LEFT
				strUrl += "left.gif"; strAlt = "balra"; break;
			case 6: //TI_SHARPLY_LEFT
				strUrl += "sharp_left.gif"; strAlt = "élesen balra"; break;
			case 3: //TI_SLIGHTLY_RIGHT
				strUrl += "slight_right.gif"; strAlt = "enyhén jobbra"; break;
			case 5: //TI_RIGHT
				strUrl += "right.gif"; strAlt = "jobbra"; break;
			case 7: //TI_SHARPLY_RIGHT
				strUrl += "sharp_right.gif"; strAlt = "élesen jobbra"; break;
			//BKV actions
			case 8: //TI_GETON, 
			case 9: //TI_CHANGE
			case 10: //TI_GETOFF
			default:
				strUrl = GetAbsUrl("images/transparent.gif"); break;
		}
		SetImage(img, strUrl, 20, 20, strAlt);
		return strUrl;
	}

	this.NewRoadTag = function(strRoadName)
	{
		var span = NewTag('span');
		span.className = 'routeItem';
		var strText = "";
		var strHigh = "";
		var iState = 1;
		var i=0;
		var ch = null;
		do
		{
			if(i<strRoadName.length)
				ch = strRoadName.charAt(i++);
			else
				ch = -1;
			
			switch(iState)
			{
				case 0:
					if(ch==' ')
						iState = 1;
					if(ch!=-1)
						strText += ch;
					break;
				case 1:
					if(ch=='M' || ch=='E')
					{
						iState = 2;
						strHigh += ch;	
					}
					else if(ch>='0' && ch <= '9')
					{
						iState = 4;
						strHigh += ch;
					}
					else if(ch!=-1)
						strText += ch;
					break;
				case 2:
					if(ch>='0' && ch <= '9')
					{
						iState = 3;
						strHigh += ch;
					}
					else
					{
						iState = 0;
						strText += strHigh;
						if(ch!=-1)
						 strText += ch;
						strHigh = '';
					}
					break;
				case 3:
					if(ch>='0' && ch <= '9')
						strHigh += ch;
					else if(ch==' ' || ch=='/' || ch=='-' || ch==-1)
					{
						iState = 1;
						NewTextTag(strText, span);
						if(ch!=-1)
							strText = ch;
						var high = NewTag('span', span);
						high.className = 'motorway';
						NewTextTag(strHigh, high);
						strHigh = '';
					}
					else
					{
						iState = 0;
						strText += strHigh + ch;
						strHigh = '';
					}
					break;
				case 4:
					if(ch>='0' && ch<='9')
						strHigh += ch;
					else if(ch==' ')
					{
						iState = 5;
					}
					else 
					{
						iState=0;
						strText += strHigh;
						if(ch!=-1)
							strText+=ch;
						strHigh = "";
					}
					break;
				case 5:
					if(ch=='s')
						iState = 6;
					else
					{
						if(ch==' ')
							iState = 1;
						else
							iState = 0;
						strText += strHigh + " ";
						if(ch!=-1)
							strText += ch;
						strHigh = "";
					}
					break;
				case 6:
					if(ch=='z')
						iState = 7;
					else
					{
						if(ch==' ')
							iState = 1;
						else
							iState = 0;
						strText += strHigh + " s";
						if(ch!=-1)
							strText += ch;
						strHigh = "";
					}
					break;
				case 7:
					if(ch=='.')
					{
						iState = 0;
						NewTextTag(strText, span);
						strText = " sz.";
						var high = NewTag('span', span);
						high.className = 'countryroad';
						NewTextTag(strHigh, high);
						strHigh = '';
					}
					else
					{
						if(ch==' ')
							iState = 1;
						else
							iState = 0;
						strText += strHigh + " sz";
						if(ch!=-1)
							strText += ch;
						strHigh = "";
					}
					break;
			};
		}	while(ch != -1);
		if(strText.length > 0)
			NewTextTag(strText, span);
		return span;
	}

	this.SendMail = function(txtBtn)
	{
		if(g_TopoliszControls.pLogin && g_TopoliszControls.pLogin && g_TopoliszControls.pLogin.name)
		{
			var mailToDef = g_TopoliszControls.pLogin.name ;
			var mailBody = "www.utvonalterv.hu/Handler.ashx?command=loadState%26info=" + g_TopoliszMap.SaveState();
			var mailSubject = "Utvonalterv.hu";
			var mailHREF = "mailto:" + mailToDef + "?subject=" + mailSubject + "&body=" + mailBody;	
			txtBtn.aText.setAttribute("href", mailHREF);
			txtBtn.aImage.setAttribute("href", mailHREF);

			//var strTo = g_TopoliszControls.pLogin.name ;
			//me.pTopoliszMap.NoSessionServer.CallFunction('SendMail', 'to='+ strTo + '&state=' + g_TopoliszMap.SaveState(),0, me.SendMailCallback, strTo )
		}
		else
		{
			alert("Kérem, jelentkezzen be!");
		}
	}
	
	this.SendMailCallback = function(result, clientParam)
	{
		if(result)
		{
			if(result.bSuccess)
			{
				alert("A levelet elküldtük a " + clientParam +  " címre.");
			}
			else
			{
				alert(result.strError);
			}
		}
		else
			alert("Hiba");
	}

	this.InnenOda  = function()
	{
		//alert("A szolgáltatás jelenleg nem elérhető!");
		var mapdata = me.pTopoliszMap.GetMapData();
		var strParams = "iWidth=" + mapdata.iMapWidth
		              + "&iHeight=" + mapdata.iMapHeight
		              + "&dMinX=" + mapdata.dMinX
		              + "&dMinY=" + mapdata.dMinY
		              + "&dMaxX=" + mapdata.dMaxX
		              + "&dMaxY=" + mapdata.dMaxY
		              + "&" + me.pRouteSearch.GetAddressListUrl();
		var strUrl = me.pTopoliszMap.ReadSessionServer.GetCommandUrl("InnenOda") + "&" + strParams;
		window.open(strUrl, "_blank", "width=375,height=225,toolbar=0", false);
	}

	this.Hide = function ()
	{
		me.divMain.style.display = "none";
	}

	this.Unhide = function ()
	{
		me.divMain.style.display = "";
	}

	this.OnChangeLang = function()
	{
		me.pLanguageSupporter.Apply();
		me.ShowTotal();
	}
	g_Babel.AddListener(this.OnChangeLang);


	this.AddPedCrossingImage = function(divParent, routeSub)
	{
		var img = null;
		if ((routeSub.ePedEnum & PedEnum.P_TLBUTTON) == PedEnum.P_TLBUTTON)
		{
			img=NewTag("img", divParent);SetImage(img, "images/acc/ITINER_zebragomb.png", -1, -1, "Nyomógombos gyalogátkelőhely", "Menjen át a nyomógombos zebrán");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_NOTICESIGNAL) == PedEnum.P_NOTICESIGNAL)
		{
			img=NewTag("img", divParent);SetImage(img, "images/acc/ITINER_zebrahang.png", -1, -1, "Hangjelzéses gyalogátkelőhely", "Menjen át a hangjelzéses zebrán");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_TRAFFICLIGHT) == PedEnum.P_TRAFFICLIGHT)
		{
			img=NewTag("img", divParent);SetImage(img, "images/acc/ITINER_zebrafeny.png", -1, -1, "Lámpás gyalogátkelőhely", "Menjen át a lámpás zebrán");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_PEDCROSSING) == PedEnum.P_PEDCROSSING)
		{
			img=NewTag("img", divParent);SetImage(img, "images/acc/ITINER_zebra.png", -1, -1, "Gyalogátkelőhely", "Menjen át a zebrán");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_CROSSING) == PedEnum.P_CROSSING)
		{
			img=NewTag("img", divParent);SetImage(img, "images/acc/ITINER_across.png", -1, -1, "Kereszteződés", "Menjen át a kereszteződésen");
		}
		if (img != null)
			img.className = "acccrossinginfo";
	}

	this.AddPedTypeImages = function(divParent, routeSub)
	{
		var img = null;
		if ((routeSub.ePedEnum & (PedEnum.P_GRADSTAIRSNEG | PedEnum.P_GRADSTAIRSPOS)) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_stairs_right.png", -1, -1, "Lépcső", "Menjen a lépcsőn");
		}
		else if ((routeSub.ePedEnum & (PedEnum.P_GRADHIGHNEG|PedEnum.P_GRADHIGHPOS)) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant2_right.png", -1, -1, "Meredek lejtő", "Menjen a lejtőn");
		}
		else if ((routeSub.ePedEnum & (PedEnum.P_GRADLOWNEG|PedEnum.P_GRADLOWPOS)) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant1_right.png", -1, -1, "Enyhe lejtő", "Menjen a lejtőn");
		}
		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;

		/*
		if ((routeSub.ePedEnum & PedEnum.P_GRADSTAIRSNEG) == PedEnum.P_GRADSTAIRSNEG)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_stairs_right.png", -1, -1, "Lépcső", "Menjen le a lépcsőn");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_GRADHIGHNEG) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant2_right.png", -1, -1, "Meredek lejtő", "Menjen le a lejtőn");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_GRADLOWNEG) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant1_right.png", -1, -1, "Enyhe lejtő", "Menjen le a lejtőn");
		}
		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;
		*/
		/*
		if ((routeSub.ePedEnum & PedEnum.P_SUBWAY) == PedEnum.P_SUBWAY)
		{
			// aluljáró
		}
		*/
		/*
		if ((routeSub.ePedEnum & PedEnum.P_GRADSTAIRSPOS) == PedEnum.P_GRADSTAIRSPOS)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_stairs_left.png", -1, -1, "Lépcső", "Menjen föl a lépcsőn");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_GRADLOWPOS) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant2_left.png", -1, -1, "Meredek emelkedő", "Menjen föl az emelkedőn");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_GRADHIGHPOS) != PedEnum.P_NONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_slant1_left.png", -1, -1, "Enyhe lejtő", "Menjen föl az emelkedőn");
		}
		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;
		*/

		if ((routeSub.ePedEnum & PedEnum.P_TACTILE) == PedEnum.P_TACTILE
			|| (routeSub.ePedEnum & PedEnum.P_TCURBSIDE) == PedEnum.P_TCURBSIDE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_vaksegito.png", -1, -1, "", "Vaksegítő burkolat");
		}
		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;

		if ((routeSub.ePedEnum & PedEnum.P_LCURBSIDE) == PedEnum.P_LCURBSIDE)
		{
			img = NewTag('img', divParent);img = SetImage(img, "images/acc/ITINER_szegely.png", -1, -1, "", "Szegélysüllyesztés");
		}

		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;

		if ((routeSub.ePedEnum & PedEnum.P_COBBLESTONE) == PedEnum.P_COBBLESTONE)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_macskako.png", -1, -1, "", "Kockaköves burkolat");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_PAVEDPOOR) == PedEnum.P_PAVEDPOOR)
		{
			img = NewTag('img', divParent);SetImage(img, "images/acc/ITINER_burkolatlan.png", -1, -1, "", "Gyengén burkolt út");
		}
		else if ((routeSub.ePedEnum & PedEnum.P_UNPAVEDCARTROAD) == PedEnum.P_UNPAVEDCARTROAD
			||(routeSub.ePedEnum & PedEnum.P_UNPAVEDSHINGLY) == PedEnum.P_UNPAVEDSHINGLY)
		{
			img = NewTag('img', divParent); SetImage(img, "images/acc/ITINER_burkolatlan.png", -1, -1, "", "Földút");
		}

		if (img != null)
			img.className = "accpedtypeinfo";
		img = null;
/*
		//if ((routeSub.ePedEnum & PedEnum.P_ISSIDEWALK) == PedEnum.P_ISSIDEWALK)
		//{
		//	// járda
		//}
		//if ((routeSub.ePedEnum & PedEnum.P_OBSTACLE) == PedEnum.P_OBSTACLE)
		//{
		//	// árokpart
		//}
		if ((routeSub.ePedEnum & PedEnum.P_PASSAGE) == PedEnum.P_PASSAGE)
		{
			//sétálóutca
		}
		else if ((routeSub.ePedEnum & PedEnum.P_PATH) == PedEnum.P_PATH)
		{
			//ösvény
		}
		else if ((routeSub.ePedEnum & PedEnum.P_PROMENADE) == PedEnum.P_PROMENADE)
		{
			//sétálóutca
		}
		else if ((routeSub.ePedEnum & PedEnum.P_SHOPPING) == PedEnum.P_SHOPPING)
		{
			//????
		}
		else if ((routeSub.ePedEnum & PedEnum.P_TURIST) == PedEnum.P_TURIST)
		{
			//????
		}
		else if ((routeSub.ePedEnum & PedEnum.P_WALKWAY) == PedEnum.P_WALKWAY)
		{
			// sétálóutca
		}
*/
	}


	this.GetStartStopBanner = function()
	{
		if(me.bShowStartStopBanners)
		{
			var now = new Date();
			for(var iB = 0; iB < me.arrStartStopBanners.length; iB++)
			{
				if((me.arrStartStopBanners[iB].dateFrom < now) && (now < me.arrStartStopBanners[iB].dateTo))
				{
					return me.arrStartStopBanners[iB];
				}
			}
		}
		return null;
	}

	this.GetStartBanner = function()
	{
		var pBanner = me.GetStartStopBanner();
		if(pBanner)
			return pBanner.pStartBox;
		return null;
	}

	this.GetStopBanner = function()
	{
		var pBanner = me.GetStartStopBanner();
		if(pBanner)
			return pBanner.pStopBox;
		return null;
	}

	this.ShowStartStopBanners = function()
	{
		if(me.bShowStartStopBanners)
		{
			var pBanner = me.GetStartStopBanner();
			if(pBanner)
				pBanner.Show(me.divMain);
		}
	}
	this.HideStartStopBanners = function()
	{
		var pBanner = me.GetStartStopBanner();
		if(pBanner)
			pBanner.Clear();
	}

	this.Init();
}

