/*
 * Copyright 2006, Peter Rowntree. All Rights Reserved.
 * http://www.hdyn.com/wr/common/contact.php?addr=pr
 */

var g_ctxFixed=bBaseLocation()+g_ctx; 
var g_impl=null;
var g_thisPage=docName();
preloadImages(["/images/"],["rb.gif","hover.gif"]);

function bBaseLocation()
{
   var s=""+document.location;
   var arr=s.split("/");
   if(arr.length < 3)
      return s;
   arr.length=3;
   return arr.join("/");
}

function doLoad()
{
   g_reportOb=document.getElementById('infoBox');
   setEvtHandlers('expl');
   setEvtHandlers('explBr');
   setEvtHandlers('impl');
   var impl=document.getElementById("impl");
   var implHead=document.getElementById("implHead");
   g_impl=impl;
   var inf=document.getElementById("inflows");
   inf.onmousedown=doInfMouseDown;
   inf.onmousemove=doInfMouseMove;
   var rtBar=impl.lastChild;
   document.getElementById("inf").onmousemove=doFlowMouseMove;
   if(rtBar == null)
   {
      inf.style.display="none";
      implHead.style.display="none";
   }
   else
   {
      var w=(rtBar.offsetLeft+rtBar.offsetWidth-1)+"px"; //-1 for IE
      inf.style.width=w;
      impl.style.width=w;
   }
   var iBar=getQueryItem("b");
   if(iBar != null && !isNaN(iBar))
      selectBarByIndex(iBar);
}

function setEvtHandlers(id)
{
   var barsBox=document.getElementById(id);
   //barsBox.onmousedown=doFlowMouseDown;
   barsBox.onmousemove=doFlowMouseMove;
   setAllFlowBars(barsBox,"a");
}

function doInfMouseDown(e)
{
   if(!e)
      e=window.event;
   sezWho(obEventToIndex(e));
   return false;
}

function reportBar(bars,i)
{
   var fOb=indImmediateChild(bars,i,"a",null);
   if(fOb == null)
      report("");
   else if(fOb.href == document.location)
      isThis();
   else
   {
      var rStr=entit(fOb.title)+" <img src='/images/rb.gif'/> "+fOb.href;
      report(rStr);
   }
}

function doFlowMouseMove(e)
{
   reportBar(this,eventToIndex(e,this));
   return false;
}

function doInfMouseMove(e)
{
   if(!e)
      e=window.event;
   reportBar(g_impl,obEventToIndex(e));
   return false;
}

function sezWho(i)
{
   var impl=document.getElementById("impl");
   var bars=impl.getElementsByTagName("a");
   if(bars == null || bars.length <= i)
      return;
   var iBar=bars.item(i);
   var t=iBar.getAttribute("t");
   if(t == null || t == "")
      return;
   selectBar(iBar);
   getInflows(t);
}

function selectBarByIndex(i)
{
   i=parseInt(i); //else IE sez "duuhh"
   var bars;
   if(i >= 22)
   {  
      bars=document.getElementById("explBr");
      i-=22;
   }
   else
      bars=document.getElementById("expl");
   bars=bars.getElementsByTagName("a");
   if(bars == null || bars.length <= i)
      return;
   var iBar=bars.item(i);
   selectBar(iBar);
   if(g_selectedBar != null)
      setObClass(g_selectedBar,"gotFlows",true);
}

function getInflows(id)
{
	if(id == "" || isNaN(id))
      return;
   var uri=g_ctxFixed+"send.uin?action=115&id="+id;
   var req=sendXML("<doc></doc>",uri,getInflowsDone,null);
}

function getInflowsDone(req)
{  
   try
   {
      testError(req);
      setInfUI(req.responseXML);
   }
   catch(e)
   {
      report(typeof e.message == "undefined" ? e : e.message);
   }
}

//throws exception
function setInfUI(xmlDoc)
{
   //fsHTML is the doc node:
   var n=xmlDoc.firstChild;
   if(n == null)
      throw "no data!";
   var cdata=n.firstChild;
   if(cdata == null)
      return;
   var ob=document.getElementById("inf");
   ob.innerHTML=cdata.nodeValue;
   //replaceSelf(cdata.nodeValue,ob);
   setAllFlowBars(ob,"a");
   if(g_selectedBar != null)
      setObClass(g_selectedBar,"gotFlows",true);
}

function replaceSelf(s,ob)
{
   var regex=new RegExp("href='"+g_thisPage+"'");
   ob.innerHTML=s.replace(regex,"onmousedown='isThis()'");
}

function isThis()
{
   report("<span class='isThis'><span class='arial'>&#x25BA;</span> that bar represents THIS page <span class='arial'>&#x25C4;</span></span>");
}