// JavaScript Document

var polylineOverlays = new Array();
var markerOverlays = new Array();
var map;
var userpolyline;
var userpolyline_points=new Array();
var userpolyline_points_friendly = new Array();
var userpolyline_color="#FF0000";
var userSavedMarkers=[];
var userMarker=new Array();
var enableEdit=false;
var orig_lat='';
var orig_lng='';
var showhideroute=false;
var showhideroute_params=[];




function getImgSize(imgSrc){
	
	//var newImg = new Image();
	//newImg.src = imgSrc;
	//var height = newImg.height;
	//var width = newImg.width;
	//var ret=new Array(width,height);
	//return ret;
	
	function getWidthAndHeight() {
		alert("'" + this.name + "' is " + this.width + " by " + this.height + " pixels in size.");
		ret = new Array(this.width,this.height);
		return true;
	}

	function loadFailure() {
		alert("'" + this.name + "' failed to load.");
		return true;
	}
	
	var myImage = new Image();
	myImage.name = imgSrc;
	myImage.onload = getWidthAndHeight;
	myImage.onerror = loadFailure;
	myImage.src = imgSrc;

	//alert(ret[0] + 'x' + ret[1]);
	//var ret=new Array(myImage.width,myImage.height);
	return ret;

}


function showhideroute(routeid){
alert(routeid);
}

function showhiderouteo(routeid){
	for(x in polylineOverlays){
		if(polylineOverlays[x].isHidden()==false){
			polylineOverlays[x].hide();
		}
		
		if(x==routeid){
			polylineOverlays[x].show();	
		}
	}
}


function setUserPolylineColor(color){
	userpolyline_color=color;
}

function createMarker(ref, lat, long, myhtml, iconfile, icon_x, icon_y) {
	
	if(iconfile!=null){
		var myicon=createIcon(iconfile, icon_x, icon_y);
		var markeroptions = { icon:myicon }
	}else{
	  var myicon=createIcon('http://labs.google.com/ridefinder/images/mm_20_red.png',12,20);
	  var markeroptions = { icon:myicon }
	}
	
	var richspoint = new GLatLng(lat, long);
	var marker = new GMarker(richspoint, markeroptions);
										
	if(myhtml!=null){
		GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(myhtml);
		});
	}
	
	// Marker Editing
	if(showhideroute){
		GEvent.addListener(marker, "click", function(){showhideroute(ref); });
	}
	
	markerOverlays[ref]=marker;
	
	return marker;
}


function createTabbedMarker(ref, lat, long, htmls, labels, iconfile, icon_x, icon_y) {
	
	if(iconfile!=null){
		var myicon=createIcon(iconfile, icon_x, icon_y);
		var markeroptions = { icon:myicon }
	}else{
	  var myicon=createIcon('http://labs.google.com/ridefinder/images/mm_20_red.png',12,20);
	  var markeroptions = { icon:myicon }
	}
			
	var richspoint = new GLatLng(lat, long);
	var marker = new GMarker(richspoint, markeroptions);
										
	if(htmls!=null){
		GEvent.addListener(marker, "click", function() {	
    // adjust the width so that the info window is large enough for this many tabs
    if (htmls.length > 2) {
      htmls[0] = '<div style="width:'+htmls.length*100+'px">' + htmls[0] + '<\/div>';
    }
    var tabs = [];
    for (var i=0; i<htmls.length; i++) {
      tabs.push(new GInfoWindowTab(labels[i],htmls[i]));
    }
    
    var opts = new Object();
    opts.pixelOffset = new GSize(32,5);
    opts.maxWidth = 350; 
    marker.openInfoWindowTabsHtml(tabs, opts);
		});
	}
	
	// Marker Editing
	if(showhideroute){
		GEvent.addListener(marker, "click", function(){showhideroute(ref); });
	}
	
	markerOverlays[ref]=marker;
	
	return marker;

}




function removePolyline(line){
	map.removeOverlay(polylineOverlays[line]);	
}

function replacePolyline(line){
	map.addOverlay(polylineOverlays[line]);	
}

function createIcon(iconfile,x,y){
	iconfile=iconfile;
	var newicon = new GIcon(G_DEFAULT_ICON);
	//var newsize = getImgSize(iconfile);
	newicon.image = iconfile;
	newicon.iconSize = new GSize(x, y);
	var horiz_center=Math.round(x/2);
	newicon.iconAnchor = new GPoint(horiz_center,y);
	newicon.infoWindowAnchor = new GPoint(parseInt(horiz_center),parseInt(y));
	newicon.shadowSize = new GSize(0,0);
	
	return newicon;
}


function enableUserAddMarker() {
	GEvent.addListener(map,"click", function(overlay,point) {
	
	if(userMarker.length==0){
		userMarker.push([point.lat(),point.lng()]);
		
		var marker=createMarker("user",point.lat(), point.lng(),null,null,null,null);
		map.addOverlay(marker);
		document.getElementById('markerfield').disabled=false;
				document.getElementById('markerfield').disabled=false;

	}
	
	});
	
	
}

function keepMarker(id){
	
	userSavedMarkers.push(id);
	
	var markerlatlng = markerOverlays[id].getLatLng();

	map.removeOverlay(markerOverlays[id]);

	var marker = createMarker(id, markerlatlng.lat(), markerlatlng.lng(),"<p><strong>Interesting bit added to route, <br />you can insert a caption after you <br />save your route!</strong></p>", "images/mapping/icons/tick.gif",22,38);
	map.addOverlay(marker);
	
}

function saveRoute(){
	
}

function enableUserEdit() {
	enableEdit=true;
}

function enableUserAddPolyline() {
	
	
	GEvent.addListener(map,"click", function(overlay,point) {
		if(overlay==null){
			
	
			userpolyline_points.push(new GLatLng(point.lat(),point.lng()));
			userpolyline_points_friendly.push([point.lat(),point.lng()]);
			
			var pointKeepHTML = '<div id="user_' + userpolyline_points.length + '"><p style="font-weight:bold;">Add this interesting bit to your route?</p><p><a href="javascript:keepMarker(\'user_' + userpolyline_points.length + '\');">Yes</a></p><p>(By adding an interesting bit you can add a caption later!)</p></div>';
				
			var tempmarker = createMarker("user_" + userpolyline_points.length,point.lat(),point.lng(),pointKeepHTML,"images/mapping/icons/question.gif",'22','38');
			map.addOverlay(tempmarker);
			
			//alert(userpolyline_points.length);
			
			map.removeOverlay(userpolyline);
			delete userpolyline;
			userpolyline=new GPolyline(userpolyline_points,userpolyline_color,"10");
			map.addOverlay(userpolyline);	
			
			if(userpolyline_points.length > 1){
				document.getElementById('routeSaveButton').disabled=false;
			}
			
		}
	});
}

function enableEdit() {
	enableEdit=true;
}