// require <x_core.js> <x_event.js>
var oDivAnimate = new Array;	// ref to animating divs

function expandoShowHide(oCaller) {
	var idx = 0;
	while (oDivAnimate[idx] != null) idx++;
	
	oDivAnimate[idx] = xParentTag(oCaller, "DIV");
	var oExpando = oDivAnimate[idx].expando;
	// disable previous animation of this expando
	if (oExpando.timer != 0) {
		window.clearInterval(oExpando.timer);
	}
	if (oExpando.visible == oExpando.p.displayOff) {
		oExpando.visible = oExpando.p.displayOn;
		expandoAnimateDown(idx);
		oExpando.DDPic.src = oExpando.p.picUp;
	} else {
		oExpando.visible = oExpando.p.displayOff;
		expandoAnimateUp(idx);
		oExpando.DDPic.src = oExpando.p.picDown;
	}
}

function expandoAnimateDown(idx) {
	var oExpando = oDivAnimate[idx].expando;
	var oTableHeader = oExpando.tableHeader;
	var oTableContent = oExpando.tableContent;
	var oDivContent = xParent(oTableContent, true);
	
	var endPosTop = xPageY(oTableHeader) + xHeight(oTableHeader);
	var endPosLeft = xPageX(oTableHeader);
	
	oDivContent.style.position = "absolute";
	// FIXES:
	if (xIE4Up) endPosLeft += oExpando.p.fixSMIEX;
	if (xG) endPosLeft += oExpando.p.fixSMGX;
	
	oDivContent.style.left = endPosLeft + 'px';
	oDivContent.style.top = -9999 + 'px';
	oTableContent.style.display = oExpando.p.displayOn;
	
	xClip(oDivContent, 0, 9999, 0, 0);
	
	oExpando.visibleHeight = 0;
	oExpando.scrollLen = oExpando.contentHeight; // aminate counter
	oExpando.scrollStep = oExpando.p.scrollByPx;
	oExpando.scrollDirection = +1;
	oExpando.timer = setInterval('expandoAnimateLoop('+idx+')', oExpando.p.scrollStepTimeMs);
}


function expandoAnimateUp(idx) {
	var oExpando = oDivAnimate[idx].expando;
	var oTableHeader = oExpando.tableHeader;
	var oTableContent = oExpando.tableContent;
	var oDivContent = xParent(oTableContent, true);
	
	var endPosTop = xPageY(oTableHeader) + oExpando.headerHeight;
	var startPosTop = endPosTop - xHeight(oTableContent);
	
	oDivContent.style.position = "absolute";
	oDivContent.style.top = endPosTop + 'px';
	oTableHeader.style.marginBottom = (xHeight(oTableContent) + oExpando.p.spaceBetweenMenusPx) + 'px';
	oTableContent.style.marginBottom = 0 + 'px';
	
	oExpando.visibleHeight = xHeight(oTableContent);
	oExpando.scrollLen = xHeight(oTableContent);
	oExpando.scrollStep = oExpando.p.scrollByPx;
	oExpando.scrollDirection = -1;
	oExpando.timer = setInterval('expandoAnimateLoop('+idx+')', oExpando.p.scrollStepTimeMs);
}


function expandoAnimateLoop(idx) {
//	window.status += idx;
//	if (window.status.length > 100) window.status = window.status.substr(100,110);
	var oExpando = oDivAnimate[idx].expando;
	var oTableHeader = oExpando.tableHeader;
	var oTableContent = oExpando.tableContent;
	var oDivContent = xParent(oTableContent, true);
	var step = oExpando.scrollStep;
	
	// next step
	oExpando.visibleHeight += step * oExpando.scrollDirection;
	oExpando.scrollLen -= step;	// counter
	
	// scroll part
	oTableHeader.style.marginBottom = (oExpando.visibleHeight + oExpando.p.spaceBetweenMenusPx) + 'px';
	var posTop = xPageY(oTableHeader) + oExpando.headerHeight - oExpando.contentHeight + oExpando.visibleHeight;
//	alert(posTop+" = "+xPageY(oTableHeader)+"+"+oExpando.headerHeight+"-"+oExpando.contentHeight+"+"+oExpando.visibleHeight);
	// FIXES:
	if (xIE4Up) posTop += oExpando.p.fixSMIEY;
	if (xG) posTop += oExpando.p.fixSMGY;
	
	oDivContent.style.left = xPageX(oTableHeader) + 'px';
	oDivContent.style.top = posTop + 'px';
	xClip(oDivContent, oExpando.contentHeight - oExpando.visibleHeight, 9999, oExpando.contentHeight, 0);
	
	if (oExpando.scrollLen <= 0) {	// scroll end
		if (oExpando.scrollDirection == +1) {	// scroll DOWN end
			// fix scroll overflow
			oExpando.tableHeader.style.marginBottom = oExpando.p.spaceBetweenMenusAndSubmenuPx + 'px';
			oDivContent.style.position = "static";
			oExpando.tableContent.style.marginBottom = oExpando.p.spaceBetweenMenusPx + 'px';
		} else {	// scroll UP end
			// fix scroll overflow
			oExpando.tableHeader.style.marginBottom = oExpando.p.spaceBetweenMenusPx + 'px';
			oExpando.tableContent.style.display = oExpando.p.displayOff;
		}
		// clean up and exit
		window.clearInterval(oExpando.timer);
		oDivAnimate[idx] = null;
	}
}


