
/** Blablabla
 * ???
 */
Navigo2.UI.Pois = function(/*HTMLElement*/element) 
{
	if(element!=undefined) {
		var panel = $(element).cloneNode(false);
	}
	else {
		var panel = {};
	}
	
	var scroller =  undefined;

    var last_radius =  undefined;
	
	var defaultPoiId = undefined;
	var	geometry = { layer: ['poi-r','poi-s'], POIs: [], points: true,	hist: false, radius: false, POIs: {} };
	var last_addr = undefined;
	var last_pois = undefined;
	
	var mvaID = undefined;
	this.setMvaID = function(mva_id) {
		mvaID = mva_id;
	}
	
	var component_name = undefined;
	this.setComponentName = function(cname) {
		component_name = cname;
	}
	
	var defaultPoiId = undefined;
	this.setDefaultPoiId = function(id) {
		defaultPoiId = id;
	}
	
	var defPoisFilter = {};
	this.setDefPoisFilter = function(filter) {
		defPoisFilter = filter;
	}
	
	var poiDataSchema = {};
	this.setPoiDataSchema = function(schema) {
		poiDataSchema = schema;
	}
	
	var poisPerPage = 10;

	var events = {
		simple: {
			'mva_center': { event: 'flash:center' },
			'pm_poi_move': { event: 'pois:poiMove' },
			'pm_mouse_over': { event: 'flash:poiMouseOver'}, 
			'pm_mouse_out': { event: 'flash:poiMouseOut'},
			'tree_node_selected': { event: 'flash:treeNodeViewSelected'},
			'pm_poi_renumber': { event: 'flash:poiRenumber'}
			//'pm_update_cb':{event:'flash:refresh'}
		},
		menu: {
			'menu1': { event: 'flash:newAddress', layer: 'poi-r', description: 'Pokaż adres' }		
		},
		point: {
		},
		pois: {event:'flash:refresh'}
	};

	/**
	 * ???
	 */
	var validAddressFields = function() 
	{
		/*if(panel.category != undefined && panel.category.value != -1) {
			panel.address.removeClassName("error");
			return true;
		}*/
		if(panel.address.value == "") {
			panel.address.addClassName("error");
			return false;
		} else {
			panel.address.removeClassName("error");
			return true;
		}
	}
	
	/**
	 * ???
	 */
	var validTokenFields = function() 
	{
		if(panel.poisToken.value == "") {
			panel.address.addClassName("error");
			return false;
		} else {
			panel.address.removeClassName("error");
			return true;
		}
	}
	
	/**
	 * Wczytanie pois po klinkieciu na link
	 */
	Event.observe(document, 'pois:reload', function(event) {
		Navigo2.emitById('pois:show', event.memo.id, event.memo.args[0], event.memo.args[1], event.memo.args[2]);
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'pois:show', function(event) 
	{
		if(!panel.initialised) {
			var cname = "component.pois";
			if(component_name != undefined && component_name != '') {
				cname = 'component.' + component_name;
			}
			Navigo2.DAO.getComponent(cname, function(html) {
				panel.update(html);
				panel.address = panel.select("input[elementType='address']")[0];
				panel.radius = panel.select("input[elementType='radius']");
				panel.token = panel.select("input[elementType='token']")[0];
				panel.category = panel.select("select[elementType='category']")[0];
				panel.hint = panel.address.adjacent("input[hintType='address']")[0];
				panel.addressId = panel.address.adjacent("input[elementType='addressId']")[0];
				panel.address.value = "";
				
				
				var catTmpl = new Template('&lt;option value="#{id}"&gt;#{spaces}#{name}&lt;/option&gt;');
				var catTmpl1 = '&lt;option value="#{id}"&gt;'
				var catTmpl2 = '#{name}&lt;/option&gt;'
				var text = '';
				Navigo2.DAO.getPoisCategories(function (data) {
				
					function eval(categories, level) {
						categories.each(function(category) {
							var tabs = '';
							for(var i = 0; i < level; i++) {
								tabs += '-&nbsp;&nbsp;';
							}
							catTmpl = new Template(catTmpl1 + tabs + catTmpl2);
							text = text + catTmpl.evaluate(category) + '\n';
							if(category.categories != undefined) {
								eval(category.categories, level + 1);
							}
						});
					}	
				
					if(data.categories) {
						eval(data.categories, 0);
						if(panel.category!=undefined) {
							panel.category.update(Navigo2.unescape(text));
						}
					}
				});
		
				var url = Navigo2.normalisedURL("getCityHints.do");
				Navigo2.Hint.decorate(panel.address, panel.hint, url, 
				{ 
					method: 'get', 
					paramName: "address", 
					minChars: 2,
					elementId: panel.addressId
				});
				panel.address.observe("keypress", function(e) {
					if(e.which == Event.KEY_RETURN) Navigo2.emitById("pois:findPoisNearTo", event.memo.id);
				});
				panel.info = panel.select("div[sectionType='info']")[0];
				panel.list = panel.select("div[sectionType='list']")[0];
				panel.multi = panel.select("div[panelType='multiresult']")[0];
				
				panel.poisList = panel.select("div[panelType='multiresult']")[0];
				panel.poisList.hide();
				if (event.memo.args[0] != undefined) {
					panel.address.value = event.memo.args[0];
					if (panel.category != undefined) {
						panel.category.value = event.memo.args[1];
					}	
			        if(panel.radius != undefined && event.memo.args[2] != undefined) {
            			panel.radius.each(function(rad) {
							if(event.memo.args[2] == rad.value) {
								rad.checked = true;
                			} else {
                    			rad.checked = false;
                			}
						});
	        		}
					Navigo2.emitById('pois:findPoisNearTo', event.memo.id);
				}	
				panel.initialised = true;
			});
		}

		$(panel.id).replace(panel.show());
        if(panel.radius != undefined && last_radius != undefined) {
            panel.radius.each(function(rad) {
				if(last_radius == rad.value) {
					rad.checked = true;
                } else {
                    rad.checked = false;
                }
			});
        }
         events.menu['menu1'].description = Navigo2.DAO.getMessage('javascript.menu.item.findAddress');
		Navigo2.emitById('map:flash', event.memo.id, geometry, events);
        if(last_pois != undefined && last_pois.pois != undefined) {
            Navigo2.emitById('map:clear_last_pois', event.memo.id);
            Navigo2.emitById('map:setPOIs', event.memo.id, last_pois.pois, last_pois.layer);
            if(last_pois.zoomMap) {
                Navigo2.emitById('map:boundBox', event.memo.id, {	left:last_pois.bbox[0],
				    		    					right:last_pois.bbox[1],
				        							top:last_pois.bbox[2],
				        							bottom:last_pois.bbox[3]});
            }
                    Navigo2.emitById('map:save_last_pois_search', event.memo.id, last_pois.filter);
					Navigo2.emitById('map:save_last_pois_paging', event.memo.id, last_pois.pagingFilter);
					if(last_pois.layer == 'poi-1') {
						Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 0.8);
					}
        }
		Navigo2.emitById('map:route', event.memo.id);
		Navigo2.emitById('menu:switch', event.memo.id, 2);
		Navigo2.emitById('map:setCurrentPanel', event.memo.id, 'pois');
	});

	/**
	 * ???
	 */
	Event.observe(document, 'pois:locate', function(event) 
	{
		if(!isNaN(event.memo.args[1]) && event.memo.args[2] != undefined) {
			Navigo2.DAO.findAddress(event.memo.args[0], event.memo.args[1], event.memo.args[2], function(data) 
			{
				if(data.address) {
					Navigo2.info(false);
					panel.address.value = data.address.address_full;
	
					Navigo2.emitById("map:POIs", event.memo.id, [[data.x92, data.y92, "0", 0, panel.address.value]]);
					var scale = event.memo.args[3] || -1;
					Navigo2.emitById("map:viewport", event.memo.id, [data.x92, data.y92], scale);
					Navigo2.emitById("map:home", event.memo.id, [data.x92, data.y92], scale);
				}
			})
		}
	});

    Event.observe(document, 'pois:locate', function(event)
	{
		if(!isNaN(event.memo.args[1]) && event.memo.args[2] != undefined) {
			Navigo2.DAO.findAddress(event.memo.args[0], event.memo.args[1], event.memo.args[2], function(data)
			{
				if(data.address) {
					Navigo2.info(false);
					panel.address.value = data.address.address_full;

					Navigo2.emitById("map:POIs", event.memo.id, [[data.x92, data.y92, "0", 0, panel.address.value]]);
					var scale = event.memo.args[3] || -1;
					Navigo2.emitById("map:viewport", event.memo.id, [data.x92, data.y92], scale);
					Navigo2.emitById("map:home", event.memo.id, [data.x92, data.y92], scale);
				}
			})
		}
	});
	
	/**
	 * Handler wywolywany w momencie zmiany skali na mapie
	 * (gdy zachodzi potrzeba dociagniecia niewyswietlanych dotad punnktow poi)
	 */
	Event.observe(document, "pois:saveRadius", function(/*Event*/event) {
		
		last_radius = event.memo.args[0];

        if(panel.radius != undefined && last_radius != undefined) {
            panel.radius.each(function(rad) {
				if(last_radius == rad.value) {
					rad.checked = true;
                } else {
                    rad.checked = false;
                }
			});
        }

	});

	/**
	 * Zmiana numeracji punktu POI
	 */
	Event.observe(document, 'flash:poiRenumber', function(event) {
		//alert('flash:poiRenumber');
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'flash:center', function(event) {
		Navigo2.emitById('map:home', event.memo.id);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'pois:poiMove', function(event) {
		Navigo2.emitById('pois:locate', event.memo.id, 'start', 0, event.memo.args[3], -1);
	});

    function GetRealTopOffset(elem) {

            var topOffset = elem.offsetTop;
            var parent = elem.offsetParent;

            while(parent != document.body) {


                if(parent != null) {
                    topOffset += parent.offsetTop;
                    parent = parent.offsetParent;
                }
                else
                {
                    break;
                }
            }

            return topOffset;
    }
	
	/**
	 * ???
	 */
	Event.observe(document, 'flash:poiMouseOver', function(event) {
		var poi_id = event.memo.args[2];
		if($('iPoisMultiresultItem_'+poi_id) != undefined) {
			$('iPoisMultiresultItem_'+poi_id).removeClassName("cPoisMultiresultItem");
            $('iPoisMultiresultItem_'+poi_id).addClassName("cPoisMultiresultItem_sel");
			var cbox = $('iPoisMultiresultItem_'+poi_id);
			scroller.makeVisibleYPart(GetRealTopOffset(cbox)-GetRealTopOffset(cbox.parentNode),cbox.offsetHeight);
		}
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'flash:poiMouseOut', function(event) {
		var poi_id = event.memo.args[2];
		if($('iPoisMultiresultItem_'+poi_id)!=undefined) {
			//console.log('flash:poiMouseOut, poi id: ' + event.memo.args[1]);
			$('iPoisMultiresultItem_'+poi_id).removeClassName("cPoisMultiresultItem_sel");
            $('iPoisMultiresultItem_'+poi_id).addClassName("cPoisMultiresultItem");
		}
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'flash:treeNodeViewSelected', function(event) {
        if(event.memo.args[1] != undefined) {
            Navigo2.emitById('map:poisSearchWithScale', event.memo.args[event.memo.args.length-1], undefined, event.memo.args[1], 0, true, false);
        } else {
            Navigo2.emitById('map:setDefaultView', event.memo.args[event.memo.args.length-1]);
        }
		//Navigo2.emitById('pois:findByExtId', event.memo.args[event.memo.args.length-1], undefined, event.memo.args[1], 0, true, true);
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'flash:newAddress', function(event) {
		Navigo2.emitById('pois:locate', event.memo.id, 'start', 0, event.memo.args[1], -1);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'map:ready', function(event) 
	{
		if($(panel.id) == $(panel)) {
            events.menu['menu1'].description = Navigo2.DAO.getMessage('javascript.menu.item.findAddress');
			Navigo2.emitById('map:flash', event.memo.id, geometry, events);
		}
	});
	
	Event.observe(document, 'pois:list_item_mouse_over', function(event) {
		var poi_id = event.memo.args[0];
		Navigo2.emitById('map:simulate_poi_mouse_over', mvaID, 'poi-s', poi_id);	
	});
	
	Event.observe(document, 'pois:list_item_mouse_out', function(event) {
		var poi_id = event.memo.args[0];
		Navigo2.emitById('map:simulate_poi_mouse_out', mvaID, 'poi-s', poi_id);	
	});
	
	Event.observe(document, 'pois:list_item_mouse_click', function(event) {
		var poi_id = event.memo.args[0];
		Navigo2.emitById('map:simulate_poi_mouse_click', mvaID, 'poi-s', poi_id);
	});
	
	Event.observe(document, 'pois:center_on_poi', function(event) {
		var poi_id = event.memo.args[0];
		Navigo2.emitById('map:center_to_poi', mvaID, 'poi-s', poi_id); 
	});
	
	Event.observe(document, 'pois:send_poi_in_email', function(event) {
		//alert('email');
		var poi_id = event.memo.args[0];
		Navigo2.emitById('map:pois_mailto', mvaID, poi_id);
	});
	
	Event.observe(document, 'pois:findByExtId', function(/*Event*/event) {
		var extId = event.memo.args[0];
		var extCategories = event.memo.args[1];
		var flag = event.memo.args[2];
		var showOnMap = event.memo.args[3];
		var zoomMap = event.memo.args[4];
		var callback = event.memo.args[5];
        var scale = event.memo.args[6];
        var bbox = event.memo.args[7];
		Navigo2.info("javascript.info.dataReading");
		Navigo2.emitById('map:clear_last_pois', event.memo.id);        
		Navigo2.DAO.findPoisByExtId(extId, extCategories, flag, scale, bbox, function(data) {
			Navigo2.info(false);
			if(data.pois != undefined) {
				Navigo2.emitById('map:save_last_pois_by_ext', event.memo.id, event);
				if(zoomMap) {
					if(data.pois.length == 1) {
						var scale = 9;
						if(data.pois[0].visibility.from>=scale) {
							scale = data.pois[0].visibility.from;
						}
						if(data.pois[0].visibility.to<=scale) {
							scale = data.pois[0].visibility.to;
						}
						Navigo2.emitById('map:viewport', event.memo.id, [data.bbox[0], data.bbox[2]], scale);
	        		}
					else {
						var bbox = data.bbox;
						Navigo2.emitById('map:boundBox', event.memo.id, {	left:bbox[0],
			    		    					right:bbox[1],
			        							top:bbox[2],
			        							bottom:bbox[3]});
					}
				}
				if(showOnMap) {
					//Navigo2.emit('map:request_pois_updates', 'poi-1', 2.0, 1.75);
					//Navigo2.emit('map:flash',{ layer: 'poi-1', points: true,	hist: false, radius: false });
					//Navigo2.emit('pois:present', { poisDetails: data });

					Navigo2.emitById('map:setPOIs', event.memo.id, data.pois, 'poi-1');
					Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 1.0, 0.8);
				}
			}
			else {
				Navigo2.emitById('map:setPOIs', event.memo.id, [], 'poi-1');
			}
			if(callback!=undefined) {
				callback.apply(this, [data]);
			}
		});
	});
	
	/**
	 * @Deprecated nowa metoda to pois:search
	 */
	Event.observe(document, 'pois:findPois', function(/*Event*/event) {
		var token = event.memo.args[0];
		var categories = event.memo.args[1];
		var selectsIds = event.memo.args[2];
		var defaultValue = event.memo.args[3];
		var flag = event.memo.args[4];
		var callback = event.memo.args[5];
      
		Navigo2.DAO.findPois(token, categories, flag, undefined, undefined, function(data) {
			if(data.pois != undefined) {
				last_pois = data.pois;
				Navigo2.emitById('map:save_last_pois', event.memo.id, event);
				if(selectsIds != undefined) {
					$H(selectsIds).each(function(pair) {
						var t = new Template(pair.value.normal);
						var ts = new Template(pair.value.selected);
						var html = '';
						data.pois.each(function(poi, index) {
							if(defaultValue!=null && defaultValue == poi.id) {
								html = html + ts.evaluate(poi);
							}
							else {
								html = html + t.evaluate(poi);
							}
						});
						$(pair.key).update(html);
					});
				
				}
			}
			if(callback!=undefined) {
				callback.apply(this, [data]);
			}
			//Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 1.75);
		});
	});
	
	Event.observe(document, 'pois:getById', function(/*Event*/event) {
		var id = defaultPoiId;
		var showPoi = event.memo.args[0];
		if(event.memo.args[1]!=undefined) {
			id = event.memo.args[1];
		}
		var callback = event.memo.args[2];
		var params = poiDataSchema;
		Navigo2.DAO.getPoi(id, function(data) {
			var bbox = data.bbox;
			var poi = data.pois[0];
			if (poi.address.zipCode != undefined && poi.address.zipCode.length > 0) {                                                  
				poi.address.zipCode = poi.address.zipCode + " ";                                                               
			}   
			if(showPoi) {
				var tooltip_brief_tmpl = new Template(tooltip_brief_body);
				var tooltip_detailed_tmpl = new Template(tooltip_detailed_body);
				Navigo2.emitById("map:setPOIs", event.memo.id, data.pois, 'poi-s');
				// Po kliknieciu na link ma sie ustawiac zapisana pozycja mapy.
				// W pozostaluch przypadkach ma sie ustawiac zblizenie na POI.
				var qry = document.location.href.replace("#", "").toQueryParams();
				if (!qry.location) {
					Navigo2.emitById('map:viewport', event.memo.id, [poi.x, poi.y], 7000);
				}	
				$H(params).each(function(pair) {
					if($(pair.key) != null){
                        var template = new Template(pair.value);
                        $(pair.key).update(template.evaluate(poi));
                    }
				});
			}
			if(callback!=undefined) {
				callback.apply(this, [poi]);
			}
		});	
	});
	
	/**
	 * Ogolna metoda wyszukujaca punkty POI, wyszukuje po tych kryteriach, ktore sa podane
	 * 
	 * atrybuty:
	 *  args[0] - filter - obiekt JSON z parametrami {
	 *		keyword - slowo kluczowe, szukane w nazwie punktu (ew moze w nazwie kategorii, do sprawdzenia)
	 *		id - id punktu 
	 *		categories - lista id kategorii (np: '3,4,128')
	 *  	extIds - lista zewnetrznych id (np: '3gshdj,SD4,1DF2a8') 
	 *		extCategories - lista zewnetrznych id (np: '3gshdj,SD4,1DF2a8')
	 *		flag - flaga 
	 *		addr - obiekt JSON zawierajacy wspolrzedne adresu wokol ktorego maja byc szukane punkty {x, y, sys}
	 *  } 
	 *  args[1] - pagingFilter - obiekt JSON z parametrami stronnicowania { page, perPage }
	 *  args[2] - showOnMap - flaga decydujaca czy punkty maja byc pokazane na mapie (true - tak, false - nie)
	 *  args[3] - zoomMap - flaga decydujaca czy na mapie ma byc zrobiony automatyczny zoom (true - tak, false - nie)
	 *  args[4] - showList - flaga decydujaca czy ma sie wyswietlic lista ze znalezionymi punktami w elementci ehtml o clasie .pagination_boty
	 *  args[5] - typ jaki zostanie przekazyany kontrolce flash np 'poi-r', 'poi-s', 'poi-1'
	 *  args[6] - scale - skala
	 *  args[7] - bbox - bounding box [left, top, right, bottom]
	 *  args[args.length-1] - callback - funkcja, ktora zostanie wywolana po znalezieniu punktow, jako argument zostanie przekazany JSON { pois, bbox }
	 */
	Event.observe(document, 'pois:search', function(/*Event*/event) {
		var filter = event.memo.args[0];
		var pagingFilter = event.memo.args[1];
		var showOnMap = event.memo.args[2];
		var zoomMap = event.memo.args[3];
		var showList = event.memo.args[4];
		var layer = event.memo.args[5];
		var scale = event.memo.args[6];
		var bbox = event.memo.args[7];
		var callback = event.memo.args[8];
		
			
		if(filter == undefined) {
			filter = defPoisFilter;
		}
			
		Navigo2.info("javascript.info.dataReading");
		Navigo2.emitById('map:clear_last_pois', event.memo.id);
		//Navigo2.emitById('map:cancel_pois_updates', event.memo.id, 'poi-1');
		Navigo2.DAO.searchPOIs( filter, pagingFilter, scale, bbox, function(data) {
			Navigo2.info(false);
			if(data.pois != undefined) {
                if(showOnMap) {
					if(zoomMap) {
						if(data.pois.length == 1 && filter.addr == undefined) {
							var scale = 9;
							if(data.pois[0].visibility.from>=scale) {
								scale = data.pois[0].visibility.from;
							}
							if(data.pois[0].visibility.to<=scale) {
								scale = data.pois[0].visibility.to;
							}
							Navigo2.emitById('map:viewport', event.memo.id, [data.bbox[0], data.bbox[2]], scale);
		        		}
						else {
							var bbox = data.bbox;
							Navigo2.emitById('map:boundBox', event.memo.id, {	left:bbox[0],
				    		    					right:bbox[1],
				        							top:bbox[2],
				        							bottom:bbox[3]});
						}
					}
					Navigo2.emitById('map:setPOIs', event.memo.id, data.pois, layer);
					if(layer == 'poi-1') {
						Navigo2.emitById('map:save_last_pois_search', event.memo.id, filter);
						Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 0.8);
					}
                    if(filter.type != undefined && filter.type == 'findPoisNearTo') {
                        last_pois = { pois: data.pois,
                                      layer: layer,
                                      zoomMap : zoomMap,
                                      bbox : data.bbox,
                                      pagingFilter : pagingFilter,
                                      filter : filter
                                      };
                    }
				}
				if(showList) {
					Navigo2.info(false);
					Navigo2.emitById('map:save_last_pois_paging', event.memo.id, pagingFilter);
					var body = panel.poisList.select('.pagination_body')[0];
					var tmpl = "<div id=\"iPoisMultiresultItem_#{id}\" class=\"cPoisMultiresultItem\"" + 
								"onclick=\"return Navigo2.emit('pois:list_item_mouse_click', #{id});\"" +
								"onMouseOver=\"return Navigo2.emit('pois:list_item_mouse_over', #{id});\"" + 
								"onMouseOut=\"return Navigo2.emit('pois:list_item_mouse_out', #{id});\">" +
									"<span class=\"cPoisMultiresultItem_NAME\" style=\"float: left;\"><b>#{info.name}</b></span><br style='clear : both' />" +
									"<span class=\"cPoisMultiresultItem_ADDRESS\" style=\"float: left;\">#{address.city}, #{address.street}, #{address.no}</span ><br style='clear : both' />" +
									"<span class=\"cPoisMultiresultItem_BUTTONS\" style=\"float: left;\">" +
										"<a class=\"cShowOnMapButton\" href=\"\" onclick=\"return Navigo2.emit('pois:center_on_poi', #{id});\">pokaz na mapie</a>" + 
									"</span><br style='clear : both'/>" +
								"</div>";
					scroller = new Navigo2.ResultsBoxScroller(body);
					var pageCurrent = 0;
					if(pagingFilter!=undefined) {
						pageCurrent = pagingFilter.page-1;
					}
					Navigo2.Pagination.decorate(panel.poisList, data.pois, 
					{ 
						pageSize: poisPerPage,
						pageCurrent: pageCurrent,
						template: tmpl,
						filtered: {},
						filter: filter,
						mvaId: event.memo.id
					});
					panel.poisList.show();
					Navigo2.emitById("map:panelBoxResize", event.memo.id);
					body.style.visibility = 'visible';
					
					var count = data.total;
					//panel.list.update(Navigo2.unescape(data.hints));
					panel.info.select("span[elementType='count']")[0].update(' ' + count + ' ');
					//panel.multi[count > 1 ? "show" : "hide"]();
				}
			}
			else {
                if(filter.type != undefined && filter.type == 'tree_category') {
                    Navigo2.info('javascript.warning.tree.category.poiNotFound');
                } else {
                    Navigo2.info('javascript.warning.poiNotFound');
                }
				if(panel.poisList!=undefined) {
					panel.poisList.hide();
				}
				Navigo2.emitById('map:setPOIs', event.memo.id, [], layer);
				geometry.POIs = [];
				Navigo2.emitById('map:save_last_pois_paging', event.memo.id, pagingFilter);
				if(layer == 'poi-1') {
					Navigo2.emitById('map:save_last_pois_search', event.memo.id, filter);
					Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 0.8);
				}
                last_pois = undefined;
			}
			/*if(layer != 'poi-1') {
				
			}*/
			if(callback!=undefined) {
				callback.apply(this, [data]);
			}
		});
		
	});
	
	/**
	 * Pokazanie poi
	 * Zdarzenie klikniecia na panelu przycisku 'Pokaz punkty poi'
	 */
	Event.observe(document, 'pois:findPoisNearTo', function(/*Event*/event) {
		if(validAddressFields()) {
			var objectId = (panel.addressId != undefined && panel.addressId.value != undefined) ? panel.addressId.value : 0;
			var addr = (event.memo.args[1] != undefined) ? event.memo.args[1] : panel.address.value;
			var token = (panel.token != undefined ) ? panel.token.value : undefined;
			var category = (panel.category != undefined) ? panel.category.value : undefined;
			if(addr != undefined && addr != '') {
				Navigo2.info("javascript.info.addressSearch");
				Navigo2.DAO.getAddressData(addr, objectId, event.memo.id, function(data) {
					if(data.address) {
						Navigo2.info(false);
											
						panel.hint.data = data.address.hints2;
                        panel.hint["show"]();
						
						last_addr = data.address;
                        events.menu['menu1'].description = Navigo2.DAO.getMessage('javascript.menu.item.findAddress');
						Navigo2.emitById('map:flash', event.memo.id, geometry, events);
						Navigo2.emitById("map:POIs", event.memo.id, [[last_addr.x92, last_addr.y92, "-2", -2, last_addr.full]], 'poi-r');
						var radius = 5000;
						panel.radius.each(function(rad) {
							if(rad.checked) {
								radius = rad.value;
                                last_radius = radius;
							}
						});
						var address = {x:last_addr.x92, y:last_addr.y92, sys: 'S92', radius: radius};
						var filter = {
                                type : 'findPoisNearTo',
								addr : address,
								categories : category
						};
						var pagingFilter = {
								page: 1,
								perPage: poisPerPage
						};
						Navigo2.emitById("map:panelBoxResize", event.memo.id);
						Navigo2.emitById('pois:search', event.memo.id, filter, pagingFilter, true, true, true, 'poi-s');
						Navigo2.emitById('map:setCurrentSearch', event.memo.id, category, radius); 
					}
					if(data.message.length > 0) {
						Navigo2.warning(data.message);
					}
				});
			}
			else {
				var filter = {
						categories : category
				};
				Navigo2.emitById('map:POIs', event.memo.id, []);
				Navigo2.emitById('pois:search', event.memo.id, filter, undefined, true, true, true, 'poi-s');
				Navigo2.emitById('map:setCurrentSearch', event.memo.id, category); 
			}
		} else {
			Navigo2.warning("javascript.warning.fillNecessaryFields");
		}
	});	
}

