﻿var map = null;
var activeButton = null;
var accomodationShapeLayer = null;
var poiShapeLayer = null;
var threeDLayer = null;
var tmcShapeLayer = null;
var tourShapeLayer = null;
var localModelShapeLayer = null;
var wikipediaShapeLayer = null;
var activePanel = null;
var iconSetBasePath = "";
var updateTimerID = null;
var accRows;
var accList;
var accomodationSearchType = -1;
var threeDPanelActive = false;

var poisActive = false;

var routeMarkerShapeLayer = null;
var routeStations = new Array();

//-------------------------------------------------------------------------------------
function GetWindowWidth() { var width = 0; if (typeof (window.innerWidth) == 'number') { width = window.innerWidth; } else if (document.documentElement && document.documentElement.clientWidth) { width = document.documentElement.clientWidth; } else if (document.body && document.body.clientWidth) { width = document.body.clientWidth; } if (!width || width < 100) { width = 100; } return width; }

//-------------------------------------------------------------------------------------
function GetWindowHeight() { var height = 0; if (typeof (window.innerHeight) == 'number') { height = window.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { height = document.documentElement.clientHeight; } else if (document.body && document.body.clientHeight) { height = document.body.clientHeight; } if (!height || height < 100) { height = 100; } return height; }

//-------------------------------------------------------------------------------------
$(document).ready(function() { GetMap() });

function GetMap() {
    // Ladepanel anzeigen
    var o = $("#divPreloadingMessage");

    o.css("left", (GetWindowWidth() - o.width()) / 2).css("top", (GetWindowHeight() - o.height()) / 2).show();

    map = new VEMap("divMap");
    map.LoadMap(new VELatLong(51.5, 7.45), 12);
    //map.HideDashboard();


    // create shapelayers
    accomodationShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(accomodationShapeLayer);
    accomodationShapeLayer.Show();

    poiShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(poiShapeLayer);
    poiShapeLayer.Show();

    entertainmentShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(entertainmentShapeLayer);
    entertainmentShapeLayer.Show();

    attractionShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(attractionShapeLayer);
    attractionShapeLayer.Show();

    tmcShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(tmcShapeLayer);
    tmcShapeLayer.Show();

    threeDLayer = new VEShapeLayer();
    map.AddShapeLayer(threeDLayer);

    tourShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(tourShapeLayer);

    localModelShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(localModelShapeLayer);

    routeMarkerShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(routeMarkerShapeLayer);

    wikipediaShapeLayer = new VEShapeLayer();
    map.AddShapeLayer(wikipediaShapeLayer);

    map.AttachEvent("onchangeview", Map_OnChangeView);
    map.AttachEvent('oninitmode', Map_OnChangeMode);
    map.AttachEvent("onmousedown", Map_OnMouseDown);
    map.AttachEvent("onclick", ToggleMenu);
    map.AttachEvent("oninitmode", Map_OnInitMode);
    map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);

    $("#NavBar").css("display", "block").css("opacity", "0").fadeTo("normal", 0.7);
    $("#PlanerButton").droppable({ accept: 'Pushpin ui-draggable', activeClass: 'NavBarButtonSelected', hoverClass: 'NavBarButtonSelected', drop: function(ev, ui) { AddToPlaner(ui); } });
    $("#PlanerPanel").droppable({ accept: 'Pushpin ui-draggable', activeClass: 'NavBarButtonSelected', hoverClass: 'NavBarButtonSelected', drop: function(ev, ui) { AddToPlaner(ui); } });

    Body_OnResize();

    RefreshPlaner();

    $("#MapStyleContainer").css("left", GetWindowWidth() - 40).show();

    // change english labels in dashobard to german
    $("#MSVE_navAction_RoadMapStyle").html("Straße");
    $("#MSVE_navAction_AerialMapStyle").html("Luftbild");
    $("#MSVE_navAction_ObliqueMapView").html("Vogelpersp.");
    $("#MSVE_navAction_showLabels").html("Beschriftg.");



    // initialize the datepickers
    $('#' + txtStartDateClientID).datepicker({ dateFormat: 'dd.mm.yy', showOn: 'both', buttonImage: 'images/baw/calendar.png', buttonImageOnly: true });
    $('#' + txtEndDateClientID).datepicker({ dateFormat: 'dd.mm.yy', showOn: 'both', buttonImage: 'images/baw/calendar.png', buttonImageOnly: true });


    // initialize the dragndrop sortable routelist
    $('#listRouteStations').sortable(
			{
			    accept: 'SortableItem',
			    helperclass: 'SortableActive',
			    activeclass: 'SortableActive',
			    hoverclass: 'SortableActive',
			    opacity: 0.8,
			    fx: 200,
			    axis: 'vertically',
			    opacity: 0.4,
			    revert: true,
			    cursor: "move",
			    stop: stopDrag,
			    cancel: 'img'

			}
		);

    $("#AccomodationPanelBody").tabs();
    $("#PoiPanelBody").tabs();

    // timeout to fadein the whole map
    window.setTimeout("ShowContent()", 2000);

}

function ShowContent() {
    // Seitensteuerelemente einblenden
    $("#PageHeaderPanel").show();
    $("#PageHeaderPanel2").show();
    $("#ContentPanel").show();
    $("#PageFooterPanel").show();

    ShowPanel("WelcomePanel");
    // Ladepanel ausblenden
    $("#divPreloadingMessage").hide();
}

function Map_OnChangeMode() {
    if (map.GetMapMode() == VEMapMode.Mode3D) {
        var el = document.getElementById("InfoBoxPanel");
        if (el != null)
            addshim(el , "InfoBoxPanelShim");
        el = document.getElementById("popupmenu"); 
        if (el != null)
            addshim(el, "popupmenuShim");

        var control3d = map.vemapcontrol.Get3DControl();

        control3d.MinElevationScaling = 0.0;

        control3d.MaxElevationScaling = 0.0;

    }
    else {
        removeshim("InfoBoxPanelShim");
        removeshim("popupmenuShim");
    }
}

function Map_OnInitMode() {
    if (map.GetMapMode() == VEMapMode.Mode3D)
        map.SetMapStyle(VEMapStyle.Aerial);
}

function ble() {
    alert("ble");
}
var mapResizeTimerID = null;
//-------------------------------------------------------------------------------------
function Body_OnResize() {
    height = GetWindowHeight() - 220;
    if (height < 32) height = 32;
    //map.Resize(GetWindowWidth() - (34+(activePanel!=null ? 260 : 0)), height);

    var w = GetWindowWidth() - (34 + 260);
    if ($("#ctl02_PanelContainer").css("display") == "none")
        w += 260;

    if (mapResizeTimerID != null)
        window.clearTimeout(mapResizeTimerID);

    mapResizeTimerID = window.setTimeout("map.Resize(" + w + "," + height + ");", 100);


    ResizeActivePanel();

    $("#divModalOverlay").css("width", GetWindowWidth()).css("height", GetWindowHeight());

}


function ShowPlanerPanel(o) {
    var offset = $(o).offset();
    var panel = $("#PlanerPanelContainer");

    panel.css("left", offset.left - 9).css("top", 32).css("height", offset.top - 128);

    planerPanelVisible = !planerPanelVisible;
    if (planerPanelVisible == true)
        panel.css("display", "block").css("opacity", "0").fadeTo("normal", 1);
    else
        panel.fadeOut("normal");
}


//-------------------------------------------------------------------------------------
function Map_OnChangeView(e) {

    HideInfoboxPanel();
    // if there is already a timer running, delete it
    if (updateTimerID != null)
        window.clearTimeout(updateTimerID);

    // create a new timer, that fires in 2 seconds and calls the updatedata function
    updateTimerID = window.setTimeout("UpdateData()", 500);
}

//-------------------------------------------------------------------------------------
function UpdateData() {
    GetPois();
    GetAccomodations();
    DoFindTmc();
    GetAvailablePoiCategories();
    GetAvailableAccomodationTypes();
    GetRouteList();
    GetWikipediaData();
}

//-------------------------------------------------------------------------------------
function GetAvailableAccomodationTypes() {
    var v = map.GetMapView();

    var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
						 "&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
						 "&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
						 "&BottomRightLongitude=" + v.BottomRightLatLong.Longitude;

    $.post("Handler/AvailableAccomodationTypes.ashx", params, ReceiveAvailableAccomodationTypes);
}

//-------------------------------------------------------------------------------------
function ReceiveAvailableAccomodationTypes(arg) {
    var rows = arg.split('\n');
    var o = document.getElementById(cboAccomodationTypeClientID);
    if (o == null) return;
    var oldValue = o.value;
    o.options.length = 0;
    o.options[0] = new Option("Beliebig", "", false, true);
    for (var i = 0; i < rows.length; i++) {
        var columns = rows[i].split("^");
        o.options[i + 1] = new Option(columns[0], columns[1], false, (columns[1] == oldValue ? true : false));
    }

    UpdateRoomDropdown();

}





//-------------------------------------------------------------------------------------
function GetAvailablePoiCategories() {
    var v = map.GetMapView();

    var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
						 "&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
						 "&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
						 "&BottomRightLongitude=" + v.BottomRightLatLong.Longitude;

    $.post("Handler/AvailablePoiCategories.ashx", params, ReceiveAvailablePoiCategories);
}

//-------------------------------------------------------------------------------------
function ReceiveAvailablePoiCategories(arg) {
    //alert(arg);
    var rows = arg.split('\n');

    for (i = 0; i < rows.length; i++) {
        var columns = rows[i].split('^');
        var s = "span[id='catn_" + columns[0] + "']";
        $(s).html("(" + columns[1] + ")");
    }

}

//-------------------------------------------------------------------------------------
function ReceiveAccomodationsError(err) {
    alert(err);
}

//-------------------------------------------------------------------------------------
function AddAJAXPin(layer, clusterType, dataType, pinID, latlon, iconUrl, pincount) {
    var pin = new VEShape(VEShapeType.Pushpin, latlon);
    pin.SetTitle("");
    pin.SetDescription("");


    var ci = new VECustomIconSpecification();
    //ci.Image = iconUrl;
    //ci.CustomHTML = "<div class='Pushpin' style='background-image:url(" + iconUrl + ")' id='" + pinID + "' onclick='ShowInfoboxPanel(this)'>" + (pincount != 1 ? pincount : "") + "</div>";
    ci.CustomHTML = "<div class='Pushpin' style='background-image:url(" + iconUrl + ")' >" + (pincount != 1 ? pincount : "") + "</div>";
    if (dataType == "WIK")
        ci.CustomHTML = "<div class='Pushpin' style='background-image:url(" + iconUrl + ");width:42px;height:40px;' >" + (pincount != 1 ? pincount : "") + "</div>";
    pin.SetCustomIcon(ci);

    layer.AddShape(pin);

    pin.myID = pinID;
    pin.ClusterType = clusterType;
    pin.DataType = dataType;
}

//-------------------------------------------------------------------------------------
function ShowAccomodationPanel() {
    var navbarOffset = $("#navbar").offset();
    $("#AccomodationPanelContainer").css("left", (GetWindowWidth() - 800) / 2).css("display", "block").css("opacity", "0").fadeTo("normal", 1);
}

//-------------------------------------------------------------------------------------
function GetShapeById(shapeLayer, id) { var l = shapeLayer.Annotations.length; for (var i = 0; i < l; i++) if (shapeLayer.Annotations[i].Id == id) return shapeLayer.Annotations[i]; return null; }


//-------------------------------------------------------------------------------------
function GetSelectedPoiCategories() {
    var s = "";
    var c = document.getElementsByTagName("input");
    for (var i = 0; i < c.length; i++) {
        if (c[i].type == "checkbox") {
            //alert(c[i].title + "   " + c[i].title.indexOf("cat_") + "     " + c[i].checked);
            if (c[i].id.indexOf("cat_") != -1)
                if (c[i].checked == true) s += c[i].id.substr(4) + ",";
        }
    }
    if (threeDPanelActive) s += "ae0a238b-6c5c-4774-b8da-9f179d8124b1";
    return s;
}

//-------------------------------------------------------------------------------------
function GetPois() {
    var v = map.GetMapView();

    var categories = GetSelectedPoiCategories();

    if (categories == "") {
        poiShapeLayer.DeleteAllShapes();
        //		map.DeleteShapeLayer(poiShapeLayer);
        //		poiShapeLayer = null;
        //		poiShapeLayer = new VEShapeLayer();
        //		map.AddShapeLayer(poiShapeLayer);
        //		poiShapeLayer.Show();

        return;
    }
    var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
						 "&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
						 "&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
						 "&BottomRightLongitude=" + v.BottomRightLatLong.Longitude +
						 "&ZoomFactor=" + map.GetZoomLevel() +
						 "&Categories=" + categories;

    $.post("Handler/Pois.ashx", params, ReceivePois);
    $("#PoiPanelPage2").html("<div style='margin: 64px'><img src='images/baw/ajax-loader.gif'/></div>");
}


//-------------------------------------------------------------------------------------
function ReceivePois(arg) {
    var arr = arg.split('@-@');
    $("#PoiPanelPage2").html(arr[1]);
    poiRows = arr[0].split('\n');

    poiIndex = 0;
    poiDisplayIndex = 0;
    poiShapeLayer.DeleteAllShapes();
    if (poiRows.length > 1) window.setTimeout("DelayedPois()", 1); else AfterReceivePois();
}
//-------------------------------------------------------------------------------------
function DelayedPois() {
    for (var ii = poiIndex; ii < poiIndex + 100; ii++) {
        if (ii >= poiRows.length - 1) break;
        columns = poiRows[ii].split('^');
        if (columns[0] == "C") {
            AddAJAXPin(poiShapeLayer, "C", "POI", columns[3], new VELatLong(parseFloat(columns[1]), parseFloat(columns[2])), "images/baw/icon-theme-v01.gif", columns[4]);
        }
        else {
            AddAJAXPin(poiShapeLayer, "S", "POI", columns[3], new VELatLong(parseFloat(columns[1]), parseFloat(columns[2])), "images/baw/icon-theme-v01.gif", columns[4]);
        }


        //if (columns[0]=="-"){var shape=GetShapeById(poiShapeLayer,"POI" + columns[1]);if (shape!=null) poiShapeLayer.DeleteShape(shape);}
        //if (columns[0]=="+") AddAJAXPin(poiShapeLayer,"POI" + columns[1],	new VELatLong(parseFloat(columns[2]),parseFloat(columns[3])),"images/bawtouchscreen/icon_gastronomie.gif");
        //if (columns[0]=="=") $("#POI" + columns[1]).draggable({appendTo:'#DragHelper',helper:'clone',opacity:0.5,zIndex:32001,cursor:'move', containment:'document'});
    }

    poiIndex = ii + 1;
    if (ii < poiRows.length - 1)
        window.setTimeout("DelayedPois()", 20);
    else
        AfterReceivePois();
}
//-------------------------------------------------------------------------------------
function AfterReceivePois() {
    bBlockUpdatePois = false;
    HideLoadingPanel();
}


function GetSelectedAccomodationTypes() {
    return $("#" + cboAccomodationTypeClientID).val();
}
//-------------------------------------------------------------------------------------
function GetAccomodations(flag) {

    if (accomodationSearchType == -1) {
        accomodationShapeLayer.DeleteAllShapes();
        return;
    }

    if (accomodationSearchType == 2 && flag == undefined) {

        return;
    }

    if (accomodationSearchType == 2)
        ShowLoadingPanel();

    var v = map.GetMapView();
    var accTypes = GetSelectedAccomodationTypes();
    //	if (accTypes == "")
    //	{
    //		accomodationShapeLayer.DeleteAllShapes();
    //		HideLoadingPanel();
    //		return;
    //	}
    var params = "AccomodationTypes=" + accTypes +
								"&TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
								"&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
								"&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
								"&BottomRightLongitude=" + v.BottomRightLatLong.Longitude +
								"&ZoomFactor=" + map.GetZoomLevel() +
								"&Bookable=" + accomodationSearchType +
								"&StartDate=" + $("#" + txtStartDateClientID).val() +
								"&EndDate=" + $("#" + txtEndDateClientID).val() +
								"&MaxPrice=" + $("#cboMaxPrice").val();

    $.post("Handler/Accomodations2.ashx", params, ReceiveAccomodations);
    $("#AccomodationPanelPage2").html("<div style='margin: 64px'><img src='images/baw/ajax-loader.gif'/></div>");
}


function UpdateRoomDropdown() {

    var v = map.GetMapView();

    var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
						 "&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
						 "&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
						 "&BottomRightLongitude=" + v.BottomRightLatLong.Longitude +
						 "&AccomodationTypeID=" + $("#" + cboAccomodationTypeClientID).val();

    $.post("Handler/AvailableRoomTypes.ashx", params, ReceiveAvailableRoomTypes);
    return;
    var val = $("#" + cboAccomodationTypeClientID).val();
    var roomDropdown = document.getElementById(cboRoomTypeClientID);

    roomDropdown.options.length = 1;
    roomDropdown.options[0] = new Option("Beliebig", "", false, true);

    switch (val) {
        case "cee6fa40-a43d-4648-866e-727aac09eeba": //Ferienhaus
            roomDropdown.options[0] = new Option("Haus", "69A2140F-3F1E-4128-973D-CD008DDDAE00", false, true);
            break;
        case "736d7757-a626-4714-bde7-f009e109e36e": // Ferienwohnung
            roomDropdown.options[1] = new Option("Wohnung", "CC01E4A7-BC14-4AC2-86C5-B828F2F94CDC", false, true);
            roomDropdown.options[2] = new Option("Appartement", "C829F00E-1F8F-4DDC-A51B-37B551A46553", false, false);
            break;

        default:
            roomDropdown.options[1] = new Option("Einzelzimmer", "1A632274-53C4-4F39-B9CE-48838FDF0590", false, false);
            roomDropdown.options[2] = new Option("Doppelzimmer", "46100017-3079-4087-B3E5-13205AED78CE", false, false);

            roomDropdown.options[3] = new Option("Dreibettzimmer", "0DB26B9C-581D-4AFF-98F5-E1E8B9CA2EE4", false, false);
            roomDropdown.options[4] = new Option("Vierbettzimmer", "02F398A3-6D35-4656-879D-658D8EC2EE90", false, false);


            roomDropdown.options[5] = new Option("Mehrbettzimmer", "D14CA999-9450-439B-9BC8-154EB9F1BB71", false, false);
            roomDropdown.options[6] = new Option("Gemeinschaftsunterkunft,", "DDBF13EC-D2C9-4183-829F-5BD4B70784DB", false, false);

            roomDropdown.options[7] = new Option("Appartement", "C829F00E-1F8F-4DDC-A51B-37B551A46553", false, false);
            roomDropdown.options[8] = new Option("Suite", "7A9014B7-BB72-44F7-B73F-F77413D555E7", false, false);
            roomDropdown.options[9] = new Option("Studio", "3A16FB26-6812-44A4-AA64-40F31DED80F2", false, false);

            roomDropdown.options[10] = new Option("Wohnung", "CC01E4A7-BC14-4AC2-86C5-B828F2F94CDC", false, false);
            roomDropdown.options[11] = new Option("Haus", "69A2140F-3F1E-4128-973D-CD008DDDAE00", false, false);
            break;


    }
}


function ReceiveAvailableRoomTypes(arg) {
    //alert(arg);

    var roomDropdown = document.getElementById(cboRoomTypeClientID);

    var oldSelectedValue = $("#" + cboRoomTypeClientID).val();


    var found = false;
    roomDropdown.options.length = 1;
    roomDropdown.options[0] = new Option("Beliebig", "", false, true);

    var rows = arg.split('\n');
    for (i = 0; i < rows.length - 1; i++) {
        var columns = rows[i].split('^');
        roomDropdown.options[i + 1] = new Option(columns[1], columns[0], false, (columns[0] == oldSelectedValue ? true : false));
        if (columns[0] == oldSelectedValue) found = true;

    }

    if (found == false) {

        GetAccomodations();
    }

}

//ID	Name
//8AE93D5A-70CF-44B4-B491-131722F120F5	[Sonstige]
//46100017-3079-4087-B3E5-13205AED78CE	Doppelzimmer
//D14CA999-9450-439B-9BC8-154EB9F1BB71	Mehrbettzimmer
//C829F00E-1F8F-4DDC-A51B-37B551A46553	Appartement
//3A16FB26-6812-44A4-AA64-40F31DED80F2	Studio
//1A632274-53C4-4F39-B9CE-48838FDF0590	Einzelzimmer
//DDBF13EC-D2C9-4183-829F-5BD4B70784DB	Gemeinschaftsunterkunft
//02F398A3-6D35-4656-879D-658D8EC2EE90	Vierbettzimmer
//E9E58CF1-0D46-4B4D-A674-7A96A8A62815	Zimmer
//7563BD7D-47D4-43B3-A110-7C3AB4940D67	Zweibettzimmer
//CC01E4A7-BC14-4AC2-86C5-B828F2F94CDC	Wohnung
//69A2140F-3F1E-4128-973D-CD008DDDAE00	Haus
//0DB26B9C-581D-4AFF-98F5-E1E8B9CA2EE4	Dreibettzimmer
//7A9014B7-BB72-44F7-B73F-F77413D555E7	Suite

function ReceiveAccomodations(arg) {
    arr = arg.split('@-@');

    $("#AccomodationPanelPage2").html(arr[1]);

    accRows = arr[0].split('\n');
    //if (accRows[0].indexOf('TOOMANYRESULTS')!=-1)
    //{
    //CustomShowErrorMessage("Das System hat " + accRows[0].substring(15) + " anzuzeigende Objekte mit Ihren Kritereien gefunden. Aus Leistungsgründen werden jedoch max. 250 angezeigt. Bitte reduzieren Sie daher die Objektauswahl durch z.B. verkleinern des Radius, Kartenauschnittes oder ausblenden nicht benötigter Informationen.");
    //}
    accIndex = 0;
    accDisplayIndex = 1;
    accList = new Array();

    accomodationShapeLayer.DeleteAllShapes();

    if (accRows.length > 1) window.setTimeout("DelayedAddAccomodations()", 10);
    else AfterReceiveAccomodations();

}



function DelayedAddAccomodations() {
    for (var ii = accIndex; ii < accIndex + 100; ii++) {
        if (ii >= accRows.length - 1) break;
        columns = accRows[ii].split('^');

        if (columns[0] == "C") {
            AddAJAXPin(accomodationShapeLayer, "C", "ACC", columns[3], new VELatLong(parseFloat(columns[1]), parseFloat(columns[2])), "images/baw/icon-unterkunft-v01.gif", columns[4]);
        }
        else {
            AddAJAXPin(accomodationShapeLayer, "S", "ACC", columns[3], new VELatLong(parseFloat(columns[1]), parseFloat(columns[2])), "images/baw/icon-unterkunft-v01.gif", columns[4]);
        }
        //if (columns[0]=="+"||columns[0]=="=") accList.push("<tr><td valign='top'><div class='pin2'>" + (accDisplayIndex++) + "</div></td><td>" + "<a style='text-decoration:none;font-weight:bold;color:black;' href='javascript:map.SetCenterAndZoom(new VELatLong("+ columns[2] + "," + columns[3] + "),16);void(0);'>" + columns[4] + "</a></b><br>" + columns[5] + ", " + columns[7] + " " + columns[6] + "<br><b>" + columns[8] + " Km</b> vom Kartenmittelpunkt<hr></td></tr>");

    }
    accIndex = ii + 1;
    if (ii < accRows.length - 1) window.setTimeout("DelayedAddAccomodations()", 10); else AfterReceiveAccomodations();
}






//-------------------------------------------------------------------------------------
function AfterReceiveAccomodations() {
    HideLoadingPanel();
}

//-------------------------------------------------------------------------------------
function ShowInfoboxPanel(o, x, y) {
    $("#InfoboxBody").html("<div style='padding:64px;text-align:center;'><img src='images/baw/ajax-loader.gif'/></div>");

    var left = 0;
    if (x + 240 > GetWindowWidth())
        left = x - 200;
    else
        left = x + 50;
    if (map.GetMapMode() == VEMapMode.Mode3D) {
        $("#InfoboxPanel").css("left", left).css("top", y).css("display", "block");
        $("#InfoBoxPanelShim").css("left", left).css("top", y).css("height", "200px").css("display", "block");

    }
    else {
        $("#InfoboxPanel").css("left", left).css("top", y).css("display", "block").css("opacity", "0").fadeTo("normal", 1);
    }

    $.post("Handler/Infobox.ashx", "ID=" + o.myID + "&ClusterType=" + o.ClusterType + "&DataType=" + o.DataType, ReceiveInfoboxDetails);
}

function ShowInfoboxPanel2(id) {
    $.post("Handler/Infobox.ashx", "ID=" + id, ReceiveInfoboxDetails);
}

function HideInfoboxPanel() {
    if (map.GetMapMode() == VEMapMode.Mode3D) {
        $("#InfoBoxPanelShim").hide();
        $("#InfoboxPanel").hide();
    }
    else
        $("#InfoboxPanel").fadeOut("normal");
}
//-------------------------------------------------------------------------------------
function ReceiveInfoboxDetails(arg) {
    $("#InfoboxBody").html(arg);
    window.setTimeout("RepositionInfobox()", 1);
}

//-------------------------------------------------------------------------------------
function RepositionInfobox() {
    var o = $("#InfoboxPanel")
    var offset = o.offset();



    if (offset.top + o.height() > GetWindowHeight()) {
        o.css("top", GetWindowHeight() - o.height());
        $("#InfoBoxPanelShim").css("top", GetWindowHeight() - o.height()).css("display", "block");
    }

    $("#InfoBoxPanelShim").css("height", o.height());
}

//-------------------------------------------------------------------------------------
function AddToPlaner(drag) {
    $.post("Handler/Planer.ashx", "Arg=ADD^" + drag.draggable.attr("DataType") + drag.draggable.attr("id"), ReceivePlaner);
}

//-------------------------------------------------------------------------------------
function AddToPlaner2(id) {
    $.post("Handler/Planer.ashx", "Arg=ADD^" + id, ReceivePlaner);
}

//-------------------------------------------------------------------------------------
function DeleteFromPlaner(id) {
    $.post("Handler/Planer.ashx", "Arg=DELETE^" + id, ReceivePlaner);
}

function RefreshPlaner() {
    $.post("Planer.ashx", "Arg=REFRESH^", ReceivePlaner);
}

var loadingPanelCounter = 0;
function ShowLoadingPanel() {
    loadingPanelCounter++;
    $("#divLoadingPanel").css("left", (GetWindowWidth() - 240) / 2).css("top", (GetWindowHeight() - 60) / 2).show();
}


function HideLoadingPanel() {
    if (loadingPanelCounter > 0)
        loadingPanelCounter--;

    if (loadingPanelCounter == 0)
        $("#divLoadingPanel").hide();
}


//-------------------------------------------------------------------------------------
function ReceivePlaner(arg) {
    //$("#PlanerPanel").html(arg);
    var rows = arg.split('´');
    $('#PlanerButton').html("Favoriten (" + rows[0] + ")");
    $('#PlanerPanel').html(rows[1]);
    //!="" ? rows[1] : "<div style='padding:8px;font-family:Verdana;font-size:11px;'>Sobald Sie sich Objekte [Unterkünfte, Touren oder Themen] in der Karte anzeigen lassen, können Sie durch Bewegen mit der Maus über ein Symbol in der Karte ein Info Fenster des Objektes anzeigen lassen. In diesem Info Fenster können Sie durch Anklicken des Punktes „Zum Urlaubsplaner hinzufügen“ dies nebst vorhandener Bilder, Beschreibung etc. in Ihrem persönlichen Urlaubsplaner hinterlegen. Wenn Sie alle gewünschten Objekte abgelegt haben, wählen Sie einfach erneut diesen Menüpunkt aus und können dann Ihren individuellen Urlaubsplaner bzw. Broschüre als PDF Datei speichern oder direkt ausdrucken.</div>");
}

//-------------------------------------------------------------------------------------
function ShowExtendedDetailsPanel(id) {
    $("#ExtendedDetailsPanel").html("<iframe frameborder='0' src='templates/baw/BawExtendedDetails.aspx?ID=" + id + "' class='ExtendedDetailsIFrame'/>");
    var y = 0;
    if (GetWindowHeight() > 550)
        y = (GetWindowHeight() - 550) / 2;

    $("#ExtendedDetailsPanel").css("left", (GetWindowWidth() - 1024) / 2).css("top", y).css("display", "block").css("opacity", "0").fadeTo("normal", 1);
    $("#divModalOverlay").css("width", GetWindowWidth()).css("height", GetWindowHeight()).css("display", "block").css("opacity", "0.7");
}

//-------------------------------------------------------------------------------------
function HideExtendedDetailsPanel() {
    $("#ExtendedDetailsPanel").fadeOut("normal");
    $("#divModalOverlay").hide();
}

//-------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------


var mapStyleContainerVisible = false;

function ToggleMapStyleContainer() {
    if (mapStyleContainerVisible == true)
        $("#MapStyleContainer").animate({ "left": GetWindowWidth() - 40 }, 500);
    else
        $("#MapStyleContainer").animate({ "left": GetWindowWidth() - 200 }, 500);

    mapStyleContainerVisible = !mapStyleContainerVisible;
}



function VEEFind() {
    var where = document.getElementById('txtWhere').value;
    if (where == "[Strasse, PLZ Ort]") where = "";
    if (where == "") return;
    map.Find("", where, null, null, null, null, null, null, null, null, VEFindCallback);
}

function VEFindCallback(a, b, c, d, e) {
    if (c != null) if (c.length >= 1) {
        try {
            map.DeletePushpin("Found");
        }
        catch (e)
		{ }

        var pin = new VEPushpin("Found", c[0].LatLong, null, "", c[0].Name);
        map.AddPushpin(pin);
    }
}

var activePanel = null;

function ShowPanel(name) {
    if (activePanel != null) {
        $("#" + activePanel).hide();
        $("#" + name).show();
    }
    else
        $("#" + name).show();

    activePanel = name;
    if (activePanel == "ThreeDPanel")
        threeDPanelActive = true;
    else
        threeDPanelActive = false;
    Body_OnResize();

}

function HidePanel(name) {
    $("#" + activePanel).hide();
    activePanel = null;
    Body_OnResize();
}

function TogglePanelContainer() {
    $("#ctl02_PanelContainer").toggle();
    Body_OnResize();
}

function ResizeActivePanel() {
    if (activePanel != null) {
        var o = $("#" + activePanel);
        o.height(GetWindowHeight() - 220);

        var o = $("#" + activePanel + "Body");
        o.height(GetWindowHeight() - 260);

        if (o.attr("id") == "AccomodationPanelBody")
            $("#AccomodationPanelPage2").css("height", GetWindowHeight() - 336);

        if (o.attr("id") == "PoiPanelBody")
            $("#PoiPanelPage2").css("height", GetWindowHeight() - 336);

        if (o.attr("id") == "WelcomePanelBody")
            $("#WelcomePanelBody").css("height", GetWindowHeight() - 286);

        if (o.attr("id") == "ThreeDPanelBody")
            $("#ThreeDPanelBody").css("height", GetWindowHeight() - 290);

        if (o.attr("id") == "WikipediaPanelBody")
            $("#WikipediaPanelBody").css("height", GetWindowHeight() - 303);

    }
}




function ShowTileLayer(name) {

    try { map.DeleteTileLayer("tilelayer"); } catch (e) { }
    try {
        var bounds = [new VELatLongRectangle(new VELatLong(54, 0), new VELatLong(48, 14))];
        var tileSourceSpec;
        switch (name) {
            case "rvrgray":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=Grau");
                tileSourceSpec.Bounds = bounds;
                tileSourceSpec.MinZoomLevel = 15;
                break;

            case "rvrcolor":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=Color");
                tileSourceSpec.Bounds = bounds;
                tileSourceSpec.MinZoomLevel = 15;
                break;
            case "vitalesland":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/TilesVitalesland/%4.png");
                tileSourceSpec.MinZoomLevel = 1;
                break;
            case "hillshaded":
                map.SetMapStyle(VEMapStyle.Shaded);
                return;

            case "orthos":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=orthos");
                tileSourceSpec.MinZoomLevel = 1;
                break;

            case "spw-bunt":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=spw-bunt");
                tileSourceSpec.MinZoomLevel = 1;
                break;

            case "spw-grau":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=spw-grau");
                tileSourceSpec.MinZoomLevel = 1;
                break;

            case "spw-light":
                tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://80.148.41.197/WMSTileServer/%4.png?Layer=spw-light");
                tileSourceSpec.MinZoomLevel = 1;
                break;

            case "osm":
                var tileSourceSpec = new VETileSourceSpecification("tilelayer", "", 1, bounds, 1, 18, getTilePath, 1.0, 100);
                tileSourceSpec.MinZoomLevel = 1;
                break;


            //tileSourceSpec = new VETileSourceSpecification("tilelayer", "http://%1%2.ortho.tiles.virtualearth.net/tiles/%3%4?g=%6&shading=hill");   
            //tileSourceSpec.MinZoomLevel = 1;  
            //break;  

        }
        tileSourceSpec.NumServers = 1;
        tileSourceSpec.MaxZoomLevel = 20;
        tileSourceSpec.Opacity = 1.0;
        tileSourceSpec.ZIndex = 49;
        map.AddTileLayer(tileSourceSpec, true);
    } catch (e) { }


    //AddMyLayer();

}


function getTilePath(tileContext) {
    return "http://tile.openstreetmap.org/" + tileContext.ZoomLevel + "/" + tileContext.XPos + "/" + tileContext.YPos + ".png";
}

function Map_OnMouseDown(e) {
    var x, y;

    if (map.GetMapMode() == VEMapMode.Mode3D) {
        var latlong = e.latLong;
        rlat = latlong.Latitude;
        rlon = latlong.Longitude;
        var px = map.LatLongToPixel(latlong, map.GetZoomLevel());
        x = px.x;
        y = px.y;
    }
    else {
        try {
            var latlong = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
            rlat = latlong.Latitude;
            rlon = latlong.Longitude;
            x = e.mapX;
            y = e.mapY;
        } catch (ex) { }
    }


    if (e.elementID != null) {
        popupShape = map.GetShapeByID(e.elementID);
        if (popupShape != null) {
            ShowInfoboxPanel(popupShape, x, y);

        }
    }
}



// loads a specific collection
var collectionObjectID = null;
function LoadCollection(collectionID, objectID) {
    map.SetMapMode(VEMapMode.Mode3D);
    //map.SetMapStyle(VEMapStyle.Aerial);
    threeDLayer.DeleteAllShapes();
    collectionObjectID = objectID;
    var veLayerSpec = new VEShapeSourceSpecification(VEDataType.VECollection, collectionID, threeDLayer);
    map.ImportShapeLayerData(veLayerSpec, CollectionLoaded);
}

// called when collection is loaded
function CollectionLoaded(feed) {
    for (i = 0; i < threeDLayer.Annotations.length; i++) {
        threeDLayer.Annotations[i].SetCustomIcon("images/baw/icon-3d-v01.gif");
        threeDLayer.Annotations[i].SetTitle("");
        threeDLayer.Annotations[i].SetDescription("");
        threeDLayer.Annotations[i].myID = collectionObjectID;
    }
    return true;
}


function SearchTypeChange(typ) {
    accomodationSearchType = typ;
    if (accomodationSearchType == 2) {
        accomodationShapeLayer.DeleteAllShapes();
        $("#AccomodationSearchButton").css("display", "block");
    }
    else
        $("#AccomodationSearchButton").css("display", "none");
    GetAccomodations();
}
//
// TMC
//



function DoFindTmc() {
    var v = map.GetMapView();
    var s1 = $("#cbShow1").attr("checked");
    var s2 = $("#cbShow2").attr("checked");
    var s3 = $("#cbShow3").attr("checked");

    if (s1 == false && s2 == false && s3 == false) {
        tmcShapeLayer.DeleteAllShapes();
        return;
    }

    if (s1 == true || s2 == true || s3 == true) {

        try {
            //FindTmc(v.TopLeftLatLong.Latitude + "," + v.TopLeftLatLong.Longitude + "," + v.BottomRightLatLong.Latitude + "," + v.BottomRightLatLong.Longitude + "," + s1 + "," + s2 + "," + s3);
            var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
										"&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
										"&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
										"&BottomRightLongitude=" + v.BottomRightLatLong.Longitude +
										"&S1=" + s1 +
										"&S2=" + s2 +
										"&S3=" + s3;
            $.post("Handler/Tmc.ashx", params, ReceiveTmc);
        }
        catch (e) { }
    }
}

function IsTmcLinesEnabled() { return $("#cbLines").attr("checked"); }

function IsTmcIconsEnabled() { return $("#cbIcons").attr("checked"); }

function ReceiveTmc(arg) {
    var rows;
    var pin;
    rows = arg.split('\n');

    tmcShapeLayer.DeleteAllShapes();

    var isLinesEnabled = IsTmcLinesEnabled();
    var isIconsEnabled = IsTmcIconsEnabled();
    for (var ii = 0; ii < rows.length - 1; ii++) {
        var columns = rows[ii].split('^');
        var points = new Array();
        for (var j = 7; j < columns.length; j += 2) points.push(new VELatLong(parseFloat(columns[j]), parseFloat(columns[j + 1])));
        try {
            var shape = new VEShape(VEShapeType.Polyline, points);
            shape.Id = "TMC" + columns[0];
            shape.SetTitle("");
            shape.SetLineWidth(6);
            switch (columns[1]) {
                case "1": shape.SetLineColor(new VEColor(255, 0, 0, (isLinesEnabled == true ? 1.0 : 0.0)));
                    shape.SetCustomIcon("images/stau2.gif");
                    break;
                case "2": shape.SetLineColor(new VEColor(255, 128, 32, (isLinesEnabled == true ? 1.0 : 0.0)));
                    shape.SetCustomIcon("images/stau1.gif");
                    break;
                case "3": shape.SetLineColor(new VEColor(255, 255, 64, (isLinesEnabled == true ? 1.0 : 0.0)));
                    shape.SetCustomIcon("images/stau0.gif");
                    break;
            }
            if (isIconsEnabled == false) shape.HideIcon();
            tmcShapeLayer.AddShape(shape);
        } catch (e) { alert(e); }
    }
}

function SwapContent(name1, name2) {
    var o1 = document.getElementById(name1);
    var o2 = document.getElementById(name2);
    var s = o1.value;
    o1.value = o2.value;
    o2.value = s;
}


function FindRoute() {
    var routeType;
    var start;
    var end;


    routeType = VERouteType.Quickest;
    start = document.getElementById("txtRouteStart").value;
    if (start.indexOf("Startpunkt aus Karte") == 0) start = new VELatLong(routeStartLatitude, routeStartLongitude);
    end = document.getElementById("txtRouteEnd").value;
    if (end.indexOf("Zielpunkt aus Karte") == 0) end = new VELatLong(routeDestinationLatitude, routeDestinationLongitude);

    if (start == "" || end == "" || start == " " || end == " ") { alert("Sie müssen einen Start- und Zielpunkt angeben."); return; }
    try {
        map.DeletePushpin("ROUTESTARTMARKER");
        map.DeletePushpin("ROUTEENDMARKER");
    } catch (e) { }

    var locations = new Array(start, end);
    var options = new VERouteOptions;
    options.DrawRoute = true;
    options.SetBestMapView = false;
    options.RouteCallback = onGotRoute;
    options.DistanceUnit = VERouteDistanceUnit.Kilometer;
    options.ShowDisambiguation = true;
    options.RouteMode = ($("#rbWalkingMode").attr("checked") == true ? VERouteMode.Walking : VERouteMode.Driving);
    map.GetDirections(locations, options);
}


//-------------------------------------------------------------------------------------
function onGotRoute(route) {
    if (route == null)
        alert("Fehler:Route konnte nicht geladen werden.");

    if (route.RouteLegs.length == 0) {
        alert("Fehler:Route konnte nicht geladen werden.");
        return;
    }

    //	var leg = route.RouteLegs[0];
    //	var routeinfo = "<table width='100%'  border='0' style='font-family:Verdana; font-size:8pt;'><tr><td colspan='2'>" +
    //								"<table width='100%' style='font-family:Verdana; font-size:8pt;'><tr><td>Gesamtdistanz</td><td>" + route.Distance.toFixed(1) + " Km</td></tr>" +
    //								"<tr><td>Dauer</td><td>" + GetTime(leg.Time) + "</td></tr></table></td></tr>";

    //	for (var j = 0; j < leg.Itinerary.Items.length; j++)
    //	{
    //		routeinfo += "<tr><td valign='top'><b><a href='javascript:map.SetCenterAndZoom(new VELatLong(" + leg.Itinerary.Items[j].LatLong.Latitude + "," + leg.Itinerary.Items[j].LatLong.Longitude + "),13);void(0);'>";
    //		if (j == 1) routeinfo += "<img src='./images/mapicon_start.gif' border='0' />";
    //		if (j == leg.Itinerary.Items.length - 1) routeinfo += "<img src='./images/mapicon_end.gif' border='0'/>";
    //		if (j > 1 && j < leg.Itinerary.Items.length - 1) routeinfo += (j - 1);
    //		routeinfo += "</a></b></td><td width='100%'> " + TranslateRouteInstruction(leg.Itinerary.Items[j].Text) + " -- (" + leg.Itinerary.Items[j].Distance.toFixed(1) + " Km)<hr></td></tr>";
    //	}

    //	$("#routingSummaryCar").html(routeinfo);

    //	ShowRoutingSummary();

    //	try
    //	{
    //		map.DeletePushpin("ROUTESTARTMARKER");
    //		map.DeletePushpin("ROUTEENDMARKER");
    //	} catch (e) { }
}

////-------------------------------------------------------------------------------------
//// 
//function SetRouteStart(lat, lon)
//{
//	routeStartLatitude = lat;
//	routeStartLongitude = lon;
//	document.getElementById("txtRouteStart").value = "Startpunkt aus Karte";
//	try { map.DeletePushpin("ROUTESTARTMARKER"); } catch (e) { }
//	var pin = new VEPushpin("ROUTESTARTMARKER", new VELatLong(lat, lon), "images/baw/mapicon_start.gif", "");
//	map.AddPushpin(pin);
//	ShowPanel("RoutePanel", true);
//}

////-------------------------------------------------------------------------------------
//// 
//function SetRouteEnd(lat, lon)
//{
//	routeDestinationLatitude = lat;
//	routeDestinationLongitude = lon;
//	document.getElementById("txtRouteEnd").value = "Zielpunkt aus Karte";
//	try { map.DeletePushpin("ROUTEENDMARKER"); } catch (e) { }
//	var pin = new VEPushpin("ROUTEENDMARKER", new VELatLong(lat, lon), "images/baw/mapicon_end.gif", "");
//	map.AddPushpin(pin);
//	ShowPanel("RoutePanel", true);

//}

//-------------------------------------------------------------------------------------
function AddToRouteStations() {
    var adress = $("#txtAdress").val();
    map.Find("", adress, null, null, null, null, null, null, null, null, ReceiveAddToRouteStations);
}

function ReceiveAddToRouteStations(a, b, c, d, e) {
    if (c != null) if (c.length >= 1) {

        var pin = new VEPushpin("Found", c[0].LatLong, null, "", c[0].Name);
        map.AddPushpin(pin);

        SetRouteEnd(c[0].LatLong.Latitude, c[0].LatLong.Longitude);
    }
    else
        alert("Diese Adresse wurde nicht gefunden.");
}


//-------------------------------------------------------------------------------------
function GetDirections() {
    if (routeStations.length < 2) {
        alert("Bitte mindestens 2 Punkte angeben.");
        return;
    }
    var options = new VERouteOptions;
    options.DrawRoute = true;
    options.SetBestMapView = false;
    options.RouteCallback = onGotRoute;
    options.DistanceUnit = VERouteDistanceUnit.Kilometer;
    options.ShowDisambiguation = true;
    options.RouteMode = ($("#rbWalkingMode").attr("checked") == true ? VERouteMode.Walking : VERouteMode.Driving);
    map.GetDirections(routeStations, options);
}

//-------------------------------------------------------------------------------------
function SetRouteStart(lat, lon) {
    routeStations[0] = new VELatLong(lat, lon);
    UpdateRouteList();
}

//-------------------------------------------------------------------------------------
function SetRouteEnd(lat, lon) {
    routeStations[routeStations.length] = new VELatLong(lat, lon);
    UpdateRouteList();
}

//-------------------------------------------------------------------------------------
function UpdateRouteList() {
    routeMarkerShapeLayer.DeleteAllShapes();
    var s = "";
    for (i = 0; i < routeStations.length; i++) {
        s += "<li latitude='" + routeStations[i].Latitude + "' longitude='" + routeStations[i].Longitude + "' class='SortableItem'>" +
		"<div style='float:left;width:176px;padding-left:4px;font-size:12px'>Routenpunkt " + i + "</div>" +
		"<img src='images/baw/Delete.gif' class='Delete' onclick='DeleteRouteStation(this)' style='margin-top:4px'/></li>";
        var shape = new VEShape(VEShapeType.Pushpin, new VELatLong(routeStations[i].Latitude, routeStations[i].Longitude));
        shape.SetCustomIcon("images/baw/mapicon_start.gif");
        routeMarkerShapeLayer.AddShape(shape);
    }

    $("#listRouteStations").html(s);
    //alert(s);
}

function stopDrag(e) {
    routeStations.length = 0;
    var i = 0;
    $(".SortableItem").each(function() {
        routeStations[i] = new VELatLong(this.latitude, this.longitude);
        i++;
    }
	);
}

function DeleteRouteStation(o) {

    var ul = o.parentNode.parentNode;
    var li = o.parentNode;
    ul.removeChild(li);

    stopDrag();
    UpdateRouteList();

    return false;

}


function SetNewOptions() {
    GetAccomodations();
}


function GetTour(id) {
    if (id == "") {
        tourShapeLayer.DeleteAllShapes();
        return;
    }

    $.post("Handler/RouteData.ashx", "ID=" + id, ReceiveTours);
}


function ReceiveTours(arg) {
    var rows;
    var columns;
    var points = new Array();
    var allPoints = new Array();
    var segmentID = 0;

    tourShapeLayer.DeleteAllShapes();
    rows = arg.split('\n');
    for (var ii = 0; ii < rows.length - 1; ii++) {
        columns = rows[ii].split('^');
        points = new Array();
        for (var j = 3; j < columns.length; j += 2) {
            points.push(new VELatLong(parseFloat(columns[j]), parseFloat(columns[j + 1])));
            allPoints.push(new VELatLong(parseFloat(columns[j]), parseFloat(columns[j + 1])));
        }


        var shape = new VEShape(VEShapeType.Polyline, points);
        shape.SetTitle("");
        shape.SetLineWidth(3);
        shape.SetLineColor(new VEColor(columns[0], columns[1], columns[2], 1.0));
        shape.HideIcon();
        //shapeArray.push(shape.GetID());

        tourShapeLayer.AddShape(shape);

    }

    map.SetMapView(allPoints);
}





function ToggleMenu(e) {
    if (e.leftMouseButton == true) hidemenu(e); if (e.rightMouseButton == true) popupmenu(e);
    //document.getElementById('idgeo').value = e.latLong.Latitude + "," + e.latLong.Longitude;;

}

function popupmenu(e) {



    if (map.GetMapMode() == VEMapMode.Mode3D) {

        // map position
        var offset = $("#divMap").offset();

        var latlong = e.latLong;
        rlat = latlong.Latitude;
        rlon = latlong.Longitude;
        var px = map.LatLongToPixel(latlong, map.GetZoomLevel());
        var menu = document.getElementById('popupmenuShim');
        menu.style.display = 'block';
        menu.style.left = px.x + offset.left - 60;
        menu.style.top = px.y + offset.top - 30;


        menu = document.getElementById('popupmenu');
        menu.style.display = 'block';
        menu.style.left = px.x + offset.left - 60;
        menu.style.top = px.y + offset.top - 30;
    }
    else {
        var menu = document.getElementById('popupmenu');
        menu.style.display = 'block';
        menu.style.left = window.event.clientX - 60;
        menu.style.top = window.event.clientY - 30;

        try {
            var latlong = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
            rlat = latlong.Latitude;
            rlon = latlong.Longitude;
        }
        catch (e) { }
    }
}

function hidemenu(e) {
    try {
        if (map.GetMapMode() == VEMapMode.Mode3D) {
            var menu = document.getElementById('popupmenuShim');
            menu.style.display = 'none';
        }
        else {
            var menu = document.getElementById('popupmenu');
            menu.style.display = 'none';
            rlat = e.view.LatLong.Latitude;
            rlon = e.view.LatLong.Longitude;
        }
    } catch (e) { }
}

// Holidayplaner

function ReloadHolidayPlaner() {
    $.post("Handler/Planer.ashx", "Action=None", ReceiveHolidayPlaner);
}

function AddToHolidayPlaner(id, subItemID, itemType, sourceElement) {
    if (sourceElement != undefined) {
        $(sourceElement).attr("disabled", true);
        var path = $(sourceElement).attr("src");
        path = path.replace("BasketIcon.gif", "BasketIconDisabled.gif");
        $(sourceElement).attr("src", path);
        animationSourceControl = sourceElement;
        PlayAnimation("AddToHolidayPlanerAnimation");
    }
    var s = "Action=ADD&ItemID=" + id + "&SubItemID=" + subItemID + "&ItemType=" + itemType;
    $.post("Handler/Planer.ashx", s, ReceiveHolidayPlaner);
}

function DeleteFromHolidayPlaner(id) {
    var s = "Action=DELETE&ItemID=" + id;
    $.post("Handler/Planer.ashx", s, ReceiveHolidayPlaner);
}



function ReceiveHolidayPlaner(arg) {
    var o = arg.split("^");
    $("#PlanerPanelBody").html(o[1]);
}

//
function ShowLocalModel(x, y, path) {
    // Modell laden
    var modelSpec = new VEModelSourceSpecification(VEModelFormat.OBJ, path, localModelShapeLayer);
    map.Import3DModel(modelSpec, onModelLoad, new VELatLong(x, y, VEAltitudeMode.RelativeToGround), new VEModelOrientation(0, 90, 0));

}

function onModelLoad(model, status) {
    $("#" + ajaxLoaderID).hide();
    ajaxLoaderID = null;
    if (status == VEModelStatusCode.Success) {
        //  alert("Das 3D Modell wurde erfolgreich geladen! Bitte haben Sie noch einen Augenblick Geduld, bis das 3D-Modell sich aufgebaut hat.");
    }
    if (status == VEModelStatusCode.InvalidURL) {
        alert("The URL given for the model data is invalid.");
    }
    if (status == VEModelStatusCode.Failed) {
        alert("There was a problem loading the 3D model.");
    }
}

var ajaxLoaderID = null;
function DoAddModel(name, id) {
    if (ajaxLoaderID != null)
        $("#" + ajaxLoaderID).hide();
    $("#" + id).show();
    ajaxLoaderID = id;

    localModelShapeLayer.DeleteAllShapes();

    var domain = "http://212.184.18.198";
    if (localmodels == true)
        domain = "http://localhost";


    switch (name) {
        case "Schauspielhaus": AddModel(51.47149349593558, 7.219200295621975, 0.0, domain + '/ITB/Bochum/schauspielhaus_bochum.obj', 'Schauspielhaus'); break;
        case "Jahrhunderthalle": AddModel(51.48153865114397, 7.198057935729591, 0.0, domain + '/ITB/Bochum/jahrhunderthalle_bochum.obj', 'Jahrhunderthalle'); break;
        case "Bermuda": AddModel(51.47674663571036, 7.217616254517381, 0.0, domain + '/ITB/Bochum/bermuda3eck_bochum.obj', 'Bermuda3eck'); break;
        case "Versprechen": AddModel(51.48237622312846, 7.213934727917312, 0.0, domain + '/ITB/Bochum/platzdesversprechens_bochum.obj', 'Platz des europ. Versprechens'); break;
        case "Starlighthalle": AddModel(51.489595704932086, 7.235599985555544, 0.0, domain + '/ITB/Bochum/starlighthalle_bochum.obj', 'Starlighthalle'); break;
        case "Bergbaumuseum": AddModel(51.490027288734744, 7.219382196589228, 0.0, domain + '/ITB/Bochum/bergbaumuseum_bochum.obj', 'Bergbaumusuem'); break;
        case "Museum": AddModel(51.4863135040205, 7.220951980932869, 0.0, domain + '/ITB/Bochum/museum_bochum.obj', 'Museum Bochum'); break;
        case "Synagoge": AddModel(51.485434782370156, 7.227386260342198, 0.0, domain + '/ITB/Bochum/planetsynagoge_bochum.obj', 'Planetarium und Synagoge'); break
        case "Dortmund1": AddModel(51.51511841702991, 7.457002241119894, 0.0, domain + '/ITB/Dortmund/Teil1.obj', 'Das Dortmunder U'); break;
        //case "Dortmund1": AddModel(51.51511841702991, 7.457002241119894, 0.0, domain + '/ITB/ausDeepExploration/ohneglas-ganz.obj', 'Das Dortmunder U'); break; 
        case "Dortmund2": AddModel(51.517213184659, 7.464955580954611, 0.0, domain + '/ITB/Dortmund/Teil2.obj', 'Stadt- und Landesbibliothek'); break;
        case "Dortmund3": AddModel(51.51383119092915, 7.459381111931765, 0.0, domain + '/ITB/Dortmund/Teil3.obj', 'St. Petri'); break;
        case "Dortmund4": AddModel(51.512610921547704, 7.462553165804459, 0.0, domain + '/ITB/Dortmund/Teil4.obj', 'Propsteikirche'); break;
        case "Dortmund5": AddModel(51.512772466352, 7.46568175609138, 0.0, domain + '/ITB/Dortmund/Teil5.obj', 'Friedensplatz (Altes Stadthaus, Rathaus)'); break;
        case "Dortmund6": AddModel(51.51456479087251, 7.465768113077226, 0.0, domain + '/ITB/Dortmund/Teil6.obj', 'St. Reinoldi'); break;
        case "EssenZollverein": AddModel(51.49003131780132, 7.0443883770393425, -50.0, domain + '/ITB/Essen/Zollverein/Zollverein_1.obj', 'Zeche Zollverein');
        case "Essen1": AddModel(51.45806982799946, 7.0097902262075555, 0.0, domain + '/ITB/Essen/city/kachel1.obj'); break;
        case "Essen2": AddModel(51.45936713277581, 7.012833982004711, 0.0, domain + '/ITB/Essen/city/kachel2.obj'); break;
        case "Essen3": AddModel(51.45867341500342, 7.01553393538804, 0.0, domain + '/ITB/Essen/city/kachel3.obj'); break;
        case "Essen4": AddModel(51.45340508930807, 7.0182996859692555, 0.0, domain + '/ITB/Essen/city/kachel4.obj'); break;
        case "Essen5": AddModel(51.45582024410036, 7.007309469803655, 0.0, domain + '/ITB/Essen/city/kachel5.obj'); break;
        case "Essen6": AddModel(51.456342573516295, 7.013767349960279, 0.0, domain + '/ITB/Essen/city/kachel6.obj'); break;

    }
}


function AddModel(x, y, z, path, title, photourl, description) {

    var layer = new VEShapeLayer();

    //	// Parameter title in AddModel() hinzufgen
    //	// Shape f r Beschriftung definieren
    //	//			  if (title != ''){
    //	var shape = new VEShape(VEShapeType.Pushpin, new VELatLong(x, y));
    //	//			  shape.Hide(); // auskommentieren, um Infoboxen auszuzeigen!!!
    //	shape.SetTitle(title);
    //	shape.GetTitle();
    //	shape.SetDescription(description);
    //	shape.GetDescription();
    //	shape.SetPhotoURL(photourl);
    //	shape.GetPhotoURL();


    //	// Shape zur Karte hinzufgen
    //	map.ShowInfoBox(shape);
    //	map.AddShape(shape);

    // Modell laden
    map.SetCenterAndZoom(new VELatLong(x, y), 18);
    var modelSpec = new VEModelSourceSpecification(VEModelFormat.OBJ, path, localModelShapeLayer);
    map.Import3DModel(modelSpec, onModelLoad, new VELatLong(x, y, z, VEAltitudeMode.RelativeToGround), new VEModelOrientation(0, 90, 0));

}

//-------------------------------------------------------------------------------------
function GetRouteList() {
    var v = map.GetMapView();

    var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
						 "&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
						 "&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
						 "&BottomRightLongitude=" + v.BottomRightLatLong.Longitude +
						 "&Category=" + $("#" + cboRouteCategoryClientID).val();

    $.post("Handler/RouteList.ashx", params, ReceiveRouteList);
}

//-------------------------------------------------------------------------------------
function ReceiveRouteList(arg) {
    $("#TourPanelInnerBody").html(arg);
}

//-------------------------------------------------------------------------------------
function ShowRouteDetails(id) {
    $("#ExtendedDetailsPanelBody").html("<iframe frameborder='0' src='templates/ruhr3d/RouteDetails.aspx?ID=" + id + "' width='782px' height='562px'/>");
    $("#ExtendedDetailsPanel").css("left", (GetWindowWidth() - 800) / 2).css("top", 32).css("display", "block").css("opacity", "0").fadeTo("normal", 1);
    $("#divModalOverlay").css("width", GetWindowWidth()).css("height", GetWindowHeight()).css("display", "block").css("opacity", "0.7");
}

//-------------------------------------------------------------------------------------
function CopyToClipBoard() {
    var s = "Latitude=" + rlat + ";Longitude=" + rlon;
    if (window.clipboardData && clipboardData.setData) {
        clipboardData.setData("Text", s);
    }
    else {
        // You have to sign the code to enable this or allow the action in about:config by changing
        user_pref("signed.applets.codebase_principal_support", true);
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

        var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip) return;

        // create a transferable
        var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
        if (!trans) return;

        // specify the data we wish to handle. Plaintext in this case.
        trans.addDataFlavor('text/unicode');

        // To get the data from the transferable we need two new objects
        var str = new Object();
        var len = new Object();

        var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);

        var copytext = meintext;

        str.data = copytext;

        trans.setTransferData("text/unicode", str, copytext.length * [[[[2]]]]);

        var clipid = Components.interfaces.nsIClipboard;

        if (!clip) return false;

        clip.setData(trans, null, clipid.kGlobalClipboard);
    }
}


function DoDynamicSearch() {
    var keyword = $("#txtDynamicSearchKeyword").val();
    //map.Find(keyword, "", VEFindType.Businesses, null, 0, 20, false, false, false, DoDynamicSearchVECallback);
    map.Find(keyword, "", null, null, null, null, null, false, false, false, DoDynamicSearchVECallback);
}

function DoDynamicSearchVECallback(layer, resultsArray, places, hasMore, veErrorMessage) {
    var s = "";
    for (i = 0; i < resultsArray.length; i++) {
        s += "<p>";
        s += "<span style='cursor:pointer' onclick='CreateDynamicPushpin(" + resultsArray[i].LatLong.Latitude + "," + resultsArray[i].LatLong.Longitude + ")'>" + resultsArray[i].Name + "</span><br/>";
        s += "</p>";
    }

    $("#DynamicSearchPanelResultPanel").html(s);
}

//-------------------------------------------------------------------------------------
function CreateDynamicPushpin(lat, lon) {
    var pin = new VEShape(VEShapeType.Pushpin, new VELatLong(lat, lon));
    pin.SetTitle("");
    pin.SetDescription("");

    map.AddShape(pin);
}

//-------------------------------------------------------------------------------------
function GetWikipediaData() {
    if ($("#cbShowWikipediaData").attr("checked") != true) {
        $("#WikipediaPanelInnerBody").html("");
        wikipediaShapeLayer.DeleteAllShapes();
    }
    else {
        var v = map.GetMapView();

        var params = "TopLeftLatitude=" + v.TopLeftLatLong.Latitude +
								"&TopLeftLongitude=" + v.TopLeftLatLong.Longitude +
								"&BottomRightLatitude=" + v.BottomRightLatLong.Latitude +
								"&BottomRightLongitude=" + v.BottomRightLatLong.Longitude;

        $.post("Handler/Wikipedia.ashx", params, ReceiveWikipediaData);
    }
}

var wikiIndex = 0;
var wikiRows = null;
//-------------------------------------------------------------------------------------
function ReceiveWikipediaData(arg) {
    wikiRows = arg.split("^");

    $("#WikipediaPanelInnerBody").html(wikiRows[0]);

    wikiIndex = 1;

    wikipediaShapeLayer.DeleteAllShapes();

    if (wikiRows.length > 1) window.setTimeout("DelayedAddWikipediaData()", 10);
    //else AfterReceiveAccomodations();

}



function DelayedAddWikipediaData() {
    for (var ii = wikiIndex; ii < wikiIndex + 100; ii++) {
        if (ii >= wikiRows.length - 1)
            break;

        columns = wikiRows[ii].split(',');

        AddAJAXPin(wikipediaShapeLayer, "S", "WIK", columns[0], new VELatLong(parseFloat(columns[1]), parseFloat(columns[2])), "images/baw/wikipedia.gif", 1);
    }
    wikiIndex = ii + 1;
    if (ii < wikiIndex.length - 1) window.setTimeout("DelayedAddWikipediaData()", 10);
    // else AfterReceiveAccomodations();
}

	

