var modules2Load = [], allModulesLoaded = false;

function addModule2Load(moduleName) {
    modules2Load.push(moduleName);
}

function clearModule2Load() {
    if (modules2Load.length > 0)
        setTimeout('loadModules()', 1);
    else if (!allModulesLoaded)
        afterModulesLoaded();
}

function loadModules() {
    var moduleName = modules2Load.shift();
    switch(moduleName) {
        case 'application':
            initLayout();
            initMap();
            finalizeLayout();
            clearModule2Load();
            break;
        case 'login':
            initLogin();
            break;
        case 'settings':
            initSettings();
            break;
        case 'routing':
            initRouting();
            clearModule2Load();
            break;
        case 'loadLayers':
            loadLayers();
            break;
        case 'loadPoiLayers':
            loadPoiLayers();
            break;
        case 'userInformation':
            initUserInformationModule();
            break;
        case 'zoomOnMap':
            zoomOnMap();
            break;
        case 'loadVectorData':
            if (isAuth()) {
                initSecuredMTBRoutes();
            } else {
                loadRouteFeatures();
            }
            break;
    }

}

function afterModulesLoaded() {
    // assign action to hidden testsuite button
    jQuery('#btnOpenTestSuite').bind('click', function() {
        jQuery('<iframe src="testSuite.php"></iframe>').dialog({
            width: 800,
            height: 600
        });
    });

    // set new index for start point layer
    var startPointLayer = getVectorLayerByType('startpoint');
    map.setLayerIndex(startPointLayer, map.getNumLayers() + 1);
    
    /* Zoom to max extent */
    if (($('#zoom_minx').val() != '' &&
        $('#zoom_miny').val() != '' &&
        $('#zoom_maxx').val() != '' &&
        $('#zoom_maxy').val() != '') ||
    ($('#zoom_level').val() > 0)) {
        switch($('#zoom_type').val()) {
            case 'route':
                var rte_id = $('#zoom_id').val();
                var tmpLayer = getRouteLayerById(rte_id);
                if (tmpLayer !== null) {
                    var feature = tmpLayer.getFeatureById(rte_id);
                    if (typeof feature !== 'undefined') {
                        feature.renderIntent = 'select';
                        tmpLayer.drawFeature(feature);

                        clickVector.clickFeature(feature);
                    }
                }
                
                break;
            case 'poi':
                var tmpLayer = getVectorLayerByType('poi');
                if (tmpLayer !== null) {
                    var feature = tmpLayer.getFeatureById($('#zoom_id').val());
                    if (typeof feature !== 'undefined') {
                        feature.renderIntent = 'select';
                        tmpLayer.drawFeature(feature);

                        clickVector.clickFeature(feature);
                    }
                }
                break;
        }
    }
    
    /* Stop loading */
    jQuery('.loader-container').css('display', 'none');

    allModulesLoaded = true;
}

function zoomOnMap() {
    /* Zoom to max extent */
    if (($('#zoom_minx').val() != '' &&
        $('#zoom_miny').val() != '' &&
        $('#zoom_maxx').val() != '' &&
        $('#zoom_maxy').val() != '') ||
    ($('#zoom_level').val() > 0)) {
        if ($('#zoom_level').val() > 0) {
            map.setCenter(new OpenLayers.LonLat($('#zoom_centerx').val(), $('#zoom_centery').val()), $('#zoom_level').val());
        } else {
            if($('#zoom_type').val() == 'route')
                map.zoomToExtent(new OpenLayers.Bounds(jQuery("#zoom_minx").val(),jQuery("#zoom_miny").val(), jQuery("#zoom_maxx").val(), jQuery("#zoom_maxy").val()), false);
            else
                map.zoomToExtent(new OpenLayers.Bounds(jQuery("#zoom_minx").val(),jQuery("#zoom_miny").val(), jQuery("#zoom_maxx").val(), jQuery("#zoom_maxy").val()), true);
        }
    } else {
        map.zoomToMaxExtent();
    }
    clearModule2Load();
}

/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

function showLoading(message) {
    if (message) {
        $('#wdgLoadingMessage').html(message);
    } else {
        $('#wdgLoadingMessage').html($.r3msgs.routing_in_progress);
    }
    jQuery('#wdgLoadingContent').show();
    jQuery("#toolbarOpenLayersButtons").find('input').each(function(inputIndex, inputElement) {
        if (!jQuery(inputElement).button('option', 'disabled')) {
            jQuery(inputElement).button('disable');
            jQuery(inputElement).data('auto-disabled', true);
        } else {
            jQuery(inputElement).data('auto-disabled', false);
        }

    });
}

function stopLoading(data) {
    jQuery('#wdgLoadingContent').hide();
    jQuery("#toolbarOpenLayersButtons").find('input').each(function(inputIndex, inputElement) {
        if (isLoggedIn || jQuery(inputElement).data('auto-disabled'))
            jQuery(inputElement).button('enable');
        jQuery(inputElement).removeData('auto-disabled', false);
    });
}

function notifyError(data) {
    jQuery("#notifyTemplates").notify("create", "notifyErrorTpl", {
        title: data.message.title,
        text: data.message.text
    }, {
        custom: true
    });
}

function notifyInfo(data) {
    jQuery("#notifyTemplates").notify("create", "notifyInfoTpl", {
        title: data.message.title,
        text: data.message.text
    }, {
        custom: true
    });
}

var mylayout, innerLayout, eastLayout;

function initLayout() {
    // clear unused DOM-Elements need by HTML-Standard
    jQuery('.route_list').find('li').remove();

    // DIV center
    if (jQuery('#center').length > 0) {
        jQuery("#notifyTemplates").notify();
        jQuery('#mapInfoFull').find('span.ui-icon-close').bind('click', function() {
            clickVector.unselectAll();
            selectedFeature = null;
            selctedFeatureLayerType = null;
            selectedFeatureID = null;
            jQuery('#mapInfoFull').fadeOut('slow');
        });
    }

    // Dialog for Elevation Graph
    if (jQuery('#dlgElevationGraph').length > 0) {
        jQuery('#dlgElevationGraph').dialog({
            autoOpen: false,
            resizable: false,
            width: 660,
            height: 520,
            position: [400,100]
        });
    }

    // Help
    if (jQuery('#dlgHelp').length > 0) {
        jQuery('#dlgHelp').dialog({
            autoOpen: false,
            resizable: false,
            width: 660,
            height: 520
        });
    }

    if (jQuery('#left').length > 0) {
        jQuery('#list_search').accordion({
            header: "h4",
            animated: false,
            autoHeight: false,
            changestart: function(event, ui) {
                if (activeAccord == 1 && jQuery('#route_info').css('display').toUpperCase() != 'NONE' && stopChange != true){
                    Check = confirm('{/literal}{t}Sind Sie sich sicher, dass Sie diesen Tab schließen wollen? Ihre individuelle Route wird gelöscht!{/t}{literal}');
                    if (Check != true)
                        nochange = true;
                    else nochange = false;
                } else {
                    nochange = false;
                    if (stopChange == true){
                        nochange = null;
                    }
                }

            },
            change: function(event, ui) {
                if (nochange == true){
                    stopChange = true;
                    jQuery('#list_search').accordion('option', 'active', 1);
                } else if (nochange == false) {
                    var on = false;
                    if (jQuery('#route_info').css('display').toUpperCase() != 'NONE')
                        on = true;
                    changed(on);
                }
                activeAccord = jQuery('#list_search').accordion('option', 'active');
                stopChange = false;
            }
        });
        jQuery("#routepointpoint").sortable({
            handle : '.handle',
            update : function () {
                var order = jQuery('#routepointpoint').sortable('serialize');
                var orderArr = jQuery('#routepointpoint').sortable('toArray');
                jQuery("#loading").show();
                if (REQUEST_STATUS == 'RUNNING')
                    return false;
                REQUEST_STATUS = 'RUNNING';
                jQuery("#info").load("request_jquery.php?"+order);
                jQuery.get('request_jquery.php', {
                    afterTimeout: true,
                    order: true
                }, drawRoutingMarkers);
            }
        });
    }
}

function initLogin() {
    jQuery.getScript('../javascript/login.js');
}

function initSettings() {
    jQuery.getScript('../javascript/settings.js', function() {
        clearModule2Load();
    });
}

function finalizeLayout() {
    mylayout = $("body").layout({
        defaults: {
            size: "auto",
            closable: false,
            resizable: false,
            togglerLength_open:		35			// WIDTH of toggler on north/south edges - HEIGHT on east/west edges
            ,
            togglerLength_closed:	35			// "100%" OR -1 = full height

        },
        center: {
            paneSelector: "#center",
            onresize: "innerLayout.resizeAll"

        },
        east: {
            initHidden: true,
            closable: true,
            size: 380,
            spacing_closed: 25,
            spacing_open: 0,
            togglerAlign_open: "top",
            togglerAlign_closed: "top",
            togglerLength_open: 0,
            togglerLength_closed: 25,
            togglerTip_open: "Close West Pane",
            togglerTip_closed: "Open West Pane",
            onresize: function() {
                setAccordionHeight();
            }
        }
        
    });
    innerLayout = $("#center").layout( );

    // replace default button
    $('.ui-layout-toggler-east').button({
        icons: {
            primary: 'ui-icon-arrowstop-1-w'
        },
        text: false
    });

    mylayout.addCloseBtn("#btnCloseEast", "east");

    
//  .toggler-east-closed		{ background: url(../img/go-lt-off.gif) no-repeat center; }
//.toggler-east-closed:hover	{ background: url(../img/go-lt-on.gif)  no-repeat center; }

//mylayout.addToggleBtn(".ui-layout-pane-east", "east");

}



var lonlatArray = new Array();
var routingMarkers = new Array();
var middle = new Array();
var clickRouting;
var start = '';
var end = '';
var pointNr = 1;
var format;
var eventType='';
var middleTimeout;
var activeAccord = 0;
var stopChange = false;
var nochange = false;
var centerHeaderHeight = 110;
var centerfooterHeight = 91;

var map, controlPanel;
var extent;
var vectorLayers = [], layerRoute, layerUnofficialRoute, layerPartnerRoute, layerMyRoute, layerRoutingLine;
var styleMapRoute, styleMapPoi, styleMapStartPoints;
var hoverVector, clickVector, lastInfoBox;
var selectedFeature, selctedFeatureLayerType = null, selectedFeatureID = null;

function initMapStyles() {
    var styleRoute = {
        fillColor: "${getLineColor}",
        fillOpacity: 0.4,
        
        graphicZIndex: 1,
        cursor: 'pointer',
        strokeColor: "${getLineColor}",
        strokeWidth: 2,
        strokeOpacity: 0.8
    }

    var styleStartPoint = {
        graphicZIndex: 4,
        cursor: 'pointer',
        pointRadius: 8,
        fillOpacity: 1,
        externalGraphic: '../images/ico_start_point.gif'
    }
    
    var context = {
        context: {
            getName: function(feature) {
                if (feature.attributes.name)
                    return feature.attributes.name;
                else
                    return '';
            }
        }
    }
    var contextNoLabel = {
        context: {
            getFillColor: function(feature) {
                switch(feature.attributes.type) {
                    case 'routingLine':
                        return '#FFFF33';
                    default:
                        return '#1C5BC3';
                }
            },
            getLineColor: function(feature) {
                // TODO: PERFORMANCE feature.attributes.type
                var tmpLayer = getRouteLayerById(feature.id);
                switch(tmpLayer.layerType) {
                    case 'routingline':
                        return '#FFFF33';
                    case 'my':
                        return '#CC00FF';
                    case 'partner':
                        return '#FFAA00'
                    case 'temporary':
                    case 'temporary2':
                        return '#00FFFF'
                    default:
                        return '#164490';
                }
            },
            getName: function(feature) {
                return '';
            }
        }
    }
    var styleHighlite = {
        fillColor: "#00FF00",
        fillOpacity: 0.4,
        
        strokeColor: "#00FF00",
        strokeWidth: 3,
        graphicZIndex: 5,

        label: "${getName}",

        labelOffsetX: "10px",
        labelOffsetY: "10px",
        //fontColor: "red",
        fontSize: "12px",
        fontFamily: "Verdana",
        fontWeight: "bold",
        labelAlign: "lb"
    };
    var styleHighliteStartPoint = {
        strokeColor: "#00FFFF",
        strokeWidth: 3,
        pointRadius: 10,
        pointerEvents: "visiblePainted",
        graphicZIndex: 6,

        label: "${getName}",

        labelOffsetX: "10px",
        labelOffsetY: "10px",
        //fontColor: "red",
        fontSize: "12px",
        fontFamily: "Verdana",
        fontWeight: "bold",
        labelAlign: "lb"
    };
    styleMapRoute = new OpenLayers.StyleMap({
        'default': new OpenLayers.Style(styleRoute, contextNoLabel),
        'select': new OpenLayers.Style(styleHighlite, contextNoLabel),
        'temporary': new OpenLayers.Style(styleHighlite, context)
    });
    styleMapStartPoints = new OpenLayers.StyleMap({
        'default': new OpenLayers.Style(styleStartPoint),
        'select': new OpenLayers.Style(styleHighliteStartPoint, contextNoLabel),
        'temporary': new OpenLayers.Style(styleHighliteStartPoint, context)
    });

}

function initMap() {
    OpenLayers.DOTS_PER_INCH = 72;
    
    OpenLayers.Lang.setCode(jQuery('#client_lang').val());
    OpenLayers.ImgPath = "../style/openlayers/img/";
    
    initMapStyles();
    
    // Apply Extent
    extent = new OpenLayers.Bounds(jQuery("#ext_minx").val(),jQuery("#ext_miny").val(), jQuery("#ext_maxx").val(), jQuery("#ext_maxy").val());
    
    // Load Map
    var options = {
        theme: "../style/openlayers/style.css",
        controls: [], // empty array to disable default controls
        maxExtent: extent,
        restrictedExtent: extent,
        projection: new OpenLayers.Projection(jQuery('#client_srid').val()),
        units: "m",
        resolutions: jQuery('#res_string').val().split(','),
        //numZoomLevels: 10,
        //minResolution: 1.7638879363894032386111400388733,
        //maxResolution: 88.194396819470161930557001943663,
        //minScale: 250000,
        //maxScale: 5000,
        eventListeners: {
            //"zoomend": function(event) {
            //    alert(map.getScale());
            //},
            "changelayer": function(event) {
                jQuery('#mapInfoLite').fadeOut('fast');
                switch(event.layer.name) {
                    case 'Routes':
                        var layer = map.getLayersByName('Start Points')[0];
                        layer.display(!layer.getVisibility());
                        break;
                    case 'Point of Interest':
                        var layers = map.getLayersByName(OpenLayers.i18n("poi"));
                        for(i in layers) {
                            layers[i].setVisibility(!layers[i].getVisibility());
                        }
                        break;
                }
            },
            "movestart": function(event) {
                showLoading($.r3msgs.routes_are_updated);

                if (allModulesLoaded) {
                    var vectorLayers = map.getLayersByClass("OpenLayers.Layer.Vector");
                    $.each(vectorLayers, function(layerIndex, vectorLayer) {
                        if (typeof vectorLayer.layerType != 'undefined' && $.inArray(vectorLayer.layerType, ['official', 'unofficial', 'my']) != -1) {
                            vectorLayer.removeAllFeatures();
                        }
                    });
                }

            },
            "moveend": function(event) {
                if (allModulesLoaded) {
//                        console.log('1. ROUTE REFRESH');
                    //loadRouteFeatures();
                    if ($('[label[for=btnSelectFeature]').hasClass('ui-state-active')) {
//                        console.log('2. ROUTE REFRESH');
                        loadRouteFeatures();
                    } else {
                        stopLoading();
                    }
                }
            }


        }

    };
    map = new OpenLayers.Map('map', options);

    /* Init Controls */
    var navigationControls = new OpenLayers.Control.Navigation();
    var layerSwitcher = new OpenLayers.Control.LayerSwitcher({
        roundedCornerColor: '#000000'
    });
    var panZoomBar = new OpenLayers.Control.PanZoomBar();
    //var navigationHistory = new OpenLayers.Control.NavigationHistory();
    var mousePosition = new OpenLayers.Control.MousePosition();
    
    controlPanel = new OpenLayers.Control.Panel();
    //controlPanel.addControls([navigationHistory.next, navigationHistory.previous]);

    map.addControl(navigationControls);
    map.addControl(layerSwitcher);
    map.addControl(panZoomBar);
    map.addControl(controlPanel);
    
    if (jQuery('#olDebug').val() == 'T')
        map.addControl(mousePosition);
    
/* Add Layers */
/*
    var layerRouting = new OpenLayers.Layer.Markers("RoutingMarkers", {
        displayInLayerSwitcher: false
    });
     */
    
}

function initVectorSelection(layers) {
    if (hoverVector !== undefined)
        hoverVector.destroy();
    if (clickVector !== undefined)
        clickVector.destroy();
    if (routingDragFlags !== undefined)
        routingDragFlags.destroy();

    // remove routing layer from vector selection control
    var layerRoutingIndex = jQuery.inArray(layerRouting, layers);
    layers.splice(layerRoutingIndex, 1);
        
    hoverVector = new OpenLayers.Control.SelectFeature(layers, {
        hover: true,
        highlightOnly: true,
        renderIntent: "temporary"
    });
    clickVector = new OpenLayers.Control.SelectFeature(layers, {
        clickout: false,
        clickFeature: function(feature) {
            if (selectedFeature && selectedFeature == feature) {
                $(lastInfoBox).show();
                return false;
            }
            /*
            var tmpLayer = getVectorLayerByType('temporary');
            if (tmpLayer !== null) {
                alert('A');
                tmpLayer.addFeatures([feature]);
            }
            */

            if (selectedFeature)
                clickVector.unselect(selectedFeature);
            clickVector.select(feature);

            $('#mapInfoLite,#mapInfoFull').hide();
            
            selectedFeature = feature;
            var tmpLayer = getVectorLayerByType(feature.attributes.type)
            if (tmpLayer === null)
                tmpLayer = getRouteLayerById(feature.id);
            selctedFeatureLayerType = tmpLayer.layerType;
            selectedFeatureID = feature.id;
            
            getPopupContent(feature);
        }
    });
    
    map.addControl(hoverVector);
    map.addControl(clickVector);

    routingDragFlags = new OpenLayers.Control.DragFeature(layerRouting, {
        onComplete: function(feature, xy) {
            var pt = map.getLonLatFromViewPortPx(xy);
            requestLocateAndInterpolatePoint(pt, feature.attributes.type, feature.id);
        }
    });
    map.addControl(routingDragFlags);

    var currentButton = $('#toolbarOpenLayers').find('input:checked');
    if ($(currentButton).attr('id') == 'btnSelectFeature') {
        routingStartButton.deactivate();
        routingEditButton.deactivate();
        routingEndButton.deactivate();
        
        selectFeatureButton.trigger();
    //hoverVector.activate();
    //clickVector.activate();
    }
}

function applyRouteSelectionOnList(listSelector) {
    var listItems = jQuery(listSelector).find('li');
    jQuery(listItems).bind('click', function() {
        abortRouting();
        jQuery('#btnSelectFeature').trigger('click');
        
        var rte_id = parseInt(jQuery(this).attr('id').slice(7));
        var tmpLayer = getRouteLayerById(rte_id);
        if (tmpLayer !== null) {
            var feature = tmpLayer.getFeatureById(rte_id);

            if (feature != selectedFeature) // unselect all only if not selected, otherwise you loose the selected style
                clickVector.unselectAll();

            clickVector.clickFeature(feature);
        }
    });
    jQuery(listItems).bind('mouseover', function() {
        jQuery(this).addClass('ui-state-highlight');
        var rte_id = parseInt(jQuery(this).attr('id').slice(7));
        var tmpLayer = getRouteLayerById(rte_id);
        if (tmpLayer !== null) {
            var feature = tmpLayer.getFeatureById(rte_id);
            if (feature != selectedFeature) // hover only if not selected, otherwise you loose the selected style
                hoverVector.select(feature);
        }
        
    });
    jQuery(listItems).bind('mouseout', function() {
        jQuery(this).removeClass('ui-state-highlight');
        var rte_id = parseInt(jQuery(this).attr('id').slice(7));
        var tmpLayer = getRouteLayerById(rte_id);
        if (tmpLayer !== null) {
            var feature = tmpLayer.getFeatureById(rte_id);
            if (feature != selectedFeature) // hover only if not selected, otherwise you loose the selected style
                hoverVector.unselect(feature);
        }
    });
}

var REQUEST_STATUS = '';


function getGooglePhysical() {
    var options = {
        type: G_PHYSICAL_MAP,
        minZoomLevel: 9,
        maxZoomLevel: 15,
        sphericalMercator:"true"
    };
    return new OpenLayers.Layer.Google("Google Physical", options);
}

function getGoogleSatellite() {
    var options = {
        type: G_SATELLITE_MAP,
        minZoomLevel: 9,
        maxZoomLevel: 16,
        sphericalMercator:"true"
    };
    return new OpenLayers.Layer.Google("Google Satellite", options);
}

function loadLayers() {
    $.getScript("loadLayers.php", function() {
        // Add OverView-Map
        if (!jQuery('#use_google_maps').val()) {
            var overviewLayer = map.baseLayer.clone();
            overviewLayer.layername = 'mtb-cartography-overview@mtb-overview';

            var overview = new OpenLayers.Control.OverviewMap({
                layers: [overviewLayer],
                mapOptions: {
                    theme: '../style/openlayers/style.css',
                    units: "m",
                    projection: jQuery('#client_srid').val(),
                    resolutions: [jQuery('#resOverviewMap_string').val()]
                },
                size: new OpenLayers.Size(256,160)
            });
            

            //var overview = new OpenLayers.Control.OverviewMap();
            map.addControl(overview);
        }

        vectorLayers.push(new OpenLayers.Layer.Vector($.r3msgs.routes, {
            layerType: 'official',
            styleMap: styleMapRoute,
            rendererOptions: {
                zIndexing: true
            }
        }));

        vectorLayers.push(new OpenLayers.Layer.Vector("Routing Line", {
            layerType: 'routingline',
            styleMap: styleMapRoute,
            displayInLayerSwitcher: false,
            rendererOptions: {
                zIndexing: true
            }
        }));

        vectorLayers.push(new OpenLayers.Layer.Vector("Start Points", {
            layerType: 'startpoint',
            styleMap: styleMapStartPoints,
            displayInLayerSwitcher: false,
            rendererOptions: {
                zIndexing: true
            }
        }));

        if (jQuery('#use_google_maps').val()) {
            map.addLayers([getGooglePhysical(), getGoogleSatellite()]);
        }
        map.addLayers(vectorLayers);

        clearModule2Load();
    });
}


function getPopupContent(feature) {
    switch(feature.attributes.type) {
        case 'route':
            var url = "loadMTBRouteFull.php?rte_id="+feature.id;
            var title = feature.attributes.name;
             
            jQuery('#mapInfoFullContent').load(url, function() {
                jQuery.getScript('../javascript/mtbRouteFull.js', function() {
                    jQuery('#mapInfoTitle').html(title);
                    jQuery('#mapInfoLite').fadeOut('slow', function() {
                        jQuery('#mapInfoFull').fadeIn('slow', function() {
                            lastInfoBox = '#mapInfoFull';
                        });
                    });
                });
            });
            break;
        case 'poi':
            var url = "loadMTBPoiFull.php?poi_id="+feature.id;
            var title = feature.attributes.name;

            jQuery('#mapInfoFullContent').load(url, function() {
                jQuery('#mapInfoTitle').html(title);

                // apply image gallery
                $("a[rel='image_gallery']").colorbox({
                    maxHeight: '500px',
                    scalePhotos: true,
                    photo: true,
                    scrolling: false
                });

                jQuery('#mapInfoLite').fadeOut('slow', function() {
                    jQuery('#mapInfoFull').fadeIn('slow', function() {
                        lastInfoBox = '#mapInfoFull';
                    });
                });
            });
            break;
        case 'startpoint':
            getPopupContentStartPoint(feature.attributes);
            break;
        default:
    }
}

function addListItemsRoute(listSelector, idPrefix, data) {
    if (idPrefix.length != 7)
        alert('idPrefix should have 7 characters');


    var format = new OpenLayers.Format.WKT();
    var features = [];

    jQuery(listSelector).html('');
    var i = null;
    for(i in data.routes) {
        if (idPrefix == 'us_rte-' && getRouteLayerById(data.routes[i].rte_id) === null) {
            var feature = format.read(data.routes[i].the_geom);
            OpenLayers.Util.extend(feature, {
                id: data.routes[i].rte_id,
                attributes: {
                    type: 'route',
                    name: data.routes[i].rte_name,
                    length: data.routes[i].rte_length,
                    altitude: data.routes[i].rte_altitude
                }
            });
            features.push(feature);
        }

        // TODO: AL
        var item = "<li id=\""+idPrefix+data.routes[i].rte_id+"\" "+(data.routes[i].road_lock > 0 ? "class=\"ui-state-error\"" : "")+">" +
        "<div class=\"rte_name\">"+data.routes[i].rte_name+"</div>" +
        "<div><div class=\"route_propriety\">" +
        "<div>"+$.r3msgs.length+": "+data.routes[i].rte_length+" km</div>" +
        "<div>"+$.r3msgs.altitude+": "+data.routes[i].rte_altitude+" m</div>" +
        //"<div>Dauer: 2:15 h</div>" +
        "</div></div>";

        item += "<div><div>" +
                    "<input type=\"hidden\" name=\"route_zoom\" value=\""+data.routes[i].route_zoom+"\">" +
                    "<button name=\"btnZoomToRoute\">"+$.r3msgs.zoomToRoute+"</button>";
        if (data.routes[i].canDelete !== undefined && data.routes[i].canDelete) {
            item += "<button name=\"btnDelMyRoute\">"+$.r3msgs._delete+"</button>";
        }
        item += "</div></li>";
        jQuery(listSelector).append(item);
    }

    if (features.length > 0) {
        var tmpLayer = getVectorLayerByType('temporary');
        if (tmpLayer !== null) {
            tmpLayer.removeAllFeatures();
            tmpLayer.addFeatures(features);
        }
    }

    applyRouteSelectionOnList(listSelector);

    // apply zoom action
    $('button[name=btnZoomToRoute]').button({
        icons: {
            primary: 'ui-icon-search'
        },
        text: false
    }).bind('click', function() {
        var route_zoom = $(this).prev().val();
        route_zoom = route_zoom.split(',');
        selctedFeatureLayerType = route_zoom[0];
        selectedFeatureID = route_zoom[1];
        map.zoomToExtent( new OpenLayers.Bounds(route_zoom[2],route_zoom[3], route_zoom[4], route_zoom[5]), false);
    });

    // apply delete action
    $('button[name=btnDelMyRoute]').button({
        icons: {
            primary: 'ui-icon-trash'
        },
        text: false
    }).bind('click', function() {
        if (confirm($.r3msgs.confirmDeleteRoute)) {
            var rte_id = $(this).parents('li').attr('id').slice(7);
            $.delete_('../file/route/'+rte_id, function(data) {
                var tmpLayer = getRouteLayerById(data.id);
                if (tmpLayer !== null) {
                    var feature = tmpLayer.getFeatureById(data.id);
                    tmpLayer.removeFeatures([feature]);
                }
            });
            $(this).parents('li').remove();
            if ($('#myRouteList').find('li').length == 0) {
                $('#myRouteList').hide();
                $('#myNoRouteList').show();
            }
        }
    });
}

function getPopupContentStartPoint(data) {
    content = jQuery('#mapInfoStartPointContent').html();
    content = content.replace("%total%", data.routes.length);
    jQuery('#mapInfoLite').html(content).fadeIn('slow', function() {
        lastInfoBox = '#mapInfoLite';
        jQuery(this).find('span.ui-icon-close').bind('click', function() {
            clickVector.unselectAll();
            jQuery('#mapInfoLite').fadeOut('slow');
        });

        var startPointList = jQuery(this).find('ul');
        addListItemsRoute(startPointList, 'rte_id-', data);
        jQuery(startPointList).after($.r3msgs.annotation+': '+data.name+'<p>'+(data.text ? data.text : '')+'</p>');
    });
}

function downloadData(response) {
    if (response.status != 0) {
        if (response.confirm && confirm(response.message))
            location.href = response.url;
        else
            alert(response.message);
    } else {
        location.href = response.url;
    }
}

/* TODO: is this neccessary? */
function resizeInfo() {
    var Pos1 = jQuery('#list_search').attr('offsetHeight') + 38;
    var MapH = jQuery('#map').attr('offsetHeight');
    rsize = MapH - Pos1;
    jQuery('#route_info_content').attr('style', 'height: '+rsize+'px');
}

function set_language(lang) {
    if (activeAccord == 1 && jQuery('#route_info').css('display').toUpperCase() != 'NONE' && stopChange != true){
        Check = confirm('{/literal}{t}Sind Sie sich sicher, dass Sie die Sprache ändern wollen? Ihre individuelle Route wird gelöscht!{/t}{literal}');
        if (Check != true){
            nochange = true;
        }
    }
    //setCode(lang);
    jQuery.cookie('lang', lang, {
        expires: 365,
        path: jQuery('#cookie_path').val()
    });
    OpenLayers.Lang.setCode(lang);
    document.location.reload();
}

