//
//  JavaSCript HideSelect
//  This set of functions is used to detect and hide select boxes in IE which
//	could interfere and display over menu layers etc.
//
//	when displaying a Layer add the function   hideInterferingElements( theMenuLayerToBeDisplayed );
//  to the code to hide all select boxes that may intefere with this layer;
//
// 	when the layer is hidden again use the function   replaceHiddenElements( theMenuLayerBeingHidden );
//  this will then re-display all the select boxes hidden in the step above
//

var hideArrayID = new Array();
var hideArrayLayer = new Array();


function hideInterferingElements( theLayer ){

	var selectList = new Array();
	selectList = findAllSelect();
	//alert(selectList[0]);
	var i;
	i = 0;
	var stillMore;
	stillMore = true;
	
	while( selectList[i] ){
	
		var thisElement;
		thisElement = selectList[i];
	
		if( checkOverlay( theLayer, thisElement )){
			var elementObj;
			elementObj = findObj(thisElement);
			if(elementObj.style.visibility != "hidden"){
				elementObj.style.visibility = "hidden";
				pushToHidden( thisElement, theLayer);
			}
		}
		i++;
			
	}


}//end hideInterfering

function replaceHiddenElements( theLayer ){

	var i;
	i = 0;

	while (hideArrayID[i]){
		if(hideArrayLayer[i] == theLayer){
			
			var elementObj;
			elementObj = findObj(hideArrayID[i])
			elementObj.style.visibility = "visible";		
			hideArrayLayer[i] = 0;
		}
			i = i + 1;
	}

}// end replaceHiddenElements


function 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=findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}


function pushToHidden( objID, LayerID){
	var i;
	i = 0;
	var recorded;	

		while (hideArrayID[i]){
			if(hideArrayLayer[i] == 0 && !recorded){
				hideArrayID[i] = objID;
				hideArrayLayer[i] = LayerID;
				recorded = true;
			}
			i = i + 1;
		}
		if(!recorded){
			hideArrayID[i] = objID;
			hideArrayLayer[i] = LayerID;
		}	


}// End pushToHidden

function takeFromHidden(LayerID){

	var i;
	i = 0;

	while (hideArrayID[i]){
		if(hideArrayLayer[i] == LayerID){
			hideArrayLayer[i] = 0;
		}
			i = i + 1;
	}

}// End takeFromHidden



function checkOverlay( layerID, objectID ){

	var layerPosArray = new Array();
	var objPosArray = new Array();
	var layerLink, objectLink;
	var layerTop, layerLeft, layerWidth, layerHeight;
	var objTop, objLeft, objWidth, objHeight;
	var intercepts;
	
	layerLink = findObj(layerID);
	objectLink = findObj(objectID);
	
	layerPosArray = findPosition(layerLink);
	objPosArray = findPosition(objectLink);
	
	layerLeft = layerPosArray[0];
	layerTop = layerPosArray[1];
	layerWidth = layerPosArray[2];
	layerHeight = layerPosArray[3];
	objLeft = objPosArray[0];
	objTop = objPosArray[1];
	objWidth = objPosArray[2];
	objHeight = objPosArray[3];
	
	//  4 possible layouts
	//
	//           |
	//       1   |    2
	//  ---------|----------
	//       3   |    4 
	//           |
	//
	
	
	if(objTop > layerTop && objLeft > layerLeft){  // layout 4			
		var totalLayerWidth, totalLayerHeight;
		totalLayerWidth = layerLeft + layerWidth;
		totalLayerHeight = layerTop + layerHeight;
		if( totalLayerWidth > objLeft && totalLayerHeight > objTop ){
			intercepts = true;
		}else{
			intercepts = false;
		}	
	}else if( objTop > layerTop && objLeft < layerLeft ){ // layout 3
		var totalObjWidth, totalLayerHeight;
		totalObjWidth = objLeft + objWidth;
		totalLayerHeight = layerTop + layerHeight;
		if( totalLayerHeight > objTop && totalObjWidth > layerLeft){
			intercepts = true;
		}else{
			intercepts = false;
		}	
	}else if( objTop < layerTop && objLeft > layerLeft ){// layout 2
		var totalObjHeight, totalLayerWidth;
		totalObjHeight = objTop + objHeight;
		totalLayerWidth = layerLeft + layerWidth;
		if( objLeft < totalLayerWidth && layerTop < totalObjHeight){
			intercepts = true;
		}else{
			intercepts = false;
		}	
	}else if( objTop < layerTop && objLeft < layerLeft ){ //layout 1
		var totalObjHeight, totalObjWidth;
		totalObjHeight = objTop + objHeight;
		totalObjWidth = objLeft + objWidth;
		if( totalObjHeight > layerTop && totalObjWidth > layerLeft ){
			intercepts = true;
		}else{
			intercepts = false;
		}	
	}else{
		//alert("Error in calculations");
	}
	
	
	return intercepts;	
	
}




function findAllSelect(){

	var idArray = new Array();
	var i = 0;
	
	var allSelects = document.getElementsByTagName("select");
	
	while(allSelects[i]){		
		idArray[i] = allSelects[i].id;
		i++;	
	}

	return idArray;
	
}// end function findAllSelect


function findPosition( oLink ) {

	var objwidth, objheight;
	objwidth = oLink.offsetWidth;
	objheight = oLink.offsetHeight;
	
  if( oLink.offsetParent ) {
    for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
      posX += oLink.offsetLeft;
      posY += oLink.offsetTop;
    }
    return [ posX, posY, objwidth, objheight];
  } else {
    return [ oLink.x, oLink.y, objwidth, objheight ];
  }
}// End findPosition



 //Get the scroll top position
 function getScrollTop()
 {
    if (BrowserDetect.browser == "Firefox")
    {
        return window.pageYOffset; 
    }
    else
    {
        return (document.documentElement.scrollTop || document.body.scrollTop);
    }
 }