/**
 * Menu Offices (mo) - выпадающее меню по клику (onclick)
 */
function MoShow(event) {
	// определяем рабочие слои меню
	var wrap = document.getElementById('mo');
	var head = document.getElementById('mo_header');
	var cont = document.getElementById('mo_content');
	
	// определяем позицию и размеры элементов
	var wrap_pos = MoGetElementPosition(wrap.id);
	var head_pos = MoGetElementPosition(head.id);
	var cont_pos = MoGetElementPosition(cont.id);
	
	// выбираем действие в зависимости от события
	// click (открыть или закрыть)
	if ( event.type == 'click' ) {
		// если mo_content ещё не открыт, раскрываем меню
		if ( cont.style.display == '' ) {
			cont.style.display = 'block';			
			MoTameIE6(1);			
		}
		// иначе, закрываем
		else if ( cont.style.display == 'block' ) {
			cont.style.display = '';
			MoTameIE6(0);
		}
	}
	// mouseout (закрыть или проход по меню)
	else if ( event.type == 'mouseout' ) {
		// если mo_content ещё не открыт, выходим
		if ( cont.style.display == '' ) {
			return;	
		}
		// если mo_content открыт, по координатам решаем, когда сворачивать меню
		else if ( cont.style.display == 'block' ) {			
			// получаем координаты мыши
			var mouse = MoMouseShowHandler(event);	
			// выход слева
			if ( mouse.x <= wrap_pos.left + 1 ) { // +1 для "математика" IE
				cont.style.display = '';
				MoTameIE6(0);
			}			
			// выход справа
			if ( mouse.x >= wrap_pos.left + head_pos.width ) {
				cont.style.display = '';
				MoTameIE6(0);
			}
			// выход сверху
			else if ( mouse.y <= head_pos.top ) {
				cont.style.display = '';
				MoTameIE6(0);
			}
			// выход снизу
			else if ( mouse.y >= cont_pos.top + cont_pos.height ) {
				cont.style.display = '';
				MoTameIE6(0);
			}
		}
	}
}

/**
 * Укращение IE6 (фикс багов)
 */
function MoTameIE6(action) {
	if ( MoDetectIE6() == true ) {		
		
		// 1. Баг с select'орами формы, которые игнорируют z-index	
		// найдём и спрячем все селеторы или откроем после закрытия меню
		if ( action == 1 ) { visibility = 'hidden'; }
		else if ( action == 0 ) { visibility = 'visible'; }		
		var sel_count = document.getElementsByTagName('select');
		if ( sel_count.length > 0 ) {
			for (var i = 0; i < sel_count.length; i++) {
				sel_count[i].style.visibility = visibility;
			}
		}

		// 2. Баг с не заданными явно z-index'ами под абсолютным слоем меню
		// насильно зададим слоям, которые попадают под меню и не имеют заданной козиции, position = static
		// координаты и размеры выпадающего списка меню
		var cont_pos = MoGetElementPosition('mo_content');
		// найдём все div элементы страницы
		var div_count = document.getElementsByTagName('div');
		// обрабатываем их
		if ( div_count.length > 0 ) {
			for (var i = 0; i < div_count.length; i++) {
				div = div_count[i];
				div_c_name = div.className;
				
				// если у слоя нет id, добавим ему свой
				if ( div.id == '' ) { div.id = 'mo_' + div_c_name; }
				
				// определяем координаты и размеры текущего слоя
				div_pos = MoGetElementPosition(div.id);
				
				// для всех слоёв кроме слоя меню
				if ( div_c_name != 'mo_content' ) {					
					// вычисляем слои и задаём статичное положение
					if ( action == 1 ) {
						// супер-формула вычисления положений слоёв
						if ( ( div_pos.left + div_pos.width >= cont_pos.left ) && ( div_pos.left <= cont_pos.left + cont_pos.width ) && ( div.style.position == '' ) )
						{
							if ( div_pos.top + div_pos.height >= cont_pos.top )
							{
								// позиционируем как статичные
								div.style.position = 'static';
								
								// подчищаем созданные id
								if( div.id == 'mo_' + div_c_name ) { div.id = ''; }								
							}
						}
					}
					// вычисляем слои и возвращаем их "пустую" позицию
					else if ( action == 0 ) {
						if ( ( div_pos.left + div_pos.width >= cont_pos.left ) && ( div_pos.left <= cont_pos.left + cont_pos.width ) && ( div.style.position == 'static' ) )
						{
							if ( div_pos.top + div_pos.height >= cont_pos.top )
							{
								// возвращаем пустое позиционирование
								div.style.position = '';
								
								// подчищаем созданные id
								if( div.id == 'mo_' + div_c_name ) { div.id = ''; }
							}
						}					
					}
				}// if				
			}// for
		}// if баг 2	
		
	}
}

/**
 * Определяем позицию и размеры элемента
 */
function MoGetElementPosition(elemId) {
    var elem = document.getElementById(elemId);	
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;	
    var l = 0;
    var t = 0;	
    while (elem) {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }
    return { 'left':l, 'top':t, 'width': w, 'height':h };
}

/**
 * Получаем координаты мыши
 */
function MoMouseShowHandler(e) {
	e = e || window.event;
	if (e.pageX == null && e.clientX != null ) { 
		var html = document.documentElement;
		var body = document.body;
		e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
		e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
	}
	return { 'x':e.pageX, 'y':e.pageY };
}

/**
 * Определитель IE6
 */
function MoDetectIE6() {
	var browser = navigator.appName;
	if (browser == 'Microsoft Internet Explorer') {
		var b_version = navigator.appVersion;
		var re = /\MSIE\s+(\d\.\d\b)/;
		var res = b_version.match(re);
		if (res[1] <= 6) {
			return true;
		}
	}
	return false;
}
