/**
 * @author Vlad Yakovlev (scorpix@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 */
var carcas = (function()
{
	/**
	 * Размер в пикселях одного em.
	 */
	var emK = 0;
	
	/**
	 * Текущий раскрытый блок.
	 */
	var currentId = '';
	
	/**
	 * Блок, ожидающий, когда его откроют.
	 */
	var queueId = '';
	
	/**
	 * Не дышать - идет процесс анимации блока.
	 */
	var busy = false;
	
	/**
	 * Надо бы закрыть текущий блок.
	 */
	var hide = false;
	
	/**
	 * Коэффициент ширины большого блока относительно ширины окна.
	 */
	var bigBlockK = 1.4; // #layout1 { width: 140%; }
	
	/**
	 * Максимальная ширина большого блока, в em.
	 */
	var bigBlockMaxWidth = 180; // #layout1 { max-width: 180em; }
	
	/**
	 * Минимальная ширина окна, в em.
	 */
	var windowMinWidth = 97; // #layout { min-width: 97em; }
	
	/**
	 * Высота видимых элементов, кроме блоков по центру, в em.
	 */
	var windowDiffHeight = 20;
	
	/**
	 * Время передвижения 1 на один пиксель, в сек.
	 */
	var time = 0.003;
	
	var minTime = 0.5;
	
	var emLayout = $('#em-layout');
	
	var brinks = null;
	var wraps  = null;
	var rule = 'easeInOutCubic';
	
	var rightTopResize = null;
	
	var rightTopFull = false;
	
	$(window).load(function()
	{
		emLayout = $('#em-layout');
		
		wraps = {
			middle: $('.middle .wrap'),
			left:   $('.left .wrap'),
			center: $('.center .wrap'),
			right:  $('.right .wrap'),
			
			'left-top':      $('#left-top .wrap'),
			'center-top':    $('#center-top .wrap'),
			'right-top_map':     $('#right-top .wrap'),
			'right-top_feedback':     $('#right-top .wrap'),
			'right-middle':  $('#right-middle .wrap'),
			'center-middle': $('#center-middle .wrap'),
			'left-bottom':   $('#left-bottom .wrap'),
			'center-bottom': $('#center-bottom .wrap'),
			'right-bottom':  $('#right-bottom .wrap')
		};
		
		brinks = {
			'left-top':      wraps['left-top'].find('.brink'),
			'center-top':    wraps['center-top'].find('.brink'),
			'right-top_map':     wraps['right-top_map'].find('.brink'),
			'right-top_feedback':     wraps['right-top_feedback'].find('.brink'),
			'right-middle':  wraps['right-middle'].find('.brink'),
			'left-bottom':   wraps['left-bottom'].find('.brink'),
			'center-bottom': wraps['center-bottom'].find('.brink'),
			'right-bottom':  wraps['right-bottom'].find('.brink')
		};
		
		$(window).resize(function()
		{
			setBlocksSizes();
			correctCurBlock();
			setVisibleBlocks();
			art_logo_render();
		}).resize();
		
		setInterval(function()
		{
			if (emK != emLayout.height())
				$(window).resize();
		}, 500);
	});
	
	/**
	 * Следит за размерами блоков в зависимости от того,
	 * что больше у окна браузера - ширина или высота.
	 */
	function setBlocksSizes()
	{
		emK = emLayout.height();
			
		var windowHeight = $('#layout').height();
		var windowWidth  = $('#layout').width();
		
		var maxWidth = bigBlockMaxWidth * emK;
		
		if (!(windowMinWidth * emK > windowWidth || windowWidth * bigBlockK / 3 + windowDiffHeight * emK < windowHeight))
		{
			var tempWidth = (windowHeight - windowDiffHeight * emK) * 3;
			
			if (maxWidth > tempWidth)
				maxWidth = tempWidth;
		}

		$('#layout1').css('max-width', (maxWidth / emK) + 'em');
		
		// Дело не обошлось без косяков в IE6...
		if ($.browser.msie && 6 >= parseInt($.browser.version))
		{
			if (windowMinWidth * emK > $(window).width())
				$('#layout').width(windowMinWidth * emK);
			else
				$('#layout').css('width', '100%');
				
			if (65 * emK > $(window).height())
				$('#layout').height(65 * emK);
			else
				$('#layout').css('height', '100%');
				
			if (maxWidth < $('#layout').width() * bigBlockK)
				$('#layout1').css('width', maxWidth);
			else
				$('#layout1').css('width', '140%');
			
			$('#layout3').css({
				height: $('#layout2').width(),
				width: $('#layout2').width()
			});
		}
	}
	
	/**
	 * Проверяет, полностью ли видны блоки на странице. Меняет эффекты, если нужно.
	 */
	function setVisibleBlocks()
	{
		var windowHeight = $('#layout').height();
		var windowWidth  = $('#layout').width();

		var positions = {
			'left-bottom': findPos(brinks['left-bottom'].get(0)),
			'center-bottom': findPos(brinks['center-bottom'].get(0)),
			'right-middle': findPos(brinks['right-middle'].get(0)),
			'right-bottom': findPos(brinks['right-bottom'].get(0))
		};
		
		rightMiddleVisible(positions);

		elName = 'left-bottom';
		pos = positions[elName];

		if (windowHeight >= pos[1] - emK) 
		{
			wraps[elName].find('h2').removeClass('arrow');
			
			if (elName != currentId)
				wraps[elName].find('.content').removeClass('visible');
		}
		else 
			wraps[elName]
				.find('h2').addClass('arrow').end()
				.find('.content').addClass('visible');

		elName = 'center-bottom';
		pos = positions[elName];
		
		if (windowHeight >= pos[1] - emK) 
		{
			wraps[elName].find('h2').removeClass('arrow');
			
			if (elName != currentId)
				wraps[elName].find('.content').removeClass('visible');
		}
		else 
			wraps[elName]
				.find('h2').addClass('arrow').end()
				.find('.content').addClass('visible');

		elName = 'right-bottom';
		pos = positions[elName];

		if (windowHeight >= pos[1] - emK) 
		{
			wraps[elName].find('h2').removeClass('arrow');
			
			if (elName != currentId)
				wraps[elName].find('.content').removeClass('visible');
		}
		else 
			wraps[elName]
				.find('h2').addClass('arrow').end()
				.find('.content').addClass('visible');
				
		// {{{ Видимость текста в центральном блоке
		elName = 'center-middle';
		var height = wraps[elName].height() / emK;
		var sizes = [47, 51, 56];

		wraps[elName].find('.bonus div').each(function(index)
		{
			var el = $(this);

			if (sizes[index] <= height && 'none' == $(this).css('display'))
			{
				$(this).find('p').css('color', '#804638');
				$(this).show();
				jTweener.addTween($(this).find('p'), {
					color: '#000000',
					time: 0.3,
					transition: rule,
					onComplete: function()
					{
						el.css('color', '');
					}
				});
			}
			else if (sizes[index] > height && 'block' == $(this).css('display'))
			{
				$(this).hide();
			}
		});
		// }}} Видимость текста в центральном блоке
	}
	
	function rightMiddleVisible(positions)
	{
		var windowWidth  = $('#layout').width();
		var elName = 'right-middle';
		var pos = positions[elName];
		var full;

		if (windowWidth >= pos[0] - emK) 
		{
			if (rightTopFull)
				return;

			full = true;
			rightTopFull = true;
		}
		else
		{
			if (!rightTopFull)
				return;
				
			full = false;
			rightTopFull = false;
		}

		if (rightTopResize) 
		{
			clearInterval(rightTopResize);
			rightTopResize = null;
		}

		rightTopResize = setInterval(function()
		{
			clearInterval(rightTopResize);
			rightTopResize = null;

			var time = 0.3;

			if (full)
			{
				jTweener.removeNSActions('carcas_resize');
				jTweener.addNSAction({
					onComplete: function()
					{
						wraps[elName]
							.find('h2').removeClass('arrow').end()
							.addClass('full')
							.css('background-color', '')
							.find('h2, h2 span, .map ul').css('color', '').end()
							.find('h2 span').css('border-bottom-color', '');
							
						if (elName != currentId)
							wraps[elName].find('.content').removeClass('visible');
							
						rightTopFull = true;
	
						jTweener.removeNSActions('carcas_resize');
					}
				}, 'carcas_resize');
				
				jTweener.addTween(wraps[elName].find('h2, .map ul'), {
					color: '#fff',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				jTweener.addTween(wraps[elName].find('h2 span'), {
					borderBottomColor: '#80b2c8',
					color: '#fff',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				jTweener.addTween(wraps[elName], {
					backgroundColor: '#80b2c8',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
			}
			else
			{
				jTweener.removeNSActions('carcas_resize');
				jTweener.addNSAction({
					onComplete: function()
					{
						wraps[elName]
							.css('background-color', '')
							.find('h2, h2 span, .map ul').css('color', '').end()
							.find('h2 span').css('border-bottom-color', '').end()
							.removeClass('full')
							.find('.content').addClass('visible').end()
							.find('h2').addClass('arrow');

						rightTopFull = false;	
						jTweener.removeNSActions('carcas_resize');
					}
				}, 'carcas_resize');

				jTweener.addTween($('#right-middle .map .normal'), {
					color: '#e0e0e0',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				jTweener.addTween(wraps[elName].find('.map .country, .map .stronger'), {
					color: '#6b6b6b',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				jTweener.addTween(wraps[elName].find('.map .strongest, h2'), {
					color: '#000',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				jTweener.addTween(wraps[elName], {
					backgroundColor: '#fff',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
				wraps[elName].find('h2 span').css('border-bottom-color', '#fff');
				jTweener.addTween(wraps[elName].find('h2 span'), {
					borderBottomColor: '#6da2af',	
					color: '#6da2af',
					time: time,
					transition: rule,
					namespace: 'carcas_resize'
				});
			}
		}, 500);
	}
	
	/**
	 * Следит за смещением текущего выдвинутого блока.
	 */
	function correctCurBlock()
	{
		var windowWidth  = $(window).width();
		var windowHeight = $(window).height();
		
		var positions = {
			'left-bottom': findPos(brinks['left-bottom'].get(0)),
			'center-bottom': findPos(brinks['center-bottom'].get(0)),
			'right-middle': findPos(brinks['right-middle'].get(0)),
			'right-bottom': findPos(brinks['right-bottom'].get(0))
		};
		
		if (busy || !currentId)
			return;
			
		var coordinate = 1;
		var windowSize = windowHeight;
		var direction = 'top';
		var blocks = '';
		
		switch (currentId)
		{
			case 'right-middle':
				coordinate = 0;
				windowSize = windowWidth;
				direction = 'left';
				blocks = 'middle';
				
				break;
				
			case 'left-bottom':
				blocks = 'left';
				
				break;
				
			case 'center-bottom':
				blocks = 'center';
				
				break;
				
			case 'right-bottom':
				blocks = 'right';
				
				break;
				
			default: return;
		}
		
		if (windowSize == positions[currentId][coordinate])
			return;

		var size = windowSize - positions[currentId][coordinate];
		var newPos = size + pixelSize(wraps[currentId].css(direction));
		
		if (0 < newPos) 
		{
			newPos = 0;
			currentId = '';
		}

		wraps[blocks].css(direction, (newPos / emK) + 'em');
	}
	
	/**
	 * Смещение элемента относительно левого топа окна.
	 * @param {DomElement} obj
	 * @return {Array}
	 */
	function findPos(obj)
	{
		var curLeft = curTop = 0;
		
		if (obj.offsetParent) 
			do
			{
				curLeft += obj.offsetLeft;
				curTop  += obj.offsetTop;
			} while (obj = obj.offsetParent);
		
		return [curLeft, curTop];
	}
	
	/**
	 * Возвращает размер в пикселях.
	 * @return {int}
	 */
	function pixelSize(sizeString)
	{
		return -1 !== sizeString.toString().indexOf('em') ? parseInt(parseFloat(sizeString) * emK) : parseInt(sizeString);
	}

	/**
	 * Менеджер очереди.
	 * @param {string} blockId Идентификатор блока для перемещения.
	 * @params {boolean} show  Флаг, который указывает, показать блок или скрыть.
	 *                         Если не задан, то по барабану.
	 */	
	function move(blockId, show)
	{
		if (false !== show && blockId && blockId != currentId) 
		{
			queueId = blockId;
			
			if (!busy)
				moveHide();
		}
		else if (true !== show) 
		{
			queueId = '';
			
			if (busy)
				hide = true;
			else
				moveHide();
		}
	}
	
	/**
	 * Анимация скрытия блока.
	 */
	function moveHide()
	{
		busy = true;
		hide = false;
		
		if (!currentId)
		{
			if (queueId)
				moveShow();
			else
				busy = false;
				
			return;
		}
		
		operateId = currentId;
		currentId = '';
		var blockSize = $('#left-top').width();
		
		var els = null;
		var attrs = {
			left: 0,
			top: 0,
			transition: rule,
			namespace: 'carcas'
		};
		
		switch (operateId)
		{
			case 'left-top':
				var elements = $('#left-top li ul');
				var nsAttrs = {
					onComplete: function()
					{
						endShow();
					}
				};
				
				var contentElement = wraps[operateId].find('.content');
				var sourceHeight = 0;
				var size = 0;
			
				elements.each(function()
				{
					sourceHeight += $(this).height();
					size += $(this).height();
				});
				
				sourceHeight = contentElement.height() - sourceHeight;
				
				attrs.time = size * time > minTime ? size * time : minTime;
				
				if (!$.browser.mozilla)
				{
					nsAttrs.onUpdate = function()
					{
						var height = contentElement.height() - sourceHeight;
						wraps['left'].css('top', height);
					};
				}
				
				jTweener.addNSAction(nsAttrs, 'carcas');
				
				jTweener.addTween(elements, {
					height: 0,
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});
				
				if ($.browser.mozilla) 
				{
					wraps['left'].css('top', pixelSize(wraps[operateId].css('top')));
					jTweener.addTween(wraps['left'], {
						top: 0,
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});
				}
				
				break;
				
			case 'center-top':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['center'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = size * time > minTime ? size * time : minTime;
				els.css('top', size);
				
				break;
				
			case 'right-top_map':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['right'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = size * time > minTime ? size * time : minTime;
				els.css('top', size);
				
				break;
			
			case 'right-top_feedback':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['right'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = size * time > minTime ? size * time : minTime;
				els.css('top', size);
				
				break;
				
			case 'right-middle':
				var size = pixelSize(wraps[operateId].css('left'));
				attrs.time = -size * time > minTime ? -size * time : minTime;
				wraps['middle'].css('left', size);
				
				jTweener.addNSAction({
					onComplete: function()
					{
						wraps[operateId]
							.css('background-color', '')
							.find('h2, h2 span, .map ul').css('color', '').end()
							.find('h2 span').css('border-bottom-color', '').end()
							.removeClass('full')
							.find('h2').addClass('arrow');
	
						endHide();
					}
				}, 'carcas');

				jTweener.addTween($('#right-middle .map .normal'), {
					color: '#80b2c8',
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});
				jTweener.addTween(wraps[operateId].find('.map .country, .map .stronger'), {
					color: '#80b2c8',
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});
				jTweener.addTween(wraps[operateId].find('.map .strongest, h2'), {
					color: '#000',
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});
				jTweener.addTween(wraps[operateId], {
					backgroundColor: '#fff',
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});
				jTweener.addTween(wraps[operateId].find('h2 span'), {
					borderBottomColor: '#6da2af',
					color: '#6da2af',
					time: attrs.time,
					transition: rule,
					namespace: 'carcas'
				});

				jTweener.addTween(wraps['middle'], attrs);
				
				break;
				
			case 'left-bottom':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['left'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = -size * time > minTime ? -size * time : minTime;
				els.css('top', size);
				
				break;
				
			case 'center-bottom':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['center'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = -size * time > minTime ? -size * time : minTime;
				els.css('top', size);
				
				break;
				
			case 'right-bottom':
				wraps[operateId].find('h2').addClass('arrow');
				els = wraps['right'];
				var size = pixelSize(wraps[operateId].css('top'));
				attrs.time = -size * time > minTime ? -size * time : minTime;
				els.css('top', size);
				
				break;
		}
		
		if (els) 
		{
			jTweener.addNSAction({ onComplete: function()
			{
				switch (operateId){
					case 'right-top_feedback':
						$("#feedback").hide();
						$("#feedback_sw img").show();
						break;
					case 'right-top_map':
						$("#site_map").hide();
						$("#site_map_sw img").show();
						break;
				}
				endHide();
			}	}, 'carcas');
			jTweener.addTween(els, attrs);
		}
	}
	
	function endHide()
	{
		jTweener.removeNSActions('carcas');

		if (queueId)
			moveShow();
		else
			busy = false;
	}
	
	/**
	 * Анимация показа блока.
	 */
	function moveShow()
	{
		busy = true;

		if (!queueId)
		{
			if (hide)
				moveHide();
			else
				busy = false;
				
			return;
		}
		
		currentId = queueId;
		queueId = '';
		var blockSize = $('#left-top').width();
		switch (currentId){
			case 'right-top_feedback':
				$("#feedback").show();
				$("#feedback_sw img").hide();
				break;
			case 'right-top_map':
				$("#site_map").show();
				$("#site_map_sw img").hide();
				break;
				}
		var pos = findPos(brinks[currentId].get(0));
		
		var els = null;
		var attrs = {
			transition: rule,
			namespace: 'carcas'
		};
		var nsAttrs = {};

		switch (currentId)
		{
			case 'left-top':
				var elements = $('#left-top li ul');
				
				elements.css({
					position: 'absolute',
					left: '-1000px',
					height: 'auto'
				});
				
				var sizes = [];
				var size = 0;
				
				elements.each(function()
				{
					sizes[sizes.length] = $(this).height();
					size += $(this).height();
				});
				
				attrs.time = size * time > minTime ? size * time : minTime;
				
				elements.css({
					position: 'static',
					left: 0,
					height: 0
				});
				var sourceHeight = wraps[currentId].find('.content').height();
				var contentElement = wraps[currentId].find('.content');
				
				var nsAttrs = {
					onComplete: function()
					{
						wraps['left'].css('top', (size / emK) + 'em');
						endShow();
					}
				};
				
				if (!$.browser.mozilla)
					nsAttrs.onUpdate = function()
					{
						var height = contentElement.height() - sourceHeight;
						wraps['left'].css('top', height);
					};
				
				jTweener.addNSAction(nsAttrs, 'carcas');
				
				if ($.browser.mozilla)
					jTweener.addTween(wraps['left'], {
						top: size,
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});

				for (var i = 0; i < sizes.length; i++)
					jTweener.addTween(elements.eq(i), {
						height: sizes[i],
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});
				
				break;
				
			case 'center-top':
				if (0 > pos[1])
				{
					var size = -pos[1];
					attrs.time = size * time > minTime ? size * time : minTime;
					els = wraps['center'];
					attrs.top = size;
					nsAttrs.onComplete = function()
					{
						wraps['center'].css('top', (size / emK) + 'em');
						wraps[currentId]
							.find('h2').removeClass('arrow').end()
							.find('.focus').focus();
						endShow();
					};
				}
				else
				{
					currentId = '';
					endShow();
				}
				
				break;
				
			case 'right-top_map':
				if (0 > pos[1]) 
				{
					var size = -pos[1];
					attrs.time = size * time > minTime ? size * time : minTime;
					els = wraps['right'];
					attrs.top = size;
					nsAttrs.onComplete = function()
					{
						wraps['right'].css('top', (size / emK) + 'em');
						wraps[currentId]
							.find('h2').removeClass('arrow').end()
							.find('.focus').focus();
						endShow();
					};
				}
				else 
				{
					currentId = '';
					endShow();
				}
				
				break;

			case 'right-top_feedback':
				if (0 > pos[1]) 
				{
					var size = -pos[1];
					attrs.time = size * time > minTime ? size * time : minTime;
					els = wraps['right'];
					attrs.top = size;
					nsAttrs.onComplete = function()
					{
						wraps['right'].css('top', (size / emK) + 'em');
						wraps[currentId]
							.find('h2').removeClass('arrow').end()
							.find('.focus').focus();
						endShow();
					};
				}
				else 
				{
					currentId = '';
					endShow();
				}
				
				break;
				
			case 'right-middle':
				var windowWidth = $(window).width();

				if (windowWidth < pos[0])
				{
					var size = windowWidth - pos[0];
					
					attrs.left = size;
					attrs.time = -size * time > minTime ? -size * time : minTime;
					nsAttrs.onComplete = function()
					{
						wraps['middle'].css('left', (size / emK) + 'em');
					
						wraps[currentId]
							.find('h2').removeClass('arrow').end()
							.addClass('full')
							.css('background-color', '')
							.find('h2, h2 span, .map ul').css('color', '').end()
							.find('h2 span').css('border-bottom-color', '');

						endShow();
					};
					jTweener.addNSAction(nsAttrs, 'carcas');
					
					jTweener.addTween(wraps[currentId].find('h2, .map ul'), {
						color: '#fff',
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});
					jTweener.addTween(wraps[currentId].find('h2 span'), {
						borderBottomColor: '#fff',
						color: '#fff',
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});
					jTweener.addTween(wraps[currentId], {
						backgroundColor: '#80b2c8',
						time: attrs.time,
						transition: rule,
						namespace: 'carcas'
					});
					
					jTweener.addTween(wraps['middle'], attrs);
				}
				else
				{
					currentId = '';
					endShow();
				}
				
				
				break;
				
			case 'left-bottom':
				var windowHeight = $(window).height();

				if (windowHeight < pos[1]) 
				{
					var size = windowHeight - pos[1];
					els = wraps['left'];
					attrs.top = size;
					attrs.time = -size * time > minTime ? -size * time : minTime;
					nsAttrs.onComplete = function()
					{
						wraps[currentId].find('h2').removeClass('arrow');
						wraps['left'].css('top', (size / emK) + 'em');
						endShow();
					};
				}
				else
				{
					currentId = '';
					endShow();
				}
				
				break;
				
			case 'center-bottom':
				var windowHeight = $(window).height();

				if (windowHeight < pos[1]) 
				{
					var size = windowHeight - pos[1];
					els = wraps['center'];
					attrs.top = size;
					attrs.time = -size * time > minTime ? -size * time : minTime;
					nsAttrs.onComplete = function()
					{
						wraps[currentId].find('h2').removeClass('arrow');
						wraps['center'].css('top', (size / emK) + 'em');
						endShow();
					};
				}
				else
				{
					currentId = '';
					endShow();
				}
				
				break;
				
			case 'right-bottom':
				var windowHeight = $(window).height();

				if (windowHeight < pos[1]) 
				{
					var size = windowHeight - pos[1];
					els = wraps['right'];
					attrs.top = size;
					attrs.time = -size * time > minTime ? -size * time : minTime;
					nsAttrs.onComplete = function()
					{
						wraps['right'].css('top', (size / emK) + 'em');
						wraps[currentId]
							.find('h2').removeClass('arrow').end()
							.find('.focus').focus();
						endShow();
					};
				}
				else
				{
					currentId = '';
					endShow();
				}

				break;
		}
		
		if (els) 
		{
			jTweener.addNSAction(nsAttrs, 'carcas');
			jTweener.addTween(els, attrs);
		}
	}
	
	function endShow()
	{
		jTweener.removeNSActions('carcas');
		
		if (hide)
			moveHide();
		else
			busy = false;
	}
	
	return {
		move: move
	};
})();

var logo_delay	= 500;

$(window).load(function()
{
	$('#center-bottom h2 span').click(function() { carcas.move('center-bottom'); });
	$('#center-top h2 span').click(function() { carcas.move('center-top'); });
	$('#left-bottom h2 span').click(function() { carcas.move('left-bottom'); });
	$('#left-top .wrap').hover(function() { carcas.move('left-top', true); }, function() { carcas.move('left-top', false); });
	$('#right-bottom h2 span').click(function() { carcas.move('right-bottom'); });
	$('#right-middle h2 span').click(function() { carcas.move('right-middle'); });
	$('#right-top h2 span#site_map_sw').click(function() { carcas.move('right-top_map'); });
	$('#right-top h2 span#feedback_sw').click(function() { carcas.move('right-top_feedback'); });

	// участок для обработка выпрыгивания логотипа
	$('#right-bottom').mouseover(function() { BR_mouseover(); });
	$('#right-bottom').mouseout(function() { BR_mouseout(); });
	$('#right-bottom .ineer_container').mouseover(function() { artlebedev_mouseover(); });
	$('#right-bottom .ineer_container').mouseout(function() { artlebedev_mouseout(); });
	
	});

	
/*
 * @Copyright Art.Lebedev Studio | http://www.artlebedev.ru/
 * @author Denis Khripkov (denisx@design.ru)
 */
var flag_artlebedev = false;
var flag_work = true; // вообще будет прыгать лого или нет
// margin-left
var artlebedev_hide = -37;
var artlebedev_middle = -53;
var artlebedev_show = -90;
// ul width
var ul_width_hide = 26;
var ul_width_middle = 33;
var ul_width_show = 40;
var flag_ul = 0; // 0 - выключен (свободно), 1 - среднее положение, 2 - крайне прижатое

if ( $.browser.msie < 7 ) {
	var ul_width_hide = 21;
	var ul_width_middle = 28;
	var ul_width_show = 34;
	}

// курсор над нижним углом	
function BR_mouseover() {
	if ( flag_work ) {
	if ( flag_artlebedev == false ) {
		$('.container_logo .ineer_container').css({
			'margin-left':artlebedev_middle+'px'
		});
	
		if ( flag_ul == 0 )
			$('#right-bottom ul.fix').css({
				'width':ul_width_show+'%'
				});
		if ( flag_ul == 1 )
			$('#right-bottom ul.fix').css({
				'width':ul_width_show+'%'
				});
		if ( flag_ul == 2 )
			$('#right-bottom ul.fix').css({
				'width':ul_width_middle+'%'
				});
		}
		}
};

// курсор ушел с угла
function BR_mouseout(){	
	if ( flag_work ) {
	if ( flag_artlebedev == false ) {
		$('.container_logo .ineer_container').css({
			'margin-left':artlebedev_hide+'px'
		});	
		
		$('#right-bottom ul.fix').css({
			'width':ul_width_show+'%'
			});
		}
		}
};

// курсор над логотипом
function artlebedev_mouseover(){	
	if ( flag_work ) {
	flag_artlebedev = true;	
	$('.container_logo .ineer_container').css({
		'margin-left':artlebedev_show+'px'
	});
	
	if ( flag_ul == 0 )
		$('#right-bottom ul.fix').css({
			'width':ul_width_show+'%'
			});
	if ( flag_ul == 1 )
		$('#right-bottom ul.fix').css({
			'width':ul_width_middle+'%'
			});
	if ( flag_ul == 2 )
		$('#right-bottom ul.fix').css({
			'width':ul_width_hide+'%'
			});
		}
};

// курсор ушел с логотипа
function artlebedev_mouseout(){
	if ( flag_work ) {
	flag_artlebedev = false;
	$('.container_logo .ineer_container').css({
		'margin-left':artlebedev_middle+'px'
	});
	}
};

// корректировка местоположения дива, содержищий логотип
function art_logo_render(){
	var window_width = $(window).width();
	if ( window_width < 971 ) window_width = 971;
	var layout4_width = 0.848 * $('#layout4').width();
	var result = window_width-layout4_width-25;
	
	if ( result > -1 ) result = 0;

	$('.artlebedev').css({
		'left':result+'px'
		});
		
	// корректировка UL c текстом	
	if ( window_width < 1036 ) {
		if ( window_width > 1000 ) flag_ul = 1;			
		else flag_ul = 2;			
		}
	else flag_ul = 0;
	
	if ( layout4_width > 1153 && layout4_width < 1385 && flag_ul < 2 ) flag_ul = 2;
	
	if ( window_width - layout4_width > 9 ) flag_work = false;
		else flag_work = true;
	if ( !flag_work )
		$('.container_logo .ineer_container').css({
			'margin-left':artlebedev_show+'px'
		});
	else 
		$('.container_logo .ineer_container').css({
			'margin-left':artlebedev_hide+'px'
		});
	
	//alert(layout4_width + '   ' + result + '   ' + window_width + '   ' + flag_ul);
	
	};