// Menus2.js
// (C) in.gr

var menus_Captions = new Array();
var menus_bCarpetOn = new Array();
var menus_strRestoreClasses = new Array();

function CollapseThis(e)
{
	Collapse(document.all ? event.srcElement : e.currentTarget);
}

function SetMenuCarpet(bEnable, Contents)
{
	if (!Contents) return;
	var nLevel = GetLevel(Contents);

	menus_bCarpetOn[nLevel] = bEnable;
	
	var MenuCarpet = GetElement("MenuCarpet_" + nLevel);
	
	if (!MenuCarpet) {
		MenuCarpet = GetElement("MenuCarpet")
		MenuCarpet = MenuCarpet.cloneNode(true);
		MenuCarpet.id = "MenuCarpet_" + nLevel;
		var Document = GetDocument();
		Document.body.appendChild(MenuCarpet);
	}
	MenuCarpet.onmouseover = CollapseThis;
	
	var Caption = menus_Captions[nLevel];

	if (bEnable) {
		var nStartX1 = AbsoluteX(Caption);
		var nStartX2 = AbsoluteX(Contents);
		var nEndX1 = nStartX1 + Width(Caption);
		var nEndX2 = nStartX2 + Width(Contents);
		var nStartX = nStartX1 < nStartX2 ? nStartX1 : nStartX2;
		var nEndX = nEndX1 > nEndX2 ? nEndX1 : nEndX2;
	
		var nStartY1 = AbsoluteY(Caption);
		var nStartY2 = AbsoluteY(Contents);
		var nEndY1 = nStartY1 + Height(Caption);
		var nEndY2 = nStartY2 + Height(Contents);
		var nStartY = nStartY1 < nStartY2 ? nStartY1 : nStartY2;
		var nEndY = nEndY1 > nEndY2 ? nEndY1 : nEndY2;
		
		nStartX -= 85;
		nEndX += 85;
		nStartY -= 85;
		nEndY += 85;
		
		Move(MenuCarpet, nStartX, nStartY);
		Resize(MenuCarpet, nEndX - nStartX, nEndY - nStartY);
		MenuCarpet.style.zIndex = nLevel;
		Show(MenuCarpet);
		
		var i;
		for (i = 0; i < nLevel; i++) {
			var OtherCarpet = GetElement("MenuCarpet_" + i);
			if (OtherCarpet) Coalesce(OtherCarpet, MenuCarpet);
		}
		
	}
	else {
		var i;
		for (i = nLevel; i < menus_SelectedElements.length; i++) {
			MenuCarpet = GetElement("MenuCarpet_" + i);
			if (MenuCarpet) Hide(MenuCarpet);
			if (menus_Captions[i]) menus_Captions[i].className = menus_strRestoreClasses[i];
		}
		
	}
	
}

function Expand(Caption, Contents, nFadeStep, nFinalOpacity, bSmooth, strHorzAlign, strVertAlign, strRestoreClass, strHighlightClass)
{
	var nCaptionLevel = GetLevel(Caption);
	var nLevel = GetLevel(Contents);
	if (nLevel < nCaptionLevel) nLevel = nCaptionLevel;
	
	if (/*menus_bCarpetOn[nLevel] && */menus_Captions[nLevel] == Caption && menus_bFadingIn[nLevel]) return;
	
	if (Contents) {
	
		SetMenuCarpet(false, Contents);
		
		if (strHighlightClass) {
			if (strHighlightClass.length) {
				SetClass(Caption, strHighlightClass);
			}
		}
		
		menus_nFadeSteps[nLevel] = nFadeStep;
		menus_bSmooth[nLevel] = bSmooth;
		menus_nFinalOpacities[nLevel] = nFinalOpacity;
				
		menus_Captions[nLevel] = Caption;
		
		Caption.style.zIndex = nLevel + 1;
		
		SetupContentsPosition(Caption, Contents, strHorzAlign, strVertAlign);
		menus_strRestoreClasses[nLevel] = strRestoreClass;
		
		if (bSmooth) {
			if (menus_SelectedElements[nLevel] && menus_SelectedElements[nLevel] != Contents) {
				menus_bFadingIn[nLevel] = false;
				menus_bFadingOut[nLevel] = false;
				MenuSwitch(Contents);
				SetOpacity(nLevel, nFinalOpacity);
			}
			else {
				InitFadeIn(Contents);
			}
		}
		else {
			MenuSwitch(Contents);
			SetOpacity(nLevel, nFinalOpacity);
		}
	}
	else {
		Contents = menus_SelectedElements[nLevel];
		
		if (Contents) {
			if (menus_bSmooth[nLevel]) InitFadeOut(Contents);
			else MenuClose(nLevel);
			SetMenuCarpet(false, Contents);
		}
		
		if (strHighlightClass) {
			if (strHighlightClass.length) {
				SetClass(Caption, strHighlightClass);
			}
		}
		
		menus_strRestoreClasses[nLevel] = strRestoreClass;
		menus_Captions[nLevel] = null;
	}
	
}

function Collapse(Carpet)
{
	if (document.all) for (; Carpet && Carpet.tagName != "DIV" || Carpet.scopeName != "HTML"; Carpet = Carpet.parentNode);
	else  for (; Carpet && Carpet.tagName != "DIV"; Carpet = Carpet.parentNode);

	if (!Carpet) return;
	
	var nLevel = GetLevel(Carpet) + 1;
	
	var Contents = menus_SelectedElements[nLevel];
	var Caption = menus_Captions[nLevel];
	
	if (Contents) {
		if (menus_bSmooth[nLevel]) InitFadeOut(Contents);
		else MenuClose(nLevel);
	}
	SetMenuCarpet(false, Caption);
	
	menus_Captions[nLevel] = null;
	
}

function SetClass(Caption, strCSSClass)
{
	try {
		var nLevel = GetLevel(Caption);
		if (!menus_bCarpetOn[nLevel]) {
			if (!menus_strRestoreClasses[nLevel]) menus_strRestoreClasses[nLevel] = Caption.className;
			Caption.className = strCSSClass;
		}
	}
	catch (e) {}
}

