// arbitary starting point

var centerLatitude = 53;
var centerLongitude = -1; 
var startZoom = 6;
var main_sw = 0;
var main_ne = 0;
var markerHash={}; 
var currentFocus=false;
var bounds;
var map2 = null;
var gmarkers = {};
var gclusters = {};
var tempMarkers = {};
var inDBresults = '';
var Enable_map = 1;
var Error = false;
var multi = false;
var inDB = false;
var type_up="m";
var map_div;
var search_str;
var onePlace = false;
var zoom = 0;
var free_mutex = true;
var MarkerId_PlaceId = [];

//-- global vars for setting map control size according to map size --
// large map control object
    var large_map_control2;
// small map control object 
    var small_map_control2; 
// height limit to change map control size
    var y2 = AppConfig['map']['map_height_limit_for_small_control']['multimap'];
// map control size-type = 'small' or 'large'
    var map_control_size2;
//----

function set_map_control_size2()
// changes type of map control according to map size
// small control when map height < y
// large control when map height >= y
// y is read from config.yml
{
	var zoom_container = document.getElementById('zoom_container');
    map_height = map2.getDimensions().height;
	//if (map_height < y2)
	if (false)//Spike for use only lage control size
        {
            if (map_control_size2 == 'large')
                {
									removeZoomW();
                    map2.removeWidget(large_map_control2); 
                    small_map_control2 = new MMSmallPanZoomWidget( new MMBox () );
					small_map_control2.setContainer(zoom_container);
                    map2.addWidget(small_map_control2);
                    map_control_size2 = 'small';
                }
        }
    else
        {
            if (map_control_size2 == 'small')
                {
										removeZoomW();
                    map2.removeWidget(small_map_control2);
                    large_map_control2 = new MMPanZoomWidget( new MMBox () );
					large_map_control2.setContainer(zoom_container);
                    map2.addWidget(large_map_control2);
                    map_control_size2 = 'large';
					var marg = document.getElementById('margin_zoom');
					marg.style.marginTop = '25px';	
                }
        }
}

function add_map_control2()
// adds map control of nedeed size according to map size
{
		var zoom_container = document.getElementById('zoom_container');
				if (map2.getDimensions().height < y2 && false)//Spike for use only lage control size
        {
					//var zoom_pos = new MMBox(7,0 , 0, 350);
					//small_map_control2 =  new MMSmallPanZoomWidget(zoom_pos);
					var small_map_control2 = new MMSmallPanZoomWidget( new MMBox () );
					small_map_control2.setContainer(zoom_container);
					map2.addWidget(small_map_control2);
					map_control_size2 = 'small';
        }
        else
        {
					//var zoom_pos = new MMBox(7,0 , 0, 350);
					//large_map_control2 =  new MMPanZoomWidget(zoom_pos);
					var large_map_control2 = new MMPanZoomWidget( new MMBox () );
					large_map_control2.setContainer(zoom_container);
					map2.addWidget(large_map_control2);
					map_control_size2 = 'large'; 
					var marg = document.getElementById('margin_zoom');
					marg.style.marginTop = '25px';				
        }
}

function removeZoomW()
{

	var parentNode = document.getElementById('zoom_container');
							var AllNodes = parentNode.getElementsByTagName('div');
	var len = AllNodes.length;
	var nod;
	for (var i =0; i < len; i++)
	{
		nod = AllNodes[i];
		if (nod.className == 'MMPanZoomWidget' || nod.className == 'AMMPanZoomWidget MMSmallPanZoomWidget')
		{
			parentNode.removeChild(nod);
			break;
		}
	}
}

function set_atom_visible(value)
								{   
    el = document.getElementById("atomfeed");
									if (el) {el.style.display = value;};
}
								
function addMarker2(lat, lng, name, description, partner, events,pic,ico,action,place_id,distance, distance_in_miles, nearest_places,map_provider,bubble_lang)

{

									var pos = new MMLocation(new MMLatLon( lat, lng ));
	var mk_ico = new MMIcon();
									mk_ico.iconSize = new MMDimensions( 32,32 );
	mk_ico.iconAnchor = new MMPoint( 16, 16 );//base_iconAnchor;   // may be incorrect
	if (nearest_places!='') 
		mk_ico.image = AppConfig['marker_icons']['close']; // "/images/marker-close.png";
	else 
		mk_ico.image = AppConfig['marker_icons']['single'];
	
	var marker = map2.createMarker( pos, name ,mk_ico );
									var picture_html = "";
	var dist_html = "";
	var placeHtml = "";
	var event_html = "";
	
	var js_version = ''
	if (map_provider == 2)
		js_version = '2'
	
        //generate icons html
	var ico_html = "<div class=\"b-icons\">";
        var icos = ''; 
        var count = 0;
        if (ico[9].status && ico[9] != 0)
             {
                icos +="<a href='/public/place_by_name/" + place_name_for_url(name) + "?id=" + place_id + "#vo' onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id +", " + name + ");\">" + '<img width="20" height="20" title="' + ico[9].title + '" alt="' + ico[9].title + '" src="/images/legend-ico-' + ico[9].name + '"/></a>';
                count +=1; 
             }
        if (ico[10].status && ico[10] != 0)
            {
                icos +="<a href='/public/place_by_name/" + place_name_for_url(name) + "?id=" + place_id + "#events'  onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id +", " + name + ");\">" + '<img width="20" height="20" title="' + ico[10].title + '" alt="' + ico[10].title + '" src="/images/legend-ico-' + ico[10].name + '"/></a>';
                count +=1; 
            }
        for (var i=0; i<ico.length; i++)
        {
           if ( ico[i].status && ico[i] != 0)
            {
                if (i!=9 && i!=10)
                    {
						var start_a = "<a href='/public/place_by_name/" + place_name_for_url(name) + "?id=" + place_id + "' onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id +", " + name + ");\">"
                        icos += start_a + '<img width="20" height="20" title="' + ico[i].title + '" alt="' + ico[i].title + '" src="/images/legend-ico-' + ico[i].name + '"/></a>';
                        count +=1; 
                    }
            }
        }
/* DISABLE SHOW KEY		
        if (icos.length > 0)
															{
            if (count<6) { icos +="<div id=\"height-limiter\">"; }
            icos += "</div><div id=\"show-key\"><a href=\"#key\"><img src=\"/images/show-key-button.gif\" alt=\"show key\"></a></div>";
         }
		 */
	ico_html += icos + "</div>";
        // icons-end 

        if (events!=null)
        {
																// events - first event if there are active events at place
            // events[0] - event name
            // events[1] - start at
																// events[2] - end_at
            // events[3] - event id
            ename = events[0];
            start_at = events[1];
            end_at = events[2];
            event_id = events[3];
            if (start_at==end_at)
                { date = start_at }
            else
                { date = start_at+' - '+end_at}
            event_html='<div class="b-event-multimap">&gt;&nbsp;<a href="/public/event/'+event_id+'" onclick="return getEventDetailByAjax'+js_version+'('+event_id+', 1, ' + ename + ');">Next&nbsp;event:&nbsp;'+date+'</a></div>';
        }
        
	
	//alert(ico[0].status); return 0;
	if (pic!=null)
	{
		if (pic.attributes.temporary) {
			picture_html += "<img class='b-img' src='/pictures/tmp/" + pic.attributes.location + "' style='float:left; margin:5px;' width='" + AppConfig['picture_size']['min_x'] + "' height='" + AppConfig['picture_size']['min_y'] + "'>";
		}
		else {
			if (pic.attributes.id == 0)
																			{
				picture_html += "<img class='b-img' src='/images/" + pic.attributes.location + "' style='float:left; margin:5px;' width='" + AppConfig['picture_size']['min_x'] + "' height='" + AppConfig['picture_size']['min_y'] + "'>";
			}
			else
																				{
				picture_html += "<img class='b-img' src='/pictures/" + place_id + "/" + pic.attributes.location + "' style='float:left; margin:5px;' width='" + AppConfig['picture_size']['min_x'] + "' height='" + AppConfig['picture_size']['min_y'] + "'>";
			}
		}
	}
	
	if (distance != null)
	{
		dist_html = "<span>&nbsp(" + distance + " km / " + distance_in_miles + " miles)</span>"
	}
/* Links replaces by icons	
	var link_events = ""
	var link_vo = ""
	if (ico[10].status != 0 && ico[10].status != false)
	{
		link_events = "<a href='/public/place/" + place_id + "#events'  onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id+");\">Events</a>";
	}
	if (ico[9].status != 0 && ico[9].status != false)
	{
		link_vo = "   <a href='/public/place/" + place_id + "#vo' onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id+");\">Volunteering</a>";
	}*/
		
	if (nearest_places!='')
	{
		placeHtml = "<div class=\"bubble\"><p class='b-title-multimap'><a "+bubble_lang+"href='/public/place_by_name/" + place_name_for_url(name) + "?id=" + place_id + "' onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id +", " + name + ");>"+name+"</a><br>";
		//nearestplaces = nearest_places.split('^');
																					nearestplaces = nearest_places;
		MarkerId_PlaceId[place_id] = place_id;
		for (var i=0;i<nearestplaces.length;i++)
		{
			MarkerId_PlaceId[nearestplaces[i][0]] = place_id;
                        placeHtml = placeHtml+"<a "+nearestplaces[i][2]+" href='/public/place_by_name/" + place_name_for_url(nearestplaces[i][1]) + "?id=" + nearestplaces[i][0] + "' onclick='return getPlaceDetailByAjax"+js_version+"("+ nearestplaces[i][0] +", " + nearestplaces[i][1] + ");'>"+nearestplaces[i][1]+"</a><br/>";
			//alert(nearestplaces[i].toSource());
		}
		placeHtml += "</p></div>";
	}
	else
	{
		placeHtml = "<div class=\"bubble\"><p class='b-title-multimap' "+bubble_lang+"><a href='/public/place_by_name/" + place_name_for_url(name) + "?id=" + place_id + "' onclick=\"return getPlaceDetailByAjax"+js_version+"("+ place_id +", " + name + ");\">"+ name + "</a>" + dist_html + "</p>"
                	+ event_html + '<table class="b-table"><tr><td align="left" width="110px;">' + ico_html + '</td><td align="right">' + picture_html + '</td></tr></table></div>';
	}
	
	
	var infoTabs = [
        new MMInfoBoxTab( 'Place', placeHtml ),
    ];
    marker.setInfoBoxContent( infoTabs ); 
	marker.plid = place_id;
	//alert(marker);
	return marker;
																					} 
function addCluster2(lat, lng, sw, ne)
{
	var pos = new MMLatLon(parseFloat(lat), parseFloat(lng));
	var cl_ico = new MMIcon();
	cl_ico.iconSize = new MMDimensions( 32,32 );
	cl_ico.iconAnchor = new MMPoint( 16, 16 );//base_iconAnchor;   // may be incorrect
																						cl_ico.image = AppConfig['marker_icons']['cluster'];
	var cluster = map2.createMarker(pos, '', cl_ico);
	//var cluster = map2.createMarker(pos, { zIndex: null, 'label' : "blabla", 'icon' : cl_ico}); 
	cluster.sw = sw;
	cluster.ne = ne;
	return cluster;
}

																					function CalcMainCoord2()
{
	var b = map2.getMapBounds();
	
	main_ne = toUrlValue(b.getNorthEast());
	main_sw = toUrlValue(b.getSouthWest());
}
																					
function default_map2()
{
	map = null;
	setOSPrefs();
	map_div.innerHTML = "";
	map2 = new MultimapViewer(map_div);
	map2.goToPosition( new MMLocation( new MMLatLon( centerLatitude, centerLongitude ), startZoom ) );
//	if (onePlace == false) 
//	{
		//map2.addWidget (new MMSmallPanZoomWidget ());
		removeZoomW();
    add_map_control2();
//	}
	map2.addWidget (new MMMapTypeWidget ());
}

function init2()
{
	default_map2();
	// create markers on the map
	// See Google Maps book chap 6
																							var latmin = 90.0;
	var latmax = -90.0;
	var lngmin = 180.0;
	var lngmax = -180.0;
	
	if(!multi)
	{
		if(typeof(County_bounds) != "undefined" && County_bounds != null){
			
			var c_bounds = compareCountyBounds(County_bounds);
			latmin = c_bounds[0];
			latmax = c_bounds[2];
																										lngmin = c_bounds[1];
			lngmax = c_bounds[3];		
			
			var centre = new MMLatLon((latmin+latmax)/2.0, (lngmin+lngmax)/2.0);
			var sw = new MMLatLon(latmin, lngmin);
			var ne = new MMLatLon(latmax, lngmax);
			
			var locationArray = new Array;

			locationArray.push(new MMLocation(sw));
			locationArray.push(new MMLocation(ne));
			locationArray.push(new MMLocation(centre));
																										
			var location = map2.getAutoScaleLocation(locationArray);
			location.bounds = new MMBounds(sw,ne)
			//alert(location);
			map2.drawAndPositionMap(location);
																										bounds = map2.getMapBounds();
			//alert(bounds);
			
			var southWest = toUrlValue(bounds.getSouthWest());
			var northEast = toUrlValue(bounds.getNorthEast());
		
			main_sw = southWest;
			main_ne = northEast;
			var url="/public/search_ajax?ne=" + northEast + "&sw=" + southWest + getFilters() + getSearchPoint() + getTags() + getSearchText() 
			+ "&fix_ne=" + main_ne + "&fix_sw=" + main_sw + "&tu=" + type_up + "&hasjs=1&county=true";
			sendAjax2(url);
		}
		else{
			
		if(typeof(Center_point) != "undefined" &&  Center_point != null)
			{
				var centre = new MMLatLon(Center_point[0], Center_point[1]);
				var location = new MMLocation(centre);
				map2.goToPosition( location ,13);
				var bounds = map2.getMapBounds();
				var southWest = toUrlValue(bounds.getSouthWest());
				var northEast = toUrlValue(bounds.getNorthEast());
				main_sw = southWest;
				main_ne = northEast;	
				
				var url="/public/search_ajax?ne=" + northEast + "&sw=" + southWest + getFilters() + getSearchPoint() + getTags() + getSearchText() 
				+ "&fix_ne=" + main_ne + "&fix_sw=" + main_sw + "&tu=" + type_up + "&hasjs=1";	
				sendAjax2(url);
																											}
			else
			{
				var locationArray = new Array;
																													if (markers) for (i=0;i<markers.length;i++)
				{
					var current = markers[i];
					if (current.lat != "0")
					{
						// TODO - change these to correct settings
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						if (current.name)
						{
							marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
							gmarkers[current.place_id]=marker;
						}
						else
						{
							marker = addCluster2(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
						}
						locationArray.push(new MMLocation(new MMLatLon(lat,lng)));
						//map.addOverlay(marker);
					}
				}
																																var location = map2.getAutoScaleLocation(locationArray);
				
				
				if (location){
					map2.goToPosition( location);
					if(!onePlace){
						zoom = map2.getZoomFactor();
																																		map2.goToPosition( location,zoom);
						checkLoadStatus();
																																	}
				}
				if(markers && markers.length == 0)
				{
					if(document.getElementById("disclaimer-text"))
						clear_disclaimer();
																																		if(!inDB)
					{
						document.getElementById("place_results_header").innerHTML = "<span class='no_results'>" + AppConfig['no_results']['header'] + "</span>" + add_search_header(true);
						document.getElementById("place_results_header").className = "attention";
						remove_disclaimer();
						
						document.getElementById("resultlist").innerHTML = "<ul><li class='li-as-a'>" + AppConfig['no_results']['text'] +"</li></ul>";
                        set_atom_visible('none');
																																				checkLoadStatus();
						add_map_control2();
																																			}
					else
																																				{
						add_search_header();
						document.getElementById("place_results_header").className = "";
						document.getElementById("disclaimer-text").innerHTML = AppConfig['text']['disclaimer'];
																																					//set_atom_visible('');
					}

																																				Error = true;
				}
				else
				{
					Error = false;
				}			
				
			}
		}
	}
/* 	repeat condition, see below	
	if (onePlace == true && Error == false) { 
		map2.setZoomFactor(16);
	}	*/
	
	if(!Error){	
		if (onePlace == true && markers) { 
			map2.setZoomFactor(16);
			checkLoadStatus();
		}
		else {
			map2.zoom(0);
		}
	}
	if (onePlace == false)
	{
		//map.addEventHandler("endMouseDrag", updateMarkers);
		map2.addEventHandler("mapBoundsChanged", updateMarkers2);
		map2.addEventHandler("changeZoom",setFlag2);
		map2.addEventHandler("resize",updateMarkers2);
	}
	
	CalcMainCoord2();
	if (markers && markers.length == 1 && onePlace == false && multi)
	{
		setSearchPoint(markers[0].lat, markers[0].lng);
		map2.setZoomFactor(13);
	}
																																			zoom = map2.getZoomFactor();
	
	map2.addEventHandler("click",function( type, target, point ) {
	//set click handler for cluster
		if (! point && target.sw && target.ne) 
		{
			var sw_cp = new MMLatLon(target.sw[0], target.sw[1]);
			var ne_cp = new MMLatLon(target.ne[0], target.ne[1]);
																																						
			var locationArray = new Array;
			locationArray.push(new MMLocation(sw_cp));
			locationArray.push(new MMLocation(ne_cp));
			var location = map2.getAutoScaleLocation(locationArray);
			map2.goToPosition( location );
		}
	})

    if (inDB) updateMarkers2();
																																				
}

function updateMarkers2()
{
    set_map_control_size2();
        
	if (onePlace || Error || multi || isPrint())
	{
		return;
	}
	showWaitMessage();
	if (map2.getZoomFactor()>1)
	{
		var bounds = map2.getMapBounds();
		var southWest = toUrlValue(bounds.getSouthWest());
		var northEast = toUrlValue(bounds.getNorthEast());
		
		if (type_up == "z")
		{
			map2.removeAllOverlays();
			MarkerId_PlaceId = [];
																																									gmarkers = {};
			main_sw = southWest;
			main_ne = northEast;
		}
		var url="/public/search_ajax?ne=" + northEast + "&sw=" + southWest + getFilters() + getSearchPoint() + getTags() + getSearchText() 
		+ "&fix_ne=" + main_ne + "&fix_sw=" + main_sw + "&tu=" + type_up + "&hasjs=1";
		var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{		
				type_up="m";
				var data=req.responseText;
				var result_list = document.getElementById("resultlist");
				var ob_all;
				
				//catch errors
				try
				{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
					failure_response(e, result_list);
					return;
				}
				
				markers=ob_all.mk;
				
				if (result_list)
				{
																																													var in_db_results = document.getElementById('resultlist_in_db')
					if (in_db_results) 
					{
						in_db_results.style.display = 'none';
					}
					result_list.innerHTML = ob_all.pl;
				}
				else return;
				
																																													if (highlight_marker_id) default_marker_color(highlight_marker_id);
				removeOldMarkers2();
				
				var temp = '';
				var locationArray = new Array;
				for (var i=0;i<markers.length;i++) // i -may be allready defined!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
				{
					var current = markers[i];
					if (current.lat != "0")
																																																{
						// TODO - change these to correct settings
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						if (current.name)
						{
							//alert(current.place_id+" "+current.ico);							
							if (!gmarkers[current.place_id])
							{
								marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
								gmarkers[current.place_id]=marker;
							}
							gmarkers[current.place_id].active = 1;
						}
						else
						{
							marker = addCluster2(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
																																																				}
						locationArray.push(new MMLocation(new MMLatLon(lat,lng)));
					}
				}
				for(var k in gmarkers)
				{
					if(gmarkers[k].active && gmarkers[k].active == 1)
																																																					{
						gmarkers[k].active = 0;
					}
					else
					{
						map2.removeOverlay(gmarkers[k]);
						delete gmarkers[k];
					}
				}
				
				//var location = map.getAutoScaleLocation(locationArray);
				//map.goToPosition( location );
				
				if(markers.length ==0)
				{
					setHeader();
				}else
				{
					remove_noresults_header();
					add_disclaimer();
                    set_atom_visible('');
				}
                var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
                var link_to_welsh = document.getElementById("welsh_link");                                    
																																																						linktopage.value.clear;
                linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
				checkLoadStatus();
			}
			resizeBlocks();
		}
		req.send(null);
	}

}

																																																		function setOSPrefs() {
	// set preference for Ordnance Survey (OS) Maps 
	var prefs = MMDataResolver.getDataPreferences( MM_WORLD_MAP);
																																																			var osprefs = '';
	for( var i = 0; i < prefs.length; ++i ) {
		var copyright = MMDataResolver.getCopyright(prefs[i], MM_WORLD_MAP);
																																																				if (copyright.indexOf ('43513U') != -1)
			osprefs =  prefs[i];
	}
	prefs.unshift(osprefs);
	MMDataResolver.setDataPreferences(MM_WORLD_MAP, prefs);
}
function setFlag2()
{
	type_up = "z";
}
function toUrlValue(point)
{
	return point.lat + ',' +point.lon;
}
function removeOldMarkers2()
{
		if (!map2) return;
		var mapBounds = map2.getMapBounds();
		var point;
		for (k in gmarkers)
		{
			//alert("k="+isNaN(k)+", "+gmarkers[k])
			if (isNaN(k) != true)
			{
				
				point = gmarkers[k].getPosition();
				//alert("mapBounds = " + mapBounds + "\nPoint = " + point["coords"] + "\n IF = " + mapBounds.contains(point["coords"]));
				if (!mapBounds.contains(point["coords"]))
				{
					map2.removeOverlay(gmarkers[k]);
																																																									delete gmarkers[k];
				}
			}
		}
		for(c in gclusters)
																																																							{
			map2.removeOverlay(gclusters[c]);
																																																								delete gclusters[c];
		}

}
function sendAjax2(url)
{
		var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		showWaitMessage();
																																																							req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				type_up="m";
				var data=req.responseText;
				var result_list = document.getElementById("resultlist");
				var ob_all;
				//catch errors
				try
				{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
					failure_response(e, result_list);
					return;
				}
				
				markers=ob_all.mk;
				if(result_list)
				{
					var div_inDB = document.getElementById('inDBresults');
					if (div_inDB && inDB) div_inDB.innerHTML += "<h4>Did you mean a Location?</h4>";
																																																												result_list.innerHTML=ob_all.pl;
				}
				else
				{
					document.getElementById("content-cont-r").innerHTML= "<div class=\"content-cont-no\"><h2 id=\"place_results_header\">Places</h2><div class=\"events\"><div id=\"resultlist\">" +ob_all.pl+"</div></div></div>";
				}
				var locationArray = new Array;	
				for (var i=0;i<markers.length;i++) // i -may be allready defined!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
				{
																																																														var current = markers[i];
																																																														if (current.lat != "0")
					{
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						if (current.name)
						{
							marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
							if (!gmarkers[current.place_id])
							{
								gmarkers[current.place_id]=marker;
							}

						}
						else
						{
							marker = addCluster2(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
						}
						locationArray.push(new MMLocation(new MMLatLon(lat,lng)));
																																																																		}
				}
				if(markers.length == 0)
				{
					geographical_place_find = true;
					setHeader();
																																																																			//Error = true; //this comment fix ajax request
					//map2.goToPosition( new MMLocation( new MMLatLon( centerLatitude, centerLongitude ), startZoom ) ); //this comment fix zoom then places(town) is finde
				}
				else
				{
					add_search_header();
					document.getElementById("place_results_header").className = "";
					document.getElementById("disclaimer-text").innerHTML = AppConfig['text']['disclaimer'];
                    set_atom_visible('');
					Error = false;
				}

                var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
																																																																			var link_to_welsh = document.getElementById("welsh_link");                                    
                linktopage.value.clear;
                linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
                checkLoadStatus();
			}
			resizeBlocks();
		}
		req.send(null);	
}




	function getPlaceDetailByAjax2(placeID, place_name)
																																																																{
		gmarkers = {}
		if (!map2) change_map(2);
		
        if (Current_page == 'place') return false;
		showWaitMessage();
		//change_map(2);
		var db_results_div = document.getElementById("inDBresults");
		if(db_results_div) inDBresults = "<div id=\"inDBresults\">" + db_results_div.innerHTML + "<\div>";
		
		var url="/public/place_by_name/" + place_name_for_url(place_name) + "?id=" + placeID + "&ajax=1";
		var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				var data=req.responseText;
				var ob_all;
																																																																				
				//catch errors
				try
				{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
					var result_list = document.getElementById('resultlist');
					failure_response(e, result_list);
					return;
				}
				
				expandBoth(true);
				placepage_title_and_meta(place_name);
				onePlace = true;
																																																																				tempMarkers = markers;
				markers=ob_all.mk;
				removeFreezeBlock();
				Current_page = ob_all.current_page;
				addFreezeBlock(ob_all.freeze_block);
																																																																				//updateScrollSize();
				var content_cont_r = document.getElementById("content-cont-r");
				var content_cont = document.getElementById('content-cont');
				content_cont.scrollTop = 0;
				content_cont.innerHTML = "<div class='content-cont-no'>"+ob_all.pl+"</div>";
				map2.removeAllOverlays();
				if(markers)
				{
																																																																						current = markers[0];
					lat = parseFloat(current.lat);
					lng = parseFloat(current.lng);
					marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
																																																																						map2.goToPosition( new MMLocation( new MMLatLon( lat, lng ) ), 16, true );
					gmarkers[current.place_id] = marker;
				}
                var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
																																																																					var link_to_welsh = document.getElementById("welsh_link");                                    
                linktopage.value.clear;
                linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
                checkLoadStatus();                
			}
			resizeBlocks();
		}
		req.send(null);
																																																																			return false;
	}
	function getEventDetailByAjax2(eventID, straight, place_name)
	{
		if (!map2) change_map(2);
        
		var straight_event = false
		if (straight && straight == 1) straight_event = true;
		
		showWaitMessage();
		var url="/public/event/" + eventID + "?ajax=1";
																																																																			if (straight_event)
        {
																																																																					url = url+'&straight=1';
			tempMarkers = markers;
        }
                 
        var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				var data=req.responseText;
				var ob_all;
				
				//catch errors
																																																																							try
				{
																																																																								ob_all = eval('('+data+')');
				}
																																																																							catch(e)
				{
					var conteiner;
					if 	(straight_event) conteiner = document.getElementById('resultlist');
					else conteiner = document.getElementById('content-cont-r');
					failure_response(e, conteiner);
					return;
				}
				
				expandBoth(true);
				eventpage_title_and_meta(place_name);
				onePlace = true;
				markers = ob_all.mk;
																																																																							removeFreezeBlock();
				Current_page = ob_all.current_page;
				addFreezeBlock(ob_all.freeze_block);
				//updateScrollSize();
				var content_cont = document.getElementById("content-cont");
				content_cont.innerHTML="<div class='content-cont-no'>"+ob_all.pl+"</div>";
				if (straight_event)
				{
					map2.removeAllOverlays();
																																																																									if(markers)
					{
						current = markers[0];
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
						map2.goToPosition( new MMLocation( new MMLatLon( lat, lng ), 16 ) );
						map2.addOverlay(marker);
						gmarkers = {}
																																																																											gmarkers[current.place_id] = marker;
					}
				}
                var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
                var link_to_welsh = document.getElementById("welsh_link");                                    
                linktopage.value.clear;
                linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
                checkLoadStatus();
                resizeBlocks();
			}
		}
		req.send(null);
		return false;
	}
	
	function backToPlaceByAjax2(placeID, place_name)
	{
		if (!map2) change_map(2);
		
		var db_results_div = document.getElementById("inDBresults");
		if(db_results_div)
																																																																								inDBresults = "<div id=\"inDBresults\">" + db_results_div.innerHTML + "<\div>";
		
		var url="/public/place/" + placeID + "?ajax=1";
		var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
																																																																								if (req.readyState == 4)
			{
				var data=req.responseText;
				var ob_all;
				
																																																																										//catch errors
				try
				{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
																																																																											var content_cont_no = content_cont.getElementsByClassName('content-cont-no')[0];
					failure_response(e, content_cont_no);
					return;
				}
				
				expandBoth(true);
				placepage_title_and_meta(place_name);
				removeFreezeBlock();
				Current_page = ob_all.current_page;
				addFreezeBlock(ob_all.freeze_block);
				var content_cont = document.getElementById("content-cont");
				content_cont.innerHTML="<div class='content-cont-no'>"+ob_all.pl+"</div>";
				//updateScrollSize();
    			resizeBlocks();
				var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
																																																																										var link_to_welsh = document.getElementById("welsh_link");                                    
                linktopage.value.clear;
																																																																										linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
			}
		}
		req.send(null);             
		return false;		
	}
																																																																							
	function getSearchResultsByAjax2(url, search_location, filter_name)
																																																																							{
		onePlace = false;
		if (!map2) change_map(2);
		
		showWaitMessage();
																																																																								var latmin = 90.0;
		var latmax = -90.0;
		var lngmin = 180.0;
																																																																								var lngmax = -180.0;

		// initiating map
		map = null;
		if(!map2)
		{
			map_div.innerHTML = "";
			map2 = new MultimapViewer( document.getElementById( "map-cont" ) );
			setOSPrefs();
			// initiating map
																																																																									}
/* NOW it USE in function change_map		
		if (onePlace == false) 
																																																																										{
			//map2.addWidget (new MMPanZoomWidget ());
																																																																									//add_map_control2();
                        map2.addEventHandler("resize",set_map_control_size2);
		}
		map2.addWidget (new MMMapTypeWidget ());
		*/
		map2.removeAllOverlays();
		gmarkers={};
		url = url.replace(/search/,"search_ajax");
																																																																									
		var req = map2.getXMLHTTPRequest();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				if (typeof(search_str) != 'undefined') document.getElementById("search-text").value = search_str;
				expandByValue();
				type_up="m";
				var data=req.responseText;
				var ob_all;
				
																																																																												//catch errors
				try
																																																																												{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
					//content_cont.innerHTML = "<div class=\"content-cont\"><div class=\"content-cont-s\" id=\"content-cont-r\">" + "<div class=\"events\"><div id=\"resultlist\">" + "</div></div></div></div>";
																																																																													var content_cont_r = document.getElementById('content-cont-r');
					failure_response(e, content_cont_r);
					onePlace = true;
					return;
				}
				
				searchpage_title_and_meta(search_location, filter_name);
																																																																												markers=ob_all.mk;
				removeFreezeBlock();
				Current_page = 'search';
				addFreezeBlock(ob_all.freeze_block);
				//alert(markers);
				//markers=tempMarkers;
				var content_cont = document.getElementById("content-cont");
				var in_db_html = "";
				if(ob_all.in_db && ob_all.in_db != " ") // may be empty!!!
				{
																																																																														in_db_html = "<div id=\"inDBresults\"><h4>Did you mean a Breathing Place?</h4><br/><div class=\"events\"><div id=\"resultlist_in_db\"><ul>"+ob_all.in_db+"</ul></div></div><h4>Did you mean a Location?</h4></div>";
					//in_db_html = "<div id=\"inDBresults\"><div class=\"events\"><div id=\"resultlist_in_db\"><ul>"+ob_all.in_db+"</ul></div></div></div>";
				}
				//document.getElementById("content-cont").innerHTML=  "<div class=\"content-cont\" id=\"content-cont-r\">"+in_db_html+"<h2 id=\"place_results_header\">Places</h2><p class=\"disclaimer\" id=\"disclaimer-text\"><\p><div class=\"events\"><div id=\"resultlist\">" +ob_all.pl+"</div></div></div>";
				content_cont.innerHTML=  "<div class=\"content-cont\"><div class=\"content-cont-s\" id=\"content-cont-r\">"+in_db_html+"<div class=\"events\"><div id=\"resultlist\">" + ob_all.pl + "</div></div></div></div>";
				
				var locationArray = new Array;	
				for (var i=0;i<markers.length;i++) // i -may be allready defined!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
																																																																														{
					var current = markers[i];
					if (current.lat != "0")
					{
						// TODO - change these to correct settings
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						if (current.name)
						{
							marker = addMarker2(lat,lng,current.name, current.desc, current.partner, current.events,current.pic, current.ico, current.action,current.place_id, current.distance, current.distance_in_miles, current.nearest_places,current.map_provider,current.bubble_lang);
							if (!gmarkers[current.place_id])
							{
								gmarkers[current.place_id]=marker;
							}

						}
						else
						{
							marker = addCluster2(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
						}
																																																																																				locationArray.push(new MMLocation(new MMLatLon(lat,lng)));
					}
				}
				var location = map2.getAutoScaleLocation(locationArray);
				
				if (location){
                    _nesw = ob_all.url[2]
																																																																																			if (_nesw[0][0]!=0 && _nesw[0][1]!=0 && _nesw[1][0]!=0 && _nesw[1][1]!=0)
		            {
																																																																																					latmax=_nesw[0][0]; 
		                lngmax=_nesw[0][1];
		                latmin=_nesw[1][0];
		                lngmin=_nesw[1][1];
		            }
					var sw = new MMLatLon(latmin, lngmin);
					var ne = new MMLatLon(latmax, lngmax);
					location.bounds = new MMBounds(sw,ne)
					//alert(zoom);
					if(zoom==location.zoom_factor)
																																																																																					map2.goToPosition(location,location.zoom_factor);
					else
						if(zoom!=16)
							map2.goToPosition(location,zoom);
						else
							map2.goToPosition(location,location.zoom_factor);
				}
				if (hasGeo)
				{
					default_map2();
				}
				else
				{
					if(markers.length ==0)
					{
						if(document.getElementById("disclaimer-text"))
							clear_disclaimer();
						if(!inDB)
						{	
							document.getElementById("place_results_header").innerHTML = "<span class='no_results'>" + AppConfig['no_results']['header'] + "</span>" + add_search_header(true);
							document.getElementById("place_results_header").className = "attention";
							remove_disclaimer();
							
							document.getElementById("resultlist").innerHTML = "<ul><li class='li-as-a'>" + AppConfig['no_results']['text'] + "</li></ul>";
		                    set_atom_visible('none');
						}
						else
																																																																																											{
							document.getElementById("place_results_header").innerHTML = '';
	                        //set_atom_visible('');
																																																																																											}
						Error = true;
						map2.goToPosition( new MMLocation( new MMLatLon( centerLatitude, centerLongitude ), startZoom ) );
					}
					else
					{
						add_search_header();
						document.getElementById("place_results_header").className = "";
						document.getElementById("disclaimer-text").innerHTML = AppConfig['text']['disclaimer'];
	                    set_atom_visible('');
						Error = false;
					}
																																																																																											if (onePlace == false)
					{
						//map.addEventHandler("endMouseDrag", updateMarkers);
						//type_up = "m";
						map2.addEventHandler("mapBoundsChanged", updateMarkers2);
						map2.addEventHandler("changeZoom",setFlag2);
						map2.addEventHandler("resize",updateMarkers2);
					}
					CalcMainCoord2();
				}
                var linktopage = document.getElementById("Link_to_page_input");                                    
                var link_to_eng = document.getElementById("eng_link");                                    
																																																																																											var link_to_welsh = document.getElementById("welsh_link");                                    
                linktopage.value.clear;
                linktopage.value = ob_all.url[0];
                link_to_eng.href = ob_all.url[1]['eng'];
                link_to_welsh.href = ob_all.url[1]['welsh'];
                checkLoadStatus();
			}
			resizeBlocks();
		}
		req.send(null);	
		return false;
	}
	
// Equivalent to GoogleMaps: window.onload = init;



																																																																																								