var j$ = jQuery.noConflict();
var DEFAULT_ZOOM = null;
var DEFAULT_LAT = null;
var DEFAULT_LONG = null;
var GLOBAL_LIST = new Array();
//var ITINERARY = false;
var LEFT_INDEX = 0;
var ACTIVE_INDEX = 0;
var EVENT_INDEX = null;
var RIGHT_INDEX = 1;
var MAP_LAYERS = new Array();
var DEFAULT_LAYER = null;
var CALLBACK = false;
var SRCH_OBJECT = null;
var GLBL_ADDRESS = null;
var DIR_ARRAY = null;
var DIR_ARRAY_FRIENDLY = null;
var ITINERARY = null;
var map = null;

//DEFAULT JAVSCRIPT HELPER CLASSES ------------------ Begin ----------------------\\
//FIX FF3 wrong client click point
(function() {
    var mouseEvt;
    if (typeof document.createEvent !== 'undefined') {
        mouseEvt = document.createEvent('MouseEvents');
    }
    if (mouseEvt && mouseEvt.__proto__ && mouseEvt.__proto__.__defineGetter__) {
        mouseEvt.__proto__.__defineGetter__('pageX', function() {
            return this.clientX + window.pageXOffset;
        });
        mouseEvt.__proto__.__defineGetter__('pageY', function() {
            return this.clientY + window.pageYOffset;
        });
    }
})();

Array.prototype.inArray = function(obj) {
    var value = obj.Naic;
    var i;
    for (i = 0; i < this.length; i++) {
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};

Array.prototype.indexOf = function(obj) {
    var val = obj.Naic;
    for (var i = 0; i < this.length; i++) {
        if (this[i].Naic == val) {
            return i;
        }
    }
    return -1;
}


//DEFAULT JAVSCRIPT HELPER CLASSES ------------------ End ------------------------//

function fnGetMapDefaultSettings(obj) {
    var tt = eval(obj);
    DEFAULT_ZOOM = tt.ZM;
    DEFAULT_LAT = tt.Lat;
    DEFAULT_LONG = tt.Lon;
    ITINERARY = tt.ItineraryAvailable;
}

function fnCallIdentify(obj) {
    var o = eval(obj);
    DEFAULT_LAT = o.Lat;
    DEFAULT_LONG = o.Lon;
    DEFAULT_ZOOM = 15;
    CALLBACK = true;
    SRCH_OBJECT = o;
}

function fnCallAddItinerary(id){
    var params = new Array();
    params.push(id);
    params.push("M");
    var mapcall = new ViewMap();
    mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/ViewMap.ascx", "AddItemItinerary", false, params, function(res) {
        alert("Item added to itinerary!");
    }, function(res) {
        alert("Add Itinerary Error: " + res);
    });
    //return false;
}

function fnCallEventItinerary(id) {
    var params = new Array();
    params.push(id);
    params.push("E");
    var mapcall = new ViewMap();
    mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/ViewMap.ascx", "AddItemItinerary", false, params, function(res) {
        alert("Item added to itinerary!");
    }, function(res) {
        alert("Add Itinerary Error: " + res);
    });
    //return false;
}

function fnGetDatesBetween(obj) {

    var sDate = j$(obj).parent().parent().parent().find("#txtStartDate").val();
    var eDate = j$(obj).parent().parent().parent().find("#txtEndDate").val();

    if (sDate.length < 1 || eDate.length < 1)
        return false;
        
    var params = new Array();
    params.push(sDate);
    params.push(eDate);
    var mapcall = new ViewMap();
    mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/Events.ascx", "setVars", true, params, function(res) {
        if (mapcall.GetState()["evtlist"] != null) {
            //if (EVENT_INDEX != null)
            //{
                //ACTIVE_INDEX = EVENT_INDEX;
            //}
            GLOBAL_LIST[ACTIVE_INDEX].setResult(res["Html"]);
            setContent(res["Html"]);
            GLOBAL_LIST[ACTIVE_INDEX].setObjects(mapcall.GetState()["evtlist"]);
            var layers = mapcall.GetState()["evtlist"];
            if (typeof MAP_LAYERS["777777"] == "undefined" || MAP_LAYERS["777777"] == null)
            {
                MAP_LAYERS["777777"] = new VEShapeLayer();
                map.AddShapeLayer(MAP_LAYERS["777777"]);
            }
            for (var i = 0; i < layers.length; i++) {
                if (layers[i].Latitude > 0) {
                    var xx = new VELatLong(layers[i].Latitude, layers[i].Longitude);
                    shape = new VEShape(VEShapeType.Pushpin, xx);
                    shape.SetCustomIcon("<div class='pinStyle P777777'><div class='text'>" + (i + 1) + "</div></div>");
                    
                    
                    description = fnGetEventBalloonHtml(layers[i].Name, layers[i].Location, layers[i].Address, layers[i].City, layers[i].State, layers[i].ZipCode, layers[i].EventDate, layers[i].Description, layers[i].Price, layers[i].Phone, layers[i].Url, layers[i].Categories, layers[i].ID, layers[i].Latitude, layers[i].Longitude);
                    shape.SetDescription(description);
                    //shape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + layers[i].Title + '</div><div class=\"balloon_description\">' + layers[i].Venue + '<br />Date: ' + trimDate(layers[i].StartDate) + '<br />Time: ' + trimTime(layers[i].StartDate) + '</div></div><div class=\"balloon_bottom\"></div></div>');
                    MAP_LAYERS["777777"].AddShape(shape);
                }
                else
                {
                    shape = new VEShape(VEShapeType.Pushpin, new VELatLong(DEFAULT_LAT, DEFAULT_LONG));
                    shape.Hide();
                    MAP_LAYERS["777777"].AddShape(shape);
                }
            }
        } else {
            alert("No Events Found!");
        }
    }, function(res) {
        alert("Events Load Error: " + res);
    });

    return false;
}

function trimDate(s)
{
	var r=s.length -1;
	var newString;
	var weekday = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	var monthname = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	newString = s.substring(6, r-1);
	var d = new Date(parseInt(newString));

	return weekday[d.getDay()] + " " + monthname[d.getMonth()] + " " + d.getDate() + " " + d.getFullYear();
}

function trimTime(s) {
    var r = s.length - 1;
    var newString;
    newString = s.substring(6, r - 1);
    var d = new Date(parseInt(newString));
    var hours = parseInt(d.getHours()) % 12;
	if (hours == 0) { hours = 12; }
	
    var minutes = d.getMinutes();
    var ampm;
    if (minutes < 10) {
        minutes = "0" + minutes;
    }

    if (parseInt(d.getHours()) > 11) {
        ampm = "PM";
    } else {
        ampm = "AM";
    }
    return hours + ":" + minutes + " " + ampm;
}

function fnShowAddress(obj) {
    var d = j$(obj).parent().parent().parent().parent().find("#StartAddress");
    d.slideDown(500, function() { d.find("#txtAddress").focus(); });
    d.find("#txtAddress").keypress(function(e) {
        if (e.which == 13) {
            j$(this).next().click();
            e.preventDefault();
        }
    });
    return false;
}

function fnShowAddressBalloon(obj) {
    var d = j$(obj).parent().next("#StartAddress")
    d.slideDown(500, function() { d.find("#txtAddress").focus(); });
    d.find("#txtAddress").keypress(function(e) {
        if (e.which == 13) {
            j$(this).next().click();
            e.preventDefault();
        }
    });
    return false;
}

function fnCallGetDirectionsBalloon(obj, lat, lon) {
    var infoParent = j$(obj).parent().parent().parent().parent();
    GLBL_ADDRESS = infoParent.parent().find(".balloon_title").html() + ', ' + infoParent.find(".spAddress").html() + ', ' + infoParent.find(".spAddRest").html();
    //alert(j$(obj).parent().parent().parent().parent().find("#").html());
    DIR_ARRAY = new Array();
    DIR_ARRAY_FRIENDLY = new Array();
    
    //grab address from input box
    var startAddress = j$(obj).parent().find("#txtAddress").val();
    DIR_ARRAY.push(startAddress);
    DIR_ARRAY_FRIENDLY.push(startAddress);
    
    //grab lat lon from point
    var pt = new VELatLong(lat, lon);
    DIR_ARRAY.push(pt);
    DIR_ARRAY_FRIENDLY.push(GLBL_ADDRESS);
    fnGenerateDirections();
}

function fnCallGetDirections(obj, lat, lon) {
    var infoParent = j$(obj).parent().parent().parent().parent();
    GLBL_ADDRESS = infoParent.parent().find("a[class$='_title']").html() + ', ' + infoParent.find(".spAddress").html() + ', ' + infoParent.find(".spAddRest").html();
    DIR_ARRAY = new Array();
    DIR_ARRAY_FRIENDLY = new Array();
    
    //grab address from input box
    var startAddress = j$(obj).parent().find("#txtAddress").val();
    DIR_ARRAY.push(startAddress);
    DIR_ARRAY_FRIENDLY.push(startAddress);
    
    //grab lat lon from point
    var pt = new VELatLong(lat, lon);
    DIR_ARRAY.push(pt);
    DIR_ARRAY_FRIENDLY.push(GLBL_ADDRESS);
    fnGenerateDirections();
}

function fnCallGetDirectionsItinerary() {
    DIR_ARRAY = new Array();
    DIR_ARRAY_FRIENDLY = new Array();
    for (var i = 0; i < ITINERARY.length; i++) {
        if (ITINERARY[i].Latitude > 0)
        {
            DIR_ARRAY.push(new VELatLong(ITINERARY[i].Latitude, ITINERARY[i].Longitude));
            var addy = (typeof ITINERARY[i].Address != 'undefined')? ITINERARY[i].Address : "";
            var cty =  (typeof ITINERARY[i].City != 'undefined')? ITINERARY[i].City : "";
            var st = (typeof ITINERARY[i].State != 'undefined')? ITINERARY[i].State : "";
            var zip = (typeof ITINERARY[i].ZipCode != 'undefined')? ITINERARY[i].ZipCode : "";
            DIR_ARRAY_FRIENDLY.push(ITINERARY[i].Name + ", " + addy + " " + cty + " " + st + " " + zip);
        }
    }
    fnGenerateDirections();
}

function fnGenerateDirections() {
    var options = new VERouteOptions;
    options.DrawRoute = true;
    // Call this function when map route is determined:
    options.RouteCallback = ShowTurnByTurn;
    // Show as miles
    options.DistanceUnit = VERouteDistanceUnit.Mile;
    options.ShowDisambiguation = true;
    map.GetDirections(DIR_ARRAY, options);
    return false;
}

function load_ViewMap(obj) {
    jQuery.datepicker = j$.datepicker; // Javascript error will occur without this.

	
    map = new VEMap('glcvbMap');
    map.HideDashboard();
    map.LoadMap(new VELatLong(DEFAULT_LAT, DEFAULT_LONG), DEFAULT_ZOOM, VEMapStyle.Road);
    AddMapControls();

    //set up base MapLayer Objects
    //var lyrItin = new MapLayer("999998", "Itinerary");

    //hide Ajax loader
    hideLoader();
    if (ITINERARY == 'T') {

        //MAKE CALL TO populate Itin
        var lyrItin = new MapLayer("999998", "Itinerary");
        var params = new Array();
        var mapcall = new ViewMap();
        mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/Itinerary.ascx", "dummyCall", true, params, function(res) {
            lyrItin.setResult(res["Html"]);
            setContent(res["Html"]);
            lyrItin.setObjects(mapcall.GetState()["list"]);
            ITINERARY = lyrItin.getObjects();
            var layers = lyrItin.getObjects();
            MAP_LAYERS["999998"] = new VEShapeLayer();
            //delete the current layer if there is one
            map.DeleteShapeLayer(MAP_LAYERS["999998"]);
            map.AddShapeLayer(MAP_LAYERS["999998"]);
            for (var i = 0; i < layers.length; i++) {
                if (layers[i].Latitude > 0) {
                    var xx = new VELatLong(layers[i].Latitude, layers[i].Longitude);
                    shape = new VEShape(VEShapeType.Pushpin, xx);
                    //shape.SetTitle(layers[i].ListAs); //trans_mrkr.png
                    shape.SetCustomIcon("<div class='pinStyle P999998'><div class='text'>" + (i + 1) + "</div></div>");
                    //shape.SetDescription("<p>Description:" + layers[i].MbusDesc + "</p>");
                    
                    var description = '';
                    
                    if (layers[i].Type != null && layers[i].Type === "Event")
                    {
                        description = fnGetEventBalloonHtml(layers[i].Name, layers[i].Location, layers[i].Address, layers[i].City, layers[i].State, layers[i].ZipCode, layers[i].EventDate, layers[i].Description, layers[i].Price, layers[i].Phone, layers[i].Url, layers[i].Categories, layers[i].ID, layers[i].Latitude, layers[i].Longitude, false);
                    }
                    else
                    {
                        description = fnGetMemberBalloonHtml(layers[i].Name, layers[i].Address, layers[i].City, layers[i].State, layers[i].ZipCode, layers[i].Contact, layers[i].ID, layers[i].Latitude, layers[i].Longitude, false);
                    }
                    
	                shape.SetDescription(description);
                    
                    //shape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + layers[i].Name + '</div><div class=\"balloon_description\">' + fnCheckWebsite(layers[i].Website) + '<br/>' + (typeof layers[i].Address !== "undefined" ? layers[i].Address : "") + '<br />Desc: ' + layers[i].Description + '</div></div><div class=\"balloon_bottom\"></div></div>');
                    MAP_LAYERS["999998"].AddShape(shape);
                }
                else
                {
                    shape = new VEShape(VEShapeType.Pushpin, new VELatLong(DEFAULT_LAT, DEFAULT_LONG));
                    shape.Hide();
                    MAP_LAYERS["999998"].AddShape(shape);
                }
            }
           GLOBAL_LIST.push(lyrItin);
           //MAP_LAYERS["999998"] = new VEShapeLayer();
           //map.AddShapeLayer(MAP_LAYERS["999998"]);
           j$("#list-head").addClass(lyrItin.getHeaderClass());
           setContent(lyrItin.getResult());
           setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
           setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
           map.SetMapView(MAP_LAYERS["999998"].GetBoundingRectangle());
           fnUpdateOrbs(0);
        }, function(res) {
            alert("Itinerary Load Error: " + res);
        });
    }
    else
    {
        //     lyrItin.setResult("<div style='height: 400px; margin-top: 15px;'>You do not currently have an Itinerary</div>");
        j$("#list-head").addClass("");
        setContent("<h3 style='text-align:center;'>Please select a category on the left to begin.</h3>");
    }   

    //var lyrEvent = new MapLayer("777777","Events");
    //lyrEvent.setResult('<table id="map_date"><tr><td class="map_date_element"><div class="map_date_label">start date </div></td><td><input type="text" id="txtStartDate" /></td></tr><tr><td class="map_date_element"><div class="map_date_label">end date</div></td><td><input type="text" id="txtEndDate" /></td></tr><tr><td colspan="2"><a href="#SearchDate" onclick="fnGetDatesBetween(this)">Search</a></td></tr></table>');
    //j$("#list-head").addClass(lyrItin.getHeaderClass());
    //setContent(lyrItin.getResult());
    //GLOBAL_LIST.push(lyrEvent);
    //MAP_LAYERS["777777"] = new VEShapeLayer();
    //map.AddShapeLayer(MAP_LAYERS["777777"]);
    
    fnThemeLegend();
    //fnUpdateOrbs(0);
    AddLegendHandlers();
    fnToggleButtons("clear");
    //setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
    //setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());

    j$(".left-btn").bind("click", function() {
        if (j$(".left-btn").is(':hidden'))
            return;

        if (RIGHT_INDEX == 1) {
            LEFT_INDEX = -1;
            ACTIVE_INDEX = 0;
            RIGHT_INDEX = 1;
            fnToggleButtons("l");
        } else {
            fnToggleButtons("show");
            RIGHT_INDEX = ACTIVE_INDEX;
            ACTIVE_INDEX = LEFT_INDEX;
            LEFT_INDEX = LEFT_INDEX - 1;
            if (LEFT_INDEX < 0)
                fnToggleButtons("l");
        }

        if (j$(".left-btn").is(':visible'))
            j$(".left-btn").text(GLOBAL_LIST[LEFT_INDEX].Name);

        if (j$(".right-btn").is(':visible'))
            j$(".right-btn").text(GLOBAL_LIST[RIGHT_INDEX].Name);

        setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
        setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
        fnUpdateOrbs(ACTIVE_INDEX);
        ClearAll();

        fnCheckForEvents();
    });



    j$(".right-btn").bind("click", function() {
        if (j$(".right-btn").is(':hidden'))
            return;

        if (RIGHT_INDEX + 1 == GLOBAL_LIST.length) {

            LEFT_INDEX = ACTIVE_INDEX;
            ACTIVE_INDEX = RIGHT_INDEX;
            RIGHT_INDEX = RIGHT_INDEX + 1;
            fnToggleButtons("r");
        } else {
            fnToggleButtons("show");
            LEFT_INDEX = ACTIVE_INDEX;
            ACTIVE_INDEX = RIGHT_INDEX;
            RIGHT_INDEX = RIGHT_INDEX + 1;
            if (RIGHT_INDEX >= GLOBAL_LIST.length)
                fnToggleButtons("r");
        }


        //GLOBAL POSITION UPDATE

        if (j$(".left-btn").is(':visible'))
            j$(".left-btn").text(GLOBAL_LIST[LEFT_INDEX].Name);

        if (j$(".right-btn").is(':visible'))
            j$(".right-btn").text(GLOBAL_LIST[RIGHT_INDEX].Name);

        setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
        setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
        fnUpdateOrbs(ACTIVE_INDEX);
        ClearAll();

        fnCheckForEvents();
    });

    //check to see if we were sent this call for an identify
    if (CALLBACK == true)
        fnIDObject();
		
	
}

function fnCheckWebsite(s) {
	/*
    if (s != null && s.toString().length > 0)
        return "<a href='" + s + "'>website</a>";
    else
        return "";
    */
	if (s != null && s.toString().length > 0)
        return "<strong>Website:</strong> <a href='" + s + "' title='" + s + "'>" + (s.toString().length > 35 ? s.toString().substring(0, 31) + "<strong>....</strong>" : s.toString()) + "</a>";
    else
        return "";
}

function fnCheckForEvents() {
    /*j$(".dateflds").datepicker({
        showOn: "both",
        buttonImage: "/DesktopModules/Artemis.MapModule/images/date_picker.gif",
        buttonImageOnly: true,
        onSelect: function(dateText) {
            j$(this).val(dateText);
        }
    });*/
    
    
    Date.format = 'mm/dd/yyyy';
        j$(".dateflds").datePicker({
            clickInput: true,
	        showOn: "both",
	        startDate: '01/01/1996',
            buttonImageOnly: true,
	        onSelect: function(dateText) {            
	            j$(this).val(dateText);
            }
        });
        
        j$("input[id$='txtStartDate']").bind("dpClosed", function (event, selectedDates) {
	        var d = selectedDates[0];
	        if (d)
	        {
	            d = new Date(d);
	            j$("input[id$='txtEndDate']").dpSetStartDate(d.asString());
	        }
        });
        
        j$("input[id$='txtEndDate']").bind("dpClosed", function (event, selectedDates) {
	        var d = selectedDates[0];
	        if (d)
	        {
	            d = new Date(d);
	            j$("input[id$='txtStartDate']").dpSetEndDate(d.asString());
	        }
        });
}


//function fnLoadItinerary(lyr) {
//    //alert(map.GetShapeLayerCount());
//    var params = new Array();
//    var mapcall = new ViewMap();
//    mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/Itinerary.ascx", "dummyCall", true, params, function(res) {
//        lyr.setResult(res["Html"]);
//        setContent(res["Html"]);
//        lyr.setObjects(mapcall.GetState()["list"]);
//        ITINERARY = lyr.getObjects();
//        var layers = lyr.getObjects();
//        MAP_LAYERS["999998"] = new VEShapeLayer();
//        //map.DeleteShapeLayer(MAP_LAYERS["999998"]);
//        map.AddShapeLayer(MAP_LAYERS["999998"]);
//        for (var i = 0; i < layers.length; i++) {
//            if (layers[i].Latitude > 0) {
//                var xx = new VELatLong(layers[i].Latitude, layers[i].Longitude);
//                shape = new VEShape(VEShapeType.Pushpin, xx);
//                //shape.SetTitle(layers[i].ListAs); //trans_mrkr.png
//                shape.SetCustomIcon("<div class='pinStyle P999998'><div class='text'>" + (i + 1) + "</div></div>");
//                //shape.SetDescription("<p>Description:" + layers[i].MbusDesc + "</p>");
//                shape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + layers[i].Name + '</div><div class=\"balloon_description\">' + layers[i].Website + '<br/>' + layers[i].Address + '<br />Desc: ' + layers[i].Description + '</div></div><div class=\"balloon_bottom\"></div></div>');
//                MAP_LAYERS["999998"].AddShape(shape);
//            }
//        }
//        LEFT_INDEX = -1;
//        ACTIVE_INDEX = 0;
//        RIGHT_INDEX = 1;
//        fnToggleButtons("l");
//        if (j$(".right-btn").is(':visible'))
//            j$(".right-btn").text(GLOBAL_LIST[RIGHT_INDEX].Name);
//        setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
//        setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
//        fnUpdateOrbs(ACTIVE_INDEX);
//    }, function(res) {
//        alert("Itinerary Load Error: " + res);
//    });
//}


// Structure of object expected: Name, Location, Address, EventDate, Description, ID, Lat, Lon
function fnGetEventBalloonHtml(name, location, address, city, state, zip, eventDate, description, price, phone, url, categories, id, latitude, longitude, showItineraryButton, showDirectionsButton)
{
    var addToItinerary = true;
    if (typeof showItineraryButton != "undefined" && showItineraryButton == false) { addToItinerary = false; }
    
    var getDirections = true; 
    if (typeof showDirectionsButton !=  "undefined" && showDirectionsButton == false) { showDirectionsButton = false; }

    var html = '\
        <div class="balloon">\
            <div class="balloon_top">\
                <div class="balloon_title">' + name + '</div>\
                <div class="balloon_description">' + 
                    location + '<br/>' + 
                    '<span class="spAddress">' + address + '</span><br />' +
                    '<span class="spAddRest">' + city + ', ' + state + ' ' + zip + '</span><br /><br />' + 
                    eventDate + '<br /><br />' + 
                    description + '<br />' +
                    //'<strong>Cost:</strong> ' + price + '<br />' + 
                    (typeof categories != "undefined" && categories != null && categories != "" ? '<br /><strong>Categories:</strong> ' + categories + '<br />' : '') +
                    (typeof phone != "undefined" && phone != null && phone != "" ? '<strong>Phone:</strong> ' + phone + '<br />' : '') +
                    (typeof url != "undefined" && url != null && url != "" ? fnCheckWebsite(url) + '<br />' : '') + 
                '</div>\
            </div>\
            <div class="balloon_bottom">\
                <div class="actions">'
                
                    if (addToItinerary)
                    {
                        html += '<a href="#AddItinerary" onclick="fnCallEventItinerary(' + id + ')">Add to Itinerary</a>';
                    }
                    
                    if (addToItinerary && getDirections)
                    {
                        html += '&nbsp;|&nbsp;';
                    }
                    
                    if (getDirections)
                    {
                        html += '<a href="#" onclick="fnShowAddressBalloon(this); return false;">Get Directions</a>';
                    }
                
                html += '</div>';
                
                if (getDirections)
                {
                    html += '<div id="StartAddress" class="addy_callout">\
                        <label for="txtAddress">Start: </label>\
                        <input type="text" id="txtAddress"/>&nbsp;\
                        <a href="#GetDirections" class="srchDirections" onclick="fnCallGetDirectionsBalloon(this,' + latitude + ', ' + longitude + ')" />\
                    </div>\
                    <div class="clear"></div>'
                }
            
            html += '</div>\
        </div>'
    
    return html;
}



function fnGetMemberBalloonHtml(name, address, city, state, zip, contactInfo, id, latitude, longitude, showItineraryButton, showDirectionsButton)
{
    var addToItinerary = true;
    if (typeof showItineraryButton != "undefined" && showItineraryButton == false) { addToItinerary = false; }
    
    var getDirections = true; 
    if (typeof showDirectionsButton !=  "undefined" && showDirectionsButton == false) { showDirectionsButton = false; }
    
    var html = '\
        <div class="balloon">\
            <div class="balloon_top">\
                <div class="balloon_title">' + name + '</div>\
                <div class="balloon_description">' + 
                    '<span class="spAddress">' + address + '</span><br />' +
                    '<span class="spAddRest">' + city + ', ' + state + ' ' + zip + '</span><br /><br />' + 
                    contactInfo + 
                '</div>\
            </div>\
            <div class="balloon_bottom">\
                <div class="actions">'
                    
                    if (addToItinerary)
                    {
                        html += '<a href="#AddItinerary" onclick="fnCallAddItinerary(' + id + ')">Add to Itinerary</a>';
                    }
                    
                    if (addToItinerary && getDirections)
                    {
                        html += '&nbsp;|&nbsp;';
                    }
                    
                    if (getDirections)
                    {
                        html += '<a href="#" onclick="fnShowAddressBalloon(this); return false;">Get Directions</a>';
                    }
                
                html += '</div>';
                
                if (getDirections)
                {
                    html += '<div id="StartAddress" class="addy_callout">\
                        <label for="txtAddress">Start: </label>\
                        <input type="text" id="txtAddress"/>&nbsp;\
                        <a href="#GetDirections" class="srchDirections" onclick="fnCallGetDirectionsBalloon(this,' + latitude + ', ' + longitude + ')" />\
                    </div>\
                    <div class="clear"></div>'
                }
            
            html += '</div>\
        </div>'
    
    return html;
}




function fnIDObject() {
    MAP_LAYERS["DEFAULT"] = new VEShapeLayer();
    /*if (!GLOBAL_LIST.inArray(MAP_LAYERS["DEFAULT"])) 
    {
        GLOBAL_LIST.push(MAP_LAYERS["DEFAULT"]);
    }*/
    map.AddShapeLayer(MAP_LAYERS["DEFAULT"]);
    
    if (parseFloat(SRCH_OBJECT.Lat) > 0)
    {
        var xx = new VELatLong(SRCH_OBJECT.Lat, SRCH_OBJECT.Lon);
        var localshape = new VEShape(VEShapeType.Pushpin, xx);
        localshape.SetCustomIcon("<div class='pinStyle PDEFAULT'><div class='text'>1</div></div>");
        
        var description = '';
        
        if (SRCH_OBJECT.Type != null && SRCH_OBJECT.Type === "Event")
        {
            description = fnGetEventBalloonHtml(SRCH_OBJECT.Name, SRCH_OBJECT.Location, SRCH_OBJECT.Address, SRCH_OBJECT.City, SRCH_OBJECT.State, SRCH_OBJECT.ZipCode, SRCH_OBJECT.EventDate, SRCH_OBJECT.Description, SRCH_OBJECT.Price, SRCH_OBJECT.Phone, SRCH_OBJECT.Url, SRCH_OBJECT.Categories, SRCH_OBJECT.ID, SRCH_OBJECT.Lat, SRCH_OBJECT.Lon);
        }
        else
        {
            description = fnGetMemberBalloonHtml(SRCH_OBJECT.Name, SRCH_OBJECT.Address, SRCH_OBJECT.City, SRCH_OBJECT.State, SRCH_OBJECT.ZipCode, SRCH_OBJECT.Contact, SRCH_OBJECT.ID, SRCH_OBJECT.Lat, SRCH_OBJECT.Lon);
        }

	    localshape.SetDescription(description);
        //localshape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + SRCH_OBJECT.Name + '</div><div class=\"balloon_description\">' + SRCH_OBJECT.Location + '<br/>' + SRCH_OBJECT.Location2 + '<br /><br />' + SRCH_OBJECT.Contact + '</div></div><div class=\"balloon_bottom\"></div></div>');	
	    MAP_LAYERS["DEFAULT"].AddShape(localshape);
        showBalloon(localshape);
    }
    else
    {
        var localshape = new VEShape(VEShapeType.Pushpin, new VELatLong(DEFAULT_LAT, DEFAULT_LONG));
        localshape.Hide();
        MAP_LAYERS["DEFAULT"].AddShape(localshape);
    }
    CALLBACK = false;
}

//MAP CONTROLS CREATION / SET UP / & CONFIGURATION ------  Begin -----------\\
function AddMapControls() {
    var mBase = document.createElement("div");
    mBase.id = "MAP_PARENT";
    document.getElementById("map_container").appendChild(mBase);
    j$("#MAP_PARENT").load("/DesktopModules/Artemis.MapModule/MapControls.htm", function() {
        //add event handlers for content//
        ConfigControlFunctions();
    });
    //add the control to VE
    //var mBaseParent = document.createElement("div");
    //mBaseParent.id = "map_parent_wrapper";
    
    //map.AddControl(mBase);
}

function addShim(el) {
    var shim = document.createElement("iframe");
    var par = document.getElementById("glcvbMap");
    shim.id = "mpshim";
    shim.frameBorder = "0";
    shim.style.position = "absolute";
    shim.style.zIndex = "1";
    shim.style.top = par.offsetTop + "px";
    shim.style.left = par.offsetLeft + "px";
    shim.width = 82;
    shim.height = 120;
    el.shimElement = shim;
    el.parentNode.insertBefore(shim, el);
}

function ConfigControlFunctions() {

    //set the zoomin function
    j$("#MAP_zoomIN").click(function() { map.ZoomIn(); return false; });

    //set the zoomout function
    j$("#MAP_zoomOUT").click(function() { map.ZoomOut(); return false; });

    //set the 2D function
    j$("#MAP_2D").click(function() {
        map.SetMapMode(VEMapMode.Mode2D);
        j$(this).css("background-image", "url('/DesktopModules/Artemis.MapModule/images/map_ctrl_2D.gif')");
        j$("#MAP_3D").css("background-image", "url('/DesktopModules/Artemis.MapModule/images/map_ctrl_3D_inactive.gif')");
        DeleteShim(document.getElementById("mpshim"));
        return false;
    });

    //set the 3D function
    j$("#MAP_3D").click(function() {
        map.SetMapMode(VEMapMode.Mode3D);
        j$(this).css("background-image", "url('/DesktopModules/Artemis.MapModule/images/map_ctrl_3D_active.gif')");
        j$("#MAP_2D").css("background-image", "url('/DesktopModules/Artemis.MapModule/images/map_ctrl_2D_inactive.gif')");
        addShim(document.getElementById("map_container"));
        return false;
    });

    //set the 3D function
    j$("#MAP_3D").click(function() {
        map.SetMapMode(VEMapMode.Mode3D);
        return false;
    });

    //set the Road function
    j$("#MAP_Road").click(function() {
        map.SetMapStyle(VEMapStyle.Road);
        return false;
    });

    //set the Aerial function
    j$("#MAP_Aerial").click(function() {
        map.SetMapStyle(VEMapStyle.Aerial);
        return false;
    });

    //set the Hybrid function
    j$("#MAP_Hybrid").click(function() {
        map.SetMapStyle(VEMapStyle.Hybrid);
        return false;
    });
}

function DeleteControl(el) {
    if (myControl != null) {
        var myControlID = myControl.id;
        map.DeleteControl(myControl);
    }
}

function DeleteShim(el) {

    if (el != null) {
        el.parentNode.removeChild(el);
    }
}

function fnMapPanMoveStart(dir) {
    switch (dir) {
        case "U":
            map.StartContinuousPan(0, -10);
            break;
        case "D":
            map.StartContinuousPan(0, 10);
            break;
        case "L":
            map.StartContinuousPan(-10, 0);
            break;
        case "R":
            map.StartContinuousPan(10, 0);
            break;
    }
}

function fnMapPanMoveEnd(dir) {
    map.EndContinuousPan();
}
//MAP CONTROLS CREATION / SET UP / & CONFIGURATION ------  End -----------//


//MAP FUNCTIONS ------  Begin -----------\\
function AddLegendHandlers() {
    j$("#map_navlinks li input[@type=checkbox]").bind("click", function() {
        var newLength = 0;
        if (j$(this).attr("checked") == true) {
            var lyr = new MapLayer(j$(this).parent().prev().text(), j$(this).parent().next().text());
            //show the ajax loader
            //function fnClearMap() {
            ClearAll();

            showLoader();
            //add the layer obj to the global layer list
            if (!GLOBAL_LIST.inArray(lyr)) {
                newLength = GLOBAL_LIST.push(lyr);
            }
            //set global index 
            ACTIVE_INDEX = GLOBAL_LIST.indexOf(lyr);
            
            if (j$(this).parent().next().text() == "Events")
            {
                //EVENT_INDEX = ACTIVE_INDEX;
                MAP_LAYERS["777777"] = new VEShapeLayer();
                map.AddShapeLayer(MAP_LAYERS["777777"]);
            }

            //set the header graphic
            setHeader(lyr.getHeaderClass());
            //set buttons

            LEFT_INDEX = newLength - 2;
            RIGHT_INDEX = newLength;
            if (GLOBAL_LIST.length > 1) {
                j$(".left-btn").text(GLOBAL_LIST[newLength - 2].Name);
                fnToggleButtons("r");
            }
            //UPDATE the orb totals
            fnUpdateOrbs(ACTIVE_INDEX);

            //populate data
            callDataset(lyr);
        }
        else {
            var naic = j$(this).parent().prev().text();
            var lyr = null;
            for (var i = 0; i < GLOBAL_LIST.length; i++) {
                if (GLOBAL_LIST[i].Naic == naic) {
                    lyr = GLOBAL_LIST[i];
                }
            }
            if (lyr != null) {
                var DEL_INDEX = GLOBAL_LIST.indexOf(lyr);
                //remove the lyr from the list
                GLOBAL_LIST.splice(DEL_INDEX, 1);


                if (DEL_INDEX <= LEFT_INDEX) {  //removed layer was the left button
                    RIGHT_INDEX = ACTIVE_INDEX;
                    ACTIVE_INDEX = LEFT_INDEX;
                    LEFT_INDEX = LEFT_INDEX - 1;
                } else if (RIGHT_INDEX == DEL_INDEX) {  //removed layer was the right button
                    if (GLOBAL_LIST.length == DEL_INDEX) {
                        fnToggleButtons("r");
                        RIGHT_INDEX = ACTIVE_INDEX;
                        ACTIVE_INDEX = LEFT_INDEX;
                        LEFT_INDEX = LEFT_INDEX - 1;
                        if (LEFT_INDEX < 0)
                            fnToggleButtons("l");
                    }
                } else if (ACTIVE_INDEX == DEL_INDEX) {  //removed layer was the active view layer
                    var numOfItems = GLOBAL_LIST.length + 1;
                    if (RIGHT_INDEX <= numOfItems) {
                        if (RIGHT_INDEX == numOfItems || ACTIVE_INDEX == numOfItems) {
                            fnToggleButtons("r");
                            RIGHT_INDEX = ACTIVE_INDEX;
                            ACTIVE_INDEX = LEFT_INDEX;
                            LEFT_INDEX = LEFT_INDEX - 1;
                        }
                        else {
                            RIGHT_INDEX = ACTIVE_INDEX;
                            ACTIVE_INDEX = LEFT_INDEX;
                            LEFT_INDEX = LEFT_INDEX - 1;
                            if (LEFT_INDEX < 0)
                                fnToggleButtons("l");

                            if (ACTIVE_INDEX < 0) {
                                LEFT_INDEX = -1;
                                ACTIVE_INDEX = 0;
                                RIGHT_INDEX = 1;
                            }
                        }
                    }
                }
                
                if (j$(this).parent().next().text() == "Events")
                {
                    EVENT_INDEX = null;
                }

                //added this catch all to fix the CRAZY late design change - this is a hack and should be cleaned up time permitting
                if (GLOBAL_LIST.length <= 1) {
                    j$(".left-btn").css("visibility", "hidden");
                    j$(".right-btn").css("visibility", "hidden");
                    ACTIVE_INDEX = 0;
                }

                if (j$(".left-btn").is(':visible'))
                    j$(".left-btn").text(GLOBAL_LIST[LEFT_INDEX].Name);

                if (j$(".right-btn").is(':visible'))
                    j$(".right-btn").text(GLOBAL_LIST[RIGHT_INDEX].Name);

                if (GLOBAL_LIST.length < 1) {
                    setHeader("");
                    setContent("");
                    fnUpdateOrbs(0);
                } else {
                    setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
                    setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
                    fnUpdateOrbs(ACTIVE_INDEX);
                }
                //setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
                //setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
                //fnUpdateOrbs(ACTIVE_INDEX);

                RemoveLayer(naic);
            }
        }


    });
}

function CreateLayer(lyrID, obj) {
    var layers = obj.getObjects();
    MAP_LAYERS[lyrID] = new VEShapeLayer();
    map.DeleteShapeLayer(MAP_LAYERS[lyrID]);
    map.AddShapeLayer(MAP_LAYERS[lyrID]);
    for (var i = 0; i < layers.length; i++) {
        if (layers[i].Latitude > 0) {
            var xx = new VELatLong(layers[i].Latitude, layers[i].Longitude);
            shape = new VEShape(VEShapeType.Pushpin, xx);
            //shape.SetTitle(layers[i].ListAs); //trans_mrkr.png
            shape.SetCustomIcon("<div class='pinStyle P" + obj.Naic + "'><div class='text'>" + (i + 1) + "</div></div>");
            //shape.SetDescription("<p>Description:" + layers[i].MbusDesc + "</p>");
            //shape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + layers[i].ListAs + '</div><div class=\"balloon_description\">' + fnCheckWebsite(layers[i].URL) + '<br/><span id=\"spAddress\">' + layers[i].Address1 + '</span><br /><span id=\"spAddRest\">' + layers[i].ListCity + ', ' + layers[i].ListState + ' ' + layers[i].ListZip + '</span><br />Phone: ' + layers[i].Phone1 + '</div></div><div class=\"balloon_bottom\"><a href="#AddItinerary" onclick="fnCallAddItinerary(' + layers[i].ID + ')">Add to Itinerary</a>&nbsp;|&nbsp;<a href="#" onclick="fnShowAddressBalloon(this); return false;">Get Directions</a><div id="StartAddress" class="addy_callout"><label for="txtAddress">Start: </label><input type="text" id="txtAddress"/>&nbsp;<a href="#GetDirections" class="srchDirections" onclick="fnCallGetDirectionsBalloon(this,' + layers[i].Latitude + ', ' + layers[i].Longitude + ')" /></div></div></div>');
			
			var contactInfo = (layers[i].Phone1 != null && layers[i].Phone1 !== "" ? '<strong>Phone:</strong> ' + layers[i].Phone1 + '<br />' : '') + fnCheckWebsite(layers[i].URL);
			
			var description = fnGetMemberBalloonHtml(layers[i].ListAs, layers[i].Address1, layers[i].ListCity, layers[i].ListState, layers[i].ListZip, contactInfo, layers[i].ID, layers[i].Latitude, layers[i].Longitude);
			
			shape.SetDescription(description);
			//shape.SetDescription('<div class=\"balloon\"><div class=\"balloon_top\"><div class=\"balloon_title\">' + layers[i].ListAs + '</div><div class=\"balloon_description\"><span id=\"spAddress\">' + layers[i].Address1 + '</span><br /><span id=\"spAddRest\">' + layers[i].ListCity + ', ' + layers[i].ListState + ' ' + layers[i].ListZip + '</span><br />' + (layers[i].Phone1 != null && layers[i].Phone1 !== "" ? '<br /><strong>Phone:</strong> ' + layers[i].Phone1 + '<br />' : '') + fnCheckWebsite(layers[i].URL) + '</div></div><div class=\"balloon_bottom\"><a href="#AddItinerary" onclick="fnCallAddItinerary(' + layers[i].ID + ')">Add to Itinerary</a>&nbsp;|&nbsp;<a href="#" onclick="fnShowAddressBalloon(this); return false;">Get Directions</a><div id="StartAddress" class="addy_callout"><label for="txtAddress">Start: </label><input type="text" id="txtAddress"/>&nbsp;<a href="#GetDirections" class="srchDirections" onclick="fnCallGetDirectionsBalloon(this,' + layers[i].Latitude + ', ' + layers[i].Longitude + ')" /></div></div></div>');
            MAP_LAYERS[lyrID].AddShape(shape);
        }
        else
        {
            shape = new VEShape(VEShapeType.Pushpin, new VELatLong(DEFAULT_LAT, DEFAULT_LONG));
            shape.Hide();
            MAP_LAYERS[lyrID].AddShape(shape);
        }
    }
}

function fnSelectandZoom(obj) {
    var idxPad = 1;

    //if (ITINERARY != 'T')
        //idxPad = 2;
    
    idxPad = map.GetShapeLayerCount() - GLOBAL_LIST.length;
    
    
    var id = parseInt(j$(obj).parent().parent().children("td:first").children("span").text());
    var TargetLayer = null;
    //if (ACTIVE_INDEX == EVENT_INDEX)
    //{
        //TargetLayer = MAP_LAYERS["777777"];
    //}
    //else
    //{
        TargetLayer = map.GetShapeLayerByIndex(ACTIVE_INDEX + idxPad);
    //}
    var shape = TargetLayer.GetShapeByIndex(id - 1);
    
    map.SetCenterAndZoom(new VELatLong(shape.Latitude, shape.Longitude), 16);
    showBalloon(shape);
    //return false;
}

function showBalloon(ob) {
    try {
        map.ShowInfoBox(ob);
    }
    catch (e) {
        alert(e.description);
    }

}

function RemoveLayer(lyr) {
    map.DeleteShapeLayer(MAP_LAYERS[lyr]);
}


function callDataset(maplyr) {

    if (maplyr.Naic == "777777") {
        hideLoader();
        maplyr.setResult('<table id="map_date"><tr><td class="map_date_element"><div class="map_date_label">start date </div></td><td><input type="text" class="dateflds" id="txtStartDate" /></td></tr><tr><td class="map_date_element"><div class="map_date_label">end date</div></td><td><input type="text" class="dateflds" id="txtEndDate" /></td></tr><tr><td colspan="2"><a href="#SearchDate" onclick="fnGetDatesBetween(this)">Search</a></td></tr></table>');
        setContent(maplyr.getResult());
        //MAP_LAYERS["777777"] = new VEShapeLayer();
       // map.AddShapeLayer(MAP_LAYERS["777777"]);
        
        /*j$(".dateflds").datepicker({
            showOn: "both",
            buttonImage: "/DesktopModules/Artemis.MapModule/images/date_picker.gif",
            buttonImageOnly: true,
            onSelect: function(dateText) {
                j$(this).val(dateText);
            }
        });*/
        
        
        Date.format = 'mm/dd/yyyy';
        j$(".dateflds").datePicker({
            clickInput: true,
	        showOn: "both",
	        startDate: '01/01/1996',
            buttonImageOnly: true,
	        onSelect: function(dateText) {            
	            j$(this).val(dateText);
            }
        });
        
        j$("input[id$='txtStartDate']").bind("dpClosed", function (event, selectedDates) {
	        var d = selectedDates[0];
	        if (d)
	        {
	            d = new Date(d);
	            j$("input[id$='txtEndDate']").dpSetStartDate(d.asString());
	        }
        });
        
        j$("input[id$='txtEndDate']").bind("dpClosed", function (event, selectedDates) {
	        var d = selectedDates[0];
	        if (d)
	        {
	            d = new Date(d);
	            j$("input[id$='txtStartDate']").dpSetEndDate(d.asString());
	        }
        });
    }
    else {
        var params = new Array();
        params.push(maplyr.Naic);
        var mapcall = new ViewMap();
        mapcall.GlobalInvoke("~/DesktopModules/Artemis.MapModule/list.ascx", "SelectCategory", true, params, function(res) {
            hideLoader();
            maplyr.setResult(res["Html"]);
            setContent(res["Html"]);
            maplyr.setObjects(mapcall.GetState()["list"]);
            var lyrID = maplyr.Naic;
            CreateLayer(lyrID, maplyr);
        }, function(res) {
            alert("Dataset Load Error: " + res);
        });
    }

}

function setContent(x) {
   j$("#content_left_scollcontent").html("");
   j$("#content_left_scollcontent").html(x);
}

function setHeader(x) {
    j$("#list-head").removeClass();
    j$("#list-head").addClass("list-head-base hide " + x);
}

function showLoader() {
    var d = j$("#content_left_scollcontent");
    d.html("");
    d.removeClass();
    d.addClass("content_left_scollcontainer loader");
}

function hideLoader() {
    var d = j$("#content_left_scollcontent");
    d.removeClass("loader");
}

function fnToggleButtons(btn) {
    if (btn == "r") {
        j$(".left-btn").css("visibility", "visible");
        j$(".right-btn").css("visibility", "hidden");
    } else if (btn == "l") {
        j$(".left-btn").css("visibility", "hidden");
        j$(".right-btn").css("visibility", "visible");
    } else if (btn == "clear") {
        j$(".left-btn").css("visibility", "hidden");
        j$(".right-btn").css("visibility", "hidden");
     } else {
        j$(".left-btn").css("visibility", "visible");
        j$(".right-btn").css("visibility", "visible");
    }
}

function fnUpdateOrbs(x) {
    var list = j$("#content_left_pg_indicator");
    
    //clear what is there first
    list.empty();
    
    var numPages = GLOBAL_LIST.length;
    var currPage = x;
    

    for (var i = 0; i < numPages; i++) {
        var cls = "off";
        if (i == currPage) { cls = "on"; }     
        list.append("<li class='orb "+cls+"'>&nbsp;</li>")
    } 
}

function fnThemeLegend() {
    j$("#map_navlinks li:lt(4)").addClass("brdBottom");
    j$("#map_navlinks li").addClass("brdRight");

    j$("#map_navlinks li").each(function() {
        var naic = j$(this).children("span:first").text();
        j$(this).addClass("B" + naic);
    });

}


// mao routing
// returns a formatted string
function GetTime(time) {
    if (time == null) {
        return ("");
    }

    if (time > 60) {                                 // if time == 100
        var seconds = time % 60;       // seconds == 40
        var minutes = time - seconds;  // minutes == 60
        minutes = minutes / 60;    // minutes == 1


        if (minutes > 60) {                                     // if minutes == 100
            var minLeft = minutes % 60;        // minLeft    == 40
            var hours = minutes - minLeft;   // hours      == 60
            hours = hours / 60;          // hours      == 1

            return (hours + " hour(s), " + minLeft + " minute(s), " + seconds + " second(s)");
        }
        else {
            return (minutes + " minutes, " + seconds + " seconds");
        }
    }
    else {
        return (time + " seconds");
    }
}

function ShowTurnByTurn(route) {
    var Hcontent = "<h3>Turn-by-Turn Directions</h3>";
    Hcontent += "<p><b>Distance:</b> " + route.Distance.toFixed(1) + " miles";
    Hcontent += "<br/><b>Time:</b> " + GetTime(route.Time) + "</p>";
    Hcontent += "<hr/>";

    // Unroll route and populate DIV
    var legs = route.RouteLegs;
    var leg = null;
    var turns = "";
    // Get intermediate legs
    for (var i = 0; i < legs.length; i++) {
        // Get this leg so we don't have to derefernce multiple times
        leg = legs[i];  // Leg is a VERouteLeg object
        // Unroll each intermediate leg
        var turn = null;  // The itinerary leg
        var legDistance = null;  // The distance for this leg

        for (var j = 0; j < leg.Itinerary.Items.length; j++) {
            
            turn = leg.Itinerary.Items[j];  // turn is a VERouteItineraryItem object
            turns += "<li class=\"Directions\">";
            if (j == 0) //begin departure
            {
                //turns += "<b>Start: </b>\t" + turn.Text;
                turns += '<span class="directions_label start">Start: </span><span class="directions_title">' + DIR_ARRAY_FRIENDLY[i] + '</span>';
            }
            else if (j == (leg.Itinerary.Items.length - 1))//end arrive
            {
                turns += '<span class="directions_label arrive">Arrive: </span><span class="directions_title">' + DIR_ARRAY_FRIENDLY[i + 1] + '</span>';
            }
            else {
                turns += '<span class="directions_turn">' + j + '</span>\t' + turn.Text;
            }
            legDistance = turn.Distance;

            // So we don't show 0.0 for the arrival
            if (legDistance > 0.1) {
                // Round distances to 1/10ths
                turns += " (" + legDistance.toFixed(1) + " miles";

                // Append time if found
                if (turn.Time != null) {
                    turns += "; " + GetTime(turn.Time);
                }

                turns += ")<br/>";
            }
            turns += "</li>";
        }
        // Populate with directions
        SetDirections(Hcontent, turns);
    }
}

function SetDirections(headerContent, liItems) {
        //header content on General Trip Estimates

    setHeader("HDIRECTIONS");
    setContent(headerContent + "<br /><div><a href='#Print' class='directions_print_btn hide' onclick='fnPrintMap()'>print</a><a href='#Clear' class='directions_clear_btn hide' onclick='fnClearMap()'>Hide</a></div><div class='clear'></div><ol>" + liItems + "</ol>");
        //fnUpdateOrbs(ACTIVE_INDEX);

}

    function fnPrintMap() {
        var newWindow = window.open('/DesktopModules/Artemis.MapModule/PrintMap.htm');
        
        if (typeof newWindow.document.readyState != "undefined") 
        {
            var timer = newWindow.setInterval(function() {
                if (newWindow.document.readyState == "complete")
                {
                    newWindow.clearInterval(timer);
                    newWindow.print();
                }
            }, 1000);
        }
        else
        {
            j$(newWindow).load(function(event) { 
                j$(this)[0].print();
            });
        }
    }

function ClearAll() {
    map.DeleteRoute();
}

function fnClearMap() {
    ClearAll();
    setHeader(GLOBAL_LIST[ACTIVE_INDEX].getHeaderClass());
    setContent(GLOBAL_LIST[ACTIVE_INDEX].getResult());
}