/*    dhtml.js cross-browser javascript library for dhtml    Copyright (C) <2002> Michael Lahr <m.lahr@msh.net>    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Lesser General Public    License as published by the Free Software Foundation, version 2.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Lesser General Public License for more details.    You should have received a copy of the GNU Lesser General Public    License along with this library; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/var dhtml = new DHTML(document);var dom = new DOM(document);function DHTML(doc) {  if (!doc)    doc = document;  //var dom     = new DOM(doc);  var tracker = new Tracker();  this.getDom = function () {    return dom;  }  this.dom = function() {    return dom;  }  this.getWidth = function(id) {    if(dom.isNS4())      return dom.getElementById(id).clip.width;    else      return dom.getElementById(id).offsetWidth;  }  this.getHeight = function(id) {    if(dom.isNS4())      return dom.getElementById(id).clip.height;    else      return dom.getElementById(id).offsetHeight;  }  this.getElementById = function(id) {    return dom.getElementById(id);  }  this.trackMouse = function(name,group,func_in,func_out) {    tracker.setOnMouse(name,group,func_in,func_out);  }  this.dumpTrackerInFunctions = function() {    var fun  = tracker.getInFunctions();    var dump = "length is "+fun.length;    for(var i=0;i<fun.length;i++)      dump += fun[i];    return dump;  }  this.dumpTrackerOutFunctions = function() {    var fun  = tracker.getOutFunctions();    var dump = "length is "+fun.length;    for(var i=0;i<fun.length;i++)      dump += fun[i];    return dump;  }  this.visible = function (id,visibility) {        if (dom.isNS4())      doc.layers[id].visibility = visibility ? 'show' : 'hide';    else if(dom.isDOM())      doc.getElementById(id).style.visibility = visibility ? 'visible' : 'hidden';    else if (dom.isIE4())      doc.all[id].style.display = visibility ? 'inline' : 'none';  }  this.changeVisibility = function (id) {    if (dom.isNS4())      doc.layers[id].visibility = (doc.layers[id].visibility == "show") ? 'hide' : 'show';    else if(dom.isDOM()) {      doc.getElementById(id).style.visibility = (				      (doc.getElementById(id).style.visibility != 'hidden') && 		      		      (doc.getElementById(id).style.visibility != 'HIDDEN') &&				      (doc.getElementById(id).style.visibility != '')						  ) ? 'hidden' : 'visible';    }    else if (dom.isIE4())      doc.all[id].style.display = (doc.all[id].style.display != 'none') ? 'none' : 'inline';    }  this.moveAbsolute = function (id,left,top) {    if (dom.isNS4()) {      doc.layers[id].left = left;      doc.layers[id].top  = top;    } else if(dom.isDOM()) {      doc.getElementById(id).style.left = left;      doc.getElementById(id).style.top  = top;    } else if (dom.isIE4()) {      doc.all[id].style.left = left;      doc.all[id].style.top  = top;    }  }  this.moveRelative = function (id,to,left,top) {    var coords = getCoords(to);    if (dom.isNS4()) {      doc.layers[id].left = coords[0] + left;      doc.layers[id].top  = coords[1] + top;    } else if(dom.isDOM()) {      doc.getElementById(id).style.left = coords[0] + left;      doc.getElementById(id).style.top  = coords[1] + top;    } else if (dom.isIE4()) {      doc.all[id].style.left = coords[0] + left;      doc.all[id].style.top  = coords[1] + top;    }  }function getCoords(id) {    var coords = new Array(null,null);    if (dom.isNS4()) {      coords[0] = doc.layers[id].left;      coords[1] = doc.layers[id].top;    } else if(dom.isDOM() || dom.isIE4()) {      coords[0] = doc.getElementById(id).offsetLeft;      coords[1] = doc.getElementById(id).offsetTop;    }    return coords;  }}function DOM(doc) {    if (!doc)    doc = document;  this.isIE4 = function() {    if ( (doc.all) && ( !isDOM() ) )      return true;    else      return false;  }  this.isIE = function() {    if (doc.all)      return true;    else      return false;  }  this.isDOM = function() {    if (doc.getElementById)      return true;    else      return false;  }   this.isNS4 = function() {    if (doc.layers)      return true;    else      return false;  } this.type = function() {   if (this.isIE4())      return "IE4";    if (this.isNS4())      return "NS4";    if (this.isDOM())      return "DOM";  }  this.getElementById = function(id,doc) {    d = document;    if(doc != null)      d = doc;    if (this.isDOM())      return d.getElementById(id);    else if (this.isNS4())      return d.layers[id];    else if (this.isIE4())      return d.all[id];    else      return null;  } }function Tracker() {  //var dom       = new DOM(document);  var tracker   = this;  var groups    = new Array();  var inFunctions  = new Array();  var outFunctions = new Array();  this.getInFunctions = function() {    return inFunctions;  }  this.getOutFunctions = function() {    return OutFunctions;  }  this.setOnMouse = function(n,g,fin,fout) {    var group = new Group(n,g,['mouseisin','mouseisout']);    groups[groups.length] = group;    inFunctions[inFunctions.length]   = fin;    outFunctions[outFunctions.length] = fout;      for (var i=0;i < g.length;i++) {      var elem = dom.getElementById(g[i]);      /*      if (dom.isNS4()) {	elem.captureEvents(Event.MOUSEOUT);	elem.captureEvents(Event.MOUSEOVER);      }      */      elem.onmouseout  = function() { tracker.trackMouseOut(elem);return true};      elem.onmouseover = function() { tracker.trackMouseOver(elem);return true;}    }  }  this.execFunc = function(id,key) {    for(var i=0;i<groups.length;i++) {      if(groups[i].hasMember(id)) {	if(key == "mouseisin") {	  inFunctions[i]();	} else if(key == "mouseisout") {	  outFunctions[i]();	}      }    }  }  this.setFlag = function(id,key,val) {    for(var i=0;i<groups.length;i++) {      groups[i].setFlag(id,key,val);    }  }  this.trackMouseOver = function(elem) {    if(elem != null)      var id = elem.id;    else      var id = this.id;    tracker.setFlag(id,"mouseisout",false);    tracker.setFlag(id,"mouseisin",true);    if(tracker.hasTrueFlag(id,'mouseisin'))      tracker.execFunc(id,'mouseisin');    return true;  }  this.trackMouseOut = function(elem) {    if(elem != null)      var id = elem.id;    else       var id = this.id;    tracker.setFlag(id,"mouseisout",true);    tracker.setFlag(id,"mouseisin",false);    if(!tracker.hasTrueFlag(id,'mouseisin'))      tracker.execFunc(id,'mouseisout');    return true;  }  this.flagsAreNotFalse = function(id,flag) {    for(var i=0;i<groups.length;i++) {      if(groups[i].hasMember(id)) {        var members = groups[i].getMembers();        for(var j=0;j<members.length;j++) {          if(groups[i].getFlag(members[j],flag) == false)            return false;        }      }    }    return true;  }  this.hasTrueFlag = function(id,flag) {    for(var i=0;i<groups.length;i++) {      if(groups[i].hasMember(id)) {        var members = groups[i].getMembers();        for(var j=0;j<members.length;j++) {          if(groups[i].getFlag(members[j],flag) == true)            return true;        }      }    }    return false;  }  this.flagsAreTrue = function(id,flag) {    for(var i=0;i<groups.length;i++) {      if(groups[i].hasMember(id)) {        var members = groups[i].getMembers();        for(var j=0;j<members.length;j++) {          if(groups[i].getFlag(members[j],flag) != true)            return false;        }      }    }    return true;  }}function Group(n,g,keys) {  this.name    = n;  this.members = g;  this.flags = new Array(keys.length);  for(var i=0;i<keys.length;i++) {    this.flags[keys[i]] = new Array(this.members.length);  }  this.getFlag = function(member,key) {    for(var i=0;i<this.members.length;i++) {      if(this.members[i] == member) {	return this.flags[key][i];      }    }    return null;  }  this.setFlag = function(member,key,val) {    for(var i=0;i<this.members.length;i++) {      if(this.members[i] == member) {	this.flags[key][i] = val;      }    }  }  this.hasMember = function(id) {    var has = false;    for(var i=0;i<this.members.length;i++) {      if(this.members[i] == id)	return true;    }    return has;  }  this.getMember = function(i) {    return this.members[i];  }  this.setMember = function(m,i) {    this.members[i] = m;  }  this.addMember = function(m) {    this.members[this.members.length] = m;  }  this.getMembers = function() {    return this.members;  }  this.getName = function() {    return this.name;  }}