

var Untangly = window.Untangly ||
  {
  onload: function()
    {
    try
      {
      Untangly.setHoverable();
      Untangly.setSelectable();
      }
    catch(ex)
      {
      }
    },

  setHoverable: function()
    {
    try
      {
      var elt,i,l;
      var elements = document.getElementsBySelector(".hoverable");
      if(elements)
        {
        l = elements.length;
        for(i=0;i<l;i++)
          {
          elt = elements[i];
          elt.onmouseover = function(){ this.src = Untangly.Utils.raise(this.src); return false; };
          elt.onmouseout  = function(){ this.src = Untangly.Utils.lower(this.src); return false; };
          Untangly.Utils.preload(elt.src,false);
          }
        }
      }
    catch(ex)
      {
      }
    },

  setSelectable: function()
    {
    try
      {
      var elt,i,l,img;
      var elements = document.getElementsBySelector(".selectable");
      if(elements)
        {
        l = elements.length;
        for(i=0;i<l;i++)
          {
          elt = elements[i];
          elt.onclick     = function(){ Untangly.Utils.select(this); return false; };
          img = Untangly.Utils.getImageFromAnchor(elt);
          if(img)
            {
            Untangly.Utils.preload(img.src,true);
            }
          }
        }
      }
    catch(ex)
      {
      }
    }

  };

Untangly.Utils = Untangly.Utils ||
  {
  PLAIN:  ".png",
  HOVER:  ".hover.png",
  SELECT: ".selected.png",
  images: new Array(),

  preload: function(src,selectable)
    {
    try
      {
      if(src)
        {
        var img       = new Image(),img2;
        var selected  = src.indexOf(Untangly.Utils.SELECT)>0;
        img.src       = selectable?Untangly.Utils.getSelectedSrc(src,!selected):Untangly.Utils.raise(src);
        Untangly.Utils.images.push(img);
        if(selectable)
          {
          img2 = new Image();
          img2.src = Untangly.Utils.raise(img.src);
          Untangly.Utils.images.push(img2);
          }
        }
      }
    catch(ex)
      {
      }
    },

  raise: function(name)
    {
    var dot = name.indexOf(Untangly.Utils.PLAIN);
    var hov = name.indexOf(Untangly.Utils.HOVER);
    return ((dot>0)&&(hov<=0))?(name.substring(0,dot)+Untangly.Utils.HOVER):name;
    },

  lower: function(name)
    {
    var hov = name.indexOf(Untangly.Utils.HOVER);
    return (hov<=0)?name:name.substring(0,hov)+Untangly.Utils.PLAIN;
    },

  getSelectedSrc: function(name,selected)
    {
    try
      {
      var  src    = Untangly.Utils.lower(name);
      var  dot    = src.indexOf(Untangly.Utils.PLAIN);
      var  select = src.indexOf(Untangly.Utils.SELECT);
      if(selected)
        {
        src = (select<=0)?src.substring(0,dot)+Untangly.Utils.SELECT:src;
        }
      else
        {
        src = (select<=0)?src:src.substring(0,select)+Untangly.Utils.PLAIN;
        }
      return src;
      }
    catch(ex)
      {
      return name;
      }
    },

  getImageFromAnchor: function(a)
    {
    try
      {
      var stem = a.id.substring(0,a.id.indexOf("-anchor"));
      return  document.getElementById(stem+"-img");
      }
    catch(ex)
      {
      return null;
      }
    },

  highlight: function(img,selected)
    {
    if(img)
      {
      img.src   = Untangly.Utils.getSelectedSrc(img.src,selected);
      }
    },

  select: function(elt)
    {
    try
      {
      if(elt)
        {
        var a,j;
        var aid       = elt.id;
        var idx       = aid.indexOf("-anchor");
        var id        = aid.substring(0,idx);
        var anchors   = elt.parentNode.childNodes;
        var k         = anchors?anchors.length:0;
        var atag      = elt.tagName;
        for(j=0;j<k;j++)
          {
          a = anchors[j];
          if(a.tagName==atag)
            {
            Untangly.Utils.highlight(Untangly.Utils.getImageFromAnchor(a),a.id==aid);
            }
          }
        var target    = document.getElementById(id);
        var tag       = target.tagName;
        var siblings  = target.parentNode.childNodes;
        var l         = siblings?siblings.length:0;
        var i,s;
        for(i=0;i<l;i++)
          {
          s = siblings[i];
          if(s.tagName==tag)
            {
            s.style.display = s.id==id?'block':'none';
            }
          }
        }
      }
    catch(ex)
      {
      }
    }
  };

window.onload = Untangly.onload;