var KGMAP_TRACKS    = [];
var KGMAP_WAYPOINTS = [];
var KGMAP_PICTURES  = [];
var KGMAP_PLACES    = [];
var KGMAP_POIS      = [];
var KGMAP_MARKERS   = [];
var KGMAP_FEEDS     = [];

function kGmap_mapMoved(_mapID)
{
	var _map = eval(_mapID);
	var _bounds = _map.getBounds();
	var sw = _bounds.getSouthWest();
	var ne = _bounds.getNorthEast();
	kGmap_loadPois(_mapID,sw,ne)
}

function kGmap_loadPois(mapID,sw,ne)
{
	var url = "/trkbPoisServices/LoadPois";
	var pars  = 'sw='+sw+"&ne="+ne+"&mapID="+mapID;
	var myAjax = new Ajax.Request( url, {   method: 'post', 
											parameters: pars, 
											onComplete: kGmap_displayPois });
}

function kGmap_displayPois(request)
{
	try
	{
		var pois = eval(request.responseText);
		
	}
	catch( e )
	{
		alert(e.message);
	}
}

function kGMap_loadFeed(_mapID,_feedID)
{
	var _map = eval(_mapID);
	_map.addOverlay(new GGeoXml(FEEDS[_feedID].url));
}

function kGMap_drawTrack(_mapID,_index,_setCenter,_setZoom)
{
	if( arguments.length < 4 ){ _setZoom=true; }
	if( arguments.length < 3 ){ _setCenter=true; }
	
	var _map = eval(_mapID);
	var _trk = KGMAP_TRACKS[_index];
	_map.klayers.tracks[_index] = new GPolyline(_trk.pts,_trk.color,_trk.width,_trk.opacity,{clickable: false});
	_map.addOverlay( _map.klayers.tracks[_index] );
	if( _setCenter ){ _map.setCenter( _trk.centerPoint); }
}

function kGMap_drawImageMarker(_mapID,_index)
{
	var _data = KGMAP_PICTURES[_index];
	var _map = eval(_mapID);
	var marker = new PdMarker(new GLatLng(_data.lat,_data.lon), MARKER_ICONS[_data.icon]);
	marker.setOpacity(100);
	marker.setTooltip(_data.name);
//marker.setDetailWinHTML(_data.desc);
GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(_data.desc,{maxWidth: 200}); });

	_map.klayers.pictures[_index] = marker;
	_map.addOverlay(marker);
}

function kGMap_drawWaypoint(_mapID,_index,_setCenter)
{
	if( arguments.length < 3 ){ _setCenter=false; }
	
	var _mrk = KGMAP_WAYPOINTS[_index];
	var _map = eval(_mapID);
	var marker = new PdMarker(new GLatLng(_mrk.lat,_mrk.lon), MARKER_ICONS[_mrk.icon]);
	marker.setOpacity(100);
	marker.setTooltip("<strong>"+_mrk.name +"</strong>");
	var _html = "<p><strong>"+_mrk.name +"</strong></p>";
		_html += "<p>"+_mrk.desc +"</p>";

//marker.setDetailWinHTML(_html);	
GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(_html,{maxWidth: 300}); });
	
	_map.klayers.wpts[_index] = marker;
	_map.addOverlay(marker);
}

function kGMap_drawPoi(_mapID,_index)
{
	if( arguments.length < 3 ){ _setCenter=false; }
	
	var _data = KGMAP_POIS[_index];
	var _map = eval(_mapID);
	var marker = new PdMarker(new GLatLng(_data.lat,_data.lon), MARKER_ICONS[_data.icon]);
	marker.setOpacity(100);
	marker.setTooltip("<strong>"+_data.name +"</strong>");
	var _html = "<p><strong>"+_data.name +"</strong></p>";
		_html += "<p>"+_data.desc +"</p>";
//marker.setDetailWinHTML(_html);
GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(_html,{maxWidth: 200}); });
	_map.klayers.pois[_index] = marker;
	_map.addOverlay(marker);
}

function kGmap_drawPois(_mapID)
{
	for( var i=0; i<KGMAP_POIS.length; i++ )
	{
		kGMap_drawPoi(_mapID, i);
	}	
}

function kGmap_clearPois(_mapID)
{
	var _map = eval(_mapID);
	for( var i=0; i<_map.klayers.pois.length; i++ )
	{
		_map.removeOverlay(_map.klayers.pois[i]);
	}
	KGMAP_POIS = [];
}

function kGMap_drawPlacepoint(_mapID,_index)
{
	if( arguments.length < 3 ){ _setCenter=false; }
	
	var _data = KGMAP_PLACES[_index];
	var _map = eval(_mapID);
	var marker = new PdMarker(new GLatLng(_data.lat,_data.lon), MARKER_ICONS[_data.icon]);
	marker.setOpacity(100);
	marker.setTooltip(_data.desc);
	_map.klayers.places[_index] = marker;
	_map.addOverlay(marker);
}


function kGMap_showHideAllTracks(_mapID,_show)
{
	var _map = eval(_mapID);
	for( var i=0; i<_map.klayers.tracks.length; i++ )
	{
		if( _show ){ _map.klayers.tracks[i].show(); }
		else       { _map.klayers.tracks[i].hide(); }
	}	
	//if( _show ){ _map.klayers.tracks.forEach( function(_trk){ _trk.show() }); }
	//else       { _map.klayers.tracks.forEach( function(_trk){ _trk.hide() }); }
}

function kGMap_showHideLayer(_mapID,_layer,_show)
{
	var _layer = eval(_mapID+".klayers."+_layer);
	for( var i=0; i<_layer.length; i++ )
	{
		if( _show ){ _layer[i].show(); }
		else       { _layer[i].hide(); }
	}
	//if( _show ){ _layer.each( function(_mrk){ _mrk.show() }); }
	//else       { _layer.each( function(_mrk){ _mrk.hide() }); }
}

function kGMap_closeWaypointsInfo(_mapID)
{
	var _map = eval(_mapID);
	_map.klayers.wpts.forEach( function(_mrk){ _mrk.closeInfoWindow() });
}

function getTrackIndex(_trkID)
{
	var idx = KGMAP_TRACKS.length;
	for( var i=0; i<KGMAP_TRACKS.length; i++ ){ if( KGMAP_TRACKS[i].trk_id==_trkID ){ idx = i; } }
	return idx;
}

function getWptMarkerIndex(_mrkID)
{
	var idx = KGMAP_WAYPOINTS.length;
	for( var i=0; i<KGMAP_WAYPOINTS.length; i++ ){ if( KGMAP_WAYPOINTS[i].mpt_id==_mrkID ){ idx = i; } }
	return idx;
}

function getImageMarkerIndex(_mrkID)
{
	var idx = KGMAP_PICTURES.length;
	for( var i=0; i<KGMAP_PICTURES.length; i++ ){ if( KGMAP_PICTURES[i].mpt_id==_mrkID ){ idx = i; }}
	return idx;
}

function kGmapGeoFeed(feedID,url){ this.feed_id = feedID; this.url = url; }
	kGmapGeoFeed.prototype.feed_id = "";
	kGmapGeoFeed.prototype.url     = "";

function kGMapTrack(){ if( arguments.length > 0 ){ var data = arguments[0]; for( var key in data ){ this[key] = data[key]; } } }
	kGMapTrack.prototype.trk_id      = null;
	kGMapTrack.prototype.name        = "";
	kGMapTrack.prototype.desc        = "";
	kGMapTrack.prototype.color       = '#E600E6';
	kGMapTrack.prototype.width       = 3;
	kGMapTrack.prototype.opacity     = 0.8; 
	kGMapTrack.prototype.bounds      = null; 
	kGMapTrack.prototype.centerPoint = null; 
	kGMapTrack.prototype.pts         = [];
	kGMapTrack.prototype.toString = function(){ return this.trk_id; }

function kGMapMarker(){ if( arguments.length > 0 ){ var data = arguments[0]; for( var key in data ){ this[key] = data[key]; } } }
	kGMapMarker.prototype.mpt_id  = null;
	kGMapMarker.prototype.lat     = null;
	kGMapMarker.prototype.lon     = null;	
	kGMapMarker.prototype.name    = null;
	kGMapMarker.prototype.desc    = null;
	kGMapMarker.prototype.icon    = "waypoint";
	kGMapMarker.prototype.type    = "waypoint";
	kGMapMarker.prototype.toString = function(){ return this.mpt_id+","+this.lat+","+this.lon; }


function kGMapImageMarker(){ if( arguments.length > 0 ){ var data = arguments[0]; for( var key in data ){ this[key] = data[key]; } } }
	kGMapImageMarker.prototype.mpt_id  = null;
	kGMapImageMarker.prototype.lat     = null;
	kGMapImageMarker.prototype.lon     = null;		
	kGMapImageMarker.prototype.name    = null;
	kGMapImageMarker.prototype.descr   = null;
	kGMapImageMarker.prototype.imgurl  = null;
	kGMapImageMarker.prototype.icon    = "";
	kGMapImageMarker.prototype.toString = function(){ return this.mpt_id+","+this.lat+","+this.lon; }
