// Global variables
var MAX_ZOOM_LEVEL = 13;
var EDIT_ZOOM_LEVEL = 12;
var MARKER_VIEW_LEVEL = 4;
var DIVISOR;

var BASEICON = new Array();
var BOUNDS;
var DIV_MULTIPLIER = .2;
var MAP;
var MAPCENTER;
var MAPCENTERFROM;
var ZOOMLVL;


var linecolor = '#ff0000';
var iconLoc;
var sel_wpid;
var sel_pos;
var sel_coord;
var sel_marker;


function toggleLatLng() {
	if (document.getElementById('showlatlng') && document.getElementById('showlatlng').checked) {
		setStyle('latlng','display','block');
		setLatLngColor();
	} else {
		setStyle('latlng','display','none');
	} 
}

/**********************************************
Move selected waypoint to new location
**********************************************/
function updateMarkerPos(wpid,pos) {
	x_setMarkerPosition(wpid,pos.lat(),pos.lng(),function (retval) {
		if (retval) {
			refreshMarkers();
		} else {
			sel_marker.setLatLng(iconLoc);
		}
	});
}

/**********************************************
Display User waypoint option box
**********************************************/
function optionsMarker(wpid,pos,coordinate) {
	sel_wpid = wpid;
	sel_pos = pos;
	sel_coord = coordinate;
	var left = xMOUSEPOS;
	var top = yMOUSEPOS;

	var console = document.getElementById("mapMarkeroptions");
	x_getWPOptions(wpid,pos.lat(),pos.lng(),function (rethtml) {
		console.innerHTML = rethtml;
	});
	console.style.display = 'block';
	var mapDiv = document.getElementById("map");
	if ((left + 150) > 850) {
		left = left - 200;
	}
	if ((top + 100) > 500) {
		top = top - 100;
	}
	console.style.left = left+"px";
	console.style.top = top+"px";

	return true;
}

/*
Close Select menu
*/
function submitSelectClose() {
	closeSelectionMenu(true);
}

/************************************************
Close user waypoint options menu
************************************************/
function submitOptionsClose() {
	sel_marker.setPosition(iconLoc);
	closeOptions(true);
}

/*********************************************
wrapper for entering user entered waypoint move
*********************************************/
function submitOptionsMove() {
	updateMarkerPos(sel_wpid,sel_pos);
	closeOptions(false);
}

/*********************************************
Create a new waypoint from options menu
*********************************************/
function submitOptionsNew() {
	sel_marker.setPosition(iconLoc);
	closeOptions(false);
	displayAddMarkerMenu(sel_pos.lat(),sel_pos.lng());
}

/*
*/
function closeSelectionMenu(val) {
	var console = document.getElementById("mapSelectoptions");
	console.style.display = 'none';
}

/**********************************************
Close user waypoint options menu
**********************************************/
function closeOptions(clearvals) {
	var console = document.getElementById("mapMarkeroptions");
	console.innerHTML = '';
	console.style.display = 'none';
	if (clearvals) {
		sel_wpid = null;
		sel_pos = null;
		sel_coord = null;
	}
}

/*********************************************
Display rightclick selection menu
*********************************************/
//function displaySelectionMenu(pnt,src,overlay) {
function displaySelectionMenu(ev,overlay) {
	var console = document.getElementById('mapSelectoptions');
	var latlng = ev.latLng;
	var left = xMOUSEPOS;
	var top = yMOUSEPOS;
	setStyle('mapSelectoptions','display','none');
	if (overlay instanceof google.maps.Marker)  {
		x_getSelectConsole(latlng.lat(),latlng.lng(),MAP.getZoom(),overlay.getTitle(),overlay.getLatLng(),function(rethtml) {
			console.innerHTML = rethtml;
		});
	} else if (overlay instanceof google.maps.Map) {
		x_getSelectConsole(latlng.lat(),latlng.lng(),MAP.getZoom(),'','',function(rethtml) {
			console.innerHTML = rethtml;
		});
	}
	if ((left + 150) > 850) {
		left = left - 200;
	}
	if ((top + 50) > 450) {
		top = top - 50;
	}
	console.style.left = left+"px";
	console.style.top = top+"px";
	setStyle('mapSelectoptions','display','block');
}


/*********************************************
Display menu to enter details on new waypoint
*********************************************/
function displayAddMarkerMenu(lat,lng) {
	var left = xMOUSEPOS;
	var top = yMOUSEPOS;
	var wpid = sel_wpid;
	var console = document.getElementById("mapMarkerconsole");
	x_getWPConsole(wpid,lat,lng,function (rethtml) {
		console.innerHTML = rethtml;
	});

	var mapDiv = document.getElementById("map-border");
	if ((left + 300) > 850) {
		left = left - 350;
	}
	if ((top + 200) > 450) {
		top = top - 200;
	}
	console.style.left = left+"px";
	console.style.top = top+"px";
	console.style.display = 'block';
//	document.getElementById('latitude').value = pos.lat();
//	document.getElementById('longitude').value = pos.lng();
	return true;
}

function CreateWaypoint(lat,lng) {
	displayAddMarkerMenu(lat,lng);
}

/********************************************
Clean up details in AddMarkerMenu
********************************************/
function clearMarkerMenu() {
	document.getElementById('markerName').value = '';
	document.getElementById('markerDescr').value = '';
	document.getElementById('longitude').value = '';
	document.getElementById('latitude').value = '';
	document.getElementById('markerType').value = 0;
	document.getElementById('privatewp').checked = false;
}

/*******************************************
Close and hide AddMarker
*******************************************/
function cancelMarker() {
	var console = document.getElementById("mapMarkerconsole");
	console.style.display = 'none';
	clearMarkerMenu();
}

/*******************************************
User added new marker - process AddMarker form and submit
*******************************************/
function submitMarker() {
//	var answer = confirm("Submit waypoint?")
	var answer = true;
	var console = document.getElementById("mapMarkerconsole");
	var result = new Array();
	result[0] = document.getElementById('markerName').value+"'";
	result[1] = "'"+document.getElementById('markerDescr').value+"'";
	result[2] = "'"+document.getElementById('latitude').value+"'";
	result[3] = "'"+document.getElementById('longitude').value+"'";
	result[4] = "'"+document.getElementById('markerType').value+"'";
	if (document.getElementById('privatewp').checked) {
		result[5] = "'"+1;
	} else {
		result[5] = "'"+0;
	}
	if (sel_wpid) {
		result[5] = result[5]+"'";
		result[6] = "'"+sel_wpid;
	}
	if (result[0].length > 2) {
		/*process here*/
		x_processMarkerAdd(result,
			function(res) {
				if (res) {
					if (MAP.getZoom() >= MARKER_VIEW_LEVEL) {
						displayMarkers();
					}
				}
			});
		console.style.display = 'none';
	} else { 
		alert("Title Needed...");
	}
}

/*******************************************
Wrapper to display markers on the screen
*******************************************/
function refreshMarkers() {
	clearLines();
	clearMarkers();
	displayMarkers();
}

function clearMarkers() {
	for (var i in MAP.mMarkers) {
		if (MAP.mMarkers[i] instanceof google.maps.Marker ) {
			MAP.mMarkers[i].setMap(null);
			MAP.mMarkers[i] = null;
		}
	}
	MAP.mMarkers = new Array();
}

function clearLines() {
	for (var i in MAP.mMarkerLines) {
		if (MAP.mMarkerLines[i] instanceof google.maps.Polyline ) {
			MAP.mMarkerLines[i].setMap(null);
		}
	}
	MAP.mMarkerLines = new Array();
}

/*******************************************
Clean out markers not listed in selected timespan
*******************************************/
function filterByHour(mrkr) {
	var hourcbx = document.getElementById('cbx_date_hour');
	if (!hourcbx || (hourcbx && !hourcbx.checked)) {
		return true;
	}
	var season = parseInt(document.getElementById('date_select_hour').value);
	for(var d in mrkr[11]) {
		var mrkrdate = parseDateStr(mrkr[11][d]);
		switch(season) {
			case 0:
				var start = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),5,0,1);
				var stop = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),9,0,0);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 1:
				var start = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),9,0,1);
				var stop = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),15,0,0);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 2:
				var start = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),15,0,1);
				var stop = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),21,0,0);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 3:
				var start1 = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),21,0,1);
				var stop1 = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),23,59,59);
				var start2 = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),0,0,0);
				var stop2 = new Date(mrkrdate.getFullYear(),mrkrdate.getMonth(),mrkrdate.getDate(),5,0,0);
				if ((mrkrdate >= start1 && mrkrdate <= stop1) || (mrkrdate >= start2 && mrkrdate <= stop2)) {
					return true;
				}
				break;
			default:
				alert("never get here");
		}
	}
	return false;
}

/*******************************************
Clean out markers not listed in selected timespan (Date)
*******************************************/
function filterByDate(mrkr) {
	var season = parseInt(document.getElementById('date_select_season').value);
	for(var d in mrkr[11]) {
		var mrkrdate = parseDateStr(mrkr[11][d]);
		switch(season) {
			case 0:
				var start = new Date(mrkrdate.getFullYear(),3,21,0,0,0);
				var stop = new Date(mrkrdate.getFullYear(),5,20,23,59,59);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 1:
				var start = new Date(mrkrdate.getFullYear(),5,21,0,0,0);
				var stop = new Date(mrkrdate.getFullYear(),8,20,23,59,59);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 2:
				var start = new Date(mrkrdate.getFullYear(),8,21,0,0,0);
				var stop = new Date(mrkrdate.getFullYear(),11,20,23,59,59);
				if (mrkrdate >= start && mrkrdate <= stop) {
					return true;
				}
				break;
			case 3:
				var start1 = new Date(mrkrdate.getFullYear(),11,21,0,0,0);
				var stop1 = new Date(mrkrdate.getFullYear(),11,31,23,59,59);
				var start2 = new Date(mrkrdate.getFullYear(),0,1,0,0,0);
				var stop2 = new Date(mrkrdate.getFullYear(),3,20,23,59,59);
				if ((mrkrdate >= start1 && mrkrdate <= stop1) || (mrkrdate >= start2 && mrkrdate <= stop2)) {
					return true;
				}
				break;
			default:
				alert("never get here");
		}
	}
	return false;
}


/*******************************************
Wrapper for time and date filters
*******************************************/
function validateOptions(mrkr) {
	var retval = false;
	var opt = document.getElementsByName('date_select_type');
	if (opt[0]) {
		if (opt[0].checked) {  //Show All
			retval = true;
		} else if (opt[1].checked) { //Show only selected dates
			var start = document.getElementById('wpdate_start').value;
			var stop = document.getElementById('wpdate_end').value;
			var startdate = parseDateStr(start);
			var stopdate = parseDateStr(stop);
			for (var d in mrkr[11]) {
				var mrkrdate = parseDateStr(mrkr[11][d]);
				if (start && stop) {
					if (mrkrdate > startdate && mrkrdate < stopdate) {
						retval = true;
					}
				} else if (start) {
					if (mrkrdate > startdate) {
						retval = true;
					}
				} else if (stop) {
					if (mrkrdate < stopdate) {
						retval = true;
					}
				}
			}
		} else if (opt[2].checked) { //Show selected Season
			retval = filterByDate(mrkr);
		}
	} else {
		retval = true;
	}
	return (retval && filterByHour(mrkr));
}

/********************************************
Draw markers on MAP
********************************************/

function displayIconMarkers(mapNE,mapSW,showOwned,showGroup) {
	x_getDBMarkers(mapNE.lat(),mapNE.lng(),mapSW.lat(),mapSW.lng(),showOwned,showGroup, function (results) {
		var splice = [];
		BASEICON['iconSize'] = new google.maps.Size(38 / DIVISOR, 30 / DIVISOR);
		BASEICON['iconScaledSize'] = new google.maps.Size(38 / DIVISOR, 30 / DIVISOR);
		BASEICON['shadowSize'] = new google.maps.Size(50 / DIVISOR, 30 / DIVISOR);
		BASEICON['shadowScaledSize'] = new google.maps.Size(48 / DIVISOR, 30 / DIVISOR);
		BASEICON['iconAnchor'] = new google.maps.Point(18 / DIVISOR, 30 / DIVISOR);
		BASEICON['shadowAnchor'] = new google.maps.Point(4 / DIVISOR, 30 / DIVISOR);
		var lat = Math.abs(mapNE.lat() - mapSW.lat()) / 10;
		var lng = Math.abs(mapSW.lng() - mapNE.lng()) / 20;
		var wpurl_list;
		//results are returned as a php multidementional array
		//Build initial waypoint list on page load
			for (var i = 0; i < MAP.mMarkers.length; i++) {
				if (!MAP.getBounds().contains(MAP.mMarkers[i].getPosition())) {
						//MAP.removeOverlay(MAP.mMarkers[i][3]);
					if (MAP.mMarkers[i] instanceof google.maps.Marker ) {
						MAP.mMarkers[i].setMap(null);
						splice.push(i);
					}
				}
			}
			for(var i = 0; i < splice.length; i++) {
				MAP.mMarkers.splice(splice[i],1);
			}
			for(var i in results) {
				if (validateOptions(results[i]) ) {
					if (!MAP.mMarkers.inWPArray(results[i][0]) && MAP.mMarkers.length <= 50) {
						BASEICON['iconAnchor'] = new google.maps.Point(18 / DIVISOR, 30 / DIVISOR);
						if (results[i][4].indexOf('poi') >= 0) {
							BASEICON['iconAnchor'] = new google.maps.Point(7 / DIVISOR, 30 / DIVISOR);
						}
						var mrkr = createMarker(new google.maps.LatLng(
							parseFloat(results[i][2]),parseFloat(results[i][3])),
							results[i][4],results[i][9],results[i][0],results[i][10],results[i][6]);
						//MAP.addOverlay(mrkr);
						mrkr.setMap(MAP);
						mrkr.mWPid = results[i][0];
						mrkr.mUid = results[i][1];
						mrkr.mType = results[i][4];
						mrkr.mPrivate = results[i][8];
						mrkr.mIsOwner = results[i][10];
						mrkr.mParentId = results[i][12];
						MAP.mMarkers.push(mrkr);
					}
				}
			}
			showLeftMenu(MAP.mMarkers);
	});
/*************************************************************************
Marker Lines
*************************************************************************/
	if (document.getElementById('showHistoryLines') && document.getElementById('showHistoryLines').checked) {
		x_getDBLines(mapNE.lat(),mapNE.lng(),mapSW.lat(),mapSW.lng(),showOwned,showGroup, function (results) {
		var lnsplice = new Array();
				for (var i in MAP.mMarkerLines.length) {
					if (MAP.mMarkerLines[i] instanceof google.maps.Polyline) {
						MAP.mMarkerLines[i].setMap(null);
						lnsplice.push(i);
					}
				}
				for(var i = 0; i < lnsplice.length; i++) {
					MAP.mMarkerLines.splice(lnsplice[i],1);
				}
				for(var i in results) {
					if (validateOptions(results[i])) {
						if (!MAP.mMarkerLines.inPLArray(results[i][0],results[i][3])) {
						var line = createPolyline(
							new google.maps.LatLng(parseFloat(results[i][1]),parseFloat(results[i][2])),
   							new google.maps.LatLng(parseFloat(results[i][4]),parseFloat(results[i][5]))
							);
							line.mWPid = results[i][0];
							line.mParentWPid = results[i][3];
							MAP.mMarkerLines.push(line);
						}
						line.setMap(MAP);
					}
				}
		});
	}
}


/***********************************************
Draw marker dots on screen
************************************************/
function displayDotMarkers(mapNE,mapSW,showOwned,showGroup) {
	x_getDBMarkers(mapNE.lat(),mapNE.lng(),mapSW.lat(),mapSW.lng(),showOwned,showGroup, function (results) {
		var splice = [];
		BASEICON['iconSize'] = new google.maps.Size(9,9);
		BASEICON['shadowSize'] = new google.maps.Size(0,0);
		BASEICON['iconAnchor'] = new google.maps.Point(4,4);
		var lat = Math.abs(mapNE.lat() - mapSW.lat()) / 10;
		var lng = Math.abs(mapSW.lng() - mapNE.lng()) / 20;
		var wpurl_list;
		var icon_color = '';
		//results are returned as a php multidementional array
		//Build initial waypoint list on page load
			for (var i = 0; i < MAP.mMarkers.length; i++) {
				if (!MAP.getBounds().contains(MAP.mMarkers[i].getPosition())) {
					if (MAP.mMarkers[i] instanceof google.maps.Marker ) {
						MAP.mMarkers[i].setMap(null);
						splice.push(i);
					}
				}
			}
			for(var i = 0; i < splice.length; i++) {
				MAP.mMarkers.splice(splice[i],1);
			}
			for(var i in results) {
				if (validateOptions(results[i]) ) {
					if (!MAP.mMarkers.inWPArray(results[i][0]) && MAP.mMarkers.length <= 100) {
						if (results[i][4].indexOf('hunt') >= 0) {
							icon_color = 'hunting_report';
						} else if (results[i][4].indexOf('fish') >= 0) {
							icon_color = 'fishing_report';
						} else {
							icon_color = 'waypoint_report';
						}
						var mrkr = new google.maps.Marker({
							position: new google.maps.LatLng(parseFloat(results[i][2]),parseFloat(results[i][3])),
							title:results[i][6],
							map:MAP,
							icon:"/images/icons/"+icon_color+".png",
							draggable:false
						});
						mrkr.mWPid = results[i][0];
						mrkr.mUid = results[i][1];
						mrkr.mType = results[i][4];
						mrkr.mPrivate = results[i][8];
						mrkr.mIsOwner = results[i][10];
						mrkr.mParentId = results[i][12];
						MAP.mMarkers.push(mrkr);
					}
				}
			}
			showLeftMenu(MAP.mMarkers);
	});
}

/***********************************************
Sort Marker names
************************************************/
function compareID(a, b) {
	if (b.getTitle().toLowerCase() < a.getTitle().toLowerCase()) {
		return 1;
	} else if (b.getTitle().toLowerCase() > a.getTitle().toLowerCase()) {
		return -1;
	}
	return 0;
}

/***********************************************
Draw marker links on left panel
************************************************/
function showLeftMenu(list) {
	var menu_html = '';
	list.sort(compareID);
	for (var i = 0; i < list.length; i++) {
		menu_html += '<div onclick="focusWaypointByID('+list[i].mWPid+');" onmouseover="highlightWaypointByID('+i+')">'+list[i].getTitle()+'</div>';
	}
	replaceHtml('left_menu_waypoints',menu_html);
}

/***********************************************
Wrapper for drawing bounderies
************************************************/
function displayMarkers() {
	var mapNE = BOUNDS.getNorthEast();
	var mapSW = BOUNDS.getSouthWest();
	var showOwned = false;
	var showGroup = 0;
	if (document.getElementById('showOwnedOnly')) {
		showOwned = document.getElementById('showOwnedOnly').checked;
	}
	if (document.getElementById('select_group')) {
		showGroup = document.getElementById('select_group').value;
	}
	if (MAP.getZoom() >= 7) {
		displayIconMarkers(mapNE,mapSW,showOwned,showGroup);
	} else if (MAP.getZoom() >= MARKER_VIEW_LEVEL) {
		displayDotMarkers(mapNE,mapSW,showOwned,showGroup);
	}
	return 1;
}

/***********************************************
Wrapper for merging waypoint to group
************************************************/
function selectWaypoint(id) {
	x_addGroupWaypoint(id,parseInt(getCookie('selectedgid')),function(retval) {
		if (retval) {
			setTimeout('opener.location.reload()',50);
		}
		setTimeout('self.close()',100);
	});
}

function highlightWaypointByID(id) {
	MAP.mMarkers.sort(compareID);
	var divSize = DIVISOR * .7;
	var rnd = Math.floor(Math.random()*1000001);
	if (MAP.getZoom() >= 7) {
		BASEICON['iconSize'] = new google.maps.Size(38 / divSize, 30 / divSize);
		BASEICON['iconScaledSize'] = new google.maps.Size(38 / divSize, 30 / divSize);
		BASEICON['shadowSize'] = new google.maps.Size(50 / divSize, 30 / divSize);
		BASEICON['iconAnchor'] = new google.maps.Point(11 / divSize, 30 / divSize);
	MAP.mHlMarkers[rnd] = createMarker(
		MAP.mMarkers[id].getPosition(),
		MAP.mMarkers[id].mType,'',MAP.mMarkers[id].mWPid,MAP.mMarkers[id].mIsOwner,'');
	} else if (MAP.getZoom() >= MARKER_VIEW_LEVEL) {
		BASEICON['iconSize'] = new google.maps.Size(18, 18);
		BASEICON['shadowSize'] = new google.maps.Size(0, 0);
		BASEICON['iconAnchor'] = new google.maps.Point(8, 8);
		if (MAP.mMarkers[id].mType.indexOf('hunt') >= 0) {
			icon_color = 'brown_dot_icon';
		} else if (MAP.mMarkers[id].mType.indexOf('fish') >= 0) {
			icon_color = 'blue_dot_icon';
		} else {
			icon_color = 'green_dot_icon';
		}
	MAP.mHlMarkers[rnd] = createMarker(
		MAP.mMarkers[id].getPosition(),
		icon_color,'',MAP.mMarkers[id].mWPid,MAP.mMarkers[id].mIsOwner,'');

	}

	MAP.mMarkers[id].setMap(null);
	MAP.mHlMarkers[rnd].setMap(MAP);
	setTimeout('MAP.mHlMarkers['+rnd+'].setMap(null)',500);
	setTimeout('MAP.mMarkers['+id+'].setMap(MAP)',500);

	BASEICON['iconSize'] = new google.maps.Size(38 / DIVISOR, 30 / DIVISOR);
	BASEICON['iconScaledSize'] = new google.maps.Size(38 / DIVISOR, 30 / DIVISOR);
	BASEICON['shadowSize'] = new google.maps.Size(50 / DIVISOR, 30 / DIVISOR);
	BASEICON['iconAnchor'] = new google.maps.Point(11 / DIVISOR, 30 / DIVISOR);
}

/***********************************************
Move map to specific waypoint by ID
************************************************/
function focusWaypointByID(id) {
	x_getLatLng(id,function(retval) {
			if (retval) {
				MAPCENTER = new google.maps.LatLng(retval[0], retval[1]);
			}
			
			MAP.setZoom(Math.max(EDIT_ZOOM_LEVEL,MAP.getZoom()));
			MAP.panTo(MAPCENTER);
			//Give map time to pan over
			setTimeout('refreshMarkers()', 500);
			});
	return true;
}

/***********************************************
Move map to specific waypoint by name
************************************************/
function focusWaypoint(id) {
	var tmp = document.getElementById(id);
	x_getLatLng(tmp.value,function(retval) {
			if (retval) {
				MAPCENTER = new google.maps.LatLng(retval[0], retval[1]);
			} else {
				MAPCENTER = new google.maps.LatLng(47.0888, -98.0200);
			}
			
			MAP.setZoom(Math.max(EDIT_ZOOM_LEVEL,MAP.getZoom()));
			MAP.panTo(MAPCENTER);
			//Give map time to pan over
			setTimeout('refreshMarkers()', 500);
			});
	return true;
}

function createPolyline(from, to) {
	var linepath = [
		from,to
	];
	var line = new google.maps.Polyline({
		clickable:false,
		path: linepath,
		strokeColor: linecolor,
		strokeOpacity: 1,
		strokeWeight: 1
	});
	return line;
}

/***********************************************
Create New waypoint
***********************************************/
function createMarker(point, iconname, infoHtml, wpid, owner,title) {
	var mtype = MAP.getMapTypeId();
	var crossIcon = "cross_icon";
	var shadowicon = iconname;
	if ((mtype == google.maps.MapTypeId.SATELLITE || mtype == google.maps.MapTypeId.HYBRID) && (iconname.indexOf('dot') == -1)) {
		iconname = iconname + "_bright";
		crossIcon = crossIcon + "_bright";
	} 
	if ((owner && iconname.indexOf('bright') == -1) && (iconname.indexOf('dot') == -1)) {
		iconname = "u_" + iconname;
	} else if (owner && iconname.indexOf('dot') >= 0) {
		//Need to add user specified colors
		iconname = 'red_dot_icon';
	}
	var markerTitle = title;

	var mIcon = new google.maps.MarkerImage (
				"/images/icons/"+iconname+".png",
				BASEICON['iconSize'],
				new google.maps.Point(0,0),
				BASEICON['iconAnchor'],
				BASEICON['iconScaledSize']
	);
	if (iconname.indexOf('dot') == -1) {
	var mIconShadow = new google.maps.MarkerImage (
				"/images/icons/"+shadowicon+"_shadow.png",
				BASEICON['iconSize'],
				new google.maps.Point(5,0),
				BASEICON['shadowAnchor'],
				BASEICON['shadowScaledSize']
	);
	} else {
		var mIconShdow = '';
	}
	
	var marker = new google.maps.Marker({
				position:point,
				icon:mIcon,
				shadow:mIconShadow,
				title:markerTitle,
				draggable:(cookie_exists('gtUserLogin') && MAP.getZoom() >= EDIT_ZOOM_LEVEL)
	});

	if (infoHtml) {
		var infoWindow = new google.maps.InfoWindow({
			content: infoHtml
		});

		google.maps.event.addListener(marker, "click", function () {
			infoWindow.open(MAP,marker);
		}); 
	}

	google.maps.event.addListener(marker, "dragstart", function (event) {
		iconLoc = event.latLng;
	});

	google.maps.event.addListener(marker, "dragend", function (event) {
		if (MAP.getZoom() >= EDIT_ZOOM_LEVEL) {
			var currentProjection = MAP.getProjection();
			var tilePoint = currentProjection.fromLatLngToPoint(event.latLng);

			if (cookie_exists('gtUserLogin')) {
				sel_marker = marker;
				optionsMarker(wpid,event.latLng,tilePoint);
			}
		} else {
			marker.setLatLng(iconLoc);
		}
	}); 

	return marker;
}

/***********************************************
Display waypoint zoomlvl and details
************************************************/
function setLCD(zoom) {
	if (zoom >= EDIT_ZOOM_LEVEL && cookie_exists('gtUserLogin')) {
		replaceHtml('lcd-display',"Zoom LvL: "+ zoom + "<br/>WayPoints Editable:<img src='/images/go.png'/>");
	} else {
		replaceHtml('lcd-display',"Zoom LvL: "+ zoom + "<br/>WayPoints Editable:<img src='/images/stop.png'/>");
	}
}

function setLatLngColor() {
	var bgClr = '#fff';
	var Clr = '#252525';
	var lnClr = '#ff0000';
	if (MAP.getZoom() >= MARKER_VIEW_LEVEL) {
		//Clear wp list so displayMarkers will redraw in correct color
		refreshMarkers();
	}
	//setCookie('gtMapType',MAP.getCurrentMapType(),365);
	var latlngdisp = document.getElementById("latlng");
	var lcddisplay = document.getElementById("lcd-display");
	if (MAP.getMapTypeId() == google.maps.MapTypeId.TERRAIN) {
		lnClr = '#ff0000';
		x_iCanAccess(20,function(retval) {
			if (retval) {	
				setCookie('gtMapType',3,365,1);
			}
		});
	} else if (MAP.getMapTypeId() == google.maps.MapTypeId.ROADMAP) {
		lnClr = '#ff0000';
		x_iCanAccess(20,function(retval) {
			if (retval) {	
				setCookie('gtMapType',0,365,1);
			}
		});
	} else if (MAP.getMapTypeId() == google.maps.MapTypeId.SATELLITE) {
		lnClr = '#ffff00';
		x_iCanAccess(20,function(retval) {
			if (retval) {	
				setCookie('gtMapType',1,365,1);
			}
		});
	} else if (MAP.getMapTypeId() == google.maps.MapTypeId.HYBRID) {
		lnClr = '#ffff00';
		x_iCanAccess(20,function(retval) {
			if (retval) {	
				setCookie('gtMapType',2,365,1);
			}
		});
	} else {
		bgClr = "#fff";
		Clr = "#252525";
		lnClr = '#ff0000';
	}
	latlngdisp.style.color = Clr;
	latlngdisp.style.backgroundColor = bgClr;
	lcddisplay.style.color = Clr;
	lcddisplay.style.backgroundColor = bgClr;
	linecolor = lnClr;
}


google.maps.Map.prototype.mMarkers = new Array();
google.maps.Map.prototype.mHlMarkers = new Array();
google.maps.Map.prototype.mMarkerLines = new Array();

google.maps.Marker.prototype.mWPid = null;
google.maps.Marker.prototype.mUid = null;
google.maps.Marker.prototype.mType = null;
google.maps.Marker.prototype.mPrivate = null;
google.maps.Marker.prototype.mIsOwner = null;
google.maps.Marker.prototype.mParentId = null;

google.maps.Polyline.prototype.mWPid = null;
google.maps.Polyline.prototype.mParentWPid = null;

//MARKER values
//0	 WPID
//1	 UID
//2	 lat
//3	 lng
//4	 type
//5	 descr
//6	 title
//7	 
//8	 private
//9	 infohtml
//10	isowner
//11	eventdates
//12	parentid


/*************************************************/
/* INTIALIZATION */
function initialize() {
	var myLatlng = new google.maps.LatLng(47.0888, -98.0200);
	var myOptions = {
		zoom: 7,
		center: myLatlng,
		disableDoubleClickZoom: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	MAP = new google.maps.Map(document.getElementById("map"), myOptions);


/* Check to See is user is logged in */
	if (cookie_exists('gtUserLogin')) {
		/*User is logged in*/
		if (cookie_exists('gtMapType')) {
			/*User set a map type*/
			if (cookie_exists('gtZoomlvl')) {
				/*User zoom level*/
				ZOOMLVL = parseInt(getCookie('gtZoomlvl'));
			}
			switch (parseInt(getCookie('gtMapType'))) {
				case 1: MAP.setMapTypeId(google.maps.MapTypeId.HYBRID); break;
				case 2: MAP.setMapTypeId(google.maps.MapTypeId.SATELLITE); break;
				case 3: MAP.setMapTypeId(google.maps.MapTypeId.TERRAIN); break;
				case 0:
				default: MAP.setMapTypeId(google.maps.MapTypeId.ROADMAP);
			}
		} else {
			setCookie('gtMapType',3,365,1);
		}
	} else {
		MAP.setMapTypeId(google.maps.MapTypeId.ROADMAP);
	}

/********************************************
If user has ability - increase zoom level
********************************************/
		x_iCanAccess(2,function(retval) {
			if (retval) {	
				MAX_ZOOM_LEVEL = 20;
			}
		});
		if (cookie_exists('wpSearch')) {
		   	if (cookie_exists('gtMapLat') && cookie_exists('gtMapLng')) {
			   	MAP.setCenter(new google.maps.LatLng(parseFloat(getCookie('gtMapLat')), parseFloat(getCookie('gtMapLng'))));
		   		ZOOMLVL = Math.max(EDIT_ZOOM_LEVEL,MAP.getZoom());
				MAP.setZoom(ZOOMLVL);
		  	}
		} else {
	/* Remember map position */
			x_iCanAccess(20,function(retval) {
				if (retval) {
					if (cookie_exists('gtMapLat') && cookie_exists('gtMapLng')) {
				   		MAP.setCenter(new google.maps.LatLng(parseFloat(getCookie('gtMapLat')), parseFloat(getCookie('gtMapLng'))));
					}
				}
			});
		}


	MAPCENTER = MAP.getCenter();
	setLCD(MAP.getZoom());

 	DIVISOR = Math.min(2,Math.max(1,(2 - ((DIV_MULTIPLIER * MAP.getZoom()) - 2))));
	
	captureWindowSize();
	if (document.layers) { // Netscape
		document.captureEvents(Event.MOUSEMOVE);
		document.onmousemove = captureMousePosition;
	} else if (document.all) { // Internet Explorer
		document.onmousemove = captureMousePosition;
	} else if (document.getElementById) { // Netcsape 6
		document.onmousemove = captureMousePosition;
	}
/**************************************************************/
	google.maps.event.addListener(MAP, "bounds_changed", function () {
		captureWindowSize();
		BOUNDS = MAP.getBounds();
	}); 
	
	google.maps.event.addListener(MAP, "maptypeid_changed", function () {
			setLatLngColor();
	}); 
	
		x_iCanAccess(2,function(retval) {
			if (retval) {	
				addEvent(document.getElementById('showlatlng'), "click", toggleLatLng);
			google.maps.event.addListener(MAP, "mousemove", function(ev) {
					if (document.getElementById('showlatlng').checked) {
						replaceHtml('latlng',DegMinSecString(ev.latLng));
					}
				});
			} else {
				setStyle('latlng','display','none');
			}
		});
	
	google.maps.event.addListener(MAP, "movestart", function () {
			MAPCENTERFROM = MAP.getCenter();
		}); 
	
	google.maps.event.addListener(MAP, "idle", function(){
		if (ZOOMLVL != MAP.getZoom()) {
			refreshMarkers();
		} else if (MAPCENTER != MAPCENTERFROM) {
			displayMarkers();
			MAPCENTERFROM = MAPCENTER;
		}
		ZOOMLVL = MAP.getZoom();
		MAPCENTER = MAP.getCenter();
//Can Access 20
//			x_iCanAccess(20,function(retval) {
//				if (retval) {
					setCookie('gtMapLat',MAPCENTER.lat(),365,1);
					setCookie('gtMapLng',MAPCENTER.lng(),365,1);
//				}
//			});
		
	});

	google.maps.event.addListener(MAP, "zoom_changed", function(){
 			DIVISOR = Math.min(2,Math.max(1,(2 - ((DIV_MULTIPLIER * MAP.getZoom()) - 2))));
			if(MAP.getZoom() > MAX_ZOOM_LEVEL) { 
				alert("You do not have access to increase zoom level any furthur.");
				MAP.setZoom(MAX_ZOOM_LEVEL);
			} else if (!(MAX_ZOOM_LEVEL == ZOOMLVL && MAP.getZoom() == MAX_ZOOM_LEVEL)) {
				clearMarkers();
			}
			setCookie('gtZoomlvl',parseInt(MAP.getZoom()),365,1);
			setLCD(MAP.getZoom());
		});
		
	google.maps.event.addListener(MAP,"rightclick", function(event) {
			if (cookie_exists('gtUserLogin') && MAP.getZoom() >= 9) {
				displaySelectionMenu(event,MAP);
			}
		});

	google.maps.event.addListener(MAP,"dblclick", function(event) {
			if (event.overlay || MAP.getZoom() >= EDIT_ZOOM_LEVEL) {
				if (cookie_exists('gtUserLogin')) {
					CreateWaypoint(event.latLng.lat(),event.latLng.lng());
				} else {
					alert("Please Log In to Add or Edit Waypoints");
				}
			} else {
				if (cookie_exists('gtUserLogin')) {
					alert("You must at Zoom LvL 12 or greater to Add New or Move Waypoints.");
				} else {
					alert("You must be  Logged In to Add or Edit Waypoints.");
				}
			}
		});
		
	if (!cookie_exists('gtNew') || (parseInt(getCookie('gtNew')) < 2 && !cookie_exists('gtUserLogin'))) {
		if (confirm("Sign Up for free account and be eligible for free prizes throughout the year.")) {
			var regex = new RegExp("[\\?&]gclid=([^&#]*)");
			var qs = regex.exec(window.location.href);
			if (qs == null) {
				window.location = '/register.php';
			} else {
				window.location = '/register.php?gclid='+qs[1];
			}
		}
		if (parseInt(getCookie('gtNew')) >= 0) {
			var c = parseInt(getCookie('gtNew'));
			c++;
			setCookie('gtNew',c,365,1);
		} else {
			setCookie('gtNew',1,365,1);
		}
	}

	if (document.getElementById('showlatlng')) {
		document.getElementById('showlatlng').checked = cookie_exists('showlatlng');
		toggleLatLng();
	}
	if (document.getElementById('showOwnedOnly')) {
		document.getElementById('showOwnedOnly').checked = cookie_exists('showOwnedOnly');
	}
	if (document.getElementById('showHistoryLines')) {
		document.getElementById('showHistoryLines').checked = cookie_exists('showHistoryLines');
	}
}


