var checkInterval;
var widgetDataArray = new Array();
var widgetRatingArray = [[2,"2+ stars"], [3,"3+ stars"], [4, "4+ stars"], [5, "5 stars"]];
var	widgetCategoryArray = new Array();
var widgetRating ;
var widgetCategory ;
var centre_lat = 51.515;
var centre_lng = -0.09574;
var widgetFullSize;
var finalListArray = [];

function statusMessage(message)
{
	window.status = message;
}

function openPageEditor(id) {
}

function submitTwitterLoginForm()
{
   var formToSend = document.getElementById("loginform");
   formToSend.submit();	
}
	
function showAddress(a)
{
	a = a.split("\"").join("'");
	if (geocoder){
		geocoder.getLatLng(a, 
			function(point) {
				if (point) {
					map.setCenter(point, 17);
					var marker = new GMarker(point);
					map.addOverlay(marker);
				}
			}
		)
	}
}


function storeLocation(update)
{
	var form = document.coordinateform;
	if(form){
		if(update)
		{
			if(form.store.checked)
			{
				form.store.checked = false;
			}else{
				form.store.checked = true;
			}
		}
		
		if(form.store.checked)
		{
			createCookie("user_coordinates", coordStr(), 365);
		}else{
			createCookie('user_coordinates', "", -1);
		}
		if(checkInterval)
		{
			window.clearInterval(checkInterval);
		}
		checkInterval = window.setInterval(checkStoreLocation, 200);
	}
}

function contact()
{
	var m = "goodforlunch";
	document.location.href="MailTo:"+"contact"+"@"+m+".com";
}

function restoreLocation()
{
	var str = readCookie("user_coordinates").split(",");
	map.setCenter(new GLatLng(str[1], str[0]), Number(str[2]));
}

function coordStr()
{
	var lat = Math.round(map.getCenter().lat()*1000)/1000 
	var lng = Math.round(map.getCenter().lng()*1000)/1000 
	var str = lng+","+lat+","+map.getZoom();
	return str;
}

function setMapPosition(ln,lt, z)
{
	map.setCenter(new GLatLng(ln,lt), z);	
}

function checkStoreLocation()
{
	var form = document.coordinateform;	
	if(form && map)
	{
		var str = coordStr();
		if(checkInterval)
		{
			window.clearInterval(checkInterval);
		}
		var current = readCookie("user_coordinates");
		if(current==null)
		{
			current ="";	
		}
		if(str == current) 
		{
			form.store.checked = true;	
		}else{
			form.store.checked = false;		
		}
	}
}
	  
function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function setSubText(total, id, name)
{	
	var t = document.getElementById('subText');
	if(t)
	{
		if(total<1)
		{
			var str = "0";
		}else{
			var str = total;
		}
	 	str += " place";
		if(total!=1)
		{
			str += "s";
		}
		str += " found.";
	//	t.innerHTML = str;
	}
}

function createCookie(name,value,days)
{
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}else {
		expires = "";
	}
	document.cookie = name+"="+value+expires+"; path=/";
}

function showMapPoint(long,lat)
{
	if (geocoder) 
	{
		map.setCenter(new GLatLng(long, lat), map.getZoom());
	}
}

function clearValues(theForm,theTextField)
{
	  eval("document."+theForm+"."+theTextField+".value=''");
}

function markerPressed(m)
{
	if(m.id){
 		window.location = siteUrl+"?p="+m.id;
	}
}

function doSearch(location, name)
{
	if(location.split(" ").join("") == "")
	{
		document.location = siteUrl+"?s="+name;
	}
}
function searchAddress(form)
{
	with (form)
	{
		if (validate_required(locale,"Please enter a street, post code or area")==false)
				  {locale.focus();return false;}
	   // if (validate_required(city,"Please enter a town or city")==false)
		//		  {city.focus();return false;}
	}
	showAddress(form.locale.value+", London");
}

function validate_required(field,alerttxt)
{
	with (field)
	{
		if (value==null||value=="" ||value.length<1)
		  {alert(alerttxt);return false;}
		else {return true}
	}
}



var MapIconMaker = {};
var _standardmarker ;
var _locationMarker ;
function initMapMarker(){
	MapIconMaker.createMarkerIcon = function(opts) {
		var width = opts.width || 32;
		var height = opts.height || 32;
		var primaryColor = opts.primaryColor || "#ff0000";
		var strokeColor = opts.strokeColor || "#000000";
		var cornerColor = opts.cornerColor || "#ffffff";
	
		var baseUrl = "http://chart.apis.google.com/chart?cht=mm";
		var iconUrl = baseUrl + "&chs=" + width + "x" + height + "&chco=" + cornerColor.replace("#", "") + "," + primaryColor.replace("#", "") + "," + strokeColor.replace("#", "") + "&ext=.png";
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = iconUrl;
		icon.iconSize = new GSize(width, height);	
		icon.shadowSize = new GSize(Math.floor(width * 1.6), height);
  		icon.iconAnchor = new GPoint(width / 2, height);

		icon.printImage = iconUrl + "&chof=gif";
		icon.mozPrintImage = iconUrl + "&chf=bg,s,ECECD8" + "&chof=gif";
		var iconUrl = baseUrl + "&chs=" + width + "x" + height + "&chco=" + cornerColor.replace("#", "") + "," + primaryColor.replace("#", "") + "," + strokeColor.replace("#", "");
		icon.transparent = iconUrl + "&chf=a,s,ffffff11&ext=.png";
	
		icon.imageMap = [
			width/2, height,
			(7/16)*width, (5/8)*height,
			(5/16)*width, (7/16)*height,
			(7/32)*width, (5/16)*height,
			(5/16)*width, (1/8)*height,
			(1/2)*width, 0,
			(11/16)*width, (1/8)*height,
			(25/32)*width, (5/16)*height,
			(11/16)*width, (7/16)*height,
			(9/16)*width, (5/8)*height
		];
		for (var i = 0; i < icon.imageMap.length; i++)
		{
			icon.imageMap[i] = parseInt(icon.imageMap[i]);
		}
		return icon;
	}
	_standardmarker = MapIconMaker.createMarkerIcon( {width:20, height:20, primaryColor:"#D58000FF", cornerColor:"#D6BD53FF", strokeColor:"#2A1111FF"} );
	_standard_sp_marker = MapIconMaker.createMarkerIcon( {width:20, height:20, primaryColor:"#8A5300FF", cornerColor:"#D6BD53FF", strokeColor:"#2A1111FF"} );
	_smallmarker = MapIconMaker.createMarkerIcon( {width:20, height:20, primaryColor:"#D58000FF", cornerColor:"#D6BD53FF", strokeColor:"#2A1111FF"} );
	_small_sp_marker = MapIconMaker.createMarkerIcon( {width:20, height:20, primaryColor:"#8A5300FF", cornerColor:"#D6BD53FF", strokeColor:"#2A1111FF"} );
	_locationMarker = MapIconMaker.createMarkerIcon( {width:32, height:40, primaryColor:"#9966ffFF", cornerColor:"#99ccffFF", strokeColor:"#2A1111FF"} );
	
	/* var icon = new GIcon();
     icon.image = siteUrl+"wp-content/themes/site/images/pret.png";
     icon.iconAnchor = new GPoint(16, 16);
     icon.infoWindowAnchor = new GPoint(16, 0);
     icon.iconSize = new GSize(32, 32);
   //  icon.shadow = "images/shadow.png";
    //    icon.shadowSize = new GSize(59, 32);
    //    ICONS[i] = icon;

	
	_pret_marker = icon;*/
}

function makeRequest(url, parameters)
{
 	jQuery.getJSON(url, parameters, ajaxCallBack );
}
	
function ajaxCallBack(data)
{
	widgetRating = widgetCategory = "all";
	widgetDataArray = data.items;
	if(widgetDataArray.length > 0)
	{
		widgetDataArray.sort(aSorting);
		if(widgetFullSize)
		{		
			widgetCategoryArray = data.catNames;
			categoryDropdown();
		}else{
			if( widgetDataArray.length == 1)
			{
				widgetMessage("1 place on the map");
			}else{
				widgetMessage(widgetDataArray.length + " places on the map");
			}
		}
		makeList("all", "all");
		//makeDetail(0);
	} else {
		clearMarkers();
		clearList();
		if(widgetFullSize)
		{
			jQuery("#category_dropdown").attr("disabled" ,"disabled") ;
			var tbl = document.getElementById("contentList");
			tbl.innerHTML = "<div style='padding:5px'>No places are listed in this area</div>";
		} else {
			widgetMessage("0 places listed in this area");
		}
	}
}

   
function mySorting(a,b) {
	a = a.distance;
	b = b.distance;
	return a == b ? 0 : (a < b ? -1 : 1)
}
function aSorting(a,b) {
	a = a.name;
	b = b.name;
	return a == b ? 0 : (a < b ? -1 : 1)
}
	
function findSimilar()
{
	if(mapInterval)
	{
		window.clearInterval(mapInterval);
	}
	
	checkStoreLocation();
	if(map && map.getZoom()<=15 && !firstLoad)
	{
		var t = document.getElementById('subText');
		if(t){
			//t.innerHTML = "Zoom in closer for updates. ";
		}
		return;
	}
	
	if(!map )
	{
		mapInterval = window.setInterval(findSimilar, 500);
	}else{
		do_xml();
		firstLoad = false;	
	}
}
   
var pMinLat = 0;
var pMaxLat = 0;
var pMinLng = 0;
var pMaaxLng = 0;
var pZoom = 0;
var lng_min = 0;
var lng_max = 0;
var lat_min = 0;
var lat_max = 0;
   
function do_xml() 
{
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();
	
	z = map.getZoom();	
	
	pMinLat = lng_min;
	pMaxLat = lng_max;
	pMinLng = lat_min;
	pMaxLng = lat_max;
	
	centre_lat = northEast.lat()-(latSpan/2);
	centre_lng = (southWest.lng()+(lngSpan/2));
	
	lng_min = southWest.lng();
	lng_max = southWest.lng()+lngSpan;
	lat_min = northEast.lat()-latSpan;
	lat_max = northEast.lat();
	
	var q = { long_min:lng_min, long_max:lng_max, lat_min:lat_min, lat_max:lat_max, z:z};
	makeRequest(siteUrl+'map_queryj', q);
}


function clearMarkers()
{
	postMarkers = [];
	map.clearOverlays();
	//setSubText(0,0,0);
}
   
function highlightMarker(id)
{
	for( var i in postMarkers )
	{
		if(postMarkers[i].marker)
		{
			if(postMarkers[i].id != id)
			{
				postMarkers[i].marker.hide();
			}else{
				postMarkers[i].marker.show();
			}
		}
	}
}

function resetMarker()
{
	for( var i in postMarkers )
	{
		if(postMarkers[i].marker)
		{
			postMarkers[i].marker.show();
		}
	}
}
   
function widgetMessage(str)
{
	var tbl = document.getElementById("map_list_message");
	if(tbl)
	{
	   tbl.innerHTML = str;
	}
}
   
   
   function makeList()
   {
	    hideDetails();
		finalListArray = [];
   		var l=widgetDataArray.length;
		var ar=[];
		for(var i=0;i<l;i++)
		{
			var m = (widgetCategory=="all");
			if(!m){
				var l2 = widgetDataArray[i].categoryID.length;
				for(var j =0; j<l2; j++){
					if(String(widgetDataArray[i].categoryID[j])==String(widgetCategory)){
						m=true;
					}
				}
			
			}
			
			if(m){
				ar.push(widgetDataArray[i]);
			}
		}
		l=ar.length;
		for(var i=0;i<l;i++){if(ar[i].rating>=widgetRating||widgetRating=="all"){finalListArray.push(ar[i])}};
		l=finalListArray.length;
		var str = "";
		for(var i = 0; i<l; i++)
		{
			var s = (finalListArray[i].star > 0);
			str += "<div id='list_" +i+ "' class='index_list_cell'";
			str += " onMouseOver='Javascript:overItem(this.id);' onMouseOut='Javascript:outItem(this.id);' onClick='Javascript:onListClick(" + i + ");'>";
				
			if(widgetFullSize)
			{
				if(s){ str += "<div class='index_list_cell_left'>"; }
				str += "<span class='map_list_name_title'>"+finalListArray[i].name+"</span> <br><span class='map_list_name_street'>"+finalListArray[i].street+"</span>";
				if(s){ 
					str += "</div><div class='index_list_cell_stars'>"; 
					str += getStars(finalListArray[i].star)
					str += "</div><div style='clear:left'></div>";
				}
			}else{
				str += "<div>"+finalListArray[i].name+"</div>";
				if(s){ 
					str += "<div  style='margin:1px 0 1px;'>"; 
					str += getStars(finalListArray[i].star);
					str += "</div>";
				}
			}	
			str += "</div>";
		}
		var tbl = document.getElementById("contentList");
		tbl.innerHTML = "<div style=' display: block;'>"+str+"</div>";
		clearMarkers();
		buildMarkers();
   }
   
function getStars(r)
{
	if(r>0)
	{
		if(r/2 != Math.round(r/2))
		{
			return  "<div id='rating_small' class='rating_"+Math.floor(r/2)+"_half_small'></div>";	
		}else{
			return "<div id='rating_small' class='rating_"+Math.floor(r/2)+"_small'></div>";	
		}
	}else{
		return "";	
	}
}

function clearList()
{
	var tbl = document.getElementById("contentList");
	tbl.innerHTML = "";
}

function getWidgetElement(){
	var w = document.getElementById("l_sidebar_flash");
	if(w)
	{
		return w;
	}
}

function showDetails(e)
{
	var lat = e.lat();
	var lng = e.lng();
	
	var l = widgetDataArray.length;
	for(var i =0; i<l; i++)
	{
		if( widgetDataArray[i].lat == lat && widgetDataArray[i].lng == lng)
		{
			makeDetail(i);
			break;
		}
	}
}
   
function hideDetails()
{
	var tbl = document.getElementById("widgetTable");
	tbl.style.display = '';
	var tbl = document.getElementById("widgetDetail");
	tbl.style.display = 'none';
}

   function makeDetail(id)
   {
	  // alert(id);
	   	var tbl = document.getElementById("widgetTable");
		tbl.style.display = 'none';

		tbl = document.getElementById("widgetDetail");
		tbl.style.display = '';

	  	var str = "";
		var obj = widgetDataArray[id];
		if(widgetFullSize)
		{
			str += "<div style='padding: 0 1px 0 4px'>";
			var s = (obj.star > 0);
			if(s){ str += "<div class='index_list_cell_left'>"; }
			str += "<span class='map_list_name_title'>"+obj.name+"</span> <br><span class='map_list_name_street'>"+obj.street+"</span>";
			if(s){ 
				str += "</div><div class='index_list_cell_stars'>"; 
				str += getStars(obj.star)
				str += "</div><div style='clear:left'></div>";
			}
			str += "</div>";
		}else{
			str += "<div style=' padding:0 3px 0 4px;'>"+obj.name+"</div>";
		}
		
		str += "<div style='margin: 4px 0 0; padding:0 5px 0 4px;'>";
			  		
   		if(widgetFullSize)
		{
				str += "<div style='display:inline; float:left; width:83px; height:75px;'><img width='75' height='75' style='border:1px solid #e8e8e8' src='"+siteUrl+"thumbimage?id="+obj.id+"'/></div>";	
				str += "<div class='map_description'>" + obj.description + "</div>";
				str += "</div><div style='clear:both'></div>";
		}else{
				str += "<div style='float:left; width:60px; height:58px;'><img width='50' height='50'  style='border:1px solid #e8e8e8' src='"+siteUrl+"thumbimage?id="+obj.id+"'/></div>";
				str += "<div style='float:left;  width:100px; margin-top:5px; line-height:130%; '><div style='margin-bottom:3px;'>" + obj.street +"</div>";
				if(obj.star/2!= Math.round(obj.star/2))
				{
					str += "<div id='rating_small' class='rating_"+Math.floor(obj.star/2)+"_half_small'></div>";	
				}else{
					str += "<div id='rating_small' class='rating_"+Math.floor(obj.star/2)+"_small'></div>";	
				}
				str += "</div><div style='clear:both'></div>";
				str += "<div class='map_description_small'>" + obj.description + "</div>";	
		}
		str += "</div>";
		tbl = document.getElementById("contentDetail");
 		tbl.innerHTML = "<div style='padding:2px 0;'>"+str+"</div>";
	}
   
   function overItem(id)
   {
   		var spl = id.split("_");
		changeColor(id, "#FFF9F9"); 
		highlightMarker(finalListArray[Number(spl[1])].id);
		
   }
   function outItem(id)
   {
	    changeColor(id, "#FFFFFF");
		resetMarker();
   }
   
function categoryDropdown()
{
	var str = "<div class='dropdown_wrapper'>";
	str += "<div style='#position: relative;'><div style='float:left; margin-right:20px;'  class='map_select'><select name='category' onchange='setCategory(this.value)' id='category_dropdown'><option value='all'>All categories</option>";
	var l = widgetCategoryArray.length;
	for(var i = 0; i<l; i++)
	{ 
		str += "<option value='"+i+"'>"+widgetCategoryArray[i].name+"</option>";
	}
	
	str += "</select></div>";
	
/*	var ratStr = "<div style='float:left;' ><select style='font-size:11px; width:85px'  name='rating' onchange='setRating(this.value)'><option value='all'>All ratings</option>";
	
	var l = widgetRatingArray.length;
	for(var i = 0; i<l; i++)
	{ 
		ratStr += "<option value='"+i+"'>"+widgetRatingArray[i][1]+"</option>";
	}
	
	ratStr += "</select></div></div><div style='clear:both'></div></div>";*/
	
	var tbl = document.getElementById("widgetHeader");
	tbl.innerHTML = "<div style='#position: relative; overflow: hidden; display: table; height:24px'>"+str +"</div>";
}
   
function setCategory(id)
{
	if(id=="all")
	{
		widgetCategory=id
	}else{
		widgetCategory=widgetCategoryArray[id].id
	}
	makeList();
}
	
function setRating(id)
{
	if(id=="all"){
		widgetRating=id
	}else{
		widgetRating=widgetRatingArray[id][0]
	}
	makeList()
}
	
	
function changeColor(id,color){element=document.getElementById(id);element.style.background=color;var spl=id.split("_")}

function onListClick(id)
{
   window.location = siteUrl+"?p="+widgetDataArray[id].id;
}
   
  
function dR(a){return(Math.PI/180)*a}function rD(a,b){var c=Math.pow(10,b);return Math.round(a*c)/c}function dH(b,e,f,g){var R=6371;var h=dR(f-b);var i=dR(g-e);b=dR(b),f=dR(f);var a=Math.sin(h/2)*Math.sin(h/2)+Math.cos(b)*Math.cos(f)*Math.sin(i/2)*Math.sin(i/2);var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));var d=R*c;return d}
   
   
function setMap()
{
	map = new GMap2(document.getElementById("map_canvas"));
	map.removeMapType(G_HYBRID_MAP);
	geocoder = new GClientGeocoder();
	bounds = new GLatLngBounds();		
}

function buildMarkers()
{
	var l = finalListArray.length;
	for(var i = 0; i<l; i++)
	{
		var o = finalListArray[i];
		addMarker(o.id, o.lat, o.lng, o.name, "", o.sp, o.marker);	
	}
}


function addMarker(id, long, lat, n, letter, sp, marker)
{
	if(n==null){
		n = "";
	}else{
		n = unescape(n);
	}
	
	if(testid == id && (letter== "" || letter == null))
	{
		var _icon = _locationMarker;
		var opt = { title : n, icon : _icon};
	}else{
		/*if(marker=="pret"){	
			var _icon = _pret_marker;
			var opt = { title : n, icon : _icon};
		}else */
		
		if(letter!=""){
			var _icon = new GIcon(G_DEFAULT_ICON);
			_icon.image = iconurl+letter+".png";
			var opt = { title : n, icon : _icon};
		}else{
			var _icon;
			if(map.getZoom() >= 17)
			{
				if(sp){
					_icon = _standard_sp_marker;
				}else{
					_icon = _standardmarker;
				}	
			}else {
				if(sp){
					_icon = _small_sp_marker;
				}else{
					_icon = _smallmarker;
				}
			}
			var opt = { title : n, icon : _icon};
		}
	}
	var obj = new Object()
	var point = new GLatLng(long,lat);
	var marker = new GMarker(point,opt );
	marker.name = n;
	marker.id = id;
	GEvent.addListener(marker, 'mouseover', function(e) {
		showDetails(e);
	});
	GEvent.addListener(marker, 'mouseout', function(e) {
		hideDetails();
	});
	map.addOverlay(marker);
	// marker.hide()
	obj.marker = marker;
	obj.id = id;
	postMarkers[id]= obj;
}
