
/*
 * based on the dhtml library from the kind people at dhtmlcentral.com
 * i modified these functions to be compatible to the w3c's xhtml 1.1
 * standard and some little changes. you can find the original copyright
 * notice below - please have a look at it.
 *
 * sylvester.keil(at)semicolon.at 2003
 */


/*
 * original dhtmlcentral.com copyright notice
 *
 * dhtml library from dhtmlcentral.com
 *   copyright (c) 2001 thomas brattli 2001
 *   this script was released at dhtmlcentral.com
 *   visit for more great scripts!
 *   this may be used and changed freely as long as this msg is intact!
 *   we will also appreciate any links you could give us.
 *
 *   made by thomas brattli 2001
 */


// browser check
function lib_bwcheck()
{ 
  // detect resolution
  var width = window.screen.width;
  var height = window.screen.height;
  this.is_hires = (width > 800 && height > 600);

  this.ver = navigator.appVersion;
  this.agent = navigator.userAgent;
  this.dom = document.getElementById?1:0;
  this.opera5 = this.agent.indexOf("Opera 5")>-1;
  this.opera = (this.agent.indexOf("Opera") != -1);
  this.ie5 = (this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera)?1:0; 
  this.ie6 = (this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera)?1:0;
  this.ie4 = (document.all && !this.dom && !this.opera)?1:0;
  this.ie = this.ie4||this.ie5||this.ie6
  this.mac = this.agent.indexOf("Mac")>-1
  this.ns6 = (this.dom && parseInt(this.ver) >= 5) ?1:0; 
  this.ns4 = (document.layers && !this.dom)?1:0;
  this.bw = (this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera)
  return this
}
bw=new lib_bwcheck() //browsercheck object

// debug function
function lib_message(txt){alert(txt); return false}

// library objects
function lib_obj(obj,nest){ 
  if(!bw.bw) return lib_message('Old browser')
  nest=(!nest) ? "":'document.'+nest+'.'
  this.evnt=bw.dom? document.getElementById(obj):
    bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;	
  if(!this.evnt) return lib_message('The layer does not exist ('+obj+')' 
    +'- \nIf your using Netscape please check the nesting of your tags!')
  this.css=bw.dom||bw.ie4?this.evnt.style:this.evnt; 
  this.ref=bw.dom||bw.ie4?document:this.css.document;
  this.x=parseInt(this.css.left)||this.css.pixelLeft||this.evnt.offsetLeft||0;
  this.y=parseInt(this.css.top)||this.css.pixelTop||this.evnt.offsetTop||0
  this.w=this.evnt.offsetWidth||this.css.clip.width||
    this.ref.width||this.css.pixelWidth||0; 
  this.h=this.evnt.offsetHeight||this.css.clip.height||
    this.ref.height||this.css.pixelHeight||0
  this.c=0 //Clip values
  if((bw.dom || bw.ie4) && this.css.clip) {
  this.c=this.css.clip; this.c=this.c.slice(5,this.c.length-1); 
  this.c=this.c.split(' ');
  for(var i=0;i<4;i++){this.c[i]=parseInt(this.c[i])}
  }
  this.ct=this.css.clip.top||this.c[0]||0; 
  this.cr=this.css.clip.right||this.c[1]||this.w||0
  this.cb=this.css.clip.bottom||this.c[2]||this.h||0; 
  this.cl=this.css.clip.left||this.c[3]||0
  this.obj = obj + "Object"; eval(this.obj + "=this")
  return this
}

// object movement
lib_obj.prototype.moveIt = function(x,y) {
  this.x = x; this.y = y;
  this.css.left = x+'px'; this.css.top = y+'px';
}

lib_obj.prototype.moveBy = function(x,y) {
  this.x += x; this.y += y;
  this.css.left = this.x+'px'; this.css.top=this.y+'px';
}

// write to object
lib_obj.prototype.write = function(text, startHTML, endHTML) {
  if (bw.ns4) {
    if (!startHTML) {
      startHTML = ""; endHTML = "";
    }
    this.ref.open("text/html"); 
    this.ref.write(startHTML + text + endHTML); 
    this.ref.close()
  } else this.evnt.innerHTML = text;
}

// --> slide animation
lib_obj.prototype.slideIt = function(endx,endy,inc,speed,fn,wh){
  if(!this.slideactive){
    var distx = endx - this.x;
    var disty = endy - this.y
    var num = Math.sqrt(Math.pow(distx,2)+Math.pow(disty,2))/inc
    var dx = distx/num; var dy = disty/num
    this.slideactive = 1; 
    if(!wh) wh=0; if(!fn) fn=0
    this.slide(dx,dy,endx,endy,speed,fn,wh)
    }
}
lib_obj.prototype.slide = function(dx,dy,endx,endy,speed,fn,wh) {
  if(this.slideactive&&
  (Math.floor(Math.abs(dx))<Math.floor(Math.abs(endx-this.x))|| 
    Math.floor(Math.abs(dy))<Math.floor(Math.abs(endy-this.y)))){
    this.moveBy(dx,dy); 
    if(wh) eval(wh)
    setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+speed+",'"
    +fn+"','"+wh+"')",speed)
  }else{
    this.slideactive = 0; 
    this.moveIt(endx,endy);
    if(fn) eval(fn)
  }
}

// <-- end slide animation


// --> clip animation

lib_obj.prototype.clipTo = function(t,r,b,l,setwidth) { 
  this.ct = t;
  this.cr = r;
  this.cb = b;
  this.cl = l;
  if(bw.ns4){
    this.css.clip.top = t;
    this.css.clip.right = r;
    this.css.clip.bottom = b;
    this.css.clip.left = l;
  }else{
    if (t<0) t = 0;
    if (r<0) r = 0;
    if (b<0) b = 0;
    if (b<0) b = 0;
    this.css.clip = "rect("+t+","+r+","+b+","+l+")";
    if (setwidth) {
      this.css.pixelWidth = this.css.width = r+'px'; 
      this.css.pixelHeight = this.css.height = b+'px'
    }
  }
}

lib_obj.prototype.clipBy = function(t,r,b,l,setwidth){ 
  this.clipTo(this.ct+t,this.cr+r,this.cb+b,this.cl+l,setwidth)
}

lib_obj.prototype.clipIt = function(t,r,b,l,step,fn,wh){
  tstep=Math.max(Math.max(Math.abs((t-this.ct)/step),Math.abs((r-this.cr)/step)),
    Math.max(Math.abs((b-this.cb)/step),Math.abs((l-this.cl)/step)))
  if(!this.clipactive){
    this.clipactive=true; if(!wh) wh=0; if(!fn) fn=0
    this.clip(t,r,b,l,(t-this.ct)/tstep,(r-this.cr)/tstep,
      (b-this.cb)/tstep,(l-this.cl)/tstep,tstep,0, fn,wh)
  }
}
lib_obj.prototype.clip = function(t,r,b,l,ts,rs,bs,ls,tstep,astep,fn,wh){
  if(astep<tstep){
    if(wh) eval(wh); 
    astep++
    this.clipBy(ts,rs,bs,ls,1);
    setTimeout(this.obj+".clip("+t+","+r+","+b+","+l+","+ts+","+rs+","
      +bs+","+ls+","+tstep+","+astep+",'"+fn+"','"+wh+"')",50)
  }else{
    this.clipactive=false; this.clipTo(t,r,b,l,1);
    if(fn) eval(fn)
  }
}

// <-- end clip animation


