function get_tagblock(elt)
{
  var tagmash=fdbByID('TAGMASH');
  var elements=tagmash.childNodes;
  var site=elt.getAttribute('site');
  if (tagmash==null) return null;
  var i=0; while (i<elements.length) {
    var tmelt=elements[i++];
    if (tmelt.nodeType!=1) continue;
    else if (tmelt.getAttribute('SITE')==site)
      return tmelt;}
  var tagblock=fdbSpan("tagblock");
  tagblock.title="From "+elt.getAttribute('site');
  var site_anchor=fdbAnchor(elt.getAttribute('url'),"sitename",null,null);
  if (elt.getAttribute('icon'))
    fdbAppend(site_anchor,
	      fdbImg(elt.getAttribute('icon'),elt.getAttribute('site'),null));
  else fdbAppend(site_anchor,elt.getAttribute('site'));
  fdbAppend(tagblock,site_anchor);
  tagblock.setAttribute('SITE',site);
  fdbAppend(tagmash,tagblock);
  return tagblock;
}

function add_to_tagblock(tb,tag,prefix)
{
  var tbelts=tb.childNodes;
  var tagref=tag.getAttribute('href');
  var tagtext=tag.getAttribute('tagtext');
  var j=0; while (j<tbelts.length) {
    var tbelt=tbelts[j++];
    if (tbelt.nodeType!=1) continue;
    else if (tbelt.getAttribute('TAGTEXT')==tagtext) return;}
  if (prefix!=null) fdbAppend(tb,prefix);
  var tag_span=fdbSpan('tag');
  fdbSetAttrib(tag_span,'TAGTEXT',tagtext);
  if (tagref!=null)
    fdbAppend(tag_span,fdbAnchor(tagref,null,null,tagtext));
  else fdbAppend(tag_span,tagtext);
  fdbAppend(tb,tag_span);
}

var _mm_getting_tags=false;

function handle_gettags(doc)
{
  var tagmash=fdbByID('TAGMASH');
  var elements=doc.childNodes;
  if (tagmash==null) return;
  var i=0; while (i<elements.length) {
    var elt=elements[i++];
    if (elt.nodeType!=1) continue;
    var tagblock=get_tagblock(elt);
    var tags=elt.childNodes;
    var j=0; while (j<tags.length) {
      var tag=tags[j++];
      if (tag.nodeType!=1) continue;
      add_to_tagblock(tagblock,tag,((j>1)?" . ":null));}}
  var ttl=fdbGetAttrib(doc,"ttl");
  fdbMessage("gettags ttl="+ttl);
  _mm_getting_tags=false;
  if (ttl)
    if (ttl==0) setTimeout(fillin_tagmash,4000);
    else setTimeout(fillin_tagmash,(ttl+7)*1000);
  var promise=fdbByID("TAGMASHPROMISE");
  if (promise)
    if (ttl==null) promise.style.display='none';
    else if ((elements==null) || (elements.length==null)) {}
  else promise.style.display='none';
}

function fillin_tagmash(ignored)
{
  var tagmash=fdbByID('TAGMASH');
  var oid=tagmash.getAttribute('OID');
  var req=new XMLHttpRequest();
  if (_mm_getting_tags) return;
  req.onreadystatechange=function() {
  if ((req.readyState == 4) && (req.status == 200)) {
    if ((req.responseXML) && (req.responseXML.documentElement))
      handle_gettags(req.responseXML.documentElement);
    else fdbMessage("Error filling in tagmash for "+oid);}}
  req.open("GET","gettags.fdcgi?CONCEPT="+encodeURIComponent(oid),true);
  req.send(null);
}

