 function getStringMapURLFromTourDateNode( tourDate )
	{
	    var str = "";

		var mapInfoNode = tourDate.getElementsByTagName( "mapInfo" )[ 0 ];
		var mapURLNode = mapInfoNode.getElementsByTagName( "mapURL" )[ 0 ];
		if ( mapURLNode.childNodes.length > 0 ) 
		{
			str = "<a href=\"" + mapURLNode.childNodes[ 0 ].data + "\" "
						 + "title=\"[ Map ]\">Map</a>";
		}
		return( str );
	}

	function getStringNotesFromTourDateNode( tourDate )
	{
	    var str = "";

		var notesNode = tourDate.getElementsByTagName( "notes" )[ 0 ];
				
		if ( notesNode.childNodes.length > 0 ) 
		{
	        str = notesNode.childNodes[ 0 ].data;
		}
			
		return( str );
	}

	function getStringClubInfoFromTourDateNode( tourDate )
	{
	    var str = "";

		var clubInfoNode = tourDate.getElementsByTagName( "clubInfo" )[ 0 ];
				
		var nameNode = clubInfoNode.getElementsByTagName( "name" )[ 0 ];

		if ( nameNode.childNodes.length > 0 ) 
		{
			str = nameNode.childNodes[ 0 ].data;

			var urlNode = clubInfoNode.getElementsByTagName( "clubURL" )[ 0 ];
					
			if ( urlNode.childNodes.length > 0 ) 
			{
				str = "<a " 
                      + " href=\"" + urlNode.childNodes[ 0 ].data + "\" "
				      + " title=\"[ " + nameNode.childNodes[ 0 ].data + " ]\">"
					  +  str + "</a>";
			} 
		    str += "<br/>";
		} 

		var street1Node = clubInfoNode.getElementsByTagName( "street1" )[ 0 ];	
		if ( street1Node.childNodes.length > 0 )
		{
			str += street1Node.childNodes[ 0 ].data + "<br/>";
		}

		var street2Node = clubInfoNode.getElementsByTagName( "street2" )[ 0 ];
	    if ( street2Node.childNodes.length > 0 )
		{
			str += street2Node.childNodes[ 0 ].data + "<br/>";
		}

		var cityNode = clubInfoNode.getElementsByTagName( "city" )[ 0 ];
		if ( cityNode.childNodes.length > 0 )
		{
		    str += cityNode.childNodes[ 0 ].data;
					
			var provNode = clubInfoNode.getElementsByTagName( "prov" )[ 0 ];
			if ( provNode.childNodes.length > 0 ) 
			{
				str += ", " + provNode.childNodes[ 0 ].data;
			}
			str += "<br/>";

			var postalCodeNode = clubInfoNode.getElementsByTagName( "pc" )[ 0 ];
			if ( postalCodeNode.childNodes.length > 0 )
			{
				str += postalCodeNode.childNodes[ 0 ].data + "<br/>";
			}
	    }

		var phoneNode = clubInfoNode.getElementsByTagName( "phone" )[ 0 ];
		if ( phoneNode.childNodes.length > 0 )
		{
			str += phoneNode.childNodes[ 0 ].data + "<br/>";					
		}
		
		var faxNode = clubInfoNode.getElementsByTagName( "fax" )[ 0 ];
		if ( faxNode.childNodes.length > 0 )
		{
		    str += "FAX: " + faxNode.childNodes[ 0 ].data + "<br/>";
        }
        
		return( str );
	}

	function getStringLocaleFromTourDateNode( tourDateNode )
	{
        var str = "";
				
	    var areaNode = tourDateNode.getElementsByTagName( "area" )[ 0 ];

		var line1Node = areaNode.getElementsByTagName( "line1" )[ 0 ];
		var line2Node = areaNode.getElementsByTagName( "line2" )[ 0 ];
				
		str = "";
		if ( line1Node.childNodes.length > 0 )
			str = line1Node.childNodes[ 0 ].data;
	    if ( line2Node.childNodes.length > 0 )
			str = str + "<br/>" + line2Node.childNodes[ 0 ].data;

		return( str ); 
	}

	function getTimeUsedFromTourDateNote( tourDateNode )
    	{
        	var timeNode = tourDateNode.getElementsByTagName( "timeStr" );
        
        	var used = timeNode[ 0 ].getAttribute( "used" );
        
        	return( used );
    	}	

	function getStringTimeFromTourDateNode( tourDateNode )
	{
	    var timeNode = tourDateNode.getElementsByTagName( "timeStr" );
		if ( timeNode.length > 0 )
		    return( timeNode[ 0 ].childNodes[ 0 ].data );
	}

	function getStringDateFromTourDateNode( tourDateNode )
	{
		var dateNode = tourDateNode.getElementsByTagName( "dateStr" );
		if ( dateNode.length > 0 )
			return( dateNode[ 0 ].childNodes[ 0 ].data );
	}
    
    function getVirtualEarthClubLocationStringFromTourDateNote( tourDate )
    {
        var str = "";
    
        var clubInfoNode = tourDate.getElementsByTagName( "clubInfo" )[ 0 ];
        var nameNode = clubInfoNode.getElementsByTagName( "name" )[ 0 ];
                
        if ( nameNode.childNodes.length > 0 )
        {
            str = nameNode.childNodes[ 0 ].data;
        }
        str += "~";
        
        var street1Node = clubInfoNode.getElementsByTagName( "street1" )[ 0 ];	
		if ( street1Node.childNodes.length > 0 )
		{
			str += street1Node.childNodes[ 0 ].data;
		}
        str += "~";
        
        var cityNode = clubInfoNode.getElementsByTagName( "city" )[ 0 ];
		if ( cityNode.childNodes.length > 0 )
		{
		    str += cityNode.childNodes[ 0 ].data;
	    }
	    str += "~";
	    					
	    var provNode = clubInfoNode.getElementsByTagName( "prov" )[ 0 ];
		if ( provNode.childNodes.length > 0 ) 
		{
			str += provNode.childNodes[ 0 ].data;
		}
        
        return( str );
    }
    
    function putTourDatesIntoTable( tourDates, tableElement, xmlDoc )			
	{	
	    var i = 0;
		for( var k = 0 ; k < tourDates.length ; k++ ) 
		{	
		    if ( ! isOutOfDate( tourDates[ k ] ) )
		    {
		        
                tableElement.insertRow(i);

                tableElement.rows[ i ].id = "r" + i;

		        var dateCell = tableElement.rows[i].insertCell( 0 );
			    dateCell.innerHTML = getStringDateFromTourDateNode( tourDates[ k ] )
			        if ( getTimeUsedFromTourDateNote( tourDates[ k ] ) == "true" )
						      dateCell.innerHTML += "<br/>" 
						                 + getStringTimeFromTourDateNode( tourDates[ k ] );

			    var localeCell = tableElement.rows[ i ].insertCell( 1 );
			    localeCell.innerHTML = getStringLocaleFromTourDateNode( tourDates[ k ] );

			    var clubInfoCell = tableElement.rows[ i ].insertCell( 2 );
			    clubInfoCell.innerHTML = getStringClubInfoFromTourDateNode( tourDates[ k ] );
    					
			    var notesCell = tableElement.rows[ i ].insertCell( 3 );
			    notesCell.innerHTML = getStringNotesFromTourDateNode( tourDates[ k ] );

		        var mapURLCell = tableElement.rows[ i ].insertCell( 4 );
			    //mapURLCell.innerHTML = getStringMapURLFromTourDateNode( tourDates[ i ] );
    			
			    var s = getVirtualEarthClubLocationStringFromTourDateNote( tourDates[ k ] ) + "~" + "r" + i;
			    s = makeSafe( s );
			    var s2 = "<input onclick=\"var s = '" + s + "'; displayUsingVE( s );\"" +
                                 " type=\"button\" " +
                                 " name=\"map\" " +
                                 " value=\"map\" " +
                         "/>";
			    mapURLCell.innerHTML = s2;
    			   
			    var iModTwo = i % 2 == 1;
			    var classString = "class";
    			
			    if ( iModTwo ) 
			    {
		            dateCell.className = "col1Odd";
		            localeCell.className = "col2Odd";
                    clubInfoCell.className = "col3Odd";
                    notesCell.className = "col4Odd";
			        mapURLCell.className = "col5Odd";
			    }
			    else
			    {
			        dateCell.className = "col1Even";
		            localeCell.className = "col2Even";
                    clubInfoCell.className = "col3Even";
                    notesCell.className = "col4Even";
			        mapURLCell.className = "col5Even";
			    }
			    i++;
            }
        }
        
        return;
	}
	
	function isOutOfDate( tourDate )
	{
	    var dateNodes = tourDate.getElementsByTagName( "date" );
	    var str = dateNodes[ 0 ].childNodes[ 0 ].data;
    
        var tomorrow = new Date();
        
        var yyyy   = tomorrow.getFullYear();        
	    var tdYYYY = str.substr( 0, 4 );
	   
	    
	    var flag;
	    if ( tdYYYY > yyyy )
	        flag = false;
	    else if ( tdYYYY < yyyy )
	        flag = true;
	    else 
	    {
	        var tdMM   = str.substr( 5, 2 );
	        var mm     = tomorrow.getMonth() + 1;
	        if ( tdMM > mm )
	            flag = false;
	        else if ( tdMM < mm )
	            flag = true;
	        else
	        {        
    	        var tdDD   = str.substr( 8, 2 );
                var dd     = tomorrow.getDate();
	            flag = ( tdDD < dd );
	        }
        } 
        
	    return( flag );
	}
	
	// for some reason this does not work under firefox.
//	function removeOldTourDates( tourDates )
//	{
//	    for( var i = 0 ; i < tourDates.length ; i++ ) {
//            if ( isOutOfDate( tourDates[ i ] ) )
//            {
//                var k = tourDates[ i ];
//                tourDates[ i ].parentNode.removeChild( k );
//            }
//        }
//	}
	

    function mainLine( xml )
    {
        if ( xml != null ) 
        {
            var tableElement = document.getElementById( "table" );
		    tableElement.border = "10";
		    var tourDates = xml.getElementsByTagName( "tourDate" );
		    
		   // removeOldTourDates( tourDates );
		    
		  //  tourDates = xml.getElementsByTagName( "tourDate" ); 
		    
		    putTourDatesIntoTable( tourDates, tableElement, xml );				
        } 
        else
        {
            var errorDiv = document.getElementById( "errors" );
            errorDiv.innerHTML += "<center><strong>Error:  cannot open XML Table:  " + xmlTableName + "</strong></center>";
        }
        
    }
    
    function loadXMLDoc(dname) 
    {
        try //Internet Explorer
        {
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        }
        catch(e)
        {
            try //Firefox, Mozilla, Opera, etc.
            {
                xmlDoc=document.implementation.createDocument("","",null);
            }
            catch(e) 
            {
                var errorDiv = document.getElementById( "errors" );
                errorDiv.innerHTML += "<center><strong>" + e.message + "</strong></center>";
            }
        }
        try 
        {
            xmlDoc.async = false;
            xmlDoc.load(dname);
            return(xmlDoc);
        }
        catch(e) 
        {
            var errorDiv = document.getElementById( "errors" );
            errorDiv.innerHTML += "<center><strong>" + e.message + "</strong></center>";
        }
    
        return(null);
    }
    

    var xmlTableName = "tourDates.xml";
	
    var xml = loadXMLDoc( xmlTableName );

    mainLine( xml );
