var underhiddencombo = [];
var underhiddencombovisibility = [];


//
// Function hides all comboboxes & IFRAMEs resides under OBJ object
// but the ones which belongs to OBJ itself
// 
function hideUnderlaying(obj)
{
	// show currently hidden items
	showUnderlaying();
	
	var docall = document.getElementsByTagName("SELECT");
 	HideInCollection(obj, docall );

	docall = document.getElementsByTagName("IFRAME");
 	HideInCollection(obj, docall );
	
	return;	
}

//
// Function hides all comboboxes & IFRAMEs resides under OBJ object
// but the ones which belongs to OBJ itself
// 
function showUnderlaying()
{
	// 
	for(var i=0; i<underhiddencombo.length; i++ )
	{
		underhiddencombo[i].style.visibility = underhiddencombovisibility[i]
	}

	// empty array
	underhiddencombo.length = 0;
	underhiddencombovisibility.length = 0;
	return;	
}

// hides only elements in collection DOCALL
function HideInCollection(obj, docall) 
{
	var k = underhiddencombo.length;
	var doclength = docall.length;  
	for (var i = 0 ; i < doclength ; i++)
	{
		if (!obj.contains(docall[i]))
		{
			if (isUnderObject(obj, docall[i])) 
			{
			    underhiddencombovisibility[k] = docall[i].style.visibility;
			    underhiddencombo[k] = docall[i];
			    docall[i].style.visibility = "hidden";
			   	k++;
    		}
		}
	}
}

//
// Returns TRUE if testObj is located under obj 
//
function isUnderObject(obj, testObj)
{
	var result = false;
	var coord = fGetXY(obj);
	var divY1 = coord.y;
	var divY2 = divY1 + obj.offsetHeight;
	var divX1 = coord.x;
	var divX2  = divX1 + obj.offsetWidth;
	coord = fGetXY(testObj);
	var testObjY1 = coord.y;
	var testObjY2 = testObjY1 + testObj.offsetHeight;
	var testObjX1 = coord.x;
	var testObjX2 = testObjX1 + testObj.offsetWidth;
	
	// alert("divY1 = " + divY1 +"; divY2 = " + divY2 + "; divX1 = " + divX1 + "; divX2 = " + divX2 + "\n" + "testObjY1 = " + testObjY1 +"; testObjY2 = " + testObjY2 + "; testObjX1 = " + testObjX1 + "; testObjX2 = " + testObjX2)
	if (((divY1 <= testObjY1 && testObjY1 <= divY2) && ((testObjX1 <= divX2 && testObjX2 >= divX1) || (testObjX1 <= divX1 && testObjX2 >= divX2)) ) ||
	   ((divY1 <= testObjY2 && testObjY2 <= divY2) && ((testObjX1 <= divX2 && testObjX2 >= divX1) || (testObjX1 <= divX1 && testObjX2 >= divX2)) ))
	{
		result = true;
	}
	return(result);
}


function Point(iX, iY)
{
    this.x = iX;
    this.y = iY;
}	
	
function fGetXY(aTag)
{
	var oTmp = aTag;
	var pt = new Point(0,0);
	do 
	{
        pt.x += oTmp.offsetLeft;
        pt.y += oTmp.offsetTop;
        oTmp = oTmp.offsetParent;
	} 
	while(oTmp.tagName!="BODY");
	return pt;
}
