function includeJS(jsPath){
  var script = document.createElement("script");
  script.setAttribute("type", "text/javascript");
  script.setAttribute("src", jsPath);
  document.getElementsByTagName("head")[0].appendChild(script);
}

includeJS("/js/utils.js");

//READ PARAMETERS -------------------------------
var qsParm = qs(); //this should be coming from utils.js but cannot figure out why its not working
function qs() {
  var query = this.window.location.search.substring(1);
  var parms = query.split('&');
  var result = new Array();
  for (var i=0; i<parms.length; i++) {
    var pos = parms[i].indexOf('=');
    if (pos > 0) {
      var key = parms[i].substring(0,pos);
      var val = parms[i].substring(pos+1);
      result[key] = val;
    }
  }
  return result;
}

//--------------------------------------------------------
//var mapformParams = new Array();
//mapformParams[0] = "cat_19";
var markersQuery = 'http://www.spokencity.com/cgi-bin/getmarkers.cgi';

function getMarkers(querystring,parametersstring) {
   var ajaxRequest = new ajaxObject(querystring);
   ajaxRequest.callback = function (responseText) {
     JSONData = responseText.parseJSON();
     processData(JSONData);    
   }
   ajaxRequest.update(parametersstring, "POST");
}

function processData(JSONData) {
    for (var i = 0; i < (JSONData.markers.length-1); i++) {
      showAddress(JSONData.markers[i].latitude,JSONData.markers[i].longitude,JSONData.markers[i].text,JSONData.markers[i].category,20,20,JSONData.markers[i].photo);
    }
   hidediv('loading');
   hidediv('loading2');
}

//------------------------------
    var map = null;
    var markers_mapped = [];  //DB ids of all markers mapped / cache / not just those in window
    var markers_html = [];
    var markers_category = [];
    
    var geocoder = null;
    var svOverlay = null;
    //var myPano = null;

    function load(showcontrols) {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"),{mapTypes:[G_PHYSICAL_MAP,G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP]});
	//map.setMapType(G_PHYSICAL_MAP);
	map.setMapType(G_NORMAL_MAP);
	//map.setMapType(G_HYBRID_MAP);
	geocoder = new GClientGeocoder();
	showcontrols = '' + showcontrols;
	if (showcontrols != 'false') {
       	    map.addControl(new GLargeMapControl());
	    map.addControl(new GScaleControl());
            map.addControl(new GMapTypeControl());
	}

	var beginLat = 40;
	var beginLng = -97;
	var beginZoom = 4;
	if (document.mapform.maplat.value != '') {
		beginLat = document.mapform.maplat.value;	
	}
	if (document.mapform.maplong.value != '') {
                beginLng = document.mapform.maplong.value;
        }
	if (document.mapform.mapzoom.value != '') {
                beginZoom = document.mapform.mapzoom.value;
        }
	// if variables are in the query string, they overide it being in the mapform
	if (qsParm['maplat'] != null) {
		beginLat = qsParm['maplat'];
	}
	if (qsParm['maplong'] != null) {
                beginLng = qsParm['maplong'];
        }
	if (qsParm['mapzoom'] != null) {
                beginZoom = qsParm['mapzoom'];
        }

	var beginZoomNum = 1 * beginZoom; //hack to convert string to number
	var initLatLng = new GLatLng(beginLat, beginLng);
        map.setCenter(initLatLng, beginZoomNum); 

	//get markers in bound box
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	//var northWest = new GLatLng( northEast.lat(), southWest.lng() );
	//var southEast = new GLatLng( southWest.lat(), northEast.lng() );

	//k2009 added cat_19...
	var boundParams = 'long1=' + northEast.lng() + '&lat1=' + northEast.lat() + '&long2=' + southWest.lng() + '&lat2=' + southWest.lat(); 

	var showcats = "";
	for(i=0; i<document.mapform.elements.length; i++) {
		if (document.mapform.elements[i].type == "checkbox") {
                   showcats = showcats + '&' + document.mapform.elements[i].name + '=' + document.mapform.elements[i].checked;
		}
        }
	getMarkers(markersQuery, boundParams+showcats);

	//try {
          //svOverlay = new GStreetviewOverlay();
          //map.addOverlay(svOverlay);
          //myPano = new GStreetviewPanorama(document.getElementById("pano"));
	  //myPOV = {yaw:370.64659986187695,pitch:-10};
	  //myPano.setLocationAndPOV(initLatLng, myPOV);
          //GEvent.addListener(map,"click", function(overlay,latlng) {
	  //  if (latlng !== undefined) {
          //	myPano.setLocationAndPOV(latlng);
	  //  }
          // });
          //GEvent.addListener(myPano, "error", handleNoFlash);
	//} catch (e) {
	//}


        GEvent.addListener(map, "dragend", function() {
	  refreshMap();
        });
        GEvent.addListener(map, "zoomend", function() {
          refreshMap();
        });

	//showAddress(30.287791,-97.738581, 'University of Texas at Austin', 'ut',24,28);
	//showAddress(30.273541,-97.740684, 'Capital of Texas', 'capital',23,30);

      }


    }

    function handleNoFlash(errorCode) {
      if (errorCode == 603) {
        alert("Error: Flash doesn't appear to be supported by your browser");
        return;
      }
    }

    function refreshMap() {
   showdiv('loading');
   showdiv('loading2');
	map.clearOverlays();
	setBounds();
	//document.mapform.centerlat.value = map.getCenter().lat();
	//document.mapform.centerlong.value = map.getCenter().lng();
	markersParams = 'long1=' + document.mapform.long1.value + '&lat1=' + document.mapform.lat1.value + '&long2=' + document.mapform.long2.value + '&lat2=' + document.mapform.lat2.value;

        for(i=0; i<document.mapform.elements.length; i++) {
                if (document.mapform.elements[i].type == "checkbox") {
                   markersParams = markersParams + '&' + document.mapform.elements[i].name + '=' + document.mapform.elements[i].checked;
                }
        }
//alert('REFRESH ' + markersParams);

	getMarkers(markersQuery, markersParams);
    }

    function setBounds() {
        var bounds = map.getBounds();
        var southWest = bounds.getSouthWest();
        var northEast = bounds.getNorthEast();
        //var lngSpan = northEast.lng() - southWest.lng();
        //var latSpan = northEast.lat() - southWest.lat();

        document.mapform.long1.value = northEast.lng();
        document.mapform.long2.value = southWest.lng();
        document.mapform.lat1.value = northEast.lat();
        document.mapform.lat2.value = southWest.lat();
        document.mapform.zoom1.value = map.getZoom();
        document.mapform.maptype.value = getActiveMapType();

    }

function getActiveMapType() {
	var mapTypes = map.getMapTypes();
	var actType = map.getCurrentMapType();
	var mapName = "G_NORMAL_MAP";
	if (actType == mapTypes[1]){mapName = "G_SATELLITE_MAP";}
	else if (actType == mapTypes[2]){mapName = "G_HYBRID_MAP";}
	return mapName;
	//G_STREET_TYPE
}
	
function addMeMarker(address, zoom) {
	var icon = new GIcon();
	icon.image = "http://www.spokencity.com/images/me.gif";
	icon.shadow = "http://www.spokencity.com/images/shadow.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

          geocoder.getLatLng(
                address,
                function(point) {
		if (point) {
                    var marker = new GMarker(point, icon);
                    map.addOverlay(marker);
		    map.setCenter(point, zoom);
		}
                }
	   );
	}

function gotoMeAddress(address) {
        var icon = new GIcon();
	icon.image = "http://www.spokencity.com/images/me.gif";
	icon.shadow = "http://www.spokencity.com/images/shadow.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

	  geocoder.getLatLng(
		address, 
		function(point) {
		  if (!point) {
		    alert("sorry, " + address + " was not found");
		  } else {
		    var marker = new GMarker(point);
		    marker.icon = icon;
		    map.addOverlay(marker);
		    map.panTo(point);
		    map.setZoom(14);
		  }
		}
	  );	
}

function gotoAddress(address) {
	geocoder.getLatLng(
	address,
	function(point) {
	 if (!point) {
	   alert("sorry, " + address + " was not found");
	 } else {
	   map.panTo(point);
	   map.setZoom(14);
	 }
	}
	);
}

function gotoAddressMarker(address, category) {

        var geocoder = new GClientGeocoder();
          geocoder.getLatLng(
                address,
                function(point) {
                  if (!point) {
                    alert("sorry, " + address + " was not found");
                  } else {
                    map.panTo(point);
                    map.setZoom(14);
		    map.setBounds();
		    //createMarker(point, '', category, 20, 20); 
                  }
                }
          );

        }
	function showAddress(latitude, longitude, text, category, width, height) {
	  showAddress(latitude, longitude, text, category, width, height, "");
	}

	function showAddress(latitude, longitude, text, category, width, height, photourl) {
       	  var point = new GLatLng(latitude, longitude);
	  map.addOverlay(createMarker(point, text, category, width, height, photourl));
	}

        function createMarker(point, text, category, width, height, photourl) {
	var icon = new GIcon();
	icon.image = "http://www.spokencity.com/images/" + category + ".gif";
	icon.iconSize = new GSize(height, width);
	//if (category == "res") {
	//	icon.image = "http://www.spokencity.com" + photourl;
	//	icon.iconSize = new GSize(30, 30);
	//}
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

        var marker = new GMarker(point, icon);

            GEvent.addListener(marker, "mouseover", function() {
            	//marker.openInfoWindowHtml( text, {pixelOffset:2});
		//K 2009
		//map.openInfoWindowHtml(marker.getLatLng(), text, {pixelOffset: new GSize(0,-10)});
		map.openInfoWindowHtml(marker.getLatLng(), text, {pixelOffset: new GSize(0,-10)});
		//myPano.setLocationAndPOV(marker.getLatLng(),null);
            });

          return marker;
        }

function onNewLocation(lat, lng) {
  var latlng = new GLatLng(lat, lng);
  marker.setLatLng(latlng);
}


