var console;
var tim;
var speed = {
	dropdown: 8,
	dropup: 6,
	resize: 5
};
var classes = {
	here: 'here', dd_here: 'dd-here', over: 'over', over2: 'over2'
};
var ie = !window.getComputedStyle;
var ie6 = ie && navigator.appVersion.indexOf('MSIE 7') == -1;
function menu_load(){
	tim = new Timer(30);
	tim.start();
	console = $('console');
	var root = $('main-menu');
	if(!root){
		return true;
	}
	var items = $A(root.childNodes).detects(function(kid){
		return kid.nodeType == 1 && kid.className.split(' ')[0] == 'item';
	});
	items.each(function(item){
		item = $Node(item);
		init_item(item);
		item.dropdown.movement.moveTo(0, item.dropdown.height, speed.dropup); // добавил borodko
	});
	if(ie6){
		var rights = $C('dd-right', root, 'DIV');
		rights.each(function(rght){
			rght.style.left = rght.parentNode.offsetWidth - rght.offsetWidth + 'px';
		});
	}
}
function init_dropdown(item){
	
	item.onmouseover = function(e){
		this.addClass(classes.over);
		this.addClass(classes.over2);
		this.dropdown.movement.moveTo(0, 0, speed.dropdown);
		print("over", console);
	};
	item.onmouseout = function(e){
		var ev = window.event || e;
		r_target = ev.relatedTarget || ev.toElement;
		if(r_target == this || _isChild(r_target, this)){
			return false;
		}
		this.removeClass(classes.over2);
		this.dropdown.movement.moveTo(0, -this.dropdown._height, speed.dropup);
			print("out", console);
	};
	var arr = $C_arr(['track', 'dd-plashka'], item.dropdown, 'DIV');
	item.dropdown.track = arr.shift();
	item.dropdown.m_div = arr.shift();

	var dims = Style.$D(item.dropdown.m_div);
	item.dropdown._width = dims.width;
	item.dropdown._height = dims.height;
	Style.set(item.dropdown.track, dims, null, 1);
	Style.set(item.dropdown.m_div, dims, null, 1);
	item.dropdown.m_div.style.position = "absolute";
	item.dropdown.m_div.style.top = - dims.height + "px";
	item.dropdown.movement = new Movement(item.dropdown.m_div, tim);
	item.dropdown.movement.onstop.register('unset class', function(){
		if(this.dropdown.movement.moveable.top == -item.dropdown._height){
			this.removeClass(classes.over);
		}
	}.bind(item));
}
function init_here(item){

	init_dd_here(item);

	item.onmouseover = function(e){
		var ev = getEvent(window.event || e);
		
		if(ev.target == this.dropdown || _isChild(ev.target, this.dropdown)){
			return false;
		}else{
			
			if(this.STATE != 0 && this.STATE != 3){
				return false;
			}
			this.STATE = 1;
			this.grow_obj = this.to;
			this.dropdown.resize.growTo(this.dropdown.resize.resizeable.width, this.to.height, speed.resize);
			this.dropdown.movement.moveTo(0, 0, speed.resize);		
		}
	};
	item.onmouseout = function(e){
		var ev = getEvent(window.event || e);
		var relTarget = ev.relTarget;
		if(relTarget == this || _isChild(relTarget, this)){
			return false;
		}
		if(this.STATE != 2 && this.STATE != 1){
			return false;
		}

		this.STATE = 3;
		this.grow_obj = this.from;
		this.dropdown.resize.growTo(this.from.width, this.from.height, speed.resize);
		this.dropdown.movement.moveTo(0, -this._top, speed.resize);
	};
	item.dropdown.resize.ongrown.register('test', function(oR){
	}.bind(item, item.dropdown.resize.resizeable));

	init_here_dropdown(item.dropdown.here_item, 1);
}

function init_item(item, DEBUG){
	
	item.dropdowns = $C('dropdown', item, 'DIV');
	item.dropdown = item.dropdowns ? item.dropdowns.shift() : null;
	
	if(item.dropdown) {
		var has_here = $C('here', item, 'DIV', 1);
		if(item.dropdown.hasClass(classes.dd_here) && has_here){
			init_here(item);
		}else{
			init_dropdown(item);
		}
		item.addClass('has-dropdown');
		if(!has_here && item.dropdown){
			item.dropdown.removeClass(classes.dd_here);
		}
		
		var chiltItem = $C('dropdown', item.dropdown, 'DIV');
		if (chiltItem.length) {
			chiltItem = chiltItem[0].parentNode;
			init_item(chiltItem);
		}

	}
}

function init_here_dropdown(item){
	item.dropdowns = $C('dropdown', item, 'DIV');
	
	if(item.dropdowns){
		
		item.dropdown = item.dropdowns[0];
		item.dd_root.appendChild(item.dropdown);
		if(item.dropdown.hasClass('dd-here')){

			init_dd_here(item);

			item.parent.onmouseover = function(e){
				var ev = getEvent(window.event || e);
				if(ev.target == this.dropdown || _isChild(ev.target, this.dropdown)){
					return false;
				}else{
					if(this.STATE != 0 && this.STATE != 3){
						return false;
					}
					this.STATE = 1;
					this.grow_obj = this.to;
					this.dropdown.resize.growTo(this.dropdown.resize.resizeable.width, this.to.height, speed.resize);
					this.dropdown.movement.moveTo(0, 0, speed.resize);		
				}
			}.bind(item);
			item.parent.onmouseout = function(e){
				var ev = getEvent(window.event || e);
				var relTarget = ev.relTarget;
				if(relTarget == this.parent || _isChild(relTarget, this.parent)){
					return false;
				}
				if(this.STATE != 2){
					return false;
				}
				this.STATE = 3;
				this.grow_obj = this.from;
				this.dropdown.resize.growTo(this.from.width, this.from.height, speed.resize);
				this.dropdown.movement.moveTo(0, -this._top, speed.resize);
			}.bind(item);
		}else{
			item.parent.onmouseover = function(e){
				if(this.parent_item.STATE != 0 && this.parent_item.STATE != 2){
					return false;
				}
				this.dd_root.addClass('root-here');
				this.dropdown.movement.moveTo(0, 0, speed.dropdown);
			}.bind(item);
			item.parent.onmouseout = function(e){
				var ev = window.event || e;
				r_target = ev.relatedTarget || ev.toElement;
				if(r_target == this.parent || _isChild(r_target, this.parent)){
					return false;
				}
				this.dropdown.movement.moveTo(0, -this.dropdown._height, speed.dropup);
			}.bind(item);
			var arr = $C_arr(['track', 'dd-plashka'], item.dropdown, 'DIV');
			item.dropdown.track = arr.shift();
			item.dropdown.m_div = arr.shift();

			var dims = Style.$D(item.dropdown.m_div);
			item.dropdown._width = dims.width;
			item.dropdown._height = dims.height;
			Style.set(item.dropdown.track, dims, null, 1);
			Style.set(item.dropdown.m_div, dims, null, 1);
			item.dropdown.m_div.style.position = "absolute";
			item.dropdown.m_div.style.top = - dims.height + "px";
			item.dropdown.movement = new Movement(item.dropdown.m_div, tim);
			item.dropdown.movement.onstop.register('unset class', function(){
				if(this.dropdown.movement.moveable.top == -this.dropdown._height){
					this.removeClass('root-here');
				}
			}.bind(item));
			item.addClass('has-dropdown');
		}
	}
}
function init_dd_here(item){
	
	if(!$C('here', item, 'DIV', 1)){
		return false;
	}	
	
	item.dropdown.dd_content = $C('dd-content', item.dropdown, 'DIV', 1);
	var r_root = $A(item.dropdown.dd_content.childNodes).detect(function(kid){
		return kid.nodeType == 1 && kid.className == 'resize-root';
	});
	if(ie){
		item.dropdown.dd_plashka = $C('dd-plashka', item.dropdown, 'DIV', 1);
		item.dropdown.dd_plashka.style.width = item.dropdown.offsetWidth + "px";
	}
	var m_root = $A(r_root.childNodes).detect(function(kid){
		return kid.nodeType == 1 && kid.className == 'move-root'
	});
	var dd_root = $A(item.dropdown.childNodes).detect(function(kid){
		return kid.nodeType == 1 && kid.className == 'dd-root';
	});
	item.dropdown.items = $A(m_root.childNodes).detects(function(it){
		return it.nodeType == 1 && it.className.split(' ')[0] == 'item';
	}).each(function(it){
		return $Node(it);
	});
	item.dropdown.here_item = item.dropdown.items.detect(function(it){
		return it.hasClass(classes.here);
	});	

	item.dropdown.here_item.dd_root = dd_root;
	item.dropdown.here_item.parent = item.dropdown;
	item.dropdown.here_item.parent_item = item;
	var top = item.dropdown.here_item.offsetTop;
	item._top = top;
	var dims = Style.$D(item.dropdown.here_item);
	Style.set(r_root, dims, null, true);
	r_root.style.overflow = 'hidden';
	
	
	item.from = Object.extend({}, dims);
	item.dropdown.resize = new Resize(r_root, tim);
	Resize.setGrow(item.dropdown.resize);
	item.dropdown.resize.ongrown.register('set state', function(oR){
		if(this.STATE == 3){
			setTimeout(function(){oR.resizeTo(oR.width, this.from.height);}.bind(this), 30);
		}
		this.STATE = (this.STATE + 1) % 4;
	}.bind(item, item.dropdown.resize.resizeable));
	item.dropdown.movement = new Movement(m_root, tim);
	item.dropdown.movement.moveable.moveTo(0, -top);
	item.STATE = 0;//IDLE
	dims = Style.$D(m_root);
	item.to = Object.extend({}, dims);
	if(ie){

	}
}
AttachEvent(window, 'load', menu_load);
