var servLang = ".aspx";
//var servLang = ".php";
var fetchFile = "fetch/fetch" + servLang;
var mainmap = null;
var recordon = true;
var waypoints = [];
var markers = [];
var distances = [];
var points_miles = [];
var currdistance = 0;
var close_path = false;
var clicked = null;
var sitebase = "/dev/pedometer/";
var loggedsaved = false;
var poly;
var loading = false;
var dataload = false;
var newroute = null;
var delid = null;

var route_data = [];

//Max length of 250 KM
var max_path_length = 250000;



var tooltip = null;
var rounding_digit = 3;
var linecolor = "#ff9933";

// ICONS ---------------------------------------
var iconwayPoint = new GIcon();
iconwayPoint.image = 'images/waypoint.png';
iconwayPoint.iconSize = new GSize(8, 8);
//iconwayPoint.shadowSize = new GSize(6, 6);
iconwayPoint.iconAnchor = new GPoint(2, 4);
iconwayPoint.infoWindowAnchor = new GPoint(5, 1);

var iconStart = new GIcon();
iconStart.image = 'images/dd-start.png';
iconStart.iconSize = new GSize(12, 20);
//iconwayPoint.shadowSize = new GSize(6, 6);
iconStart.iconAnchor = new GPoint(6, 20);
iconStart.infoWindowAnchor = new GPoint(5, 1);

var iconEnd = new GIcon();
iconEnd.image = 'images/dd-end.png';
iconEnd.iconSize = new GSize(12, 20);
//iconwayPoint.shadowSize = new GSize(6, 6);
iconEnd.iconAnchor = new GPoint(6, 20);
iconEnd.infoWindowAnchor = new GPoint(5, 1);

var iconStartStop = new GIcon();
iconStartStop.image = 'images/dd-start-stop.png';
iconStartStop.iconSize = new GSize(12, 20);
//iconwayPoint.shadowSize = new GSize(6, 6);
iconStartStop.iconAnchor = new GPoint(6, 20);
iconStartStop.infoWindowAnchor = new GPoint(5, 1);

var greenIcon = new GIcon();
greenIcon.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
greenIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
greenIcon.iconSize = new GSize(12, 20);
greenIcon.shadowSize = new GSize(22, 20);
greenIcon.iconAnchor = new GPoint(6, 20);
greenIcon.infoWindowAnchor = new GPoint(5, 1);

var yellowIcon = new GIcon();
yellowIcon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
yellowIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
yellowIcon.iconSize = new GSize(12, 20);
yellowIcon.shadowSize = new GSize(22, 20);
yellowIcon.iconAnchor = new GPoint(6, 20);
yellowIcon.infoWindowAnchor = new GPoint(5, 1);

var orangeIcon = new GIcon();
orangeIcon.image = "http://labs.google.com/ridefinder/images/mm_20_orange.png";
orangeIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
orangeIcon.iconSize = new GSize(12, 20);
orangeIcon.shadowSize = new GSize(22, 20);
orangeIcon.iconAnchor = new GPoint(6, 20);
orangeIcon.infoWindowAnchor = new GPoint(5, 1);

var customIcons = [];
customIcons["waypoint"] = iconwayPoint;
customIcons["distancemarker"] = yellowIcon;
customIcons["finder"] = orangeIcon;
customIcons["end"] = iconEnd;
customIcons["start"] = iconStart;
customIcons["startend"] = iconStartStop;

// ******************************************************
// START OF PAGE LOADING FUNCTIONS ----------------------
// ******************************************************

var sel = 0;
$().ready(function() {
		load();

		if($.query.get('route') != ""){
			loading = true;
			showBusy();
			getRoute($.query.get('route'));
			selectTab(1);
			$("#routecreate").show();
		}else{
			selectTab(0);
			$("#routecreate").hide();
		}



		$("#tabsEx1 > ul").tabs({
		    selected: sel
		});
		
		if(loggedin){
			 loginExec();
		}



	jQuery.validator.addMethod("nospaces", function(value) {
		if(jQuery.trim(value) == ""){
			return true;
		}else{
			return (value.indexOf(" ") >= 0) ? false : true;
		}
	}, "Please enter a value without spaces");

	jQuery.validator.addMethod("nospecialchars", function(s) {
		if(jQuery.trim(s) == ""){
			return true;
		}else{

			var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?~`";
		  for (var i = 0; i < s.length; i++) {
		  	if (iChars.indexOf(s.charAt(i)) != -1) {
		  	return false;
		  	}
		  }
		  return true;

		}
	}, "Please enter a value without special characters.");



	var v1 = $(".jvalidate").validate({
		submitHandler: function(form) {

			var fid = $(form).attr("id");
			//alert(fid);
			switch (fid){
			case "form-login":
				jQuery(form).ajaxSubmit({
					beforeSubmit: presubmitAdminLogin,
		      success: submitLogin,  // post-submit callback
		      error: errorresponse,
					resetForm: false
				});
			  break;
			case "form-addroute":
				jQuery(form).ajaxSubmit({
					beforeSubmit: presubmitAddRoute,
		      success: submitAddRoute,  // post-submit callback
		      error: errorresponse,
					resetForm: false
				});
			  break;
			default:
			}

		},
	  rules: {
			comment: {
				required: false,
				maxlength: 2500
			}
	  }
	});


	$('#form-signup').validate({
	  rules: {
	    'signup-password': "required",
	    'signup-confpassword': {
	      equalTo: "#signup-password"
	    }
	  }
	});

});

function selectMainMenu(prefix, currpage){

	if(prevpage != ("#"+prefix+currpage)){
		$("#"+prefix+currpage).addClass("selected");
		if(prevpage !=""){
			$(prevpage).removeClass("selected");
		}
		prevpage ="#"+prefix+currpage;
	}
}

function presubmitAdminLogin(){
	//$('#m-adminlogin').html("");
	$('#loading-login').removeClass("hidden");
}

function msgresponse(data, thediv, erroraction, successdiv, anaction, callback){
  if (typeof anaction == "undefined") {
    anaction = "";
  }

  if (typeof erroraction == "undefined") {
    erroraction = "";
  }

  if (typeof callback != "function") {
    callback = false;
  }

	var displaydiv = null;
	var mess = "";
	var theaction = null;
	try{
		data = JSON.parse(data);


		if(data.err != ''){
			mess = data.err;
			if(typeof(mess) != "string"){
				mess = formatErrs(mess);
			}
			displaydiv = thediv;
			theaction = erroraction;

		}else{
			mess = data.msg;
			displaydiv = successdiv;
			theaction = anaction;
		}

		if(theaction == ""){
			clearMessages();
			$('#'+displaydiv).show();
			$('#'+displaydiv).html(mess);
		}else if(theaction == "redirect"){
			window.location = mess;
		}else if(theaction == "debug"){
			alert(mess);
		}


		if(callback != false){
			callback(data);
		}


	}catch(err){
		var txt = err + "\n\n";
	  txt += data;
	  alert(txt);
	}

}


function loginExec(){		
		$("#login-container").slideUp("fast");
		$("#logout-container").show();		
		showUserRoutes();
}

function showUserRoutes(){
	//alert(route_data.length);
	
	if(route_data){	
		var htmlres = "";					
		for(var c = 0; c < route_data.length; c++){
			//alert(route_data[c].name);
			
			var theurl = encodeURIComponent('http://www.tryevents.ca/pedometer/?route='+route_data[c].route_id);
			var urlname = encodeURIComponent(route_data[c].name);
			
			var aclass = (c % 2) ? " row-alt" : "";
			htmlres+='<div id="userrow-'+route_data[c].route_id+'" class="row'+aclass+'"><div class="sr-left"><h4><a href="index.php?route='+route_data[c].route_id+'">'+route_data[c].name+'</a></h4><p>'+route_data[c].location+'</p></div><div class="sr-right"><h4>'+roundDec((route_data[c].rlength/1000), 1)+'</h4><div class="km">km</div></div><br class="clearfloat" /><div id="profile-links"><a href="javascript:void(0)" onclick="deleteRoute(\'userrow-'+route_data[c].route_id+'\',\''+escapeChars(route_data[c].name)+'\')">Delete Route</a> &nbsp; <a href="mailto:?subject=TRYEVENTS Route - '+urlname+'&body='+theurl+'" onclick="">Send to Friend</a></div></div>';
		}
		if(!isNaN(route_data.length)){
			$("#routes-found").html(route_data.length +"");
		}
	}

	$("#routes-results").slideDown();	
	$("#routes-result-data").html(htmlres);	
	$("#response-msg-3").show();
	$("#response-msg-3").html("Welcome back: " + loggedusername);
}

function escapeChars(str){
	 str = str.replace(/\'/g, "&#39;");
   str = str.replace(/\"/g, "&#34;");
   str = str.replace(/&/g, "&amp;");   
   return str;
}

function loginsuccess(data){
	if(data.err == ""){
		var d = data.msg;
		route_data = (data.payload == "") ? [] : data.payload;
		loggedin = true;
		loggedinid = parseInt(data.msg.user_id);
		loggedusername = d.username;
		loginExec();		
	}else{
		$("#response-err-3").show();
		$("#response-err-3").html("Invalid Username or Password");
	}
}

function resetResponse(data){
	var theemail = data.payload;
	if(data.err == ""){
		$("#response-msg-3").show();
		$("#response-msg-3").html("Password sucessfully sent to your e-mail ("+theemail+").");
	}else{
		$("#response-err-3").show();
		$("#response-err-3").html("The e-mail ("+theemail+") could not be found in our records.");
	}
};

function submitPasswordReset(){
	var formvalid = $('#form-resetpassword').valid();
	
	if(formvalid){
		var scriptdir = sitebase + "route.php";
		$.post(scriptdir,
		  {
		  	'action' : 'resetpassword',
		  	'email': $('#reset-email').val()
		  },
		  function(data){
				msgresponse(data,"message-err-","","message-errsuccess","", resetResponse);
		  }
		);
	}
}

function submitLogin(){
	$('#loading-login').addClass("hidden");
		var scriptdir = sitebase + "route.php";
		$.post(scriptdir,
		  {
		  	'action' : $('#loginaction').val(),
		  	'username': $('#username').val(),
		  	'password': $('#password').val()
		  },
		  function(data){
				msgresponse(data,"message-err-","","message-errsuccess","",loginsuccess);
		  }
		);
}

function showReset(){
	$("#form-resetpassword").show();
	$("#form-signup").hide();
	$("#form-login").hide();
}

function showSignup(){
	$("#form-signup").show();
	$("#form-login").hide();
	$("#form-resetpassword").hide();
}

function showLogin(){
	$("#form-signup").hide();
	$("#form-login").show();
	$("#form-resetpassword").hide();
}

function submitSignup(){
	var formvalid = $('#form-signup').valid();
	
	if(formvalid){
	$('#loading-login').addClass("hidden");
		var scriptdir = sitebase + "route.php";
		$.post(scriptdir,
		  {
		  	'action' : "signup",
				'signup-username' : $("#signup-username").val(),
				'signup-password' : $("#signup-password").val(),
				'signup-confpassword' : $("#signup-confpassword").val(),
				'signup-email' : $("#signup-email").val(),
				'signup-name' : $("#signup-name").val(),
				'signup-city' : $("#signup-city").val(),
				'signup-province' : $("#signup-province").val(),
				'signup-country' : $("#signup-country").val()
		  },
		  function(data){		  	
				msgresponse(data,"message-err-3","","message-errsuccess-3","",loginsuccess);
		  }
		);
	}
	

}


function outputWay(){
	$('#message-success').html("Way: " + waypoints);

	var r = [];
	for(var i =0; i< points_miles.length; i++){
			r.push(points_miles[i].getPoint());
	}

	$('#message-err').html("Err: " + r);
}

function presubmitAddRoute(){
	//$('#m-adminlogin').html("");
	alert(formatPoints());
	$('#loading-login').removeClass("hidden");
}



function submitRoute(){
	var routevalid = $('#form-addroute').valid();

		if(routevalid){
			var scriptdir = sitebase + "route.php";
			var aname = $("#name").val();
			var aloc = $("#location").val();
			var adescrip = $("#rdescription").val();
			var theaction = $("#routeaction").val();
			var therid = $("#rid").val();
			
			displayRouteInfo(aname, aloc, adescrip);
	
			//alert(aname+ " = "+ aloc +" = " +adescrip);
	
			$.post(scriptdir,
			  {'waypoints' : formatPoints(),
			  	'name': aname,
			  	'location': aloc,
			  	'rdescription':adescrip,
			  	'path_length': currdistance,
			  	'rid' : therid,
			  	'action' : theaction},
			  function(data){
			  		
					newroute = new Object();				
					newroute.route_id = therid;
					newroute.name = aname;
					newroute.location = aloc;
					newroute.rlength = currdistance;
					newroute.description = adescrip;
			  	
					msgresponse(data,"response-err-2","","response-msg-2","", updateSave);
			  }
			);
	}


}

function findRouteIndex(theid){
	for(var i =0; i< route_data.length; i++){
			if(theid == route_data[i].route_id)
				return i;
	}
	
	return false;
}

function updateSave(data){
	if(data.err == ''){		
		var i;
		
		if(newroute.route_id != ''){
			var tempi = findRouteIndex(newroute.route_id);
			i = (tempi === false) ? 0 : tempi;
		}else{
			i = route_data.length;
			//alert(data.payload + " - " + newroute.name);
			newroute.route_id = data.payload;
		}

		route_data[i] = newroute;
		newroute = null;
		showUserRoutes();
		clearAddForm();
	}
}

function clearAddForm(){
	$("#name").val("");
	$("#location").val("");
	$("#rdescription").val("");
}

function showLogged(){
	$("#loggedbuttons").show();
}

function load() {

    if (GBrowserIsCompatible()) {
        mainmap = new GMap2(document.getElementById("map"), {draggableCursor:"auto", draggingCursor:"move"});
				mainmap.addControl(new GLargeMapControl()); // Zoom control
				mainmap.addControl(new GMapTypeControl()); // Toggle between map types
				mainmap.addControl(new GScaleControl()); // Scale bar
        mainmap.setCenter(new GLatLng(49.270, -123.135), 13);
        //mainmap.setMapType(G_SATELLITE_TYPE);
        loadListener();
        makeTooltip();
    }



};

function overlayError(mess){
	$("#map-loading-text").html(mess);
	$("#map-loading-image").hide();	
	$("#map-loading").show();
};

function showBusy() {
	$("#map-loading-text").html("Loading...");
	$("#map-loading").show();
	$("#map-loading-image").show();	
};

function hideBusy() {
	$("#map-loading").hide();
};

function displayRouteInfo(rname, loc, descrip){
	$("#route-name").html(rname);
	$("#route-location").html(loc);
	$("#route-description").html(descrip);
};

function updateRouteForm(rname, loc, descrip){
	$('#name').val(rname);
	$('#location').val(loc);
	$('#rdescription').val(descrip);
};

function getRoute(rid){
		var scriptdir = sitebase + "route.php";
		$.post(scriptdir,
		  {'rid' : rid, 'action' : "get"},
		  function(data){
				//msgresponse(data,"message-err","message-success");

				//try{

					data = JSON.parse(data);
					//alert(data.payload.name);
					var pay = data.payload;
					displayRouteInfo(pay.name,pay.location,pay.description);
					updateRouteForm(pay.name,pay.location,pay.description);


					data = data.msg;
					
					if(data.length > 0){
						
						//set flag for loading up data
						dataload = true;
						
						var wp = [];
						var item;
						for(var i = 0; i < data.length; i++){
							item = data[i];
							var point = new GPoint(parseFloat(item.coord_x), parseFloat(item.coord_y));

							if(i == data.length-1){
								if((data[0].coord_x == data[i].coord_x) && (data[0].coord_y == data[i].coord_y)){
									close_path = true;
									point = null;
								}
							}
							
							var endpoint = (i == (data.length - 1)) ? true : false;
							addWayPoint(point, endpoint);
						}

						$("#routeaction").val("update");
						$("#rid").val(pay.route_id);
						$("#button2").val("Update Route");
						

						if(pay.user_id == loggedin){
							showLogged();
						}
						
						if(loggedinid == pay.user_id){
							enableAdd();
						}else{
							showNotOwner();
							disableAdd();
						}

						mainmap.setCenter(new GLatLng(waypoints[0].y, waypoints[0].x), 14);
					
						//reset flag for loading up data
						dataload = false;
						
						redrawPath(waypoints);
						hideBusy();
					}else{
						overlayError("Error: Route Does not Exist.");
					}


				/*}catch(err){
					var txt = err + "\n\n";
				  txt += data;
				  alert(txt);
				}*/
		  }
		);
}

function showNotOwner(){
	$("#routeadd").hide();
	if(!loggedin){
		$("#response-err-2").html("You cannot edit this map since you are not currently logged in.");
	}else{
		$("#response-err-2").html("You cannot edit this map since you are not the creator.");
	}
		$("#response-err-2").show();		
}

function disableAdd(){
	recordon = false;
	$("#menu-test").hide();
}

function enableAdd(){
	recordon = true;
	$("#menu-test").show();
}

function redrawPath(wpts){
		if(poly && !dataload) mainmap.removeOverlay(poly);

	  poly = new GPolyline(wpts, linecolor, 2, 1);
	  
	  if(!dataload)
	  mainmap.addOverlay(poly);
}

function makeMenu(){

    var menudiv = document.createElement("div");
    menudiv.id ='menu-test';
    menudiv.innerHTML ='<div><a href="javascript:void(0)"><img src="images/button_undo.png" id="button-undo" onclick="undoPoint()" /></a><a href="javascript:void(0)"><img src="images/button_clear.png" onclick="resetMap()" id="button-clear" /></a></div>';
		mainmap.getContainer().appendChild(menudiv);


	$('#'+menudiv.id).draggable(
	{
		containment: "#map",
		opacity: .5
	} );
	$('#'+menudiv.id).css('opacity',0.92)

	//alert($('#'+menudiv.id).parent().css("width") + " - " + $('#'+menudiv.id).parent().css("height"));
}

function makeTooltip(){
 tooltip = document.createElement("div");
 tooltip.className="tooltip";
 mainmap.getPane(G_MAP_MARKER_PANE).appendChild(tooltip);
 makeMenu();
};

function makeSignup(){
 	var aform;
 	aform = document.createElement("div");
 	aform.id="signup";
	mainmap.getPane(G_MAP_MAP_PANE).appendChild(aform);
	$("#signup").html('<div style="height: 150px; width: 150px; display:block; position: absolute; background-color: orange;"></div>')
}

function loadListener(){
		mainmap.disableDoubleClickZoom();
		GEvent.bind(mainmap, "click", this, this.addPoint);
};

function addPoint(overlay, point){

	if(recordon){
			addWayPoint(point);
	}
};

function changeIcon(){
	var m = markers.pop();
	var marker = new GMarker(m.getPoint(), {icon: customIcons["waypoint"], draggable:false, bouncy:false });
	marker.tooltip = m.tooltip;
  mainmap.removeOverlay(m)
  mainmap.addOverlay(marker)
  markers.push(marker);
  attachPointEvent(marker);
};

var nullclick = false;
function attachPointEvent(marker){
  GEvent.addListener(marker, "mouseover", function() {
  	showTooltip(marker);
  });

  GEvent.addListener(marker, "mouseout", function() {
  	tooltip.style.display = "none";
	});

  GEvent.addListener(marker, "drag", function() {

  });

  GEvent.addListener(marker, "click", function() {
  	if(markerExists(marker)){
  		//close the path now
  		close_path = true;
  		clicked = marker;
  	}
	});
}

function markerExists(m){
	for(var i = 0; i < markers.length; i++){
		if(markers[i] === m)
			return true;
	}	
	return false;
}

function addWayPoint(point, endpoint){

	if(endpoint === undefined){
		endpoint = false;
	}

	var pathwasclosed = false;
	var anicon;
		
	if(!point && close_path){
		//point = (clicked != null) ? clicked.getLatLng() : waypoints[0];
		point = waypoints[0];
		close_path = false;
		//recordPath('startpoints');
		//alert("closed");
		pathwasclosed = true;
	}

	if(pathwasclosed){
		anicon = customIcons["startend"];
		changeIcon();
	}else if(waypoints.length < 1){
		anicon = customIcons["start"];
	}else{
		anicon = customIcons["end"];

		if(waypoints.length > 1)
			changeIcon();
	}

	var marker = new GMarker(point, {icon: anicon, draggable:false, bouncy:false });

	waypoints.push(point);
	attachPointEvent(marker);

	mainmap.addOverlay(marker);
	markers.push(marker);
	marker.tooltip = "";
	addUndo();
	addPath(waypoints, marker, pathwasclosed);
	
	if(endpoint || !loading)
		drawDistanceMarkers();
	//outputWay();

};

function addUndo(){
	if(waypoints.length > 0){
		$('#button-undo').show();
		$('#resetmap').show();
	}
};

function undoPoint(){
	var deleted_point = markers.pop();
	var deleted_waypoint = waypoints.pop();

	mainmap.removeOverlay(deleted_point);

	if(deleted_waypoint != null){
		redrawPath(waypoints);
	}


	if(waypoints <= 0){
		//$('#button-undo').hide();
	}


	distances.pop()
	if(distances.length-1 >= 0)
		currdistance = distances[distances.length-1];
	else
		currdistance = 0;
	updateLength();
	drawDistanceMarkers();
};



function addPath(waypoints, marker, pathwasclosed){

	if(waypoints.length > 1) {
		
		
		redrawPath(waypoints);
	  //var poly = new GPolygon(waypoints, "#ff0000", 2, 1);
	  var plength = poly.getLength();

	  	currdistance = plength;
		  distances.push(plength);	  
		  updateLength();
		  var t_dist = (distances.length > 1) ? distances[distances.length-1] - distances[distances.length-2] : distances[distances.length-1];
		  t_dist = t_dist/1000;
	
		  if(pathwasclosed)
		  marker.tooltip = "Origin/End Point - Distance from last point: " + roundDec(t_dist,rounding_digit) + "km";
		  else
		  marker.tooltip = "Point "+distances.length+ " - Distance from last point: " + roundDec(t_dist,rounding_digit) + "km";
		
		if(plength > max_path_length){
			alert("Please shorten the length of your path. It cannot exceed "+(max_path_length/1000)+ " Km.");
			undoPoint();
		}

	}else{
		marker.tooltip = "Point of Origin";
	}

};

function updateLength(){
	var mi_factor = 0.621371192;

	var km = currdistance/1000;
	var miles = km * mi_factor;
	$("#currentdistance").html(roundDec(km,rounding_digit) + "km - " + roundDec(miles,rounding_digit) + "mi");
};

function deleteroutesuccess(data){
	if(data.err == ""){
		//$("#"+delid).remove();
		var theid = delid.split("-");
		theid = theid[1];				
		route_data.splice(findRouteIndex(theid), 1);
		showUserRoutes();
		
		delid = "";
	}
}

function deleteRoute(rid, rname){
	if (confirm('Are you sure you want to delete "'+ rname +'"?\n')) {
		
		
		var theid = rid.split("-");
		theid = theid[1];
		delid = rid;
				
		var scriptdir = sitebase + "route.php";			
		$.post(scriptdir,
		  {
		  	'action' : "deleteroute",
		  	'rid': theid
		  },
		  function(data){		  
		  	//alert(data);	
				msgresponse(data,"message-err-3","","message-errsuccess-3","",deleteroutesuccess);
		  }
		);
			
	}
};

function resetMap(){
	if (confirm('Are you sure you want to clear all the points on your route?\n')) {
		resetVals();
		mainmap.clearOverlays();
	}
};

function resetVals(){
	/*recordon = false;*/
	waypoints = [];
	markers = [];
	distances = [];
	currdistance = 0;
	close_path = false;
	updateLength();
};

function roundDec(num, dec) {
	var n = Math.pow(10,dec);
	return Math.round(num*n)/n;
}

function showTooltip(marker) { // Display tooltips

 tooltip.innerHTML = marker.tooltip;
 tooltip.style.display = "block";

 // Tooltip transparency specially for IE
 if(typeof(tooltip.style.filter) == "string") {
 tooltip.style.filter = "alpha(opacity:70)";
 }

 var currtype = mainmap.getCurrentMapType().getProjection();
 var point= currtype.fromLatLngToPixel(mainmap.fromDivPixelToLatLng(new GPoint(0,0),true),mainmap.getZoom());
 var offset= currtype.fromLatLngToPixel(marker.getLatLng(),mainmap.getZoom());
 var anchor = marker.getIcon().iconAnchor;
 var width = marker.getIcon().iconSize.width + 6;
// var height = tooltip.clientHeight +18;
 var height = 10;
 var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y - height));
 pos.apply(tooltip);

};

function findLocation() {
    var geocoder = new GClientGeocoder();
    address = $("#addressloc").val();
    geocoder.getLatLng(address,
    function(point) {
        if (!point) {
            alert(address + " not found");
            return false;
        } else {


			  /*var findmarker = new GMarker(point, {icon: customIcons["finder"], draggable:false, bouncy:false });
				mainmap.addOverlay(findmarker);

			  GEvent.addListener(findmarker, "click", function() {
			  	mainmap.removeOverlay(findmarker);
			  });*/



					mainmap.setCenter(point, 15);
		}
    });
};

function recordPath(but){

	var thebut = $("#"+but);
	var txt = "";

	if(recordon){
		recordon = false;
		txt = "Start Adding Points";
	}else{
		recordon = true;
		txt = "Click to Continue Adding Points";
	}

	thebut.val(txt);

};


function formatPoints(){
	var tarr = [];
	for(var i = 0; i < waypoints.length; i++){
		tarr.push(waypoints[i].x + ","+ waypoints[i].y);
	}

	return tarr.join("|");
}

function selectTab(tab){
	if(tab == 0){
		selectMainMenu("menu-items-", "routes");
	}else if(tab == 1){
		selectMainMenu('menu-items-', 'crud');
	}else if(tab == 2){
		selectMainMenu('menu-items-', 'account');
		
		if(!loading){
			setAddRoute();
		}
		
	}
	sel = tab;
	$("#tabsEx1 > ul").tabs("select", sel);
}

function setAddRoute(){
	loading = false;
	recordon = true;
	$("#routeaction").val("save");
	$("#button2").val("Add New Route");	
	$(".route-input").each(function(index){
		$(this).val("");
	});
	$("#routeadd").show();
	
	displayRouteInfo("", "", "");
		resetVals();
		mainmap.clearOverlays();
		$("#response-msg-2").hide();
		$("#response-err-2").hide();
		enableAdd();
}

function saveMap(){

if(waypoints.length > 1){
	if(loggedin){
		$("#routeadd").slideDown("fast");
	}else{
		selectTab(2);
		loggedsaved = true;
	}
}else{
	displayError("You must add at least 2 points to the map in order to save a route");
}



};

function displayError(err){
	$("#message-err").html(err);
};

function submitSearch(pagenum){

	var pn = (pagenum === undefined) ? 1 : pagenum;
	var sname = ($("#search-name").val() != "Route Name") ? $("#search-name").val() : "";
	var slocation = ($("#search-location").val() != "Route Location") ? $("#search-location").val() : "";;
	var sdescription = ($("#search-description").val() != "Description") ? $("#search-description").val() : "";	
	var ssearchmin = ($("#search-min").val() != "Min. Km") ? ($("#search-min").val()*1000) : "";	
	var ssearchmax = ($("#search-max").val() != "Max. Km") ? ($("#search-max").val()*1000) : "";
	var stryevent = ($("#tryevent").attr("checked")) ? 1 : 0;

	//alert(sname + " - " + slocation + " - " + sdescription + " - " + ssearchmin + " - " + ssearchmax + " - " +stryevent);
	var scriptdir = sitebase + "route.php";

		$.post(scriptdir,
		  {	'name': sname,
		  	'location': slocation,
		  	'description':sdescription,
		  	'min':ssearchmin,
		  	'max':ssearchmax,
		  	'tryevent': stryevent,
		  	'page': pn,
		  	'action' : "search"},
		  function(data){
				//alert(data);
				//msgresponse(data,"message-err","message-success");

			try{
				data = JSON.parse(data);

				if(data.err != ''){
					mess = data.err;
					if(typeof(mess) != "string"){
						mess = formatErrs(mess);
					}
					//displaydiv = thediv;
					alert(mess);

				}else{
					mess = data.msg;
					displaydiv = "message-success";
				}


				clearMessages();
				//$('#'+displaydiv).html(mess);
				var totalpages = parseInt(data.payload.pages);
				var pay = data.payload.searchdata;
				var htmlres = "";
				if(pay != '' && pay != null){
					for(var c = 0; c < pay.length; c++){
						//alert(pay[c].name);
						var aclass = (c % 2) ? " row-alt" : "";
						var te = (pay[c].tryevent == 1) ? " *" : "";
						htmlres+='<div id="row-'+pay[c].route_id+'" class="row'+aclass+'"><div class="sr-left"><h4><a href="index.php?route='+pay[c].route_id+'">'+pay[c].name+te+'</a></h4><p>'+pay[c].location+'</p></div><div class="sr-right"><h4>'+roundDec((pay[c].rlength/1000), 1)+'</h4><div class="km">km</div></div></div>';
					}
				}

					if(data.err == "" && pay.length >= 0){
						var statusarea;
						if(pn == 1){
							statusarea = '<a href="javascript:void(0)" onclick="submitSearch('+(pn+1)+')">Next Page ></a>';
						}else{
							if(pn < totalpages)
								statusarea = '<a href="javascript:void(0)" onclick="submitSearch('+(pn-1)+')">< Prev Page </a> &nbsp; <a href="javascript:void(0)" onclick="submitSearch('+(pn+1)+')">Next Page ></a>';
							else
								statusarea = '<a href="javascript:void(0)" onclick="submitSearch('+(pn-1)+')">< Prev Page </a> &nbsp;';								
						}
						
						var pcount = "Page " + pn+ " of " + totalpages;
						
						$("#search-results").slideDown();
						$("#search-found").html(data.msg);
						$("#search-result-data").html(htmlres);						
						$("#status-left").html(pcount);
						$("#status-right").html(statusarea);
						
						
						//alert(htmlres);
					}




			}catch(err){
				var txt = err + "\n\n";
			  txt += data;
			  alert(txt);
			}

		  }
		);


}


// ****************************************************
// END OF PAGE LOADING FUNCTIONS ----------------------
// ****************************************************

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function logout(){
		var scriptdir = sitebase + "route.php?action=logout";
		window.location = scriptdir;
}

function submitAdminLogin(data){
	$('#loading-login').addClass("hidden");
	msgresponse(data,"m-adminlogin");
}

function clearMessages(){
	$('#message-err').html("");
	$('#message-success').html("");
	$('.response-msg').hide();
	$('.response-err').hide();
}

function errorresponse(xhr, status, e){
	alert("Error: Could not Submit Form. Please try again.");
}

function formatErrs(anarr){
	var str = "<ul>";
	for(var i = 0; i < anarr.length; i++){
		str += '<li>'+anarr[i]+'</li>';
	}
	str += "</ul>";

	return str;
}

function submitForm(theform){
	$('#'+theform).submit();
}

function clearDistanceMarkers(){
	for(var i = 0; i < points_miles.length; i++){
		mainmap.removeOverlay(points_miles[i]);
	}
	points_miles = [];
}

var dunit = "km";
function changeDistanceUnit(u, updatemap){
  if (typeof updatemap == "undefined") {
    updatemap = false;
  }

	dunit = u;

	if(updatemap)
		drawDistanceMarkers();
}

function drawDistanceMarkers(){

	if(points_miles.length >0)
		clearDistanceMarkers();

	var tunit = (dunit == "mi")	? 1600 : 1000;
	var num_mile_markers = Math.floor(currdistance/tunit);

	var i, t;

	for(i = 1; i <= num_mile_markers; i++){
		t = poly.GetPointAtDistance(tunit*i);
		attachDistanceTooltip(t, i);
	}

};

function attachDistanceTooltip(point, i){
	  var mmarker = new GMarker(point, {icon: customIcons["distancemarker"], draggable:false, bouncy:false });

		mmarker.tooltip = (dunit == "mi") ? "Mile Marker # ": "Kilometer Marker # ";
		mmarker.tooltip += i;
		mainmap.addOverlay(mmarker);
		points_miles.push(mmarker);

	  GEvent.addListener(mmarker, "mouseover", function() {
	  	showTooltip(mmarker);
	  	/*var t = mmarker.getPoint();
	  	$("#message-err").html(t.toString());*/
	  });

	  GEvent.addListener(mmarker, "mouseout", function() {
	  	tooltip.style.display = "none";
		});
}

var clearedboxes = [];
function clearBox(abox){
	if(clearedboxes[abox.id] === undefined){
		abox.value = "";
		clearedboxes[abox.id] = true;
	}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

