// JavaScript Document

//-----------------------------------------------	
// Variables
//-----------------------------------------------
	var i = 0;
    var gmarkers = [];
	var cmarker=[];
	var hmarker=[];
    var MarkPoint = [];
	var markerHighlight;
	var bounds;
//-----------------------------------------------	
// Create a base icon for all markers that specifies the shadow, icon dimensions, etc.
//-----------------------------------------------
	var baseIcon = new GIcon();
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a yellow highlight icon
	var YellowIcon = new GIcon(baseIcon);
	YellowIcon.image = "/cos/images/map_images/marker-yellow.png";

// Create a blue highlight icon
	var BlueIcon = new GIcon(baseIcon);
	BlueIcon.image = "/cos/images/map_images/marker-blue.png";

//-----------------------------------------------	
// Create a big icon
//-----------------------------------------------
	var bigIcon = new GIcon();
	bigIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	bigIcon.iconSize = new GSize(28, 47);
	bigIcon.shadowSize = new GSize(42, 47);
	bigIcon.iconAnchor = new GPoint(13, 47);
	bigIcon.infoWindowAnchor = new GPoint(13, 2);
	bigIcon.infoShadowAnchor = new GPoint(26, 34);

	var CenterIcon = new GIcon(bigIcon);
	CenterIcon.image = "/cos/images/map_images/marker-drag.png";
///////////////////////////////////////////////////////////////////////////

function createMarker(point, index, id, type, lat, long) {
// Set up our GMarkerOptions object

if(type=='simple'){ 
	var marker = new GMarker(point);
	gmarkers[index]=marker;
	MarkPoint[index] = point;
}
	
if(type=='result'){ 
	var marker = new GMarker(point);
	gmarkers[index]=marker;
	MarkPoint[index] = point;
	
	GEvent.addListener(marker, "click", function() {
		if(markerHighlight) map.removeOverlay(markerHighlight);
		map.addOverlay(createHighlight(point, index, id));
		JS_LoadHighlight(id);
	});}
	
if(type=='hood'){ 
	markerOptions = {draggable: true};
	var marker = new GMarker(point, markerOptions);
	gmarkers[index]=marker;
	MarkPoint[index] = point;
		
	GEvent.addListener(marker, "dragend", function() {
		var lat=marker.getPoint().lat();
		var long=marker.getPoint().lng();
		JS_MovePoint(id,index,lat,long);
		if(markerHighlight) map.removeOverlay(markerHighlight);
		map.addOverlay(createBlueHighlight(lat, long, index, id));
		document.getElementById('locLat').innerHTML=parseFloat(lat).toFixed(5);
		document.getElementById('locLong').innerHTML=parseFloat(long).toFixed(5);
	});
	GEvent.addListener(marker, "click", function() {
												 
		if(markerHighlight) map.removeOverlay(markerHighlight);
		map.addOverlay(createBlueHighlight(lat, long, index, id));
		JS_LoadHighlight(id);
		document.getElementById('locLat').innerHTML=parseFloat(lat).toFixed(5);
		document.getElementById('locLong').innerHTML=parseFloat(long).toFixed(5);
	});}
	
return marker;
}
//////////////////////////////////////////////////////////////////////////////////


function createHighlight(point, index, id) {
  markerOptions = {icon:YellowIcon};
  markerHighlight = new GMarker(point, markerOptions);
  hmarker[index]=markerHighlight;

return markerHighlight;
}
//////////////////////////////////////////////////////////////////////////////////

function createBlueHighlight(lat,long,index,id) {
	point=new GLatLng(lat, long);
	markerOptions = {icon:BlueIcon};
	markerHighlight = new GMarker(point, markerOptions);
  	hmarker=markerHighlight;
	
	return markerHighlight;
}
//////////////////////////////////////////////////////////////////////////////////

function createCenter(point) {
	markerOptions = { icon:CenterIcon, draggable: true};
	var marker = new GMarker(point, markerOptions);
	
	cmarker[0] = marker;
	GEvent.addListener(marker, "dragend", function() {
		var lat=marker.getPoint().lat();
		var long=marker.getPoint().lng();
		JS_GetResultsData(0,lat,long);
	});
	return marker;
}
//////////////////////////////////////////////////////////////////////////////////

function createLocEdit(locLat, locLong, id) {
	var point = new GLatLng(locLat, locLong);
	document.getElementById('locLat').innerHTML=parseFloat(locLat).toFixed(5);
	document.getElementById('locLong').innerHTML=parseFloat(locLong).toFixed(5);
	
	markerOptions = { icon:CenterIcon, draggable: true};
	var marker = new GMarker(point, markerOptions);
	
	cmarker[0] = marker;
	GEvent.addListener(marker, "dragend", function() {
		var lat=marker.getPoint().lat();
		var long=marker.getPoint().lng();
		document.getElementById('locLat').innerHTML=parseFloat(lat).toFixed(5);
		document.getElementById('locLong').innerHTML=parseFloat(long).toFixed(5);
		JS_ChangeLocPoint(id,lat,long);
	});
	return marker;
}
//////////////////////////////////////////////////////////////////////////////////

function JS_LocClick(a) {
	if(map) {map.panTo(MarkPoint[a]);
	GEvent.trigger(gmarkers[a], "click");}
}
//////////////////////////////////////////////////////////////////////////////////


var map;
function JS_MarkMap(CLat,CLong,NoCenter,NoHybrid) {
//-----------------------------------------------
// Count locations 
//-----------------------------------------------
var total=0; var total_id=0;
var table=document.getElementById("locMapData");
if(table) {
var inputs=table.getElementsByTagName("input");
for(var i=0;i<inputs.length;i++){
if(inputs[i].name=='mapData') {total++;total_id=inputs[i].id.replace("map","")}}
}

if(total==1){
	if(document.getElementById('locSearchCenter')) 
		document.getElementById('locSearchCenter').style.display='none';
	JS_MarkSimpleMap(total_id);}
else {
JS_ClearMap();
//-----------------------------------------------
// Define Map
//-----------------------------------------------
if(!map) {
map = new GMap2(document.getElementById("map"));
map.removeMapType(G_SATELLITE_MAP);
map.addControl(new GSmallZoomControl3D());
if(!NoHybrid) map.addControl(new GMapTypeControl());
}

//-----------------------------------------------
// remove old markers
//-----------------------------------------------
for(var i=0;i<gmarkers.length;i++){map.removeOverlay(gmarkers[i]);}
if(markerHighlight) map.removeOverlay(markerHighlight);

//-----------------------------------------------
// set center point, if required
//-----------------------------------------------
var CPoint = new GLatLng(CLat, CLong);
if(cmarker[0]) map.removeOverlay(cmarker[0]);
if(!NoCenter) map.addOverlay(createCenter(CPoint));
map.setCenter(CPoint);
map.setCenter(CPoint, 16);	
//-----------------------------------------------
// calculate points from data, create offset if overlapping
//-----------------------------------------------
var bounds = new GLatLngBounds();
if(table) {
var x=0; var LngCount=0; var prevLong=CLong; var prevLat=CLat;
for(var i=0;i<inputs.length;i++){
if(inputs[i].name=='mapData') {
var arrPoint=inputs[i].value.replace(/'/g,'');
var id=inputs[i].id.replace("map","");

var calcLong=arrPoint.split(",")[0]; var calcLat=arrPoint.split(",")[1];
if(calcLong==prevLong && calcLat==prevLat){
	LngCount++; var currLong=(parseFloat(calcLong)+(parseFloat(LngCount)*.00005));} 
else {LngCount=0; var currLong=calcLong;}
var point = new GLatLng(calcLat, currLong);
prevLong=calcLong; prevLat=calcLat;

//-----------------------------------------------
// extend bounds to include distance from center to new point (in both directions to keep on map)
//-----------------------------------------------
bounds.extend(point);
var extPoint = new GLatLng(parseFloat(CLat)+(parseFloat(CLat)-parseFloat(calcLat)), parseFloat(CLong)+(parseFloat(CLong)-parseFloat(currLong)));
bounds.extend(extPoint);
	
//-----------------------------------------------
// add marker
//-----------------------------------------------
map.addOverlay(createMarker(point, x, id, 'result'));
x++;
}}

var zoom=map.getBoundsZoomLevel(bounds);
if (zoom<12) zoom=12;
else if (zoom>16) zoom=16;
map.setZoom(zoom);
}}}
//end MarkMap
////////////////////////////////////////////////////////////////////////////////////////

function JS_MarkSimpleMap(ref) {
//-----------------------------------------------
// Define Map
//-----------------------------------------------
if(!map) {
map = new GMap2(document.getElementById("map"));
map.removeMapType(G_SATELLITE_MAP);
map.addControl(new GSmallZoomControl3D());
map.addControl(new GMapTypeControl());
}

//-----------------------------------------------
// calculate points from data, create offset if overlapping
//-----------------------------------------------
var arrPoint=document.getElementById('map'+ref).value.replace(/'/g,'');
var calcLong=arrPoint.split(",")[0]; var calcLat=arrPoint.split(",")[1];
var point = new GLatLng(calcLat, calcLong);
map.setCenter(point, 15);	

//-----------------------------------------------
// add marker
//-----------------------------------------------
map.addOverlay(createMarker(point, 0, ref, 'simple'));
}
//end MarkSimpleMap
////////////////////////////////////////////////////////////////////////////////////////

function JS_HoodMap(CLat,CLong) {
//-----------------------------------------------
// Define Map
//-----------------------------------------------
if(!map) {
map = new GMap2(document.getElementById("map"));
map.removeMapType(G_SATELLITE_MAP);
map.addControl(new GSmallZoomControl3D());
map.addControl(new GMapTypeControl());
}
//-----------------------------------------------
// remove old markers
//-----------------------------------------------
for(var i=0;i<gmarkers.length;i++){map.removeOverlay(gmarkers[i]);}
if(markerHighlight) map.removeOverlay(markerHighlight);

//-----------------------------------------------
// Set center point
//-----------------------------------------------
var CPoint = new GLatLng(CLat, CLong);
map.setCenter(CPoint);
map.setCenter(CPoint, 16);	

//-----------------------------------------------
// calculate points from data, create offset if overlapping
//-----------------------------------------------
bounds = new GLatLngBounds();
var table=document.getElementById("locHoodList");
var inputs=table.getElementsByTagName("input");
var x=0; var LngCount=0; var prevLong=0; var prevLat=0;

for(var i=0;i<inputs.length;i++){
if(inputs[i].name=='mapData') {
var arrPoint=inputs[i].value.replace(/'/g,'');
var hood_id=inputs[i].id.replace("map","");
var calcLong=arrPoint.split(",")[0]; var calcLat=arrPoint.split(",")[1];
if(calcLong==prevLong && calcLat==prevLat){
	LngCount++; var currLong=(parseFloat(calcLong)+(parseFloat(LngCount)*.00025));} 
else {LngCount=0; var currLong=calcLong;}
var point = new GLatLng(calcLat, currLong);
prevLong=calcLong; prevLat=calcLat;
bounds.extend(point);

//-----------------------------------------------
// track high and low coordinates to re-center
//-----------------------------------------------
if(!x) {var hlat=calcLat; var llat=calcLat; var hlong=calcLong; var llong=calcLong}
else {
if (calcLat>hlat) hlat=calcLat;
if (calcLat<llat) llat=calcLat;
if (calcLong>hlong) hlong=calcLong;
if (calcLong<llong) llong=calcLong;
}
//-----------------------------------------------
// add marker
//-----------------------------------------------
map.addOverlay(createMarker(point, x, hood_id, 'hood',calcLat,calcLong));
x++;
}}

var nCPoint=new GLatLng((parseFloat(llat)+parseFloat(hlat))/2,(parseFloat(llong)+parseFloat(hlong))/2);
var zoom=map.getBoundsZoomLevel(bounds);
map.setCenter(nCPoint, zoom);	
}
//end MarkHood
////////////////////////////////////////////////////////////////////////////////////////


function JS_LocMap(mapData) {

var locLat=mapData.split(",")[0]; var locLong=mapData.split(",")[1]; var id=mapData.split(",")[2];

//-----------------------------------------------
// Define Map
locmap = new GMap2(document.getElementById("locmap"));
locmap.removeMapType(G_SATELLITE_MAP);
locmap.addControl(new GSmallZoomControl3D());
locmap.addControl(new GMapTypeControl());

//-----------------------------------------------
// Set current location
var CPoint = new GLatLng(locLat, locLong);
if(cmarker[0]) locmap.removeOverlay(cmarker[0]);
locmap.addOverlay(createLocEdit(locLat, locLong, id));
locmap.setCenter(CPoint);
locmap.setCenter(CPoint, 16);	
}

function JS_MovePoint(id,index,lat,long) {
	map.removeOverlay(gmarkers[index]);
	var point=new GLatLng(lat,long);
	map.addOverlay(createMarker(point, index, id, 'hood', lat, long));
	bounds.extend(point);
	if(hmarker) map.removeOverlay(hmarker);
	JS_ChangePoint(id,lat,long);
}



