var V3_STREET_LAYERS = "ul_c_glown, ul_c_drgrz, ul_most, ul_g, ul_o, ul_m, ul_n, ul_r, ul_p";
var V3_STREET_COLUMN = "nazwa";
var V3_INFOCLICK_TOLERANCE=10; // (x-tolerance,y-tolerance); (x+tolerance; y+tolerance)
var ztm_url = "http://ztm.waw.pl/rozklad_nowy.php?c=182&l=1&n={zespol}&o={idzesp}";
var langue;

    OpenLayers.ImgPath = 'http://dojazd.pl/designs/v3/js/libs/OpenLayers-2.10/img/';

    if (typeof(console) === "undefined" && ("opera" in window)) {
	console = {
	    log: function() { window.opera.postError(arguments.join(" ")); }
	};
    }
if (typeof(console) === "undefined") {
    console = {
	log: function() {}
    };
}





var log = function() {
    if (true && (typeof(console) !== 'undefined')) {
	if (typeof(console.log) === 'function') {
	    return function() {
		console.log.apply(console, $A(arguments));
	    };
	}
    }
    return function(){};
}();

// returns full dimensions, including margins
function full_dim(el) {
    var arr = el.getDimensions({'computeSize': 'true'});
    arr["margin-left"] = parseInt(el.getStyle('margin-left'), 10);
    arr["margin-right"] = parseInt(el.getStyle('margin-right'), 10);
    arr["margin-bottom"] = parseInt(el.getStyle('margin-bottom'), 10);
    arr["margin-top"] = parseInt(el.getStyle('margin-top'), 10);
    arr.totalWidthEx = arr.totalWidth + arr["margin-right"] + arr["margin-left"] + 1; // "+ 1" part is HACK
    arr.totalHeightEx = arr.totalHeight + arr["margin-top"] + arr["margin-bottom"] + 1; // "+ 1" part is HACK
    return arr;
}

function get_my_url2 (bounds) {
    var res = this.map.getResolution();
    var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
    var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
    var z = this.map.getZoom();

    var path = "?x=" + x + "&y=" + y + "&s=" + z;
    var url = this.url;
    if (url instanceof Array) {
	url = this.selectUrl(path, url);
    }
    return url + path;
}

function get_my_url (bounds) {
    var res = this.map.getResolution();
    var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
    var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
    var z = this.map.getZoom();

    var path;
    if (dojazd.mapnik == "true") {
       path = "?x=" + x + "&y=" + y + "&s=" + z;
       } 
    else {
       path = "/"+z+"/"+x+"/"+x+"_"+y+"_4.png";
    }   
    var url = this.url;
    if (url instanceof Array) {
	url = this.selectUrl(path, url);
    }
    return url + path;
}


function isnum(value) {
    return (!isNaN(value) && (typeof(value) === 'number'));
}
function isstr(value) {
    return (typeof(value) === 'string');
}
function isobj(value) {
    return (typeof(value) === 'object');
}


function is_valid(addrStr) {
}

var Site = {
    stops: 0,
    map: 0,
    
    vectorLayer: 0,

    draw_route: function(start, stop, zoom) {
        var routeData = [];
        log("start stop");
	//add coords point start and stop
	Site.map.pointStart = {'x': start.lon,
                          'y': -start.lat};
	Site.map.pointStop = {'x': stop.lon,
                         'y': -stop.lat};
        
	//push to routeData	
        routeData.push(Site.map.pointStart);
        routeData.push(Site.map.pointStop);
        
        var taskurl =  GETROUTEURL.toURI();
	taskurl.set('data', {'p': routeData});
        var url = taskurl.toString();
        var jsonRequest = new Request.JSON({'url': url, 
                                            'onComplete': function (res) { 
                                              this.on_route_data(res, zoom); 
                                            }.bind(this)});
        log("draw_route: sending request");
        jsonRequest.get();
    },
    
    set_start_point: function(lonlat) {
        log ("set start point role:");
        var marker = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat));
        this.map.startMarker.destroyFeatures();
        this.map.startMarker.addFeatures(marker);
        this.map.mStart = {'lon': lonlat.lon, 'lat': lonlat.lat};
    },
    
    set_stop_point: function(lonlat) {
        log ("set stop point role:");
        var marker = new OpenLayers.Feature.Vector(
                                                   new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat));
	log("enter 1");
	this.map.stopMarker.addFeatures(marker);
	log("enter 2");
        this.map.mStop = {'lon': lonlat.lon, 'lat': lonlat.lat};
	log("enter 3");
	var aaa = new OpenLayers.Bounds().add(lonlat.lon, lonlat.lat);
	log("enter 3a");
        this.map.zoomToExtent(aaa);
	log("enter 4");
    },
    
    on_route_data: function(paths, zoom) {
        get_street_name(paths, zoom);
    },
    
    map_init: function(mapId) {
        if (isnum(parseInt(dojazd.x, 10)) && isnum(parseInt(dojazd.y, 10)))  {
            dojazd.x = parseInt(dojazd.x, 10);
            dojazd.y = parseInt(dojazd.y, 10);
        }
        
        log("map_init");
        V3.navControl = new OpenLayers.Control.Navigation({
                handleRightClicks: true,
		mouseWheelOptions: {interval: 3000, 
				    cumulative: false},
		zoomWheelEnabled: false
            });
	var clickHandle = new OpenLayers.Control.Navigation({
		handleClicks: true
	    });
        
        var config =  {
            controls: [
		       //		       new OpenLayers.Control.MousePosition(),
                       V3.navControl,
		       clickHandle
                       ],
            tileSize: new OpenLayers.Size(250, 250),
            maxExtent: new OpenLayers.Bounds(0,-200000000,200000000,0),
            restrictedExtent: V3.resExtent,
	    maxResolution: 200000000 / 250,
	    numZoomLevels: 13
        }
    





	this.map = new OpenLayers.Map(null,config);
	// TESTING - LOADING PANEL
	var loadingpanel = new OpenLayers.Control.LoadingPanel();
	this.map.addControl(loadingpanel);
	this.map.loader = loadingpanel;
	// #END - TESTING - LOADING PANEL 

	var mapnettiles = new OpenLayers.Layer.TMS("MapNetTiles", V3.tilePrivider, 
                                                   {'type':'png',
                                                    'getURL':get_my_url,
                                                    'transitionEffect': 'resize'
                                                   });
	this.map.addLayer(mapnettiles);
	V3.navControl.handlers.wheel.cumulative = false;
	V3.navControl.handlers.click.callbacks.rightclick = function(e) {
	    var lonlat = this.map.getLonLatFromViewPortPx(e.xy);
	    showMenu(lonlat);
	}.bind(this);

	clickHandle.handlers.click.callbacks.click = function(e) {
	    onPopupClose(null);
	}.bind(this);
	
	var routeLayer = new OpenLayers.Layer.Vector("Route Layer");
	this.map.addLayers([routeLayer]);
	this.map.rLayer = routeLayer;			   

      
      
	//////////////////////////////////////////////
	///////////// route markers layer/////////////
	//////////////////////////////////////////////



	

 // 	//Marker punktu startowego
	
 	var styleStopMarker = new OpenLayers.StyleMap({"default": MapStyle.stopMarker});
 	var styleStartMarker = new OpenLayers.StyleMap({"default": MapStyle.startMarker});

	var layerMarkerStop = new OpenLayers.Layer.Vector("Marker Drop Shadows", {
		'styleMap': styleStopMarker,
   		'rendererOptions': {yOrdering: true}
   	    });
	var layerMarkerStart = new OpenLayers.Layer.Vector("Marker Drop Shadows", {
		'styleMap': styleStartMarker,
   		'rendererOptions': {yOrdering: true}
   	    });

  	this.map.addLayers([layerMarkerStop, layerMarkerStart]);
  	this.map.stopMarker = layerMarkerStop;
        this.map.startMarker = layerMarkerStart;

        log("markers layer created and configured");


	// Add a drag feature control to move features around.
 	var dragFeature = new OpenLayers.Control.DragFeature(layerMarkerStart);
 	this.map.addControl(dragFeature);
 	dragFeature.activate();

	dragFeature.onComplete = function(e, b) {
	    toRoute(e.geometry.x, e.geometry.y);
	};


// // 	var oldUp = dragFeature.handlers.drag.callbacks.up;
// 	dragFeature.handlers.drag.callbacks.up = function(Event) {
// 	    $('popup_route_removenode').removeClass('hide2');
// 	    Site.feature = this.feature;
// 	    Interface.pagemenu.preOpenEvent(Event);
// 	}





        // BUS STOP
  	var styleBusStop = new OpenLayers.StyleMap({"default": MapStyle.bus_stop});

	var wfsBus = new OpenLayers.Layer.Vector("Przystanki autobusowe", {

		strategies: [new OpenLayers.Strategy.BBOX()],
		protocol: new OpenLayers.Protocol.WFS({
			version: "1.1.0",
			srsName: "mapnet2:inverse",
			url:  "http://dojazd.pl/wfs?geo=true&outputformat=json",
			featureType: "prztm",
			outputFormat: 'json', 
			readFormat: new OpenLayers.Format.GeoJSON() 
		    }),
		outputformat: "json",
		minScale: 492159825000,
		styleMap: styleBusStop
	    });
	Site.map.addLayer(wfsBus);

	// TRAM STOP
 	var styleTramStop = new OpenLayers.StyleMap({"default": MapStyle.tram_stop});
//         var tram_stop_options = {format: OpenLayers.Format.GeoJSON,
// 				 projection: "mapnet2:inverse",     // Used in WMS/WFS requests.
// 				 renderers: ['SVG', 'Canvas', 'VML'],
// 				 minScale: 492159825000,
// 				 styleMap: styleTramStop
//         };
//         var tram_stop_wfs = new OpenLayers.Layer.WFS("Przystanki tramwajowe",
//                                                       "http://dojazd.pl/wfs?geo=true",
//                                                       {outputformat: "json",
//                                                        typename: "prz_trmw"},
// 						     tram_stop_options);
	
//  	Site.map.addLayers([tram_stop_wfs]);

	var wfsTram = new OpenLayers.Layer.Vector("Przystanki tramwajowe", {

		strategies: [new OpenLayers.Strategy.BBOX()],
		protocol: new OpenLayers.Protocol.WFS({
			version: "1.1.0",
			srsName: "mapnet2:inverse",
			url:  "http://dojazd.pl/wfs?geo=true&outputformat=json",
			featureType: "prz_trmw",
			outputFormat: 'json', 
			readFormat: new OpenLayers.Format.GeoJSON() 
		    }),
		outputformat: "json",
		minScale: 492159825000,
		styleMap: styleTramStop
	    });
	Site.map.addLayer(wfsTram);

	//PAN PANEL
	var panelNorth = new OpenLayers.Control.Panel();
	var panNorth = new OpenLayers.Control.Pan(OpenLayers.Control.Pan.NORTH, {slideFactor: 100});
	panelNorth.displayClass = "olControlPanelNorth"
	panelNorth.addControls([panNorth]);
	this.map.addControls([panelNorth]);
	panelNorth.activate();
	panNorth.activate();

	var panelWest = new OpenLayers.Control.Panel();
	var panWest = new OpenLayers.Control.Pan(OpenLayers.Control.Pan.WEST, {slideFactor: 100});
	panelWest.displayClass = "olControlPanelWest"
	panelWest.addControls([panWest]);
	this.map.addControls([panelWest]);
	panelWest.activate();
	panWest.activate();

	var panelSouth = new OpenLayers.Control.Panel();
	var panSouth = new OpenLayers.Control.Pan(OpenLayers.Control.Pan.SOUTH, {slideFactor: 100});
	panelSouth.displayClass = "olControlPanelSouth"
	panelSouth.addControls([panSouth]);
	this.map.addControls([panelSouth]);
	panelSouth.activate();
	panSouth.activate();

	var panelEast = new OpenLayers.Control.Panel();
	var panEast = new OpenLayers.Control.Pan(OpenLayers.Control.Pan.EAST, {slideFactor: 100});
	panelEast.displayClass = "olControlPanelEast"
	panelEast.addControls([panEast]);
	this.map.addControls([panelEast]);
	panelEast.activate();
	panEast.activate();


	// ZOOM PANEL
	var zoomPanel = new OpenLayers.Control.ZoomPanel();
	this.map.addControls([zoomPanel]);
	zoomPanel.activate();

        // var Switch = true;
        var Switch = isnum(dojazd.x) && isnum(dojazd.y);
	if (Switch) {
            log("coordinates set: dojazd.x, dojazd.y", dojazd.x, dojazd.y);
	    var lonlat = new OpenLayers.LonLat(dojazd.x, -dojazd.y);

	    this.set_stop_point(lonlat);
	    V3.draw(mapId);
	}
	else {
            log("coordinates not set: calling geocoding");
	    V3.Geocoder.request(function(data) {
		var lonlat = new OpenLayers.LonLat(data[0].point[0], -data[0].point[1]);
		console.log(lonlat);
		this.set_stop_point(lonlat);
				log("exit set_stop_point");
		V3.draw(mapId);
		}.bind(this), dojazd.city, dojazd.street, dojazd.number);
	}

        log("this.map.zoomToMaxExtent();");



    }




};

    function create_bounds(x, y, width, height) {
        var bounds = new OpenLayers.Bounds();
        bounds.left = x - width/2;
        bounds.right = x + width/2;
        bounds.top = y - height/2;
        bounds.bottom = y + height/2;
        return bounds;
    }

            // onFocus="if(this.value==this.getAttribute('defvalue'))this.value='';"
            // onBlur="if(this.value=='')this.value=this.getAttribute('defvalue');"



// popup = new OpenLayers.Popup("chicken",
// 			     lonlat,
// 			     new OpenLayers.Size(80,60),
// 			     "example popup",
// 			     true);

// that.map.addPopup(popup);

var onDomReadyMain = function() {
 // working one
}
    
 function test_layer() {
     var lonLat = {
	 'lon': 129600000,
	 'lat':-103200000
     };
     var f = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat));
     Site.route.stops.addFeatures([f]);
     Site.route.set_roles();
 }

function get_street_name(paths, zoom) {
    var streetQuery = "";
    var j;
    for (var i = 0; i < paths.length; i++) {
        if(paths[i] ['step'] ['street']) {

	    var streetId = paths[i]['step']['street'].split(":")[0];
	    if (streetId != "0") {
		j++;
		if(j==0) {streetQuery=streetId}
		else{streetQuery +=", "+streetId}
	    }
	    var geobase = paths[i]['step']['street'].split(":")[1]
        }
    }
    var url = "http://dojazd.pl/layer_info?layers="+V3_STREET_LAYERS+"&id="+streetQuery+"&get="+V3_STREET_COLUMN+"&geobase="+geobase; //apache mod rewrite layer_info -> get_col_by_id
    var jsonRequest = new Request.JSONP({'url': url, 
                                        'onComplete': function (res) { 
                generate_route(paths, res, zoom); 
            }.bind(this)});
    log("get_street_name: sending request");
    jsonRequest.send();
    
}

function generate_route(paths, street, zoom) {
    log("Add new Layer...");
    if (Site.map.rLayer) {
	Site.map.rLayer.destroyFeatures();
	log("Destroy Feature...");
    }    
    V3.afterSearch();
    log("... done");
    
    function radian_to_angle(radian) {
	var angle = 180*radian/3.141592653589793;
	return angle.toFixed(0);
    }

    function list_to_obj(l) {
        var streetId = l['step']['street'];
	var streetName = "Bez nazwy";
	streetId = l['step']['street'];
	if (streetId) {streetId = streetId.split(":")[0]}
        if (street[streetId]) {
            streetName = street[streetId];
        }
	var rs = {
	    'coords': new OpenLayers.Geometry.Point(l['point'][0], -l['point'][1]),
 	    'angle': radian_to_angle(l['step']['angle']),
 	    'distance': l['step']['distance']/200,
	    'streetId': streetId,
            'streetName': streetName,
	    'operation': l['step']['operation']
	};
	return rs;
    }
    if (!paths || paths.length < 1) {
	showMessage("Błąd, brak odpowiedzi od serwera! Spróbuj ponownie za chwile.");
	return;
    }
    if (paths['error']) {
	showMessage("Przepraszamy, nie można wytyczyć trasy. Spróbuj ponownie za chwile.");
	return;
    }

	var pointList = [];
	var objectRoads = [];
	var firstLine = [];
	var lastLine = [];
	firstLine.push(new OpenLayers.Geometry.Point(Site.map.pointStart.x, -Site.map.pointStart.y));
	firstLine.push(list_to_obj(paths[0]).coords);
	Site.map.rLayer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(firstLine), null, MapStyle.route_line_dashdot));	

	lastLine.push(new OpenLayers.Geometry.Point(Site.map.pointStop.x, -Site.map.pointStop.y));
	lastLine.push(list_to_obj(paths[paths.length-1]).coords);
	Site.map.rLayer.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(lastLine), null, MapStyle.route_line_dashdot));	


    for (var i = 0; i < paths.length; i++) {
	var objRoad = list_to_obj(paths[i]);
	pointList.push(objRoad.coords);

	if(objRoad.operation) {
	    //	    log("Point:\nangle: "+objRoad.angle+"\ndistance: "+objRoad.distance+"\nstreet: "+objRoad.streetName+"\noperation: "+objRoad.operation+"\n\n");	
	    objectRoads.push(objRoad);
	}
    }

    
    log("add to vector: "+pointList);
	var pointFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(pointList), null, MapStyle.route_line);
	log("add to layer");
	Site.map.rLayer.addFeatures([pointFeature]);
        if(zoom === true) {
            Site.map.zoomToExtent(Site.map.rLayer.getDataExtent(), false);	
        }
	log("... done\nAdd desc");
	//create_desc(objectRoads);
	V3.roads = objectRoads;
	V3.create_desc(objectRoads, V3.tabRoute, langue);
	if(V3.forceCloseResultPanel==false) {
	    V3.togglePanel($('toggleButton'), true);
	    V3.flashToggleButton();
	    V3.forceCloseResultPanel=true;
	}
    removeMessage();
}



function get_layer_by_zoom(zoom) {
    var search_in_zoom = {10: 'ul_c_glown, ul_c_drgrz, ul_most, ul_g, ul_o, ul_m, ul_n, ul_r, ul_p, admin, miasta, prztm, prz_trmw',
			  9: 'ul_c_glown, ul_c_drgrz, ul_most, ul_g, ul_o, ul_m, ul_n, ul_r, ul_p, admin, miasta',
			  8: 'ul_c_glown, ul_c_drgrz, ul_most, ul_g, ul_m, ul_n, ul_r, ul_p, admin, miasta',
			  7: 'ul_c_glown, ul_c_drgrz, ul_most, ul_g, admin, miasta',
			  6: 'ul_c_glown, admin, miasta',
			  5: 'admin, miasta'};

    for(var i=zoom; i>1; i--) {
	if(search_in_zoom[i]) {
	    return search_in_zoom[i];
	}
    }
}

function info_click(lon,lat) {
    var lonlat = new OpenLayers.LonLat(lon,lat);
    //Create search rect
    var current_point = Site.map.getPixelFromLonLat(lonlat);
    var top_left = Site.map.getLonLatFromPixel(new OpenLayers.Pixel(current_point.x-V3_INFOCLICK_TOLERANCE, 
								    current_point.y-V3_INFOCLICK_TOLERANCE));
    var bottom_right = Site.map.getLonLatFromPixel(new OpenLayers.Pixel(current_point.x+V3_INFOCLICK_TOLERANCE, 
									current_point.y+V3_INFOCLICK_TOLERANCE));
    //ADD RECT FOR INFO (THIS IS DEBUG!)
//     var style_green =
// 	{
// 	    strokeColor: "#000000",
// 	    strokeOpacity: 1,
// 	    strokeWidth: 0.5,
// 	    fillColor: "#00FF00",
// 	    fillOpacity: 0.5
// 	};
//     var point_arr = [new OpenLayers.Geometry.Point(top_left.lon, top_left.lat), 
// 		     new OpenLayers.Geometry.Point(top_left.lon, bottom_right.lat),
// 		     new OpenLayers.Geometry.Point(bottom_right.lon, bottom_right.lat),
// 		     new OpenLayers.Geometry.Point(bottom_right.lon, top_left.lat)];
//     var Line = new OpenLayers.Geometry.LinearRing(point_arr);
//     var poly = new OpenLayers.Feature.Vector(Line, null, style_green);
//     Site.map.testLayer.addFeatures([poly]);
    //END ADD RECT
    
    var query = top_left.lon+","+(top_left.lat*-1)+","+bottom_right.lon+","+(bottom_right.lat*-1);
    var search_layer = get_layer_by_zoom(Site.map.getZoom());
    var url = "http://dojazd.pl/info_click?outputformat=json&typename="+search_layer+"&SRS=mapnet2&BBOX="+query;
    log(url);
    var jsonRequest = new Request.JSONP({'url': url, 
                                        'onComplete': function (res) { 
                add_infoclick(res, lonlat); 
            }.bind(this)});
    log("info_click: sending request");
    jsonRequest.send();
    
}

function add_infoclick(data, lonlat) {
    var lng = langue;
    var layer_type = {'street':    {'pl': 'Ulice i place', 
                                    'en': 'Streets and places', 
                                    'row': ['nazwa']},

		      'bridge':   {'pl': 'Mosty', 
                                   'en': 'Bridges', 
                                   'row': ['nazwa']},

                      
		      'bus_stop': {'pl': 'Przystanki', 
                                   'en': 'Bus stops', 
                                   'row': ['nazwa', 'localhtml']},

		      'city': {'pl': 'Miejscowości', 
                                   'en': 'Locality', 
                                   'row': ['nazwa']},
    
		      'administration': {'pl': 'Administracja', 
                                   'en': 'Administration', 
                                   'row': ['nazwa']}};

    
    var legend = {'ul_g':       layer_type['street'],
		  'ul_m':       layer_type['street'],
		  'ul_p':       layer_type['street'],
		  'ul_r':       layer_type['street'],
		  'ul_n':       layer_type['street'],
		  'ul_o':       layer_type['street'],
		  'ul_c_glown': layer_type['street'],
		  'ul_c_drgrz': layer_type['street'],
		  'ul_most':    layer_type['bridge'],
		  'prztm':      layer_type['bus_stop'],
		  'prz_trmw':   layer_type['bus_stop'],
		  'miasta':     layer_type['city'],
		  'admin':      layer_type['administration']};


    var res = {};
    for(var k in data ) {
        if(legend[k]) {
            var layer_name = legend[k][lng];
            for(var i=0; i<data[k].length;i++) {
                var index = legend[k]['row'];
		var value = [];
		for(var j=0; j<index.length; j++) {
		    var value_put = data[k][i][index[j]];
		    if(value_put) {
			value.push(value_put);
		    }
		}
                if(value) {
		    if(value.length!=0) {
			res[layer_name] = (res[layer_name] || []).extend([value]);
		    }
                }
            }
        }
    }
    log(res);
    var info = "";
    for(var k in res) {
	info += "<b>"+k+"</b><br>";
	res[k] = res[k].unique();
	for(var i=0;i<res[k].length;i++) {
	    if(k==layer_type['bus_stop']['en'] || k==layer_type['bus_stop']['pl']) {
		var zespol = res[k][i][1];
		console.log("zespol:");
		var idzesp = res[k][i][0];
		idzesp = idzesp.split(" ");
		idzesp = idzesp[(idzesp.length - 1)];
		console.log(idzesp);
		zespol = parseInt(zespol.split("\\")[2]);
		var addVar = {zespol: zespol,
			      idzesp: idzesp};
// 		fix_data = fix_data.replace(/ztm\\/gi, "").replace("\\", "/"); //_ Fix, because the new version page of the no prefix "ztm/"
		info += "<a href=\"" + ztm_url.substitute(addVar) + "\" target=\"_blank\">" + res[k][i][0] + "</a><br>";
	    }
	    else {
		info += res[k][i][0]+"<br>";
	    }
	}
    }

    if (!info) {info="Nic nie znaleziono..."};
   
    popup = new OpenLayers.Popup.FramedCloud("featurePopup",
					     lonlat,
					     new OpenLayers.Size(100,100),
					     info,
					     null, true, onPopupClose);
	
    Site.popup = popup;
    popup.autoSize = true;
    popup.displayClass = "border: 1px solid #000000;";
    Site.map.addPopup(popup, true);
    log(Site.map.getScale());
}



function toRoute(lon,lat) {
    Site.set_start_point(new OpenLayers.LonLat(lon,lat));
    //    Site.map.mStart = {'lon': lon, 'lat': lat}
    Site.draw_route(Site.map.mStart, Site.map.mStop, false);

}

function createItemMenu(text, toFunction) {
    var req = "<div class='itemMenu' onmouseover=\"$(this).addClass('itemMenuOver');\" onmouseout=\"$(this).removeClass('itemMenuOver');\" onclick=\""+toFunction+"\">"+text+"</div>";
    return req;
}

function setCenter(lon,lat) {
    Site.map.panTo(new OpenLayers.LonLat(lon,lat));
}

function showMenu(lonlat) {
    var lng = langue;
    var menuText = {'from_here':    {'pl': 'Wyznacz trasę z tego punku', 
                                     'en': 'Directions from here'},
		    'center':       {'pl': 'Wyśrodkuj mapę tutaj',
				     'en': 'Center map here'},
		    'what':         {'pl': 'Co tu jest?',
				     'en': 'What\'s here?'}};
	

    var jsLonLat = lonlat.lon+","+lonlat.lat;
    var src = createItemMenu(menuText['from_here'][lng], "toRoute("+jsLonLat+"); onPopupClose();");
    src += "<hr class=\"itemMenuHr\">";
    src += createItemMenu(menuText['center'][lng], "setCenter("+jsLonLat+"); onPopupClose();");
    src += createItemMenu(menuText['what'][lng], "info_click("+jsLonLat+")");
    popup = new OpenLayers.Popup("Menu",
				 lonlat,
				 new OpenLayers.Size(200,200),
				 src,
				 false, onPopupClose);
    Site.popup = popup;
    popup.autoSize = true;
    popup.displayClass = "contMenu";
    popup.setBorder("1px solid #9f9f9f");
    Site.map.addPopup(popup, true);
    popup.panIntoView();

}

function onPopupClose(evt) {
    if(Site.popup) {
	Site.map.removePopup(Site.popup);
    }
}

function showMessage(message, opts) {
    var image="";
    if(opts.image){
	image = "<img src=\""+opts.image+"\">";
    }
    var innerHtml = "<center><div style=\"padding-top:25%; width: 200px;\">"+message+"<br><br><a style=\"color: #FFF;\" href=\"javascript:removeMessage();\"><b>[-OK-]</b></a>"
	+image+"</div></center>";
    removeMessage();
    var con = $(V3.map_container);
    var obj_msg = new Element("div", {
	    'id': 'MessageBox',
	    'class': 'msgbox'
	}).set('html', innerHtml);
    obj_msg.setStyle('height', con.getStyle('height'));
    obj_msg.setStyle('width', con.getStyle('width'));
    $(obj_msg).inject(con, 'top');
}

function removeMessage() {
    if($('MessageBox')) {
	$('MessageBox').destroy();
    }
}

function clear_temp_layer() {
    if (Site.map.testLayer) {
	Site.map.testLayer.destroyFeatures();
	log("Clear temp layer...");
    }    
    return 0;
}

// example url http://5.bliskadev.mapnet.pl/maps/tile?x=3&y=2&s=3

window.addEvent('domready', onDomReadyMain);
