if(typeof(velir) == "undefined")
    velir = {};
neverReZoom = false;
velir.googleMaps = {
    createMapSimple: function(containerId, latitude, longitude, zoomLevel, showMapTypes, controlType) {
        mapMarkers = new Array();
        lastInfoWindow = new google.maps.InfoWindow({
            content: ""
        });
        var latlng = new google.maps.LatLng(latitude, longitude);
        var myOptions = {
            zoom: zoomLevel,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById(containerId), myOptions);
        checkZoom = true;
        zoomListener = google.maps.event.addListener(map, 'zoom_changed', function(){
            if(map.getZoom() > 14 && checkZoom){
                map.setZoom(14);
                checkZoom = false;
            }
        });
        bounds = null;
    },
//    createMap: function(containerId, latitude, longitude, zoomLevel, showMapTypes, controlType, buttonId, textId, sortById, sortDirId) {
//        mapMarkers = new Array();
//        button = buttonId;
//        textField = textId;
//        sortByField = sortById;
//        sortDirField = sortDirId;
//        lastInfoWindow = new google.maps.InfoWindow({
//            content: ""
//        });
//        var latlng = new google.maps.LatLng(latitude, longitude);
//        
//        var myOptions = {
//            zoom: zoomLevel,
//            center: latlng,
//            mapTypeId: google.maps.MapTypeId.ROADMAP
//        };
//        map = new google.maps.Map(document.getElementById(containerId), myOptions);
//        bounds = null;

//        secondaryMarkersListener = google.maps.event.addListener(map, 'bounds_changed', velir.googleMaps.getSecondaryMarkers);
//        mapBoundsListener = google.maps.event.addListener(map, 'bounds_changed', velir.googleMaps.saveBoundCoords);
//        checkZoom = true;
//        zoomListener = google.maps.event.addListener(map, 'zoom_changed', function(){
//            if(map.getZoom() > 14 && !neverReZoom && checkZoom){
//                map.setZoom(14);
//                checkZoom = false;
//            }
//        });
//        /*
//        google.maps.event.addListener(map, 'dragend', function() {
//            $.ajax({
//                type: "POST",
//                url: "/Services/Search.aspx/GetInfoWindow",
//                data: "{'ac_num': '" + ac_num + "'}",
//                contentType: "application/json; charset=utf-8",
//                dataType: "json",
//                success: function(data) {
//            
//                }
//            }); 
//        });*/
//    },
		createMap: function(containerId, latitude, longitude, zoomLevel, showMapTypes, controlType) {
        mapMarkers = new Array();
        infowindow = new google.maps.InfoWindow();
        lastInfoWindow = new google.maps.InfoWindow({
            content: ""
        });
        var latlng = new google.maps.LatLng(latitude, longitude);
        
        var myOptions = {
            zoom: zoomLevel,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById(containerId), myOptions);
        bounds = null;

        mapBoundsListener = google.maps.event.addListener(map, 'bounds_changed', velir.googleMaps.saveBoundCoords);
        checkZoom = true;
        zoomListener = google.maps.event.addListener(map, 'zoom_changed', function(){
            if(map.getZoom() > 14 && !neverReZoom && checkZoom){
                map.setZoom(14);
                checkZoom = false;
            }
        });
    },
    createMap1: function(containerId, swLat, swLng, neLat, neLng, zoomLevel, showMapTypes, controlType, buttonId, textId, sortById, sortDirId){
        var swPoint = new google.maps.LatLng(swLat, swLng);
        var nePoint = new google.maps.LatLng(neLat, neLng);
        
        var tempBounds = new google.maps.LatLngBounds(swPoint, nePoint);
        var centerPoint = tempBounds.getCenter();
        geocoder = new google.maps.Geocoder();
        if(geocoder){
            geocoder.geocode({'latLng': centerPoint}, function(results, status) {
                if(status == google.maps.GeocoderStatus.OK){
                    if(results[0]){
                        var zip;
                        var city;
                        var county;
                        for(var i in results[0].address_components){
                            for(var n in results[0].address_components[i].types){
                                if(results[0].address_components[i].types[n] == "postal_code"){
                                    zip = results[0].address_components[i].short_name;
                                }
                                else if(results[0].address_components[i].types[n] == "administrative_area_level_3"){
                                    city = results[0].address_components[i].short_name;
                                }
                                else if(results[0].address_components[i].types[n] == "administrative_area_level_2") {
                                    county = results[0].address_components[i].short_name;
                                }
                            }
                        }
                        if(zip != undefined && zoomLevel > 10){
                            $(".searchBox").val(zip);
                        }
                        else if(city != undefined && zoomLevel > 7){
                            $(".searchBox").val(city);
                        }
                        else if(county != undefined){
                            $(".searchBox").val(county);
                        }
                        else if(zip != undefined){
                            $(".searchBox").val(zip);
                        }
                        else if(city != undefined){
                            $(".searchBox").val(city);
                        }
                        document.title = $(".searchBox").val() + " - " + document.title;
                    }
                }
            });
        }
        neverReZoom = true;
        velir.googleMaps.createMap(containerId, centerPoint.lat(), centerPoint.lng(), zoomLevel, showMapTypes, controlType, buttonId, textId, sortById, sortDirId);
    },
    removeMarkers: function() {
        for (var i in mapMarkers) {
            mapMarkers[i].setMap(null);
        }
        mapMarkers = new Array();
    },
    saveBoundCoords: function(){
        var tempBounds = map.getBounds();
        var neLat = tempBounds.getNorthEast().lat();
        var neLong = tempBounds.getNorthEast().lng();
        var swLat = tempBounds.getSouthWest().lat();
        var swLong = tempBounds.getSouthWest().lng();
        var centerLat = map.getCenter().lat();
        var centerLong = map.getCenter().lng();
        
        $("input.southwest").val(swLat + "," + swLong);
        $("input.northeast").val(neLat + "," + neLong);
        $("input.centerCoord").val(centerLat + "," + centerLong);
        $("input.zoom").val(map.getZoom());
    },
    getSecondaryMarkers: function() {
        var tempBounds = map.getBounds();
        var neLat = tempBounds.getNorthEast().lat();
        var neLong = tempBounds.getNorthEast().lng();
        var swLat = tempBounds.getSouthWest().lat();
        var swLong = tempBounds.getSouthWest().lng();
        var page = 1;
        var sortBy = "Distance";
        var sortDir = "ASC";
        var querystring = window.location.search.substring(1);
    
        if (document.getElementById(textField).value != null && document.getElementById(textField).value != undefined)
            page = document.getElementById(textField).value;

        if (document.getElementById(sortByField).value != null && document.getElementById(sortByField).value != undefined)
            sortBy = document.getElementById(sortByField).value;

        if (document.getElementById(sortDirField).value != null && document.getElementById(sortDirField).value != undefined)
            sortDir = document.getElementById(sortDirField).value;

        if(querystring != null && querystring != undefined && querystring != ""){
        $.ajax({
            type: "POST",
            url: "/Services/Search.aspx/GetSecondaryMarkers",
            data: "{'querystring': '" + querystring + "', 'page': '" + page + "', 'sortBy':'" + sortBy + "', 'sortDir': '" + sortDir + "', 'minLat': '" + swLat + "', 'maxLat': '" + neLat + "', 'minLng': '" + swLong + "', 'maxLng': '" + neLong + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                var commands = data.d.split("\n");
                for (var i = 0; i < commands.length; i++) {
                    eval(commands[i]);
                }
            }
        });
        }
        google.maps.event.removeListener(secondaryMarkersListener);
    },
    showMarker: function(title) {
        $.ajax({
            type: "POST",
            url: "/Services/Search.aspx/GetInfoWindow",
            data: "{'ac_num': '" + ac_num + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                var infowindow = new google.maps.InfoWindow({
                    content: data.d
                });
                lastInfoWindow.close();
                infowindow.open(map, mapMarkers[ac_num]);
                lastInfoWindow = infowindow;
                $("acronym").tooltip({
	            bodyHandler: function() {
		            return $("div." + $(this).html()).html();
	            },
	            showURL: false
            });
                //TODO need to find a better way to load the next page of results, this is causing the markers to hop even when clicking on a marker from the current page
                if (document.getElementById(textField).value != page) {
                    document.getElementById(textField).value = page;
                    setTimeout("__doPostBack('" + button + "','')", 0);
                }

            }
        });
    },
    //Performs the same task as addMarker but accepts a JSON object
    addMarkerByJSON: function(marker) {
        velir.googleMaps.addMarker(marker["ac_num"], marker["title"], marker["latitude"], marker["longitude"], marker["iconUrl"], marker["iconWidth"], marker["iconHeight"], marker["shadowUrl"], marker["shadowWidth"], marker["shadowHeight"], marker["page"], marker["zIndex"]);
    },
    //Takes in the necessary properties for a map marker and adds it to the mapMarkers array
    addMarker: function(hospitalId, title, latitude, longitude, infoWindowHtml, iconUrl, iconWidth, iconHeight, shadowUrl, shadowWidth, shadowHeight, zIndex) {
        //Chrome requires the spaces be replaced with %20's
        iconUrl = iconUrl.replace(/ /g, "%20");
        var latlng = new google.maps.LatLng(latitude, longitude);
        // Count how many providers at this LatLng have been added to the map
        var index = 0;
        for(var i in mapMarkers){
            if(latlng.equals(mapMarkers[i].getPosition())){
                index++;
            }
        }
        if (zIndex == 1 || zIndex == -1) {
            if (bounds == null) {
                bounds = new google.maps.LatLngBounds();
            }
            bounds.extend(latlng);
        }
        var image = new google.maps.MarkerImage(
            iconUrl,
            new google.maps.Size(iconWidth, iconHeight),
            new google.maps.Point(0, 0),
            new google.maps.Point((iconWidth - (5*index)), (iconHeight - (5*index)))
        );
        var shape = {
            coord: [1, 1, 1, 20, 18, 20, 18, 1],
            type: 'poly'
        };
        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
            icon: image,
            title: title,
            zIndex: zIndex
        });
//        var infowindow = new google.maps.InfoWindow({
//				    content: infoWindowHtml
//		    });
		    
        mapMarkers[hospitalId] = marker;
        
        google.maps.event.addListener(marker, 'click', function() {
//						lastInfoWindow.close();
//            infowindow.open(map, mapMarkers[hospitalId]);
//            lastInfoWindow = infowindow;
							infowindow.setContent(infoWindowHtml);
							infowindow.open(map, marker);
        });
    },
    closeOpenWindow: function() {
        lastInfoWindow.close();
    },
    setNewZoomLevel: function() {
        if (bounds != null && !neverReZoom) {
            checkZoom = true;
            map.fitBounds(bounds);
        }
    },
    clearBounds: function() {
        bounds = new google.maps.LatLngBounds();
    },
    closeInfoWindow: function(postBackElementId) {
        var buttonId = button;
        var matchIndex = buttonId.indexOf("$");
        
        while(matchIndex != -1){
            buttonId = buttonId.replace("$", "_");
            matchIndex = buttonId.indexOf("$");
        }
        
        if(buttonId != postBackElementId){
            velir.googleMaps.closeOpenWindow();
        }
    },
    centerZoomMap: function(latitude, longitude, zoomLevel) {
        var latlng = new google.maps.LatLng(latitude, longitude);
        map.setCenter(latlng);
        map.setZoom(zoomLevel);
    },
    addHospitalLink: function(hospitalId, infoWindowHtml, index) {
				var hospitalLink = document.getElementById("ctl11_rptHospitalsInArea_ctl0" + (index + 1) + "_bg_bullet_" + (index + 1));
				
				if (hospitalLink.addEventListener){
					hospitalLink.addEventListener('click', function() {
					infowindow.setContent(infoWindowHtml);
					infowindow.open(map, mapMarkers[hospitalId]);
					}, false);
				}
				else{
					hospitalLink.attachEvent('onclick', function() {
					infowindow.setContent(infoWindowHtml);
					infowindow.open(map, mapMarkers[hospitalId]);
					});
				}
				
    }
}