// Copywright Iain Pople, iainbrunny.com
// Last changed	3 May 2002 
// Code modified to be more OO.


function checkIt(string) {
    place = detect.indexOf(string) + 1;
    thestring = string;
    return place;
}

var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror')) {
    browser = "Konqueror";
    OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari";
else if (checkIt('omniweb')) browser = "OmniWeb";
else if (checkIt('opera')) browser = "Opera";
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab";
else if (checkIt('msie')) browser = "Internet Explorer";
else if (!checkIt('compatible')) {
    browser = "Netscape Navigator";
    version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS) {
    if (checkIt('linux')) OS = "Linux";
    else if (checkIt('x11')) OS = "Unix";
    else if (checkIt('mac')) OS = "Mac";
    else if (checkIt('win')) OS = "Windows";
    else OS = "an unknown operating system";
}






function getElement(id) {
    return document.getElementById ? document.getElementById(id) : document.all ? document.all(id) : null;
}


function getRealLeft(id) {
    var el = getElement(id);
    if (el) {
        xPos = el.offsetLeft;
        tempEl = el.offsetParent;
        while (tempEl != null) {
            xPos += tempEl.offsetLeft;
            tempEl = tempEl.offsetParent;
        }
        return xPos;
    }
}

function getRealTop(id) {
    var el = getElement(id);
    if (el) {
        yPos = el.offsetTop;
        tempEl = el.offsetParent;

        while (tempEl != null) {
            yPos += tempEl.offsetTop;
            tempEl = tempEl.offsetParent;
        }
        return yPos;
    }
}

function getRealRight(id) {
    return getRealLeft(id) + getElement(id).offsetWidth;
}

function getRealBottom(id) {
    return getRealTop(id) + getElement(id).offsetHeight;
}


function getElementsByStyleClass (className) {
    var all = document.all ? document.all : document.getElementsByTagName('*');
    var elements = new Array();
    for (var e = 0; e < all.length; e++) {
        if (all[e].className == className) {
            elements[elements.length] = all[e];
        }
    }
    return elements;
}


function turn_off_by_class(classn1, classn2) {
    var all = document.all ? document.all : document.getElementsByTagName('*');
    //var elements = new Array();
    for (var e = 0; e < all.length; e++) {
        if (all[e].className == classn1 || all[e].className == classn2) {
            //elements[elements.length] = all[e];
            all[e].style.visibility= 'hidden';
        }
    }
    //return elements;
}


function showImage(URL) {
	window.open(URL, 'image', 'scrollbars')
}

function swapOptions(selectCtrl, newOptions) {
	selectCtrl.disabled = false;
	if (!(newOptions)) {
		selectCtrl.disabled = true;
		return 0;
	}
	for (i = 0; i < newOptions.length; i++) {
		selectCtrl.length = newOptions.length;
		selectCtrl.options[i].text = newOptions[i];
	}
}

function focusField(element, text) { //removes default text in search field
  if (element.value == text) {
	element.value = "";
  }
}

function blurField(element, text) { //removes default text in search field if left empty
  if (element.value == "") {
	element.value = text;
  }
}


function toggleit(the_id) {
 if( getElement(the_id).style.display=='none' ){
   var el = getElement(the_id);
   if(el) el.style.display = '';
 }else{
   var el = getElement(the_id);
   if(el) el.style.display = 'none';
 }
}

function turn_off(the_id) {
   var el = getElement(the_id);
   if(el) el.style.display = 'none';
}

function toggleit_and_off(the_id, offid1, offid2) {
   toggleit(the_id);
   turn_off(offid1);
   turn_off(offid2);
}






viewport = {
  getWinWidth: function () {
    this.width = 0;
    if (window.innerWidth) this.width = window.innerWidth - 18;
    else if (document.documentElement && document.documentElement.clientWidth) 
  		this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth) 
  		this.width = document.body.clientWidth;
  },
  
  getWinHeight: function () {
    this.height = 0;
    if (window.innerHeight) this.height = window.innerHeight - 18;
  	else if (document.documentElement && document.documentElement.clientHeight) 
  		this.height = document.documentElement.clientHeight;
  	else if (document.body && document.body.clientHeight) 
  		this.height = document.body.clientHeight;
  },
  
  getScrollX: function () {
    this.scrollX = 0;
  	if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset;
  	else if (document.documentElement && document.documentElement.scrollLeft)
  		this.scrollX = document.documentElement.scrollLeft;
  	else if (document.body && document.body.scrollLeft) 
  		this.scrollX = document.body.scrollLeft; 
  	else if (window.scrollX) this.scrollX = window.scrollX;
  },
  
  getScrollY: function () {
    this.scrollY = 0;    
    if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset;
    else if (document.documentElement && document.documentElement.scrollTop)
  		this.scrollY = document.documentElement.scrollTop;
  	else if (document.body && document.body.scrollTop) 
  		this.scrollY = document.body.scrollTop; 
  	else if (window.scrollY) this.scrollY = window.scrollY;
  },
  
  getAll: function () {
    this.getWinWidth(); this.getWinHeight();
    this.getScrollX();  this.getScrollY();
  }
  
}


var menuLayers = {
  timer: null,
  activeMenuID: null,
  offX: 4,   // horizontal offset 
  offY: 6,   // vertical offset 
  show: function(id, e, hang_id) {
    var mnu = getElement(id);
    if (!mnu) return;

    this.activeMenuID = id;
    if ( mnu.onmouseout == null ) mnu.onmouseout = this.mouseoutCheck;
    if ( mnu.onmouseover == null ) mnu.onmouseover = this.clearTimer;
    viewport.getAll();
    if(hang_id) {
        this.position_hang(mnu,e, hang_id);
    } else {
        this.position(mnu,e);
    }
  },
  
  hide: function() {
    this.clearTimer();
    if (this.activeMenuID && document.getElementById) {
      if(browser == "Safari") {
          // safari weirdness... so we make it hide a bit slower.
          this.timer = setTimeout("getElement('"+menuLayers.activeMenuID+"').style.visibility = 'hidden'", 4000);
      } else {
          this.timer = setTimeout("getElement('"+menuLayers.activeMenuID+"').style.visibility = 'hidden'", 200);
      }
    }
  },
  

  position_hang: function(mnu, e, hang_id) {
    // this one hangs from the bottom of the given id.
    var x = getRealLeft(hang_id);
    //var y = getRealBottom(hang_id);
    var y = getRealTop(hang_id) - mnu.offsetHeight;


    //x += -20;
    //y += -4;

    //var x = e.pageX? e.pageX: e.clientX + viewport.scrollX;
    //var y = e.pageY? e.pageY: e.clientY + viewport.scrollY;
    //x += -20;
    //if ( x + mnu.offsetWidth + this.offX > viewport.width + viewport.scrollX )
    //  x = x - mnu.offsetWidth - this.offX;
    //else x = x + this.offX;

    //if (x < 0) {
    //    x = 150;
    //}
  
    //if ( y + mnu.offsetHeight + this.offY > viewport.height + viewport.scrollY )
    //  y = ( y - mnu.offsetHeight - this.offY > viewport.scrollY )? y - mnu.offsetHeight - this.offY : viewport.height + viewport.scrollY - mnu.offsetHeight;
    //else y = y + this.offY;
    
    mnu.style.left = x + "px"; 
    mnu.style.top = y + "px";
    this.timer = setTimeout("getElement('" + menuLayers.activeMenuID + "').style.visibility = 'visible'", 200);
    //getElement('" + menuLayers.activeMenuID + "').style.visibility = 'visible';
  },




  position: function(mnu, e) {
    var x = e.pageX? e.pageX: e.clientX + viewport.scrollX;
    var y = e.pageY? e.pageY: e.clientY + viewport.scrollY;
    x += -20;
    if ( x + mnu.offsetWidth + this.offX > viewport.width + viewport.scrollX )
      x = x - mnu.offsetWidth - this.offX;
    else x = x + this.offX;

    if (x < 0) {
        x = 150;
    }
  
    if ( y + mnu.offsetHeight + this.offY > viewport.height + viewport.scrollY )
      y = ( y - mnu.offsetHeight - this.offY > viewport.scrollY )? y - mnu.offsetHeight - this.offY : viewport.height + viewport.scrollY - mnu.offsetHeight;
    else y = y + this.offY;

    
    mnu.style.left = x + "px"; mnu.style.top = y + "px";
    this.timer = setTimeout("getElement('" + menuLayers.activeMenuID + "').style.visibility = 'visible'", 200);
  },
  
  mouseoutCheck: function(e) {
    e = e? e: window.event;
    // is element moused into contained by menu? or is it menu (ul or li or a to menu div)?
    var mnu = getElement(menuLayers.activeMenuID);
    var toEl = e.relatedTarget? e.relatedTarget: e.toElement;
    if ( mnu != toEl && !menuLayers.contained(toEl, mnu) ) menuLayers.hide();
  },
  
  // returns true of oNode is contained by oCont (container)
  contained: function(oNode, oCont) {
    if (!oNode) return; // in case alt-tab away while hovering (prevent error)
    while ( oNode = oNode.parentNode ) 
      if ( oNode == oCont ) return true;
    return false;
  },

  clearTimer: function() {
    if (menuLayers.timer) clearTimeout(menuLayers.timer);
  }
  
}







function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}



