// (C) 1998-2010 Dennis Chuah, all rights reserved.
// Constants
var deftreestate = '';
var treestatecookie = 'treestate';
var rightstatecookie = 'rightstate';

// Utility
function Trim (s)
  {
  if (s == null)
    s = '';
  s = new String (s);

  while (s.substring(0,1) == ' ')
    {
    s = s.substring(1,s.length);
    }
  while (s.substring(s.length-1,s.length) == ' ')
    {
    s = s.substring(0,s.length-1);
    }
  return s;
  }

String.prototype.Trim = function ()
  {
  return Trim (this);
  }
  
// Cookies
function ExtractCookie (name, defaultvalue)
  {
  var cookie = new String (document.cookie);

  var re = new RegExp (name + '=([^;]+)', 'i');
  var r = cookie.match(re);
  if (r)
    {
    var ret = RegExp.$1;
    return decodeURIComponent (ret);
    }
  else
    {
    WriteCookie (name, defaultvalue);
    return defaultvalue;
    }
  }

function WriteCookie (name, value)
  {
  DeleteCookie (name);
  var c = name + '=' + encodeURIComponent (value) + '; expires=Wed, 1 Jan 2020 00:00:00 UTC';
  document.cookie = c;
  }

function DeleteCookie (name)
  {
  var c = name + '=; expires=Thu, 1 Jan 2009 00:00:00 UTC';
  document.cookie = c;
  }

// Focusing
var FocusedElement = null;

function FocusIn()
  {
  FocusedElement = event.toElement;
  }

function SetFocusToControl (To, Check)
  {
  if (To != FocusedElement)
    {
    for (var f = 0; f < Check.length; f++)
      {
      var control = Check[f];
      if ((control != null) && (control == FocusedElement))
        {
        return;
        }
      }
    To.focus();
    }
  }
  
// Control values
function CheckValue (control, value, message)
  {
  var retval = value != '';

  if (!retval)
    {
    alert (message);
    control.focus();
    }

  return retval;
  }

function HasTrimValue (control, message)
  {
  return CheckValue (control, Trim (control.value), message);
  }

function HasValue (control, message)
  {
  return CheckValue (control, control.value, message);
  }

function FindTag (name, tag)
  {
  var tagarray = document.all.tags (tag);

  var temp;
  for (var f = 0; f < tagarray.length; f++)
    {
    temp = tagarray(f);
    if (temp.name == name)
      return temp;
    }

  return null;
  }

function SwapImage (name)
  {
  var item, temp;

  item = FindTag (name, 'img');
  if (item)
    {
    temp = item.src;
    item.src = item.dsrc;
    item.dsrc = temp;
    }
  }

function SetTreeVisibilityCookie (cookie, name, expanded)
  {
  // Find the name and remove it
  name = ':' + name;
  var l = name.length, p;
  p = cookie.indexOf (name);
  if (p > -1)
    cookie = cookie.slice (0, p) + cookie.slice (p+l+1);
  if (expanded)
    name = name + '+'
  else
    name = name + '-'
  return cookie + name;
  }
  
function GetTreeVisibilityCookie()
 {
 var cookie = ExtractCookie (treestatecookie, '');
 
 if (cookie == '')
   cookie = deftreestate;
   
 return cookie;
 }

function SaveTreeVisibilityCookie (name, expanded)
  {
  var cookie = GetTreeVisibilityCookie();
  cookie = SetTreeVisibilityCookie (cookie, name, expanded)
  WriteCookie (treestatecookie, cookie);
  }

function ToggleTreeVisibility (name)
  {
  var item, expand = false;

  // Show / hide children
  item = FindTag (name + '-div', 'div');
  if (item)
    item = item.style;
  if (item)
    {
    expand = (item.display == 'none');
    if (expand)
      item.display = 'block';
    else
      item.display = 'none';
    }

  // Change button pictures
  SwapImage (name + '-btn');
  // Change icon pictures
  SwapImage (name + '-icn');

  SaveTreeVisibilityCookie (name, expand)
  }

function ShowDiv (name)
  {
  ShowHideItem (name, 'div', 'block');
  }

function HideDiv (name)
  {
  ShowHideItem (name, 'div', 'none');
  }

function ToggleDivVisibility (name)
  {
  var item;
  item = FindTag (name, 'div');
  if (item)
    item = item.style;
  if (item)
    {
    if (item.display == 'none')
      item.display = 'block';
    else
      item.display = 'none';
    }
  }

function ShowHideItem (name, tag, showhide)
  {
  var item;
  item = FindTag (name, tag);
  if (item)
    item = item.style;
  if (item)
    item.display = showhide;
  }

function ShowHideAll (test, set)
  {
  var tagarray = document.all.tags ('div');
  var retarray = new Array(), retindex = 0;

  for (var f = 0; f < tagarray.length; f++)
    {
    var temp, s, process;
    temp = tagarray(f);
    s = new String (temp.name);

    if (s.substr (s.length - 4, 4) == '-div')
      {
      retarray[retindex] = s.slice (0, s.length-4);
      retindex++;
      temp = temp.style;
      var t;
      if (temp.display == '')
        t = 'block'
      else
        t = temp.display;
      process = t == test;

      if (process)
        {
        temp.display = set;
        s = s.substr (0, s.length-4);
        // Change button pictures
        SwapImage (s + '-btn');
        // Change icon pictures
        SwapImage (s + '-icn');
        }
      }
    }
    
  return retarray;
  }

function TreeExpandAll ()
  {
  // Show all
  var allnames = ShowHideAll ('none', 'block');

  // Show/hide collapse all / expand all
  HideDiv ('expand-all');
  ShowDiv ('collapse-all');

  // Set all relavant nodes to expanded in the cookie
  var cookie = GetTreeVisibilityCookie();
  for (var f = 0; f < allnames.length; f++)
    cookie = SetTreeVisibilityCookie (cookie, allnames[f], true)
  WriteCookie (treestatecookie, cookie);
  }

function TreeCollapseAll ()
  {
  // Hide all
  var allnames = ShowHideAll ('block', 'none');

  // Show/hide collapse all / expand all
  HideDiv ('collapse-all');
  ShowDiv ('expand-all');
  
  // Set all relavant nodes to collapsed expanded in the cookie
  var cookie = GetTreeVisibilityCookie();
  for (var f = 0; f < allnames.length; f++)
    cookie = SetTreeVisibilityCookie (cookie, allnames[f], false)
  WriteCookie (treestatecookie, cookie);
  }
  
// Right panel visibility
function ToggleRightPanel (item, imgname, position)
  {
  item = FindTag (item, 'div')
  if (item)
    item = item.style;
  var isshown = item.display == 'none';
  if (isshown)
    item.display = 'block';
  else
    item.display = 'none';
  SwapImage (imgname);

  var cookie = ExtractCookie (rightstatecookie, '111');
  cookie = cookie.slice (0, position) + (isshown ? '1' : '0') + cookie.slice (position+1);
  WriteCookie (rightstatecookie, cookie);
  }

// Log visits to site
function LogVisits (img, url)
  {
  var s = screen, n=navigator;
  url = url + '?w=' + encodeURIComponent (s.width) + '&h=' + encodeURIComponent (s.height) + '&d=' + s.colorDepth + '&c=' + encodeURIComponent (n.cpuClass) + '&o=' + encodeURIComponent (n.platform) + '&b=' + encodeURIComponent (n.appName) + '&v=' + encodeURIComponent (n.appVersion) + '&n=' + encodeURIComponent (n.appMinorVersion);
  var referrer = document.referrer;
  if (referrer)
    {
    referrer = referrer.toLowerCase();
    if (referrer.indexOf ('inetgardens.com') == -1)
      {
      url = url + '&r=' + encodeURIComponent (referrer);
      }
    }

  img.src = url;
  }

function DoLoad ()
  {
  var img = FindTag ('visits', 'img');
  if (img)
    LogVisits (img, 'visits.htm');
  }

var DefinitionZOrder = 1;

function ShowDefinition (defn)
  {
  HideAllDefinitions();
  var style = defn.style;
  if (defn.currentStyle.display == 'none')
    {
    style.display = 'inline'
    style.position = 'absolute'
    style.top = window.event.clientY - 70 + document.body.scrollTop
    style.left = window.event.clientX + document.body.scrollLeft
    style.zIndex = DefinitionZOrder
    DefinitionZOrder++
    }
  }
  
