﻿function PoiSearch(div, pTopoliszMap)
{
	this.div = div;
	this.pTopoliszMap = pTopoliszMap;
	
	this.pAddressSearch = new CAddressSearch(this.pTopoliszMap);
	this.pAddressSearch.SetDefaultText(g_Babel.GetWord('DefaultAddress'));
	
	this.pPOIAddressSearch = new CAddressSearch(this.pTopoliszMap);
	this.pPOIAddressSearch.SetDefaultText(g_Babel.GetWord('DefaultAddress'));
	
	this.iResultPerPages = 10;
	this.iVisiblePages = 5;
	
	this.OnShow = null;
	this.pPOIBOX = new POIBOX(null, pTopoliszMap,"searchtype");
	
	
	this.inputSearchPOIName = "";
	this.inputSearchPOIType = "";
	
	this.strNameDefaultText = g_Babel.GetWord('SearchByNameDefaultText');
	this.strTypeDefaultText = g_Babel.GetWord('SearchByTypeDefaultText');
	this.strPlaceDefaultText = g_Babel.GetWord('DefaultAddress');
	
	this.m_address = null;
	this.bZoomMode = false;
	
	this.pPoiTree = null;
	this.m_actPage = 1;
	this.bPagingHappens = false;
	
	var me = this;
	
	this.Init = function ()
	{
		this.pAddressSearch.OnOK = me.OnAddressSearchOK;
		this.pPOIAddressSearch.OnOK = me.OnPOIAddressSearchOK;
		
		g_Babel.AddListener(me.Show);
	}
		
	this.Show = function()
	{
		// *** address search
		
		while(me.div.hasChildNodes())
			me.div.removeChild(me.div.firstChild);			
		
		var panel = new Panel(me.div, null);
		panel.CreateCaption (g_Babel.GetWord('SearchAddress'), "design/ICON_home_off.gif", 15, 14);		
		
		var inputbox = new InputBox(me.div, null);
		inputbox.input.value = g_Babel.GetWord('DefaultAddress');

		var td = inputbox.AppendIconTd();
		var a = NewTag('a', td);
		new ImgLink(a, 22, 22, "design/BUTTON_delete_off.gif", "design/BUTTON_delete_on.gif", null, null, g_Babel.GetWord('hintDeleteAddress'), false);
		AddEvent(a,"click", me.ResetAddressSearch);

		var td = inputbox.AppendIconTd();
		var a = NewTag('a', td);
		new ImgLink(a, 22, 22, "design/BUTTON_display_off.gif", "design/BUTTON_display_on.gif", null, null, g_Babel.GetWord('hintShowAddress'), false);		
		AddEvent(a,"click", me.pAddressSearch.Go);

		me.pAddressSearch.SetInput(inputbox.input);
		me.pAddressSearch.SetDefaultText(g_Babel.GetWord('DefaultAddress'));	

		var div = NewTag('div', me.div);
		me.pAddressSearch.SetHintDiv(div);

		var okbuttdiv =  NewTag ("div", me.div);
		okbuttdiv.style.textAlign = "right";  
		var a = NewTag ("a", okbuttdiv);
		a.setAttribute('href', 'javascript:void(0)');
		a.className = 'UI_button_OK';
		AddEvent(a, "click",  me.pAddressSearch.Go);
		var img = NewTag('img', a);
		SetImage(img, GetAbsUrl("design/BUTTON_ok.gif"), 74, 28, "OK");

		// *** service search

		var panel = new Panel(me.div, null);
		panel.CreateCaption (g_Babel.GetWord('SearchService'), "design/ICON_info_off.gif", 15, 14);		
		
		me.strNameDefaultText = g_Babel.GetWord('SearchByNameDefaultText');
		me.strTypeDefaultText = g_Babel.GetWord('SearchByTypeDefaultText');
		me.strPlaceDefaultText = g_Babel.GetWord('DefaultAddress');
		
		// * service: name
		
		var table = NewTag('table', me.div);
		table.cellPadding = 0;
		table.cellSpacing = 0;
		table.style.width = '100%';
		var tbody = NewTag('tbody', table);

		var tr = NewTag('tr', tbody);

		var td = NewTag('td', tr)
		NewTextTag(g_Babel.GetWord('SearchByName') + ":", td);

		var td = NewTag('td', tr)
		td.colSpan = 2;
		var inputbox = new InputBox(td, null);
		inputbox.input.value = me.strNameDefaultText;
		me.inputSearchPOIName = inputbox.input;
		AddEvent(inputbox.input, "focus", me.OnServiceNameFocused);
		AddEvent(inputbox.input, "blur", me.OnServiceNameBlured);
		AddEvent(inputbox.input, "keypress", me.OnServiceNameKeyPressed);

		var td = inputbox.AppendIconTd();
		var a = NewTag('a', td);
		var ilDelName = new ImgLink(a, 22, 22, "design/BUTTON_delete_off.gif", "design/BUTTON_delete_on.gif", null, null, g_Babel.GetWord('hintDelete'), false);		
		AddEvent (ilDelName.imgButton.img, "click", me.ResetInputSearchPOIName);

		// * service: place
		var tr = NewTag('tr', tbody);

		var td = NewTag('td', tr)
		NewTextTag(g_Babel.GetWord('SearchByPlace') + ":", td);

		var td = NewTag('td', tr)
		td.colSpan = 2;
		var inputbox = new InputBox(td, null);
		inputbox.input.value = me.strPlaceDefaultText;
		me.pPOIAddressSearch.SetInput(inputbox.input);

		var div = NewTag('div', td);
		me.pPOIAddressSearch.SetHintDiv(div);

		var td = inputbox.AppendIconTd();
		var a = NewTag('a', td);
		var ilDelPlace = new ImgLink(a, 22, 22, "design/BUTTON_delete_off.gif", "design/BUTTON_delete_on.gif", null, null, g_Babel.GetWord('hintDelete'), false);
		AddEvent (ilDelPlace.imgButton.img, "click", me.ResetInputSearchPOIPlace);		


		// * service: type


		/*
		var tr = NewTag('tr', tbody);
		var td = NewTag('td', tr)
		NewTextTag(g_Babel.GetWord('SearchByType') + ":", td);

		var td = NewTag('td', tr)
		td.colSpan = 2;
		var inputbox = new InputBox(td, null);
		inputbox.input.value = me.strTypeDefaultText;
		me.inputSearchPOIType = inputbox.input;
		AddEvent(inputbox.input, "focus", me.OnServiceTypeFocused);
		AddEvent(inputbox.input, "blur", me.OnServiceTypeBlured);

		var td = inputbox.AppendIconTd();
		var a = NewTag('a', td);
		var ilDelType = new ImgLink(a, 22, 22, "design/BUTTON_delete_off.gif", "design/BUTTON_delete_on.gif", null, null, g_Babel.GetWord('hintDelete'), false);					
		AddEvent (ilDelType.imgButton.img, "click", me.ResetInputSearchPOIType);
		*/

		var tr = NewTag('tr', tbody);
		var td2 = NewTag('td', tr)
		NewTextTag(g_Babel.GetWord('SearchByType') + ":", td2);		
		var td = NewTag('td', tr)
		var divPoiType = NewTag ('div', td);
		td.colSpan = 2;
		me.FillTree(divPoiType);


		var tr = NewTag('tr', tbody);
		var td = NewTag('td', tr);
		NewTextTag('\u00a0', td);
		var td = NewTag('td', tr);

		var txtBtn = new TextButton(td);
		var img = txtBtn.CreateImage(14, 14, "design/icon_delete_off.gif", "design/icon_delete_on.gif", null, null, false);
		img.style.paddingRight = "8px";
		//img.style.paddingLeft =  "6px";
		//me.pLanguageSupporter.Add (img, "alt", "capNewSearch", "", "");
		var a = txtBtn.CreateText(g_Babel.GetWord('capNewSearch'));
		//me.pLanguageSupporter.Add (a, "innerHTML", "capNewSearch", "", "");
		txtBtn.OnClick = me.ResetSearch;

		var td = NewTag('td', tr);
		td.style.textAlign = "right";
		var submitdiv = td;

		var a = NewTag ("a", td);
		a.setAttribute('href', 'javascript:void(0)');
		a.className = 'UI_button_OK';
		AddEvent(a,"click", me.StartSearching);

		var img = NewTag('img', a);
		SetImage(img, GetAbsUrl("design/BUTTON_ok.gif"), 74, 28, "OK");

		var div = NewTag('div', me.div);
		me.pPOIBOX.SetDiv(div);
		me.pPOIBOX.Show();
	}
	
	this.OnServiceNameKeyPressed = function ()
	{
		var str = me.pPoiTree.GetCheckedIDsInStr();
		if(str == null || str.length < 1)
			me.pPoiTree.arrItems[0].SetChecked(true);
	}

	this.FillTree = function(div)
	{
		if(g_arrPoiTypes != null)
		{
			var arrTreeItems = new Array();
			//arrTreeItems[0] = new CTreeItem(0, g_Babel.GetWord('AllPoiTypes'), 0, false, false);
			var bAllPoisOnMap = true;
			for(var i=0; i<g_arrPoiTypes.length; i++)
			{
				var pType = g_arrPoiTypes[i];
				var label = g_Babel.GetWord("poi" + pType.iID);
				//if (label == "") label = "*" + pType.iID + " " + pType.strName;
				if(g_arrPoiTypes[i].iCount > 0)
						label += " (" + g_arrPoiTypes[i].iCount +")";
				arrTreeItems[arrTreeItems.length] = new CTreeItem(pType.iID, label/*pType.strName*/, pType.iLevel, pType.bOnMap, false, pType.bShowInTree);
				if(!pType.bOnMap)
					bAllPoisOnMap = false;
			}
			arrTreeItems[0].SetChecked(bAllPoisOnMap);
					
			me.pPoiTree = new CTree(div, arrTreeItems);
			me.pPoiTree.OnCheckChanged = function () {me.OnTreeCheckChanged()};
			me.pPoiTree.Show();
			me.pPoiTree.arrItems[0].Open();
			//me.pPoiTree.arrItems[0].SetChecked(true);
		}
	}	
	
	this.OnTreeCheckChanged = function ()
	{
	/*
		if (me.pTopoliszMap)
		{
			if (me.pTopoliszMap.SetPoiLayers)
			{
				if (me.bUnderPoiDrawing == false)
				{
					me.bUnderPoiDrawing = true;
					me.pTopoliszMap.SetPoiLayers (me.pPoiTree.GetCheckedIDsInStr());
					me.pTopoliszMap.DrawRoute ();
				}
				else
				{
					me.bResendNeeded = true;
				}
			}
		}
		*/
	}
	

	this.StartSearching = function ()
	{
		if ((me.pPOIAddressSearch.input.value == me.strPlaceDefaultText) && (me.inputSearchPOIName.value == me.strNameDefaultText))
		{
			me.bZoomMode = false;
			me.OnPOIAddressSearchOK();		// nem keres cimet, aktualis rectet hasznalja			
		}
		else
		{
			me.bZoomMode = true;
			if (me.pPOIAddressSearch.input.value == me.strPlaceDefaultText)
				me.pPOIAddressSearch.input.value = "Magyarország";
			me.pPOIAddressSearch.Go();		// cimet keres		
		}
	}
	
	
	this.OnServiceNameFocused = function ()
	{
		if (me.inputSearchPOIName.value == me.strNameDefaultText)
		{
			me.inputSearchPOIName.value = "";
		}
	}

	this.OnServiceNameBlured = function ()
	{
		if (me.inputSearchPOIName.value == "")
		{
			me.inputSearchPOIName.value = me.strNameDefaultText;
		}	
	}

	this.OnServiceTypeFocused = function ()
	{
		if (me.inputSearchPOIType.value == me.strTypeDefaultText)
		{
			me.inputSearchPOIType.value = "";
		}
	}
	
	this.OnServiceTypeBlured = function ()
	{
		if (me.inputSearchPOIType.value == "")
		{
			me.inputSearchPOIType.value = me.strTypeDefaultText;
		}	
	}
	
	this.ResetInputSearchPOIName = function ()
	{
		me.inputSearchPOIName.value = me.strNameDefaultText;
	}
	
	this.ResetInputSearchPOIType = function ()
	{
		me.inputSearchPOIType.value = me.strTypeDefaultText;
	}	
	
	this.ResetInputSearchPOIPlace = function ()
	{
		me.pPOIAddressSearch.input.value = me.strPlaceDefaultText;
	}
	
	this.ResetSearch = function ()
	{
		me.ResetInputSearchPOIName();
		me.ResetInputSearchPOIType();
		me.ResetInputSearchPOIPlace();
		me.pPOIBOX.Hide();
		
	    me.pTopoliszMap.pMarkers.DeleteAllWithType ("findpoi");
	    me.pTopoliszMap.RemovePinBoxes ("findpoi");
        if (g_TopoliszControls.pPOILAYERBOX)
            g_TopoliszControls.pPOILAYERBOX.DeselectPOI (); 	    
	    me.pTopoliszMap.RemovePinLabels ("findpoi");
	   // me.pTopoliszMap.bFixedLabel = false;
	    me.pPoiTree.Reset();
	    me.pPoiTree.arrItems[0].Open();
	    me.pPoiTree.arrItems[0].SetChecked(false);

	}
	
	// Address search methods

	this.ResetAddressSearch = function ()
	{
	    me.pAddressSearch.SetInputValue ("");
	    me.pTopoliszMap.pMarkers.DeleteAllWithType ("searching");
	    me.pTopoliszMap.RemovePinLabels ("searching");	
	}

	this.OnAddressSearchOK = function()
	{
		var address = me.pAddressSearch.GetAddress();
		if(address)
		{
			me.pTopoliszMap.OnNewFoundAddress (address, "searching");

			if ( address.dMinX > 0 && address.dMinY > 0 && address.dMaxX > 0 && address.dMaxY > 0
				&& address.dMinX != address.dMaxX && address.dMinY != address.dMaxY )
				me.pTopoliszMap.ZoomToRect(address.dMinX, address.dMinY, address.dMaxX, address.dMaxY);
			else if(address.dX > 0 && address.dY > 0)
				me.pTopoliszMap.ZoomToPoint(address.dX, address.dY, 250);	
		}
	}	
	
	// POI search methods
	
	this.OnPOISearchEnded = function (result)
	{
		// me.bPoiSearchingInProgress = false;

		me.pTopoliszMap.pMarkers.DeleteAllWithType ("findpoi");
		me.pTopoliszMap.RemovePinBoxes ("findpoi");
		if (g_TopoliszControls.pPOILAYERBOX)
			g_TopoliszControls.pPOILAYERBOX.DeselectPOI ();
		me.pTopoliszMap.RemovePinLabels ("findpoi");
	//  me.pTopoliszMap.bFixedLabel = false;

		me.pLastResults = result;

		var j;
		for (j = 0; j < Math.min(result.arrRecords.length, me.iResultPerPages); j++)
		{
			var record = result.arrRecords[j];
			var type = "findpoi";
			var dX = record.dX;
			var dY = record.dY;
			var arrNames = record.arrNames;
			var arrValues = record.arrValues;

			var marker = new Marker(me.pTopoliszMap, type, dX, dY, arrNames, arrValues);
			marker.SetProperty ("nTypeID", record.nTypeID);
			marker.SetProperty ("start_button", true);
			marker.SetProperty ("through_button", true);
			marker.SetProperty ("stop_button", true);
			marker.SetProperty ("panorama_button", me.pTopoliszMap.bLabelHasPanoramaButton);
			marker.SetProperty ("pinnumber", j+1);
			marker.SetProperty ("handle_details", true);
			marker.SetProperty ("pin_css_class", "markerRed");
			marker.SetProperty ("div_label_sign_class","marker");
			if(record.iImageID > 1)
			{
				marker.SetProperty ("pin_img_url", "?Command=GetImage&id=" + record.iImageID +"&appID=" + g_strAppID );
			}
			else
			{
				//marker.SetProperty ("pin_img_url", GetAbsUrl("images/mapctrl/marked_red.gif"));
				//marker.SetProperty ("pin_img_width", 16);
				//marker.SetProperty ("pin_img_height", 16);
			}
			if(record.iImageID > 1 || record.iListPriority > 0)
			{
				marker.SetProperty("label_css_classname", marker.GetProperty("label_css_classname") + " priority_label");
				marker.SetProperty("list_css_classname", marker.GetProperty("list_css_classname")+ " priority_label");
			}
			
			marker.SetProperty ("pin_img_refx", 0/*2*/);
			marker.SetProperty ("pin_img_refy", 9/*14*/);
			marker.SetProperty ("delete_marker_on_label_close", false);
			marker.SetProperty ("caption", arrValues[0]);
			marker.SetProperty ("show_coordinates", me.pTopoliszMap.bDisplayCoords);		
			marker.SetProperty ("label_dx", 0);
			marker.SetProperty ("label_dy", -9);

			var divDetails = NewTag("div");

			divDetails.innerHTML += g_Babel.GetWord("PoiType") + " = " + g_Babel.GetWord("poi"+record.nTypeID);
			
			var i = 1;
			for (i = 1; i < arrNames.length; i++)
			{
				var listPoiPropertyNames = ["Cím","Telefon", "Fax","Email","Web","Nyitva"];
				if (listPoiPropertyNames.indexOf(arrNames[i]) != -1)
					divDetails.innerHTML += "<br/>" + arrNames[i] + " = " + arrValues[i];
			}
			
			marker.SetProperty ("details_to_show", divDetails);
			marker.SetProperty("fix_label_on_click", true);   
			me.pTopoliszMap.pMarkers.Add (marker) ; // findpoi
			//
		}

		//var address = me.pPOIAddressSearch.GetAddress();
		var address = me.m_address;
		
		
			if (address)
			{
    			if ( address.dMinX > 0 && address.dMinY > 0 && address.dMaxX > 0 && address.dMaxY > 0
				&& address.dMinX != address.dMaxX && address.dMinY != address.dMaxY )
    				me.pTopoliszMap.ZoomToRect(address.dMinX, address.dMinY, address.dMaxX, address.dMaxY);
	    		else if(address.dX > 0 && address.dY > 0)
		    		me.pTopoliszMap.ZoomToPoint(address.dX, address.dY, 250);
			}							   
			else
				me.pTopoliszMap.ZoomToDefault ();
		    
		if (me.pPOIBOX.pPager != null)
		{
		    me.pPOIBOX.pPager.Clear ();
		    delete me.pPOIBOX.pPager;
		    me.pPOIBOX.pPager = null;
		}

		if (result.arrRecords.length == 0)
		{
		    me.pPOIBOX.WriteNoResultMessage();
		}
		else
		{		    
			var pPager = me.pPOIBOX.CreatePager (result.iFirst, result.iFirst + result.arrRecords.length - 1, result.bHasNextPage, me.iResultPerPages, me.iVisiblePages);
			pPager.OnPageChange = me.PagingHandler;
			pPager.OnNextPages = me.NextPageHandler;
			pPager.OnPreviousPages = me.PreviousPageHandler;				    
			me.pPOIBOX.Unhide();
		}
		window.setTimeout(function () { var divMap = GetBlock("idMap"); if(divMap) window.scrollTo(0,GetAbsLayerTop(divMap));}, 1000);
	}	
	
	this.OnPOIAddressSearchOK = function ()
	{
	
		var strParams = "strFilter=" + me.GetNameFilter() +
			            "&strType=" + "#" + me.GetType() + 
			            "&iFirst=" + 0 + 
			            "&iLast=" + (me.iResultPerPages * me.iVisiblePages);			            
			              
		
		if (me.bZoomMode == true)	              
		{
			address = me.pPOIAddressSearch.GetAddress();
		}
		else
		{
			address = new CAddress();
			address.dMinX=me.pTopoliszMap.arrStates[me.pTopoliszMap.iActiveState].dMinX;
			address.dMinY=me.pTopoliszMap.arrStates[me.pTopoliszMap.iActiveState].dMinY;
			address.dMaxX=me.pTopoliszMap.arrStates[me.pTopoliszMap.iActiveState].dMaxX;
			address.dMaxY=me.pTopoliszMap.arrStates[me.pTopoliszMap.iActiveState].dMaxY;
		}
		me.m_address = address;
		
//		if(address)
		{
			strParams += "&dMinX=" + address.dMinX + 
						 "&dMinY=" + address.dMinY + 
						 "&dMaxX=" + address.dMaxX + 
						 "&dMaxY=" + address.dMaxY;
			          
			if(me.OnShow)
			{
				try {
					me.OnShow(me, address);
				}
				catch(exp) {
					if(me.pTopoliszMap.OnError)
						me.pTopoliszMap.OnError(exp, '{PoiSearch.OnPOIAddressSearchOK');
				}
			}
		}
		
		//me.pPOIBOX.Clear ();	
		me.pTopoliszMap.NoSessionServer.CallFunction('SearchPoi', strParams, 0, me.OnPOISearchEnded);				
	}	
		
		
	this.PagingHandler = function (iPage)
	{
		if (me.bPagingHappens == true)
			return;
	
		me.m_actPage = iPage;
		me.pTopoliszMap.pMarkers.DeleteAllWithType ("findpoi");
		me.pTopoliszMap.RemovePinBoxes ("findpoi");
		me.pTopoliszMap.RemovePinLabels ("findpoi");
		if (g_TopoliszControls.pPOILAYERBOX)
			g_TopoliszControls.pPOILAYERBOX.DeselectPOI (); 	
		// me.pTopoliszMap.bFixedLabel = false;

		var iStartPageNumber = me.pPOIBOX.pPager.iStartPageNumber;

		var j;
		var iSer = 0;
		for (j = me.iResultPerPages * (iPage - iStartPageNumber); j < Math.min(me.pLastResults.arrRecords.length, me.iResultPerPages * (iPage - iStartPageNumber + 1)); j++)
		{
			var record = me.pLastResults.arrRecords[j];
			var dX = record.dX;
			var dY = record.dY;
			var arrNames = record.arrNames;
			var arrValues = record.arrValues;
			var type = "findpoi";
			var marker = new Marker(me.pTopoliszMap, type, dX, dY, arrNames, arrValues);

			marker.SetProperty ("start_button", true);
			marker.SetProperty ("through_button", true);
			marker.SetProperty ("stop_button", true);
			marker.SetProperty ("panorama_button", me.pTopoliszMap.bLabelHasPanoramaButton);
			marker.SetProperty ("pinnumber", /*j+1*/(iStartPageNumber-1) * me.iResultPerPages + j + 1);
			marker.SetProperty ("handle_details", true);
			marker.SetProperty ("pin_css_class", "markerRed");
			marker.SetProperty ("div_label_sign_class","marker");
			if(record.iImageID > 1)
			{
				marker.SetProperty ("pin_img_url", "?Command=GetImage&id=" + record.iImageID +"&appID=" + g_strAppID );
			}
			if(record.iImageID > 1 || record.iListPriority > 0)
			{
				marker.SetProperty("label_css_classname", marker.GetProperty("label_css_classname") + " priority_label");
				marker.SetProperty("list_css_classname", marker.GetProperty("list_css_classname")+ " priority_label");
			}

			marker.SetProperty ("delete_marker_on_label_close", false);
			marker.SetProperty ("caption", arrValues[0]);
			marker.SetProperty ("show_coordinates", me.pTopoliszMap.bDisplayCoords);
			marker.SetProperty ("label_dx", 0);
			marker.SetProperty ("label_dy", -9);
//
			var divDetails = NewTag("div");
			divDetails.innerHTML += g_Babel.GetWord("PoiType") + " = " + g_Babel.GetWord("poi"+record.nTypeID);
			var i = 1;
			for (i = 1; i < arrNames.length; i++)
			{
				var listPoiPropertyNames = ["Cím","Telefon","Fax","Email","Web","Nyitva"];
				if (listPoiPropertyNames.indexOf(arrNames[i]) != -1)
					divDetails.innerHTML += "<br/>" + arrNames[i] + " = " + arrValues[i];
			}
			marker.SetProperty ("details_to_show", divDetails);
//			

			me.pTopoliszMap.pMarkers.Add (marker) ;  // findpoi /paging/
			marker.SetProperty("fix_label_on_click", true);

            iSer++;
        }
   	
		//var address = me.pAddressSearch.GetAddress();
		var address = me.m_address;
		
		if (address)
		{
    		if ( address.dMinX > 0 && address.dMinY > 0 && address.dMaxX > 0 && address.dMaxY > 0
		    && address.dMinX != address.dMaxX && address.dMinY != address.dMaxY )
    			me.pTopoliszMap.ZoomToRect(address.dMinX, address.dMinY, address.dMaxX, address.dMaxY);
	    	else if(address.dX > 0 && address.dY > 0)
		    	me.pTopoliszMap.ZoomToPoint(address.dX, address.dY, 250);
		}							   
		else
		    me.pTopoliszMap.ZoomToDefault ();
		    
		me.pPOIBOX.pPager.m_actPageNum = me.m_actPage;
		me.pPOIBOX.pPager.Create ();
		
	}

	this.NextPageHandler = function ()
	{
		if (me.bPagingHappens == true)
		  return;
	    var iStartPageNumber = me.pPOIBOX.pPager.iStartPageNumber + 1;
	    
		var strParams = "strFilter=" + me.GetNameFilter() 
		              + "&strType=" + "#" + me.GetType()
		              + "&iFirst=" + (me.iResultPerPages * (iStartPageNumber-1)) + "&iLast=" + (me.iResultPerPages * (iStartPageNumber-1+me.iVisiblePages));
		              
		//var address = me.pAddressSearch.GetAddress();
		var address = me.m_address;
		
		if(address)
		{
			strParams += "&dMinX=" + address.dMinX + "&dMinY=" + address.dMinY
			           + "&dMaxX=" + address.dMaxX + "&dMaxY=" + address.dMaxY;
			           
		}
		
		me.pTopoliszMap.NoSessionServer.CallFunction('SearchPoi', strParams, address, me.OnPreviousOrNextPageEnded);
		me.m_actPage++;	
	}

	this.PreviousPageHandler = function ()
	{
		if (me.bPagingHappens == true)
		  return;
	
	    var iStartPageNumber = me.pPOIBOX.pPager.iStartPageNumber - 1;
	    
	    if (iStartPageNumber > 0)
	    {	    
		var strParams = "strFilter=" + me.GetNameFilter() 
		              + "&strType=" + "#" + me.GetType()
		              + "&iFirst=" + (me.iResultPerPages * (iStartPageNumber-1)) + "&iLast=" + (me.iResultPerPages * (iStartPageNumber-1+me.iVisiblePages));
		              
		    //var address = me.pAddressSearch.GetAddress();
		    var address = me.m_address;
    		
		    if(address)
		    {
			    strParams += "&dMinX=" + address.dMinX + "&dMinY=" + address.dMinY
			               + "&dMaxX=" + address.dMaxX + "&dMaxY=" + address.dMaxY;
		    }    		
		    me.pTopoliszMap.NoSessionServer.CallFunction('SearchPoi', strParams, address, me.OnPreviousOrNextPageEnded);	
	    }
	    me.m_actPage--;
	}
	
	this.OnPreviousOrNextPageEnded = function (result)
	{
		me.bPagingHappens = false;		  	
		me.pLastResults = result;

		me.pPOIBOX.pPager.Clear ();
		var iStartPageNumber = Math.floor(result.iFirst / me.iResultPerPages) + 1;
		var iEndPageNumber = Math.floor((result.iFirst + result.arrRecords.length) / me.iResultPerPages) + 1;
		var iPagesNumber = iEndPageNumber;
		if (result.bHasNextPage) iPagesNumber = iPagesNumber + 1;

		me.pPOIBOX.pPager.iStartPageNumber = iStartPageNumber;
		me.pPOIBOX.pPager.iPagesNumber = iPagesNumber;        
		me.pPOIBOX.pPager.Create ();    
		me.PagingHandler (me.m_actPage);
	}						
		
	this.SetPOIBOX = function (pPOIBOX)
	{
		me.pPOIBOX = pPOIBOX;
	}
	
	this.OnResetObjectSearch = function ()
	{
	    me.pTopoliszMap.RemovePinLabels ("findpoi");
	    me.Reset ();
	    me.pPOIBOX.ResetFindPoi ();
	    
	    //me.pTopoliszMap.DrawRoute ();
	}		
	
	this.OnStartObjectSearch = function ()
	{
		me.pPOIAddressSearch.Go();
	}
		
	this.OnKeyPress = function(pEvent)
	{
		if(pEvent == null)
			pEvent = window.event;
		if(pEvent.keyCode==13)
		{
			me.OnStartObjectSearch();
		}
	}
			
	this.GetNameFilter = function()
	{
		return me.GetInputText(me.inputSearchPOIName, me.strNameDefaultText);
	}
	
	this.GetType = function()
	{
		/*return me.GetInputText(me.inputSearchPOIType, me.strTypeDefaultText);*/
		if (me.pPoiTree.arrItems[0].IsChecked())
			return "0";
		else
			return me.pPoiTree.GetCheckedIDsInStr()
	}
	
	this.GetInputText = function(input, strDefaultText)
	{
		if(!input || input.value == strDefaultText)
			return "";
		return input.value;
	}				
			
	// GENERAL
		
	this.Hide = function()
	{
		Hide(me.div);
	}
	
	this.Unhide = function()
	{
		Show(me.div);
	}

	// constructor
	this.Init ();
}