/**
 * gmaps/application.js - Google Maps API Demo
 *
 * @version 18 Aug 2005
 * @author  Joseph Oster, wingo.com
 */

var viewAddressLU = 0;
var viewMarkers   = 1;
var viewDisclaimer = 2;
var viewSearchtips = 3;

/*
var viewRoutes    = 2;
var viewPolygons  = 3;
var viewBookmarks = 4;
*/
var numAppViews = 4;

var polyPD;
//var markerDescFld;

function viewName(viewNum) {
  switch (viewNum) {
    case viewAddressLU: return "AddressLU";
    case viewMarkers  : return "Markers";
	case viewDisclaimer: return "Disclaimer";
	case viewSearchtips: return "Searchtips";
    case viewRoutes   : return "Routes";
    case viewPolygons : return "Polygons";
    case viewBookmarks: return "Bookmarks";
    }
  }

function viewInit(viewNum) {
  switch (viewNum) {
    case viewAddressLU: {
      fldAddr.focus();
      break;
      }
    case viewMarkers  : {
      //markerDescFld.focus();
      break;
      }
    case viewDisclaimer  : {
      //markerDescFld.focus();
      break;
      }
    case viewRoutes   : {
      break;
      }
    case viewPolygons : {
      break;
      }
    case viewBookmarks: {
      break;
      }
    }
  }

var appLinks  = new Array(numAppViews);
var appPanels = new Array(numAppViews);

function showView(viewNum) {
	for (var i=0; i<numAppViews; i++) {
		var showIt = (viewNum == i);
		appPanels[i].style.display = showIt ? "block" : "none";
		if (showIt) {
			jt_alignCorner(appPanels[i], appLinks[i], "TR");
		}
		//alert(numAppViews + "    " + appPanels[i].style.display);
    }
}

function initApplication() {
	for (var viewNum=0; viewNum<numAppViews; viewNum++) {
		//alert(viewName(viewNum));
		appLinks[viewNum]  = document.getElementById("link" +  viewName(viewNum));
		appPanels[viewNum] = document.getElementById("panel" + viewName(viewNum));
    }
  }

var myPoints = new Array();
var myPolys = new Array();

function showMarkers() {
  var st = "";
  for (var i=0; i<myPoints.length; i++) {
    st += (i+1) + ') <a href="javascript:centerMarker(' + i + ')">center</a> - ';
    //if (myPoints[i].myContent) 
    st += '<a href="javascript:editMarker(' + i + ')">edit/move</a> - ';
    st += '<a href="javascript:removeMarker(' + i + ')">remove</a><br>';
    }
  document.getElementById("markerList").innerHTML = st;
  }

function centerMarker(idx) {
  map.recenterOrPanToLatLng(myPoints[idx].point);
  }

var markerEditIdx = -1;

function setMarkerButton(editIdx) {
  markerEditIdx = editIdx;
  document.getElementById('markerButton').innerHTML = (editIdx == -1) ? "Create Marker" : "Save Changes";
  jt_ShowNone("markerCancelButton", editIdx != -1);
  }

function editMarker(idx) {
  map.closeInfoWindow();
  centerMarker(idx);
 // markerDescFld.value = myPoints[idx].myContent;
  setMarkerButton(idx);
  //markerDescFld.focus();
  //alert(objToString(myPoints[idx]));
  }

function removeMarker(idx) {
  map.closeInfoWindow();
  map.removeOverlay(myPoints[idx]);
  myPoints.splice(idx, 1);
  setMarkerButton(-1);
  showMarkers();
  }

function addMarker(marker) {
  map.addOverlay(marker);
  myPoints[myPoints.length] = marker;
  showMarkers();
  }

function clearMarkerTxt() {
  markerDescFld.value = "";
  }

function createNewMarker() {
  //var txt = jt_safeHTML(markerDescFld.value);
  //var txt = markerDescFld.value;
  var marker = createMarker(map.getCenterLatLng(), "<span class='markerTxt'>" + jt_safeHTML(txt).replace(/\n/gi,"<br>") + "</span>");
  marker.myContent = txt;
  clearMarkerTxt();
  return marker;
  }

function clickMarkerButton() {
  if (markerEditIdx == -1) { // create new
    addMarker(createNewMarker());
    }
  else { // replace
    map.removeOverlay(myPoints[markerEditIdx]);
    myPoints[markerEditIdx] = createNewMarker();
    map.addOverlay(myPoints[markerEditIdx]);
    setMarkerButton(-1);
    }
  }


function showPolys() {
  var st = "";
  for (var i=0; i<myPolys.length; i++) {
    st += (i+1) + ') <a href="javascript:centerPoly(' + i + ')">center</a> - <a href="javascript:editPoly(' + i + ')">edit/move</a> - ' +
        '<a href="javascript:removePoly(' + i + ')">remove</a><br />'; //  + myPolys[i].points.length + '<br />' + objToString(myPolys[i], '<br />')
    }
  document.getElementById("polyList").innerHTML = st;
  }

function centerPoly(idx) {
  map.recenterOrPanToLatLng(myPolys[idx].myCP);
  }

var polyEditIdx = -1;

function setPolyButton(editIdx) {
  polyEditIdx = editIdx;
  document.getElementById('polyButton').innerHTML = (editIdx == -1) ? "Create " + polyPD.options[polyPD.selectedIndex].text : "Save Changes";
  jt_ShowNone("polyCancelButton", editIdx != -1);
  }

function editPoly(idx) {
  centerPoly(idx);
  foSetSelectVal(polyPD, (myPolys[idx].points.length-2) / 2);
  var PR = document.getElementById("polyRadius");
  PR.value = myPolys[idx].myRadius;
  document.getElementById("polyColor").value = myPolys[idx].color.substring(1);
  document.getElementById("polyWidth").value = myPolys[idx].weight;
  document.getElementById("polyTransparency").value = myPolys[idx].opacity;
  setPolyButton(idx);
  //alert(objToString(myPolys[idx]));
  }

function removePoly(idx) {
  map.removeOverlay(myPolys[idx]);
  myPolys.splice(idx, 1);
  setPolyButton(-1);
  showPolys();
  }

function createPolygon() {
  var numSides = foSelected(document.getElementById("polyShape"));
  var radius = document.getElementById("polyRadius").value;
  var color = document.getElementById("polyColor").value;
  var lineWidth = document.getElementById("polyWidth").value;
  var trans = document.getElementById("polyTransparency").value;
  var centerPoint = map.getCenterLatLng();
  var poly = drawPolygon(centerPoint.x, centerPoint.y, numSides, radius, color, lineWidth, trans);
  poly.myCP = centerPoint;
  poly.myRadius = radius;
  return poly;
  }

function clickPolyButton() {
  if (polyEditIdx == -1) { // create new
    var poly = createPolygon();
    myPolys[myPolys.length] = poly;
    showPolys();
    }
  else { // replace
    map.removeOverlay(myPolys[polyEditIdx]);
    myPolys[polyEditIdx] = createPolygon();
    setPolyButton(-1);
    }
  }

function clearAllOverlays() {
  map.clearOverlays();
  myPoints.length = 0;
  showMarkers();
  myPolys.length = 0;
  showPolys();
  }
