// 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 map = 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 MarkerId_PlaceId = [];

var free_mutex = true;
var onePlace = false;

//-- global vars for setting map control size according to map size --
// large map control object
    var large_map_control;
// small map control object 
    var small_map_control; 
// height limit to change map control size
    var y = AppConfig['map']['map_height_limit_for_small_control']['google'];
// map control size-type = 'small' or 'large'
    var map_control_size;
//----

function set_map_control_size()
// 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
{
    map_height = map.getSize().height;
    //if (map_height < y)
	if (false)//Spike for use only lage control size
        {
            if (map_control_size == 'large')
                {
                    map.removeControl(large_map_control); 
                    small_map_control = new GSmallMapControl();
                    map.addControl(small_map_control, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(-78, 7)));
                    map_control_size = 'small';
                }
        }
    else
        {
            if (map_control_size == 'small')
                {
                    map.removeControl(small_map_control);
                    large_map_control = new GLargeMapControl();
                    map.addControl(large_map_control, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(-68, 3)));
                    map_control_size = 'large';
					var marg = document.getElementById('margin_zoom');
					marg.style.marginTop = '45px';
                }
        }
}

function add_map_control()
// adds map control of nedeed size according to map size
{
        large_map_control = new GLargeMapControl()
        small_map_control = new GSmallMapControl()
        if (map.getSize().height < y && false) //Spike for use only lage control size
        {
                map.addControl(small_map_control, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(-68, 7)));
                map_control_size = 'small';
        }
        else
        {
                map.addControl(large_map_control, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(-78, 3)));
                map_control_size = 'large';
				var marg = document.getElementById('margin_zoom');
				marg.style.marginTop = '45px';
        }
}

function manage_control()
{
//not used
	if (!small_map_control && !large_map_control)
	{
		return false;
	}
	
	if (map_control_size == 'large' && large_map_control)
	{
		large_map_control.uf.parentNode.style.left = "-72px";
	}
	else if	(map_control_size == 'small' && small_map_control)
	{	
		if (small_map_control.qa[1]) small_map_control.qa[1][1][1].style.left = "-64px";
		if (small_map_control.A) small_map_control.A.d.style.left = "-64px";
	}
}


function set_atom_visible(value)
{   
    el = document.getElementById("atomfeed");
    if (el) {el.style.display = value;};
}

var zoomCluster = function()
{
	//alert("Hello");
	
}

function addCluster(lat, lng, sw, ne)
{
	var latlng = new GLatLng(parseFloat(lat), parseFloat(lng));
	var cl_ico = new GIcon();
	cl_ico.iconSize=new GSize(32,32);
	//cl_ico.iconAnchor = base_iconAnchor;
	cl_ico.iconAnchor = G_DEFAULT_ICON.iconAnchor;
	cl_ico.infoWindowAnchor=new GPoint(20,0);
	cl_ico.image = AppConfig['marker_icons']['cluster'];
	var cluster = new GMarker(latlng, {icon:cl_ico});
	GEvent.addListener(cluster, "click", function() {
		var sw_cp = new GLatLng(sw[0], sw[1]);
		var ne_cp = new GLatLng(ne[0], ne[1]);
		bounds = new GLatLngBounds(sw_cp, ne_cp);
		map.setCenter(latlng, map.getBoundsZoomLevel(bounds));
		  });
	return cluster;
}

function addMarker(lat, lng, name, description, partner, events,pic,ico,action,place_id,distance, distance_in_miles, nearest_places,map_provider,bubble_lang)
{
	// create a new marker at this point on the map
	var latlng = new GLatLng(parseFloat(lat), parseFloat(lng));
	var mk_ico = new GIcon();
	mk_ico.iconSize=new GSize(32,32);
	//mk_ico.iconAnchor = base_iconAnchor;
	mk_ico.iconAnchor = G_DEFAULT_ICON.iconAnchor 
	mk_ico.infoWindowAnchor=new GPoint(20,0);
	
	if (nearest_places!='') mk_ico.image = AppConfig['marker_icons']['close']; // "/images/marker-close.png"
	else mk_ico.image = AppConfig['marker_icons']['single'];
	
	var marker = new GMarker(latlng, {icon: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">&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> (" + 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'><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/>";
		}
		placeHtml = placeHtml+"</p></div>";
	}
	else
	{
		placeHtml = "<div class=\"bubble\"><p class='b-title' "+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>';
	}

	GEvent.addListener(marker, "click", function() {
			//m_over();
			var infoTabs = [
		  		new GInfoWindowTab("Place", placeHtml)
			];
		   //if (map.getInfoWindow().isHidden()) 
		   marker.openInfoWindowTabsHtml(infoTabs);
	});

/*canceled		  
	GEvent.addListener(marker, "mouseout", function() {
			m_out();
	});
*/		  
	marker.plid = place_id;
	//alert(marker.plid)
	return marker;
	
}

function default_map()
{
	map2 = null;
	map_div.innerHTML = "";
	map = new GMap2(map_div);
    add_map_control();
                
	if (onePlace == false) 
	{
		map.addControl(new GOverviewMapControl());
	}
	
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
}

function init()
{
	default_map();
	// 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 GLatLng((latmin+latmax)/2.0, (lngmin+lngmax)/2.0);
			// calculate bounds so we can set correct zoom level
		    var sw = new GLatLng(latmin, lngmin);
			var ne = new GLatLng(latmax, lngmax);
			bounds = new GLatLngBounds(sw, ne);
			map.setCenter(centre, map.getBoundsZoomLevel(bounds));
			
			bounds = map.getBounds();
			var southWest = bounds.getSouthWest().toUrlValue();
			var northEast = bounds.getNorthEast().toUrlValue();
			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";
			sendAjax(url);
		}
		else{
			if(typeof(Center_point) != "undefined" &&  Center_point != null)
			{
				var centre = new GLatLng(Center_point[0], Center_point[1]);
				map.setCenter(centre, init_zoom);
				var bounds = map.getBounds();
				var southWest = bounds.getSouthWest().toUrlValue();
				var northEast = bounds.getNorthEast().toUrlValue();
				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";
				sendAjax(url);
			}
			else
			{
				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 = addMarker(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 = addCluster(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
						}
						map.addOverlay(marker);
						
						if (lat < latmin)
							latmin = lat;
						if (lat > latmax)
							latmax = lat;
						if (lng < lngmin)
							lngmin = lng;
						if (lng > lngmax)
							lngmax = lng;	
					}
				}
				// if bounds are set, reset centre point of map
				if (latmax >= latmin && lngmax >= lngmin)
				{
		                        // if ne & sw set in URL
		                        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 centre = new GLatLng((latmin+latmax)/2.0, (lngmin+lngmax)/2.0);
					// calculate bounds so we can set correct zoom level
		        	var sw = new GLatLng(latmin, lngmin);
					var ne = new GLatLng(latmax, lngmax);
					bounds = new GLatLngBounds(sw, ne);
					map.setCenter(centre, map.getBoundsZoomLevel(bounds));
				}
				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();
						
						var r_list = document.getElementById("resultlist");
						r_list.innerHTML = "<ul><li class='li-as-a'>" + AppConfig['no_results']['text'] + "</li></ul>";
	                    set_atom_visible('none');
	                    checkLoadStatus();
						resizeBlocks();
					}
					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;
				}			
			}
		}
	}	
		if (onePlace == false)
		{
			GEvent.addListener(map, 'moveend', function(){
				updateMarkers()
			});
			
			GEvent.addListener(map, 'zoomend', function(){
				setFlag('z')
			});
			
			GEvent.addListener(map, 'resize', function(){
				updateMarkers();
			});
		}
		else if (markers && markers.length>0)
		{
			map.setZoom(12);
			checkLoadStatus();
		}
	
	CalcMainCoord();
	if (markers && markers.length == 1 && onePlace == false && multi) 
	{
		setSearchPoint(markers[0].lat, markers[0].lng);
		map.setZoom(12);
	}
	//alert("multi - " + multi + "\nDb - " + inDB);
	if (multi) checkLoadStatus();
    if (inDB) updateMarkers();
}

function updateMarkers()
{
    set_map_control_size();
		//var pr = document.getElementById('is-print');
		//alert('ob- ' + pr + "\ngstye - " + !!parseInt(getStyle($('is-print'), 'height')));
    if (onePlace || Error || multi || isPrint())
    {
        return;
    }
	showWaitMessage();
	if (map.getZoom()>1)
	{
		var bounds = map.getBounds();
		var southWest = bounds.getSouthWest().toUrlValue();
		var northEast = bounds.getNorthEast().toUrlValue();
		
		if (type_up == "z")
		{
			map.clearOverlays();
			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 = GXmlHttp.create();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				type_up="m";
				var result_list = document.getElementById("resultlist");
				var data=req.responseText;
				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);
				removeOldMarkers();
				
				var temp = '';
				
				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);
							marker = addMarker(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;
								map.addOverlay(marker);
							}
							gmarkers[current.place_id].active = 1;
						}
						else
						{
							marker = addCluster(lat,lng,current.sw,current.ne);
							map.addOverlay(marker);
							gclusters[i]=marker;
						}
					}
				}
				for(var k in gmarkers)
				{
					if(gmarkers[k].active && gmarkers[k].active == 1)
					{
						gmarkers[k].active = 0;
					}
					else
					{
						map.removeOverlay(gmarkers[k]);
						delete gmarkers[k];
					}
					
				}
				if(markers.length == 0)
				{
					setHeader();
                    set_atom_visible('none');
				}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 emulationMarkerClick(id)
{
	GEvent.trigger(gmarkers[id], "click");
//	alert(id);
}

function CalcMainCoord()
{
	var b = map.getBounds();
	
	main_ne = b.getNorthEast().toUrlValue();
	main_sw = b.getSouthWest().toUrlValue();
}

function removeOldMarkers()
{



		var mapBounds = map.getBounds();
		for (k in gmarkers)
		{
			//alert("k="+isNaN(k)+", "+gmarkers[k])
			if (isNaN(k) != true)
			{
				
				if (!mapBounds.contains(gmarkers[k].getPoint()))
				{
					map.removeOverlay(gmarkers[k]);
					delete gmarkers[k];
				}
			}
		}
		for(c in gclusters)
		{
			map.removeOverlay(gclusters[c]);
			delete gclusters[c];
		}

}


function setFlag()
{
	//alert("setFlag");
	type_up = "z";
}
function sendAjax(url)
{
		var req = GXmlHttp.create();
		req.open("GET", url, true);
		showWaitMessage();
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				type_up = "m";
				var data=req.responseText;
				var div_inDB = document.getElementById('inDBresults');
				var result_list = document.getElementById("resultlist");
				var ob_all;
				
				//catch ajax errors

				try
				{
					ob_all = eval('('+data+')');
				}
				catch(e)
				{
					failure_response(e, result_list);
					return;
				}
				
				markers=ob_all.mk;
				
				if(result_list)
				{
					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\">"+inDBresults+"<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>";
				}
				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 = addMarker(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;
								map.addOverlay(marker);
							}

						}
						else
						{
							marker = addCluster(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
							map.addOverlay(marker);
						}
					}
				}
				if(markers.length ==0)
				{	
					geographical_place_find = true;
					setHeader();
					//Error = true; //this comment fix ajax request
					//map.setCenter(new GLatLng(53, -1), 6); //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 getPlaceDetailByAjax(placeID, place_name)
	{
		if (!map) change_map(1);
		
		if (Current_page == 'place') return false;
		showWaitMessage();

		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 = GXmlHttp.create();
		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)
				{
					//content_cont.innerHTML = "<div class='content-cont-no'>" + "</div>";
					//var content_conut_no = content_cont.getElementsByClassName('content-cont-no')[0];
					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);
				Current_page = ob_all.current_page;
				//updateScrollSize();
				var content_cont_r = document.getElementById("content-cont-r");
				var content_cont = document.getElementById('content-cont');
				content_cont.scrollTop = 0;
				//console.log(content_cont.innerHTML);
				content_cont.innerHTML  = '';
				content_cont.innerHTML = "<div class='content-cont-no'>" + ob_all.pl + "</div>";
				map.clearOverlays();
				if(markers)
				{
					current = markers[0];
					lat = parseFloat(current.lat);
					lng = parseFloat(current.lng);
					var centre = new GLatLng(lat,lng);
					map.setCenter(centre, 12);
					marker = addMarker(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);
					map.addOverlay(marker);
				}
				else
				{
					map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
				}
				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 getEventDetailByAjax(eventID, straight, place_name)
	{
        //alert(place_name);
		if (!map) change_map(1);
        
		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';
			change_map(1);
			tempMarkers = markers;
        }
		var req = GXmlHttp.create();
		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(); below use resizeBlocks()
				var content_cont = document.getElementById("content-cont");
				content_cont.innerHTML="<div class='content-cont-no'>"+ob_all.pl+"</div>";
				
				if (straight_event)
				{
					map.clearOverlays();
					if(markers)
					{
						current = markers[0];
						lat = parseFloat(current.lat);
						lng = parseFloat(current.lng);
						var centre = new GLatLng(lat,lng);
						map.setCenter(centre, 12);
						marker = addMarker(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);
						map.addOverlay(marker);
					}
					else
					{
						map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
					}
				}
				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 backToPlaceByAjax(placeID, place_name)
	{
		if (!map) change_map(1);
		
		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 = GXmlHttp.create();
		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)
				{	
					//content_cont.innerHTML="<div class='content-cont-no'>" + "</div>";
					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 getSearchResultsByAjax(url, search_location, filter_name)
	{
		onePlace = false;
		if (!map) change_map(1);
		
		showWaitMessage();
		//initiating map
		map2 = null;
		
		//code position lower - may be not use,  instead use change_map - need check
		if(!map)
		{
			map_div.innerHTML = "";
			map = new GMap2(document.getElementById("map-cont"));
			//map.addControl(new GSmallMapControl());
			add_map_control();
            GEvent.addListener(map, 'resize', function(){
				set_map_control_size();
			});
                        
			if (onePlace == false) 
			{
				map.addControl(new GOverviewMapControl());
			}
			map.addControl(new GMapTypeControl());
			//map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
		}

		var latmin = 90.0;
		var latmax = -90.0;
		var lngmin = 180.0;
		var lngmax = -180.0;
     
		map.clearOverlays();
		gmarkers={};
		url = url.replace(/search/,"search_ajax");
		
		var req = GXmlHttp.create();
		req.open("GET", url, true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				expandByValue();
				if(typeof(search_str) != 'undefined') document.getElementById("search-text").value = search_str;
				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 result_list = document.getElementById('resultlist');
					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;
				hasGeo = ob_all.has_geo
				//markers=tempMarkers;
				removeFreezeBlock();
				Current_page = 'search';
				addFreezeBlock(ob_all.freeze_block);
				var content_cont = document.getElementById("content-cont");
				var in_db_html = "";
				if(ob_all.in_db && ob_all.in_db!=" ")
				{
					in_db_html = "<div id=\"inDBresults\"><h4>Did you mean a Breathing Place?</h4><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>";

					
			    // if ne & sw set in URL
				_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 centre = new GLatLng((latmin+latmax)/2.0, (lngmin+lngmax)/2.0);
				// calculate bounds so we can set correct zoom level
			    var sw = new GLatLng(latmin, lngmin);
				var ne = new GLatLng(latmax, lngmax);
				bounds = new GLatLngBounds(sw, ne);
				onePlace = true;
				map.setCenter(centre, map.getBoundsZoomLevel(bounds));
				onePlace = false;					
				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 = addMarker(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);
							if (!gmarkers[current.place_id])
							{
								gmarkers[current.place_id]=marker;
								map.addOverlay(marker);
							}

						}
						else
						{
							marker = addCluster(lat,lng,current.sw,current.ne);
							gclusters[i]=marker;
							map.addOverlay(marker);
						}
					}
				}
				if (hasGeo)
				{
					default_map();
				}
				else
				{
					if(markers.length == 0)
					{	
						setHeader();
						Error = true;
						map.setCenter(new GLatLng(53, -1), 6);
					}
					else
					{
						add_search_header();
						document.getElementById("place_results_header").className = "";				
						document.getElementById("disclaimer-text").innerHTML = AppConfig['text']['disclaimer'];
	                    set_atom_visible('');
	                    Error = false;
						multi = false;
					}
					type_up = "m";
					GEvent.addListener(map, 'moveend', function(){
						updateMarkers()
					});
					
					GEvent.addListener(map, 'zoomend', function(){
						setFlag('z')
					});
					
					GEvent.addListener(map, 'resize', function(){
						updateMarkers();
					});
				}
                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;
	}
