// Copyright 2007 Chris Edwards 
// Please don't rip this code off without asking nicely!
// Thanks
   
//-----------------------------------------
var map;
var mapinit = false;
var dirns;
var homecode = "";
var count = 0;  
var lsize = 0;  
var prev  = 0;  
var pcode   = new Array();
var lat     = new Array(); 
var lng     = new Array(); 
var markers = new Array();
var region;
//var currentRegion = "All";
var currentRegion = "East Midlands";
var currentClub   = "";
var point;
var html;
var minlat;
var maxlat;
var minlng;
var maxlng;
var done;
var ListOfClubs;
var UnknownClubs;
var UCount;

var markerImage = [
G_DEFAULT_ICON.image,
"images/markeryellow.png"
];


var x;
var y;
var element;
var being_dragged = false;
function mouser(event){
	if(event.offsetX || event.offsetY) {
		x=event.offsetX;
		y=event.offsetY;
	}else{
		x=event.pageX;
		y=event.pageY;
	}
	if(being_dragged == true) {
		document.getElementById(element).style.left = x +'px';
		document.getElementById(element).style.top = y +'px';
	}
}

function mouse_down(ele_name) {
	being_dragged = true;
	element = ele_name;
	document.getElementById(element).style.cursor = 'move';
}

function mouse_up() {
	being_dragged = false;
	document.getElementById(element).style.top = y +'px';
	document.getElementById(element).style.left = x +'px';
	document.getElementById(element).style.cursor = 'auto';
}

//-----------------------------------------
function show(object) {
	if (document.layers && document.layers[object] != null)
	    document.layers[object].visibility = 'visible';
	else if (document.all)
	    document.all[object].style.visibility = 'visible';
}
//-----------------------------------------
function hide(object) {
	if (document.layers && document.layers[object] != null)
	    document.layers[object].visibility = 'hidden';
	else if (document.all)
	    document.all[object].style.visibility = 'hidden';
}

//-----------------------------------------
function show2(object) {
	if (document.layers && document.layers[object] != null)
	    document.layers[object].display = 'block';
	else if (document.all)
	    document.all[object].style.display = 'block';
}
//-----------------------------------------
function hide2(object) {
	if (document.layers && document.layers[object] != null)
	    document.layers[object].display = 'none';
	else if (document.all)
	    document.all[object].style.display = 'none';
}

//-----------------------------------------
function alerthtml(object) {
	    alert(document.all[object].innerHTML);
}

//-----------------------------------------
function getArgs() {
// Gets arguments supplied with the url
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split(",");
	for (var i = 0; i< pairs.length; i++) {
		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;
		var argname = pairs[i].substring(0,pos);
		var value = pairs[i].substring(pos+1);
		args[argname] = unescape(value);
	}
	return args;
}

//-----------------------------------------
function setup(i, cd, lt, lg) {
	pcode[cd] = i;
	lat[i]    = lt;
	lng[i]    = lg;
	return;
}

//--------------------------------------------------------------------------------
	function ChangeRegion     () {
		currentClub = "";
		for (k=0; k<document.MyForm.PickRegion.length; k++){
			if (document.MyForm.PickRegion[k].checked == true) {
				currentRegion = document.MyForm.PickRegion[k].value;
				document.all.whereami.innerHTML = "Please wait while the map loads data for trampoline clubs in " + RegionName();
				// show('Working');
				setTimeout("ListClubs(); Recentre();",10);   // Now list the clubs....
				return;
			}
		}
		return;
	}

//--------------------------------------------------------------------------------
	function directions(dest){
			dirns.clear();
			show2('directionDiv')
			document.getElementById("destination").value = dest.toUpperCase();
			document.getElementById("pcode").focus();
	}

//--------------------------------------------------------------------------------
	function gmap_geocode_postcode(postcode){
	    var s = document.createElement('script');
	    s.src = 'http://geo.localsearchmaps.com/?cb=gmap_map_postcode&use=google2&country=uk&zip=' + postcode;
	    s.type = 'text/javascript';
	    document.getElementsByTagName('head')[0].appendChild(s);
	}
	
//--------------------------------------------------------------------------------
	function gmap_map_postcode(lon, lat){
    try{
	    var dest = document.getElementById("destination").value;
	    var home = lon + "," + lat;
	    
		if (home && home != "") {
			dirns.load("from: " + home + " to: " + dest );
		}
	} catch(e) { }
	}


//--------------------------------------------------------------------------------
    function GetDirectionsXX(){
    // Directions from Postcode
    try{
	    var control = document.getElementById("pcode")
	    var home = control.value
			if (home && home != "") {
		   	gmap_geocode_postcode(home.toUpperCase());
			}
	} catch(e) { }
	}

    function GetDirections(){
    // Directions from Postcode
    try{
	    var control = document.getElementById("pcode")
	    var home = control.value
			if (home && home != "") {
			var geocoder = new GClientGeocoder();
  			geocoder.getLatLng(home, function(point) {
										      if (!point) {
										        alert(home+ " not found");
										      } else {
										        var dest = document.getElementById("destination").value;
										        dirns.load("from: " + point + " to: " + dest );
   			                        }
										    }
  									);
			}
	} catch(e) { }
	}

//--------------------------------------------------------------------------------
    function GetDirections2(){
    // Directions from centre of map
    try{
	    var dest = document.getElementById("destination").value;
	    var center = map.getCenter();
	    var home = center.lat() + "," + center.lng();
		 if (home && home != "") {
			dirns.load("from: " + home + " to: " + dest );
		}
	} catch(e) { }
	}


//--------------------------------------------------------------------------------
	function directions2(postcode){
	var temp;
		temp= prompt("Please enter the postcode to start from", homecode);
		if (temp && temp != "") {
			homecode = temp;
			dirns.load("from: " + homecode + " to: " + postcode);
			//show('directionDiv')
			show2('directionDiv')
		}
	}
	
//--------------------------------------------------------------------------------
	function NoShowClub(name, details) {
		if (currentClub == "" || currentClub == name ) {
			if (currentRegion == "All" || currentRegion == region) {
				UCount = UCount + 1;
				var highlight = ' onMouseOver="this.style.background=' + "'#D9F38C'" + '" onMouseOut="this.style.background=' + "'#99B3CC' " + '"';
				if(UCount % 2 > 0) {
					UnknownClubs = UnknownClubs + '<tr><td title="' + details + '"' + highlight + ' class="list">' + name + '</td>';
				} else {
					UnknownClubs = UnknownClubs +     '<td title="' + details + '"' + highlight + ' class="list">' + name + '</td></tr>';
				}
			}
		}
		return;
	}
	
//--------------------------------------------------------------------------------
	function ShowClub(name, details) {
		if (currentRegion == "All" || currentRegion == region) {
		 var p = details.indexOf(".");
		 var q = details.lastIndexOf(" ", p-5);
		 var postcode = details.slice(q+1,p);
		 p = name.indexOf(">");
		 if (p > 2) {
		 	var url = name.slice(0,p) + '><b><span style="color:#DD0066">' + name.substr(p+1) + "</span></b></a><br>";
		 	//alert(":: " + url);
		 	name = name.substr(p+1);
		 } else {
		 	var url = "<b>" + name + "</b><br>";
		 }
		 if (currentClub == "" || currentClub == name ) {
			 var nxt = count + 1;
			 url = url + '<span style="color:#00AA44">Region: ' + region + "</span><br>";
			 ShowClubX(name, details, postcode, url);
			 if (nxt == count) { // Added ok
				 var evt  = " onClick=    'GEvent.trigger(markers[" + nxt + '],"click")'     + "'";
				 var evt2 = " onMouseOver='GEvent.trigger(markers[" + nxt + '],"mouseover")' + "'";
				 var evt3 = " onMouseOut= 'GEvent.trigger(markers[" + nxt + '],"mouseout")'  + "'";
				 if(count % 2 == 0) {
				 	ListOfClubs = ListOfClubs +     '<td width="50%" id="k' + nxt + '"' + evt + evt2 + evt3 + ' class="list">' + name + '</td></tr>';
				 } else {
				 	ListOfClubs = ListOfClubs + '<tr><td width="50%" id="k' + nxt + '"' + evt + evt2 + evt3 + ' class="list">' + name + '</td>';
				 }
			} else {
				NoShowClub(name, details);
			}
		 }
	 }
	 return;
	}


//--------------------------------------------------------------------------------
	function ShowClubX(name, details, postcode, url) {
		var j = pcode[postcode];
		var dest = postcode;
		if (j>0){
		   dest = lat[j] + "," + lng[j];
		}
		var html = url + details;
		html = html.replace(/[,;]/g,"<br>");
		html = html.replace(/email[\s]*([\S]*)/g,"<a href=\"mailto:$1\"><font color=\"#DD0066\">email $1</font></a>");
		html = html.replace(/i:/,"<br>More information:<br><font color=\"#558899\">");
		html = html.replace(/:i/,"</font>");
		html = "<font size=1>" + html + "</font>";
		
		html = html + "<br/><font size=1 color='#00AA33'><span style='cursor:hand' onclick='directions(" + '"' + dest + '"' + ")'>Click here for Directions</span></font>"
		html = "<div class='info'>" + html + "</div>"; 
		
	  	if ( j > 0) {
			try {
	  	   var latv = parseFloat(lat[j]);
	  	   var lngv = parseFloat(lng[j]);
	  		if (latv  > maxlat) maxlat = latv ;
	  		if (latv  < minlat) minlat = latv ;
	  		if (lngv  > maxlng) maxlng = lngv ;
	  		if (lngv  < minlng) minlng = lngv ;
	 		count = count + 1;
			markers[count] = new GMarker(new GLatLng(latv, lngv), { title : name });
			markers[count].bindInfoWindowHtml(html);
			var mk = markers[count];  // need to disconnect it for the callback function
			var k = count;
			GEvent.addListener(markers[count],'mouseover',function(){try{mk.setImage(markerImage[1]); document.getElementById("k"+k).style.background="#D9F38C"}catch(e){}});
			GEvent.addListener(markers[count],'mouseout' ,function(){try{mk.setImage(markerImage[0]); document.getElementById("k"+k).style.background="#99B3CC"}catch(e){}});
			map.addOverlay(mk);
			} catch(e){}
		} // else { alert(postcode) }
	}  	 

//--------------------------------------------------------------------------------
	function Recentre() {
		var x, y, z ;
		x = (minlng + maxlng) / 2;
		y = (minlat + maxlat) / 2;
		if (currentClub != "") { 
			z = 13;
		} else {
		   // alert(currentRegion)
			switch (currentRegion) {
				case "All" :
					x = -3.7;
					y = 54.5;
					z = 6; break;
				case "Scotland" :
					z = 6;  break;
				case "East Midlands" :
				case "Eastern" :
				case "Southern" :
				case "Northern" :
				case "South East" :
				case "South West" :
				case "North West" :
				case "Wales" :
					z = 8; break;
				case "London" :
					z = 10; break;
				default :
					z = 9;
			}
		}
	   map.setCenter(new GLatLng(y,x), z);
	   if (count == 1) { GEvent.trigger(markers[1],"click")}
		return;
	}	

//--------------------------------------------------------------------------------
  	function ShowMap(){
		done = false;
		InitCodes();  // Sets up the local cache of postcode location lookups
		
		var args = getArgs();
		if (args.region) {
			currentRegion = args.region;
		}
		if (args.club) {
			currentClub = args.club;
			currentRegion = "All";
		}
		for (var k=0; k<document.MyForm.PickRegion.length; k++){
			if (document.MyForm.PickRegion[k].value == currentRegion) { document.MyForm.PickRegion[k].checked = true;}
		}
		
		// Now list the clubs and zoom/centre to the region
		document.all.whereami.innerHTML = "Please wait while the map loads data for clubs in " + RegionName();
		//show('Working');
		setTimeout("ListClubs(); if (currentRegion != 'All' || currentClub != '') Recentre()",10);   
		return;
	}


//--------------------------------------------------------------------------------
	function RegionName() {
		var name;
		switch (currentRegion) {
		case "All": 
			name = "all regions"  ; break;
		case "Scotland": 
		case "Wales": 
		case "Northern Ireland": 
			name = currentRegion ; break;
		default:
			name = "the " + currentRegion + " region"
		}
		return name;
	}
	
