
function stringLangLatArray ( array )
{
   var outputString = 'Output<br>' ;
   for (var i=0; i< array.length; i++) {
       outputString += stringLongLat ( array[i] );
   }
   return outputString ; 
}
function stringLongLat ( point )
{
   var prec = 5 ;
   return ll =  point.x.toFixed(prec) + ' , ' + point.y.toFixed(prec)+ '<br>';
}

function outputMessage ( s )
{
    document.getElementById("message").innerHTML += s + '<br>';
}


function drawLLgrid ()
{
   redrawLLgrid() ;
   
      GEvent.addListener(map,"moveend", redrawLLgrid );
      
//   GEvent.addListener(map,"click",

}
function redrawLLgrid()
{
   var bounds = map.getBoundsLatLng() ;
   //outputMessage ( "bound x=" + bounds.minX.toFixed(4) + " " + bounds.maxX.toFixed(4) ) ; 
   //outputMessage ( "bound Y=" + bounds.minY.toFixed(4) + " " + bounds.maxY.toFixed(4) ) ; 
   drawOnegrid (0, bounds.minX, bounds.maxX , bounds) ;
   drawOnegrid (1, bounds.minY, bounds.maxY , bounds) ;
}
// 0 is Y axis lines (X,minY) ->  (X,maxY) 
function drawOnegrid (dir, min, max, bounds)
{
   var spacing = .05 ; // calculate eventaully
   var maxcount = 10 ; // if exceeded theb something wrong
   var ct = 0 ;
   
   var start = roundUp ( min, spacing ) ;
   for (var i=start ; i< max ; i += spacing ) 
   {
     drawOneLine (dir, i , bounds) ;
     if ( ct++ > maxcount ) 
     { break }
   }
}

function drawOneLine (dir, pos , bounds)
{
   var pt1 , pt2 , ancpt ;
   if ( dir == 0 )
    {
     pt1 = new GPoint( pos, bounds.minY) ;
     pt2 = new GPoint( pos, bounds.maxY)  ;
     ancpt = "bottomCenter" ; 
   }
   else
   {
     pt1 = new GPoint( bounds.minX ,pos )  ;
     pt2 = new GPoint( bounds.maxX ,pos )  ;
     ancpt = "centerLeft" ; 
   }
   //map.addOverlay(new GPolyline(points), "#ff0000", 10 , .3 );
   map.addOverlay(new GPolyline( [ pt1, pt2 ] , 
      "#ff0000", 1 , .3 ) );
   var textLabel = pos.toFixed(2) ;
   //addTLabel ( pt1, textLabel ) ;
   addTLabel ( pt1 , textLabel, ancpt ) ;
}
function roundUp ( val, spac ) 
{
   var rem = val % spac ;
   return Math.ceil ( val / spac) * spac
   
}
function addTLabel (point, text, ancpt )
{
 var label = new TLabel();
  label.id = 'lab1'+ text ;
   label.anchorLatLng = point ;
    label.anchorPoint = ancpt ;
     //label.markerOffset = new GSize (x,y);
      label.content = '<div style="color: #ff0000;">'
       + text + '</div>';
       label.percentOpacity = 50;

        map.addTLabel(label);
	
}



function add_point( map , param ) {
    var point = param.point ? 
                gpoint( param.point ) : 
		new GLatLng( param.lat ,param.lon );
    
    var baseIcon = new GIcon(G_DEFAULT_ICON);
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);


    
    var icon = new GIcon( baseIcon );    
    if( param.icon_url ) {
        icon.image = param.icon_url;
    }
    var options = { icon:icon };

    var marker =  new GMarker( point , options );

    GEvent.addListener( marker , "click" , function() {
        marker.openInfoWindowHtml( param.html );
    } );
    map.addOverlay( marker );
}


function add_points( map , points ) {
    for( var i = 0; i<points.length; i++ ) {
	var point = points[i];
	add_point( map , point );
    }
}

function size_to_include(map, points) {
    var gpoints = new Array();
    var bounds = new GLatLngBounds;
    for( var i = 0; i<points.length; i++ ) {
        var gpoint = new GLatLng(points[i].lat,points[i].lon);
        bounds.extend( gpoint );
    }
    
    var zoom = map.getBoundsZoomLevel(bounds);
    map.setCenter(bounds.getCenter(), zoom);
    
}


			
function add_polyline( map, params , points) {
    var gPoints = new Array();
    var colour  = params.colour ? params.colour : "#ff0000";
    
    for( var i = points.length - 1; i>=0; i-- ) {
        var point = points[i];
        gPoints.push( gpoint( point ) );
    }

    var polyline = new GPolyline( gPoints , params.colour , 5 , 0.5 );

    map.addOverlay( polyline );
}


function gpoint( point ) {
    var lat,lon;
    if ( point instanceof Array ) {
        lon = point[0];
        lat = point[1];
    }
    else {
	lat = point.lat;
	lon = point.lon;
    }
    return new GPoint( lon , lat ) ;
}


