var GEOURL = new Object();
GEOURL.urls = new Array();
GEOURL.browse = false;

GEOURL.setup = function() {

    var geourl;
    var h = _gt('body')[0].clientHeight-200-15 + 'px';

    if( !_gi('geourl') ) {
        var infoPanel = _gi('infoPanel');
        geourl = _ce('div');
        geourl.id = 'geourl';
        geourl.style.display = 'block';
        geourl.style.fontFamily = 'Arial';
        geourl.style.fontSize = '12px';
        geourl.style.padding = '4px';
        infoPanel.appendChild(geourl);
    } else geourl = _gi('geourl');

    var html = '<h3>GeoURL Page</h3>';
//    if( logged_in ) {
        html += '<p>';
        html += '<a href="javascript:;" onclick="GEOURL.myTracks();" style="float:right;">My Site</a>';
        html += '<a href="javascript:;" onclick="GEOURL.refresh();">Refresh</a> | ';
//        html += '<a href="javascript:;" onclick="GEOURL.readTrack();">Open</a> | ';
        html += '<a href="javascript:;" onclick="GEOURL.clear();">Clear</a> </p>';
        html += '<div id="geourl_result" style="height:'+h+';overflow:scroll;"></div>';
//    } else {
//        html += '<p>To upload and see your GEOURL data, please <a href="javascript:;" onclick="login();">login Yuan.CC Maps</a>.</p>';
//    }
    geourl.innerHTML = html;
    GEOURL.browse = true;
}


GEOURL.refresh = function() {
    var url,minX,minY,maxX,maxY,lat,lon;

    if( !GEOURL.browse ) return;
    minX = map.getBoundsLatLng().minX;
    minY = map.getBoundsLatLng().minY;
    maxX = map.getBoundsLatLng().maxX;
    maxY = map.getBoundsLatLng().maxY;
    lat = (minY+maxY)/2;
    lon = (minX+maxX)/2;
    url = 'http://geourl.org/near?lat=' +lat+ '&long=' +lon+ ';format=rss10';
    showLoadingMessage('Loading GeoURLs ...');
    GM_xmlhttpRequest({
	method: 'GET',
	url: url,
	headers: {
	    'User-agent': 'Mozilla/4.0 (compatible)',
	    'Accept': 'application/atom+xml,application/xml,text/xml,text/plain'
	},
	onload: function(responseDetails) {
	    var xml = '' + responseDetails.responseText;
	    xml = xml.replace(/\n/g,'');
	    xml = xml.replace(/<geo:long>/g,'<lon>');
	    xml = xml.replace(/<\/geo:long>/g,'</lon>');
	    xml = xml.replace(/<geo:lat>/g,'<lat>');
	    xml = xml.replace(/<\/geo:lat>/g,'</lat>');
	    xml = xml.replace(/<geourl:longitude>/g,'<longitude>');
	    xml = xml.replace(/<\/geourl:longitude>/g,'</longitude>');
	    xml = xml.replace(/<geourl:latitude>/g,'<latitude>');
	    xml = xml.replace(/<\/geourl:latitude>/g,'</latitude>');
	    hideLoadingMessage();
	    var parser = new DOMParser();
	    var dom = parser.parseFromString(xml, "application/xml");
	    var items = dom.getElementsByTagName('item');
	    if( items.length == 0 ) {
		return;
	    }
	    var str='<b>Results:</b><ul>';
	    for(var i=0;i<items.length;i++) {
		if( items[i].getElementsByTagName('lat').length == 0 || items[i].getElementsByTagName('lon').length == 0 ) continue;
		var lat = 1*items[i].getElementsByTagName('lat').item(0).firstChild.data;
		var lon = 1*items[i].getElementsByTagName('lon').item(0).firstChild.data;
		var title = items[i].getElementsByTagName('title').item(0).firstChild.data;
		var link = items[i].getElementsByTagName('link').item(0).firstChild.data;
		var description = items[i].getElementsByTagName('description').item(0).firstChild.data;
		title = title.replace(/\\/g, '');
		description = description.replace(/\\/g,'');

		var icon_img = 'http://maps.yuan.cc/geourl.gif';
		var icon = map.Icon();
		icon.setup(icon_img,16,16,8,8,8,8);
		str += '<li><a href="javascript:;" onclick="GEOURL.urls[\''+lat+'_'+lon+'\'].marker.openInfoWindowHtml(GEOURL.urls[\''+lat+'_'+lon+'\'].html)">' + title + '</a></li>';

		if( !GEOURL.urls[lat+'_'+lon] || GEOURL.urls[lat+'_'+lon].mtype != map.mtype ) {
		    var marker = map.Marker(map.LatLng(lat,lon), icon, title, description);

		    GEOURL.urls[lat+'_'+lon] = new Object();
		    GEOURL.urls[lat+'_'+lon].mtype = map.mtype;
		    GEOURL.urls[lat+'_'+lon].lat = lat;
		    GEOURL.urls[lat+'_'+lon].lon = lon;
		    GEOURL.urls[lat+'_'+lon].title = title;
		    GEOURL.urls[lat+'_'+lon].description = description;
		    GEOURL.urls[lat+'_'+lon].icon = icon;
		    GEOURL.urls[lat+'_'+lon].marker = marker;
		    GEOURL.urls[lat+'_'+lon].html = '<div style="width:200px"><p><a href="' +link+ '" target="_blank">' + title + '</a></p>' + lat + ', ' + lon + '<br />' + description + '</div>';
		    marker.geourl = GEOURL.urls[lat+'_'+lon];
		    marker.addListener('mouseover', function() {
			this.openInfoWindowHtml(this.geourl.html);
//			map.centerAtLatLng(map.LatLng(photos[id].lat, photos[id].lon));
		    });
		    map.addOverlay(marker);
		}
	    }
	    str += '</ul>';
//	    _gi('geocacheBody').style.height = _gt('body')[0].clientHeight-125 + 'px';
//	    _gi('geocacheBody').style.height = _gt('body')[0].clientHeight-125-30 + 'px';
	    _gi('geourl_result').style.overflow = 'scroll';
	    _gi('geourl_result').innerHTML = str;
	}
    });
}


GEOURL.clear = function() {
    map.clearOverlays();
    GEOURL.urls = new Array();
}
