function Map()
{

//---------------------------------------------
obj = new Object(); 

obj.AjaxObj	= new Object(); //obiekt ajaxa
obj.DocumentForms = new Object();

//slownik
obj.MsgTxt	= new Object(); 
obj.MsgTxt.Map				= new Array('czekaj...', 'wait...');
obj.MsgTxt.MapError			= new Array('Nie mona odczyta danych...', 'Could not read data...');
obj.MsgTxt.MapPing1			= new Array('Prba nawizania poczenia z serwerem ISDP<br><b>CZEKAJ...</b>', 'Connecting to ISDS server<br><b>WAIT...</b>');
obj.MsgTxt.MapPing2			= new Array('Poczono z serwerem ISDP<br>Wersja serwera:', 'Connected to ISDS server<br>Server version:');
obj.MsgTxt.MapPing3			= new Array('Nie mona poczy si z serwerem ISDP<br>Komunikat bdu: ', 'Could not connect to ISDS server.<br>Error message:');
obj.MsgTxt.MapGetLayers1	= new Array('Brak elementu strukturalnego: [advMAP.ProgLayers]: ', 'Structural element missing: [advMAP.ProgLayers]: ');
obj.MsgTxt.MapGetLayers2	= new Array('<b>Czekaj...</b><br>Czytam dane z serwera ISDP', '<b>Wait...</b><br>Loading data from ISDS server');
obj.MsgTxt.MapGetLayers3	= new Array('Nie mona odczyta danych z serwera ISDP<br>Komunikat bdu:', 'Could not read data from ISDS server<br>Error message:');


// lista programow 
obj.ProgFiles	= new Object(); 
obj.ProgFiles.Dir = '.';
obj.ProgFiles.MapPing = 'advMapPing.php';


obj.IdFormsLayers		= 'FormsMapLayers'; // Id formularza dla mapy zgodny z layers
obj.IdFormsScale  		= new Array('FormsMapScale', 'FormsScaleText', ''); // nazwa formularza oraz nazwa pola wywietlajcego scale, Frame gdzie znajduje si scale
obj.ProgGoTo			= new Array('IdDivNavigation', 'PrefixNavigation.php'); //nawigation
obj.ProgTrackFind		= new Array('IdDivTrackFind', 'PrefixTrackFind.php'); //wyszukiwanie trasy
obj.MapHiddenMap		= new Array('BodyMapOnLoad', 200, 200); // maska przyslaniajaca mape podczas odswierzania, ladowania strony


// definicja gwnych struktur mapy, [zawartosc mapy, komunikat ladowanie mapy, div error, div wiadomosc]
obj.IdDivBodyMap	=	new Array('BodyMap', 'BodyMapLoad', 'BodyMapMsg', '', 'BodyTooltip'); 
obj.StalaDpi		= 0.00026458; //staa dpi do przeliczania mapy->metry
obj.IdProfil		= ''; //id profilu
obj.IdLang			= 0; // id wersji jezykowej
obj.IsdpVersion		= ''; // przechowaj wersj serwera
obj.IsdpVersionView	= true; //pobieraj z serwera wersje lub tylko OK
obj.EkranWidth		= 0; // szerokosc okna przegladarki
obj.EkranHeight		= 0; // wysokosc okna przegladarki
obj.MapXYMinMax			=   new Array(0, 0, 0, 0); // tablica max, min wartoci
obj.MapScaleMinMax		=   new Array(500, 500000); // tablica minimalnej i max skali
obj.wgs84_a			= 0; // parametry konfiguracyjne do przeliczania WGS
obj.wgs84_b			= 0;
obj.wgs84_c			= 0;
obj.wgs84_d			= 0;
obj.wgs84_e			= 0;
obj.wgs84_f			= 0;
obj.MapIw			= 0; // szerokosc mapy
obj.MapIh			= 0; // wysokosc mapy
obj.MapMx			= 0; // wspolrzedna X mapy
obj.MapMy			= 0; // wspolrzedna Y mapy
obj.MapMw			= 0; // szerokosc mapy w widoku
obj.MapScale		= 0; // scala mapy
obj.MapParamInit	= ''; // parametry iniciujace
obj.Mode			= 0; // mode pracy mapy
obj.MapTooltipDivView = true; // pokaz cay blok z tooltipami
obj.MapTooltipView	= true; // domylnie wlaczony widok tooltipa na mapie
obj.PortalTooltipOn = true; // wlacz wylacz tooltipy na portalu
obj.TooltipXY		= 15; // ile pix w x i y od kursora odsun tooltip

obj.DeBug			= false; // zatrzymuj alertem kady krok mapy
obj.OnLoad			= false;
obj.IdFrameMap		= 'IdFrameMap';
obj.MapRunAddActiv	= false; // wcz mechaznim obsugi dodatkowych programow przed wykonaniem MAPA.SUBMIT();
obj.Hist			= new Array(); // historia prazy z map
obj.HistPointer		= -1; // parametr marker
obj.HistNone		= true; // wcz, wycz mechanizm historii

obj.ProgLayers		= new Array('IdDivLayers', 'PrefixLayers.php'); // nazwa pliku ktry generuje legende
obj.IdBodyFrameMap	= new Array('MapScena', '', 'RefreshMap', '', 'Pointer', 'Box', 'MapTooltipDiv', 'Tooltip'); // skadowe mapy w iframe

obj.ArrayImgMapMode	= new Array( //definicje trybw pracy i klawiszy trybw (wyczony, wczony, aktywny) + kursorw dla mapy dla danego trybu (3 - over)
									new Array('', '', '', '', 'crosshair'), //tryb centrowania mode 0
									new Array('ButtonNavigationMode1', 'img/ButtonNavigationMode1.gif', 'img/ButtonNavigationMode1a.gif', '', 'move'), // dla trybu 1 - przesuwanie mapy
									new Array('ButtonNavigationMode2', 'img/ButtonNavigationMode2.gif', 'img/ButtonNavigationMode2a.gif', '' ,'crosshair'), // dla trybu 2 - powiekszanie
									new Array('ButtonNavigationMode3', 'img/ButtonNavigationMode3.gif', 'img/ButtonNavigationMode3a.gif', '' ,'crosshair'), // dla trybu 3 - powiekszanie
									new Array('ButtonNavigationMode4', 'img/ButtonNavigationMode4.gif', 'img/ButtonNavigationMode4a.gif', '', 'crosshair'), //tryb 4 odlego
									new Array('ButtonNavigationMode5', 'img/ButtonNavigationMode5.gif', 'img/ButtonNavigationMode5a.gif', '', 'crosshair'), //tryb 5 obszar
									new Array('ButtonNavigationMode6', 'img/ButtonNavigationMode6.gif', 'img/ButtonNavigationMode6a.gif', '', 'crosshair'), //tryb 6 dla InterKerg
									new Array('ButtonNavigationMode7', 'img/ButtonNavigationMode7.gif', 'img/ButtonNavigationMode7a.gif', '', 'crosshair'), //tryb 7
									new Array('ButtonNavigationMode8', 'img/ButtonNavigationMode8.gif', 'img/ButtonNavigationMode8a.gif', '', 'crosshair'), //tryb 8
									new Array('ButtonNavigationMode9', 'img/ButtonNavigationMode9.gif', 'img/ButtonNavigationMode9a.gif', '', 'crosshair'), //tryb 9 wyszukiwarka obiektw
									new Array('ButtonNavigationMode10', 'img/ButtonNavigationMode10.gif', 'img/ButtonNavigationMode10a.gif', '', 'crosshair'), //tryb 10 dodaj waypoint do bazy
									new Array('ButtonNavigationMode11', 'img/ButtonNavigationMode11.gif', 'img/ButtonNavigationMode11a.gif', '', 'crosshair'),  //tryb 11 szukaj obiektu - dzialki : MapObjectGetParcel
									new Array('ButtonNavigationMode12', 'img/ButtonNavigationMode12.gif', 'img/ButtonNavigationMode12a.gif', '', 'crosshair')  //tryb 12 pokaz wspolrzedne w roznych ukladach miejsca kliknietego
					);

obj.Coordinate		=	new Array('DivCoordinate', 250, 'E: <<E>>  N: <<N>>', 'Zatrzymaj kursor na mapie aby zobaczy wsprzdne.', ''); // definicja - pokaz wspolrzedne [[IdWarstwy], [czas po jakim nastepuja obliczenia], [matryca], [komunikat zatrzymaj kursor], 'IdFrame jesli koordynaty na mapie']
obj.CoordinateTimer	= 0; // IdTimmera dla coordynat
obj.CoordinateView	= false; // status komunikatu - pokazany, ukryty
obj.CoordinateDecimal	= false; // pokaz obliczone wyniki WGS: false = w stopniach, true = dziesietnie
obj.CoordinateDecimalSec = false; // pokaz sekundy w zaokrgleniu do 2 miejsc po przecinku


//---------------------------------------------
// narzdzia warstw	
//---------------------------------------------


//---------------------------------------------
obj.xGetElementById = function(fr, e)
//---------------------------------------------
{
	if(typeof(e)!='string') return e;
	var FrameName = window.self;
	if(fr) 
	{
		if(window.frames[fr]) FrameName = window.frames[fr];
		else return null;
	}
	if(FrameName.document.getElementById) e=FrameName.document.getElementById(e);
	else if(FrameName.document.all) e=FrameName.document.all[e];
	else e=null;
	return e;
}

//---------------------------------------------
obj.xMoveTo = function(fr, e, iX, iY)
//---------------------------------------------
{
	obj.xLeft(fr, e, iX);
	obj.xTop(fr, e, iY);
}

//---------------------------------------------
obj.xWidthHeight = function(fr, e, iX, iY)
//---------------------------------------------
{
	obj.xWidth(fr, e, iX);
	obj.xHeight(fr, e, iY);
}

//---------------------------------------------
obj.xWidth = function(fr, e, iX)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return 0;
	var css=obj.xDef(e.style);
	if(css && obj.xStr(e.style.width))
	{
		if(obj.xNum(iX)) e.style.width=iX+'px';
		else
		{
			iX=parseInt(e.style.width);
			if(isNaN(iX)) iX=0;
		}
	}
	else if(css && obj.xDef(e.style.width))
	{
		if(obj.xNum(iX)) e.style.width=iX;
		else iX=e.style.width;
	}
	return iX;
}

//---------------------------------------------
obj.xHeight = function(fr, e, iX)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return 0;
	var css=obj.xDef(e.style);
	if(css && obj.xStr(e.style.height))
	{
		if(obj.xNum(iX)) e.style.height=iX+'px';
		else
		{
			iX=parseInt(e.style.height);
			if(isNaN(iX)) iX=0;
		}
	}
	else if(css && obj.xDef(e.style.height))
	{
		if(obj.xNum(iX)) e.style.height=iX;
		else iX=e.style.height;
	}
	return iX;
}

//---------------------------------------------
obj.xWidthHeight = function(fr, e, iX, iY)
//---------------------------------------------
{
	obj.xWidth(fr, e, iX)
	obj.xHeight(fr, e, iY)
}


//---------------------------------------------
obj.xLeft = function(fr, e, iX)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return 0;
	var css=obj.xDef(e.style);
	if(css && obj.xStr(e.style.left))
	{
		if(obj.xNum(iX)) e.style.left=iX+'px';
		else
		{
			iX=parseInt(e.style.left);
			if(isNaN(iX)) iX=0;
		}
	}
	else if(css && obj.xDef(e.style.pixelLeft))
	{
		if(obj.xNum(iX)) e.style.pixelLeft=iX;
		else iX=e.style.pixelLeft;
	}
	return iX;
}

//---------------------------------------------
obj.xTop = function(fr, e, iY)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return 0;
	var css=obj.xDef(e.style);
	if(css && obj.xStr(e.style.top))
	{
		if(obj.xNum(iY)) e.style.top=iY+'px';
		else
		{
			iY=parseInt(e.style.top);
			if(isNaN(iY)) iY=0;
		}
	}
	else if(css && obj.xDef(e.style.pixelTop))
	{
		if(obj.xNum(iY)) e.style.pixelTop=iY;
		else iY=e.style.pixelTop;
	}
	return iY;
}

//---------------------------------------------
obj.xDef = function()
//---------------------------------------------
{
	for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
	return true;
}

//---------------------------------------------
obj.xStr = function()
//---------------------------------------------
{
	for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
	return true;
}

//---------------------------------------------
obj.xNum = function()
//---------------------------------------------
{
	for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='number') return false;}
	return true;
}

//---------------------------------------------
obj.xSetCursor = function(fr, e, cur)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return ;
	if(e.style.cursor) e.style.cursor = cur;
}

//---------------------------------------------
obj.xDisplayNone = function(fr, e)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return ;
	if(e.style.display) e.style.display = 'none';
}

//---------------------------------------------
obj.xDisplayBlock = function(fr, e)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return ;
	if(e.style.display) e.style.display = 'block';
}

//---------------------------------------------
obj.xDisplayNone = function(fr, e)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return ;
	if(e.style.display) e.style.display = 'none';
}

//---------------------------------------------
obj.xDisplayBlock = function(fr, e)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return ;
	if(e.style.display) e.style.display = 'block';
}


//---------------------------------------------
obj.xShow = function(fr, e) { return obj.xVisibility(fr, e, 1); }
//---------------------------------------------
obj.xHide = function(fr, e) { return obj.xVisibility(fr, e, 0); }
//---------------------------------------------

//---------------------------------------------
obj.xVisibility = function(fr, e, bShow)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return null;
	if(e.style && obj.xDef(e.style.visibility))
	{
		if (obj.xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden';
		return e.style.visibility;
	}
	return null;
}

//---------------------------------------------
obj.xInnerHtml = function(fr, e, sHtml)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return '';
	if(obj.xStr(e.innerHTML))
	{
		if(obj.xStr(sHtml)) e.innerHTML = sHtml;
		else return e.innerHTML;
	}
}

//---------------------------------------------
obj.xZIndex = function(fr, e,uZ)
//---------------------------------------------
{
	if(!(e=obj.xGetElementById(fr, e))) return 0;
	if(e.style && obj.xDef(e.style.zIndex))
	{
		if(obj.xNum(uZ)) e.style.zIndex=uZ;
		uZ=parseInt(e.style.zIndex);
	}
	return uZ;
}


//---------------------------------------------
obj.MathRoundValue = function(n) // wywietl komunikat bdu, wycentruj go na srodku
//---------------------------------------------
{
	return Math.round(n*100)/100; 
}

//---------------------------------------------
obj.MapBodyMsg = function(msg) // wywietl komunikat bdu, wycentruj go na srodku
//---------------------------------------------
{
	if((e = obj.xGetElementById('', obj.IdDivBodyMap[2])))
	{
		obj.xDisplayNone('', obj.IdDivBodyMap[0]);
		obj.xDisplayBlock('', obj.IdDivBodyMap[1]);
		obj.xDisplayBlock('', obj.IdDivBodyMap[2]);
		obj.xInnerHtml('', obj.IdDivBodyMap[2], msg);
	}
	else alert(msg);
}



//---------------------------------------------
obj.CreateUniqId = function() // Utworz unikalny ID
//---------------------------------------------
{
	return new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
}

//---------------------------------------------
obj.addEvent = function(node, eventName, func) // wyjtki
//---------------------------------------------
{
	if(node.addEventListener) node.addEventListener(eventName, func, false);
	else node.attachEvent('on' + eventName, func);
}


//---------------------------------------------
obj.MapRefreshMap = function(NameLayers) // poka okienko o koniecznoci przerysowania mapy - po zmianie np. wczonych warstw lub zmianie wielkoci okna
//---------------------------------------------
{
	if(!obj.OnLoad) return ;

	if(NameLayers)
	{
		if(obj.DocumentForms.elements[NameLayers]) 
			obj.DocumentForms.elements[NameLayers].checked = (obj.DocumentForms.elements[NameLayers].checked ? 0 : 1);

	}

	obj.xDisplayBlock(obj.IdFrameMap, obj.IdBodyFrameMap[2]);
}

//---------------------------------------------
obj.DocumentFormsGetParam = function() // przeczytaj i zaktualizuj najczesciiej pobieranie zmienne z formularza
//---------------------------------------------
{
	obj.MapMw		= obj.MathRoundValue(obj.DocumentForms.elements['Maps[m_w]'].value);
	obj.MapIw		= obj.MathRoundValue(obj.DocumentForms.elements['Maps[i_w]'].value);
	obj.MapIh		= obj.MathRoundValue(obj.DocumentForms.elements['Maps[i_h]'].value);
	obj.MapMx		= obj.MathRoundValue(obj.DocumentForms.elements['Maps[m_x]'].value);
	obj.MapMy		= obj.MathRoundValue(obj.DocumentForms.elements['Maps[m_y]'].value);
	obj.MapScale	= obj.MathRoundValue(obj.DocumentForms.elements['Maps[scale]'].value);
	obj.MapMxPixel	= (obj.MapMw/obj.MapIw);
}

//---------------------------------------------
obj.MapChangeMode = function(Mode) // zmiana trybu pracy z jednoczesn zmian kursora BODY MAPS
//---------------------------------------------
{
	obj.Mode = parseInt(Mode);
	if(!obj.ArrayImgMapMode.length || !document.images) return ;
	for(var i=0; i<obj.ArrayImgMapMode.length;i++) if(obj.ArrayImgMapMode[i][0]) if(document.images[obj.ArrayImgMapMode[i][0]]) document.images[obj.ArrayImgMapMode[i][0]].src =  obj.ArrayImgMapMode[i][((i==obj.Mode)?2:1)]; // podmien grafike na wlasciwy kursor...
	if(obj.ArrayImgMapMode[obj.Mode][4]) obj.xSetCursor(obj.IdFrameMap, obj.IdBodyFrameMap[0], obj.ArrayImgMapMode[obj.Mode][4]); // osadz wlasciwy kursor w body strony....
	obj.xInnerHtml(obj.IdFrameMap, obj.IdBodyFrameMap[5], ''); // wyczy zawarto BOX na mapie
	obj.xDisplayNone(obj.IdFrameMap,obj.IdBodyFrameMap[5]); // ukryj niepotrzebn box
}


//---------------------------------------------
obj.WGS84abcdef = function(a, b, c, d, e, f) // parametry
//---------------------------------------------
{
	obj.wgs84_a = new Number(a);
	obj.wgs84_b = new Number(b);
	obj.wgs84_c = new Number(c);
	obj.wgs84_d = new Number(d);
	obj.wgs84_e = new Number(e);
	obj.wgs84_f = new Number(f);

	//alert(a+'\n'+obj.wgs84_a+'\n'+b+'\n'+obj.wgs84_b+'\n'+c+'\n'+obj.wgs84_c+'\n'+d+'\n'+obj.wgs84_d+'\n'+e+'\n'+obj.wgs84_e+'\n'+f+'\n'+obj.wgs84_f);

}


//---------------------------------------------
obj.NoMapMouseMove = function(x, y) // przesuwanie kursorem po obszarze niekoniecznie mapy - wykorzystane w rozszerzeniach
//---------------------------------------------
{
	obj.MouseX = x;
	obj.MouseY = y;

	if(obj.PortalTooltipView && obj.IdDivBodyMap[4]) 
	{
		var tx = (obj.MouseX+obj.TooltipXY);
		var ty = (obj.MouseY+obj.TooltipXY);

		if((e = obj.xGetElementById('', obj.IdDivBodyMap[4])))
		{
			var w = parseInt(e.clientWidth);
			var h = parseInt(e.clientHeight);
			if(tx+w > obj.EkranWidth) tx = obj.MouseX - w - obj.TooltipXY;
			if(ty+h > obj.EkranHeight) ty = obj.MouseY - h - obj.TooltipXY;
		}

		//window.status = obj.EkranWidth+' '+obj.EkranHeight+' '+tx+' '+ty;

		obj.xMoveTo('', obj.IdDivBodyMap[4], tx, ty);
	}

}


//---------------------------------------------
obj.MapMouseMove = function(x, y) // przesuwanie kursorem po mapie
//---------------------------------------------
{
	if(!obj.OnLoad) return ;

	obj.MouseX = x;
	obj.MouseY = y;

	if(obj.OnMove)
	{
		obj.MapSetFormsScaleFocus()
		if(obj.Mode == 1)
		{
			obj.PointerVisible(0); // ukryj strzalke.......
			obj.xMoveTo(obj.IdFrameMap, obj.IdBodyFrameMap[0], (obj.MouseX-obj.MouseOldX), (obj.MouseY-obj.MouseOldY));
		}
		else if((obj.Mode == 2 || obj.Mode == 3)) obj.MapDrawingBox();

		if(obj.MapTooltipDivView) obj.MapTooltipDivHidden(); // ukryj tooltip jesli przesuwam map
	}

		   
	if(obj.MapTooltipView)
	{
		var x = obj.MouseX+obj.TooltipXY;
		var y = obj.MouseY+obj.TooltipXY;
		if((e = obj.xGetElementById(obj.IdFrameMap, obj.IdBodyFrameMap[7])))
		{
			var w = parseInt(e.clientWidth);
			var h = parseInt(e.clientHeight);
			if(x+w > obj.MapIw) x = obj.MouseX - w - obj.TooltipXY;
			if(y+h > obj.MapIh) y = obj.MouseY - h - obj.TooltipXY;
		}

		if(x <0 ) x = 0; if(y <0 ) y = 0;
		obj.xMoveTo(obj.IdFrameMap, obj.IdBodyFrameMap[7], x, y);
	}

	obj.CoordinateClearTimeout();
	obj.CoordinateTimer = setTimeout("advMAP.CoordinateMake()", obj.Coordinate[1]);
}

//---------------------------------------------
obj.MapOnLoad = function(tf) // Zmien ststus planu, wcz/wycz funkcje
//---------------------------------------------
{
	obj.OnLoad = (tf ? true : false);
	
	if(obj.OnLoad)
	{
		if(obj.MapTooltipView) obj.MapTooltipDivView = true;
		obj.xDisplayNone('', obj.MapHiddenMap[0]); // ukryj pole czekaj
		obj.xDisplayBlock(obj.IdFrameMap, obj.IdBodyFrameMap[0]); // pokaz zaladowana mape
		if(obj.ArrayImgMapMode.length && obj.ArrayImgMapMode[obj.Mode][4]) obj.xSetCursor(obj.IdFrameMap, obj.IdBodyFrameMap[0], obj.ArrayImgMapMode[obj.Mode][4]); // osadz wlasciwy kursor w body mapy strony....
	}
	else
	{
		obj.xDisplayBlock('', obj.MapHiddenMap[0]); // pokaz pole czekaj
		obj.xDisplayNone(obj.IdFrameMap, obj.IdBodyFrameMap[0]); // ukryj warstwe scenaMapy
		obj.xDisplayNone(obj.IdFrameMap, obj.IdBodyFrameMap[2]); // ukryj warstwe refresh
		obj.xSetCursor(obj.IdFrameMap, obj.IdBodyFrameMap[0], 'wait'); // osadz wlasciwy kursor w body mapy strony....
	}
}


//---------------------------------------------
obj.MapStart = function() // Uruchom map
//---------------------------------------------
{
	obj.AjaxObj.get({
		url: obj.ProgFiles.Dir+'/'+obj.ProgFiles.MapPing,
		parameters : {
						"IdDP" : obj.IdDP,
						"IdIsdp" : obj.IdIsdp,
						"Version" : (obj.IsdpVersionView ? 1 : 0),
						"UniqId" : obj.CreateUniqId()
					 },
		onLoading : function(obj2) {	obj.MapBodyMsg(obj.MsgTxt.MapPing1[obj.IdLang]); if(obj.DeBug) alert('MapStart: onLoading'); },
		onSuccess : function(obj2) {	
										obj.IsdpVersion = obj2.responseText;
										obj.MapBodyMsg(obj.MsgTxt.MapPing2[obj.IdLang]+' <b>'+obj2.responseText+'</b>');
										if(obj.DeBug) alert('MapStart: onSuccess');
										obj.xDisplayNone('', obj.IdDivBodyMap[1]);
										obj.xDisplayBlock('', obj.IdDivBodyMap[0]);
										obj.MapGetLayers(obj.IdProfil, 0, 0, 0);	


									},
		onError   : function(obj2) {	obj.MapBodyMsg(obj.MsgTxt.MapPing3[obj.IdLang]+' <b>'+obj2.status+'</b>'); }
	});



}

//---------------------------------------------
obj.MapGetLayers = function(IdProfil, Mx, My, Mw) // uruchom map - procedura pobierania legends oraz ustawienie MODE + wyrysowanie mapy
//---------------------------------------------
{
	if(obj.ProgLayers[0] && obj.ProgLayers[1])
	{
		if((obj.xGetElementById('', obj.ProgLayers[0])) == null) obj.MapBodyMsg(obj.MsgTxt.MapGetLayers1[obj.IdLang]+' <b>'+obj.ProgLayers[0]+'</b>');
		else
		{
			obj.IdProfil = IdProfil;
			obj.MapGoTo();
			obj.MapTrackFind();
			obj.AjaxObj.get({
				url: obj.ProgLayers[1],
				parameters : {
								"IdDP" : obj.IdDP,
								"IdIsdp" : obj.IdIsdp,
								"IdProfil" : obj.IdProfil,
								"IdLang" : obj.IdLang,
								"MapMode" : obj.Mode,
								"MapIw" : obj.MapIw,
								"MapIh" : obj.MapIh,
								"MapMx" : (Mx ? obj.MathRoundValue(Mx) : 0),
								"MapMy" : (My ? obj.MathRoundValue(My) : 0),
								"MapMw" : (Mw ? obj.MathRoundValue(Mw) : 0),
								"MapParamInit" : obj.MapParamInit,
								"UniqId" : obj.CreateUniqId()

							 },
				onLoading : function(obj2) { obj.xInnerHtml('', obj.ProgLayers[0], obj.MsgTxt.MapGetLayers2[obj.IdLang]); },
				onSuccess : function(obj2)
				{
					obj.xInnerHtml('', obj.ProgLayers[0], obj2.responseText);
					if(document.forms[obj.IdFormsLayers])
					{
						obj.DocumentForms = document.forms[obj.IdFormsLayers];
						obj.DocumentFormsGetParam();
						obj.MapChangeMode(obj.Mode);
						obj.MapRun();
					}
					else obj.MapBodyMsg(obj.MsgTxt.MapGetLayers1[obj.IdLang]+' <b> FORM: '+obj.IdFormsLayers+'</b>');;
				},
				onError : function(obj2) { obj.MapBodyMsg(obj.MsgTxt.MapGetLayers3[obj.IdLang]+'<b>'+obj2.status+'</b>'); }
			});
		}
	}
	else obj.MapBodyMsg(obj.MsgTxt.MapGetLayers1[obj.IdLang]+' <b>'+obj.ProgLayers[0]+'</b>');

}


//---------------------------------------------
obj.MapPing = function(version) // Odpytaj ISDP o wersje
//---------------------------------------------
{
	obj.AjaxObj.get({
		url: obj.ProgFiles.Dir+'/'+obj.ProgFiles.MapPing,
		parameters : {
						"Version" : (version ? 1 : 0),
						"UniqId" : obj.CreateUniqId()
					 },
		onLoading : function(obj2) { },
		onSuccess : function(obj2) { obj.IsdpVersion = obj2.responseText; },
		onError   : function(obj2) { }
	});
}

//---------------------------------------------
obj.MapRun = function() // Uruchom proces rysowania mapy
//---------------------------------------------
{
	if(obj.IdFormsLayers && obj.IdFrameMap)
	{
		if(obj.DocumentForms)
		{
			var s = parseInt(obj.DocumentForms.elements['Maps[scale]'].value);

			if(obj.NoScaleRound) obj.MapSetFormsScale(s);
			else obj.MapSetFormsScale(obj.MapScaleRound*Math.round(s/obj.MapScaleRound));

			obj.MapOnLoad(false);
			obj.DocumentForms.elements['Maps[i_w]'].value = obj.MapIw;
			obj.DocumentForms.elements['Maps[i_h]'].value = obj.MapIh;
			obj.DocumentFormsGetParam();

			if(obj.MapXYMinMax[0] || obj.MapXYMinMax[1] || obj.MapXYMinMax[2] || obj.MapXYMinMax[3])
			{
				if(obj.MapXYMinMax[0] > obj.MapMx )			{ obj.DocumentForms.elements['Maps[m_x]'].value = obj.MapXYMinMax[0]; obj.MapMx = obj.MapXYMinMax[0]; }
				else if(obj.MapXYMinMax[1] < obj.MapMx )	{ obj.DocumentForms.elements['Maps[m_x]'].value = obj.MapXYMinMax[1]; obj.MapMx = obj.MapXYMinMax[1]; }
				
				if(obj.MapXYMinMax[2] > obj.MapMy )			{ obj.DocumentForms.elements['Maps[m_y]'].value = obj.MapXYMinMax[2]; obj.MapMy = obj.MapXYMinMax[2]; }
				else if(obj.MapXYMinMax[3] < obj.MapMy )	{ obj.DocumentForms.elements['Maps[m_y]'].value = obj.MapXYMinMax[3]; obj.MapMy = obj.MapXYMinMax[3]; }
			}

			if(!obj.HistNone)
			{
				var tA = new Array();
				tA[0] = obj.MapMx;  //x ekranu
				tA[1] = obj.MapMy;  //y ekranu
				tA[2] = obj.MapMw;  //y ekranu

				//zapamietaj stan warstw....
				var tlayer = new Array();
				var ilayer = 0;
				if(obj.DocumentForms)
				{
					for(var i=0; i<obj.DocumentForms.length; i++)
					{
						nazwa = obj.DocumentForms.elements[i].name;
						if(nazwa.substr(0,12) == 'Maps[Layers]') tlayer[ilayer++] = obj.DocumentForms.elements[i].checked;
						//lub uzyc nazwy warstwy: tmp = nazwa.split(']['); name_layer = tmp[1].substr(0, (tmp[1].length-1));
					}
				}

				tA[3] = tlayer;
				tA[4] = s;  //oryginalna scala
				while(obj.Hist.length > (obj.HistPointer+1)) obj.Hist.pop();
				obj.HistPointer++;
				obj.Hist.push(tA);

			}

			obj.MapTooltipDivView = true;
			obj.NoScaleRound = false;
			obj.HistNone = false;
			// wywoaj funcje indywidualnie przygotowane dla uzytkownika
			if(obj.MapRunAddActiv) obj.MapRunAdd(obj);
			// wywoaj formularz
			obj.DocumentForms.submit();
		}
	}
}


//---------------------------------------------
obj.EventMouseDown = function() // co gdy klawisz myszy UP
//---------------------------------------------
{
	if(!obj.OnLoad) 
	{
		obj.OnMove =  false;
		obj.MouseOldX = 0;
		obj.MouseOldY = 0;
		return ;
	}

	obj.OnMove =  true;
	obj.MouseOldX = obj.MouseX;
	obj.MouseOldY = obj.MouseY;
}

//---------------------------------------------
obj.EventMouseUp = function() // co gdy klawisz myszy UP
//---------------------------------------------
{
	if(!obj.OnLoad)
	{
		obj.OnMove = false;
		obj.MouseOldX = 0;
		obj.MouseOldY = 0;
		return ;
	}

	var dX = obj.MouseX-obj.MouseOldX;
	var dY = obj.MouseY-obj.MouseOldY;

	if(obj.OnMove)
	{
		if(obj.Mode == 0)
		{
			var d = obj.MapMw/obj.MapIw;
			obj.MapGoXxYy(obj.MathRoundValue(obj.MapMx + d*obj.MouseX), obj.MathRoundValue(obj.MapMy + d*(obj.MapIh-obj.MouseY)), obj.DocumentForms.elements['Maps[sid]'].value);
		}
		else if((obj.Mode == 1) && ((dX!=0)||(dY!=0)))
		{
			obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx - obj.MapMxPixel*dX);
			obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy + obj.MapMxPixel*dY);
			obj.MapRun();
		}
		else if(obj.Mode == 2) // tryb pracy powiekszanie
		{
			dX = Math.abs(dX);
			dY = Math.abs(dY);

			if((dX!=0)||(dY!=0))
			{
				var dmx = 0; if(obj.MouseX < obj.MouseOldX) dmx = (obj.MouseX+dX/2); else dmx = (obj.MouseOldX+dX/2);
				var dmy = 0; if(obj.MouseY < obj.MouseOldY) dmy = (obj.MapIh-obj.MouseY-dY/2); else dmy = (obj.MapIh-obj.MouseOldY-dY/2);
				var mx = (obj.MapMx + Math.round(obj.MapMxPixel*dmx));
				var my = (obj.MapMy + Math.round(obj.MapMxPixel*dmy));
				// przelicz pomniejszanie, powiekszanie
				//
				//------------------------------------
				obj.MapGoXcYcWxWy(mx, my, Math.round(obj.MapMxPixel*dX), Math.round(obj.MapMxPixel*dY));
			}
			else
			{
				// w przypadku gdy niezaznaczono obszaru tylko kliknito - pomniejsz/powieksz o wspol .MapZoomInOut oraz centruj.
				var MouseMx = obj.MapMx + Math.round(obj.MapMxPixel*obj.MouseX);
				var MouseMy = obj.MapMy + Math.round(obj.MapMxPixel*(obj.MapIh-obj.MouseY));

				obj.MapScale /= obj.MapZoomInOut; //przelicz now skale dla powiekszenia

				obj.MapScale = Math.round(obj.MapScale);

				if(obj.MapScale < obj.MapScaleMinMax[0] ) obj.MapScale = obj.MapScaleMinMax[0];
				else if(obj.MapScale > obj.MapScaleMinMax[1] ) obj.MapScale = obj.MapScaleMinMax[1];

				obj.MapMw = obj.MathRoundValue(obj.MapScale * obj.StalaDpi * obj.MapIw);

				obj.MapSetFormsScale(obj.MapScale);

				obj.DocumentForms.elements['Maps[scale]'].value = obj.MapScale;
				obj.DocumentForms.elements['Maps[m_w]'].value = obj.MathRoundValue(obj.MapMw);
				obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(MouseMx-obj.MathRoundValue(obj.MapMw/2));
				obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(MouseMy-obj.MathRoundValue((obj.MapIh/obj.MapIw)*obj.MapMw/2));

				obj.MapRun();
			}
		}
		else if(obj.Mode == 3) // tryb pracy pomniejszanie
		{
			dX = Math.abs(dX);
			dY = Math.abs(dY);
			/*  opcja autodopasowywania wyczona
			if((dX!=0)||(dY!=0))
			{
				var dmx = 0; if(obj.MouseX < obj.MouseOldX) dmx = (obj.MouseX+dX/2); else dmx = (obj.MouseOldX+dX/2);
				var dmy = 0; if(obj.MouseY < obj.MouseOldY) dmy = (obj.MapIh-obj.MouseY-dY/2); else dmy = (obj.MapIh-obj.MouseOldY-dY/2);
				var mx = (obj.MapMx + Math.round(obj.MapMxPixel*dmx));
				var my = (obj.MapMy + Math.round(obj.MapMxPixel*dmy));
				// przelicz pomniejszanie, powiekszanie
				//
				//------------------------------------
				obj.MapGoXcYcWxWy(mx, my, Math.round(obj.MapMxPixel*dX), Math.round(obj.MapMxPixel*dY));
			}
			else
			{
			*/
				// w przypadku gdy niezaznaczono obszaru tylko kliknito - pomniejsz/powieksz o wspol .MapZoomInOut oraz centruj.
				var MouseMx = obj.MapMx + Math.round(obj.MapMxPixel*obj.MouseX);
				var MouseMy = obj.MapMy + Math.round(obj.MapMxPixel*(obj.MapIh-obj.MouseY));

				obj.MapScale *= obj.MapZoomInOut; // przelicz now skal dla pomniejszenia

				obj.MapScale = Math.round(obj.MapScale);

				if(obj.MapScale < obj.MapScaleMinMax[0] ) obj.MapScale = obj.MapScaleMinMax[0];
				else if(obj.MapScale > obj.MapScaleMinMax[1] ) obj.MapScale = obj.MapScaleMinMax[1];

				obj.MapMw = obj.MathRoundValue(obj.MapScale * obj.StalaDpi * obj.MapIw);

				obj.MapSetFormsScale(obj.MapScale);

				obj.DocumentForms.elements['Maps[scale]'].value = obj.MapScale;
				obj.DocumentForms.elements['Maps[m_w]'].value = obj.MathRoundValue(obj.MapMw);
				obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(MouseMx-obj.MathRoundValue(obj.MapMw/2));
				obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(MouseMy-obj.MathRoundValue((obj.MapIh/obj.MapIw)*obj.MapMw/2));

				obj.MapRun();
			//}
		}
	}

	obj.OnMove = false;
	obj.MouseOldX = 0;
	obj.MouseOldY = 0;

}


//---------------------------------------------
obj.MapButtonMove = function(pr) // przesun mape o skok 1/MapsMoveDelta ekranu domyslnie 1/3
//---------------------------------------------
{
	var mwdelta = obj.MathRoundValue(obj.MapMw/obj.MapMoveDelta);
	if(pr=='N') obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy+mwdelta);
	else if(pr=='S') obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy-mwdelta);
	else if(pr=='E') obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx+mwdelta);
	else if(pr=='W') obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx-mwdelta);
	else if(pr=='NW') { obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx-mwdelta); obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy+mwdelta); }
	else if(pr=='SW') { obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx-mwdelta); obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy-mwdelta); }
	else if(pr=='NE') { obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx+mwdelta); obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy+mwdelta); }
	else if(pr=='SE') { obj.DocumentForms.elements['Maps[m_x]'].value = obj.MathRoundValue(obj.MapMx+mwdelta); obj.DocumentForms.elements['Maps[m_y]'].value = obj.MathRoundValue(obj.MapMy-mwdelta); }
	obj.MapRun(); // wywoaj przerysowanie mapy
}

//---------------------------------------------
obj.MapLayersFit = function() // dopasuj map do zakresu widocznoci wczonych warstw o ile zostay ustawione.
//---------------------------------------------
{
	var nazwa;
	var tmp;
	var layer;
	var mx1 = 0;
	var mx2 = 0;
	var my1 = 0;
	var my2 = 0;
	var t1 = 0;
	var t2 = 0;

	if(obj.DocumentForms)
	{
		for(var i=0; i<obj.DocumentForms.length; i++)
		{
			nazwa = obj.DocumentForms.elements[i].name;
			if(nazwa.substr(0,12) == 'Maps[Layers]' && obj.DocumentForms.elements[i].checked == true)
			{
				tmp = nazwa.split(']['); layer = tmp[1].substr(0, (tmp[1].length-1)); tmp = layer.split(',');
				for(var j=0; j<tmp.length; j++)
				{
					layer = tmp[j];
					if(obj.DocumentForms.elements['Maps[LayersMx]['+layer+']'] && obj.DocumentForms.elements['Maps[LayersWx]['+layer+']'] && obj.DocumentForms.elements['Maps[LayersMy]['+layer+']'] && obj.DocumentForms.elements['Maps[LayersWy]['+layer+']'].value)
					{
						t1 = parseFloat(obj.DocumentForms.elements['Maps[LayersMx]['+layer+']'].value);
						t2 = parseFloat(obj.DocumentForms.elements['Maps[LayersWx]['+layer+']'].value);
						if(t1 && t2) { if((mx1 > t1) || (mx1 == 0)) mx1 = t1; if((mx2 < t1+t2) || (mx2 == 0)) mx2 = t1+t2;	}
						t1 = parseFloat(obj.DocumentForms.elements['Maps[LayersMy]['+layer+']'].value);
						t2 = parseFloat(obj.DocumentForms.elements['Maps[LayersWy]['+layer+']'].value);
						if(t1 && t2) { if((my1 > t1) || (my1 == 0)) my1 = t1; if((my2 < t1+t2) || (my2 == 0)) my2 = t1+t2;	}
					}
				}
			}
		}
	}
	
	if(mx1 && mx2 && my1 && my2) 
	{
		var mww = (mx2-mx1); mww += Math.round(mww/10);
		var mhh = (my2-my1); mhh += Math.round(mhh/10);
		
		obj.MapGoXcYcWxWy(Math.round(mx1+(mx2-mx1)/2), Math.round(my1+(my2-my1)/2) , mww, mhh);
	}
	else obj.MapGoToCenter(); // jeli nie ma co dopasowywac bo np. nie pobrano danych z isdp, centruje map do wartoci domylnych.....
}




//---------------------------------------------
obj.MapBodyError = function(Error) // wywoaj map w centralnym punkcie - punkt domylny zdefiniowany w ISDP punkcie - start MAPY
//---------------------------------------------
{

	window.status = Error;

}

//---------------------------------------------
obj.MapGoToCenter = function() // wywoaj map w centralnym punkcie - punkt domylny zdefiniowany w ISDP punkcie - start MAPY
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	obj.DocumentForms.elements['Maps[m_x]'].value	= obj.DocumentForms.elements['Maps[Def][m_x]'].value;
	obj.DocumentForms.elements['Maps[m_y]'].value	= obj.DocumentForms.elements['Maps[Def][m_y]'].value;
	obj.DocumentForms.elements['Maps[m_w]'].value	= obj.DocumentForms.elements['Maps[Def][m_w]'].value;
	obj.DocumentForms.elements['Maps[scale]'].value = obj.DocumentForms.elements['Maps[Def][scale]'].value;
	obj.MapRun();
	return ;
}


//---------------------------------------------
obj.MapScaleIncrement =  function(plus) // zmien skale o wartosc parametru inc w %
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	plus = parseInt(plus) ? true : false;
	var inc = 1; if(plus) inc += obj.MapZoomIncrement; else inc -= obj.MapZoomIncrement;
	obj.MapScaleChange(obj.MapScaleRound*Math.round(obj.MapScale*inc/obj.MapScaleRound));
}


//---------------------------------------------
obj.MapSetFormsScale = function(s) // Ustaw scle w formularzu, jeli istnieje
//---------------------------------------------
{
	if(obj.IdFormsScale[0] && obj.IdFormsScale[1])
	{
		if(obj.IdFormsScale[2])
		{
			if(window.frames[obj.IdFormsScale[2]])
			{
				if(window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]]) 
					if(window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]]) window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]].value = s;
			}
		}
		else 
		{
			if(document.forms[obj.IdFormsScale[0]]) 
				if(document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]]) document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]].value = s;
		}
	}
}

//---------------------------------------------
obj.MapSetFormsScaleFocus = function() // Ustaw obiekt jako aktywny
//---------------------------------------------
{
	if(obj.IdFormsScale[0] && obj.IdFormsScale[1])
	{
		if(obj.IdFormsScale[2])
		{
			if(window.frames[obj.IdFormsScale[2]])
			{
				if(window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]]) 
					if(window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]]) window.frames[obj.IdFormsScale[2]].document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]].focus();
			}
		}
		else 
		{
			if(document.forms[obj.IdFormsScale[0]]) 
				if(document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]]) document.forms[obj.IdFormsScale[0]].elements[obj.IdFormsScale[1]].focus();
		}
	}

}

//---------------------------------------------
obj.MapScaleChange =  function(s) // zmie skal mapy na warto s
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	s = parseInt(s);		

	if(isNaN(s)) { obj.MapSetFormsScale(obj.MapScale); return; }

	if(s < obj.MapScaleMinMax[0]) s = obj.MapScaleMinMax[0];
	else if(s > obj.MapScaleMinMax[1]) s = obj.MapScaleMinMax[1];

	if(s != parseInt(obj.DocumentForms.elements['Maps[scale]'].value))
	{
		obj.MapScale = s;
		obj.MapSetFormsScale(obj.MapScale);
		var MouseMx = obj.MapMx + Math.round(obj.MapMxPixel*obj.MapIw/2);
		var MouseMy = obj.MapMy + Math.round(obj.MapMxPixel*obj.MapIh/2);
		var Mwx = obj.MathRoundValue(obj.MapScale * obj.StalaDpi * obj.MapIw);
		var Mwy = obj.MathRoundValue(Mwx * obj.MapIh / obj.MapIw);
	
		obj.DocumentForms.elements['Maps[scale]'].value = obj.MapScale;
		obj.DocumentForms.elements['Maps[m_w]'].value	= obj.MathRoundValue(Mwx);
		obj.DocumentForms.elements['Maps[m_x]'].value	= obj.MathRoundValue(MouseMx-(Mwx/2));
		obj.DocumentForms.elements['Maps[m_y]'].value	= obj.MathRoundValue(MouseMy-(Mwy/2));
		
		obj.NoScaleRound = true;

		obj.MapRun();
	}
}


//---------------------------------------------
obj.MapGoXcYcWxWySep = function(adr) // przesun map pod X,Y - cenrtalny punkt prostokta WxWy - seperator '|'
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	var a = adr.split('|');
	obj.MapGoXcYcWxWy((a[0]?a[0]:0), (a[1]?a[1]:0), (a[2]?a[2]:0), (a[3]?a[3]:0), (a[4]?a[4]:''), (a[5]?a[5]:0), (a[6]?a[6]:0));
	return ;
}

//---------------------------------------------
obj.MapGoXcYcWxWy = function(Xc, Yc, Wx, Wy, Sid, DefScale) // przesun map pod X,Y - cenrtalny punkt prostokta WxWy - seperator '|'
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	var Mwx = Wx;
	var Mwy = (Mwx * obj.MapIh / obj.MapIw);
	if(Wy > Mwy) { Mwy = Wy; Mwx = (Mwy * obj.MapIw / obj.MapIh);	if(Wx > Mwx) Mwx = Wx;	}
	var MapScale = Math.round(Mwx /( obj.StalaDpi * obj.MapIw));
	if(MapScale < obj.MapScaleMinMax[0] ) {	MapScale = obj.MapScaleMinMax[0]; Mwx = obj.MathRoundValue(MapScale * obj.StalaDpi * obj.MapIw); Mwy = (Mwx * obj.MapIh / obj.MapIw);	}
	else if(MapScale > obj.MapScaleMinMax[1] ) { MapScale = obj.MapScaleMinMax[1];	Mwx = obj.MathRoundValue(MapScale * obj.StalaDpi * obj.MapIw);	Mwy = (Mwx * obj.MapIh / obj.MapIw);	}

	if(DefScale && (DefScale > obj.MapScaleMinMax[0]) && (DefScale < obj.MapScaleMinMax[1]))
	{
		if(MapScale < DefScale)
		{
			MapScale = DefScale;
			Mwx = Math.round(MapScale * ( obj.StalaDpi * obj.MapIw));
			Mwy = (Mwx * obj.MapIh / obj.MapIw);
		}
	}

	obj.MapSetFormsScale(MapScale);

	obj.DocumentForms.elements['Maps[scale]'].value = MapScale;
	obj.DocumentForms.elements['Maps[m_w]'].value	= Mwx;
	obj.DocumentForms.elements['Maps[m_x]'].value	= Xc-Math.round(Mwx/2)
	obj.DocumentForms.elements['Maps[m_y]'].value	= Yc-Math.round(Mwy/2);

	if(Sid)
	{
		obj.DocumentForms.elements['Maps[sid]'].value = Sid; // wcz selekcj obiektu
		var a = Sid.split(':');  // wcz warstw by bya widoczna
		if(obj.DocumentForms.length)
		{
			for(var i=0; i< obj.DocumentForms.length; i++)
			{
				nazwa = obj.DocumentForms.elements[i].name;
				if(nazwa.substr(0,12) == 'Maps[Layers]' && (nazwa.indexOf(a[0]) > 0)) obj.DocumentForms.elements[i].checked = true;
			}
		}
	}

	obj.MapRun();
	return ;
}

//---------------------------------------------
obj.MapGoBxLySep = function(adr) // przejdz pod wspolrzednie LB
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	var a = adr.split('|');
	obj.MapGoBxLy((a[0]?a[0]:0), (a[1]?a[1]:0), (a[2]?a[2]:0), (a[3]?a[3]:0), (a[4]?a[4]:0));

}

//---------------------------------------------
obj.MapGoBxLy = function(B, L, Sid, DefScale, IdDP) // przejdz pod wspolrzednie LB
//---------------------------------------------
{
	if(!obj.OnLoad) return ;
	if(B && L)
	{
		var UniqId = new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
		var cs = obj.DocumentForms.elements['Maps[cs]'].value;
		obj.AjaxObj.get({
			url: obj.ProgFiles.Dir + "/advMapCoordTransform.php",
			parameters : {"x": L, "y": B, "to_cs" : cs, "UniqId" : obj.CreateUniqId(), 'IdDP' :  IdDP},
			onSuccess : function(obj2) {
											var p = obj2.responseText.split('|');
											obj.MapGoXcYcWxWy(p[0], p[1], 1, 1, Sid, DefScale);
										},
			onError : function(obj2) {  alert('Bdna konfiguracja planu. Skontaktuj si z administratorem. komunikat bdu: ' + obj2.status);}
		});
	}
}



//---------------------------------------------
obj.MapTrackFind = function() // procedura uruchamiania opcji wyszukiwania trasy - trackfinf
//---------------------------------------------
{
	if(obj.ProgTrackFind[0] && obj.ProgTrackFind[1])
	{
		obj.AjaxObj.get({
			url: obj.ProgTrackFind[1],
			parameters : {'IdProfil' : obj.IdProfil, 'IdLang' : obj.IdLang, 'UniqId' : obj.CreateUniqId() },
			onLoading : function(obj2) { obj.xInnerHtml('', obj.ProgTrackFind[0], obj.MsgAjax[0]);  },
			onSuccess : function(obj2) { obj.xInnerHtml('', obj.ProgTrackFind[0], obj2.responseText); },
			onError : function(obj2) {  obj.MapBodyError('MapGoTo: '+obj.MsgAjax[1] + obj2.status); }
		});
	}

}

//---------------------------------------------
obj.MapGoTo = function() // procedura uruchamiania opcji zbli do - navigation
//---------------------------------------------
{
	if(obj.ProgGoTo[0] && obj.ProgGoTo[1])
	{
		obj.AjaxObj.get({
			url: obj.ProgGoTo[1],
			parameters : {'IdProfil' : obj.IdProfil, 'IdLang' : obj.IdLang , 'UniqId' : obj.CreateUniqId()},
			onLoading : function(obj2) { obj.xInnerHtml('', obj.ProgGoTo[0], obj.MsgAjax[0]);  },
			onSuccess : function(obj2) { obj.xInnerHtml('', obj.ProgGoTo[0], obj2.responseText); },
			onError : function(obj2) {  obj.MapBodyError('MapGoTo: '+obj.MsgAjax[1] + obj2.status); }
		});
	}

}

//---------------------------------------------
obj.TrackView = function(a, b, c, d, Track) // przesuwanie kursorem po obszarze niekoniecznie mapy - wykorzystane w rozszerzeniach
//---------------------------------------------
{
		obj.DocumentForms.elements['Maps[Track][Id]'].value = Track; // 
		obj.MapGoXcYcWxWy(a+Math.round(c/2), b+Math.round(d/2), c, d);

		
//			obj.MapRun(); // wywoaj przerysowanie mapy

}

//---------------------------------------------
obj.TrackSet = function(Track) // przesuwanie kursorem po obszarze niekoniecznie mapy - wykorzystane w rozszerzeniach
//---------------------------------------------
{
	obj.DocumentForms.elements['Maps[Track][Id]'].value = Track; 
}


//---------------------------------------------
obj.TrackClear = function() // przesuwanie kursorem po obszarze niekoniecznie mapy - wykorzystane w rozszerzeniach
//---------------------------------------------
{
	var TrackId = obj.DocumentForms.elements['Maps[Track][Id]'].value;
	if(TrackId)
	{
		obj.DocumentForms.elements['Maps[Track][Id]'].value = ''; // wyzeruj selekcj obiektu
		obj.MapRun(); // wywoaj przerysowanie mapy
	}
}



//---------------------------------------------
obj.MapMouseOut = function() // obsuga - gdy kursor mapy z mapy
//---------------------------------------------
{
	obj.CoordinateClearTimeout(); // wyczy obliczenia WGS
}

//---------------------------------------------
obj.CoordinateClearTimeout = function() // co gdy klawisz myszy UP
//---------------------------------------------
{
	if(obj.CoordinateTimer)
	{
		clearTimeout(obj.CoordinateTimer);
		if(obj.CoordinateView)
		{
			obj.xInnerHtml(obj.Coordinate[4], obj.Coordinate[0], ((obj.Coordinate[3])?obj.Coordinate[3]:'&nbsp;'));
			obj.CoordinateView = false;
		}
	}
}

//---------------------------------------------
obj.CoordinateMake = function() // co gdy klawisz myszy UP
//---------------------------------------------
{
	if(obj.Coordinate[0] && !obj.OnMove)
	{
		obj.CoordinateView = true;
		var L = obj.wgs84_a * obj.MouseX + obj.wgs84_b * obj.MouseX + obj.wgs84_c;
		var B = obj.wgs84_d * obj.MouseY + obj.wgs84_e * obj.MouseY + obj.wgs84_f;

		var Lc = Math.floor(L);
		var Lm = Math.floor(60*(L-Lc));
		var Ls = 0;

		if(obj.CoordinateDecimalSec) Ls = Math.round(100*((3600*(L-Lc))-(60*Lm)))/100;
		else Ls = Math.floor((3600*(L-Lc))-(60*Lm));


		var Bc = Math.floor(B);
		var Bm = Math.floor(60*(B-Bc));
		var Bs = 0;
		
		if(obj.CoordinateDecimalSec) Bs = Math.round(100*((3600*(B-Bc))-(60*Bm)))/100;
		else Bs = Math.floor((3600*(B-Bc))-(60*Bm));


		var txt = '';

		if(obj.CoordinateDecimal)
		{
			txt = obj.Coordinate[2].replace(/<<E>>/g, L.toString().substr(0,8));
			txt = txt.replace(/<<N>>/g, B.toString().substr(0,8));
		}
		else
		{
			txt = obj.Coordinate[2].replace(/<<E>>/g, Lc+' '+((Lm<10)?'0':'')+Lm+'\' '+((Ls<10)?'0':'')+Ls+'&quot;');
			txt = txt.replace(/<<N>>/g, Bc+' '+((Bm<10)?'0':'')+Bm+'\' '+((Bs<10)?'0':'')+Bs+'&quot;');
		}

		obj.xInnerHtml(obj.Coordinate[4], obj.Coordinate[0], txt);
	}
}

//---------------------------------------------
obj.PointerVisible = function(visible) // ukryj strzalke wskazujaca lub j pokaz
//---------------------------------------------
{
	visible = parseInt(visible) ? 1 : 0;

	if(visible)	obj.DocumentForms.elements['Maps[Pointer]'].value = 1;
	else
	{
		obj.xDisplayNone(obj.IdFrameMap, obj.IdBodyFrameMap[4]);
		obj.DocumentForms.elements['Maps[Pointer]'].value = 0;
	}
}


//---------------------------------------------
obj.MapTooltipDivBlock = function() // pokaz ca warstwe ze wszystkimi tooltip na mapie
//---------------------------------------------
{
	//obj.IdBodyFrameMap[6] - kontener z divami
	if(!obj.OnLoad || !obj.IdBodyFrameMap[6]) return ;
	obj.xDisplayBlock(obj.IdFrameMap, obj.IdBodyFrameMap[6]);
}

//---------------------------------------------
obj.MapTooltipDivHidden = function() // ukryj ca warstwe ze wszystkimi tooltip na mapie np w przypadku przesuwania mapy
//---------------------------------------------
{
	//obj.IdBodyFrameMap[6] - kontener z divami
	if(!obj.OnLoad || !obj.IdBodyFrameMap[6]) return ;
	obj.xDisplayNone(obj.IdFrameMap, obj.IdBodyFrameMap[6]);
	obj.MapTooltipDivDelete();
}


//---------------------------------------------
obj.MapTooltipDivDelete = function() // usun zawarto tooltip dla mapy w ifrmae
//---------------------------------------------
{
	//obj.IdBodyFrameMap[6] - kontener z divami
	//obj.IdBodyFrameMap[7] - div z samym tooltip
	if(!obj.OnLoad || !obj.IdBodyFrameMap[6] || !obj.IdBodyFrameMap[7]) return ;
	obj.MapTooltipDivView = false;
	obj.xInnerHtml(obj.IdFrameMap, obj.IdBodyFrameMap[7], ''); 
	obj.xDisplayNone(obj.IdFrameMap, obj.IdBodyFrameMap[7]);
}

//---------------------------------------------
obj.MapTooltipDivCreate = function(txt) // Poka zawartosc tooltip dla mapy w ifrmae
//---------------------------------------------
{
	//obj.IdBodyFrameMap[6] - kontener z divami
	//obj.IdBodyFrameMap[7] - div z samym tooltip
	
	if(!obj.OnLoad || !obj.IdBodyFrameMap[6] || !obj.IdBodyFrameMap[7]) return ;
	
	obj.MapTooltipView = true;
	obj.xInnerHtml(obj.IdFrameMap, obj.IdBodyFrameMap[7], txt);
	// przelicz pozycje by bya widoczna w oknie mapy, przesu jeli konieczne,,,,
	var x = obj.MouseX+obj.TooltipXY;
	var y = obj.MouseY+obj.TooltipXY;
	if((e = obj.xGetElementById(obj.IdFrameMap, obj.IdBodyFrameMap[7])))
	{
		var w = parseInt(e.clientWidth);
		var h = parseInt(e.clientHeight);
		if(x+w > obj.MapsIw) x = obj.MouseX - w - obj.TooltipXY;
		if(y+h > obj.MapsIh) y = obj.MouseY - h - obj.TooltipXY;
	}
	if(x <0 ) x = 0;
	if(y <0 ) y = 0;

	obj.xMoveTo(obj.IdFrameMap, obj.IdBodyFrameMap[7], x, y);
	obj.xDisplayBlock(obj.IdFrameMap, obj.IdBodyFrameMap[7]); 

}

//---------------------------------------------
obj.PortalTooltipOnOff = function() //wlacz wylacz tootlip
//---------------------------------------------
{
	if(obj.PortalTooltipOn) obj.PortalTooltipOn = false;
	else obj.PortalTooltipOn = true;
}

//---------------------------------------------
obj.PortalTooltipDivCreate = function(txt) //
//---------------------------------------------
{
	if(!obj.PortalTooltipOn || !obj.OnLoad || !obj.IdDivBodyMap[4]) return ;
	
	obj.PortalTooltipView = true;
	obj.xInnerHtml('', obj.IdDivBodyMap[4], txt);
	// przelicz pozycje by bya widoczna w oknie mapy, przesu jeli konieczne,,,,
	var x = obj.MouseX+obj.TooltipXY;
	var y = obj.MouseY+obj.TooltipXY;
	if((e = obj.xGetElementById('', obj.IdDivBodyMap[4])))
	{
		var w = parseInt(e.clientWidth);
		var h = parseInt(e.clientHeight);
		if(x+w > obj.MapsIw) x = obj.MouseX - w - obj.TooltipXY;
		if(y+h > obj.MapsIh) y = obj.MouseY - h - obj.TooltipXY;
	}
	if(x <0 ) x = 0;
	if(y <0 ) y = 0;

	obj.xMoveTo('', obj.IdDivBodyMap[4], x, y);
	obj.xDisplayBlock('', obj.IdDivBodyMap[4]); 

}

//---------------------------------------------
obj.PortalTooltipDivDelete = function() 
//---------------------------------------------
{
	if(!obj.OnLoad || !obj.IdDivBodyMap[4]) return ;
	obj.PortalTooltipView = false;
	obj.xInnerHtml('', obj.IdDivBodyMap[4], ''); 
	obj.xDisplayNone('', obj.IdDivBodyMap[4]);
}





















// stare




	obj.NoScaleRound = false;

	obj.MapFrameLeftTop		=	new Array(0, 0);
	obj.MapDesignBorder		=	new Array(0, 0);
	obj.MapFrameMaxMin		=	new Array(800, 600, 300, 400);
	obj.MapScaleRound		=	100;
	obj.MapZoomInOut		=	2;
	obj.MapZoomIncrement	=	0.3;
	obj.MapMoveDelta		=	3;


	obj.MapMxPixel = 0;

	obj.TooltipOn = true;







	obj.MapMxC				= 0;
	obj.MapMyC				= 0;

	obj.MapMoveDelta = 3;

	obj.OnMove =  false;
	obj.MouseX = 0;
	obj.MouseY = 0;
	obj.MouseOldX = 0;
	obj.MouseOldY = 0;








	obj.MsgAjax				=	new Array('czekaj...', 'Bdna konfiguracja planu.<br>Skontaktuj si z administratorem.<br>Komunikat bdu: ', 'Brak elementu strukturalnego planu: ');



	// Rysowanie BOX na mapie

	//---------------------------------------------
	obj.MapMakeLineH = function(x, y, h) { return '<div style="position: absolute; background-color: #FF0000; overflow: hidden; left: '+x+'px; top: '+y+'px; width: 2px; height:'+h+'px;"></div>'; }
	//---------------------------------------------
	obj.MapMakeLineW = function(x, y, w) { return '<div style="position: absolute; background-color: #FF0000; overflow: hidden; left: '+x+'px; top: '+y+'px; width: '+w+'px; height: 2px;"></div>'; }
	//---------------------------------------------
	obj.MapMakeRect = function(x1, y1, x2, y2)
	//---------------------------------------------
	{
		var htm	 = '';
		if(y2-y1-1)	htm += obj.MapMakeLineH(x1, y1, y2-y1-1)	+obj.MapMakeLineH(x2-1, y1, y2-y1-1);			// os pion lewa
		if(x2-x1-1) htm += obj.MapMakeLineW(x1+2, y1, x2-x1-1)	+obj.MapMakeLineW(x1+2, y2-2, x2-x1-1);	// osie poziome
		return htm;
	}

	//---------------------------------------------
	obj.MapDrawingBox = function() // przesuwanie kursorem po mapie i rysowanie box
	//---------------------------------------------
	{
		if(!obj.OnLoad) return ;
		var txt = obj.MapMakeRect(((obj.MouseX <= obj.MouseOldX ) ? obj.MouseX : obj.MouseOldX),((obj.MouseY <= obj.MouseOldY ) ? obj.MouseY : obj.MouseOldY),((obj.MouseX > obj.MouseOldX ) ? obj.MouseX : obj.MouseOldX),((obj.MouseY > obj.MouseOldY ) ? obj.MouseY : obj.MouseOldY));	// wyrysuj ramk....
		obj.xInnerHtml(obj.IdFrameMap, obj.IdBodyFrameMap[5], txt); // zapisz ramk do BOX
		obj.xDisplayBlock(obj.IdFrameMap,obj.IdBodyFrameMap[5]); // poka div BOX
	}


	//----------------------
	// ZARZADZANIE WARSTWAMI
	//----------------------


	
	//---------------------------------------------
	obj.initArray = function()
	//---------------------------------------------
	{
		obj.length = initArray.arguments.length;
		for (var i = 0; i < obj.length; i++) this[i] = initArray.arguments[i];
	}




	//---------------------------------------------
	//---------------------------------------------
	//---------------------------------------------



	//---------------------------------------------
	obj.MapCheckServer = function() // Sprawdz polaczenie z serwerem ISDP
	//---------------------------------------------
	{

		return true;
	}

	//---------------------------------------------
	obj.MapInitLoader = function() // zaaduj do pamieci pliki graficzne dodatkowe klawisze do podmiany.....
	//---------------------------------------------
	{
		var TmpImg = new Image();

		for(var i=0; i<obj.ArrayImgMapMode.length;i++)
		{
			if(obj.ArrayImgMapMode[i][1]) TmpImg.src = obj.ArrayImgMapMode[i][1];
			if(obj.ArrayImgMapMode[i][2]) TmpImg.src = obj.ArrayImgMapMode[i][2];
			if(obj.ArrayImgMapMode[i][3]) TmpImg.src = obj.ArrayImgMapMode[i][3];
		}
	}






	





	//---------------------------------------------
	obj.MapGoXxYySep = function(adr) // przejdz pod wspolrzednie LB
	//---------------------------------------------
	{
		if(!obj.OnLoad) return ;
		var a = adr.split('|');
		obj.MapGoXxYy((a[0]?a[0]:0), (a[1]?a[1]:0), (a[2]?a[2]:''), (a[3]?a[3]:0));
	}

	//---------------------------------------------
	obj.MapGoXxYy = function(X, Y, Sid, DefScale) // przejdz pod wspolrzednie LB
	//---------------------------------------------
	{
		var Mwx = obj.DocumentForms.elements['Maps[m_w]'].value;
		var Mwy = (Mwx * obj.MapIh / obj.MapIw);
		if(DefScale)
		{
			// przelicz nowe wsporzedne jesli podano scale
			Mwx = Math.round(DefScale * ( obj.StalaDpi * obj.MapIw));
			Mwy = (Mwx * obj.MapIh / obj.MapIw);
		}
		obj.MapGoXcYcWxWy(X, Y, Mwx, Mwy, Sid, 0);
	}








	//---------------------------------------------
	obj.MapTooltipDivOnOff = function() // ukryj tooltips na mapie
	//---------------------------------------------
	{
		if(obj.MapTooltipView)
		{
			obj.MapTooltipView = false;
			obj.MapTooltipDivHidden();
		}
		else 
		{
			obj.MapTooltipView = true;
			obj.MapTooltipDivBlock();
		}
	}


	//---------------------------------------------
	obj.MapHist = function(nr) // Nawiguj po historrii kliknitych map.
	//---------------------------------------------
	{
		var h = obj.Hist.length;
		if(h)
		{
			obj.HistPointer += parseInt(nr);

			if(obj.HistPointer < 0) { obj.HistPointer = 0; return; }
			else if(obj.HistPointer >= h) { obj.HistPointer = (h-1); return; }

			if(obj.Hist[obj.HistPointer])
			{
				obj.DocumentForms.elements['Maps[m_x]'].value = obj.Hist[obj.HistPointer][0];
				obj.DocumentForms.elements['Maps[m_y]'].value = obj.Hist[obj.HistPointer][1];
				obj.DocumentForms.elements['Maps[m_w]'].value = obj.Hist[obj.HistPointer][2];
				obj.DocumentForms.elements['Maps[scale]'].value = obj.Hist[obj.HistPointer][4];
				var tlayer = obj.Hist[obj.HistPointer][3];

				obj.HistNone = true;

				var ilayer = 0;
				for(var i= 0; i < obj.DocumentForms.length; i++)
				{
					 //&& obj.DocumentForms.elements[i].checked == true
					nazwa = obj.DocumentForms.elements[i].name;
					if(nazwa.substr(0,12) == 'Maps[Layers]')
					{
						obj.DocumentForms.elements[i].checked = tlayer[ilayer];
						ilayer++;
					}
				}
				obj.MapRun();
			}
		}
	}





	


	// STARE............




	obj.EkranHeight = 0;
	obj.EkranWidth = 0;


	// MODULY NAWIGACYJNE.








	//---------------------------------------------
	obj.MapSidClear = function() // usu zaznaczon sekcje
	//---------------------------------------------
	{
		var sid = obj.DocumentForms.elements['Maps[sid]'].value;
		if(sid)
		{
			obj.DocumentForms.elements['Maps[sid]'].value = ''; // wyzeruj selekcj obiektu
			obj.MapRun(); // wywoaj przerysowanie mapy
		}
	}

	//---------------------------------------------
	obj.MapProfileChange = function(IdProfil, Mx, My, Mw) // Zmie profil na waciwy...
	//---------------------------------------------
	{
		Mx = Mx ? obj.MathRoundValue(Mx) : 0;
		My  = My ? obj.MathRoundValue(My) : 0 ;
		Mw = Mw ? obj.MathRoundValue(Mw) : 0;

		if(!obj.OnLoad) return ;
		obj.MapOnLoad(false);
		obj.Hist =  new Array();
		obj.HistPointer = 0;
		
		obj.TrackClear();
		obj.MapSidClear();
		obj.MapParamInit = '';

		obj.MapGetLayers(IdProfil, Mx, My, Mw); // uruchom adowania mapy
		return ;
	}




	//---------------------------------------------
	obj.MapBttnMode = function(iname) // zmienia klawisze z podswietlonych na aktywne
	//---------------------------------------------
	{
		for(var i=0; i<obj.ArrayImgMapMode.length;i++) if(obj.ArrayImgMapMode[i][0] == iname)	if(document.images[iname]) document.images[iname].src =  obj.ArrayImgMapMode[i][3]; // podmien grafike na wlasciwy kursor...
	}

	//---------------------------------------------
	obj.MapMouseOver = function() // obsuga - gdy kursor mapy na mapie
	//---------------------------------------------
	{


	}



	//---------------------------------------------
	obj.MapProgHide = function(Fr, ProgDiv, Prog) // ukryj - wycz program
	//---------------------------------------------
	{
		obj.MapBlockLayerProg(Prog, 1);
		obj.xHide(Fr, ProgDiv);
	}

	//---------------------------------------------
	obj.MapBlockLayerProg = function(Prog, Block) // pokaz ukryj warstwy ktore maja byc zasloniete block =1 - pokaz
	//---------------------------------------------
	{
		if(!obj.ProgBlockLayerProg.length) return;
		if(Block) for(j=0;j<obj.ProgBlockLayer.length;j++) obj.xDisplayBlock('', obj.ProgBlockLayer[j]);
		else
		{
			for(i=0;i<obj.ProgBlockLayerProg.length;i++)
			if(obj.ProgBlockLayerProg[i] == Prog)
				for(j=0;j<obj.ProgBlockLayer.length;j++) obj.xDisplayNone('', obj.ProgBlockLayer[j]);
		}
	}

	//---------------------------------------------
	obj.TooltipOnOff = function() // ukryj tooltips na mapie
	//---------------------------------------------
	{
		if(obj.TooltipOn) obj.TooltipOn = false;
		else obj.TooltipOn = true;
	}


	return obj;
}

