

var trackLineColor = new Array ( '#ff0000', '#00f0f0', '#00ff00', '#0000ff', '#ff00ff', '#0ff00f', '#aa0000', '#00a0a0', '#00aa00', '#aa00aa', '#0aa00a' );


function loadMapData ( map, file ) {

    document.getElementById ( 'loadMessage' ).style.display = 'block';

    GDownloadUrl ( "./xml/" + file + '.xml', function ( data ) {
        var xml = GXml.parse ( data );
        
        // Bilder, Bemerkungen usw.
        var spotXml = xml.documentElement.getElementsByTagName ( "p" );
        var point = new GLatLng ( parseFloat ( spotXml[0].getAttribute("a") ), parseFloat ( spotXml[0].getAttribute("n") ) );
        map.setCenter ( point, 12, G_SATELLITE_MAP );

        var icon = new GIcon ();
        icon.image = "./bilder/iconMapFadenkreuz.gif";
        icon.iconSize = new GSize ( 18, 23 );
        icon.iconAnchor = new GPoint ( 8, 17 );

        gMarkerPosition = new GMarker ( point, icon );
        map.addOverlay( gMarkerPosition );
                
        for ( var i = 0; i < spotXml.length; i++ ) {
            setMarkerXml ( spotXml[i] );
        }
        
        // Track
        var waypointXml = xml.documentElement.getElementsByTagName ( "t" );
        var waypointArr = new Array ();
        
        var km = 0;
        var lastLevel = new Array ( 0, 0, 0 );
        var gesamtkilometer = 0;
        var gesamthoehenmeter = 0;
        var hoechsterPunkt = 0;
        var tiefsterPunkt = 10000;
        
        for ( var i = 0; i < waypointXml.length; i++ ) {
        
            waypointArr[i] = new GLatLng ( parseFloat ( waypointXml[i].getAttribute ( "a" ) ), parseFloat ( waypointXml[i].getAttribute ( "n" ) ) );
        
            gesamtkilometer += parseFloat ( waypointXml[i].getAttribute ( "d" ) );
            
            if ( ( i > 0 ) && parseFloat ( waypointXml[i].getAttribute ( "h" ) ) > lastLevel[2] ) {
                gesamthoehenmeter += parseFloat ( waypointXml[i].getAttribute ( "h" ) - lastLevel[2] );
            }
            
            if ( parseFloat ( waypointXml[i].getAttribute ( "h" ) ) > hoechsterPunkt ) {
                hoechsterPunkt = parseFloat ( waypointXml[i].getAttribute ( "h" ) );
            }
            
            if ( parseFloat ( waypointXml[i].getAttribute ( "h" ) ) < tiefsterPunkt ) {
                parseFloat ( tiefsterPunkt = waypointXml[i].getAttribute ( "h" ) );
            }
            
            // Punkte für Höhenprofil ergänzen bzw. auslassen (ich gehe davon aus, dass Trackpoints
            // max. 1000 m auseinander liegen können)
            for ( var j = 1000; j > 0; j = j - 100 ) {
                    
                if ( ( gesamtkilometer >= km + j ) && ( j > 100 ) ) {
                    var diff = ( parseFloat ( waypointXml[i].getAttribute ( "h" ) ) - lastLevel[2] ) / ( ( j / 100 ) + 1 );
                    for ( var y = 0; y < ( j / 100 ); y++ ) {
                        lastLevel[2] += diff;
                        levelPoints[levelPoints.length] = lastLevel;
                    }
                
                    levelPoints[levelPoints.length] = new Array ( parseFloat ( waypointXml[i].getAttribute ( "a" ) ), parseFloat ( waypointXml[i].getAttribute ( "n" ) ), parseFloat ( waypointXml[i].getAttribute ( "h" ) ), gesamthoehenmeter, gesamtkilometer );
                    km += j + 100;
                    break;
                } else if ( gesamtkilometer >= km ) {
                    levelPoints[levelPoints.length] = new Array ( parseFloat ( waypointXml[i].getAttribute ( "a" ) ), parseFloat ( waypointXml[i].getAttribute ( "n" ) ), parseFloat ( waypointXml[i].getAttribute ( "h" ) ), gesamthoehenmeter, gesamtkilometer );
                    km += 100;
                    break;
                }
            }
                                
            lastLevel = new Array ( parseFloat ( waypointXml[i].getAttribute ( "a" ) ), parseFloat ( waypointXml[i].getAttribute ( "n" ) ), parseFloat ( waypointXml[i].getAttribute ( "h" ) ), gesamthoehenmeter, gesamtkilometer );
            
        }
        
        var polyline = new GPolyline ( waypointArr, trackLineColor[0], 2 );
                
        map.addOverlay ( polyline );
        
        var anmerkungStart = spotXml[0].getElementsByTagName ( "a" );
        var anmerkungEnde = spotXml[spotXml.length - 1].getElementsByTagName ( "a" );

        
        
        document.getElementById ( 'etappenname' ).innerHTML = file;
        document.getElementById ( 'etappenstart' ).innerHTML = anmerkungStart[0].getAttribute("t");
        document.getElementById ( 'etappenende' ).innerHTML = anmerkungEnde[0].getAttribute("t");
        document.getElementById ( 'gesamtkilometer' ).innerHTML = Math.round ( gesamtkilometer / 100 ) / 10;
        document.getElementById ( 'gesamthoehenmeter' ).innerHTML = Math.round ( gesamthoehenmeter );
        document.getElementById ( 'hoechsterPunkt' ).innerHTML = Math.round ( hoechsterPunkt );
        document.getElementById ( 'tiefsterPunkt' ).innerHTML = Math.round ( tiefsterPunkt );
        
        if ( document.getElementById('tour_km_1') ) { document.getElementById('tour_km_1').value = Math.round ( gesamtkilometer / 100 ) / 10; }
        if ( document.getElementById('tour_hm_1') ) { document.getElementById('tour_hm_1').value = Math.round ( gesamthoehenmeter ); }
            
        if ( document.getElementById('tour_km_2') ) { document.getElementById('tour_km_2').value = Math.round ( gesamtkilometer / 100 ) / 10; }
        if ( document.getElementById('tour_hm_2') ) { document.getElementById('tour_hm_2').value = Math.round ( gesamthoehenmeter ); }
        
        document.getElementById ( 'loadMessage' ).style.display = 'none';   
        
        schieber.init();
        scroller.init();
            
        }
    );
}    


function setMarkerXml ( spotsXml ) {

    var markerTyp = spotsXml.getAttribute ( "t" );
    var iconFile = null;
    var textergaenzungPre = '';
    var textergaenzungPost = '';

    if ( markerTyp == 'S' ) {
        iconFile = 'iconMapStart.gif';
        textergaenzungPre = 'Start:<br />';
    } else if ( markerTyp == 'E' ) {
        iconFile = 'iconMapEnde.gif';
        textergaenzungPre = 'Ende:<br />';
    } else if ( markerTyp == 'F' ) {
        iconFile = 'iconMapFoto.gif';
    } else if ( markerTyp == 'I' ) {
        iconFile = 'iconMapInfo.gif';
    } else {
        iconFile = 'iconMapPunkt.gif';
    }
    
    var markerIcon = new GIcon ();
    markerIcon.image = "./bilder/" + iconFile;
    markerIcon.iconSize = new GSize ( 12, 16 );
    markerIcon.iconAnchor = new GPoint ( 6,16 );
    markerIcon.infoWindowAnchor = new GPoint ( 6, 16 );

    var marker = new GMarker ( new GLatLng ( parseFloat ( spotsXml.getAttribute("a") ), parseFloat ( spotsXml.getAttribute("n") ) ), markerIcon );
    
    var html = '';        
    
    // Bild
    var fileName = false;
    var img = spotsXml.getElementsByTagName ( "o" );
    if ( img.length > 0 ) {
        fileName = img[0].getAttribute ( "f" ) ;
    }
    
    // Anmerkung
    var anmerkungText = false;
    var anmerkung = spotsXml.getElementsByTagName ( "a" );
    if ( anmerkung.length > 0 ) {
        anmerkungText = anmerkung[0].getAttribute ( "t" ) ;
    }
    
    if ( anmerkungText ) {
        html = textergaenzungPre + anmerkungText + textergaenzungPost;
    
    }
    
    GEvent.addListener ( marker, 'click', function () {
        marker.openInfoWindowHtml ( html );
    });
    
    map.addOverlay ( marker );
    
}


