﻿function load() {

    var map = document.getElementById("map");
    var pointFound;
    if (GBrowserIsCompatible()) {

        var gmap = new GMap2(map);
        gmap.addControl(new GSmallZoomControl3D());
        gmap.addControl(new GMapTypeControl());
        gmap.addControl(new GScaleControl());
        
        //gmap.addControl(new GOverviewMapControl(new GSize(100, 100)));

        function makeIcon(image) {
            var icon = new GIcon();
            icon.image = image;
            icon.shadow = "/site_assets/images/locator/atm.png";
            icon.iconSize = new GSize(16, 16);
            icon.shadowSize = new GSize(24, 16);
            icon.iconAnchor = new GPoint(8, 16);
            icon.infoShadowAnchor = new GPoint(0, 0);
            icon.infoWindowAnchor = new GPoint(8, 1);
            return icon;
        }
        function validateAddress(addr, b, frm1) {
            var geocoder = new GClientGeocoder();
            geocoder.getLocations(addr.value, function(point) {
                if (!point || (point.Status &&  point.Status.code != 200)) {
                    alert("Search '" + addr.value + "' is not recognized.");
                    return false;
                }
                else {
                    var found = false;
                    for (var i = 0; i < point.Placemark.length; i++) {
                        if (point.Placemark[i].address.indexOf('USA') > -1) {
                            window.open(getDirectionsUrl(b, addr));
                            found = true;
                            return true;
                        }
                    }
                    if (!found) {
                        alert("Search '" + addr.value + "' is not recognized.");
                        return false;
                    }
                }
            }
          );
        }
        function getLocation() {
            var geocoder = new GClientGeocoder();
            var NORTH_EAST = new GLatLng(41.99216, -114.025);
            var SOUTH_WEST = new GLatLng(35.642789, -125.072479);
            geocoder.setViewport(new GLatLngBounds(SOUTH_WEST, NORTH_EAST));

            geocoder.getLocations(address, function(point) {
                if (!point || (point.Status && point.Status.code != 200)) {
                    $('branchnavigation').innerHTML = '<div class="resultMessage">Search ' + address + ' is not recognized.<br /><br />Please refine your search by altering your search parameters</div>';

                    gmap.setCenter(new GLatLng(constants.lat, constants.lon), constants.zoom);
                }
                else {
                    var found = false;
                    for (var i = 0; i < point.Placemark.length; i++) {
                        if (point.Placemark[i].address.indexOf('USA') > -1) {
                            //set new points
                            pars.lat = point.Placemark[i].Point.coordinates[1]
                            pars.lon = point.Placemark[i].Point.coordinates[0]
                            var foundPoint = new GLatLng(pars.lat, pars.lon);
                            //set new location on map
                            setLocation(foundPoint)
                            return true;
                        }
                    }
                    if (!found) {
                        $('branchnavigation').innerHTML = '<div class="resultMessage">Sorry, no locations found in this area.<br /><br />Please refine your search by altering your search parameters</div>';
                        gmap.setCenter(new GLatLng(constants.lat, constants.lon), constants.zoom);
                        return false;
                    }
                }
            }
          );


        }
        function setLocation(point) {
            if (point) {
                this.pointFound = point;
                GEvent.clearInstanceListeners(map);

                //pan to center of address
                 gmap.setCenter(new GLatLng(pars.lat, pars.lon), pars.zoom);

                setTimeout(function() { addEvents(gmap) }, 100);

                pars.distance = true;

                gmap.savePosition();
                //set map bounds for branches
                setCookie();

                var paraObj = {}
                Object.extend(paraObj, pars)

                var urlPars = $H(paraObj).toQueryString();
                locatorService('/branchLocatorData.ashx', urlPars, displayBranches)
            }
        }
        function setCookie() {
            //branch the new points
            var today = new Date();
            var expire = new Date();
            expire.setTime(today.getTime() + 3600000 * 2);
            document.cookie = "fmbLat=" + escape(pars.lat) + ";expires=" + expire.toGMTString();
            document.cookie = "fmbLon=" + escape(pars.lon) + ";expires=" + expire.toGMTString();
            document.cookie = "fmbZoom=" + escape(pars.zoom) + ";expires=" + expire.toGMTString();
        }
        function addEvents(gmap) {
            GEvent.addListener(gmap, "dragstart", function() {
                pars.miles = false
            });
            GEvent.addListener(gmap, "movestart", function() {
                //clear bubble
                bubbleBranchHide()
            });
            GEvent.addListener(gmap, "dragstart", function() {
                gmap.activemarker = false;
                gmap.activebranch = false;
                gmap.activeindex = false;
            });
            GEvent.addListener(gmap, "moveend", function() {
                var oldZoom = pars.zoom;
                var newZoom = gmap.getZoom();
                pars.zoom = gmap.getZoom();
                if (oldZoom != newZoom) return;
                if (gmap.activemarker && gmap.activebranch) {
                    bubbleBranchShow(gmap.activeindex, gmap.activebranch, gmap.activemarker);
                }
                // getLatest();
            });
        }
        function getLatest() {

            $('branchnavigation').innerHTML = '';
            bubbleBranchHide();

            if (pars.zoom < 10) {
                $('branchnavigation').innerHTML = '<div class="resultMessage">Please Narrow Your Search.<br /><br />Please refine your search by altering your search parameters</div>';
                //gmap.setCenter(new GLatLng(constants.lat, constants.lon), constants.zoom);
                return
            }
            var ctr = gmap.getCenter();
            var recalculated = { lat: ctr.lat(), lon: ctr.lng(), numResults: pars.numResults, zoom: pars.zoom, distance: pars.distance, searchType: pars.searchType };
            var paraObj = {}
            Object.extend(paraObj, recalculated)
            var urlPars = $H(paraObj).toQueryString();
            locatorService('/branchLocatorData.ashx', urlPars, displayBranches);
                
        }
        function message(para) {
            $('errorBox').style.display = 'block'
            $('errorBox').innerHTML = para.dataString
        }
        function getNewBounds(points) {
            var bounds = new GLatLngBounds();
            for (var i = 0; i < points.length; i++) {
                    bounds.extend(points[i]);
                }
                return bounds;
        }
        function isPointVisible(point) {
            var bounds = gmap.getBounds();
            var southWest = bounds.getSouthWest();
            var northEast = bounds.getNorthEast();
            var lat = point.lat();
            var lng = point.lng();
            var visible = ((southWest.lat()) < lat && lat < (northEast.lat()) && southWest.lng() < lng && lng < northEast.lng())
            return visible;
        }
        function atmIcon() {
            var icon = new GIcon();
            icon.image = "/site_assets/images/locator/point_off.png";
            icon.shadow = "/site_assets/images/locator/point_shadow.png";
            icon.iconSize = new GSize(21, 33);
            icon.shadowSize = new GSize(28, 28);
            icon.iconAnchor = new GPoint(20, 55);
            icon.infoWindowAnchor = new GPoint(0, 0);
            return icon
        }

        function branchIcon() {
            var icon = new GIcon();
            icon.image = "/site_assets/images/locator/point_off.png";
            icon.shadow = "/site_assets/images/locator/point_shadow.png";
            icon.iconSize = new GSize(21, 33);
            icon.shadowSize = new GSize(37, 33)
            icon.iconAnchor = new GPoint(10, 33);
            icon.infoWindowAnchor = new GPoint(0, 0);


            //icon.infoWindowAnchor = new GPoint(25, 7);

            
            return icon
        }
        function displayBranches(originalRequest) {
            //is the data from the service or the cache
            if (originalRequest.responseText) {
                try {
                    var obj = originalRequest.responseText.evalJSON()
                } catch (e) {
                    obj = obj.evalJSON()
                }
            } else {
                var obj = originalRequest
            }

            //if no branches
            if (obj.length == undefined) {
                $('branchnavigation').innerHTML = '<div class="resultMessage">Error occured while processing your request</div>';
                gmap.setCenter(new GLatLng(constants.lat, constants.lon), constants.zoom);
                return
            }
            if (obj.length == 0) {
                $('branchnavigation').innerHTML = '<div class="resultMessage">Sorry, no  branches or ATM locations found in this area.<br /><br />Please refine your search by altering your search parameters</div>';
                return
            }
            //loop over branches
            var branchPoints = [];
            branchPoints = loadBranches(obj)
            if (!hasVisible(obj)) {
                if (pars.zoom > 9) {
                    pars.zoom = pars.zoom - 1
                    gmap.setZoom(pars.zoom);
                    displayBranches(originalRequest);
                    return;
                }
            }
            if (branchPoints.length == 0) {
                $('branchnavigation').innerHTML = '<div class="resultMessage">Sorry, no  branches or ATM locations were found in viewable area. <br /><br />Please refine your search by altering your search parameters or by expanding your zoom level</div>';
                return
            }

            var accordion = document.getElementById('branchnavigation')
            var index = 0;
            //for each branch
            obj.each(function(b, i) {
                if (b) {

                    //the branches location icon
                    var icon = branchIcon()
                    opts = { "icon": icon, "clickable": true, "labelClass": "icon", "labelText": index + 1, "labelOffset": new GSize(((index + 1 > 9) ? -5 : -2), -25) };
                    //create and add branch to map
                    var point = new GLatLng(b.LocLat, b.LocLon);
                    var marker = new LabeledMarker(point, opts);
                    gmap.addOverlay(marker);

                    var accordionBlade = document.createElement('li')

                    accordion.appendChild(accordionBlade)

                    var title = document.createElement('a')
                    title.className = "head"
                    if (!(index % 2)) title.className += " alternate"

                    title.href = "javascript:void(0);";
                    title.innerHTML = branchTitleHtml(b, index + 1);
                    title.index = i
                    title.value = b
                    title.marker = marker
                    if (index == 0) {
                        title.style.backgroundColor = '#F5F5F5';
                    }
                    title.onclick = function() {
                        var blades = jQuery('.rec');
                        for (var i = 0; i < blades.length; i++) {
                            if (blades[i].style.display == 'block' && blades[i].parentNode.className != 'selected') {
                                blades[i].style.display = 'none';
                            }
                            blades[i].parentNode.childNodes[0].style.backgroundColor = '';
                        }
                        this.style.backgroundColor = '#F5F5F5';
                        needsPan = (gmap.activemarker != marker);
                        gmap.activemarker = this.marker;
                        gmap.activebranch = this.value;
                        gmap.activeindex = this.index;
                        if (needsPan)
                            gmap.panTo(this.marker.getLatLng());
                        else
                            bubbleBranchShow(gmap.activeindex, gmap.activebranch, gmap.activemarker);
                        
                    }

                    accordionBlade.appendChild(title)

                    var rec = document.createElement('ul')
                    rec.id = 'branch' + i
                    rec.className = 'rec'
                    if (index == 0) {
                        rec.style.backgroundColor = '#F5F5F5';
                        rec.style.display = 'block';
                    }
                    //add bubble to marker
                    GEvent.addListener(marker, "click", function() {
                        var blades = jQuery('.rec');
                        for (var i = 0; i < blades.length; i++) {
                            if (blades[i].id != rec.id) {
                                blades[i].style.display = 'none';
                                if (blades[i].parentNode) {
                                    blades[i].parentNode.childNodes[0].style.backgroundColor = '';
                                }
                            }
                        }
                        var activeBlade = document.getElementById(rec.id)
                        if (activeBlade) {
                            activeBlade.style.backgroundColor = '#F5F5F5';
                            activeBlade.style.display = 'block';
                            activeBlade.scrollIntoView(false);
                        }
                        if (activeBlade.parentNode) {
                            activeBlade.parentNode.childNodes[0].style.backgroundColor = '#F5F5F5';
                        }
                        needsPan = (gmap.activemarker != marker);
                        gmap.activemarker = marker;
                        gmap.activebranch = b;
                        gmap.activeindex = i;
                        if (needsPan) 
                            gmap.panTo(marker.getLatLng());
                        else 
                            bubbleBranchShow(gmap.activeindex, gmap.activebranch, gmap.activemarker);
                        fitList(accordion);

                    });
                    
                    var details = document.createElement('li')

                    var busAddress = document.createElement('div')
                    busAddress.className = "fullAddress"; 
                    busAddress.innerHTML += branchAddressHtml(b, index + 1);
                    details.appendChild(busAddress);
                    
                    var busHours = document.createElement('div')
                    busHours.className = "businessHours";
                    busHours.innerHTML += branchBusinessHoursHtml(b);
                    //directions
                    var directions = document.createElement('div')
                    directions.className = "directions-in-list";
                    directions.appendChild(directionsHtml(b, true));

                    if (busHours.innerHTML.length != 0) details.appendChild(busHours);
                    details.appendChild(directions);

                    rec.appendChild(details)
                    //add to rec
                    accordionBlade.appendChild(rec)
                    index++;

                    // }
                }
            });
           

           //fitMap(gmap, branchPoints);
            jQuery('#branchnavigation').accordion({
                active: true,
                header: '.head',
                navigation: false,
                event: 'click',
                fillSpace: true,
                autoheight: false,
                selectedClass: "selected",
                alwaysOpen: true

            });
            fitList(accordion);
        }
        function fitList(accordion) {
            if (accordion.clientHeight > 480) {

                var spacer = document.getElementById('spacer');
                if (spacer) spacer.style.width = '16px';
                if (accordion.parentNode.parentNode) accordion.parentNode.parentNode.style.width = '312px';
            }
            else {
                if (accordion.parentNode.parentNode) accordion.parentNode.parentNode.style.width = '295px';
                var spacer = document.getElementById('spacer');
                if (spacer) spacer.style.width = '32px';
            }
        }
        
        function loadBranches(obj) {
            var branchPoints = []
            obj.each(function(b, i) {
                if (b) {
                    //create and add branch to map
                    var point = new GLatLng(b.LocLat, b.LocLon);
//                  if (isPointVisible(point))
                    branchPoints.push(point);
                }
            });
            return branchPoints;
        }
        function hasVisible(obj) {
            var found = false;
            obj.each(function(b, i) {
            if (b && !found) {
                    var point = new GLatLng(b.LocLat, b.LocLon);
                    if (isPointVisible(point)) found = true;
                }
            });
            return found;
        }
        
        function fitMap(map, points) {
            if (points.length == 0) {
                pars.zoom = pars.zoom - 1
                gmap.setZoom(pars.zoom);
                getLatest();
                return;
            }
            var bounds = new GLatLngBounds();
            for (var i = 0; i < points.length; i++) {
                bounds.extend(points[i]);
            }
            var newZoom = map.getBoundsZoomLevel(bounds);
            if (pars.zoom != newZoom && newZoom < 12) {
                pars.zoom = newZoom
                gmap.setZoom(newZoom);
                getLatest();
            }
        }

        function bubbleBranchHtml(i, b) {
            var bubbleBg = document.createElement('div')
            bubbleBg.className = 'bubbleBg'
            
            var bubble = document.createElement('div')
            bubble.className = 'bubbleContainer'
            //close btn
            var closeIcon = document.createElement('div')
            closeIcon.className = "closeIcon"
            closeIcon.onclick = function() {
                bubbleBranchHide();

            }
            bubble.appendChild(closeIcon)

            //content
            var content = document.createElement('div')
            content.className = "bubbleContent"
            content.innerHTML = branchAddressBubbleHtml(b);
            bubble.appendChild(content)
           
            //directions
            var dir = document.createElement('div')
            dir.className = "directions"
            dir.appendChild(directionsHtml(b, false));
            content.appendChild(dir)
            
            var miles = document.createElement('div')
            miles.className = "miles"
            miles.innerHTML = branchDistanceBubbleHtml(b);
            content.appendChild(miles)
            

            var mapBubbleContainer = document.createElement('div')
            mapBubbleContainer.className = 'mapBubbleContainer'
            mapBubbleContainer.page = Math.floor(i / 3)
            mapBubbleContainer.appendChild(bubbleBg)
            mapBubbleContainer.appendChild(bubble)
            
            return mapBubbleContainer;
        }

        function bubbleBranchHide() {
            var bubbles = findByClassName('mapBubbleContainer', $('locator'))
            for (var i = 0; i < bubbles.length; i++) {
                $('locator').removeChild(bubbles[i])
            }
        }
        function bubbleBranchShow(i, b, marker) {

            //hide Bubbles
            bubbleBranchHide()

            //get pixels
            var pixels = positionMarker(marker)

            var left = pixels.x + (Prototype.Browser.IE ? 1 : 21)
            var top = pixels.y + 4

            //show bubble
            var bubble = bubbleBranchHtml(i, b)
            bubble.style.left = left + 'px'
            bubble.style.top = top + 'px'
            $('locator').appendChild(bubble)
        }
        function positionMarker(marker) {
            var par = false
            findImage:
            for (p in marker) {
                try {
                    if (marker[p].tagName == 'IMG') {
                        par = p
                        break findImage
                    }
                } catch (e) {

                }
            }
            if (!par) {
                findDiv:
                for (p in marker) {
                    try {
                        if (marker[p].tagName == 'DIV') {
                            par = p
                            break findDiv
                        }
                    } catch (e) {

                    }
                }
            }

            if (par) {
                var pixels = Position.cumulativeOffset(marker[par])
                var pos = Position.cumulativeOffset($('locator'))
                var x = parseInt(pixels[0]) - parseInt(pos[0])
                var y = parseInt(pixels[1]) - parseInt(pos[1])
            } else {
                var x = 0
                var y = 0
            }
            return { x: x, y: y }
        }
        function branchTitleHtml(b, index) {

            var html = '<div class="title">'
            html += '<div class="' + ((index > 9) ? 'mapIcon2' : 'mapIcon1') + '"><div>' + index + '</div></div>';
            html += '<div>';
            if (b.LocAlias != undefined) {
                html += b.LocAlias;
            }
            else {
                html += b.LocName;
            }
            if (b.IsBranch) {
                html += '<img src="/site_assets/images/locator/branch_red.png"/>';
            }
            if (b.IsDriveup) {
                html += '<img src="/site_assets/images/locator/driveup_red.png"/>';
            }
            if (b.IsAtm24) {
                html += '<img src="/site_assets/images/locator/atm24_red.png"/>';
            }
            else if (b.IsAtm) {
                html += '<img src="/site_assets/images/locator/atm_red.png"/>';
            }
            html += '</div>';
            html += '<div class="milesA">' + branchDistanceBubbleHtml(b) + '</div>';
            html += '</div>';
            return html;
        }
        function branchAddressHtml(b, index) {

            var html = '<div class="address">' + b.LocA1 +'</div>';
            html += '<div class="address">' + b.LocC + ', ' + b.LocS + ' ' + b.LocZ + '</div>';
            if (b.LocPho && b.LocPho != '' && b.LocPho != 'NULL' && b.LocPho != 'null') html += '<div class="phone">' + b.LocPho + '</div>';
            return html;
        }
        function branchAddressBubbleHtml(b) {
            var html = '<div class="bubbleTitle">'

            if (b.LocAlias != undefined) {
                html += b.LocAlias;
            }
            else {
                html += b.LocName;
            }
            html += '</div>';
            return html;
        }
        function branchDistanceBubbleHtml(b) {
            var html = b.Distance + ' miles away<br>';
            return html;
        }
        function branchBusinessHoursHtml(b) {
            var Full24Atm = false;
            var lobbyMT, lobbyMo, lobbyTu, lobbyWe, lobbyTh, lobbyFr, lobbySa, lobbySu, driveupMT, driveupMo, driveupTu, driveupWe, driveupTh, driveupFr, driveupSa, driveupSu
        for (var i = 0; i < b.LocTimes.length;  i++) {
            var time = b.LocTimes[i];
            if (time) {
                if (time.LT == 'Lobby') {
                    lobbyMT = time.MoTh.replace(/:00/g, '');
                    lobbyMo = time.Mo.replace(/:00/g, '');
                    lobbyTu = time.Tu.replace(/:00/g, '');
                    lobbyWe = time.We.replace(/:00/g, '');
                    lobbyTh = time.Th.replace(/:00/g, '');
                    lobbyFr = time.Fr.replace(/:00/g, '');
                    lobbySa = time.Sa.replace(/:00/g, '');
                    lobbySu = time.Su.replace(/:00/g, '');
                }
                else if (time.LT == 'Driveup') {
                    driveupMT = time.MoTh.replace(/:00/g, '');
                    driveupMo = time.Mo.replace(/:00/g, '');
                    driveupTu = time.Tu.replace(/:00/g, '');
                    driveupWe = time.We.replace(/:00/g, '');
                    driveupTh = time.Th.replace(/:00/g, '');
                    driveupFr = time.Fr.replace(/:00/g, '');
                    driveupSa = time.Sa.replace(/:00/g, '');
                    driveupSu = time.Su.replace(/:00/g, '');
                }
                else if (time.LT == 'ATM' && time.Full24) {
                    Full24Atm = true;
                }
            }
        }
        var html = '';
        if (lobbyMT || driveupMT) html = '<div class="weekday">&nbsp;</div>';
        if (lobbyMT) html += '<div class="lobbyHead">Lobby</div>';
        if (driveupMT) html += '<div class="driveupHead">Drive-up</div>';
        if (lobbyMT || driveupMT) html += '<div class="break"></div>';
        
//        if (lobbyMT || driveupMT) html += '<div class="weekday">M-Th</div>';
//        if (lobbyMT) html += '<div class="lobby">' + ((lobbyMT) ? lobbyMT : '&nbsp;') + '</div>';
//        if (driveupMT) html += '<div class="driveup">' + ((driveupMT) ? driveupMT : '&nbsp;') + '</div>';

        if (lobbyMo || driveupMo) html += '<div class="weekday">Mo</div>'
        if (lobbyMo) html += '<div class="lobby">' + ((lobbyMo) ? lobbyMo : '&nbsp;') + '</div>'
        if (driveupMo) html += '<div class="driveup">' + ((driveupMo) ? driveupMo : '&nbsp;') + '</div>';
        if (lobbyMo || driveupMo) html += '<div class="break"></div>';
        

        if (lobbyTu || driveupTu) html += '<div class="weekday">Tu</div>'
        if (lobbyTu) html += '<div class="lobby">' + ((lobbyTu) ? lobbyTu : '&nbsp;') + '</div>'
        if (driveupTu) html += '<div class="driveup">' + ((driveupTu) ? driveupTu : '&nbsp;') + '</div>';
        if (lobbyTu || driveupTu) html += '<div class="break"></div>';

        if (lobbyWe || driveupWe) html += '<div class="weekday">We</div>'
        if (lobbyWe) html += '<div class="lobby">' + ((lobbyWe) ? lobbyWe : '&nbsp;') + '</div>'
        if (driveupWe) html += '<div class="driveup">' + ((driveupWe) ? driveupWe : '&nbsp;') + '</div>';
        if (lobbyWe || driveupWe) html += '<div class="break"></div>';

        if (lobbyTh || driveupTh) html += '<div class="weekday">Th</div>'
        if (lobbyTh) html += '<div class="lobby">' + ((lobbyTh) ? lobbyTh : '&nbsp;') + '</div>'
        if (driveupTh) html += '<div class="driveup">' + ((driveupTh) ? driveupTh : '&nbsp;') + '</div>';
        if (lobbyTh || driveupTh) html += '<div class="break"></div>';


        if (lobbyFr || driveupFr) html += '<div class="weekday">Fr</div>'
        if (lobbyFr) html += '<div class="lobby">' + ((lobbyFr) ? lobbyFr : '&nbsp;') + '</div>'
        if (driveupFr) html += '<div class="driveup">' + ((driveupFr) ? driveupFr : '&nbsp;') + '</div>';
        if (lobbyFr || driveupFr) html += '<div class="break"></div>';

        if (lobbySa || driveupSa) html += '<div class="weekday">Sa</div>'
        if (lobbySa) html += '<div class="lobby">' + ((lobbySa) ? lobbySa : '&nbsp;') + '</div>'
        if (driveupSa) html += '<div class="driveup">' + ((driveupSa) ? driveupSa : '&nbsp;') + '</div>';
        if (lobbySa || driveupSa) html += '<div class="break"></div>';

        if ((lobbySu && lobbySu.length > 1) || (driveupSu && driveupSu.length > 1)) {
            html += '<div class="weekday">Su</div>'
            if (lobbySu) html += '<div class="lobby">' + ((lobbySu) ? lobbySu : '&nbsp;') + '</div>'
            if (driveupSu) html += '<div class="driveup">' + ((driveupSu) ? driveupSu : '&nbsp;') + '</div>';
            if (lobbySu || driveupSu) html += '<div class="break"></div>';
        }


        if (Full24Atm && b.IsBranch) {
            //html += '<div class="address">ATM available 27/7</div>';
            //html += '<div class="break"></div>';
        }
        return html;
        }
        function directionsHtml(b, inList) {
            var sibling = document.getElementById('address' + (!inList ? "l" : "p") + b.Id)
            var dirAddr = document.createElement('div');
            dirAddr.className = "directions-address";
            if (!inList) dirAddr.className += "P";
            if (inList && b.IsAtm) dirAddr.className += "A";
            var label = document.createElement('span');
            label.innerHTML = "Get Directions";
            dirAddr.appendChild(label);
            var dirform = document.createElement('form');
            dirform.target = '_blank';
            dirform.onsubmit = function() {
                if (dirInput.value == '' || dirInput.value == 'Start Address') {
                    alert("Please enter your start address.");
                }
                else {
                    window.open(getDirectionsUrl(b, dirInput));
                    //validateAddress(dirInput, b, dirform);
                }
                return false;
            }
            
            var dirInput = document.createElement('input');
            dirInput.id = 'address' + (inList? "l":"p") + b.Id;
            dirInput.type = 'text';
            dirInput.defaultValue = 'Start Address';
            dirInput.value = (sibling ? sibling.value : 'Start Address');
            dirInput.onfocus = function() {
            if (this.defaultValue == this.value) this.value = ""
            }
            dirInput.onblur = function() {
            if (this.value == '') this.value = 'Start Address';
            }
            dirInput.onchange = function() {
                var sibling = document.getElementById('address' + (!inList ? "l" : "p") + b.Id)
                if (sibling) sibling.value = this.value;
                if (sibling.value == '') sibling.value = 'Start Address';
            }

            dirAddr.appendChild(dirform);
            dirform.appendChild(dirInput);
            var dirGo = document.createElement('div');  
            dirGo.className = "directions-go";
            dirform.appendChild(dirGo);
            var a = document.createElement('a');
            a.className = "directions-go";
            a.href = 'javascript:void(0);';
            a.value = b
            a.onclick = function(dirInputId) {
            if (dirInput.value == '' || dirInput.value == 'Start Address') {
                    alert("Please enter your start address.");
                }
                else {
                    window.open(getDirectionsUrl(b, dirInput));
                    //validateAddress(dirInput, b, dirform);
                }
            }
            var linkBtn = document.createElement('img');
            linkBtn.src = '/site_assets/images/locator/directions_off.png';
            linkBtn.onmouseover = function(dirInputId) {
                swapImage(this, '/site_assets/images/locator/directions_on.png');
            }
            linkBtn.onmouseout = function(dirInputId) {
                swapImage(this);
            }            
            a.appendChild(linkBtn);
            dirGo.appendChild(a);
            return dirAddr;
        }

        function getDirectionsUrl(b, sAddress) {
            if (sAddress && sAddress != " ")
                return '/locator/directions.aspx?bid=' + b.Id + '&sAddress=' + sAddress.value + '&dlatLgt=' + b.LocLat + ',' + b.LocLon + '&dAddress=' + b.LocA1 + ' ' + b.LocC + ', ' + b.LocS + ' ' + b.LocZ
            else
                return ' ';
        }
        function getDirections(url) {
            if (url == ' ') {
                alert ('Please specify Start Address');
                return false;
            }
            window.open(url); 
            return false;   
        }
        function locatorService(url, pars, callBack) {

            var myAjax = new Ajax.Request(url, {
                method: 'get',
                parameters: encodeURI(pars),
                requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'no-cache'],
                onComplete: callBack
            });
        }
        function createElement(tag, elm, para) {
            var obj = document.createElement(tag)
            if (para) {
                if (para.className) obj.className = para.className
                if (para.id) obj.id = para.id
                if (para.href) obj.href = para.href
                if (para.src) obj.src = para.src
                if (para.html) obj.innerHTML = para.html
                if (para.element) obj.appendChild = para.element
                if (para.onclick) obj.onclick = para.onclick
                if (para.alt) obj.alt = para.alt
                if (para.title) obj.title = para.title
            }
            elm.appendChild(obj)
            return obj
        }
        function findByClassName(className, parentElement) {
            var children = (($(parentElement) && $(parentElement).length > 0) || document.body).getElementsByTagName('*');
            return $A(children).inject([], function(elements, child) {
                if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
                    elements.push(child);
                return elements;
            });
        }
        if (pars) getLocation();
        else gmap.setCenter(new GLatLng(constants.lat, constants.lon), constants.zoom);

    } else {
        alert("Sorry, your browser cannot handle the true power of Google Maps");
    }

}
window.onunload = GUnload;