﻿
var map;
var ctrl;

function formatCurrency(num)
{
    num = num.toString().replace(/\$|\,/g, '');
    if (isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    cents = num % 100;
    num = Math.floor(num / 100).toString();
    if (cents < 10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
        num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
    return (((sign) ? '' : '-') + '$' + num + '.' + cents);
}

function LoadGoogleMap()
{
    if (GBrowserIsCompatible())
    {
        map = new GMap2(document.getElementById("Map"));
        map.setCenter(new GLatLng(45.5651, -94.3122), 3);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();

        try { ctrl.remove(); } catch (e) { }
        ctrl = getBusyOverlay(document.getElementById('MapContainer'), { text: 'Loading Map Data...', color: '#4b2dcf', opacity: 0.5 }, { speed: 30, color: '#000000', size: 120, type: 'oval', iradius: 32, weight: 12, count: 13, minopac: 0.07 });

        var grequest = GXmlHttp.create();

        grequest.open("GET", "/MapData/MapData.xml", true);
        grequest.onreadystatechange = function()
        {
            if (grequest.readyState == 4)
            {
                var xml = GXml.parse(grequest.responseText);

                var airports = xml.documentElement.getElementsByTagName("Airport");

                for (var i = 0; i < airports.length; i++)
                {
                    var AirportCode = airports[i].getAttribute("Code");
                    var AirportName = airports[i].getAttribute("Name");
                    var Latitude = parseFloat(airports[i].getAttribute("Latitude"));
                    var Longitude = parseFloat(airports[i].getAttribute("Longitude"));
                    var isLastAirport = 0;
                    if (i == airports.length - 1)
                    {
                        isLastAirport = 1;
                    }
                    setTimeout("CreateMarker(map, \"" + AirportCode + "\", \"" + AirportName + "\", " + Latitude + ", " + Longitude + ", " + isLastAirport + ");", (i / 8) * 150);
                }

            }
        }
        grequest.send(null);
    }
}
function CreateMarker(map, AirportCode, AirportName, Latitude, Longitude, isLastAirport)
{
    var Point = new GLatLng(Latitude, Longitude);

    var micon = new GIcon();
    micon.image = '/MapData/Marker.png';
    micon.iconSize = new GSize(32, 32);
    micon.iconAnchor = new GPoint(16, 16);
    micon.infoWindowAnchor = new GPoint(25, 7);

    var Marker = new LabeledMarker(Point, { title: "\"" + AirportName + "\"", icon: micon, clickable: true, labelText: AirportCode, labelOffset: new GSize(-16, -16), labelClass: "markerLabel" });
    GEvent.addListener(Marker, "click", function() { MarkerClicked(Marker, AirportCode); });
    map.addOverlay(Marker);
    if (isLastAirport)
    {
        try { ctrl.remove(); } catch (e) { }
    }
}

function MarkerClicked(Marker, AirportCode)
{
    var grequest = GXmlHttp.create();
    var BeginScrollingDIV = "<div style=\"width: 500px; height: 250px; overflow: auto;\">"
    var EndScrollingDIV = "</div>"
    var HasRates = 0, HasInstructions = 0, HasAffiliates = 0;
    var NumberOfImages = 10;
    var RandomNumber = Math.floor(Math.random() * NumberOfImages) + 1

    grequest.open("GET", "/MapData/AirportData/" + AirportCode + ".xml", true);
    grequest.onreadystatechange = function() {
        if (grequest.readyState == 4) {
            var RateHTML = "", InstructionHTML = "", AffiliateHTML = "";
            var xml = GXml.parse(grequest.responseText);

            var AirportName = xml.documentElement.getAttribute("Name");
            var AirportURL = xml.documentElement.getAttribute("URL");
            var AirportNameCode = AirportName + " (" + AirportCode + ")";

            var DestinationsXML = xml.documentElement.getElementsByTagName("Destination");

            RateHTML = RateHTML + "<div class=\"MapAirportName\">" + AirportNameCode + "</div>";
            RateHTML = RateHTML + "<hr />";

            RateHTML = RateHTML + "<table class=\"MapRateTable\">";
            RateHTML = RateHTML + "<tr>";
            RateHTML = RateHTML + "<th>Destination</th><th>Vehicle</th><th>Base Rate</th><th>Total Rate</th>";
            RateHTML = RateHTML + "</tr>";
            var AlternateRow = false;
            for (var i = 0; i < DestinationsXML.length; i++) {
                HasRates = 1;
                var City = DestinationsXML[i].getAttribute("City");
                var State = DestinationsXML[i].getAttribute("State");
                var Country = DestinationsXML[i].getAttribute("Country");
                var VehicleType = DestinationsXML[i].getAttribute("Vehicle");
                var Rate = DestinationsXML[i].getAttribute("Rate");
                var InclusiveRate = DestinationsXML[i].getAttribute("InclusiveRate");

                if (AlternateRow == false)
                    RateHTML = RateHTML + "<tr>";
                else
                    RateHTML = RateHTML + "<tr bgcolor=\"#FFEEEE\">";

                RateHTML = RateHTML + "<td>" + City + ", " + State + " " + Country + "</td>";
                RateHTML = RateHTML + "<td>" + VehicleType + "</td>";
                RateHTML = RateHTML + "<td>" + formatCurrency(Rate) + "</td>";
                RateHTML = RateHTML + "<td>" + formatCurrency(InclusiveRate) + "</td>";
                RateHTML = RateHTML + "</tr>";

                if (i < (DestinationsXML.length - 1))
                {
                    if(City != DestinationsXML[i+1].getAttribute("City"))
                        AlternateRow = !AlternateRow;
                }
                //RateHTML = RateHTML + "Transfers to/from " + City + ", " + State + "<br />"
                //RateHTML = RateHTML + "&bull; Sedan: " + formatCurrency(Rate) + "<br />";
            }
            RateHTML = RateHTML + "</table>";
            RateHTML = RateHTML + "<img class=\"MapAirportImage\" src=\"/MapData/AirportImages/" + RandomNumber + ".jpg\">";
            RateHTML = RateHTML + "";
            if(AirportURL != "")
                RateHTML = RateHTML + "<a  target=\"_blank\" href=\"" + AirportURL + "\">Visit " + AirportName + " Website</a><br />";
            RateHTML = RateHTML + "<ul class=\"MapBulletList\">";
            RateHTML = RateHTML + "<li>Prices subject to change.</li>";
            RateHTML = RateHTML + "<li>Prices include gratuity and current fuel service fees.</li>";
            RateHTML = RateHTML + "<li>Not inclusive of parking, tolls, meet & greet fees, waiting time, or any extra charges.</li>";
            RateHTML = RateHTML + "</ul>";

            var InstructionsXML = xml.documentElement.getElementsByTagName("Instruction");
            InstructionHTML = InstructionHTML + "<div class=\"MapSectionTitle\">" + AirportNameCode + " Instructions</div>"
            for (var i = 0; i < InstructionsXML.length; i++) {
                HasInstructions = 1;
                var Title = InstructionsXML[i].getAttribute("Title");
                var Description = InstructionsXML[i].getAttribute("Description");

                InstructionHTML = InstructionHTML + "<div class=\"MapSectionTitle\">" + Title + ":</div><div class=\"MapSectionDescription\">" + Description + "</div>";
            }

            var AffiliatesXML = xml.documentElement.getElementsByTagName("Affiliate");
            for (var i = 0; i < AffiliatesXML.length; i++) {
                HasAffiliates = 1;
                var Code = AffiliatesXML[i].getAttribute("Code");
                var Name = AffiliatesXML[i].getAttribute("Name");
                var Contact = AffiliatesXML[i].getAttribute("Contact");
                var Phone1 = AffiliatesXML[i].getAttribute("Phone1");
                var Phone2 = AffiliatesXML[i].getAttribute("Phone2");
                var Fax = AffiliatesXML[i].getAttribute("Fax");
                var EMail = AffiliatesXML[i].getAttribute("EMail");
                var ContactMethod = AffiliatesXML[i].getAttribute("ContactMethod");

                AffiliateHTML = AffiliateHTML + "<h3>" + (i + 1) + "." + Name + ":</h3>";
                AffiliateHTML = AffiliateHTML + "<table>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Code:</b></td><td>" + Code + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Contact:</b></td><td>" + Contact + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Phone:</b></td><td>" + Phone1 + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Alt Phone:</b></td><td>" + Phone2 + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Fax:</b></td><td>" + Fax + "</td>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>E-Mail Address:</b></td><td>" + EMail + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "<tr><td><b>Contact Method:</b></td><td>" + ContactMethod + "</td></tr>";
                AffiliateHTML = AffiliateHTML + "</table><br>";
            }

            if (HasRates == 0)
                RateHTML = "Online rates are unavailable for " + AirportNameCode + ", Please contact Tran-Star Executive for rates regarding this airport.";

            if (HasInstructions == 0)
                InstructionHTML = "<h1>NO INSTRUCTION INFORMATION FOR " + AirportCode + "</h1>";

            if (HasAffiliates == 0)
                AffiliateHTML = "<h1>NO AFFILIATE INFORMATION</h1>";

            var tabs = [];
            //tabs.push(new GInfoWindowTab('Rates', BeginScrollingDIV + RateHTML + EndScrollingDIV));

            //if (HasRates != 0)
                tabs.push(new GInfoWindowTab('Instructions for ' + AirportNameCode, BeginScrollingDIV + InstructionHTML + EndScrollingDIV));

            if (HasAffiliates != 0)
                tabs.push(new GInfoWindowTab('Affiliates', BeginScrollingDIV + AffiliateHTML + EndScrollingDIV));

            Marker.openInfoWindowTabsHtml(tabs);
        }
    }
    grequest.send(null);
}

function SearchMap(SearchText)
{
    var GeoCoder = new GClientGeocoder();
    GeoCoder.getLatLng(SearchText, SearchComplete);
}

function SearchComplete(point)
{
    if (!point)
    {
        alert("Search String Not Found!");
    }
    else
    {
        map.setCenter(point, 10);
    }
}

function SetupMap(Southwest, Northeast) 
{
    var CenterPoint = new GLatLng((Southwest.lat() + Northeast.lat()) / 2, (Southwest.lng() + Northeast.lng()) / 2);
    var RequestedBound = new GLatLngBounds(Southwest, Northeast);
    map.setCenter(CenterPoint);
    map.setZoom(map.getBoundsZoomLevel(RequestedBound));
}

