/**
* common.js - Common functions that are used by numerous pages.
* 
* @author: Richard Taylor-Kenny
* @date: 5/15/2007 
* 
*/

/*
Thanks To :AddEvent Manager (c) 2005-2006 Angus Turnbull http://www.twinhelix.com
Modified to fAddEvent -- I like the f prefix for functions
*/
if (typeof fAddEvent != 'function')
{
 var fAddEvent = function(o, t, f, l)
 {
  var d = 'addEventListener', n = 'on' + t, rO = o, rT = t, rF = f, rL = l;
  if (o[d] && !l) return o[d](t, f, false);
  if (!o._evts) o._evts = {};
  if (!o._evts[t])
  {
   o._evts[t] = o[n] ? { b: o[n] } : {};
   o[n] = new Function('e',
    'var r = true, o = this, a = o._evts["' + t + '"], i; for (i in a) {' +
     'o._f = a[i]; r = o._f(e||window.event) != false && r; o._f = null;' +
     '} return r');
   if (t != 'unload') fAddEvent(window, 'unload', function() {
    fRemoveEvent(rO, rT, rF, rL);
   });
  }
  if (!f._i) f._i = fAddEvent._i++;
  o._evts[t][f._i] = f;
 };
 fAddEvent._i = 1;
 var fRemoveEvent = function(o, t, f, l)
 {
  var d = 'removeEventListener';
  if (o[d] && !l) return o[d](t, f, false);
  if (o._evts && o._evts[t] && f._i) delete o._evts[t][f._i];
 };
}
// Optional cancelEvent() function you can call within your event handlers to
// stop them performing the normal browser action or kill the event entirely.
// Pass an event object, and the second "c" parameter cancels event bubbling.
function fCancelEvent(e, c)
{
 e.returnValue = false;
 if (e.preventDefault) e.preventDefault();
 if (c)
 {
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
 }
};

function fDefaultOnLoad()
{
try
{
 document.getElementById("dvContainer").style.height=(document.getElementById("dvFooter").offsetTop-document.getElementById("dvHeader").offsetHeight+2)+"px";
 fAddEvent(window,"resize", fOnResize)
}
catch(e){alert(e.description);}
}
function fOnResize()
{
 var C = document.getElementById("dvContainer");
 C.style.height=(document.getElementById("dvFooter").offsetTop-document.getElementById("dvHeader").offsetHeight+2)+"px";
 try{fPageHandler().fReSize();}catch(e){}
}
function fGetElementPosition(elemID) 
{
 return fGetElementPosition(document.getElementById(elemID));
}
function fGetElementsPosition(ot) 
{
 var offsetTrail = ot;
 var offsetLeft = 0;
 var offsetTop = 0;
 while (offsetTrail) 
 {
  offsetLeft += offsetTrail.offsetLeft;
  offsetTop += offsetTrail.offsetTop;
  offsetTrail = offsetTrail.offsetParent;
 }
 if (navigator.userAgent.indexOf("Mac") != -1 && 
     typeof document.body.leftMargin != "undefined") 
 {
  offsetLeft += document.body.leftMargin;
  offsetTop += document.body.topMargin;
 }
 return {left:offsetLeft, top:offsetTop};
}
function fOpenDiv(id,force)
{
 var obj = document.getElementById(id);
 try
 {
  if((force==null && obj.style.display=="none") || force==1)
  {
   obj.style.display = "";
   hDisplayPreferences[id]=obj.style.display;
   obj = document.getElementById("img"+id.substr(3));
   if(obj)
    obj.src=obj.src.replace(/right/,"down");
  }
  else
  {
   obj.style.display = "none";
   hDisplayPreferences[id]=obj.style.display;
   obj = document.getElementById("img"+id.substr(3));
   if(obj)
    obj.src=obj.src.replace(/down/,"right");
  }
 }
 catch(e)
 {
  // alert(e.description);
 }
 return false;
}
function fCloseParentDiv(obj)
{
 obj.parentNode.style.display="none";
 return false;
}
function fAffectStyle(nodes,affectees)
{
 if(nodes==null || affectees==null || affectees.length==0)
  return;
 for(var n=0;n<nodes.length;n++)
 {
  for(var a=0;a<affectees.length;a++)
  {
   if(affectees[a]==null || !nodes[n].className)
   {
    continue;
   }
   if(!nodes[n].className.match(affectees[a].RegEx))
    continue;
   nodes[n].style[affectees[a].Style]=affectees[a].Value;
//   if(affectees[a].Style=="display" && affectees[a].Value=="none")
//    continue;
  }
  fAffectStyle(nodes[n].childNodes,affectees);
 }
}
