// JavaScript Document
var reUrlTest = /^http\:\/\//i;
function goTo( url, newWindow, opts ){
	if ( url ){
		newWindow ?
			window.open( url, 'poop', "modal=yes,alwaysRaised=yes"+','+opts ) :
			document.location = url;
//			window.open("", "poop", "height=200,width=200,modal=yes,alwaysRaised=yes")
	}
}
function hasClass(elem,className){
	if(!elem || !className || !elem.className) return false;
	var c=elem.className;
	//Убираем нестроковые символы
	c.replace(/\s+/g,' ');
	var cs=c.split(' ');
	for(var i=0;i<cs.length;i++) if(cs[i]===className) return true;
	return false;
}
function removeClass(elem,className){
	if(!elem || !className || !elem.className || !hasClass(elem,className)) return;
	var c=elem.className.replace(/\s+/g,' ');
	elem.className=c.split(className).join('').replace(/\s+/g,' ').replace(/^\s+/,'');
}
function addClass(elem,className){
	if( !elem || !className ) return;
	removeClass(elem,className);
	c=elem.className.replace(/\s+/g,' ')+' '+className;
	elem.className=c.replace(/\s+/g,' ').replace(/^\s+/,'');
}


var menuStack = [],
	timer1=null,
	timer2=null,
	tipTimer=null,
	delay1=100,
	delay2=500;

// Определяем браузер пользователя

isNS4 = (document.layers) ? true : false;
isIE4 = (document.all && !document.getElementById) ? true : false;
isIE5 = (document.all && document.getElementById) ? true : false;
isNS6 = (!document.all && document.getElementById) ? true : false;

var menuM = /^m\d+$/;
var menuC = /\_$/;
var menuI = /^m\d+(\_\d+)+$/;

if (!window.getComputedStyle) {
	window.getComputedStyle = function(el, pseudo) {
		this.el = el;
		this.getPropertyValue = function(prop) {
			var re = /(\-([a-z]){1})/g;
			if (prop == 'float') prop = 'styleFloat';
			if (re.test(prop)) {
				prop = prop.replace(re, function () {
					return arguments[2].toUpperCase();
				});
			}
			return el.currentStyle[prop] ? el.currentStyle[prop] : null;
		}
		return this;
	}
}

if ( isIE4 || isIE5 ) 
	AttachEvent( document, 'readystatechange', checkReady );
else
	AttachEvent( document, 'DOMContentLoaded', checkReady );

function checkReady(){
	if ( document.readyState && document.readyState === 'complete' || document.addEventListener ){
		AttachEvent( document.body, 'click', checkDocumentClick );
		DetachEvent( document, 'DOMContentLoaded', checkReady );
		DetachEvent( document, 'readystatechange', checkReady );
	}
}
function checkDocumentClick( e ){
	e = e || window.target;
	if ( menuStack.length > 0){
		var el = e.srcElement || e.target;
		var id = el.id;		
		if ( el && ( id && !menuM.test( id ) && !menuC.test( id ) && !menuI.test( id ) ) || !id  ) switchMenu ( menuStack[0], false );
	}
}
function menuMouseOver( e ){
	var el = e || ( this !== window ) && this;
	if ( el && el.id ){
		var id = el.id;
		if ( menuM.test( id ) || menuI.test( id ) )
			show( el, id + '_' );
		else if ( menuC.test( id ) ){
			//alert(el.outerHTML);
			cancelHide();
		}
	}
	e.cancelBubble = true;
	return 1;
}
function menuClick( e ){
	var el = e || (this !== window) && this;
	if ( el && el.id ){
		var id = el.id;
		if ( ( menuM.test( id ) || menuI.test( id ) ) && el.getAttribute('href') )
			navigateTo( el.getAttribute('href'), el.getAttribute('target')==='_blank' );
	}
	return 1;
}
function navigateTo( url, newWindow ){
	if ( url ){
		newWindow ?
			window.open( url ) :
			document.location = url;
	}
}
function getelementbyid( myid ) {
	var objElement = null;
	if (isNS4)
		objElement = document.layers[myid];
	else 
		if (isIE4) 
			objElement = document.all[myid];
		else
			if (isIE5 || isNS6)
				objElement = document.getElementById(myid);
	return objElement;
}

function changeStyle( id, vis ){
//	Меняет отображение элемента
	if ( menuC.test( id ) ){
		id = id.substr( 0, id.length - 1 );
		e = getelementbyid( id );
		if ( e )
			if ( hasClass( e, 'hor_menu_item' ) )
				vis ? addClass ( e, 'hor_menu_item_down' ) : removeClass ( e, 'hor_menu_item_down' );
			else if ( hasClass( e, 'm' ) )
				vis ? addClass ( e, 'm_down' ) : removeClass ( e, 'm_down' );
		
	}
}
function switchMenu( id, bolVisible ){
	if ( !getelementbyid( id ) ) return false;
	if( !bolVisible ){
		var level = getLevel( id );
		for ( var i = menuStack.length-1; i >= level-1; i--){
			if( isNS4 || isIE4 )
				getelementbyid( menuStack[i] ).visibility ="hidden";
			else
				if ( isIE5 || isNS6 )
					getelementbyid( menuStack[i] ).style.display = "none";
			menuStack.pop();
		}
	}else{
		if( isNS4 || isIE4 )
			getelementbyid( id ).visibility ="visible";
		else
			if ( isIE5 || isNS6 )
				getelementbyid( id ).style.display = "block";
		if ( getLevel( id ) > menuStack.length ) menuStack.push( id );
		if ( timer1 ) clearTimeout( timer1 );
		timer1 = null;
	}
	changeStyle( id, bolVisible );
	return 1;
}
	
function getCss( elem, prop ){
	var i;
	var re = /(\-([a-z]){1})/g;
	if (prop == 'float') prop = 'styleFloat';
	if (re.test(prop)) {
		prop = prop.replace(re, function () {
			return arguments[2].toUpperCase();
		});
	}
	return elem.currentStyle ?
		elem.currentStyle[prop] :
		getComputedStyle( elem, null ).getPropertyValue( prop );
}
function hasClass(elem,className){
	if(!elem || !className || !elem.className) return false;
	var c=elem.className;
	//Убираем нестроковые символы
	c.replace(/\s+/g,' ');
	var cs=c.split(' ');
	for(var i=0;i<cs.length;i++) if(cs[i]===className) return true;
	return false;
}
function removeClass(elem,className){
	if(!elem || !className || !elem.className || !hasClass(elem,className)) return;
	var c=elem.className.replace(/\s+/g,' ');
	elem.className=c.split(className).join('').replace(/\s+/g,' ').replace(/^\s+/,'');
}
function addClass(elem,className){
	if( !elem || !className ) return;
	removeClass(elem,className);
	c=elem.className.replace(/\s+/g,' ')+' '+className;
	elem.className=c.replace(/\s+/g,' ').replace(/^\s+/,'');
}

	function getLevel( id ){
	//	Получаем уровень вложенности элемента
		var level = 0,
			i = -1;
		while ( ( i = id.indexOf( '_', i + 1 ) ) !== -1 ) level++;
		return level; 
	}
	function cancelHide(){
		if ( timer2 ) clearTimeout( timer2 );
		timer2 = null;
	}
	function onDocumentClick( e ){
		var el = e.srcElement || e.target;
		var id = el.id;
		if ( !/^m\d+/.test( id ) ){
			hide( {srcElement:{id:'m1'}}, true )
		}
	}
	function show( e, id ){
	//	Сначала необходимо проверить, или нет других открытых подпунктов
		var level = getLevel( id );
		if ( menuStack.length >= level ){
			//	Есть открытые менюшки
			//	Проверяем, или это не открытый элемент
			if ( id !== menuStack[ level - 1 ] )
				switchMenu( menuStack[ level - 1 ], false );
		}
		if ( !getelementbyid( id ) ) return false;
		switchMenu( id, true );
		var el = getelementbyid( id );
		var target = e;
		aaa();
		var pos = getOffset( target );
		var cs = getComputedStyle( target, null );
		if ( level > 1 ){
			el.style.left = pos.left + target.offsetWidth + parseInt( cs.getPropertyValue( 'margin-right' ) ) + parseInt( cs.getPropertyValue( 'margin-left' ) ) - 2;
			el.style.top = pos.top - parseInt( cs.getPropertyValue( 'margin-top' ) );
		}else{
			el.style.left = pos.left;
			el.style.top = pos.top + target.offsetHeight;
		}
		cancelHide();
	}
	function hide( e, noDelay ){
		var el = e;
		var level = getLevel( el.id );
		if ( menuStack.length > 0 ){
		//	Убираем весь дочерний уровень
			if ( level > 0 ) level--;
			timer2 = setTimeout( "switchMenu( '" + menuStack[level] + "' )", noDelay ? 10 : delay2 );
		}
	}
		
	function showSubMenu( e, show, right ){
		if (!e) e = window.event;
		var elem = e.srcElement || e.target;
		if (elem){
			var id = elem.id;
			if ( elem.tagName.toLowerCase() === 'li' )
				if ( show ) addClass( elem, 'm_hover' ); else removeClass( elem, 'm_hover' );
			var pe = document.getElementById( id + 'sub' );
			if ( pe ){
				if (show){
					var r = getOffsetSum( elem, document.getElementById( 'topMenu' ) );
					if ( right ){
						pe.style.left = ( parseInt( getComputedStyle( elem.parentNode.parentNode, null ).getPropertyValue('left') ) + elem.offsetWidth*1) + 'px';
						pe.style.top = r.top;
					}else{
						pe.style.left = elem.offsetLeft;
						pe.style.top = ( elem.offsetTop*1 + elem.offsetHeight*1) + 'px';
					}
					pe.style.display='block';
				}else{
					var toElem = e.toElement || e.relatedTarget
					if ( !toElem || toElem.id !== id + 'sub' )
						pe.style.display='none';
				}
			}
		}
	}
	function mSubMouseOut( e, a ){
		e = e || window.event;
		var elem = e.srcElement || e.target;
		var trg = e.toElement || e.relatedTarget;
		if ( elem.tagName.toLowerCase() !== 'li' && ( !trg || !trg.id || trg.id.substring( 0, elem.id.length ) !== elem.id ) )
			elem.style.display = 'none';
	}

function AttachEvent ( obj, eventName, func ){
	if ( obj.attachEvent )
		obj.attachEvent( 'on' + eventName, func );
	else if ( obj.addEventListener )
		obj.addEventListener( eventName, func, false );
	else
		obj['on' + eventName] = func;
}
function DetachEvent ( obj, eventName, func ){
	if ( obj.detachEvent )
		obj.detachEvent( 'on' + eventName, func );
	else if ( obj.removeEventListener )
		obj.removeEventListener ( eventName, func, false );
	else
		obj['on' + eventName] = null;
}

function toggleTipDiv( divId, isVisible ){
	var el = getelementbyid( divId );
	if ( el ){
		if( isNS4 || isIE4 )
			getelementbyid( id ).visibility = isVisible ? 'visible' : 'hidden';
		else
			if ( isIE5 || isNS6 )
				getelementbyid( divId ).style.display = isVisible ? 'block' : 'none';
	}
}
function showTip( e, divId ){
	e = e || ( this !== window ) && this;
	var el = getelementbyid( divId );
	if ( e && el ){
		toggleTipDiv( divId, true );
		var pos = getOffset( e );
		el.style.left = pos.left;
		el.style.top = pos.top + parseInt( e.offsetHeight );
		//alert( 'left: ' + pos.left + '\ntop: ' + (pos.top + parseInt(e.offsetHeight)) );
	}
}
function hideTip( divId ){
	var el = getelementbyid( divId );
	if ( el ){
		tipTimer = setTimeout( 'toggleTipDiv( \'' + divId + '\', false )', delay2 );
	}
}
function cancelTipHide(){
	if ( tipTimer !== null ) clearTimeout( tipTimer );
	tipTimer = null;
}





function getOffset(elem) {
    if (elem.getBoundingClientRect) {
        // "правильный" вариант
        return getOffsetRect(elem)
    } else {
        // пусть работает хоть как-то
        return getOffsetSum(elem)
    }
}

function getOffsetSum(elem) {
    var top=0, left=0, width=elem.offsetWidth, height=elem.offsetHeight;
    while(elem) {
        top = top + parseInt(elem.offsetTop)
        left = left + parseInt(elem.offsetLeft)
        elem = elem.offsetParent
    }

    return {top: top, left: left, right: left+width, bottom: top+height}
}

function getOffsetRect(elem) {
    // (1)
    var box = elem.getBoundingClientRect()

    // (2)
    var body = document.body
    var docElem = document.documentElement

    // (3)
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft

    // (4)
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0

    // (5)
    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft
    var right = left + (box.right - box.left)
    var bottom = top + (box.bottom - box.top)

    return { top: Math.round(top), left: Math.round(left), right: Math.round(right), bottom: Math.round(bottom) }
}
