//################################################################
// Copyright (c) 2001-2005 Rüdiger Stippa, all rights reserved
// Landeshauptstadt Erfurt - Stadtverwaltung
//
//################################################################
// Var-Def


if ( parent.location.search.search(/L=../) == -1 || parent.location.search == "")
	var L = "de";
else
	var L = parent.location.search.substring(parent.location.search.search(/L=../)+2,parent.location.search.search(/L=../)+4);

if ( L == "en" || L == "fr" )
	var l = "_"+L;
else
	var l = "";

var PS="";
var P=1;
var T="";
var V=1;
var ME=1;
var X=2;
var Y=2;
var XO=-1;
var YO=-1;
var TAB="";
var TS="";
var MAP="";
var MAP_old="";
var MAP_std="aspf";
var OBJ="";
var OB="";
var Mode=0;
var IF_status=0;
var IF_url="../cgi-bin/info.plx";
var info_url="";
var ME_max=4;
var ME_old=1;

// var OL=0;
var gk_aktiv=0;
var geladen=false;
var GF_geladen=false;

var xloc, yloc;

var me_rw = new LeeresArray(6);
var me_x = new LeeresArray(6);
var me_y = new LeeresArray(6);

var z_x = new LeeresArray(6);
var z_y = new LeeresArray(6);

var xme = new LeeresArray(6);
var yme = new LeeresArray(6);
var xome = new LeeresArray(6);
var yome = new LeeresArray(6);
var x_rw = 0;
var y_hw = 0;
var xrw = 0;
var yhw = 0;

var rw;
var hw;
var rw_offset = 4400000;
var hw_offset = 5600000;
var rw_min = 4418500;
var rw_max = 4442875;
var hw_min = 5639250;
var hw_max = 5661750;

var px_offset = 0;
var py_offset = 0;

var kachel_b = 130;
var kachel_h = 120;

z_x[2] = 5;
z_y[2] = 5;
z_x[3] = 15;
z_y[3] = 15;
z_x[4] = 45;
z_y[4] = 44;
z_x[5] = 134;
z_y[5] = 131;

// Sprachabhängige Texte
// alert(eval("lg[0]."+L+""));
function LG(de, en, fr)
{this.de=de;this.en=en;this.fr=fr;}
var lg = new Array();

lg[0]= new LG("deutsch","english","francais");
lg[1]= new LG("Maßstabsebene 1 - keine Richtungsnavigation möglich!","Scale layer 1 - no direction navigation!","Echelle 1 - rien de navigation directionelle!");

function LeeresArray(laenge)
{
    this.size = laenge;
    for (var i = 1; i <= laenge; i++)
        this[i] = 0;
}

function RNBildWechsel(BildNr,BildObjekt) {
	if (document.images && geladen) {
		if (ME!=1)
	 	document.images[BildNr].src = eval("mp"+BildObjekt+".src");
	}
}

function BildWechsel(BildNr,BildObjekt) {
	if (document.images && geladen) {
	 	document.images[BildNr].src = eval("mp"+BildObjekt+".src");
	}
}

function Init0()
{
	for (var i = 1; i < 6; i++)
		me_rw[i] = 0;
}

function Init()
{
	Init0();
	Init3();
	BildWechsel(11,100+ME);
	BildWechsel(14,11+Mode);
	parent.UF.zeigeLocLayer();
	T = Bin2HexStr();
}

function Init2()
{
	Init0();
	BildWechsel(11,100+ME);
	BildWechsel(14,11+Mode);
	parent.UF.zeigeLocLayer();
	T = Bin2HexStr();
}
function Init3()
{
	for (var i = 1; i < 6; i++) {
		xme[i] = 0;
		yme[i] = 0;
		xome[i] = 0;
		yome[i] = 0;
	}
}


function XYO2GK() {
		x_rw=Math.round(PxLeft2GkRW(XO,ME,X));
		y_hw=Math.round(PxTop2GkHW(YO,ME,Y));
}

function GK2XYOME() {
	for (var i = 2; i < 6; i++) {
		xme[i]=Math.round((x_rw + rw_offset - rw_min) / (rw_max - rw_min) * Math.pow(3,i) + 1);
		yme[i]=Math.round(Math.pow(3,i) - (y_hw + hw_offset - hw_min) / (hw_max - hw_min) * Math.pow(3,i) + 1);
		
		xome[i]=Math.round((((x_rw + rw_offset - rw_min) / (rw_max - rw_min) * Math.pow(3,i) + 1) - Math.round((x_rw + rw_offset - rw_min) / (rw_max - rw_min) * Math.pow(3,i) + 1)) * 100 % 100);
		yome[i]=Math.round(((Math.pow(3,i) - (y_hw + hw_offset - hw_min) / (hw_max - hw_min) * Math.pow(3,i) + 1) - Math.round(Math.pow(3,i) - (y_hw + hw_offset - hw_min) / (hw_max - hw_min) * Math.pow(3,i) + 1)) * 100 % 100);
		XO = xome[4];
		YO = yome[4];
	}
// alert('X:'+xme[4]+'|Y:'+yme[4]+'|XO:'+XO+'|YO:'+YO);
}

function XYO2XYOME() {
	XYO2GK();
	GK2XYOME();
}

function PxLeft2GkRW(xo,me,x)
{
	var diff = 1;
	rw = ( ( (((xo*kachel_b/100)-px_offset) / kachel_b) + (x - diff)) * (rw_max - rw_min) / Math.pow(3,me) ) + rw_min - rw_offset;
	return rw;
}

function PxTop2GkHW(yo,me,y)
{
	var diff = 1;
	hw = hw_min - hw_offset - (( (((yo*kachel_h/100)-py_offset) / kachel_h) + (y - diff) - Math.pow(3,me) ) * (hw_max - hw_min) / Math.pow(3,me) );
	return hw;
}

function Bin2HexStr()
{
	for (i=0,j=0,dez=0,str=""; i<parent.GF.typ.length; ++i)
	{

		dez = dez + ((parent.GF.typ[i].visi == 1) ? Math.pow(2,j) : 0);
		j++;
		if (j == 4 || i == parent.GF.typ.length - 1)
		{
			str = str + dez.toString(16);
			dez = 0;
			j = 0;
		}
	}
	return str
}


function GrafikWechsel(me,x,y,xo,yo,obj)
{
GF_geladen = false;
// RS-Location
// XO=-1;
//YO=-1;
// alert("MAP: "+MAP+" MAP_old: "+MAP_old);
parent.GF.location.href='../cgi-bin/grafik.plx?L='+L+'&P='+P+'&T='+T+'&MAP='+MAP+'&Mode='+Mode+'&ME='+me+'&X='+x+'&Y='+y+'&XO='+xo+'&YO='+yo+'&OBJ='+obj+'';
}

function GetGrenze(me,xy)
{
	if ( xy > (Math.pow(3,me)+1) / 2 )
		if (Mode == 5)
			return xy > Math.pow(3,me)-2 ? Math.pow(3,me)-2 : xy;
		else
			return xy > Math.pow(3,me)-1 ? Math.pow(3,me)-1 : xy;
	else
		if (Mode == 5)
			return xy < 3 ? 3 : xy;
		else
			return xy < 2 ? 2 : xy;
}

function MerkeXY(me,x,y)
{
	// merke x+y von hoeheren ME
	me_rw[me] = 1;
	me_x[me] = x;
	me_y[me] = y;
}

function Zentrum()
{
	if (ME!=1) {
	x_old = X;
	y_old = Y;

	X = z_x[ME];
	Y = z_y[ME];

	if ( x_old != X || y_old != Y ) 
	{	Init3();
		GrafikWechsel(ME,X,Y,-1,-1,"");
		for (var i = 1; i < 6; i++)
			me_rw[i] = 0;
		// layer loc		
		parent.UF.zeigeLocLayer();
	}
	}
	else { alert(eval("lg[1]."+L+"")); }
}

function RichtungsWechsel(spalte,zeile) {
	x_old = X;
	y_old = Y;
// Begrenzer in Abhängigkeit von Mode
	if (Mode == 5) {
		xyMin = 3;
		xyMax = (Math.pow(3,ME)-2);
	} else {
		xyMin = 2;
		xyMax = (Math.pow(3,ME)-1);
	}
	
	if ( (spalte == -1 && zeile == 0) && X > xyMin )
	{ // lm
			X += spalte;
	}
	if ( (spalte == 1 && zeile == 0) && X < xyMax )
	{ // rm
			X += spalte;
	}
	if ( (spalte == 0 && zeile == -1) && Y > xyMin )
	{ // om
			Y += zeile;
	}
	if ( (spalte == 0 && zeile == 1) && Y < xyMax )
	{ // um
			Y += zeile;
	}
	if ( (spalte == -1 && zeile == -1) && (X > xyMin && Y > xyMin) )
	{ // lo
			X += spalte;
			Y += zeile;
	}
	if ( (spalte == 1 && zeile == -1) && (X < xyMax && Y > xyMin) )
	{ // ro
			X += spalte;
			Y += zeile;
	}
	if ( (spalte == -1 && zeile == 1) && (X > xyMin && Y < xyMax) )
	{ // lu
			X += spalte;
			Y += zeile;
	}
	if ( (spalte == 1 && zeile == 1) && (X < xyMax && Y < xyMax) )
	{ // ru
			X += spalte;
			Y += zeile;
	}

	if ( x_old != X || y_old != Y ) 
	{
		GrafikWechsel(ME,X,Y,-1,-1,"");
		Init0();
		Init3();
		XO = -1;
		YO = -1;
		OBJ = "";
		parent.UF.zeigeLocLayer();
	}
	if ( ME == 1 ) { alert(eval("lg[1]."+L+"")); }
}

function Kartenfenster()
{
	if (Mode == 0) {
		Mode = 5;
	} else {
		Mode = 0;
	}
//	X = GetGrenze(ME,X);
//	Y = GetGrenze(ME,Y);
	if ( xme[ME] != 0 ) {
		X=xme[ME];
		Y=yme[ME];
		XO=xome[ME];
		YO=yome[ME];
	} else {
		XO = -1;
		YO = -1;
	}
	if (XO == -1 || YO == -1)
		parent.location.replace("../cgi-bin/ef-asp.plx?L="+L+"&PS="+parent.GF.PS+"&T="+T+"&MAP="+MAP+"&Mode="+Mode+"&ME="+ME+"&X="+X+"&Y="+Y+"");
	else
		parent.location.replace("../cgi-bin/ef-asp.plx?L="+L+"&PS="+parent.GF.PS+"&T="+T+"&MAP="+MAP+"&Mode="+Mode+"&ME="+ME+"&X="+X+"&Y="+Y+"&XO="+XO+"&YO="+YO+"&OBJ="+OBJ+"");
}

function newWIN(Url,Name,Opt) {
	if (Opt == 0) { // HP
	fenster = window.open(Url,Name,""); }
	else if (Opt == 1) { // URI
	fenster = window.open(Url,Name,"width=500,height=400,screenX=20,screenY=20,resizable=yes,menubar=no,scrollbars=yes"); }
//	fenster.focus();
}

function IF_heraus()
{
	if (IF_status == 0) {
		IF_status = 1;
		BildWechsel(15,121);
		parent.IF.location.href="info.htm";
		newWIN(IF_url,'ef_stadtplan_info',1);
	} else {
		IF_status = 0;
		BildWechsel(15,120);
		parent.IF.location.href=IF_url;
		// Close EF_INFO
	}
}


function MassstabsWechsel(me) // ME5
{
var x_tmp;
var y_tmp;
var me_old;

	me_old = ME;

if (me == 0) { // minus
	me_old <= 1 ? me = me_old : me = ME - 1;	
} else if (me == 6) {
	me_old >= ME_max ? me = me_old : me = ME + 1;	
}

	if ( me != me_old )
	{
		x_tmp = X;
		y_tmp = Y;
		if ( me_old == 1 )
		{ // 1->x
			if ( me_rw[me] == 1 )
			{
				X = me_x[me];
				Y = me_y[me];
			}
			else
			{
				X = (Math.pow(3,me)+1) / 2;
				Y = X;
			}
		}
		if ( me == 1 )
		{ // x->1
			MerkeXY(me_old,X,Y);
			// berechne niedrigere
				X = 2;
				Y = 2;
			// berechne 4 + 3 + 2 im voraus
			if (me_old == 5)
			{
				MerkeXY(4,GetGrenze(4,Math.round(x_tmp / 3)),GetGrenze(4,Math.round(y_tmp / 3)));
				MerkeXY(3,GetGrenze(3,Math.round(GetGrenze(4,Math.round(x_tmp / 3)) / 3)),GetGrenze(3,Math.round(GetGrenze(4,Math.round(y_tmp / 3)) / 3)));
				MerkeXY(2,GetGrenze(2,Math.round(GetGrenze(3,Math.round(x_tmp / 3)) / 3)),GetGrenze(2,Math.round(GetGrenze(3,Math.round(y_tmp / 3)) / 3)));

			}
			// berechne 3 + 2 im voraus
			if (me_old == 4)
			{
				MerkeXY(3,GetGrenze(3,Math.round(x_tmp / 3)),GetGrenze(3,Math.round(y_tmp / 3)));
				MerkeXY(2,GetGrenze(2,Math.round(GetGrenze(3,Math.round(x_tmp / 3)) / 3)),GetGrenze(2,Math.round(GetGrenze(3,Math.round(y_tmp / 3)) / 3)));

			}
			// berechne 2 im voraus
			if (me_old == 3)
			{
				MerkeXY(2,GetGrenze(2,Math.round(x_tmp / 3)),GetGrenze(2,Math.round(y_tmp / 3)));
			}
		}
		if ( (me == 3 && me_old == 2) || (me == 4 && me_old == 3) || (me == 5 && me_old == 4) )
		{ // 2->3, 3->4, 4->5
			if ( me_rw[me] == 1 )
			{
				X = me_x[me];
				Y = me_y[me];
			}
			else
			{
				X = X * 3 - 1;
				Y = Y * 3 - 1;
			}
		}
		if ( me == 4 && me_old == 2 )
		{ // 2->4
			if ( me_rw[me] == 1 )
			{
				X = me_x[me];
				Y = me_y[me];
			}
			else
			{
				X = X * 9 - 4;
				Y = Y * 9 - 4;
			}
		}
		if ( me == 5 && me_old == 2 )
		{ // 2->5
			if ( me_rw[me] == 1 )
			{
				X = me_x[me];
				Y = me_y[me];
			}
			else
			{
				X = X * 27 - 4;
				Y = Y * 27 - 4;
			}
		}
		if ( me == 5 && me_old == 3 )
		{ // 3->5
			if ( me_rw[me] == 1 )
			{
				X = me_x[me];
				Y = me_y[me];
			}
			else
			{
				X = X * 9 - 4;
				Y = Y * 9 - 4;
			}
		}
		if ( me == 2 && me_old == 4 )
		{ // 4->2
			// merke 4
			MerkeXY(me_old,X,Y);
			// berechne 3 im voraus und merke
			MerkeXY(3,GetGrenze(3,Math.round(x_tmp / 3)),GetGrenze(3,Math.round(y_tmp / 3)));
			// berechne 2
			X = GetGrenze(2,Math.round(me_x[3] / 3));
			Y = GetGrenze(2,Math.round(me_y[3] / 3));
		}
		if ( me == 3 && me_old == 5 )
		{ // 5->3
			// merke 5
			MerkeXY(me_old,X,Y);
			// berechne 4 im voraus und merke
			MerkeXY(4,GetGrenze(4,Math.round(x_tmp / 3)),GetGrenze(4,Math.round(y_tmp / 3)));
			// berechne 3
			X = GetGrenze(3,Math.round(me_x[4] / 3));
			Y = GetGrenze(3,Math.round(me_y[4] / 3));
		}
		if ( me == 2 && me_old == 5 )
		{ // 5->2
			// merke 5
			MerkeXY(me_old,X,Y);
			// berechne 4 im voraus und merke
			MerkeXY(4,GetGrenze(4,Math.round(x_tmp / 3)),GetGrenze(4,Math.round(y_tmp / 3)));
			// berechne 3
			MerkeXY(3,GetGrenze(3,Math.round(GetGrenze(4,Math.round(x_tmp / 3)) / 3)),GetGrenze(3,Math.round(GetGrenze(4,Math.round(y_tmp / 3)) / 3)));
			// berechne 2
			X = GetGrenze(2,Math.round(me_x[3] / 3));
			Y = GetGrenze(2,Math.round(me_y[3] / 3));
		}
		if ( (me == 2 && me_old == 3) || (me == 3 && me_old == 4) || (me == 4 && me_old == 5) )
		{ // 3->2, 4->3, 5->4
			MerkeXY(me_old,X,Y);
			// berechne niedrigere
			X = GetGrenze(me,Math.round(X / 3));
			Y = GetGrenze(me,Math.round(Y / 3));
		}

		
		ME = me;
		ME_old = me_old;
		
		BildWechsel(11,100+ME);	
// RS-Location
		if ( (xme[ME] != 0) && (yme[ME] != 0) ) {
			X=xme[ME];
			Y=yme[ME];
			XO=xome[ME];
			YO=yome[ME];
		} else {
			XO = -1;
			YO = -1;
		}
		MAP = GetMAPKartenWechsel(ME,ME_old,MAP,MAP_old,'MAP');
		MAP_old = GetMAPKartenWechsel(ME,ME_old,MAP,MAP_old,'MAP_old');
		if (Mode == 5) 
			parent.UF.location.href="../cgi-bin/uebers.plx?L="+L+"&Mode=5&ME="+me;
		else
			parent.UF.location.href="../cgi-bin/uebers.plx?L="+L+"&Mode=0&ME="+me;

		GrafikWechsel(ME,X,Y,XO,YO,OBJ);
	}
}

function GetMAPKartenWechsel(me, me_old, MAP, MAP_old, was) {
// Maßstabswechsel und Kartenwechsel

		if ( MAP_old == "" ) MAP_old = MAP;
		if ( me < ME_max && me_old == ME_max)
		{ // 5->
			if ( MAP == "sk2") {
				if (MAP_old == "sk2" || MAP_old == "aspf" || MAP_old == "aspg")
					if ( MAP_std == "aspf" )
						MAP = "aspf";
					else
						MAP = "aspg";
			} else if ( MAP == "dlk01" ) // MAP_old zu MAP
				MAP = "dlk01";
			else if ( MAP_old == "ortho" )
				MAP = "ortho";
		}
		if ( me > 4 ) //&& me_old != 5 
		{ // ->5
			if (MAP == "aspf") {
				MAP_std = "aspf";
				MAP = "sk2";
				MAP_old = "aspf";
			}
			else if (MAP == "aspg") {
				MAP_std = "aspg";
				MAP = "sk2";
				MAP_old = "aspg";
			}
			else if (MAP == "dlk01") {
				MAP_old = "dlk01";
				MAP = "dlk01"; // dlk01
			}
			else if (MAP == "ortho") {
				MAP_old = "ortho";
				MAP = "ortho";
			}
		}
	return  was == "MAP" ? MAP : MAP_old;
}

function Drucken() {
if (typeof(parent.GF.XO_LOC) == "undefined")
	var URL='../cgi-bin/grafik.plx?L='+L+'&MAP='+MAP+'&ME='+ME+'&X='+X+'&Y='+Y+'&Mode=1&P='+parent.GF.P+'&T='+T;
else
	var URL='../cgi-bin/grafik.plx?L='+L+'&MAP='+MAP+'&ME='+ME+'&X='+X+'&Y='+Y+'&XO='+parent.GF.XO_LOC+'&YO='+parent.GF.YO_LOC+'&Mode=1&P='+parent.GF.P+'&T='+T+'&OBJ='+OBJ+'&info_url='+info_url+'';
var winPrint = window.open(URL,"ef_stadtplan_drucken","width=690,height=600,screenX=20,screenY=20,scrollbars=yes,resizable=yes");
	// winPrint.focus();
}



