// pulldown2.js
// (c) www.in.gr
// pulldown base code

var menus_nOpacities = new Array();
var menus_nTimerID = 0;
var menus_bFadingIn = new Array();
var menus_bFadingOut = new Array();
var menus_SelectedElements = new Array();
var menus_nInterval = 80;
var menus_nFadeSteps = new Array();
var menus_bSmooth = new Array();
var menus_nFinalOpacities = new Array();

function GetLevel(Element)
{
	if (!Element) return 0;
	if (document.all || document.getElementById) return Element.style.zIndex - 1;
	else return Element.zIndex - 1;
}

function MenuSwitch(SelectedElement)
{
	var nLevel = GetLevel(SelectedElement);
	
	if (!SelectedElement) {
		MenuClose(nLevel);
		return;
	}
	
	if (SelectedElement != menus_SelectedElements[nLevel]) {
		MenuClose(nLevel);
		menus_SelectedElements[nLevel] = SelectedElement;
		Show(SelectedElement);
	}
}

function MenuClose(nLevel)
{
	var i;
	for (i = nLevel; i < menus_SelectedElements.length; i++) {
		var Element = menus_SelectedElements[i];
		if (Element) {
			Hide(Element);
			SetOpacity(i, 0);
			menus_bFadingIn[nLevel] = false;
			menus_bFadingOut[nLevel] = false;
		}
		menus_SelectedElements[i] = null;
	}
}

function SetOpacity(nLevel, nOpacity)
{
	if (!document.all) return;
	menus_nOpacities[nLevel] = nOpacity;
	if (menus_SelectedElements[nLevel]) {
		var ElementStyle = menus_SelectedElements[nLevel].runtimeStyle;
		ElementStyle.filter = "alpha(opacity=" + nOpacity + ")";
	}

}

function StopAnimation()
{
	if (menus_nTimerID) {
		window.clearInterval(menus_nTimerID);
		menus_nTimerID = 0;
	}
}

function StartAnimation()
{
	if (!menus_nTimerID) menus_nTimerID = window.setInterval(FadeAnim, menus_nInterval);
}

function FadeAnim()
{
	var nLevel;
	var bAnimated = false;
	
	for (nLevel = 0; nLevel < menus_SelectedElements.length; nLevel++) {
		
		if (menus_bFadingOut[nLevel]) {
			if (menus_nOpacities[nLevel] == null) menus_nOpacities[nLevel] = 0;
			menus_nOpacities[nLevel] -= menus_nFadeSteps[nLevel];
			if (menus_nOpacities[nLevel] <= 0) {
				SetOpacity(nLevel, 0);
				MenuClose(nLevel);
				menus_bFadingOut[nLevel] = false;
			}
			else SetOpacity(nLevel, menus_nOpacities[nLevel]);
			Debug("Fading out: " + menus_nFadeSteps[nLevel]);

			bAnimated = true;
		}
		else if (menus_bFadingIn[nLevel]) {
			if (!menus_SelectedElements[nLevel]) {
				menus_bFadingIn[nLevel] = false;
				continue;
			}
			if (menus_nOpacities[nLevel] == null) menus_nOpacities[nLevel] = 0;
			menus_nOpacities[nLevel] += menus_nFadeSteps[nLevel];
			Debug("Fading in: " + menus_nFadeSteps[nLevel]);
			if (menus_nOpacities[nLevel] >= menus_nFinalOpacities[nLevel]) {
				SetOpacity(nLevel, menus_nFinalOpacities[nLevel]);
				menus_bFadingIn[nLevel] = false;
			}
			else SetOpacity(nLevel, menus_nOpacities[nLevel]);

			bAnimated = true;
		}

	}
	
	if (!bAnimated) StopAnimation();
}

function InitFadeIn(SelectedElement)
{
	var nLevel = GetLevel(SelectedElement);
	
	if (menus_bFadingIn[nLevel] && SelectedElement == menus_SelectedElements[nLevel]) return;
	MenuSwitch(SelectedElement);
	menus_bFadingIn[nLevel] = true;
	menus_bFadingOut[nLevel] = false;

	if (!menus_bSmooth[nLevel]) {
		SetOpacity(nLevel, menus_nFinalOpacities[nLevel]);
	}
	if (!document.all || !menus_bSmooth[nLevel]) return;
	
//	SetOpacity(nLevel, 0);
	StartAnimation();
	
}

function InitFadeOut(SelectedElement)
{
	var nLevel = GetLevel(SelectedElement);
	
	if (menus_bFadingOut[nLevel] && SelectedElement == menus_SelectedElements[nLevel]) return;
	menus_bFadingOut[nLevel] = true;
	menus_bFadingIn[nLevel] = false;

	if (!document.all || !menus_bSmooth[nLevel]) {
		MenuClose(nLevel);
		return;
	}
	
	MenuSwitch(SelectedElement);
	StartAnimation();
	
}

function AlignContents(Caption, Contents, strHorzAlign, strVertAlign)
{
	var Pos;
	if (document.all) {
		Pos = Contents.runtimeStyle;
	}
	else Pos = document.getElementById ? Contents.style : Contents;
	
	switch (strHorzAlign) {
		case "farleft":
			Pos.left = AbsoluteX(Caption) - Width(Contents);
			break;
		case "right":
			Pos.left = AbsoluteX(Caption) + Width(Caption) - Width(Contents);
			break;
		case "farright":
			Pos.left = AbsoluteX(Caption) + Width(Caption);
			break;
		default: //"left"
			Pos.left = AbsoluteX(Caption);
			break;
	}
	
	switch (strVertAlign) {
		case "fartop":
			Pos.top = AbsoluteY(Caption) - Height(Contents);
			break;
		case "top":
			Pos.top = AbsoluteY(Caption);
			break;
		case "bottom":
			Pos.top = AbsoluteY(Caption) + Height(Caption) - Height(Contents);
			break;
		default: // "farbottom"
			Pos.top = AbsoluteY(Caption) + Height(Caption);
			break;
	}
	

}

function SetupContentsPosition(Caption, Contents, strHorzAlign, strVertAlign)
{
	
	AlignContents(Caption, Contents, strHorzAlign, strVertAlign);

	switch (strHorzAlign) {
		case "farleft":
			if (AbsoluteX(Contents) < 0) {
				AlignContents(Caption, Contents, "farright", strVertAlign);
			}
			break;

		case "farright":
			if (AbsoluteX(Contents) + Width(Contents) > GetDocument().body.clientWidth) {
				AlignContents(Caption, Contents, "farleft", strVertAlign);
			}
			break;

		case "left":
			if (AbsoluteX(Contents) + Width(Contents) > GetDocument().body.clientWidth) {
				AlignContents(Caption, Contents, "right", strVertAlign);
			}
			break;
			
		case "right":
			if (AbsoluteX(Contents) < 0) {
				AlignContents(Caption, Contents, "left", strVertAlign);
			}
			break;
	}
			
	switch (strVertAlign) {
		case "fartop":
			if (AbsoluteY(Contents) < 0) {
				AlignContents(Caption, Contents, strHorzAlign, "farbottom");
			}
			break;
			
		case "farbottom":
			if (AbsoluteY(Contents) + Height(Contents) > GetDocument().body.clientHeight) {
				AlignContents(Caption, Contents, strHorzAlign, "fartop");
			}
			break;

		case "top":
			if (AbsoluteY(Contents) + Height(Contents) > GetDocument().body.clientHeight) {
				AlignContents(Caption, Contents, strHorzAlign, "bottom");
			}
			break;
			
		case "bottom":
			if (AbsoluteY(Contents) < 0) {
				AlignContents(Caption, Contents, strHorzAlign, "top");
			}
			break;
	}
			

}	

