var isNav=false,isNav4=false,isIE=false,isIE4=false,isIE5=false,isIE55=false,isNav5=false,isIE6=false,dom=false;
if(parseInt(navigator.appVersion.charAt(0)) >= 4){
  if(navigator.appName == "Netscape"){
      if(parseInt(navigator.appVersion.charAt(0))>4)isNav5=true;
      else isNav4=true;
      isNav=true;
     }
  if(navigator.appName.indexOf("Microsoft")!=-1){
      isIE=true;
     isIE4=true;
     if(navigator.appVersion.indexOf("5.0")!=-1)isIE5=true;
     if(navigator.appVersion.indexOf("5.5")!=-1){isIE5=true;isIE55=true;}
     if(navigator.appVersion.indexOf("6.0")!=-1)isIE6=true;
     }
  else{
     isIE4=false;isIE5=false;isIE55=false;
     }
  if(document.getElementById)
     dom=true;
}

function _contains(outerlayer, innerlayer){
  if(isNav4) {
    if(innerlayer.left < outerlayer.left) return false;
    if(innerlayer.top < outerlayer.top) return false;
    if(innerlayer.left + innerlayer.clip.width >
   outerlayer.left + outerlayer.clip.width) return false;
    if(innerlayer.top + innerlayer.clip.height >
   outerlayer.top + outerlayer.clip.height) return false;
    return true;
  } else if(isIE4) {
    if(innerlayer.style.pixelLeft < outerlayer.style.pixelLeft)
      return false;
    if(innerlayer.style.pixelTop < outerlayer.style.pixelTop)
      return false;
    if(innerlayer.style.pixelLeft + innerlayer.style.pixelWidth >
       outerlayer.style.pixelLeft + outerlayer.style.pixelWidth)
      return false;
    if(innerlayer.style.pixelTop + innerlayer.style.pixelHeight >
       outerlayer.style.pixelTop + outerlayer.style.pixelHeight)
      return false;
    return true;
  }
}
function Behavior(drag){
  this.mouseDownAction=null;
  this.mouseUpAction=null;
  this.mouseMoveAction=null;
  this.mouseOverAction=null;
  this.mouseOutAction=null;
  this.draggable=drag;
  this.setAction=setAction;
  this.applyBehavior=applyBehavior;
  this.hLock=false;
  this.vLock=false;
  this.useBounds=false;
  this.setBounds=setBounds;
  this.setDimensions=setDimensions;
  this.removeBounds=removeBounds;
  this.bounds=false;
  this.containers=false;
  this.width=0;
  this.height=0;
  this.addContainer=addContainer;
  this.update=_updateAll;
}
function _updateAll(doc){
  if(!doc) doc=document;
  if(isNav){
    for(var i=0;i<doc.layers.length;i++){
      if(doc.layers[i].document.layers)this.update(doc.layers[i].document);
      if(doc.layers[i].behavior && doc.layers[i].behavior==this)this.applyBehavior(doc.layers[i]);
    }
  } else if(isIE4) {
    for(var i=0;i<doc.all.length;i++){
      if(doc.all[i].behavior && doc.all[i].behavior==this)this.applyBehavior(doc.all[i]);
    }
  }
}
function addContainer(layer) {
  if(!this.containers) this.containers=new Array();
  this.containers[this.containers.length]=layer;
}

function removeContainer(layer){
  for(var i=0;i<this.containers.length;i++)
    if(this.containers[i]==layer)
      this.containers[i]=null;
}
function setBounds(l, r, t, b){
  this.useBounds=true;
  if(this.bounds==false)this.bounds=new Array(4);
  this.bounds[0]=l;this.bounds[1]=r;
  this.bounds[2]=t;this.bounds[3]=b;
}

function setDimensions(w,h)
{
    this.width=w;
    this.height=h;
}

function removeBounds(){
  this.useBounds=false;
}
function setAction(action, func){
  eval('switch(action) {'+
    'case "MOUSEDOWN": this.mouseDownAction = func; break;'+
    'case "MOUSEMOVE": this.mouseMoveAction = func; break;'+
    'case "MOUSEUP":   this.mouseUpAction = func;   break;'+
    'case "MOUSEOVER": this.mouseOverAction = func; break;'+
    'case "MOUSEOUT":  this.mouseOutAction = func;  break;'+
    'case "CONTAINERPUSH": this.containerPushAction = func; break;'+
    'case "CONTAINERPULL": this.containerPullAction = func; break;'+
  '}');
}

function isShift(e){
  if(window.event) return window.event.shiftKey;
  else return (e.modifiers&Event.SHIFT_MASK);
}

function isAlt(e){
  if(window.event) return window.event.altKey;
  else return (e.modifiers&Event.ALT_MASK);
}
function isControl(e){
  if(window.event) return window.event.ctrlKey;
  else return (e.modifiers&Event.CONTROL_MASK);
}
function applyBehavior(layer){
  layer.behavior=this;
  layer.draggable=this.draggable;
  if(layer.captureEvents) {
    layer.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP|Event.MOUSEOVER|Event.MOUSEOUT);
    document.captureEvents(Event.MOUSEMOVE);
  }
  document.onmouseup=_clearDBJ;
  layer.onmousedown=_handleMouseDown;
  layer.onmouseup=_handleMouseUp;
  document.onmousemove=_handleMouseMove;
  layer.onmouseover=_handleMouseOver;
  layer.onmouseout=_handleMouseOut;
  layer.containers=this.containers;
  layer.containerPushAction=this.containerPushAction;
  layer.containerPullAction=this.containerPullAction;
  layer.vLock=this.vLock;layer.hLock=this.hLock;
  layer.bounds=new Array(4);
  layer.bounds[0]=this.bounds[0];layer.bounds[1]=this.bounds[1];
  layer.bounds[2]=this.bounds[2];layer.bounds[3]=this.bounds[3];
  layer.useBounds=this.useBounds;
  layer.width=this.width;
  layer.height=this.height;
  layer.mouseDownAction=this.mouseDownAction;layer.mouseUpAction=this.mouseUpAction;
  layer.mouseMoveAction=this.mouseMoveAction;layer.mouseOverAction=this.mouseOverAction;
  layer.mouseOutAction=this.mouseOutAction;
}
function _handleMouseOver(e){
  if(isNav){
    if(e.target!=this) {
      routeEvent(e);
      return;
    }
  } else {
    if(window.event.srcElement==this &&
       window.event.srcElement.tagName=="DIV")
      window.event.cancelBubble=true;
    else if(window.event.srcElement==this) return;
  }
  if(this.mouseOverAction) this.mouseOverAction(e,"mouseover");
}
function _handleMouseOut(e){
  if(isNav) {
    if(e.target!=this) {
      routeEvent(e);
      return;
    }
  } else {
    if(window.event.srcElement==this &&
       window.event.srcElement.tagName=="DIV")
      window.event.cancelBubble=true;
    else if(window.event.srcElement == this) return;
  }
  if(this.mouseOutAction) this.mouseOutAction(e, "mouseout");
}

var _dbj=new Array();

function _handleMouseDown(e){
  if(isNav) {
    if(e.handled) return true;
  } else window.event.cancelBubble=true;
  layer = isNav? this : window.event.srcElement;
  if(layer.mouseDownAction) layer.mouseDownAction(e, "mousedown");
  if(!layer.draggable) return true;
  if(layer.containers) {
    layer.wasContained = false;
    for(var i = 0; i < layer.containers.length; i++) {
      if(_contains(layer.containers[i], layer)) {
   layer.wasContained = layer.containers[i];
   break;
      }
    }
  }
  if(isNav) {
    layer.offsetX = e.pageX - getLeft(layer);
    layer.offsetY = e.pageY - getTop(layer);
  } else {
    layer.offsetX = window.event.clientX - layer.style.pixelLeft;
    layer.offsetY = window.event.clientY - layer.style.pixelTop;
  }

  _dbj.layer = layer;
  _dbj.indrag = true;
  if(isNav) e.handled = true;
  return false;
}

function _handleMouseMove(e) {
  var ret = false;
  if(isNav) {
    if(!_dbj.layer) _dbj.layer = this;
    if(e.handled) return false;
  } else if(isIE) window.event.cancelBubble = true;
  if(!_dbj.layer) {
    if(isIE4) if(window.event.srcElement.mouseMoveAction)
      window.event.srcElement.mouseMoveAction(e, "mousemove");
    return true;
  }
  if(_dbj.layer.mouseMoveAction)
    ret = _dbj.layer.mouseMoveAction(e, "mousemove");
  if(!_dbj.layer.draggable) return ret;
  if(!_dbj.indrag) return true;

  if(!_dbj.layer.vLock) {
    var dstY;
    if(isNav) {
      dstY = (e.pageY - _dbj.layer.offsetY);
      if((_dbj.layer.useBounds && (dstY >= _dbj.layer.bounds[2]) &&
         (dstY + _dbj.layer.height <= _dbj.layer.bounds[3])) ||
          !_dbj.layer.useBounds)
            setTop(_dbj.layer,dstY);
      else if(_dbj.layer.useBounds) 
          {
          if(dstY < _dbj.layer.bounds[2])
            setTop(_dbj.layer,_dbj.layer.bounds[2]);
          else 
            setTop(_dbj.layer,_dbj.layer.bounds[3] -_dbj.layer.height);
          }
       } 
    else 
       {
       dstY = (window.event.clientY - _dbj.layer.offsetY);
       if((_dbj.layer.useBounds && (dstY >= _dbj.layer.bounds[2]) && 
           (dstY + _dbj.layer.style.pixelHeight <=_dbj.layer.bounds[3])) || !_dbj.layer.useBounds)
             _dbj.layer.style.pixelTop = dstY;
      else if(_dbj.layer.useBounds) 
          {
          if(dstY < _dbj.layer.bounds[2])
            _dbj.layer.style.pixelTop = _dbj.layer.bounds[2];
          else _dbj.layer.style.pixelTop = _dbj.layer.bounds[3] -
            _dbj.layer.style.pixelHeight;
          }
        }
     }
  if(!_dbj.layer.hLock) {
    var dstX;
    if(isNav) 
      {
      dstX=(e.pageX-_dbj.layer.offsetX);
      if((_dbj.layer.useBounds &&
         (dstX + _dbj.layer.width <= _dbj.layer.bounds[1]) &&
         (dstX >= _dbj.layer.bounds[0])) ||
          !_dbj.layer.useBounds)
                setLeft(_dbj.layer,dstX);
      else if(_dbj.layer.useBounds) {
       if(dstX < _dbj.layer.bounds[0])
          setLeft(_dbj.layer,_dbj.layer.bounds[0]);
       else 
          setLeft(_dbj.layer,_dbj.layer.bounds[1] -_dbj.layer.width);
       }
      } 
    else {
      dstX = (window.event.clientX - _dbj.layer.offsetX);
      if((_dbj.layer.useBounds &&
     (dstX + _dbj.layer.style.pixelWidth <= _dbj.layer.bounds[1]) &&
     (dstX >= _dbj.layer.bounds[0])) ||
    !_dbj.layer.useBounds)
   _dbj.layer.style.pixelLeft = dstX;
      else if(_dbj.layer.useBounds) {
   if(dstX < _dbj.layer.bounds[0])
     _dbj.layer.style.pixelLeft = _dbj.layer.bounds[0];
   else _dbj.layer.style.pixelLeft = _dbj.layer.bounds[1] -
          _dbj.layer.style.pixelWidth;
      }
    }
  }
  if(isNav) e.handled = true;
  return false;
}

function _clearDBJ() {
  _dbj.indrag = false;
  _dbj.layer = null;
}

function _handleMouseUp(e) {
  if(isNav) {
    if(e.handled) return;
  } else window.event.cancelBubble = true;
  if(!_dbj.layer) { // weren't just dragging
    if(this.mouseUpAction) this.mouseUpAction(e, "mouseup");
    return;
  }
  if(_dbj.layer.mouseUpAction) _dbj.layer.mouseUpAction(e, "mouseup");
  if(_dbj.layer.containers) {
    _dbj.layer.isContained = false;
    for(var i = 0; i < _dbj.layer.containers.length; i++) {
      if(_contains(_dbj.layer.containers[i], _dbj.layer)) {
   _dbj.layer.isContained = _dbj.layer.containers[i];
      }
    }
    if(_dbj.layer.wasContained != _dbj.layer.isContained) {
      if(_dbj.layer.containerPullAction && _dbj.layer.wasContained)
   _dbj.layer.containerPullAction(_dbj.layer.wasContained, "containerpull");
      if(_dbj.layer.containerPushAction && _dbj.layer.isContained)
   _dbj.layer.containerPushAction(_dbj.layer.isContained, "containerpush");
    }
  }
  _clearDBJ();
  if(isNav) e.handled=true;
  return;
}

function moveLayer(layer,x,y){
   setTop(layer,y);
   setLeft(layer,x);
}
function getLayer(name){
   if(isNav4) return(document.layers[name]);
   else if(isIE4) layer=eval('document.all.'+name);
   else{
     layer=document.getElementById(name);
     }
   return(layer);
}
function setClip(layer,l,r,t,b){
  if(isNav4) {
    layer.clip.left=l;layer.clip.right=r;
    layer.clip.top=t;layer.clip.bottom=b;
  } else {
    layer.style.pixelWidth=r-l;
    layer.style.pixelHeight=b-t;
    layer.style.clip="rect("+t+","+r+","+b+","+l+")";
  }
}
function setClipHeight(layer, h){
  isNav4? layer.clip.height=h:layer.style.pixelHeight=h;
}
function setClipWidth(layer, w){
  if(isNav4) layer.clip.width=w;
  else {
    layer.style.pixelWidth=w;
    setClip(layer,0,layer.style.pixelWidth,0,layer.style.pixelHeight);
  }
}
function setLeft(layer,l){
    if(isNav4) layer.left=l;
    else if(isIE)layer.style.pixelLeft=l;
    else layer.style.left=l+"px";
}
function setTop(layer,t){
    if(isNav4)layer.top=t;
    else if(isIE)
      layer.style.pixelTop=t;
    else
    {
        layer.style.top=t+"px";
    }
}
function setVisibility(layer,v){
 if(isNav4)
    layer.visibility=v;
 else
    layer.style.visibility=v;
}
function show(layer){
   setVisibility(layer,"visible");
}
function hide(layer){
   setVisibility(layer,"hidden");
}
function setDisplay(layer,v){
   isNav4? layer.display=v:layer.style.display=v;
}
function setZIndex(layer,z){
  isNav4? layer.zIndex=z:layer.style.zIndex=z;
}
function getParent(layer){
   if(isNav4) return layer.parentLayer;
   return layer.offsetParent;
}
function getWidth(layer){
   if(isNav4) return layer.clip.right;
   else return layer.offsetWidth;
}
function getHeight(layer){
   if(isNav4) return layer.clip.height;
   if(layer.style.pixelHeight!=0) return layer.style.pixelHeight;
   return layer.offsetHeight;

}
function getDocWidth(){
   if(isNav4)return document.width;
   else if(isIE)return document.body.clientWidth;
   return document.body.width;
}
function getDocHeight(){
   if(isNav4) return document.height;
   else if(isIE)return document.body.clientHeight;
   return document.body.height;
}
function getLeft(layer){
   if(isNav4){
      if(layer.left!=0) return layer.left;
      else return layer.pageX;
   }
   else if(isIE){
      if(layer.style.pixelLeft!=0) return layer.style.pixelLeft;
      else return layer.offsetLeft;
   }
   else
   {
       return parseInt(layer.offsetLeft);
   }
       
}
function getTop(layer) {
   if(isNav4)
      {
      if(layer.top!=0)return layer.top;
      else return layer.pageY;
      }
   else if(isIE){
      if(layer.style.pixelTop==0)return layer.offsetTop;
      else return layer.style.pixelTop;
   }
   else
       return parseInt(layer.offsetTop);
}
function fixupColor(c){
   if(c=="")
      return "FFFFFF";
   if(c.charAt(0)=='#')
      return c.substr(1).toLowerCase();
   return c.toLowerCase();
}
function setLayerBgcolor(layer,b){
  b=fixupColor(b);
  isNav4? layer.bgColor=b:layer.style.backgroundColor=b;
}
function setbg(layer,b){
   setLayerBgcolor(layer,b);
}
function setHeight(c,h){
   if(isNav4)c.height=h;
   else c.style.height=h;
}
function setWidth(c,w){
   if(isNav4)c.clip.right=w;
   else c.style.width=w;
}

