function MapTrack(advMaps)
{
	var obj = new Object();

	obj.IdDiv = new Array('IdDivTrackScrollBar', 'IdDivTrackScrollBarTrack', 165);
	obj.IdFrames	= '';
	obj.MovingTrack = false;
	obj.TrackX = 0;
	obj.TrackY = 0;
	obj.TrackTmpX = 0;
	obj.TrackTmpY = 0;
	obj.MouseOldX = 0;
	obj.MouseOldY = 0;

	//---------------------------------------------
	obj.TrackDown = function()
	//---------------------------------------------
	{
		obj.MouseOldX = advMaps.MouseX;
		obj.MouseOldY = advMaps.MouseY;
		obj.MovingTrack = true;
	}

	//==============

	//---------------------------------------------
	obj.ScrollTrackX = function(s) // Ustaw Scrolla na odpowiednim miejscu
	//---------------------------------------------
	{
		if(s < advMaps.MapScaleMinMax[0]) s = advMaps.MapScaleMinMax[0];
		else if(s > advMaps.MapScaleMinMax[1]) s = advMaps.MapScaleMinMax[1];
		obj.TrackX = parseInt(Math.sqrt(((s-advMaps.MapScaleMinMax[0])*(obj.IdDiv[2]*obj.IdDiv[2]))/(advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])));
		advMaps.xLeft(obj.IdFrames, obj.IdDiv[1], obj.TrackX);
	}

	//---------------------------------------------
	obj.ScrollTrackY = function(s) // Ustaw Scrolla na odpowiednim miejscu
	//---------------------------------------------
	{
		if(s < advMaps.MapScaleMinMax[0]) s = advMaps.MapScaleMinMax[0];
		else if(s > advMaps.MapScaleMinMax[1]) s = advMaps.MapScaleMinMax[1];
		obj.TrackY = parseInt(Math.sqrt(((s-advMaps.MapScaleMinMax[0])*(obj.IdDiv[2]*obj.IdDiv[2]))/(advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])));
		advMaps.xTop(obj.IdFrames, obj.IdDiv[1], obj.TrackY);
	}

	//---------------------------------------------
	obj.TrackMoveX = function()
	//---------------------------------------------
	{
		if(obj.MovingTrack)
		{
			obj.TrackTmpX = parseInt(obj.TrackX + (advMaps.MouseX-obj.MouseOldX));
			if(obj.TrackTmpX < 0 ) obj.TrackTmpX = 0; else if(obj.TrackTmpX > obj.IdDiv[2]) obj.TrackTmpX = obj.IdDiv[2];
			advMaps.xLeft(obj.IdFrames, obj.IdDiv[1], obj.TrackTmpX);

			var s = parseInt((advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])*obj.TrackTmpX*obj.TrackTmpX/(obj.IdDiv[2]*obj.IdDiv[2])+advMaps.MapScaleMinMax[0]);
			s = advMaps.MapScaleRound*Math.round(s/advMaps.MapScaleRound);

			advMaps.MapSetFormsScale(s);
			advMaps.MapSetFormsScaleFocus();
		}
	}

	//---------------------------------------------
	obj.TrackMoveY = function()
	//---------------------------------------------
	{
		if(obj.MovingTrack)
		{
			obj.TrackTmpY = parseInt(obj.TrackY + (advMaps.MouseY-obj.MouseOldY));
			if(obj.TrackTmpY < 0 ) obj.TrackTmpY = 0; else if(obj.TrackTmpY > obj.IdDiv[2]) obj.TrackTmpY = obj.IdDiv[2];
			advMaps.xTop(obj.IdFrames, obj.IdDiv[1], obj.TrackTmpY);

			var s = parseInt((advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])*obj.TrackTmpY*obj.TrackTmpY/(obj.IdDiv[2]*obj.IdDiv[2])+advMaps.MapScaleMinMax[0]);
			s = advMaps.MapScaleRound*Math.round(s/advMaps.MapScaleRound);

			advMaps.MapSetFormsScale(s);
			advMaps.MapSetFormsScaleFocus();

		}
	}

	//---------------------------------------------
	obj.TrackMoveUpX = function()
	//---------------------------------------------
	{
		if(obj.MovingTrack)
		{
			obj.MovingTrack = false;
			obj.MouseOldX = advMaps.MouseX;
			obj.MouseOldY = advMaps.MouseY;
			obj.TrackX = obj.TrackTmpX;
			var s = parseInt((advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])*obj.TrackTmpX*obj.TrackTmpX/(obj.IdDiv[2]*obj.IdDiv[2])+advMaps.MapScaleMinMax[0]);
			s = advMaps.MapScaleRound*Math.round(s/advMaps.MapScaleRound)
			advMaps.MapScaleChange(s);
		}
	}

	//---------------------------------------------
	obj.TrackMoveUpY = function()
	//---------------------------------------------
	{
		if(obj.MovingTrack)
		{
			obj.MovingTrack = false;
			obj.MouseOldX = advMaps.MouseX;
			obj.MouseOldY = advMaps.MouseY;
			obj.TrackY = obj.TrackTmpY;
			var s = parseInt((advMaps.MapScaleMinMax[1]-advMaps.MapScaleMinMax[0])*obj.TrackTmpY*obj.TrackTmpY/(obj.IdDiv[2]*obj.IdDiv[2])+advMaps.MapScaleMinMax[0]);
			s = advMaps.MapScaleRound*Math.round(s/advMaps.MapScaleRound)
			advMaps.MapScaleChange(s);
		}
	}

	return obj;
}