﻿
var mapMarkers = [];
var map;

var i = 0;
/* arrays to hold variants of the info window html with get direction forms open */
var to_htmls = [];
var from_htmls = [];
var gmarkers = [];
var htmls = [];



//var onbeach = false;
//var haspool = false;
//var hotelprice = "";
//var region = "";

// Initialize map - called when page is loaded
function load() {

    if (IsNumeric(GetQueryStringValueFor("z")) == true) {
        loadHotelLocations();
    }
    else {
        initMap();
    }

}
function initMap() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        map.setMapType(G_HYBRID_TYPE);
        map.setCenter(new GLatLng(40.078071, -101.689453), 3);
    }
}

// Show Google map with hotel data
function showMap() {
    // alert('in showmap');
    // Find boundary points of hotel location
    var bounds = new GLatLngBounds();
    var map = new GMap2(document.getElementById("map"));
    for (var i = 0; i < mapMarkers.length; i++) {
        map.addOverlay(mapMarkers[i]);
        bounds.extend(mapMarkers[i].getPoint());
    }
    // alert('showmap');
    // Reset center and zoom level based on queried hotel locations 
    map.setCenter(bounds.getCenter());
    map.setZoom(map.getBoundsZoomLevel(bounds));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());

}

// Clear map points
function clearMap() {
    mapPoints = [];
    map.clearOverlays();
}
function createHotelMarker(point) {
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
        var opts = { pixelOffset: new GSize(32, 5), maxWidth: 550 };
        marker.openInfoWindowHtml(point.name, opts);
    });
    return marker;
}


function createMarker(point, address2,city,state,zip) {

    var marker = new GMarker(point);


    //http://maps.google.com/maps?saddr=165+East+Ontario+Street,+Chicago,+Illinois+60611&daddr=2301+S+Lake+Shore+Dr,+Chicago,+IL+60616&hl=en
    //Directions html
    /* The info window version with the "to here" form open */
    to_htmls[i] = '<br>Directions: <b>To here</b> - <a href="javascript:fromhere(' + i + ')">From here</a>' +
         '<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
         '<input type="text" SIZE=40 MAXLENGTH=40 name="saddr" id="saddr" value="" /><br>' +
         '<INPUT value="Get Directions" TYPE="SUBMIT">' +
         '<input type="hidden" name="daddr" value="' + address2 + ',' + city + ',' + state + ',' + zip +
         /*'<input type="hidden" name="daddr" value="' + point.lat() + ',' + point.lng() +*/
    /*  "(" + name + ")" + */
         '"/>';

    /* The info window version with the "to here" form open */
    from_htmls[i] = '<br>Directions: <a href="javascript:tohere(' + i + ')">To here</a> - <b>From here</b>' +
         '<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
         '<input type="text" SIZE=40 MAXLENGTH=40 name="daddr" id="daddr" value="" /><br>' +
         '<INPUT value="Get Directions" TYPE="SUBMIT">' +
         '<input type="hidden" name="saddr" value="' + address2 + ',' + city + ',' + state + ',' + zip+
         /*'<input type="hidden" name="saddr" value="' + point.lat() + ',' + point.lng() +*/
    /* "(" + name + ")" + */
         '"/>';

    /* The inactive version of the direction info */
    var directions = '<p id="directions">Directions: <a href="javascript:tohere(' + i + ')">To here</a> - <a href="javascript:fromhere(' + i + ')">From here</a></p>';


    var infoTabs = [
          new GInfoWindowTab("Course Info", point.name+"<br/>"+directions),
          
          new GInfoWindowTab("URL", "<a href=\"http://www.nra.org\">http://www.nra.org</a>")
       ];
    GEvent.addListener(marker, 'click', function() {
        //marker.openInfoWindowHtml(point.name);
        marker.openInfoWindowTabsHtml(infoTabs);
    });

    gmarkers[i] = marker;
    htmls[i] = directions; ;
    i++;

    return marker;
}


// functions that open the directions forms
function tohere(i) {
    gmarkers[i].openInfoWindowHtml(to_htmls[i]);
}
function fromhere(i) {
    gmarkers[i].openInfoWindowHtml(from_htmls[i]);
}




function showHotels() {
    clearMap();
    loadHotelLocations();
}

function loadHotelLocations() {


    GDownloadUrl("./genXml.aspx?z=" + GetQueryStringValueFor("z") + '&m=' + GetQueryStringValueFor('m') + '&c=' + GetQueryStringValueFor('c'), function(data, responseCode) {
        var xml = GXml.parse(data);
        //alert(xml.documentElement.getElementsByTagName("INSTRUCTOR").length);
        var markers = xml.documentElement.getElementsByTagName("INSTRUCTOR");

        if (markers.length == 0) {
            alert("Your query returned no results. Please broaden your search criteria and try again.");
        } else {

            for (var i = 0; i < markers.length; i++) {
                var point = new GLatLng(parseFloat(markers[i].getAttribute("LATITUDE")), parseFloat(markers[i].getAttribute("LONGITUDE")));

                var address1 = markers[i].getAttribute("ADDRESS1");
                var address12 = markers[i].getAttribute("ADDRESS");
                var address2 = markers[i].getAttribute("ADDRESS2");
                var address3 = markers[i].getAttribute("ADDRESS3");
                var city = markers[i].getAttribute("CITY");
                var state = markers[i].getAttribute("STATE");
                var zip = markers[i].getAttribute("ZIP");
                var ratingHtml = "<B>Rating</B>";
                var address = "";
                if (address1 != address2) { address = address1 + "<BR>" + address2; } else { address = address1; }
                if (address3.length > 0) { address = address + "<BR>" + address3; }
                address = address + "<BR>" + city + ", " + state + " " + zip;

                var htmlstr = "";
                if (markers[i].getAttribute("CANREGISTER") == "Y")
                    htmlstr = "<TR><td colspan=\"2\" style=\"font-size:10pt;color:blue\"><a href=\"SignupStudent.aspx?id=" + markers[i].getAttribute("COURSEID") + "\"><strong style=\"color:blue\"> Signup for the class<strong></a>" + "</td></TR>";

                point.name = "<div class='info-window'><b>" + "</b><br/>" +
                "<table style=\"font-family:arial;font-size:10px;color:black\"><tr><td><strong>Course: </strong></td><td>" + markers[i].getAttribute("TITLE") + "</td></tr>" +
                "<tr><td><strong> Class Date: </strong></td><td>" + markers[i].getAttribute("CLASSDATE") + "</td></tr>" +
                "<tr><td><strong> Address: </strong></td><td>" + address + "</td></tr>" + htmlstr +
                "<TR><TD>Lat:" + markers[i].getAttribute("LATITUDE") + "</td><td>long: " + markers[i].getAttribute("LONGITUDE") + "</TD></tr>" +
                " </table><br/></div>";



                mapMarkers.push(createMarker(point, address12, city, state, zip));
            }

            showMap();
        }
    });
}




function GetQueryStringValueFor(key) {
    var valueToReturn = "";
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i = 0; i < parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            if (key == parms[i].substring(0, pos)) {
                valueToReturn = parms[i].substring(pos + 1);
            }
        }
    }
    return valueToReturn;
}

function IsNumeric(strString)
//  check for valid numeric strings	
{
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;

    if (strString.length == 0) return false;

    //  test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++) {
        strChar = strString.charAt(i);
        if (strValidChars.indexOf(strChar) == -1) {
            blnResult = false;
        }
    }
    return blnResult;
}