﻿var gmap;
var mapExtension;
var overlays;
var geometry;
var pt;
var latLngWKID = 4326;
var kansasWKID = 3419;
var imageParams;
var cityCenter = { x: 2255082.2, y: 218996.4 };
var dynamicMap;
var myPano;
var flashAvailable = true;
var tmpX = 0;
var tmpY = 0;
var currentLatLng;
var markers=new Array();
var rank = 0;

var cm_map;
var cm_mapMarkers = [];
var cm_mapHTMLS = [];
var icon;

var param_wsId = "od6";
var param_ssKey = "o16162288751915453340.5631654799728214695";
var param_useSidebar = false;
var param_titleColumn = "code";
var param_descriptionColumn = "html";
var param_latColumn = "lat";
var param_lngColumn = "lng";
var param_rankColumn = "rank";
var param_iconType = "red";
var param_iconOverType = "orange";
var yaw = 0;

var bounds;

function setMaxZoomCenter() {
    alert("setner");
    gmap.getCurrentMapType().getMaxZoomAtLatLng(gmap.getCenter(), function (response) {
        if (response && response['status'] == G_GEO_SUCCESS) {
            alert("HI");
            gmap.setZoom(response['zoom']);
        }

        gmap.setMapType(G_NORMAL_MAP);
      //  gmap.setZoom(11);

    });
}
function initializeGMap(xtoset, ytoset) {
    gmap = new GMap2(document.getElementById("gmap"));
    gmap.addControl(new GSmallZoomControl3D());
    gmap.addControl(new GMenuMapTypeControl());

    //  	//set up our typeable icon
    icon = new GIcon();
   // icon.image = 'images/map-icon-blue.png';
 //   icon.iconSize = new GSize(20, 20);
   // icon.iconAnchor = new GPoint(10, 10);
   // icon.infoWindowAnchor = new GPoint(15.6, 4);

    gmap.enableScrollWheelZoom();
    gmap.setCenter(new GLatLng(38.963, -94.655), 11);
  //  gmap.setMapType(G_SATELLITE_MAP);

 //  setMaxZoomCenter();

    mapExtension = new esri.arcgis.gmaps.MapExtension(gmap);
    //  geometry = new esri.arcgis.gmaps.Geometry("http://sampleserver1.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer");

    geometry = new esri.arcgis.gmaps.Geometry("http://gis.opkansas.org/OPKS_AGS1/rest/services/Geometry/GeometryServer");
    // alert("h3i");
    //centerToLatLong(cityCenter,12);//new GLatLng(38.9573, -94.662);
    var initCoords = getCoords();
    if (initCoords.x == "") {
        projectToLatLong(cityCenter, centerAtLatLngCallback);
    } else {
        projectToLatLong(
            initCoords,
            function(dt) {
                centerAtLatLngCallback(dt);
                gmap.openInfoWindowHtml(gmap.getCenter(),
                "<div id='myaddy' style=\"width:280px;\">" +
                initCoords.add +
                "</div>");
                currentLatLng = gmap.getCenter();
            }
        );
    }


    //handle map click in case they don't want to type
    GEvent.addListener(gmap, 'click', popCoords);

    imageParams = new esri.arcgis.gmaps.ImageParameters();
    //imageParams.layerIds = [0, 1, 8, 25];

    //create custom dynamic layer
    //esri.arcgis.gmaps.DynamicMapServiceLayer(url,esri.arcgis.gmaps.ImageParameters?,opacity?,callback?);
    dynamicMap = new esri.arcgis.gmaps.DynamicMapServiceLayer(
	  	"http://gis.opkansas.org/OPKS_AGS1/rest/services/OPCares_ServiceRequest/MapServer/",
	  	imageParams, 0.75, dynmapcallback);
    myPano = new GStreetviewPanorama(document.getElementById("pano"));
    GEvent.addListener(myPano, "error", handleNoFlash);

    //check if had reload and not selected a location; if so number
   // alert("len "+ jQuery("#foundLocations .location").length + " index "+
  //  jQuery("#foundLocations").html().indexOf("DF901C") );
    if (jQuery("#foundLocations .location").length != 0 
        && jQuery("#foundLocations").html().indexOf("DF901C") == -1) {
        LocationActions();
    }
}



function dynmapcallback(groundov) {
    //Add groundoverlay to map using gmap.addOverlay()
    gmap.addOverlay(groundov);
    dynMapOv = groundov;
}
function projectToWebMercator(point, callbackFunctionName) {

    var params = new esri.arcgis.gmaps.ProjectParameters();
    params.geometries = [point]; // GOverlay[]
    params.inSpatialReference = latLngWKID;
    params.outSpatialReference = kansasWKID;

    geometry.project(params, callbackFunctionName);


}

function popCoords(overlay, clickedPoint) {

    if (overlay) {
        // 	alert("overlay?");
        return;
    }

    gmap.setZoom(gmap.getZoom() +2);
    var myfunc = function(projectResults) {
        // projectResults.geometries is an Array of ArcGISGeometryObject (i.e., ArcGISGeometryObject[])
        var pt = projectResults.geometries[0];
        gmap.openInfoWindowHtml(clickedPoint,
		    "<div id='myaddy' style=\"width:280px;\">Loading address...</div>");

        jQuery.getJSON("addressForXYJson.aspx?x=" + pt.x + "&y=" + pt.y,
            function(data) {
                var shutupie = data;
                var inOp = true;
                if (data.city.toLowerCase() != "overland park") {

                    inOp = false;
                }

                var s = data.address + ", " + data.city;
                if (!inOp) {
                    s += "<br/><span class=\"notInOp\">The point you clicked is not in " +
						"Overland Park. Please try again.</span>";
                }
                //actualaddress
                jQuery("#myaddy").html(s + "<br><br><table cellpadding=\"3\" border=\"0\" cellspacing=\"0\"><tr>" +
				            (
				                (inOp) ?
				                    "<td><input type=\"button\" id=\"useAddressBtn\" value=\"Use this Address\" /></td><td>"
				                    :
				                    "<td>&nbsp;</td><td>") +

                             (
                                (inOp && flashAvailable) ?
                                    "<div id=\"streetView\">" +
                                    "<span id=\"showStreetViewBtn\" class=\"fakeLink\">Show Street View</span>" +
                                    "</div>"
                                    :
                                    ""
                             ) +

                             "</td></tr></table>"


				            );


                if (inOp) {

                    currentLatLng = clickedPoint;

                }

                jQuery("#useAddressBtn").click(
                        function() {
                            setDisplayAddress(data.address);
                            jQuery("#myaddy").html(s);
                            setCoords(pt.x, pt.y);
                            setUsedMap(1, ((data.actualaddress == "true") ? 1 : 0));
                          //  makeSmallMap();
                        });



                if (inOp && flashAvailable) {
                    setStreetView();
                }

            //    jQuery("#showStreetViewBtn").click(showStreetView);



            }

		);
    }


    mapExtension.removeFromMap(overlays);
    projectToWebMercator(clickedPoint, myfunc);

}

function showPoint(projectResults) {
    // projectResults.geometries is an Array of ArcGISGeometryObject (i.e., ArcGISGeometryObject[])
    var pt = projectResults.geometries[0];
    gmap.openInfoWindowHtml(pt, "<b>Kansas Coordinates:</b><p>x: " +
		pt.x + ", y: " + pt.y + "</p>" +
		"<input type='button' value='Convert back to LatLong' onclick='projectToLatLong(pt);' />");
}

function centerToLatLong(kansasCoords, zoomLevel) {
    //   alert("kansas x:  "+kansasCoords.x +" y:  "+kansasCoords.y)

    gmap.setCenter(projectToLatLong(kansasCoords), zoomLevel);

}


var latlng = null;
var cnt = 0;
function projectToLatLong(pointToProject, callBackFunctionName) {

    latlng = null
    cnt = 0;
    var params = new esri.arcgis.gmaps.ProjectParameters();
    //alert("to project: x:  "+pointToProject.x +" y:  "+pointToProject.y)
    params.geometries = [{ x: pointToProject.x, y: pointToProject.y}]; // ArcGISGeometryObject[]

    params.inSpatialReference = kansasWKID;
    params.outSpatialReference = latLngWKID;
    params.geometryType = "esriGeometryPoint";

    geometry.project(params, callBackFunctionName);


}


function centerAtLatLngCallback(projectResults) {

    // projectResults.geometries is a 2-D Array of GOverlay (i.e., GOverlay[][])
    var marker = projectResults.geometries[0][0];
    var newCenterLatlng = marker.getLatLng();

    //  alert("latitude = " + latlng.lat() + ", longitude = " + latlng.lng());
    gmap.setCenter(newCenterLatlng);


}


function setStreetView() {
   // alert("str ve");
    //extra special code since IE turns it black when we hide it and bring it back with a new locaiton. ;P
//    myPano.remove();
//    myPano = new GStreetviewPanorama(document.getElementById("pano"));
//    GEvent.addListener(myPano, "error", handleNoFlash);
    var iw = gmap.getInfoWindow()
    myPano.setLocationAndPOV(iw.getPoint(), { yaw: yaw });

}

function showStreetView() {
    setStreetView();
    jQuery("#pano").show();
    var bmoff = jQuery("#pano").offset();
    jQuery("#closePano").css(
	  		{
	  		    left: bmoff.left + jQuery("#pano").width() - (jQuery("#closePano").width() + 6) + "px",
	  		    top: bmoff.top-20 + "px",
	  		    "z-index": 99999
	  		}
	  	);

    jQuery("#closePano").show();
}



function handleNoFlash(errorCode) {
    //alert(errorCode);

    jQuery("#pano, #closePano").hide();
    if (errorCode == 603) {
        flashAvailable = false;
        return;

    } else if (errorCode == 600) {

        jQuery(".streetView").html("<span style=\"font-size:.8em;\">No nearby street view.</span>");
        return;
    }
    // if (errorCode == GStreetviewPanorama.FLASH_UNAVAILABLE) {
    //    alert("Error: Flash doesn't appear to be supported by your browser");
    //   return;
    // }
}





//when we choose an address from the list
function setAddressToKeepIeHappy(markerNum) {
    //alert("I'M HAPPY" + markerNum);

    cm_mapMarkers[markerNum].setImage("MapIcon.ashx?color=DF901C&lbl=*");
    GEvent.clearListeners(cm_mapMarkers[markerNum]);

    var toremove = new Array();
    
    jQuery("#foundLocations .location").each(
    function(j) {
        //make blue
    //jQuery(this).unbind();
        if (jQuery(this).children(".idx").text() == markerNum) {

            //set the coordinates
            setCoords(jQuery(this).children(".x").text(), jQuery(this).children(".y").text());
            setDisplayAddress(jQuery(this).children(".name").text());
            //change list
            jQuery(this).removeClass("clicked");
            jQuery(this).addClass("selectedLocation");
            //image to orange asterisk
            jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=DF901C&lbl=*");
            jQuery(this).unbind();
        } else {
            //remove other markers
            gmap.removeOverlay(cm_mapMarkers[j]);
            //remove list items
            toremove.push(this); //jQuery(this).remove();

        }
    });
    //remove use address button
    jQuery("#ChooseAddressBtn").remove();
    jQuery("#clickButton").remove();
    jQuery("#infoWindowAddrName").addClass("infoWindowSelectedAddress");
    jQuery(toremove).each(function(i) {
        jQuery(this).remove();
    });

    CopyOver();
    
}

/**
* Function called when marker on the map is clicked.
* Opens an info window (bubble) above the marker.
* @param {Number} markerNum Number of marker in global array
*/
function cm_markerClicked(markerNum) {


    cm_mapMarkers[markerNum].openInfoWindowHtml(cm_mapHTMLS[markerNum]);
    //because IE is stupid
    jQuery("#clickButton").remove();

 
    cm_mapMarkers[markerNum].setImage("MapIcon.ashx?color=DF901C&lbl=" + ((markerNum + 1) + ""));
    jQuery("#foundLocations .location").removeClass("clicked");
        var j = 0;
        jQuery("#foundLocations .location").each(function() {
            jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=5f8aa4&lbl=" + ((j + 1) + ""));

            if (jQuery(this).children(".idx").text() == markerNum) {

                jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=DF901C&lbl=" + ((markerNum + 1) + ""));
                jQuery(this).addClass("clicked");

                jQuery(this).append("<input type=\"button\" id=\"clickButton\" value=\"Use this Address\" "+

                " onclick=\"setAddressToKeepIeHappy(" + markerNum + ");\" />");


                //alert(jQuery(this).children(".name"));
                var mya = jQuery(this).children(".name").text();
                var mysn = mya.split(" ")[0];
                //if street number, try to orient street view based on what side numbers are typically on
                if (!isNaN(parseInt(mysn))) {
                    if (mya.indexOf(" W ") == -1) {
                        if (mysn % 2 == 0) {
                            yaw = 270;
                        } else {
                            yaw = 90;
                        }
                    } else {
                        if (mysn % 2 == 0) {
                            yaw = 0;
                        } else {
                            yaw = 180;
                        }
                    }
                } else {
                    //set north
                    yaw = 0;
                }
            }
            j++;
        });

    //IE IS STUPIDDDDDD
    //alert("HEY");
    if (flashAvailable) {
        setStreetView();
    }
      
  


}


function cm_markerHover(markerNum) {

    if (cm_mapMarkers.length >= markerNum + 1) {
        

        jQuery("#foundLocations .location").removeClass("hovered");
        //change map icon color
        // cm_mapMarkers[markerNum].setImage("MapIcon.ashx?color=aebd25&lbl=" + ((markerNum + 1) + ""));



        cm_mapMarkers[markerNum].setImage("MapIcon.ashx?color=aebd25&lbl=" + ((markerNum + 1) + ""));
        jQuery("#foundLocations .location").each(function(j) {
            //make blue
            jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=5f8aa4&lbl=" + ((j + 1) + ""));

            if (jQuery(this).children(".idx").text() == markerNum) {
                //change list
                jQuery(this).addClass("hovered");
                //hovered is green
                jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=aebd25&lbl=" + ((j + 1) + ""));
            }
        });

    }
}




function cm_markerOut(markerNum) {


    jQuery("#foundLocations .location").removeClass("hovered");
  
    cm_mapMarkers[markerNum].setImage("MapIcon.ashx?color=5f8aa4&lbl=" + ((markerNum + 1) + ""));
    jQuery("#foundLocations .location").each(function(j) {

        jQuery(this).children(".mkrImg").attr("src", "MapIcon.ashx?color=5f8aa4&lbl=" + ((j + 1) + ""));
        
 }
);
}

/**
* Creates marker with ranked Icon or blank icon,
* depending if rank is defined. Assigns onclick function.
* @param {GLatLng} point Point to create marker at
* @param {String} title Tooltip title to display for marker
* @param {String} html HTML to display in InfoWindow
* @param {Number} rank Number rank of marker, used in creating icon
* @return {GMarker} Marker created
*/
function cm_createMarker(point, title, html, rank) {
    var markerOpts = {};

    var newIcon = new GIcon(G_DEFAULT_ICON);
    newIcon.image = "MapIcon.ashx?color=5f8aa4&lbl=" +((rank + 1) +"");

    newIcon.shadow = "images/mapIcon/12x12round_bg.png";
    newIcon.iconSize = new GSize(20, 20);
    newIcon.iconAnchor = new GPoint(10, 10);


  
    var newPoint = point;
    var marker =
        new GMarker(newPoint, { icon: newIcon });

//    new LabeledMarker(newPoint, markerOpts);

    GEvent.addListener(marker, "click", function() {
         marker.openInfoWindowHtml(html);
        cm_markerClicked(rank);
    });

    GEvent.addListener(marker, "mouseover", function() {
        cm_markerHover(rank);
    });

    GEvent.addListener(marker, "mouseout", function() {

        cm_markerOut(rank);
    });

    GEvent.addListener(marker, "infowindowclose", 
        function() {
            marker.setImage("MapIcon.ashx?color=5f8aa4&lbl=" +((rank + 1) +""));
        }
    );

    return marker;


}
