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

GEORSS.setup = function() {

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

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

    var html = '<h3>GeoRSS</h3>';
        html += '<p>';
	html += 'GeoRSS URL:<br /><input id="georss_url" type="text" size="50" name="georss" /><br />';
        html += '<a href="javascript:;" onclick="GEORSS.refresh();">Refresh</a> | ';
        html += '<a href="javascript:;" onclick="GEORSS.clear();">Clear</a> </p>';
        html += '<div id="georss_result" style="height:'+h+';overflow:scroll;"></div>';
    georss.innerHTML = html;
    GEORSS.browse = true;
    } else georss = _gi('georss');
}


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

/*
    if( !GEORSS.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';
*/
    url = _gi('georss_url').value;
    showLoadingMessage('Loading GeoRSS ...');
    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(/<georss:point>/g,'<georss>');
	    xml = xml.replace(/<\/georss:point>/g,'</georss>');
	    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>';
	    var head=0;
	    for(var i=0;i<items.length;i++) {
		if( !(items[i].getElementsByTagName('lat').length > 0 && items[i].getElementsByTagName('lon').length > 0 || items[i].getElementsByTagName('georss').length > 0 )) continue;
		if( items[i].getElementsByTagName('lat').length>0 ) {
		    var lat = 1*items[i].getElementsByTagName('lat').item(0).firstChild.data;
		    var lon = 1*items[i].getElementsByTagName('lon').item(0).firstChild.data;
		}
		if( items[i].getElementsByTagName('georss').length>0 ) {
		    var tmp = '' + items[i].getElementsByTagName('georss').item(0).firstChild.data;
		    var splits = tmp.split(' ');
		    var lat = 1*splits[0];
		    var lon = 1*splits[1];
		}
		var title = (items[i].getElementsByTagName('title').item(0).firstChild) ? 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) && items[i].getElementsByTagName('description').item(0).firstChild) ? items[i].getElementsByTagName('description').item(0).firstChild.data : '';
		title = title.replace(/\\/g, '');
		description = description.replace(/\\/g,'');

		var hash = hex_md5(''+lat+lon+title+link+description);
		if(head==0) {
		    var _lat = lat;
		    var _lon = lon;
		    var _hash = hash;
		    head=1;
		}

//		var icon_img = 'http://maps.yuan.cc/geourl.gif';
		var icon_img = 'http://mymap.yam.com/i/0-0.gif';
		var icon_img = 'http://labs.google.com/ridefinder/images/mm_20_yellow.png';
		var icon = map.Icon();
		icon.setup(icon_img,12,20,6,20,5,1);
		str += '<li><a href="javascript:;" onclick="GEORSS.urls[\''+hash+'\'].marker.openInfoWindowHtml(GEORSS.urls[\''+hash+'\'].html)">' + title + '</a></li>';

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

		    GEORSS.urls[hash] = new Object();
		    GEORSS.urls[hash].mtype = map.mtype;
		    GEORSS.urls[hash].lat = lat;
		    GEORSS.urls[hash].lon = lon;
		    GEORSS.urls[hash].title = title;
		    GEORSS.urls[hash].description = description;
		    GEORSS.urls[hash].icon = icon;
		    GEORSS.urls[hash].marker = marker;
		    GEORSS.urls[hash].html = '<div style="font-size:10px;width:240px;"><p><a href="' +link+ '" target="_blank"><h3>' + title + '</h3></a></p>' + lat + ', ' + lon + '<br />' + description + '</div>';
		    marker.georss = GEORSS.urls[hash];
		    marker.addListener('mouseover', function() {
			this.openInfoWindowHtml(this.georss.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('georss_result').style.overflow = 'scroll';
	    _gi('georss_result').innerHTML = str;
	    GEORSS.urls[_hash].marker.openInfoWindowHtml(GEORSS.urls[_hash].html);
	    map.centerAndZoom(map.LatLng(_lat,_lon), 14);
	}
    });
}


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