
/**
 * ???
 */
Navigo2.UI.Nearestpoi = function(/*HTMLElement*/element) 
{
	if(element!=undefined) {
		var panel = $(element).cloneNode(false);
	}
	else {
		var panel = {};
	}
	var defaultPoiId = undefined;
	var	geometry = { layer: ['poi-r','poi-s'], points: true,	hist: false, radius: false, POIs: {} };
	var last_addr = undefined;
	
	var defaultPoiId = undefined;
	this.setDefaultPoiId = function(id) {
		defaultPoiId = id;
	}
	
	var poiDataSchema = {};
	this.setPoiDataSchema = function(schema) {
		poiDataSchema = schema;
	}

    var last_poi = undefined;

	// Oznacza adres przekazany w linku
	//var addresInLink = undefined;
	
	var events = {
		simple: {
			'mva_center': { event: 'flash:center' },
			'pm_poi_move': { event: 'flash:poiMove' },
            'tree_node_selected': { event: 'flash:treeNodeViewSelected'}
			//'pm_update_cb':{event:'flash:refresh'}
		},
		menu: {
			'menu1': { event: 'nearestpoi:newAddress', layer: 'poi-r', description: 'Pokaż adres' }		
		},
		point: {
		},
		pois: {event:'flash:refresh'}
	};

	/**
	 * Handler wywolywany w momencie zmiany skali na mapie
	 * (gdy zachodzi potrzeba dociagniecia niewyswietlanych dotad punnktow poi)
	 */
	Event.observe(document, "nearestpoi:flashRefresh", function(/*Event*/event) {
		if(last_addr != undefined) {
            var trueEvent = event.memo.args[0];
			Navigo2.emitById('map:refresh', event.memo.id, trueEvent, last_addr, 0, 0);
		}
	});

	/**
	 * ???
	 */
	var validAddressFields = function() 
	{
		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 najblizszego punktu po kliknieciu na link
	 */
	Event.observe(document, 'nearestpoi:reload', function(event) {
		var address = undefined;
		if (event.memo.args[0] != undefined) {
			address = event.memo.args[0];
		}	
	
		Navigo2.emitById('nearestpoi:show', event.memo.id, address);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'nearestpoi:show', function(event) {
		if(!panel.initialised) {
			Navigo2.DAO.getComponent("component.nearestpoi", function(html) {
				panel.update(html);
				panel.address = panel.select("input[elementType='address']")[0];
				panel.addressId = panel.address.adjacent("input[elementType='addressId']")[0];
				panel.hint = panel.address.adjacent("input[hintType='address']")[0];
				panel.address.value = "";
				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("nearestpoi:search", event.memo.id);
				});
				if (event.memo.args[0] != undefined) {
					panel.address.value = event.memo.args[0];
					Navigo2.emitById('nearestpoi:search', event.memo.id);
				}
				panel.initialised = true;
			});
		}

		$(panel.id).replace(panel.show());

        if(last_poi != undefined) {
            Navigo2.emitById('map:clear_last_pois', event.memo.id);
            Navigo2.emit('map:save_last_addr_nearest', last_poi.last_addr);
            Navigo2.emitById('map:setPOIs', event.memo.id, last_poi.pois, 'poi-1');
            
            Navigo2.emitById('map:boundBox', event.memo.id, {	left:last_poi.bbox[0],
				    		    					right:last_poi.bbox[1],
				        							top:last_poi.bbox[2],
				        							bottom:last_poi.bbox[3]});
                                                
           Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 0.8);
           
        }
        events.menu['menu1'].description = Navigo2.DAO.getMessage('javascript.menu.item.findAddress');
        Navigo2.emit('map:flash', geometry, events);
		Navigo2.emitById('map:route', event.memo.id);
		Navigo2.emitById('menu:switch', event.memo.id, 3);
		Navigo2.emitById('map:setCurrentPanel', event.memo.id, 'nearestpoi');
	});

	/**
	 * ???
	 */
	/* 
	Event.observe(document, 'nearestpoi:visible', function(event) 
	{
		
		var qry = document.location.href.toQueryParams();
		if(qry.x && qry.y && qry.s) {
			geometry.coords = [qry.x, qry.y];
			geometry.scale = qry.s;

			var poiX = Object.isArray(qry.px) ? qry.px : [qry.px].compact();
			var poiY = Object.isArray(qry.py) ? qry.py : [qry.py].compact();
		
			if(poiX.length > 0 && poiY.length > 0) {				
				Navigo2.emit('nearestpoi:locate', 'start', 0, [poiX[0], poiY[0]], qry.s);
			}

			if(qry.ex == "true") Navigo2.toggleMap();
		}
		Navigo2.emit('map:flash', geometry, events);
	});	
	*/

	/**
	 * ???
	 */
	Event.observe(document, 'nearestpoi: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, "-2", -2, panel.address.value]], 'poi-r');
					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, "flash:refresh", function(/*Event*/event) {
		//if(last_addr != undefined) {
			//Navigo2.emit('map:refresh', event, last_addr, panel.token.value, panel.category.value);
		//}
	//});
	

	/**
	 * ???
	 */
	Event.observe(document, 'flash:center', function(event) {
		Navigo2.emitById('map:home', event.memo.id);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'flash:poiMove', function(event) {
		Navigo2.emitById('nearestpoi:locate', event.memo.id, 'start', 0, event.memo.args[3], -1);
	});
	
	/**
	 * ???
	 */
	Event.observe(document, 'nearestpoi:newAddress', function(event) {
		Navigo2.emitById('nearestpoi: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, 'nearestpoi: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 poi_select_template = new Template('<option value="#{id}">#{info.name}</option>\n');
		var poi_select_template_def_value = new Template('<option value="#{id}" selected="selected">#{info.name}</option>\n');
		Navigo2.DAO.findPois(token, categories, function(data) {
			var html = '';
			if(data.pois != undefined) {
				data.pois.each(function(poi, index) { 
					if(defaultValue!=null && defaultValue == poi.id) {
						html = html + poi_select_template_def_value.evaluate(poi);
					}
					else {
						html = html + poi_select_template.evaluate(poi);
					}
				});
			}
			if(selectsIds != undefined) {
				selectsIds.each(function(select) {
					$(select).innerHTML = html;
				});
			}
		});
	});
*/	
	var normalisedPoisStaticURL = function(path) {
		return 'http://navigo.becomo/pois-admin-upload' + path;
	}
	
//	Event.observe(document, 'nearestpoi:getById', function(/*Event*/event) {
/*		var id = defaultPoiId;
		var params = poiDataSchema;
		Navigo2.DAO.getPoi(id, function(data) {
			var bbox = data.bbox;
			var poi = data.pois[0];
			var tooltip_brief_tmpl = new Template(tooltip_brief_body);
			var tooltip_detailed_tmpl = new Template(tooltip_detailed_body);
			Navigo2.emit('map:flash',{ layer: 'poi-s', points: true,	hist: false, radius: false });
			Navigo2.emit('map:POIs', [[poi.x, poi.y, "0", 0, poi.info.name, tooltip_brief_tmpl.evaluate(poi), tooltip_detailed_tmpl.evaluate(poi), undefined, 'http://localhost:8080/ikea/files/ikea-gdansk-icon.png']]);
			Navigo2.emit('map:viewport', [poi.x, poi.y], 15000);
			$H(params).each(function(pair) {
				var template = new Template(pair.value);
				$(pair.key).innerHTML = template.evaluate(poi);
			});
		});
	});
*/

    Event.observe(document, 'nearestpoi:last_poi_save', function(/*Event*/event) {
        last_poi = event.memo.args[0];
    });
	/**
	 * Pokazanie poi
	 * Zdarzenie klikniecia na panelu przycisku 'Pokaz punkty poi'
	 */
	Event.observe(document, 'nearestpoi:search', 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.value;
			//var category = panel.category.value;
			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;
					Navigo2.emitById("map:POIs", event.memo.id, [[last_addr.x92, last_addr.y92, "-2", -2, last_addr.full]], 'poi-r');
					
					var address = {x:last_addr.x92, y:last_addr.y92, sys: 'S92', radius: undefined};
					var filter = {                               
							addr : address
					};
					var pagingFilter = {
							page: 1,
							perPage: 1
					};
					//geometry.layer = 'poi-s';
					Navigo2.emitById('pois:search', event.memo.id, filter, pagingFilter, true, true, false, 'poi-s');
				}
				if(data.message.length > 0) {
					Navigo2.warning(data.message);
				}
			});
		} else {
			Navigo2.warning("javascript.warning.fillNecessaryFields");
		}
	});
}

