function core()
{
	// Открываем/закрываем скрытый слой
	this.toggleSlideLayout = function()
	{
		var settings = {headerMaxPadding: 250, slideLayoutMaxHeight: 256}
		var divSlideLayout = $('#slide-layout');
		var divHeader = $('#header');
		var divLogo = $('#logo');
		var divInitLink = $('#uc-group');
		var divCloseButton = $('#sl-close');
		var slideLayoutExpand = divSlideLayout.hasClass('expand');
		
		if(slideLayoutExpand)
		{
			divCloseButton.hide();
			divHeader.animate({'padding-top': 0});
			divSlideLayout.animate({'height':0}, function(){
				$(this).css('display','none');				
				divInitLink.removeClass('uc-active');
				core.refreshDOM();
			});			
		} else {
			divHeader.animate({'padding-top': settings.headerMaxPadding});
			divSlideLayout.animate({'height': settings.slideLayoutMaxHeight}, function(){
				divCloseButton.show();
				core.refreshDOM();
			});
			divInitLink.addClass('uc-active');
		}
		divSlideLayout.toggleClass('expand');		
	}
	
	// Меняем значение полей форм поиска и подписки
	this.initToggleInputValue = function()
	{
		var inputSearch = $('#search-block input[type="text"]');
		var inputSubscribe = $('#main-subscribe input[type="text"]');
		
		core.toggleInputValue(inputSearch, inputSearch.val()); // Меняем значение поля формы поиска
		core.toggleInputValue(inputSubscribe, inputSubscribe.val()); // Меняем значение поля формы поиска	
	}

	this.toggleInputValue = function(nodename, toggleValue){
		var input = $(nodename);
		input.focus(function(){
			if ($(this).val() == toggleValue) $(this).val('');
		}).blur(function(){
			if ($(this).val() != toggleValue && $(this).val().length == 0) $(this).val(toggleValue);
		});		
	}
	
	// Аккордеон (по типу, как меню в правой колонке)
	this.setAccordion = function(ul)
	{
		var aClass = 'level-0';
		var parentUl = $(ul);
		var topLevelLi = parentUl.find('> li');
		var lastLi = parentUl.find('> li.last');
		var topLevelLinks = $('.'+aClass);
				
		parentUl.find('a.'+aClass).click(function()
		{			
			var _this = $(this);
			var parentLi = _this.parent();
			var hasChilds = _this.next('ul').find('li').length;						
			
			if (!hasChilds) return;
						
			if (!parentLi.hasClass('current'))
			{
				var nextLi = _this.parent().next();
				var prevLi = _this.parent().prev();
				
				if($.browser.msie && $.browser.version == '6.0')
				{
					if (parentLi.hasClass('last'))
						parentLi.removeClass('c-last');		
					else
						lastLi.addClass('c-last');
				}
				
				topLevelLi.removeClass('current').removeClass('prev-expand');
				parentLi.addClass('current');
								
				if (nextLi.length) nextLi.addClass('prev-expand');
				core.refreshDOM();
			}
			return false;
		});
	}
	
	// Обновляем DOM для ие6, дабы подвинуть подвал
	this.refreshDOM = function(){
		if($.browser.msie && $.browser.version == '6.0')
		{
			body = $('body');
			body.css({'border': '1px solid #cccccc'});
			body.css({'border': 'none'});
		}
	}
	
	// Добавляем в избранное
	this.addBookmark = function()
	{
		var url = location.href;
		var title = document.title;
		
		if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function")) window.sidebar.addPanel (title, url, "");
		else if (typeof window.external == "object") window.external.AddFavorite(url, title);
		else if (window.opera && document.createElement)
		{
			var a = document.createElement('A');
			if (!a) return false; //IF Opera 6
			a.setAttribute('rel','sidebar');
			a.setAttribute('href',url);
			a.setAttribute('title',title);
			a.click();
		}
		return false;
	}
	
	this.printPage = function(){
		window.print();
		return false;
	}
	
	// popup images 
	this.initPopupImages = function()
	{
		$('a.popup-image').click(function()
		{
			var link = $(this);
			
			if(!$('div.popup-image-frame').length)
				var popup = $('<div class="popup-image-frame"><div class="popup-image-shadow"></div><div class="popup-image-canvas"><div class="popup-image-button"><span></span></div></div></div>').appendTo('body');
			
			var frame = popup.clone().appendTo('body').addClass('popup-image-frame-on');
			var shadow = frame.find('div.popup-image-shadow').css({opacity:0.8}).show();
			var canvas = frame.find('div.popup-image-canvas');
			var button = frame.find('div.popup-image-button span');
			var image = $('<img src="'+ link.attr('href') +'" alt="'+ link.attr('title') +'"/>');

			image.appendTo(canvas);
			image.load(function()
			{
				var imageWidth = image.width();
				var imageHeight = image.height();
				var frameWidth = frame.width()-110;
				var frameHeight = frame.height()-110;

				if(imageWidth > frameWidth)
				{
					imageWidth = frameWidth;
					image.width(imageWidth);					
					while(image.height() > frameHeight)
					{
						image.width(imageWidth);
						imageWidth--;
					}
					imageHeight = image.height();
				}

				if(imageHeight > frameHeight)
				{
					imageHeight = frameHeight;
					image.height(imageHeight);						
					while(image.width() > frameWidth)
					{
						image.height(imageHeight);
						imageHeight--;
					}
					imageWidth = image.width();
				}

				canvas.addClass('popup-image-canvas-load').css(
				{
					width:imageWidth+50,
					marginLeft:-imageWidth/2,
					height:imageHeight+50,
					marginTop:-imageHeight/2
				});					

				canvas.addClass('popup-image-canvas-done');
				button.addClass('popup-image-button-on');

				image.animate({opacity:1},500,function()
				{
					shadow.click(closer);
					button.click(closer);
				});
				
			});

			var closer = function() {			
				canvas.remove();
				shadow.remove();
				frame.remove();
			}
						
			return false;
		});	
	}
	
	this.initEnlargeText = function()
	{
		var content = $('div.cc-content');
		var cookieFont = dom.readCookie('textSize');			
		
		if (cookieFont)		
			content.addClass(cookieFont);
		
		$('#enlarge-text').click(function(){						
			if (content.hasClass('font-medium')){
				content.addClass('font-large');
				content.removeClass('font-medium');
				dom.setCookie('textSize', 'font-large');
			} else if(content.hasClass('font-large'))
			{
				content.removeClass('font-medium, font-large');				
				dom.setCookie('textSize', '');
			}
			else {
				content.addClass('font-medium');
				dom.setCookie('textSize', 'font-medium');
			}
			
			core.refreshDOM();
			
			return false;
		});
	}

	this.regExp = function(str, reg)
	{	
		switch(reg)
		{
			case 'email':
				reg = /^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,}$/i;
			break;
		}
		return reg.test(str);
	}	
	
	this.initSubscribeHandler = function()
	{
		var dublicate = this;
		
		$('#form-subscribe').submit(function()
		{
			var form = $(this);
			var email = form.find('input[name="email"]');
			var error = form.find('.error');		
			
			if (G_auth) {
				popItUp('/'+G_lang+'/press/news/subscribe-settings.wbp?newuser=false');
				return false;
			}
			
			if (dublicate.regExp(email.val(), 'email'))
			{
				error.addClass('hidden');
				$.post(form.attr('action'),
				{
					Email: email.val(), FirstName: email.val(), Login: email.val(), Password: email.val(), MiddleName: email.val(), LastName: email.val(), Conformition: email.val()
				},
				function(data)
				{
					var auth = $(data).find('page').find('user').attr('status') == 'Success';					
					//console.log('Status: ', $(data).find('page').find('user').attr('status'));
					
					if (auth)
						popItUp('/'+G_lang+'/press/news/subscribe-settings.wbp?newuser=true');
					else
						popItUp('/'+G_lang+'/press/news/subscribe-settings.wbp?newuser=false');												
				}
				);
			} else {
				error.text(G_locale['global']['subscribe_error'][G_lang]);
				error.removeClass('hidden');
				core.refreshDOM();

			}
			return false;			
		});
	}
	
	this.initToggleBlocks = function(){
		$('.toggle-block .tb-title').click(function()
		{
			var _this = $(this);			
			var parentBlock = $(this).parent();			
			var content = parentBlock.find('.tb-content');
			content.slideToggle('medium', function(){
				_this.toggleClass('active');
				core.refreshDOM();
			});
		});
	}
	
	this.initTabs = function(onpage, autoUpdate)
	{
		if (typeof onpage == 'undefined') onpage = 5;
		if (typeof autoUpdate == 'undefined') onpage = false;
		
		jQuery.fn.clickByTab = function(options)
		{
			// активация таба и открытие контента
			// метод принимает ссылку таба
			var options = jQuery.extend({},options);
			
			if (!$(this).is('a')) return;

			var tabId = '#jtc-'+$(this).attr('href').split('#')[1];
			var parentBlock = $(this).parents('div.tabs');
			var contentBlock = parentBlock.find('div.j-content');
			
			$(this).parents('ul').find('a').removeClass('cur');
			$(this).addClass('cur');			
			contentBlock.find('.jtc-item').addClass('hidden');
			$(tabId).removeClass('hidden');
			
			if (autoUpdate) {
				var VTab = $(tabId).find('div.vertical-tabs:first div.vb-title');
				if (!VTab.hasClass('cur')) VTab.find('a').openVerticalTab();
			}
				
			core.refreshDOM();		
		};	


		jQuery.fn.getAllTabs = function(options)
		{
			// Возвращает все табы за исключением кнопок управления
			var options = jQuery.extend({}, options);			
			var arr = [];
			
			this.each(function(){
				if (!$(this).hasClass('jt-prev') && !$(this).hasClass('jt-next')) arr.push($(this));					
			});
						
			return $(arr);
		};


		jQuery.fn.getVisibleTabs = function(options)
		{
			// Возвращает видимые табы
			var options = jQuery.extend({}, options);						
			var arr = [];
			
			this.each(function(){
				if (!$(this).hasClass('jt-hide')) arr.push($(this));
			});
									
			return $(arr);
		};		
			
			
		jQuery.fn.getSteps = function(options)
		{
			// определяем позицию первого и последнего видимого элемента
			var options = jQuery.extend({}, options);
			var arr = [];
			
			$(this).each(function()
			{
				if (!$(this).hasClass('jt-hide'))
					arr.push($(this).index());
			});
						
			return {from: arr[0], to: arr[arr.length-1]}
		};
		
		
		jQuery.fn.hideTabsByRange = function(options)
		{
			// скрываем все табы за исключением заданного диапазона
			var options = jQuery.extend({from: 1, to: 7}, options);
						
			return this.each(function()
			{
				if ($(this).index() >= options.from && $(this).index() <= options.to)
					$(this).removeClass('jt-hide');
				else
					$(this).addClass('jt-hide');
			});
		};
		

		jQuery.fn.moveTabs = function(options)
		{
			// определяем направлением и двигаем табы
			var options = jQuery.extend({direction: null, min: null, max: null}, options);			
			var nodes = $(this).parent().find('li').getAllTabs();
			var countNodes = nodes.length;
			var prevLi = $(this).parent().find('li.jt-prev');
			var nextLi = $(this).parent().find('li.jt-next');
			var direction = options.direction;
			
			var steps = nodes.getSteps();
			var min = options.min;
			var max = options.max;
			var i = 1;
			if (direction == 'backward') i = -1;				
			steps.from += i;
			steps.to += i;	
			
			var visibleNodes = nodes.getVisibleTabs();
			var visibleNodesFirstTab = visibleNodes[0].find('a').hasClass('cur');
			var visibleNodesLastTab = $(visibleNodes[visibleNodes.length-1]).find('a').hasClass('cur');
			
			nodes.hideTabsByRange({from: steps.from, to: steps.to});								
			
			var visibleNodesSec = nodes.getVisibleTabs();
			var visibleNodesSecFirstTab = visibleNodesSec[0].find('a');
			var visibleNodesSecLastTab = $(visibleNodesSec[visibleNodesSec.length-1]).find('a');
			
			if (direction == 'forward')
			{
				prevLi.removeClass('jt-hide');				
				if (steps.to == max) $(this).addClass('jt-hide');								
				if (visibleNodesFirstTab) visibleNodesSecFirstTab.clickByTab();
			} else {
				nextLi.removeClass('jt-hide');
				if (steps.from == min) $(this).addClass('jt-hide');
				if (visibleNodesLastTab) visibleNodesSecLastTab.clickByTab();
			}
						
			return false;
		};
		
		
		jQuery.fn.slideTabs = function(options)
		{
			// инициализация прокрутки табов
			var options = jQuery.extend({onpage: 7},options);
			
			return this.each(function()
			{
				var ul = $(this);
				var prevLi = ul.find('li.jt-prev');
				var nextLi = ul.find('li.jt-next');
				var nodes = ul.find('li').getAllTabs();
				
				var min = 1;
				var max = nodes.length;
				
				if (options.onpage >= max) nextLi.addClass('jt-hide');
				
				nodes.hideTabsByRange({from: 1, to: options.onpage});

				nextLi.click(function() {
					$(this).moveTabs({direction: 'forward', min: min, max: max});
				});
				
				prevLi.click(function() {
					$(this).moveTabs({direction: 'backward', min: min, max: max});
				});				
			});		
		};						
		
		$('.j-tabs').slideTabs({onpage: onpage});
		$('.j-tabs li a:first').clickByTab();
		$('.j-tabs li a').click(function()
		{
			$(this).clickByTab();
			return false;
		});				
	}
	
	this.initVerticalTabs = function()
	{
		jQuery.fn.openVerticalTab = function(options)
		{
			var options = jQuery.extend({}, options);
			
			var _this = $(this);
			var parentBlock = _this.parents('div.vertical-tabs');
			var contentBlock = parentBlock.find('.vb-content');			
			var cache = parentBlock.find('div.vb-content').text().length > 0;

			var collectionVTabs = parentBlock.parent().find('.vertical-tabs');
			collectionVTabs.find('.vb-title').removeClass('cur');
			collectionVTabs.find('.vb-content').addClass('hidden');
			
			_this.parent().addClass('cur');
			contentBlock.removeClass('hidden');
			core.refreshDOM();
									
			if (cache) return false;
			
			var url = _this.attr('href');
			_this.parent().addClass('loading');
			
			$.ajax({
					url: url,
					success: function(data)
					{
						var parseData = data.split('<body>')[1].split('</body>')[0];
						contentBlock.html(parseData);
						_this.parent().removeClass('loading');  		
						core.refreshDOM();						
					}
			});
		};
	}
	
	this.newsArchive = function()
	{
		// настройки для раздела новостного архива и ему подобных
		core.initVerticalTabs();
		core.initTabs(5, true); // @количество табов (int), @автоматическое открытие вертикальных табов (bool)
				
		$('div.vertical-tabs div.vb-title a').click(function()
		{
			$(this).openVerticalTab();
			return false;
		});	
	}
}


function DynamicBanner()
{
	this.insertBanner = function(template, wrapper, type)
	{
		if (!AdCount || AdCount == 0) return;
		
		var wrapper = document.getElementById(wrapper);
		
		var replaceMarker = function(template, values) {
			var regexp = /{+\w+}/ig;
			var template = template.replace(regexp, function(str) {				
				return values[str.replace(/{|}/g, '')];
			});
			return template;
		}
		
		var parseBannerData = function(str) {
			var str = str.split(';');
			var array = [];
			for(i=0; i<str.length; i++){			
				val = str[i].split(':');
				array[val[0].replace(/\s/g, '')] = val[1].replace(/\s/, '');
			}
			return array;
		}
		
		var values = [];		
		values['url'] = '/adredirector.wbh?id='+AdBannerId[0]+'&gid='+AdGroupId[0];
		values['image'] = '/id.wbm?id='+AdMediaId[0];
		values['width'] = AdMediaWidth[0];
		values['height'] = AdMediaHeight[0];
		
		switch(type)
		{
			case 'widget':
				var array = parseBannerData(AdText[0]);
				values['height'] += 14;
				values['desc'] = array['desc'];
				values['left'] = array['left'];		
				values['bottom'] = array['bottom'];
				values['button'] = array['button'];
			break;
			case 'image':
				values['alt'] = AdText[0];
			break;
		}
				
		wrapper.innerHTML = replaceMarker(template, values);
	}
}


