/******************************************************************************* dhtmllib.js                                                                 *
*                                                                             *
* Copyright 1999 by Mike Hall.                                                *
* Web address: http://www.brainjar.com                                        *
* Last update: January 21, 2000.                                              *
*                                                                             *
* Provides basic functions for DHTML positioned elements which will work on   *
* both Netscape Communicator and Internet Explorer browsers (version 4.0 and  *
* up).                                                                        *
******************************************************************************/

// Determine browser.

var isMinIE4 = (document.all) ? 1 : 0;
var isMinIE5 = navigator.userAgent.indexOf('MSIE 5') > 0 ? 1 : 0;
var isMinNS4 = (document.layers) ? 1 : 0;
var isNS6 = (document.getElementById && !document.all) ? 1 : 0;
var isMinNS6 = (document.getElementById && !document.all) ? 1 : 0;
//var isMinIE4 = (document.all && !document.getElementById) ? 1 : 0;
//var isMinIE5 = (document.all && document.getElementById) ? 1 : 0;

//-----------------------------------------------------------------------------
// Layer visibility.
//-----------------------------------------------------------------------------

function hideLayer(layer) {
  if (isMinNS4)
    layer.visibility = "hide";
  if (isMinIE4 || isMinNS6)
    layer.style.visibility = "hidden";
}

function showLayer(layer) {
  if (isMinNS4)
    layer.visibility = "show";
  if (isMinIE4 || isMinNS6)
    layer.style.visibility = "visible";
}

function isVisible(layer) {
  if (isMinNS4 && layer.visibility == "show")
    return(true);
  if ((isMinIE4 || isMinNS6) && layer.style.visibility == "visible")
    return(true);
  return(false);
}

//-----------------------------------------------------------------------------
// Layer positioning.
//-----------------------------------------------------------------------------

function moveLayerTo(layer, x, y) {
  if (isMinNS4)
    layer.moveTo(x, y);
  if (isMinIE4 || isMinNS6) {
    layer.style.left = x;
    layer.style.top  = y;
  }
}

function moveLayerBy(layer, dx, dy) {
  if (isMinNS4)
    layer.moveBy(dx, dy);
  if (isMinNS6) {
    layer.style.left = parseInt(layer.style.left.replace("pt","")) + dx;
    layer.style.top  = parseInt(layer.style.top.replace("pt",""))  + dy;
  }
  if (isMinIE4) {
    layer.style.pixelLeft += dx;
    layer.style.pixelTop  += dy;
  }
}

function getLeft(layer) {
  if (isMinNS4)
    return(layer.left);
  if (isMinNS6)
    return(parseInt(layer.style.left.replace("pt","")));
  if (isMinIE4)
    return(layer.style.pixelLeft);
  return(-1);
}

function getTop(layer) {
  if (isMinNS4)
    return(layer.top);
  if (isMinNS6)
    return(parseInt(layer.style.top.replace("pt","")));
  if (isMinIE4)
    return(layer.style.pixelTop);
  return(-1);
}

function getRight(layer) {
  if (isMinNS4)
    return(layer.left + getWidth(layer));
  if (isMinNS6)
    return(parseInt(layer.style.left.replace("pt","")) + getWidth(layer));
  if (isMinIE4)
    return(layer.style.pixelLeft + getWidth(layer));
  return(-1);
}

function getBottom(layer) {
  if (isMinNS4)
    return(layer.top + getHeight(layer));
  if (isMinNS6)
    return(parseInt(layer.style.top.replace("pt","")) + getHeight(layer));
  if (isMinIE4)
    return(layer.style.pixelTop + getHeight(layer));
  return(-1);
}

function getPageLeft(layer) {

  var y;

  if (isMinNS4)
    return(layer.pageX);
  if (isMinIE4 || isMinNS6) {
    x = 0;
    while (layer.offsetParent != null) {
      x += layer.offsetLeft;
      layer = layer.offsetParent;
    }
    x += layer.offsetLeft;
    return(x);
  }
  return(-1);
}

function getPageTop(layer) {

  var y;

  if (isMinNS4)
    return(layer.pageY);
  if (isMinIE4 || isMinNS6) {
    y = 0;
    while (layer.offsetParent != null) {
      y += layer.offsetTop;
      layer = layer.offsetParent;
    }
    y += layer.offsetTop;
    return(y);
  }
  return(-1);
}

function getWidth(layer) {
  if (isMinNS4) {
    if (layer.document.width)
      return(layer.document.width);
    else
      return(layer.clip.right - layer.clip.left);
  }
  if (isMinIE4) {
    if (layer.style.pixelWidth)
      return(layer.style.pixelWidth);
    else
      return(layer.clientWidth);
  }
  if (isMinNS6)
      return(parseInt(layer.style.width.replace("pt","")));
  return(-1);
}

function getHeight(layer) {
  if (isMinNS4) {
    if (layer.document.height)
      return(layer.document.height);
    else
      return(layer.clip.bottom - layer.clip.top);
  }
  if (isMinIE4) {
    if (layer.style.pixelHeight)
      return(layer.style.pixelHeight);
    else
      return(layer.clientHeight);
  }
  if (isMinNS6)
       return(parseInt(layer.style.height.replace("pt","")));
  return(-1);
}

function getzIndex(layer) {

  if (isMinNS4)
    return(layer.zIndex);
  if (isMinIE4 || isMinNS6)
    return(layer.style.zIndex);

  return(-1);
}

function setzIndex(layer, z) {

  if (isMinNS4)
    layer.zIndex = z;
  if (isMinIE4 || isMinNS6)
    layer.style.zIndex = z;
}

//-----------------------------------------------------------------------------
// Layer clipping.
//-----------------------------------------------------------------------------

function clipLayer(layer, clipleft, cliptop, clipright, clipbottom) {

  if (isMinNS4) {
    layer.clip.left   = clipleft;
    layer.clip.top    = cliptop;
    layer.clip.right  = clipright;
    layer.clip.bottom = clipbottom;
  }
  if (isMinIE4 || isMinNS6)
    layer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
}

function getClipLeft(layer) {

  if (isMinNS4)
    return(layer.clip.left);
  if (isMinIE4 || isMinNS6) {
    var str =  layer.style.clip;
    if (!str)
      return(0);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[3]);
  }
  return(-1);
}

function getClipTop(layer) {

  if (isMinNS4)
    return(layer.clip.top);
  if (isMinIE4 || isMinNS6) {
    var str =  layer.style.clip;
    if (!str)
      return(0);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[0]);
  }
  return(-1);
}

function getClipRight(layer) {

  if (isMinNS4)
    return(layer.clip.right);
  if (isMinIE4 || isMinNS6) {
    var str =  layer.style.clip;
    if (!str)
      return(layer.style.pixelWidth);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[1]);
  }
  return(-1);
}

function getClipBottom(layer) {

  if (isMinNS4)
    return(layer.clip.bottom);
  if (isMinIE4 || isMinNS6) {
    var str =  layer.style.clip;
    if (!str)
      return(layer.style.pixelHeight);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[2]);
  }
  return(-1);
}

function getClipWidth(layer) {

  if (isMinNS4)
    return(layer.clip.width);
  if (isMinIE4 || isMinNS6) {
    var str = layer.style.clip;
    if (!str)
      return(layer.style.pixelWidth);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[1] - clip[3]);
  }
  return(-1);
}

function getClipHeight(layer) {

  if (isMinNS4)
    return(layer.clip.height);
  if (isMinIE4 || isMinNS6) {
    var str =  layer.style.clip;
    if (!str)
      return(layer.style.pixelHeight);
    var clip = getIEClipValues(layer.style.clip);
    return(clip[2] - clip[0]);
  }
  return(-1);
}

function getIEClipValues(str) {

  var clip = new Array();
  var i;

  // Parse out the clipping values for IE layers.

  i = str.indexOf("(");
  clip[0] = parseInt(str.substring(i + 1, str.length), 10);
  i = str.indexOf(" ", i + 1);
  clip[1] = parseInt(str.substring(i + 1, str.length), 10);
  i = str.indexOf(" ", i + 1);
  clip[2] = parseInt(str.substring(i + 1, str.length), 10);
  i = str.indexOf(" ", i + 1);
  clip[3] = parseInt(str.substring(i + 1, str.length), 10);
  return(clip);
}

//-----------------------------------------------------------------------------
// Layer scrolling.
//-----------------------------------------------------------------------------

function scrollLayerTo(layer, x, y, bound) {

  var dx = getClipLeft(layer) - x;
  var dy = getClipTop(layer) - y;

  scrollLayerBy(layer, -dx, -dy, bound);
}

function scrollLayerBy(layer, dx, dy, bound) {

  var cl = getClipLeft(layer);
  var ct = getClipTop(layer);
  var cr = getClipRight(layer);
  var cb = getClipBottom(layer);

  if (bound) {
    if (cl + dx < 0)

      dx = -cl;

    else if (cr + dx > getWidth(layer))
      dx = getWidth(layer) - cr;
    if (ct + dy < 0)

      dy = -ct;

    else if (cb + dy > getHeight(layer))
      dy = getHeight(layer) - cb;
  }

  clipLayer(layer, cl + dx, ct + dy, cr + dx, cb + dy);
  moveLayerBy(layer, -dx, -dy);
}

//-----------------------------------------------------------------------------
// Layer background.
//-----------------------------------------------------------------------------

function setBgColor(layer, color) {

  if (isMinNS4)
    layer.bgColor = color;
  if (isMinIE4 || isMinNS6)
    layer.style.backgroundColor = color;
}

function setBgImage(layer, src) {

  if (isMinNS4)
    layer.background.src = src;
  if (isMinIE4 || isMinNS6)
    layer.style.backgroundImage = "url(" + src + ")";
}

//-----------------------------------------------------------------------------
// Layer utilities.
//-----------------------------------------------------------------------------

function getLayer(name) {
  if (isMinNS4)
    return findLayer(name, document);
  if (isMinNS6)
    return document.getElementById(name);
  if (isMinIE4) 
    return eval('document.all.' + name);
  return null;
}

function findLayer(name, doc) {

  var i, layer;

  for (i = 0; i < doc.layers.length; i++) {
    layer = doc.layers[i];
    if (layer.name == name)
      return layer;
    if (layer.document.layers.length > 0) {
      layer = findLayer(name, layer.document);
      if (layer != null)
        return layer;
    }
  }

  return null;
}
//-----------------------------------------------------------------------------
// Images utilities.
//-----------------------------------------------------------------------------

function getImage(name) {
 
  if (isMinNS4)
    return findImage(name, document);	 
  if (isMinIE4 || isMinNS6)
    return  eval('document.all.'+name);
  return null;
}

function findImage(name, doc) {

  var i, j, layer, image;  
  
  for (j = 0; j < doc.images.length; j++) {		 
		image = doc.images[j];				 	 		 
    	if (image.name == name)		return image;    	 
  }	
  for (i = 0; i < doc.layers.length; i++) {
    layer = doc.layers[i];	 	 
	for (j = 0; j < layer.document.images.length; j++) {		 
		image = layer.document.images[j];				 	 		 
    	if (image.name == name)
			return image;
    	if (layer.document.layers.length > 0) {
      		image = findImage(name, layer.document);
    		if (image != null)	return image;
    	}
	}
  }
  return null;
}
//-----------------------------------------------------------------------------
// Window and page properties.
//-----------------------------------------------------------------------------

function getWindowWidth() {

  if (isMinNS4)
    return(window.innerWidth);
  if (isMinIE4 || isMinNS6)
    return(document.body.clientWidth);
  return(-1);
}

function getWindowHeight() {

  if (isMinNS4)
    return(window.innerHeight);
  if (isMinIE4 || isMinNS6)
    return(document.body.clientHeight);
  return(-1);
}

function getPageWidth() {

  if (isMinNS4)
    return(document.width);
  if (isMinIE4 || isMinNS6)
    return(document.body.scrollWidth);
  return(-1);
}

function getPageHeight() {

  if (isMinNS4)
    return(document.height);
  if (isMinIE4 || isMinNS6)
    return(document.body.scrollHeight);
  return(-1);
}

function getPageScrollX() {

  if (isMinNS4)
    return(window.pageXOffset);
  if (isMinIE4 || isMinNS6)
    return(document.body.scrollLeft);
  return(-1);
}

function getPageScrollY() {

  if (isMinNS4)
    return(window.pageYOffset);
  if (isMinIE4 || isMinNS6)
    return(document.body.scrollTop);
  return(-1);
}

function captureMouseMove(layer) {
	mousemoveLayer = layer;
	document.onmousemove = mouseMove
	if (isMinNS4) document.captureEvents(Event.MOUSEMOVE)
}

// Moves the layer if the mousemove event has been captured
// shownow must be set outside the call
function mouseMove(e) {
	if (isMinNS4 || isMinNS6) {x=e.pageX; y=e.pageY;}
	if (isMinIE4) {x=event.x; y=event.y;}
	if (isMinIE5) {x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}
	if (shownow) {
		if (dir == 2) { // Center
			moveLayerTo(mousemoveLayer,x+offsetx-(width/2),y+offsety);
		}
		if (dir == 1) { // Right
			moveLayerTo(mousemoveLayer,x+offsetx,y+offsety);
		}
		if (dir == 0) { // Left
			moveLayerTo(mousemoveLayer,x-offsetx-width,y+offsety);
		}
	}
}

//write into the layer
function layerWrite(layer,txt) {
	if (isMinNS4) {
		layer.document.open()
		layer.document.write(txt)
		layer.document.close()
	}
	else if (isMinIE4 || isMinNS6) layer.innerHTML = txt  
}


function orderLayer(leftOffset) {
	bottom = getBottom(Header);
	var leftPosition = (getWindowWidth()-getWidth(Header))/2;
	if (leftPosition > leftOffset) leftPosition=leftOffset;
	moveLayerTo(Header,leftPosition,getTop(Header));
	for (var i=1;i<=nbLayers;i++) {
		if (isVisible(layers[i])) {
			moveLayerTo(layers[i],leftPosition, bottom)
			bottom += getHeight(layers[i])+10;
		}
	}
	moveLayerTo(Footer,leftPosition,bottom);
}

function displayLayer(layerNb,withImg,leftOffset){
	if (isVisible(layers[layerNb])) {
		hideLayer(layers[layerNb]);
		if (withImg){
			if (isMinIE4 || isMinNS6)
				document.images[layerNb].src = hgraphics[layerNb].src;
			else
				Header.document.images[layerNb-1].src = hgraphics[layerNb].src;
		}
	}
	else {
		showLayer(layers[layerNb]);
		if (withImg){
			if (isMinIE4 || isMinNS6)
				document.images[layerNb].src = vgraphics[layerNb].src;
			else
				Header.document.images[layerNb-1].src = vgraphics[layerNb].src;
		}
	}
	orderLayer(leftOffset);
}

function animLayer(timerName,layerName,xStart,xEnd,yStart,yEnd,speed,delay){
	var xPos = xStart;
	var yPos = yStart;
	var theLayer = getLayer(layerName);
	if (!isVisible(theLayer)) showLayer(theLayer);
	
	if (xStart != xEnd){
		xPos = xStart ;
		if (((xEnd - xStart) > 0) && (xPos >= xEnd)) xPos = xEnd;
	}
	
	if (yStart != yEnd){
		yPos = yStart + speed;
		if (((yEnd - yStart) > 0) && (yPos >= yEnd)) yPos = yEnd;
	}
	
	moveLayerTo(theLayer,xPos,yPos);
	
	if ((xPos != xEnd) || (yPos != yEnd))
		timerName = setTimeout("animLayer('" + timerName + "','" + layerName + "'," + xPos + "," + xEnd + "," + yPos + "," + yEnd + "," + speed + "," + delay + ")",delay);
	else
		timerName.clearTimeout;
}

var stressTimer;

function unStressLayer(layerName,x,y){
TheLayer = getLayer(layerName);
moveLayerTo(TheLayer,x,y);
clearInterval(stressTimer);
}

function stressLayer(layerName){
	TheLayer = getLayer(layerName);
	stressTimer = setInterval("shakeLayer('" + layerName + "'," + getLeft(TheLayer) + "," + getTop(TheLayer) + ")",10);
}

function shakeLayer(layerName,x,y){
	randomX = Math.floor(Math.random() * 20);
	randomY = Math.floor(Math.random() * 20);
	signx = Math.random()
	signy = Math.random()
		if (signx < 0.5)
			signx = "-"
		else
			signx = ""
		
		if (signy < 0.5)
			signy = "-"
		else
			signy = ""
	randomX = eval(signx + randomX);
	randomY = eval(signy + randomY);
	newPosx = x + randomX;
	newPosy = y + randomY;
	moveLayerTo(getLayer(layerName),newPosx,newPosy);
}

