var bubbleleft = new Image();
bubbleleft.src = '/images/mouseover/bubble_left.gif';
var bubblemid = new Image();
bubblemid.src = '/images/mouseover/bubble_mid.gif';
var bubbleright = new Image();
bubbleright.src = '/images/mouseover/bubble_right.gif';
var leftbulge = new Image();
leftbulge.src = '/images/mouseover/leftbulge.gif';
var rightbulge = new Image();
rightbulge.src = '/images/mouseover/rightbulge.gif';
var leftbulgehit = new Image();
leftbulgehit.src = '/images/mouseover/leftbulgehit.gif';
var rightbulgehit = new Image();
rightbulgehit.src = '/images/mouseover/rightbulgehit.gif';
var bubbleleftinv = new Image();
bubbleleftinv.src = '/images/mouseover/bubble_left_inv.gif';
var bubblemidinv = new Image();
bubblemidinv.src = '/images/mouseover/bubble_mid_inv.gif';
var bubblerightinv = new Image();
bubblerightinv.src = '/images/mouseover/bubble_right_inv.gif';
var rightbulgeinv = new Image();
rightbulgeinv.src = '/images/mouseover/rightbulgeinv.gif';
var leftbulgeinv = new Image();
leftbulgeinv.src = '/images/mouseover/leftbulgeinv.gif';
var bulge = null;
var bubbleopen = false;
var extendtimer = [];
var cleanuptimer = null;
var jumpdelay;
var clicked=true;
var invflashdelay = 130;
var bulgehitdelay = 250;
var invtextcolor = '#ffffff';
var textcolor = '#000000';
var mouseoveron = true;
if (/mouseoveroff=/.test(document.cookie)) { mouseoveron = false; }
//var clicktimer;
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
//  if (/MSIE/.test(navigator.userAgent)) {
    var yoffset=0;
  }
else {   var yoffset = -1; }
var bulgestick = 500;
var prevboxopen = null;
var bubblebulgecleantimer;

function mouse_over(id, e, link) {
  if (!clicked) {
    if (!prevboxopen || id==prevboxopen || (id>9999 && !prevboxclosing)) { // } || id <500) {
      var mx;
      if (e=="left") { mx = 0; }
      else if (e=="right") { mx = 9999; }
      else { mx = e.clientX; }
      setTimeout("bubble_open('"+id+"','"+mx+"','"+link+"');", 10);
      if (bulge) {
        clearTimeout(cleanuptimer);
        bulgecleanup();
      }
    }
    else {
      //if (!prevboxclosetimer) { prevboxclosetimer = setTimeout('prevboxclose()', 500);	}  //listscript2.js
      clearTimeout(prevboxclosetimer);
      prevboxclose();
    }
  }
}

function bubble_open(id, mx, link) {
//  if (!clicked) { // added to stop the 'blinking at bulge' problem DIDN'T HELP
  var a = document.getElementById(id);
  var axy = findpos(a);
  var ax = axy[0]; // a.offsetLeft;
  var ay = axy[1] + yoffset; // a.offsetTop + yoffset;
  var aw = a.offsetWidth;
  var ac = ax+(aw/2);
  a.style.cursor = 'pointer';

  var b = document.getElementById("bubble");
  b.style.top = ay-3;
  var bw = aw + 4;
  var bl = ac-((bw+24)/2);
  b.style.left = bl; //this was previously AFTER the innerhtml below
  b.innerHTML = "<img id='left' src='"+bubbleleft.src+"'/><img id='mid' src='"+bubblemid.src+"' width='"+bw+"' height='24'/><img id='right' src='"+bubbleright.src+"'/>";
  b.style.display = "";

  var c = document.getElementById("bubblehtml");
  c.innerHTML = a.innerHTML;
  c.style.top = ay; // a.offsetTop + yoffset;
  c.style.left = ax + 1 + yoffset;
  c.style.cursor = "pointer";
  c.onmouseout = function() {
    cleanup(id);
  }
  c.onclick = function() { jump(id,link); }
  c.style.color = textcolor;
  c.style.display = "";
  c.onmouseover = function() {
    bubbleopen = id;
  }

  var speed = 3;
  var extra = 0;
  if (cleanuptimer) { extra = 150;  }
  var delay = 150 + extra;
  if (mouseoveron) {
//    var axy = findpos(a);
    var atruex = axy[0];
    var trueac = atruex+(aw/2);
    if (mx < trueac) {
      for (i=1; i<=24; i += 4) {
        extendtimer[i]=setTimeout("extendleft("+i+","+bl+","+bw+");", (i*speed)+delay);
      }
      i+=1;
      extendtimer[i]=setTimeout("left_bulge('"+id+"','"+link+"')", (i*speed)+delay+50);
    }
    else {
      for (i=1; i<=24; i += 4) {
        extendtimer[i]=setTimeout("extendright("+i+","+bw+");", (i*speed)+delay);
      }
      i+=1;
      extendtimer[i]=setTimeout("right_bulge('"+id+"','"+link+"')", (i*speed)+delay+50);
    }
  }
}

function mouseout(id) {
  if (bubbleopen != id && !prevboxopen) {
    cleanup(id);
  }
  if (bubbleopen != id && prevboxopen) {
    if(id==prevboxopen) { //same as above
      cleanup(id);
    }
  }
}

function extendleft(i, bl, bw) {
  if (!clicked) {
    document.getElementById('bubble').style.left = bl - i;
    var a;
    if (a=document.getElementById('mid')) { a.width = bw + i; }
    extendtimer[i]=null;
  }
}

function extendright(i,  bw) {
  if (!clicked) {
    var a;
    if (a=document.getElementById('mid')) { a.width = bw + i; }
    extendtimer[i]=null;
  }
}

function left_bulge(id, link) {
  if (!clicked) {
    bulge = id;

    var a=document.getElementById(id);
    var axy = findpos(a);
    var ax = axy[0]; // a.offsetLeft;
    var ay = axy[1] + yoffset; // a.offsetTop + yoffset;
    var aw = a.offsetWidth;
    var ac = ax+(aw/2);

    var b = document.getElementById('bulgebubble');
    b.style.top = ay-3;
    var bw = aw + 2;
    b.innerHTML = "<img id='midb' src='"+bubblemid.src+"' width='"+bw+"' height='24'/><img id='rightb' src='"+bubbleright.src+"'/>";
    var bl = ac-((bw+24)/2)+13;
    b.style.left = bl;
    b.style.display = "";

    var c = document.getElementById('bulge');
    c.innerHTML="<img id='bulgeimg' src='"+leftbulge.src+"' />"
    c.style.left = bl-40;
    c.style.top = ay-9;
    c.style.display = "";
    c.onmouseout = function() {
      if (!clicked) {
        clearTimeout(jumpdelay);
        document.getElementById('bulgeimg').src=leftbulge.src;
      }
    }
    c.onmouseover = function() { 
      jumpdelay=setTimeout("leftjump('"+link+"','"+id+"');", bulgehitdelay);
      if (a=document.getElementById('bulgeimg')) { a.src=leftbulgehit.src; }
    }

    var d = document.getElementById('gapbubble');
    d.style.top = ay-3;
    d.style.left = bl-12;
    d.style.cursor = 'pointer';
    d.innerHTML = "<img id='gap' src='"+bubblemid.src+"' width='12' height='24'/>";
    d.style.display="";
    d.onmouseout = function() { 
      cleanuptimer = setTimeout("bulgecleanup();", bulgestick);
    }
    d.onmouseover = function() {
      clearTimeout(cleanuptimer); cleartimeout=null;
    }
    d.onclick = function() {
      if (!cleanuptimer) { cleanuptimer = true; }
      leftjump(link, id);
    }

    var e = document.getElementById("bubblehtml")
    e.onclick = function() {
      if (!cleanuptimer) { cleanuptimer = true; }
      leftjump(link, id);
    }
    e.onmouseout = function () {
      cleanuptimer = setTimeout("bulgecleanup();", bulgestick);
    }
    e.onmouseover = function () {
      clearTimeout(cleanuptimer);
      cleanuptimer=null;
    }

    prebulgecleanup(id);
  }
}

function right_bulge(id,link) {
  if (!clicked) {
    bulge = id;

    var a=document.getElementById(id); //gets metrics off <a> element
    var axy = findpos(a);
    var ax = axy[0]; // a.offsetLeft;
    var ay = axy[1] + yoffset; // a.offsetTop + yoffset;
    var aw = a.offsetWidth;
    var ac = ax+(aw/2);

    var b = document.getElementById('bulgebubble');
    b.style.top = ay-3;
    var bw = aw + 2;
    b.innerHTML = "<img id='leftb' src='"+bubbleleft.src+"'/><img id='midb' src='"+bubblemid.src+"' width='"+bw+"' height='24'/>";
    var bl = ac-((bw+24)/2)-1;
    b.style.left = bl;
    b.style.display = "";

    var c = document.getElementById('bulge');
    c.innerHTML="<img id='bulgeimg' src='"+rightbulge.src+"' />"
    var cl = bl+bw+18;
    c.style.left = cl;
    c.style.top = ay-9;
    c.style.display = "";
    c.onmouseout = function() {
      if (!clicked) {
        clearTimeout(jumpdelay);
        document.getElementById('bulgeimg').src=rightbulge.src;
      }
    }
    c.onmouseover = function() {
      jumpdelay=setTimeout("rightjump('"+link+"','"+id+"');", bulgehitdelay);
      if (a=document.getElementById('bulgeimg')) { a.src=rightbulgehit.src; }
    }

    var d = document.getElementById('gapbubble');
    d.style.top = ay-3;
    d.style.left = cl-12;
    d.style.cursor = 'pointer';
    d.innerHTML = "<img id='gap' src='"+bubblemid.src+"' width='12' height='24'/>";
    d.style.display="";
    d.onmouseout = function() { 
      cleanuptimer = setTimeout("bulgecleanup();", bulgestick);
    }
    d.onmouseover = function() {
      clearTimeout(cleanuptimer); cleartimeout=null;
    }
    d.onclick = function() {
      if (!cleanuptimer) { cleanuptimer = true; }
      rightjump(link, id);
    }

    var e = document.getElementById("bubblehtml")
    e.onclick = function() {
      if (!cleanuptimer) { cleanuptimer = true; }
      rightjump(link, id);
    }
    e.onmouseout = function () {
      cleanuptimer = setTimeout("bulgecleanup();", bulgestick);
    }
    e.onmouseover = function () {
      clearTimeout(cleanuptimer);
      cleanuptimer=null;
    }
    
    prebulgecleanup(id);
  }
}

function leftjump(link, id) {
  if (cleanuptimer && bulge==id && !clicked) {
    clickedtrue();
    var a;
    if (a=document.getElementById('bubblehtml')) { a.style.color = invtextcolor; }
    document.getElementById('midb').src = bubblemidinv.src;
    document.getElementById('rightb').src = bubblerightinv.src;
    document.getElementById('gap').src = bubblemidinv.src;
    document.getElementById('bulgeimg').src = leftbulgeinv.src;
    setTimeout("leftlight(); textdark('"+id+"');", invflashdelay);
    //setTimeout("window.location = '"+link+"'", 250);
    setTimeout("executelink('"+id+"','"+link+"');", 250);
  }
}

function leftlight() {
  document.getElementById('midb').src = bubblemid.src;
  document.getElementById('rightb').src = bubbleright.src;
  document.getElementById('gap').src = bubblemid.src;
  document.getElementById('bulgeimg').src = leftbulge.src;
}

function rightjump(link, id) {  //needs redo, like rightbulge
  if (cleanuptimer && bulge==id && !clicked) {
    clickedtrue();
    var a;
    if (a=document.getElementById('bubblehtml')) { a.style.color = invtextcolor; }
    document.getElementById('midb').src = bubblemidinv.src;
    document.getElementById('leftb').src = bubbleleftinv.src;
    document.getElementById('gap').src = bubblemidinv.src;
    document.getElementById('bulgeimg').src = rightbulgeinv.src;
    setTimeout("rightlight(); textdark('"+id+"');", invflashdelay);
    setTimeout("executelink('"+id+"','"+link+"');", 250);
  }
}

function rightlight() {
  document.getElementById('midb').src = bubblemid.src;
  document.getElementById('leftb').src = bubbleleft.src;
  document.getElementById('gap').src = bubblemid.src;
  document.getElementById('bulgeimg').src = rightbulge.src;
}

function jump(id,link) { //if clicked pre-bulge
  if (!cleanuptimer && !clicked && (bubbleopen || bulge)) { //was just !cleanuptimer 
    clickedtrue();
    var a;
    if (a=document.getElementById('bubblehtml')) { a.style.color = invtextcolor; }
    document.getElementById('left').src = bubbleleftinv.src;
    document.getElementById('mid').src = bubblemidinv.src;
    document.getElementById('right').src = bubblerightinv.src;
    setTimeout("light(); textdark('"+id+"');", invflashdelay);
    setTimeout("executelink('"+id+"','"+link+"');", 250); // was 550
  }
}

function textdark(id) {
  if (bubbleopen || bulge==id) {
    var a;
    if (a= document.getElementById('bubblehtml')) { a.style.color = '#000000'; }
  }
}

function light() {
  document.getElementById('left').src = bubbleleft.src;
  document.getElementById('mid').src = bubblemid.src;
  document.getElementById('right').src = bubbleright.src;
}

function prebulgecleanup() {
  bubbleopen = false;
  var a=document.getElementById('bubble');
  a.style.display = 'none';
}

function bulgecleanup() {
  clearTimeout(cleanuptimer);
  cleanuptimer = null;

  var b = document.getElementById('bulgebubble');
  b.onmouseout = null;
  b.style.display = "none";

  var c = document.getElementById('bulge');
  c.onmouseout = null;
  c.style.display = "none";

  var d = document.getElementById('gapbubble');
  d.onmouseout = null;
  d.style.display = "none";

  if (!bubbleopen) {
    var e=document.getElementById("bubblehtml");
    e.style.display = "none";
    e.onmouseout = null;
  }

  bulge=null;
}

function cleanup(id) {
  if (bulge != id) { 
    bubbleopen = false;
    var b = document.getElementById('bubble');
    b.style.display = 'none';

    cleanuptimer = null;
    for (i in extendtimer) {
      clearTimeout(extendtimer[i]);
      extendtimer[i]=null;
    }
    var c=document.getElementById("bubblehtml");
    c.style.display = "none";
  }
}

function findpos(obj) { // derived from http://bytes.com/groups/javascript/148568-css-javascript-find-absolute-position-element
  var left = 0;
  var top = 0;
  var ll = 0;
  var tt = 0;
  while(obj) {
    lb = parseInt(obj.style.borderLeftWidth);
    if (lb > 0) { ll += lb }
    tb = parseInt(obj.style.borderTopWidth);
    if (tb > 0) { tt += tb; }
    left += obj.offsetLeft;
    top += obj.offsetTop;
    obj = obj.offsetParent;
  }
  left += ll*-yoffset;
  top += tt*-yoffset;
  return [left,top];
}

function executelink(id, link) {
  eval(link);
  cleanup(id,link);
}

function clickedtrue() {
  clicked=true;
}

function clickedfalse() {
  clicked=false;
  bulge = null;
  bubbleopen = null;
  bubblebulgecleantimer = null;
  //below 2 lines added in attempt to solve blinking problem, didn't work
//  if (bulge) { bulgecleanup(); }  
//  if (bubbleopen) { cleanup(bubbleopen); }
}

function bubblebulgeclean(delay) {
  if (!bubblebulgecleantimer) { clickedtrue(); }
  clearTimeout(bubblebulgecleantimer);
  bubblebulgecleantimer = setTimeout('clickedfalse()', delay); //solve the real problem instead of this workaround?
  if (bulge) { bulgecleanup(); }
  if (bubbleopen) { cleanup(bubbleopen); }
  bulge = null; 
}

//put custom functionality below here

function togglemouseover(id) {
  if (mouseoveron) {
    mouseoveron = false;
  }
  else {
    mouseoveron = true;
  }
  setTimeout('clickedfalse()',500);
}

function keypress(e) {
var keynum;
if(window.event) { keynum = e.keyCode; }// IE
else if(e.which) { keynum = e.which; } // Netscape/Firefox/Opera
return keynum;
}

