var blocked = false;
var birdsEyeView;
var helpWindow;

function getMap() {
    if (navigator.appName == "Netscape") {
		return document.map;
    } else {
		return map;
    }
}

function getBirdsEye() {
    if (navigator.appName == "Netscape") {
		return birdsEyeView.document.mapBirdsEye;
    } else {
		return birdsEyeView.mapBirdsEye;
    }
}

function isBirdsEyeBlocked() {
    if (navigator.appName == "Netscape") {
		return birdsEyeView.document.blocked;
    } else {
		return birdsEyeView.blocked;
    }
}

function setBirdsEyeBlocked(b) {
    if (navigator.appName == "Netscape") {
		birdsEyeView.document.blocked = b;
    } else {
		birdsEyeView.blocked = b;
    }
}

function getScale() {
    if (navigator.appName == "Netscape") {
		return birdsEyeView.document.csuszka.scale.value;
    } else {
		return birdsEyeView.csuszka.scale.value;
    }
}

function showBirdsEye() {
    if (birdsEyeView) {
		birdsEyeView.focus();
    } else {
		var map = getMap();
		var sorszam = map.getUrl().search("Scale") - 1;
		var urlstring = "map/birdseye.jsp?lat=" + map.getLat() + "&lon=" + map.getLon() + "&scale=" +
		    map.getScale() * 10 + "&url=" + map.getUrl().substr(0, sorszam);
		birdsEyeView = window.open(urlstring, "birdseye", "status=yes,resize=no,width=265,height=300");
    }
}

function hideBirdsEye() {
    if (birdsEyeView) {
		birdsEyeView.close();
    }
}

function getForm() {
    if (navigator.appName == "Netscape") {
		return list.document.listForm;
    } else {
		return list.listForm;
    }
}

function showDetails(key, layer) {

    if (layer == 'ese') {
    	window.open('about:blank', 'details', 'scrollbars=yes,resizable=yes,width=500,height=250');
		document.forms['global'].action = 'map/eventDetails.jsp';
		document.forms['global'].ese.value = key;
    } else if (layer == 'egd' || layer == 'int_DB2') {
    	window.open('/digitalcity/entity.jsp?dom=' + dom + '&prt=' + prt + '&egd=' + key, 'details'/*, 'scrollbars=yes,resizable=yes,width=800,height=550'*/);
    	return;
    } else if (layer == 'obj') {
    	window.open('about:blank', 'details', 'scrollbars=yes,resizable=yes,width=500,height=250');
		document.forms['global'].action = 'map/objectDetails.jsp';
		document.forms['global'].obj.value = key;
    } else {
		return;
    }

    document.forms['global'].target = 'details';
    document.forms['global'].submit();
}


var latMin, latMax, lonMin, lonMax;

function zoomToVisible() {
    var map = getMap();
    var extent = map.getMapExtent(true, false);
    var mapWidth = extent.getMaxY() - extent.getMinY(),
	mapHeight = extent.getMaxX() - extent.getMinX();
    var width = latMax - latMin,
	height = lonMax - lonMin;
    var scaleMin = 8000;

    if (width == 0 && height == 0) {
		map.zoomScale(latMin, lonMin, zoomScale == 0 ? scaleMin : zoomScale);
    } else if (width / height > mapWidth / mapHeight) {
		var scale = map.getScale() * width / mapWidth * 1.1;
		if (scale < scaleMin) {
		    scale = scaleMin;
		}
		map.zoomScale((latMin + latMax) / 2, (lonMin + lonMax) / 2, scale);
    } else {
		var scale = map.getScale() * height / mapHeight * 1.1;
		if (scale < scaleMin) {
		    scale = scaleMin;
		}
		map.zoomScale((latMin + latMax) / 2, (lonMin + lonMax) / 2, scale);
    }
}

var types = new Array('egd', 'ese', 'obj');
var showed = false;
var tooMany = false;
var zoomScale;

var egdCount = 0;
var eseCount = 0;
var objCount = 0;

var allItem = false;
function showObjects(allItem) {
    var hourGlass = document.frames['list'].document.getElementById('hourglass');
    hourGlass.style.display = 'inline';

    window.allItem = allItem;
    setTimeout('showObjects2()', 100);
}

function showObjects2() {
    var map = getMap();
    map.setAutoRefresh(false);

    var hourGlass = document.frames['list'].document.getElementById('hourglass');

    // 3500 / kulcshossz (11) = 318
    if (allItem && (eseCount > 318 || egdCount > 318 || objCount > 318)) {
		hourGlass.style.display = 'none';
		alert(MSG_TUL_SOK_EGYED);
		return;
    }

    latMin = 180; latMax = -180; lonMin = 90; lonMax = -90;
    zoomScale = 0;
    tooMany = false;
    var c = 0;
    for (var i=0; i < types.length; i++) {
		c += show(types[i], allItem);
    }

    if (tooMany) {
		hourGlass.style.display = 'none';
		return;
    }

    if (c == 0 && !showed) {
		hourGlass.style.display = 'none';
		alert(MSG_TERKEP_NINCSKIV);
		return;
    }

    if (c == 0 && showed) {
		showed = false;
    } else {
		showed = true;
		zoomToVisible();
    }

    map.setAutoRefresh(true);
    map.refresh();

    hourGlass.style.display = 'none';
}

function show(type, allItem) {
    var f = getForm();
    var whereCondition = "";
    var temp;

    var i = 1;
    while (temp = eval('f.' + type + i)) {
		if (allItem || temp.checked) {
		    temp.checked = true;
		    whereCondition += temp.value + ",";
		    temp = eval('parseFloat(f.' + type + 'lat' + i + '.value)');
		    if (temp < latMin) latMin = temp;
		    if (temp > latMax) latMax = temp;
		    temp = eval('parseFloat(f.' + type + 'lon' + i + '.value)');
		    if (temp < lonMin) lonMin = temp;
		    if (temp > lonMax) lonMax = temp;
		    zoomScale = eval('parseFloat(f.' + type + 'scale' + i + '.value)');
		}
		i++;
    }

    var map = getMap();
    if (whereCondition == "") {
		map.getMapLayer("select_" + type).setSQLWhere(type + "key=''");
		return 0;
    }
    
    whereCondition = whereCondition.replace(/,/g, "','");
    whereCondition = eval(type + 'Where') + type + "key in ('" + whereCondition + "')";

    if (whereCondition.length >= 3500) {
		tooMany = true;
		alert(MSG_TUL_SOK_EGYED);
		return 0;
    }
    map.getMapLayer('select_' + type).setSQLWhere(whereCondition);

    return 1;
}

function hideObjects() {
    var f = getForm();

    var map = getMap();
    map.setAutoRefresh(false);

    for (var j = 0; j < types.length; j++) {
		var temp;
		i = 1;
		while (temp = eval('f.' + types[j] + i)) {
		    temp.checked = false;
		    i++;
		}
		map.getMapLayer("select_" + types[j]).setSQLWhere(types[j] + "key=''");
    }

    var graphics = map.getMapLayer('graphics');
    if (graphics != null) {
		var obj = graphics.getMapObject('path');
		if (obj != null) {
		    graphics.removeObject(obj);
		}
    }

    map.setAutoRefresh(true);
    map.refresh();

    showed = false;
}

function showAll(type) {
    var allKey = eval(type + "AllKey");

    var map = getMap();
    map.setAutoRefresh(false);
    map.getMapLayer("select_" + type).setSQLWhere(type + "key in (" + allKey + ")");
    //map.getMapLayer("select_" + type).setSQLWhere("");

    latMin = eval(type + "LatMin");
    latMax = eval(type + "LatMax");
    lonMin = eval(type + "LonMin");
    lonMax = eval(type + "LonMax");
    zoomToVisible();

    map.setAutoRefresh(true);
    map.refresh();
}

/* utvonalvalasztas */
var disp = 50;
var edgePolygon = null;		// az exploreres setTimeout bug miatt kell

function digitizePolyline() {
    if (document.forms['path'].disp.value == '' || isNaN(document.forms['path'].disp.value)) {
		document.forms['path'].disp.value = disp;
    } else {
		disp = document.forms['path'].disp.value;
    }
    getMap().digitizePolyline();
}

function onDigitizedPolyline(map, numPoints, points) {
    removeDuplications(points);
    numPoints = points.size();
    showPolyline(points);
	
    var map = getMap();
    var edge = map.createObject('MGCollection');
    var i;
	
    latMin = 180; latMax = -180; lonMin = 90; lonMax = -90;

    insertEndPoint(edge, points(0), points(1));
    for (i = 1; i < numPoints-1; ++i) {
		insertInnerPoint(edge, points(i-1), points(i), points(i+1));
    }

    insertEndPoint(edge, points(numPoints-1), points(numPoints-2));
    for (i = numPoints-2; i > 0; --i) {
		insertInnerPoint(edge, points(i+1), points(i), points(i-1));
    }
	
    edge.add(edge.item(0));	
    showPathObjects(edge);
}

// ha tobbszor kattint ugyanoda a user, kiakad a MapGuide
// a felesleges pontokat ki kell szedni
function removeDuplications(points) {
    for (var i=0; i < points.size() - 1; ++i) {
		while (points.item(i).equals(points.item(i+1))) {
		    points.remove(i+1);
		}
    }
}

function insertPoint(edge, px, py) {
    var pt = getMap().mcsToLonLat(px, py);
    var lat = pt.getY(), lon = pt.getX();
    if (lat < latMin) latMin = lat;
    if (lat > latMax) latMax = lat;
    if (lon < lonMin) lonMin = lon;
    if (lon > lonMax) lonMax = lon;
    edge.add(pt);
}

function insertInnerPoint(edge, sp, ip, ep) {
    var map = getMap();
    sp = map.lonLatToMcs(sp.getX(), sp.getY());
    ip = map.lonLatToMcs(ip.getX(), ip.getY());
    ep = map.lonLatToMcs(ep.getX(), ep.getY());

    var v1, v2, px, py, qx, qy, mx, my;
    v1 = vector(sp, ip);
    v2 = vector(ip, ep);
	
    px = sp.getX() + v1.getY(); py = sp.getY() - v1.getX();
    qx = ip.getX() + v2.getY(); qy = ip.getY() - v2.getX();
	
    mx = (v1.getX() * v2.getX() * (py - qy) - v1.getY() * v2.getX() * px +
	  v1.getX() * v2.getY() * qx) / (v1.getX() * v2.getY() - v1.getY() * v2.getX());
    my = py + (mx - px) * v1.getY() / v1.getX();
    // if (isNaN(mx)) return;

    insertPoint(edge, mx, my);
}

function insertEndPoint(edge, sp, ep) {
    var map = getMap();
    sp = map.lonLatToMcs(sp.getX(), sp.getY());
    ep = map.lonLatToMcs(ep.getX(), ep.getY());

    var v = vector(sp, ep);
    var vx = v.getX(), vy = v.getY();
    insertPoint(edge, sp.getX() - vy - vx, sp.getY() + vx - vy);
    insertPoint(edge, sp.getX() + vy - vx, sp.getY() - vx - vy);
}

// a |disp| hosszu iranyvektor meghatarozasa
function vector(sp, ep) {
    var dx = ep.getX() - sp.getX();
    var dy = ep.getY() - sp.getY();
    var len = Math.sqrt(dx*dx + dy*dy);
	
    var v = getMap().createObject('MGPoint');
    v.setX(disp * dx / len);
    v.setY(disp * dy / len);
    return v;
}

function showPathObjects(edge) {
    edgePolygon = edge;
    pathObjectsShowing = true;

    var map = getMap();
    var layer;
    map.setAutoRefresh(false);
    for (var i=0; i < types.length; i++) {
		layer = map.getMapLayer('select_' + types[i] + '_hidden');
		layer.setVisibility(true);
	
		var whereCondition;
		whereCondition = eval(types[i] + 'Where') + '(LAT BETWEEN ' + latMin + ' AND ' + latMax
		    + ') AND (LON BETWEEN ' + lonMin + ' AND ' + lonMax + ')';
		layer.setSQLWhere(whereCondition);
    }

    map.setAutoRefresh(true);
    map.refresh();
}

function showPathObjectsCont() {
    var map = getMap();
    map.selectPolygon(null, edgePolygon);
    var selection = map.getSelection();

    map.setAutoRefresh(false);
    for (var j = 0; j < types.length; j++) {
		var objs = selection.getMapObjectsEx('select_' + types[j] + '_hidden');
		var whereCondition = "";
		for (var i = 0; i < selection.getNumObjects(); ++i) {
		    whereCondition += objs.item(i).getKey() + ",";
		}
	
		var field = eval("document.forms['global']." + types[j]);
		if (whereCondition == '') {
		    field.value = '';
		    whereCondition = types[j] + "key = ''";
		} else {
		    whereCondition = whereCondition.substring(0, whereCondition.length - 1);
		    field.value = whereCondition;
		    whereCondition = whereCondition.replace(/,/g, "','");
		    whereCondition = eval(types[j] + 'Where') + types[j] + "key in ('" + whereCondition + "')";
		}
	
		map.getMapLayer('select_' + types[j]).setSQLWhere(whereCondition);
		map.getMapLayer('select_' + types[j] + '_hidden').setVisibility(false);
    }
    //selection.clear();
    map.setAutoRefresh(true);
    map.refresh();

    document.forms['global'].action = 'map/frameList.jsp';
    document.forms['global'].target = 'list';
    document.forms['global'].tmn.value = '';
    document.forms['global'].submit();
}

function showPolyline(edge) {
    var map = getMap();
    var graphics = map.getMapLayer('graphics');
    if (graphics == null) {
		graphics = map.createLayer('redline', 'graphics');
		graphics.setShowInLegend(false);
    }

    var num = map.createObject('MGCollection');
    num.add(edge.size());

    var obj = graphics.getMapObject('path');
    if (obj != null) {
		graphics.removeObject(obj);
    }
    obj = graphics.createMapObject('path', MSG_TERKEP_UTVONAL, '');
    obj.addPolylinePrimitive(edge, num, false);

    graphics.setSelectability(false);
    graphics.setVisibility(true);
}
/* utvonalvalasztas vege */

function help(lang) {
    helpWindow = window.open('map/help/help_' + lang + '.html', 'helpwindow',
			     'width=640,height=480,resizable=yes,status=yes,scrollbars=yes');
}

