/**
 * Div bases drop-down menu
 *
 * @changes 20.09.2005 / marc / Created
 *
 * @copyright Copyright © 2005 / CHILIBYTES Böhm & Welte GbR / www.chilibytes.com
 * @author marc
 * @version 1.1.0
 * @package Deltemed-International
 * @subpackage Core
 *
 */

var _mouseOverCssSuffix = "__hover";
var _subMenuBorderBlinderSuffix = "__bblind";
var _subMenuChildId = null;
var _currMenuObjA = new Array();
var _closingTimerA = new Array();
var _scannerObj = null;
var _scanParentObj = null;
var _scannerTimer = null;
var _scannerDelay = 2;
var _langDirection = "ltr";

/**
 * Initialize the dropdown menu. Set the submenu-child
 */
function DMI_DropDownMenuInit( subMenuChildId, langDirection ) {
    _subMenuChildId = subMenuChildId;
    _langDirection = langDirection;
}

/**
 * Called by the menuitems to open or close the dropdown menu
 */
function DMI_MenuItemMouseMove( miId, miObj, scannerObj ) {
    var cssSuffixPos = null;
    var timerParam = null;
    if ( miObj && !_closingTimerA[miId] ) {
        cssSuffixPos = miObj.className.indexOf( _mouseOverCssSuffix );
        if ( cssSuffixPos == -1 ) {
            miObj.className = miObj.className + _mouseOverCssSuffix;
            _currMenuObjA[miId] = miObj;
            _scannerObj = scannerObj;
            _DMI_SubMenuControl( miId, true );
        }
        else {
            _closingTimerA[miId] = window.setTimeout( "DMI_ClosingTimer( '" + miId + "' )", 50 );
        }
    }
    else if ( _closingTimerA[miId] ) {
    	window.clearTimeout( _closingTimerA[miId] );
    	_closingTimerA[miId] = null;
    }
}

/**
 * Called by the submenuitems to close the dropdown-menu on link-click
 */
function DMI_SubMenuItemClick( miId ) {
	_scanParentObj = _currMenuObjA[miId];
	_scannerTimer = window.setTimeout( "_DMI_ScannerThread()", 0 );
	DMI_MenuItemMouseMove( miId, _currMenuObjA[miId] );
}

/**
 * Called by the submenuitems to stop or continue the closing-procedure
 */
function DMI_SubMenuItemMouseMove( miId, mouseOut ) {
    var cssSuffixPos = null;
    var timerParam = null;
    if ( _closingTimerA[miId] ) {
        window.clearTimeout( _closingTimerA[miId] );
        _closingTimerA[miId] = null;
    }
    else if ( _currMenuObjA[miId] && mouseOut == true ) {
        cssSuffixPos = _currMenuObjA[miId].className.indexOf( _mouseOverCssSuffix );
        _closingTimerA[miId] = window.setTimeout( "DMI_ClosingTimer( '" + miId + "' )", 80 );
    }
}

/**
 * Called on a specified timeout to close the dropdown-menu
 */
function DMI_ClosingTimer( miId ) {
	var cssSuffixPos = null;
    if ( _currMenuObjA[miId] ) {
   		cssSuffixPos = _currMenuObjA[miId].className.indexOf( _mouseOverCssSuffix );
        _closingTimerA[miId] = null;
        _currMenuObjA[miId].className = _currMenuObjA[miId].className.substring( 0, cssSuffixPos );
        _currMenuObjA[miId] = null;
        _DMI_SubMenuControl( miId, false );
    }
}

/**
 * Open or close the dropdown-menu
 */
function _DMI_SubMenuControl( miId, visible ) {
    var subMenuObj = null;
    var childObj = null;
    var childDocObj = null;
    var subMenuBlinderObj = null;
    var ifBodyObj = document.getElementById( DMI_PAGE_ID_IFRAME_CONTENT );
    var vStateShim = ( visible == true ? "visible" : "hidden" );
    var displayState = ( visible == true ? "block" : "none" );
    vStateShim = "hidden";
    var scrollPos = 0;
    var scrollbarRightOffset = 0;
    var newWidth = 0;
    if ( document.frames ) {
    	childObj = document.frames[_subMenuChildId]
        childDocObj = childObj.document;
        scrollPos = childDocObj.documentElement.scrollTop;
        scrollbarRightOffset = ifBodyObj.offsetWidth - childDocObj.documentElement.clientWidth
        if ( childDocObj && childDocObj.body ) {
	        if ( childDocObj.body.scrollTop > scrollPos ) scrollPos = childDocObj.body.scrollTop;
	    }
    }
    else {
    	childObj = document.getElementById( _subMenuChildId );
        if ( childObj && childObj.contentDocument ) {
	        childDocObj = childObj.contentDocument;
    	    scrollPos = childObj.contentWindow.pageYOffset;
        	vStateShim = "hidden";
        }
    }
    if ( childDocObj ) {
        subMenuObj = childDocObj.getElementById( miId );
        if ( subMenuObj ) {
            subMenuBlinderObj = childDocObj.getElementById( miId + _subMenuBorderBlinderSuffix );
            if ( _currMenuObjA[miId] && subMenuBlinderObj ) {
            	newWidth = _currMenuObjA[miId].offsetLeft;
            	if ( _langDirection == "rtl" ) {
            		newWidth += _currMenuObjA[miId].offsetWidth - scrollbarRightOffset - 20;
            		subMenuBlinderObj.style.right = "0px";
            	}
            	else {
            		subMenuBlinderObj.style.left = "0px";
            		newWidth += 10;
            	}
                subMenuObj.style.left = newWidth + "px";
                subMenuObj.style.top = scrollPos + "px";
                subMenuBlinderObj.style.width = ( _currMenuObjA[miId].offsetWidth - 2 ) + "px";
            }
            subMenuObj.style.display = displayState;
        }
    }
}

/**
 *
 */
function _DMI_ScannerThread() {
	var scanPosX = null;
	var newScanPosX = null;
	var offset = 2;
	var parentOffset = null;
	if ( _scannerObj && _scanParentObj && _scanParentObj.offsetParent ) {
		parentOffset = _scanParentObj.offsetParent.offsetLeft;
		scanPosX = parentOffset + parseInt( ( _scanParentObj.offsetLeft + ( _scanParentObj.offsetWidth / 2 ) ) - ( _scannerObj.offsetWidth / 2 ) );
		newScanPosX = _scannerObj.offsetLeft
		if ( Math.abs( scanPosX - newScanPosX ) <= 60 ) _scannerDelay++;
		if ( _scannerObj.offsetLeft != scanPosX ) {
			if ( _scannerObj.offsetLeft < scanPosX ) {
				if ( ( newScanPosX + offset ) > scanPosX ) offset = 1;
				newScanPosX += offset;
			}
			else {
				if ( ( newScanPosX + offset ) < scanPosX ) offset = 1;
				newScanPosX -= offset;
			}
			_scannerObj.style.left = newScanPosX + "px";
			_scannerTimer = window.setTimeout( "_DMI_ScannerThread()", _scannerDelay );
		}
		else {
			window.clearTimeout( _scannerTimer );
			_scannerDelay = 0;
		}
	}
	else {
		window.clearTimeout( _scannerTimer );
	}
}

/**
 *
 */
function DMI_ScannerPosDirectSet( menuItemId, scannerObj ) {
	var scannerParentObj = document.getElementById( menuItemId );
	var scanPosX = null;
	if ( scannerObj && scannerParentObj && scannerParentObj.offsetParent ) {
		scanPosX = scannerParentObj.offsetParent.offsetLeft + parseInt( ( scannerParentObj.offsetLeft + ( scannerParentObj.offsetWidth / 2 ) ) - ( scannerObj.offsetWidth / 2 ) );
		scannerObj.style.left = scanPosX + "px";
	}
}