
/**
 * ???
 */
Navigo2.UI.Address = function(/*HTMLElement*/element) 
{
	var panel = $(element).cloneNode(false);

	var	geometry = { layer: ['poi-r'], points: true,	hist: false, radius: false, POIs: {} };
	
	var last_addr = undefined;

	var events = {
		simple: {
			'mva_center': { event: 'flash:center' },
			'tree_node_selected': { event: 'flash:treeNodeViewSelected'},
			'pm_poi_move': { event: 'address:poiMove' }
			//'pm_update_cb':{event:'flash:refresh'}
		},
		menu: {
			'menu1': { event: 'address:newAddress', layer: 'poi-r', description: 'Pokaz adres' }		
		},
		point: {
		},
		pois: {event:'flash:refresh'}
	};

	/**
	 * ???
	 */
	var validAddressFields = function() 
	{
		if(panel.address.value == "") {
			panel.address.addClassName("error");
			return false;
		} else {
			panel.address.removeClassName("error");
			return true;
		}
	}

	/**
	 * ???
	 */
	Event.observe(document, 'address:show', function(event) 
	{
		if(!panel.initialised) {
			Navigo2.DAO.getComponent("component.address", function(html) {
				panel.update(html);
				panel.address = panel.select("input[elementType='address']")[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 
				});
				panel.address.observe("keypress", function(e) {
					if(e.which == Event.KEY_RETURN) Navigo2.emitById("address:search", event.memo.id);
				});
				panel.info = panel.select("span[sectionType='info']")[0];
				panel.list = panel.select("div[sectionType='list']")[0];
				panel.multi = panel.select("div[panelType='multiresult']")[0];
				panel.initialised = true;
			});
		}

		$(panel.id).replace(panel.show());
		Navigo2.emitById("address:visible", event.memo.id);
		//Navigo2.emitById('map:cancel_pois_updates', event.memo.id, 'poi-1');
		Navigo2.emitById('map:route', event.memo.id);
		Navigo2.emitById('menu:switch', event.memo.id, 1);
	});

	Event.observe(document, 'address:visible', function(event) 
	{
		var qry = document.location.href.replace("#", "").toQueryParams();
		if(qry.location) {
			qry = Navigo2.decode64(qry.location).toQueryParams();		

			geometry.coords = [qry.x, qry.y];
			geometry.scale = qry.s;
			geometry.cover = qry.l;

			var poiX = Object.isArray(qry.px) ? qry.px : [qry.px].compact();
			var poiY = Object.isArray(qry.py) ? qry.py : [qry.py].compact();
			var poiA = Object.isArray(qry.pa) ? qry.pa : [qry.pa].compact();

			if(poiA.length > 0) {
				if(poiX.length > 0 && poiY.length > 0) {				
					geometry.POIs = [[poiX[0], poiY[0], "0", 0, poiA[0]]];
				}
				if (panel.address) {
					panel.address.value = poiA;
				}	
			}

			if(qry.oid != undefined && qry.oid.length > 0) {
				geometry.objectData = {
					objectId: qry.oid,
					address: poiA[0]
				}
			}
			
			if(qry.routeAddress != undefined && qry.routeAddress.length > 0) {

				Navigo2.emitById('route:show', event.memo.id);
				Navigo2.emitById('route:reload', event.memo.id, qry.routeAddress, qry.routeType);
			}

			if(qry.ex == "true") Navigo2.toggleMap();
		
		} else {
			geometry.cover = "3";
		}

		Navigo2.emitById('map:flash', event.memo.id, geometry, events);
	});	
	
	/**
	 * ???
	 */
	Event.observe(document, 'address:search', function(event)
	{	
		if(validAddressFields()) {
			var objectId = (event.memo.args[0] != undefined) ? event.memo.args[0] : 0;
			var addr = (event.memo.args[1] != undefined) ? event.memo.args[1] : panel.address.value;
			Navigo2.info("javascript.info.addressSearch");
			Navigo2.DAO.getAddressData(addr, objectId, function(data)
			{
				if(data.address) {
					Navigo2.info(false);

					/*	
					panel.hint.data = data.address.hints;
					panel.hint[data.address.count > 1 ? "show" : "hide"]();
					panel.address.value = data.address.full;
					*/
					
					var count = data.address.count;
					panel.list.update(Navigo2.unescape(data.address.hints));
					panel.info.select("span[elementType='count']")[0].update(' ' + count + ' ');
					panel.multi[count > 1 ? "show" : "hide"]();
					
					last_addr = data.address;

					//Navigo2.emitById("map:POIs", event.memo.id, [[last_addr.x92, last_addr.y92, "-2", -2, last_addr.full, undefined, undefined, undefined, Navigo2.normalisedURL('image/address.gif')]], 'poi-r');
					Navigo2.emitById("map:POIs", event.memo.id, [[last_addr.x92, last_addr.y92, "-2", -2, last_addr.full]], 'poi-r');
					if(last_addr.xMin != "") {
						Navigo2.emitById("map:boundBox", event.memo.id, {left: last_addr.xMin, right: last_addr.xMax, top: last_addr.yMin, bottom: last_addr.yMax});
					} else {
						Navigo2.emitById("map:viewport", event.memo.id, [last_addr.x92, last_addr.y92], 1);
					}
					Navigo2.emitById("map:home", event.memo.id, [last_addr.x92, last_addr.y92], undefined);

					if(data.address.level == "street") {
						Navigo2.emit("map:street", data.address.objectId);
					}
					//Navigo2.emitById('map:cancel_pois_updates', event.memo.id, 'poi-1');
					Navigo2.emitById('map:refresh_global_pois', event.memo.id);
				}
				if(data.message.length > 0) {
					Navigo2.warning(data.message);
				}
			});
		} else {
			Navigo2.warning("Wypełnij niezbędne pola");
		}
	});

	/**
	 * ???
	 */
	Event.observe(document, 'address: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]]);
					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 momenci zmiany skali na mapie
	 * (gdy zachodzi potrzeba dociagniecia niewyswietlanych dotad punnktow poi)
	 */
	Event.observe(document, "flash:refresh", function(/*Event*/event) {
		var flash_id = event.memo.args[event.memo.args.length-1];
		if(event.memo.id != undefined ) {
			flash_id = event.memo.id;
		}
		if(last_addr != undefined) {
			Navigo2.emitById('map:refresh', flash_id, event, last_addr);
		}
	});

	/**
	 * ???
	 */
	Event.observe(document, 'flash:center', function(event) {
		Navigo2.emitById('map:home', event.memo.id);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'address:poiMove', function(event) {
		var type = event.memo.args[1];
		var num = event.memo.args[2];
		var coords = event.memo.args[3];
		var type = 'start';
		Navigo2.emitById("address:locate", event.memo.id, type, num, coords, undefined);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'address:newAddress', function(event) {
		var flash_id = event.memo.args[event.memo.args.length-1];
		if(event.memo.id != undefined ) {
			flash_id = event.memo.id;
		}
		Navigo2.emitById('address:locate', flash_id, 'start', -2, event.memo.args[1], -1);
	});

	/**
	 * ???
	 */
	Event.observe(document, 'map:ready', function(event) 
	{
		if($(panel.id) == $(panel)) {
			Navigo2.emitById('map:flash', event.memo.id, geometry, events);
		}
	});
	
	/**
	 * Pokazanie poi
	 * Zdarzenie klikniecia na panelu przycisku 'Pokaz punkty poi'
	 */
/*Event.observe(document, 'pois:show', function(event) {
		Navigo2.emitById('map:show_pois', event.memo.id, event,last_addr);
		Navigo2.emitById('map:request_pois_updates', event.memo.id, 'poi-1', 2.0, 1.75);
	});*/
}

