var map_open_width = "654px";
var results_open_width = "198px";

var map;
var geocoder;
var groups = new Array();
var localSearch;

var typeFilter = -1;
var dayFilter = -1;

//create pin icon for users location
var blueIcon = new GIcon();
blueIcon.image = "http://maps.google.com/mapfiles/ms/icons/blue-pushpin.png";
blueIcon.shadow = "http://maps.google.com/mapfiles/ms/icons/msmarker.shadow.png";
blueIcon.iconSize=new GSize(32,32);
blueIcon.shadowSize=new GSize(56,32);
blueIcon.iconAnchor=new GPoint(10,32);
blueIcon.infoWindowAnchor=new GPoint(16,0);
var userMarker = new GMarker(new GPoint(0,0), {icon:blueIcon})

function createMap(){
  if (GBrowserIsCompatible()) {
	// Set up and configure map
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(52.466897,-1.925783), 12);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.enableScrollWheelZoom();
	
	map.addOverlay(userMarker);
	userMarker.hide();
	
	GEvent.addListener(map,"click",clickHandler);
	
	localSearch = new GlocalSearch();
	
	// Set up geocoder
	//geocoder = new GClientGeocoder();
	//geocoder.setBaseCountryCode("uk");
	//geocoder.setViewport(new GLatLngBounds(new GLatLng(51.428958,-0.299194), new GLatLng(51.61335,0.092146)) );
  }
}

function searchMap(address){
	openResultPanel();
	var results = document.getElementById('results');
	results.innerHTML = "Searching...";
	
	//geocoder.getLatLng(address + ", London", listResults);
	
	localSearch.setSearchCompleteCallback(null,
    function() {
      
      if (localSearch.results[0]) {    
        var resultLat = localSearch.results[0].lat;
        var resultLng = localSearch.results[0].lng;
        var point = new GLatLng(resultLat,resultLng);
        listResults(point);
      }else{
        alert("Address not found!");
      }
    });  
    
  localSearch.execute(address + ", Birmingham, UK");
	
}

function listResults(point){
	if (!point) {
		alert("Address not found");
	} else {
		map.panTo(point, 13);
		userMarker.setLatLng(point);
		userMarker.show();
		
		// calculate group distances
		for(var group in groups){
			var distance = point.distanceFrom(groups[group].getLatLng());
			groups[group].dist = distance/1.609344;
		}
		// sort groups based on distance
		groups.sort(sortByDistance);
		
		updateResultsList()
		
	}
}

function sortByDistance(a,b){
	return (a.dist-b.dist);
}

function showGroup(id){
	var group = groups[id];
	map.panTo(group.getLatLng());
	group.openInfoWindowHtml(group.infoHtml);
	
	selectLeadersToEmail(group.group_id)
}

function clickHandler(overlay,latLng){
	if(overlay && overlay.group_id != undefined){
		//alert(overlay.group_id);
		selectLeadersToEmail(overlay.group_id)
	}
}

function selectLeadersToEmail(id){
	var clg_leaders = document.getElementById('lifegroup_leaders');
	var group_options = clg_leaders.options;
	for(var i=0; i<group_options.length; i++){
		if(group_options[i].value == id){
			clg_leaders.selectedIndex = i;
		}
	}
}

function toggleResultPanel(){
	var results = document.getElementById("results");
	
	if(results.style.width == results_open_width){
		closeResultPanel();
	}else{
		openResultPanel();
	}
}
function openResultPanel(){
	var results = document.getElementById("results");
	var map_div = document.getElementById("map");
	var resultswitch = document.getElementById("resultswitch");
	results.style.width = results_open_width;
	map_div.style.width = map_open_width;
	resultswitch.innerHTML = "&lt;";
	map.checkResize();
}
function closeResultPanel(){
	var results = document.getElementById("results");
	var map_div = document.getElementById("map");
	var resultswitch = document.getElementById("resultswitch");
	results.style.width = "0";
	map_div.style.width = null;
	resultswitch.innerHTML = "&gt;";
	map.checkResize();
}

function filterType(type){
	typeFilter = type;
	updateResultsList();
}

function filterDay(day){
	dayFilter = day;
	updateResultsList();
}

function updateResultsList(){
	var numGroups = 0;
	for(var group in groups){
		if((dayFilter == -1  || groups[group].day == dayFilter) &&
		   (typeFilter == -1 || groups[group].type == typeFilter)
		  ){
				groups[group].show();
				numGroups++;
		}else{
			groups[group].closeInfoWindow();
			groups[group].hide();
		}
	}
	
	var results = document.getElementById('results');

	if(numGroups > 0){
		results.innerHTML = "";
		for(var group in groups){
			if(!groups[group].isHidden()){
				var dist_text = Math.round(groups[group].dist/100)/10;
				var result_text = "<div class='result'><a href=\"javascript:showGroup("+group+")\">"+groups[group].group_name+"</a><br/>"+groups[group].getTitle();
				if(!isNaN(dist_text)){ result_text += "&nbsp;<span class='distance'>"+dist_text+"mi</span>";}
				result_text += "</div>";
				results.innerHTML += result_text;
			}
		}	
	}else{
		results.innerHTML = "<div class=\"noresults\">There are no groups available with those requirements, please select different filters.</div>";
	}
}