$(document).ready(function(){
	$('#container').find('#right').prependTo('#main');
	$('#container').find('#left').insertAfter('#content #menu');
	
	if ($.browser.msie && parseInt ($.browser.version) < 7)
	{
		if(($('#container')[0].clientWidth - 434) > '1280')
		{
			$('#container').width('846');
			$('#top-ads').css ('width', parseInt ($('#container').css ('width')) + 434);
			$('#content').css ('width', parseInt ($('#container').css ('width')) + 434);
			$('#menu').css ('width', parseInt ($('#container').css ('width')) + 234);
			$('#footer').css ('width', parseInt ($('#container').css ('width')) + 434);
		}
		else if(($('#container')[0].clientWidth - 434) < '1000')
		{
				$('#container').width('646');
				$('#top-ads').css ('width', parseInt ($('#container').css ('width')) + 434);
				$('#content').css ('width', parseInt ($('#container').css ('width')) + 434);
				$('#menu').css ('width', parseInt ($('#container').css ('width')) + 234);
				$('#footer').css ('width', parseInt ($('#container').css ('width')) + 434);
		}
		else
		{
			$('#container').css ('width', ($('#container')[0].clientWidth - 434) > 1280 ? 846 : ($('#container')[0].clientWidth - 868));
			$('#top-ads').css ('width', parseInt ($('#container').css ('width')) + 434);
			$('#content').css ('width', parseInt ($('#container').css ('width')) + 434);
			$('#menu').css ('width', parseInt ($('#container').css ('width')) + 234);
			$('#footer').css ('width', parseInt ($('#container').css ('width')) + 434);
		}
	}

	$('.baziOtd').find('tr.color').each(function(){
		var baziColor = $(this).css('background');
		$(this).find('td').css('background-color', baziColor)
	});
	
	// Выпадающий список городов \\
		var container = $('#goroda div.goroda-cont')
		var cityListUL = $('#city-list');

		var hidden = true;
		$(container).hover(
			function(){
				hidden = true;
				if (hidden)
				{
					cityListUL.stop(true,true);
					$(container).find('.cities-drop-main').addClass('active');
					cityListUL.slideDown(350);
				}
			},
			function(){
				hidden = false;
				setTimeout(function(){
					if(!hidden)
					{
						cityListUL.slideUp(350, function(){
							hidden = true;
							$(container).find('.cities-drop-main').removeClass('active');
						});
					}
				},800);
			}
		);
	// Конец Выпадающий список городов \\
});

function SetActivePage(page)
{
	$(document).ready(function(){
		if (page && page!=='')
		{
			$('#menu-left').find('li').find('a').each(function(){
				var href = $(this).attr('href');
				var reg = new RegExp(page,'i');
				if (reg.test(href))
				{
					$(this).parent().addClass('active');
				}
			});
		}
	});
}

//Удаление пробелов слева и справа
function trim (str) {
	str = str.replace(/^\s+/, '');
	for (var i = str.length; --i >= 0;) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

// Узнать высоту документа \\
function getDocumentHeight()
{
	return (document.body.scrollHeight > document.body.offsetHeight)?document.body.scrollHeight:document.body.offsetHeight;
}

function setEqualHeight(column)
{
	var oldHeight = 0;
	column.each(function(){
		height = $(this).height();
		if (oldHeight < height)
		{
			oldHeight = height;
		}
	});
	
	$('#container div.column').height(oldHeight);
	$('#container div#main').height(oldHeight+6);
}

// Получаем координаты верхнего края окна браузера \\
function getBodyScrollTop()
{
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

// Получаем координаты левого края окна браузера \\
function getBodyScrollLeft()
{
    return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}

// Получаем высоту окна браузера пользоватля \\
function getClientHeight()
{
  return document.compatMode=='CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight;
}

// Получаем ширину окна браузера пользоватля \\
function getClientWidth()
{
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

// Получаем центр окна клиента \\
function getClientCenterX()
{
    return parseInt(getClientWidth()/2)+getBodyScrollLeft();
}
function getClientCenterY()
{
    return parseInt(getClientHeight()/2)+getBodyScrollTop();
}

// Устанавливаем COOKIES \\
function setCookie(name, value, expiredays, path, domain, secure)
{
	if (expiredays)
	{
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		var expires = exdate.toGMTString();
	}
	document.cookie = name + "=" + escape(value) +
	((expiredays) ? "; expires=" + expires : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
}

// Получаем COOKIES \\
function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
	  offset = cookie.indexOf(search);
	  if (offset != -1) {
		 offset += search.length;
		 end = cookie.indexOf(";", offset)
		 if (end == -1) {
			end = cookie.length;
		 }
		 setStr = unescape(cookie.substring(offset, end));
	  }
	}
	return setStr;
}

// Удаляем COOKIES \\
function deleteCookie(name)
{
	setCookie(name,'',-1);
}

//\\
function urlencode( str )
{   
	str = (str+'').toString();
 
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
                                                                    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}

// UPDATE поля field на значение value в таблице table при совпадении значения whereValue поля whereField конкретной таблицы при совпадении \\
function fieldUpdate(table, whereField, whereValue, field, value, container)
{
	if (container)
	{
		container = $(container);
		container.attr('disabled','disabled');
	}
	$.post('/ajax/noindex.php?action=fieldUpdate', {table: table, whereField: whereField, whereValue: whereValue, field: field, value: value},
		function (data)
		{
			if (container)
			{
				if (value == '1')
				{
					val = '0';
				}
				else
				{
					val = '1';
				}
				container.val(val);
				container.removeAttr('disabled');
			}
		}
	);
}

function showHide(elem, elemHide, elemShow)
{
	elem = $(elem);
	if (elem.hasClass('active'))
	{}
	else
	{
		elem.parent().find('.tab').removeClass('active');
		elem.addClass('active');
		elemHide.hide();
		elemShow.show();
	}
}

/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */
/*
jQuery(function($){
	$.datepicker.regional['ru'] = {
		closeText: 'Закрыть',
		prevText: '&#x3c;Пред',
		nextText: 'След&#x3e;',
		currentText: 'Сегодня',
		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
		'Июл','Авг','Сен','Окт','Ноя','Дек'],
		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
		dateFormat: 'dd.mm.yy', firstDay: 1,
		isRTL: false};
	$.datepicker.setDefaults($.datepicker.regional['ru']);
});
*/
/************* hot-tour-list.js ***************/

function ShowTours(tourPriceGroupNumber)
{
	var tourPriceGroupUL = document.getElementById("tour-price-cat-container");
	var tourPriceGroupLIs = tourPriceGroupUL.getElementsByTagName("LI");
	for (var i = 0; i < tourPriceGroupLIs.length; i++)
	{
		if ((i == tourPriceGroupNumber))
			tourPriceGroupLIs[i].className = "current";
		else
			tourPriceGroupLIs[i].className = "";
		if (i == 0)
			tourPriceGroupLIs[i].className += " first";
	}
	if ((tourGroupBeginPrices.length > 0) && (tourGroupEndPrices.length > 0))
	{
		var tourListUL   = document.getElementById("other-tours-list");
		var tourListLIs  = tourListUL.getElementsByTagName("LI");
		var mayDisplay = false;
		cityChecked      = document.getElementById("tours-from-city-only").checked;
		for (var i = 0; i < tourListLIs.length; i++)
		{
			var tourClassStr = new String(tourListLIs[i].className);
			mayDisplay = false;
			if (((cityChecked) && (tourClassStr.indexOf("current-city") >= 0)) || (!cityChecked))
			{
				if ((parseInt(tourClassStr) >= tourGroupBeginPrices[tourPriceGroupNumber]) && (parseInt(tourClassStr) <= tourGroupEndPrices[tourPriceGroupNumber]))
				{
					mayDisplay = true;
				}
				else
					mayDisplay = false;
			}
			else
				mayDisplay = false;
			if (mayDisplay)
				tourListLIs[i].style.display = "";
			else
				tourListLIs[i].style.display = "none";
		}
	}
}
function CheckTours()
{
	var tourListUL   = document.getElementById("other-tours-list");
	var tourPriceGroupUL = document.getElementById("tour-price-cat-container");
	var tourListFromCityOnlyCheckbox = document.getElementById("tours-from-city-only");
	if (tourPriceGroupUL != null)
	{
		tourPriceGroupUL.parentNode.removeChild(tourPriceGroupUL);
	}
	if ((tourListUL != null) && (tourListFromCityOnlyCheckbox != null))
	{
		cityChecked = document.getElementById("tours-from-city-only").checked;
		tourCandidatRows = tourListUL.getElementsByTagName("LI");
		tourRows = [];
		if (cityChecked)
		{
			for(var i = 0; i < tourCandidatRows.length; i++)
			{
				var tourClassStr = new String(tourCandidatRows[i].className);
				if (tourClassStr.indexOf("current-city") >= 0)
				{
					tourRows.push(tourCandidatRows[i]);
				}
			}
		}
		else
		{
			tourRows = tourCandidatRows;
		}
		//alert(tourRows.length);
		if (tourRows.length > 0)
		{
			tourGroupBeginPrices = [];
			tourGroupEndPrices   = [];
			for(var i = 0; i < tourRows.length; i++)
			{
				if (i % toursPerPage == 0)
				{
					tourGroupBeginPrices.push(parseInt(tourRows[i].className));
					//alert(tourGroupBeginPrices[tourGroupBeginPrices.length - 1]);
				}
				if ((i % toursPerPage == toursPerPage - 1) || (i == tourRows.length - 1))
				{
					tourGroupEndPrices.push(parseInt(tourRows[i].className));
					//alert(tourGroupEndPrices[tourGroupEndPrices.length - 1]);
				}
			}
			//alert("Нижних границ ценовых категорий: " + tourGroupBeginPrices.length);
			//alert("Верхних границ ценовых категорий: " + tourGroupEndPrices.length);
		}
		if (tourGroupBeginPrices.length > 0)
		{
		
			var tourPriceGroupUL = document.createElement("UL");
			tourPriceGroupUL.id = "tour-price-cat-container";
			tourPriceGroupLIs = [];
			for(var i = 0; i < tourGroupBeginPrices.length; i++)
			{
				var tourPriceGroupLI = document.createElement("LI");
				tourPriceGroupLI.id = "tourPriceGroupLink[" + i + "]";
				/*
				tourPriceGroupLI.onclick = function() {
					ShowTours(i);
				}*/
				tourPriceGroupLI.innerHTML = "<span onclick = 'ShowTours(" + i + ")'>" + tourGroupBeginPrices[i] + "&nbsp;&#8212; " + tourGroupEndPrices[i] + "&nbsp;руб." + "</span>";
				if (i == 0)
					tourPriceGroupLI.className = "current first";
				else
					tourPriceGroupLI.className = "";
				tourPriceGroupUL.appendChild(tourPriceGroupLI);
			}
			tourListUL.parentNode.insertBefore(tourPriceGroupUL, tourListUL);
			ShowTours(0);
		}
	}
}
function CityCheck()
{
	var cityCheckBox = document.getElementById("tours-from-city-only");
	var tourListUL   = document.getElementById("other-tours-list");
	if ((cityCheckBox) && (tourListUL))
	{
		if (cityCheckBox.checked)
		{
			tourListUL.className = "tour-container current-city";
		}
		else
		{
			tourListUL.className = "tour-container";
		}
	}
	CheckTours();
}
/************* end hot-tour-list.js ***************/

/******** common.js *********/


bannerFlashGifBlocks = [];
function createXmlHttp()
{
	var XmlHttp = false;
	try 
	{
		XmlHttp = new XMLHttpRequest();
	}
	catch (trymicrosoft) 
	{
		try 
		{
			XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (othermicrosoft) 
		{
			try 
			{
				XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (failed) 
			{
				XmlHttp = false;
			}
		}
	}
	return XmlHttp;
}

function ShowElement(ElID)
{
	var el = document.getElementById(ElID);
	if (el.style.display == 'none')
			el.style.display = '';
	else
			el.style.display = 'none';
}

function ShowCityList(container)
{
	var cityListUL = $('#city-list');
	$(container).find('.cities-drop-main').addClass('active');
	if(cityListUL.is(':hidden'))
	{
		cityListUL.slideDown(250,
			function()
			{
				$(container).hover(
					function(){
						if(cityListUL.is(':hidden'))
						{
							$(container).find('.cities-drop-main').addClass('active');
							cityListUL.slideDown(250);
						}
					},
					function(){
						if(cityListUL.is(':visible'))
						{
							$(container).find('.cities-drop-main').removeClass('active');
							cityListUL.slideUp(250);
						}
					}
				);
			}
		);
	}
}

function HideCityList(container)
{
	var cityListUL = $('#city-list');
	cityListUL.slideUp(250);
}


function flash_version()
{
	var d, n = navigator, m, f = 'Shockwave Flash';
	if((m = n.mimeTypes) && (m = m["application/x-shockwave-flash"]) && m.enabledPlugin && (n = n.plugins) && n[f])
	{
		d = n[f].description;
	}
	else 
		if (window.ActiveXObject) 
		{ 
			try 
			{ 
				d = (new ActiveXObject((f+'.'+f).replace(/ /g,''))).GetVariable('$version');
			} 
			catch (e) 
			{}
		}
	return d ? d.replace(/\D+/,'').split(/\D+/) : [0,0];
}


function AddBannerForSelection(flashDivId, gifDivId)
{
	if ((document.getElementById(flashDivId) != null) && (document.getElementById(gifDivId) != null))
	{
		if (bannerFlashGifBlocks != null)
		{
			var addBannerElements = [flashDivId, gifDivId];
			bannerFlashGifBlocks.push(addBannerElements);
		}
	}

	
}

function SelectBanner(flashDivId, gifDivId)
{
	var flashDiv = document.getElementById(flashDivId);
	var gifDiv   = document.getElementById(gifDivId);
	if ((flashDiv != null) && (gifDiv != null))
	{
		if (flash_version()[0] >= 6 ) 
		{
			// установлена 6я или выше версия плагина, можно показать флешку
			return true;
		} 
		else 
		{
			// флеша нет, или старый, покажем рисунок
			flashDiv.style.display = "none";
			gifDiv.style.display   = "block";
			return true;
		}
	}
	else
	{
		return false;
	}
}

function ShowBanners()
{
	if ((bannerFlashGifBlocks != null) && (bannerFlashGifBlocks.length > 0))
	{
		for (var i = 0; i < bannerFlashGifBlocks.length; i++) 
		{
			SelectBanner(bannerFlashGifBlocks[i][0], bannerFlashGifBlocks[i][1]);
		}
	}
}
/******** end common.js *********/

/********** jquery.timers.js ************/

jQuery.fn.extend({
	everyTime: function(interval, label, fn, times, belay) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, times, belay);
		});
	},
	oneTime: function(interval, label, fn) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, 1);
		});
	},
	stopTime: function(label, fn) {
		return this.each(function() {
			jQuery.timer.remove(this, label, fn);
		});
	}
});

jQuery.extend({
	timer: {
		guid: 1,
		global: {},
		regex: /^([0-9]+)\s*(.*s)?$/,
		powers: {
			// Yeah this is major overkill...
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function(value) {
			if (value == undefined || value == null)
				return null;
			var result = this.regex.exec(jQuery.trim(value.toString()));
			if (result[2]) {
				var num = parseInt(result[1], 10);
				var mult = this.powers[result[2]] || 1;
				return num * mult;
			} else {
				return value;
			}
		},
		add: function(element, interval, label, fn, times, belay) {
			var counter = 0;
			
			if (jQuery.isFunction(label)) {
				if (!times) 
					times = fn;
				fn = label;
				label = interval;
			}
			
			interval = jQuery.timer.timeParse(interval);

			if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
				return;

			if (times && times.constructor != Number) {
				belay = !!times;
				times = 0;
			}
			
			times = times || 0;
			belay = belay || false;
			
			if (!element.$timers) 
				element.$timers = {};
			
			if (!element.$timers[label])
				element.$timers[label] = {};
			
			fn.$timerID = fn.$timerID || this.guid++;
			
			var handler = function() {
				if (belay && this.inProgress) 
					return;
				this.inProgress = true;
				if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
					jQuery.timer.remove(element, label, fn);
				this.inProgress = false;
			};
			
			handler.$timerID = fn.$timerID;
			
			if (!element.$timers[label][fn.$timerID]) 
				element.$timers[label][fn.$timerID] = window.setInterval(handler,interval);
			
			if ( !this.global[label] )
				this.global[label] = [];
			this.global[label].push( element );
			
		},
		remove: function(element, label, fn) {
			var timers = element.$timers, ret;
			
			if ( timers ) {
				
				if (!label) {
					for ( label in timers )
						this.remove(element, label, fn);
				} else if ( timers[label] ) {
					if ( fn ) {
						if ( fn.$timerID ) {
							window.clearInterval(timers[label][fn.$timerID]);
							delete timers[label][fn.$timerID];
						}
					} else {
						for ( var fn in timers[label] ) {
							window.clearInterval(timers[label][fn]);
							delete timers[label][fn];
						}
					}
					
					for ( ret in timers[label] ) break;
					if ( !ret ) {
						ret = null;
						delete timers[label];
					}
				}
				
				for ( ret in timers ) break;
				if ( !ret ) 
					element.$timers = null;
			}
		}
	}
});

if (jQuery.browser.msie)
	jQuery(window).one("unload", function() {
		var global = jQuery.timer.global;
		for ( var label in global ) {
			var els = global[label], i = els.length;
			while ( --i )
				jQuery.timer.remove(els[i], label);
		}
	});

/********** end jquery.timers.js ************/
	
/**************** jTPS.js ******************/

/*
 * jTPS - table sorting, pagination, and animated page scrolling
 *	version 0.5.1
 * Author: Jim Palmer
 * Released under MIT license.
 */
 (function($) {

	// apply table controls + setup initial jTPS namespace within jQuery
	$.fn.jTPS = function ( opt ) {

		$(this).data('tableSettings', $.extend({
			perPages:			[5, 6, 10, 20, 50, 'ALL'],				// the "show per page" selection
			perPageText:		'Show per page:',						// text that appears before perPages links
			perPageDelim:		'<span style="color:#ccc;">|</span>',	// text or dom node that deliminates each perPage link 
			perPageSeperator:	'..',									// text or dom node that deliminates split in select page links
			scrollDelay:		30,										// delay (in ms) between steps in anim. - IE has trouble showing animation with < 30ms delay
			scrollStep:			2,										// how many tr's are scrolled per step in the animated vertical pagination scrolling
			fixedLayout:		true,									// autoset the width/height on each cell and set table-layout to fixed after auto layout
			clickCallback:		function () {}							// callback function after clicks on sort, perpage and pagination
		}, opt));
		
		// generic pass-through object + other initial variables
		var pT = $(this), page = page || 1, perPages = $(this).data('tableSettings').perPages, perPage = perPage || perPages[0],
			rowCount = $('>tbody', this).find('tr').length;

		// append jTPS class "stamp"
		$(this).addClass('jTPS');
		
		// setup the fixed table-layout so that the animation doesn't bounce around - faux grid for table
		if ( $(this).data('tableSettings').fixedLayout ) {
			// "fix" the table layout and individual cell width & height settings
			if ( $(this).css('table-layout') != 'fixed' ) {
				// find max tbody td cell height
				var maxCellHeight = 0;

				// set width style on the TH headers (rely on jQuery with computed styles support)
				$('>thead', this).find('th,td').each(function () { $(this).css('width', $(this).width()); });

				// ensure browser-formated widths for each column in the thead and tbody
				var tbodyCh = $('>tbody',this)[0].childNodes, tmpp = 0;
				// loop through tbody children and find the Nth <TR>
				for ( var tbi=0, tbcl=tbodyCh.length; tbi < tbcl; tbi++ )
					if ( tbodyCh[ tbi ].nodeName == 'TR' )
						maxCellHeight = Math.max( maxCellHeight, tbodyCh[ tbi ].offsetHeight );

				// now set the height attribute and/or style to the first TD cell (not the row)
				for ( var tbi=0, tbcl=tbodyCh.length; tbi < tbcl; tbi++ )
					if ( tbodyCh[ tbi ].nodeName == 'TR' )
						for ( var tdi=0, trCh=tbodyCh[ tbi ].childNodes, tdcl=trCh.length; tdi < tdcl; tdi++ )
							if ( trCh[ tdi ].nodeName == 'TD' ) {
								trCh[ tdi ].style.height = maxCellHeight + 'px';
								tdi = tdcl;
							}
				// now set the table layout to fixed
				$(this).css('table-layout','fixed');
			}
		}

		// remove all stub rows
		$('.stubCell', this).remove();

		// add the stub rows
		var stubCount=0, cols = Math.max( $('>thead:first tr:last th,>thead:first tr:last td', this).length, parseInt( $('>thead:first tr:last th,>thead:first tr:last td').attr('colspan') || 0 ) ), 
			stubs = ( perPage - ( $('>tbody>tr', this).length % perPage ) ),
			stubHeight = $('>tbody>tr:first>td:first', this).css('height');
		for ( ; stubCount < stubs && stubs != perPage; stubCount++ )
			$('>tbody>tr:last', this).after( '<tr class="stubCell"><td colspan="' + cols + '" style="height: ' + stubHeight + ';">&nbsp;</td></tr>' );

		// paginate the result
		if ( rowCount > perPage && perPage != 0 )
			$('>tbody>tr:gt(' + (perPage - 1) + ')', this).addClass('hideTR');

		// bind sort functionality to theader
		if (perPage != 0)
			$('>thead [sort],>thead .sort', this).each(
				function (tdInd) {
					$(this).addClass('sortableHeader').unbind('click').bind('click',
						function () {
							var columnNo = $('>thead tr:last', pT).children().index( $(this) ),
								desc = $('>thead [sort],>thead .sort', pT).eq(columnNo).hasClass('sortAsc') ? true : false;
							// sort the rows
							sort( pT, columnNo, desc );
							// show first perPages rows
							var page = parseInt( $('.hilightPageSelector:first', pT).html() ) || 1;
							$('>tbody>tr', pT).removeClass('hideTR').filter(':gt(' + ( ( perPage - 1 ) * page ) + ')').addClass('hideTR');
							$('>tbody>tr:lt(' + ( ( perPage - 1 ) * ( page - 1 ) ) + ')', pT).addClass('hideTR');
							// scroll to first page if not already
							if ($('.pageSelector', pT).index($('.hilightPageSelector', pT)) > 0)
								$('.pageSelector:first', pT).click();
							// hilight the sorted column header
							$('>thead .sortDesc,>thead .sortAsc', pT).removeClass('sortDesc').removeClass('sortAsc');
							$('>thead [sort],>thead .sort', pT).eq(columnNo).addClass( desc ? 'sortDesc' : 'sortAsc' );
							// hilight the sorted column
							$('>tbody>tr>td.sortedColumn', pT).removeClass('sortedColumn');
							$('>tbody>tr:not(.stubCell)', pT).each( function () { $('>td:eq(' + columnNo + ')', this).addClass('sortedColumn'); } );
							clearSelection();
							// callback function after pagination renderd
							$(pT).data('tableSettings').clickCallback();
						}
					);
				}
			);

		// add perPage selection link + delim dom node
		$('>.nav .selectPerPage', this).empty();
		var pageSel = perPages.length;
		while ( pageSel-- ) 
			$('>.nav .selectPerPage', this).prepend( ( (pageSel > 0) ? $(this).data('tableSettings').perPageDelim : '' ) + 
				'<span class="perPageSelector">' + perPages[pageSel] + '</span>' );

		// now draw the page selectors
		drawPageSelectors( this, page || 1 );

		// prepend the instructions and attach select hover and click events
		$('>.nav .selectPerPage', this).prepend( $(this).data('tableSettings').perPageText ).find('.perPageSelector').each(
			function () {
				if ( ( parseInt($(this).html()) || rowCount ) == perPage )
					$(this).addClass('perPageSelected');
				$(this).bind('mouseover mouseout', 
					function (e) { 
						e.type == 'mouseover' ? $(this).addClass('perPageHilight') : $(this).removeClass('perPageHilight');
					}
				);
				$(this).bind('click', 
					function () { 
						// set the new number of pages
						perPage = parseInt( $(this).html() ) || rowCount;
						if ( perPage > rowCount ) perPage = rowCount;
						// remove all stub rows
						$('.stubCell', this).remove();
						// redraw stub rows
						var stubCount=0, cols = $('>thead th,>thead td', pT).length, 
							stubs = ( perPage - ( $('>tbody>tr', pT).length % perPage ) ), 
							stubHeight = $('>tbody>tr:first>td:first', pT).css('height');
						for ( ; stubCount < stubs && stubs != perPage; stubCount++ )
							$('>tbody>tr:last', pT).after( '<tr class="stubCell"><td colspan="' + cols + '" style="height: ' + stubHeight + ';">&nbsp;</td></tr>' );
						// set new visible rows
						$('>tbody>tr', pT).removeClass('hideTR').filter(':gt(' + ( ( perPage - 1 ) * page ) + ')').addClass('hideTR');
						$('>tbody>tr:lt(' + ( ( perPage - 1 ) * ( page - 1 ) ) + ')', pT).addClass('hideTR');
						// back to the first page
						$('.pageSelector:first', pT).click();
						$(this).siblings('.perPageSelected').removeClass('perPageSelected');
						$(this).addClass('perPageSelected');
						// redraw the pagination
						drawPageSelectors( pT, 1 );
						// update status bar
						var cPos = $('>tbody>tr:not(.hideTR):first', pT).prevAll().length,
							ePos = $('>tbody>tr:not(.hideTR):not(.stubCell)', pT).length;
						$('>.nav .status', pT).html( 'Строки ' + ( cPos + 1 ) + ' - ' + ( cPos + ePos ) + ' из ' + rowCount + '' );
						clearSelection();
						// callback function after pagination renderd
						$(pT).data('tableSettings').clickCallback();
					}
				);
			}
		);
		
		// show the correct paging status
		var cPos = $('>tbody>tr:not(.hideTR):first', this).prevAll().length, 
			ePos = $('>tbody>tr:not(.hideTR):not(.stubCell)', this).length;
		$('>.nav .status', this).html( 'Строки ' + ( cPos + 1 ) + ' - ' + ( cPos + ePos ) + ' из ' + rowCount );

		// clear selected text function
		function clearSelection () {
			if ( document.selection && typeof(document.selection.empty) != 'undefined' )
				document.selection.empty();
			else if ( typeof(window.getSelection) === 'function' && typeof(window.getSelection().removeAllRanges) === 'function' )
				window.getSelection().removeAllRanges();
		}

		// render the pagination functionality
		function drawPageSelectors ( target, page ) {

			// add pagination links
			$('>.nav .pagination', target).empty();
			var pages = ( perPage >= rowCount || perPage == 0 ) ? 0 : Math.ceil( rowCount / perPage ), totalPages = pages;
			while ( pages-- )
				$('>.nav .pagination', target).prepend( '<div class="pageSelector">' + ( pages + 1 ) + '</div>' );
			var pageCount = $('>.nav:first .pageSelector', target).length;
			$('>.nav', target).each(function () {
				$('.hidePageSelector', this).removeClass('hidePageSelector');
				$('.hilightPageSelector', this).removeClass('hilightPageSelector');
				$('.pageSelectorSeperator', this).remove();
				$('.pageSelector:lt(' + ( ( page > ( pageCount - 4 ) ) ? ( pageCount - 5 ) : ( page - 2 ) ) + '):not(:first)', this).addClass('hidePageSelector')
					.eq(0).after( '<div class="pageSelectorSeperator">' + $(target).data('tableSettings').perPageSeperator + '</div>' );
				$('.pageSelector:gt(' + ( ( page < 4 ) ? 4 : page ) + '):not(:last)', this).addClass('hidePageSelector')
					.eq(0).after( '<div class="pageSelectorSeperator">' + $(target).data('tableSettings').perPageSeperator + '</div>' );
				$('.pageSelector:eq(' + ( page - 1 ) + ')', this).addClass('hilightPageSelector');
			});

			// remove the pager title if no pages necessary
			if ( perPage >= rowCount )
				$('>.nav .paginationTitle', target).css('display','none');
			else
				$('>.nav .paginationTitle', target).css('display','');
			
			// bind the pagination onclick
			$('>.nav .pagination .pageSelector', target).each(
				function () {
					$(this).bind('click',
						function () {

							// if double clicked - stop animation and jump to selected page - this appears to be a tripple click in IE7
							if ( $(this).hasClass('hilightPageSelector') ) {
								if ( $(this).parent().queue().length > 0 ) {
									// really stop all animations and create new queue
									$(this).parent().stop().queue( "fx", [] ).stop();
									// set the user directly on the correct page without animation
									var beginPos = ( ( parseInt( $(this).html() ) - 1 ) * perPage ), endPos = beginPos + perPage;
									$('>tbody> tr', pT).removeClass('hideTR').addClass('hideTR');
									$('>tbody>tr:gt(' + (beginPos - 2) + '):lt(' + ( perPage ) + ')', pT).andSelf().removeClass('hideTR');
									// update status bar
									var cPos = $('>tbody>tr:not(.hideTR):first', pT).prevAll().length,
										ePos = $('>tbody>tr:not(.hideTR):not(.stubCell)', pT).length;
									$('>.nav .status', pT).html( 'Строки ' + ( cPos + 1 ) + ' - ' + ( cPos + ePos ) + ' из ' + rowCount + '' );
								}
								clearSelection();
								return false;
							}

							// hilight the specific page button
							$(this).addClass('hilightPageSelector');

							// really stop all animations
							$(this).parent().stop().queue( "fx", [] ).stop().dequeue();

							// setup the pagination variables
							var beginPos = $('>tbody>tr:not(.hideTR):first', pT).prevAll().length,
								endPos = ( ( parseInt( $(this).html() ) - 1 ) * perPage );
							if ( endPos > rowCount )
								endPos = (rowCount - 1);
							// set the steps to be exponential for all the page scroll difference - i.e. faster for more pages to scroll
							var sStep = $(pT).data('tableSettings').scrollStep * Math.ceil( Math.abs( ( endPos - beginPos ) / perPage ) );
							if ( sStep > perPage ) sStep = perPage;
							var steps = Math.ceil( Math.abs( beginPos - endPos ) / sStep );

							// start scrolling
							while ( steps-- ) {
								$(this).parent().animate({'opacity':1}, $(pT).data('tableSettings').scrollDelay,
									function () {
										// reset the scrollStep for the remaining items
										if ( $(this).queue("fx").length == 0 )
											sStep = ( Math.abs( beginPos - endPos ) % sStep ) || sStep;
										/* scoll up */
										if ( beginPos > endPos ) {
											$('>tbody>tr:not(.hideTR):first', pT).prevAll(':lt(' + sStep + ')').removeClass('hideTR');
											if ( $('>tbody>tr:not(.hideTR)', pT).length > perPage )
												$('>tbody>tr:not(.hideTR):last', pT).prevAll(':lt(' + ( sStep - 1 ) + ')').andSelf().addClass('hideTR');
											// if scrolling up from less rows than perPage - compensate if < perPage
											var currRows =  $('>tbody>tr:not(.hideTR)', pT).length;
											if ( currRows < perPage )
												$('>tbody>tr:not(.hideTR):last', pT).nextAll(':lt(' + ( perPage - currRows ) + ')').removeClass('hideTR');
										/* scroll down */
										} else {
											var endPoint = $('>tbody>tr:not(.hideTR):last', pT);
											$('>tbody>tr:not(.hideTR):lt(' + sStep + ')', pT).addClass('hideTR');
											$(endPoint).nextAll(':lt(' + sStep + ')').removeClass('hideTR');
										}
										// update status bar
										var cPos = $('>tbody>tr:not(.hideTR):first', pT).prevAll().length,
											ePos = $('>tbody>tr:not(.hideTR):not(.stubCell)', pT).length;
										$('>.nav .status', pT).html( 'Строки ' + ( cPos + 1 ) + ' - ' + ( cPos + ePos ) + ' из ' + rowCount + '' );
									}
								);
							}
							
							// redraw the pagination
							drawPageSelectors( pT, parseInt( $(this).html() ) );
							
							// callback function after pagination renderd
							$(pT).data('tableSettings').clickCallback();
							
						}
					);
				}
			);
			
		};
		// sort wrapper function
		function sort ( target, tdIndex, desc ) {
			var fCol = $('>thead th,>thead th', target).get(tdIndex),
				sorted = $(fCol).hasClass('sortAsc') || $(fCol).hasClass('sortDesc') || false,
				nullChar = String.fromCharCode(0), 
				re = /([-]?[0-9\.]+)/g,
				rows = $('>tbody>tr:not(.stubCell)', target).get(), 
				procRow = [];

			$(rows).each(
				function(key, val) {
					procRow.push( $('>td:eq(' + tdIndex + ')', val).text() + nullChar + procRow.length );
				}
			);
			if ( !sorted ) {
				// natural sort
				procRow.sort(
					function naturalSort (a, b) {
						// setup temp-scope variables for comparison evauluation
						var re = /(-?[0-9\.]+)/g,
							nC = String.fromCharCode(0),
							x = a.toString().toLowerCase().split(nC)[0] || '',
							y = b.toString().toLowerCase().split(nC)[0] || '',
							xN = x.replace( re, nC + '$1' + nC ).split(nC),
							yN = y.replace( re, nC + '$1' + nC ).split(nC),
							xD = (new Date(x)).getTime(),
							yD = xD ? (new Date(y)).getTime() : null;
						// natural sorting of dates
						if ( yD )
							if ( xD < yD ) return -1;
							else if ( xD > yD )	return 1;
						// natural sorting through split numeric strings and default strings
						for( var cLoc = 0, numS = Math.max(xN.length, yN.length); cLoc < numS; cLoc++ ) {
							oFxNcL = parseFloat(xN[cLoc]) || xN[cLoc];
							oFyNcL = parseFloat(yN[cLoc]) || yN[cLoc];
							if (oFxNcL < oFyNcL) return -1;
							else if (oFxNcL > oFyNcL) return 1;
						}
						return 0;
					});
				if ( !desc ) procRow.reverse(); // properly position order of sort
			}
			// now re-order the parent tbody based off the quick sorted tbody map
			$('>tbody', target).addClass('jtpstemp').before('<tbody></tbody>');
			var nr = procRow.length, tf = $('>tbody', target)[0];
			// move the row from old tbody to new tbody in order of new tbody with replaceWith to retain original tbody row positioning
			if ( sorted )
				while ( nr-- )
					tf.appendChild( rows[ nr ] );
			else
				while ( nr-- )
					tf.appendChild( rows[ parseInt( procRow[ nr ].split(nullChar).pop() ) ] );
			// remove the old table
			$('>tbody.jtpstemp', target).remove();
			// redraw stub rows
			var stubCount=0, cols = $('>thead>tr:last th', target).length, 
				stubs = ( perPage - ( $('>tbody>tr', target).length % perPage ) ), 
				stubHeight = $('>tbody>tr:first>td:first', target).css('height');
			for ( ; stubCount < stubs && stubs != perPage; stubCount++ )
				$('>tbody>tr:last', target).after( '<tr class="stubCell"><td colspan="' + cols + '" style="height: ' + stubHeight + ';">&nbsp;</td></tr>' );
		}
		// chainable
		return this;
	};

})(jQuery);
/**************** end jTPS.js ******************/

/************** IBOX ***************/

var iBox = function() {
  var _pub = {
    // label for the close link
    close_label: 'Закрыть',

    // show iframed content in the parent window
    // this *does not* work with #containers
    inherit_frames: false,

    // how fast to fade in the overlay/ibox (this is each step in ms)
    fade_in_speed: 300,
    fade_out_speed: 300,

    // our attribute identifier for our iBox elements
    attribute_name: 'rel',
    
    // tags to hide when we show our box
    tags_to_hide: ['select', 'embed', 'object'],

    // default width of the box (when displaying html only)
    // height is calculated automatically
    default_width: 480,

    // public version number
    version_number: '2.18',
    // internal build number
    build_number: '1576',

    // browser checks    
    is_opera: navigator.userAgent.indexOf('Opera/9') != -1,
    is_ie: navigator.userAgent.indexOf("MSIE ") != -1,
    is_ie6: false /*@cc_on || @_jscript_version < 5.7 @*/,
    is_firefox: navigator.appName == "Netscape" && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1,
    is_mac: navigator.userAgent.indexOf('Macintosh') != -1,

    // url for including images/external files
    base_url: '',
    
    /**
     * Updates the base_url variable.
     * @param {String} path Relative or absolute path to this file.
     */
    setPath: function(path) {
      _pub.base_url = path;
    },
    
    /**
     * Checks a container for specified tags containing rel="ibox"
     * @param {Object} container
     * @param {String} tag_name
     */
    checkTags: function(container, tag_name) {
      if (!container) var container = document.body;
      if (!tag_name) var tag_name = 'a';
      var els = container.getElementsByTagName(tag_name);
      for (var i=0; i<els.length; i++) {
        if (els[i].getAttribute(_pub.attribute_name)) {
          var t = els[i].getAttribute(_pub.attribute_name);
          if ((t.indexOf("ibox") != -1) || t.toLowerCase() == "ibox") { // check if this element is an iBox element
            els[i].onclick = _pub.handleTag;
          }
        }
      }
    },
    
    /**
     * Binds arguments to a callback function
     */
    bind: function(fn) {
        var args = [];
        for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
        return function(e) { return fn.apply(this, [e].concat(args)); };
    },

    /**
     * Sets the content of the ibox
     * @param {String} content HTML content
     * @param {Object} params
     */
    html: function(content, params) {
      if (content === undefined) return els.content;
      if (params === undefined) var params = {};
      if (!active.is_loaded) return;
      _pub.clear();

      _pub.updateObject(els.wrapper.style, {display: 'block', visibility: 'hidden', left: 0, top: 0, height: '', width: ''});
      
      if (typeof(content) == 'string') els.content.innerHTML = content;
      else els.content.appendChild(content);

      var pagesize = _pub.getPageSize();

      if (params.can_resize === undefined) params.can_resize = true;
      if (params.fade_in === undefined) params.use_fade = true;

      if (params.fullscreen) {
        params.width = '100%';
        params.height = '100%';
      }
      
      // reset offsets
      offset.container = [els.wrapper.offsetLeft*2, els.wrapper.offsetTop*2];
      offset.wrapper = [els.wrapper.offsetWidth-els.content.offsetWidth, els.wrapper.offsetHeight-els.content.offsetHeight];

      // TODO: remove the +4 when issue is solved with calculations
      offset.wrapper[1] += 4;

      if (params.width) var width = params.width;
      else var width = _pub.default_width;

      if (params.height) var height = params.height;
      else {
        els.content.style.height = '100%';
        var height = els.content.offsetHeight + 12;
        els.content.style.height = '';
      }
      active.dimensions = [width, height];
      active.params = params;
      _pub.reposition();

      // XXX: Fix for inline containers which had elements that were hidden
      for (var i=0; i<_pub.tags_to_hide.length; i++) {
        showTags(_pub.tags_to_hide[i], els.content);
      }

      els.wrapper.style.visibility = 'visible';
    },
    
    /**
     * Empties the content of the iBox (also hides the loading indicator)
     */
    clear: function() {
      els.loading.style.display = "none";
      while (els.content.firstChild) els.content.removeChild(els.content.firstChild);
    },
    
    /**
     * Loads text into the ibox
     * @param {String} url
     * @param {String} title
     * @param {Object} params
     */
    show: function(text, title, params) {
      showInit(title, params, function() {
        _pub.html(text, active.params);
      });
    },
    /**
     * Loads a url into the ibox
     * @param {String} url
     * @param {String} title
     * @param {Object} params
     */
    showURL: function(url, title, params) {
      showInit(title, params, function() {
        for (var i=0; i<_pub.plugins.list.length; i++) {
          var plugin = _pub.plugins.list[i];
          if (plugin.match(url)) {
            active.plugin = plugin;
            plugin.render(url, active.params);
            break;
          }
        }
      });
    },

    /**
     * Hides the iBox
     */
    hide: function() {
      if (active.plugin) {
        // call the plugins unload method
        if (active.plugin.unload) active.plugin.unload();
      }
      active = {}
      _pub.clear();
      // restore elements that were hidden
      for (var i=0; i<_pub.tags_to_hide.length; i++) showTags(_pub.tags_to_hide[i]);

      els.loading.style.display = 'none';
      els.wrapper.style.display = 'none';
      _pub.fade(els.overlay, _pub.getOpacity(null, els.overlay), 0, _pub.fade_out_speed, function() { els.overlay.style.display = 'none';});
      _pub.fireEvent('hide');
    },

    /**
     * Repositions the iBox wrapper based on the params set originally.
     */
    reposition: function() {
      if (!active.is_loaded) return;

      // center loading box
      if (els.loading.style.display != 'none') _pub.center(els.loading);
      
      // update ibox width/height/position
      if (active.dimensions) {
        var pagesize = _pub.getPageSize();

        var width = active.dimensions[0];
        var height = active.dimensions[1];
        
        if (height.toString().indexOf('%') != -1) {
          els.wrapper.style.height = (Math.max(document.documentElement.clientHeight, document.body.clientHeight, pagesize.height) - offset.container[0])*(parseInt(height)/100) + 'px';
        }
        else if (height) {
          els.content.style.height = height + 'px';
          // TODO: if we dont set wrapper height, it doesnt restrict the height and the box is fine
          // so offset.wrapper[1] must not be correct
          els.wrapper.style.height = els.content.offsetHeight + offset.wrapper[1] + 'px';
        }
        else {
          els.wrapper.style.height = els.content.offsetHeight + offset.wrapper[1] + 'px';
        }
        var container_offset = (els.content.offsetHeight - els.content.firstChild.offsetHeight);
        if (width.toString().indexOf('%') != -1) {
          els.wrapper.style.width = (Math.max(document.documentElement.clientWidth, document.body.clientWidth, pagesize.width) - offset.container[1])*(parseInt(width)/100) + 'px';
          var container_offset = 0;
        }
        else {
          els.content.style.width = width + 'px';
          els.wrapper.style.width = els.content.offsetWidth + offset.wrapper[0] + 'px';
        }

        _pub.updateObject(els.content.style, {width: '', height: ''});

        var width = parseInt(els.wrapper.style.width);
        var height = parseInt(els.wrapper.style.height);

        // if we can resize this, make sure it fits in our page bounds
        if (active.params.can_resize) {
          var x = pagesize.width;
          var y = pagesize.height;
          
          x -= offset.container[0];
          y -= offset.container[1];
          if (width > x) {
            if (active.params.constrain) height = height * (x/width);
            width = x;
          }
          if (height > y) {
            if (active.params.constrain) width = width * (y/height);
            height = y;
          }
          _pub.updateObject(els.wrapper.style, {width: width + 'px', height: height + 'px'});
        }

        //els.content.style.width = width - offset.wrapper[0] + 'px';
        // TODO: this isn't adjusting to the right height for containers that are smaller than the page height
        // resize the wrappers height based on the content boxes height
        // this needs to be height - ibox_content[margin+padding+border]
        els.content.style.height = height - offset.wrapper[1] + 'px';
        if (active.dimensions != ['100%', '100%']) _pub.center(els.wrapper);
      }
      
      // fix overlay width/height (cant use css fixed on ie6 or fx or any
      // browser really due to issues)
      els.overlay.style.height = Math.max(document.body.clientHeight, document.documentElement.clientHeight) + 'px';
    },

    updateObject: function(obj, params) {
      for (var i in params) obj[i] = params[i];
    },

    /**
     * Centers an object
     * @param {Object} obj
     */
    center: function(obj) {
      var pageSize = _pub.getPageSize();
      var scrollPos = _pub.getScrollPos();
      var emSize = _pub.getElementSize(obj);
      var x = Math.round((pageSize.width - emSize.width) / 2 + scrollPos.scrollX);
      var y = Math.round((pageSize.height - emSize.height) / 2 + scrollPos.scrollY);
      if (obj.offsetLeft) x -= obj.offsetLeft;
      if (obj.offsetTop) y -= obj.offsetTop;
      if (obj.style.left) x += parseInt(obj.style.left);
      if (obj.style.top) y += parseInt(obj.style.top);
      // this nearly centers it due to scrollbars
      x -= 10;
      _pub.updateObject(obj.style, {top: y + 'px', left: x + 'px'});
    },
    
    getStyle: function(obj, styleProp) {
      if (obj.currentStyle)
        return obj.currentStyle[styleProp];
      else if (window.getComputedStyle)
        return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
    },

    /**
     * Gets the scroll positions
     */
    getScrollPos: function() {
      var docElem = document.documentElement;
      return {
        scrollX: document.body.scrollLeft || window.pageXOffset || (docElem && docElem.scrollLeft),
        scrollY: document.body.scrollTop || window.pageYOffset || (docElem && docElem.scrollTop)
      };
    },

    /**
     * Gets the page constraints
     */
    getPageSize: function() {
      return {
        width: window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth,
        height: window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight
      };
    },

    /**
     * Gets an objects offsets
     * @param {Object} obj
     */
    getElementSize: function(obj) {
      return {
        width: obj.offsetWidth || obj.style.pixelWidth,
        height: obj.offsetHeight || obj.style.pixelHeight
      };
    },
    
    fade: function(obj, start, end, speed, callback) {
      if (start === undefined || !(start >= 0) || !(start <= 100)) var start = 0;
      if (end === undefined || !(end >= 0) || !(end <= 100)) var end = 100;
      if (speed === undefined) var speed = 0;

      if (obj.fader) clearInterval(obj.fader);

      if (!speed) {
        _pub.setOpacity(null, obj, end);
        if (callback) callback();
      }
      
      var opacity_difference = end - start; 
      var time_total = speed; // time is speed (jQuery compat)
      var step_size = 25; // step size in ms
      var steps = time_total / step_size; // total number of steps
      var increment = Math.ceil(opacity_difference / steps); // how much to incr per step
      
      obj.fader = setInterval(_pub.bind(function(e, obj, increment, end, callback) {
        var opacity = _pub.getOpacity(e, obj) + increment;
        _pub.setOpacity(e, obj, opacity);
        if ((increment < 0 && opacity <= end) || (increment > 0 && opacity >= end)) {
          _pub.setOpacity(e, obj, end);
          clearInterval(obj.fader);
          if (callback) callback();
        }
      }, obj, increment, end, callback), step_size);
    },

    /**
     * Sets the opacity of an element
     * @param {Object} obj
     * @param {Integer} value
     */
    setOpacity: function(e, obj, value) {
      value = Math.round(value);
      obj.style.opacity = value/100;
      obj.style.filter = 'alpha(opacity=' + value + ')';
    },
    
    /**
     * Gets the opacity of an element
     * @param {Object} obj
     * @return {Integer} value
     */
    getOpacity: function(e, obj) {
      return _pub.getStyle(obj, 'opacity')*100;
    },
    
    /**
     * Creates a new XMLHttpRequest object based on browser
     */
    createXMLHttpRequest: function() {
      var http;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http = new XMLHttpRequest();
        if (http.overrideMimeType) {
          // set type accordingly to anticipated content type
          http.overrideMimeType('text/html');
        }
      }
      else if (window.ActiveXObject) { // IE
        try {
          http = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          try {
            http = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
      }
      if (!http) {
        alert('Cannot create XMLHTTP instance');
        return false;
      }
      return http;
    },
    
    addEvent: function(obj, evType, fn) {
      if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false);
        return true;
      }
      else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
      }
      else {
        return false;
      }
    },
    
    addEventListener: function(name, callback) {
      if (!events[name]) events[name] = new Array();
      events[name].push(callback);
    },
    
    /**
     * Causes all event listeners attached to `name` event to
     * execute.
     * @param {String} name Event name
     */
    fireEvent: function(name) {
        if (events[name] && events[name].length) {
          for (var i=0; i<events[name].length; i++) {
            var args = [];
            for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
            // Events returning false stop propagation
            if (events[name][i](args) === false) break;
          }
        }
    },
    
    /**
     * Parses the arguments in the rel attribute
     * @param {String} query
     */
    parseQuery: function(query) {
       var params = new Object();
       if (!query) return params; 
       var pairs = query.split(/[;&]/);
       var end_token;
       for (var i=0; i<pairs.length; i++) {
          var keyval = pairs[i].split('=');
          if (!keyval || keyval.length != 2) continue;
          var key = unescape(keyval[0]);
          var val = unescape(keyval[1]);
          val = val.replace(/\+/g, ' ');
          if (val[0] == '"') var token = '"';
          else if (val[0] == "'") var token = "'";
          else var token = null;
          if (token) {
            if (val[val.length-1] != token) {
              do {
                i += 1;
                val += '&'+pairs[i];
              }
              while ((end_token = pairs[i][pairs[i].length-1]) != token)
            }
            val = val.substr(1, val.length-2);
          }
          if (val == 'true') val = true;
          else if (val == 'false') val = false;
          else if (val == 'null') val = null;
          params[key] = val;
       }
       return params;
    },
    /**
     * Handles the onclick event for iBox anchors.
     * @param {Event} e
     */
    handleTag: function(e) {
      var t = this.getAttribute('rel');
      var params = _pub.parseQuery(t.substr(5,999));
      if (params.target) var url = params.target;
      else if (this.target && !params.ignore_target) var url = this.target;
      else var url = this.href;
      var title = this.title;
      if (_pub.inherit_frames && window.parent) window.parent.iBox.showURL(url, title, params);
      else _pub.showURL(url, title, params);
      return false;
    },
    
    plugins: {
      list: new Array(),
      register: function(func, last) {
        if (last === undefined) var last = false;
        if (!last) {
          _pub.plugins.list = [func].concat(_pub.plugins.list);
        }
        else {
          _pub.plugins.list.push(func);
        }
      }
    }
  };
  
  // private methods and variables
  var active = {};
  
  // events
  var events = {};

  // some containers
  // we store these in memory instead of finding them each time
  var els = {};
  
  var offset = {};
  
  /**
   * Creates the iBox container and appends it to an element
   * @param {HTMLObject} elem Container to attach to
   * @return {HTMLObject} iBox element
   */
  var create = function(elem) {
    pagesize = _pub.getPageSize();
    
    // TODO: why isnt this using DOM tools
    // a trick on just creating an ibox wrapper then doing an innerHTML on our root ibox element
    els.container = document.createElement('div');
    els.container.id = 'ibox';

    els.overlay = document.createElement('div');
    els.overlay.style.display = 'none';
    _pub.setOpacity(null, els.overlay, 0);
    // firefox mac has issues with opacity and flash
    if (!_pub.is_firefox) els.overlay.style.background = '#000000';
    else els.overlay.style.backgroundImage = "url('http://vipgeo.ru/js/ibox/images/bg.png')";
    els.overlay.id = 'ibox_overlay';
    params = {position: 'absolute', top: 0, left: 0, width: '100%'};
    _pub.updateObject(els.overlay.style, params);
    els.overlay.onclick = _pub.hide;
    els.container.appendChild(els.overlay);

    els.loading = document.createElement('div');
    els.loading.id = 'ibox_loading';
    els.loading.innerHTML = 'Загрузка...';
    els.loading.style.display = 'none';
    els.loading.onclick = _pub.hide
    els.container.appendChild(els.loading);

    els.wrapper = document.createElement('div')
    els.wrapper.id = 'ibox_wrapper';
    _pub.updateObject(els.wrapper.style, {position: 'absolute', top: 0, left: 0, display: 'none'});

    els.content = document.createElement('div');
    els.content.id = 'ibox_content';
    _pub.updateObject(els.content.style, {overflow: 'auto'})
    els.wrapper.appendChild(els.content);
  
    var child = document.createElement('div');
    child.id = 'ibox_footer_wrapper';
  
    var child2 = document.createElement('a');
    child2.innerHTML = _pub.close_label;
    child2.href = 'javascript:void(0)';
    child2.onclick = _pub.hide;
    child.appendChild(child2);
  
    els.footer = document.createElement('div');
    els.footer.id = 'ibox_footer';
    els.footer.innerHTML = '&nbsp;';
    child.appendChild(els.footer);
    els.wrapper.appendChild(child);

    els.container.appendChild(els.wrapper);

    elem.appendChild(els.container);
        
    _pub.updateObject(els.wrapper.style, {right: '', bottom: ''});
    
    return els.container;
  };
  
  /**
   * Hides tags within the container
   * @param {String} tag The name of the tag (e.g. 'a')
   * @param {HTMLObject} container The container to restore tags within (defaults to document)
   */
  var hideTags = function(tag, container) {
    if (container === undefined) var container = document.body;
    var list = container.getElementsByTagName(tag);
    for (var i=0; i<list.length; i++) {
      if (_pub.getStyle(list[i], 'visibility') != 'hidden' && list[i].style.display != 'none') {
        list[i].style.visibility = 'hidden';
        list[i].wasHidden = true;
      }
    }
  };
  
  /**
   * Shows all previously hidden tags in a container.
   * @param {String} tag The name of the tag (e.g. 'a')
   * @param {HTMLObject} container The container to restore tags within (defaults to document)
   */
  var showTags = function(tag, container) {
    if (container === undefined) var container = document.body;
    var list = container.getElementsByTagName(tag);
    for (var i=0; i<list.length; i++) {
      if (list[i].wasHidden) {
        list[i].style.visibility = 'visible';
        list[i].wasHidden = null;
      }
    }
  };
  
  var showInit = function(title, params, callback) {
    if (!_initialized) initialize();
    if (params === undefined) var params = {};
    if (active.plugin) _pub.hide();

    active.is_loaded = true;
    active.params = params;
    
    els.loading.style.display = "block";
    
    _pub.center(els.loading);
    _pub.reposition();

    // hide tags
    for (var i=0; i<_pub.tags_to_hide.length; i++) {
      hideTags(_pub.tags_to_hide[i]);
    }

    // set title here
    els.footer.innerHTML = title || "&nbsp;";

    // setup background
    els.overlay.style.display = "block";
    
    if (!_pub.is_firefox) var amount = 70;
    else var amount = 100;
    _pub.fade(els.overlay, _pub.getOpacity(null, els.overlay), amount, _pub.fade_in_speed, callback);
    
    _pub.fireEvent('show');
  };
  
  var drawCSS = function() {
    // Core CSS (positioning/etc)
    var core_styles = "#ibox {z-index:1000000;text-align:left;} #ibox_overlay {z-index:1000000;} #ibox_loading {position:absolute;z-index:1000001;} #ibox_wrapper {margin:30px;position:absolute;top:0;left:0;z-index:1000001;} #ibox_content {z-index:1000002;margin:27px 5px 5px 5px;padding:2px;} #ibox_content object {display:block;} #ibox_content .ibox_image {width:100%;height:100%;margin:0;padding:0;border:0;display:block;} #ibox_footer_wrapper a {float:right;display:block;outline:0;margin:0;padding:0;} #ibox_footer_wrapper {text-align:left;position:absolute;top:5px;right:5px;left:5px;white-space:nowrap;overflow:hidden;}";
    
    // Default style/theme/skin/whatever
    var default_skin = "#ibox_footer_wrapper {font-weight:bold;height:20px;line-height:20px;} #ibox_footer_wrapper a {text-decoration:none;background:#888;border:1px solid #666;line-height:16px;padding:0 5px;color:#333;font-weight:bold;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:10px;} #ibox_footer_wrapper a:hover {background-color:#bbb;color:#111;} #ibox_footer_wrapper {font-size:12px;font-family:Verdana, Arial, Helvetica, sans-serif;color:#111;} #ibox_wrapper {border:1px solid #ccc;} #ibox_wrapper {background-color:#999;}#ibox_content {background-color:#eee;border:1px solid #666;} #ibox_loading {padding:50px; background:#000;color:#fff;font-size:16px;font-weight:bold;}";

    var head = document.getElementsByTagName("head")[0];

    // tricky hack for IE
    // because IE doesn't like when you insert stuff the proper way
    // and we cant use relative paths to include this as an external
    // stylesheet
    var htmDiv = document.createElement('div');

    htmDiv.innerHTML = '<p>x</p><style type="text/css">'+default_skin+'</style>';
    head.insertBefore(htmDiv.childNodes[1], head.firstChild);

    htmDiv.innerHTML = '<p>x</p><style type="text/css">'+core_styles+'</style>';
    head.insertBefore(htmDiv.childNodes[1], head.firstChild);
  };

  var _initialized = false;
  var initialize = function() {
    // make sure we haven't already done this
    if (_initialized) return;
    _initialized = true;
    // elements here start the look up from the start non <a> tags
    drawCSS();
    create(document.body);
    _pub.checkTags(document.body, 'a');
    _pub.http = _pub.createXMLHttpRequest();
    _pub.fireEvent('load');
  };
  
  _pub.addEvent(window, 'keypress', function(e){ if (e.keyCode == (window.event ? 27 : e.DOM_VK_ESCAPE)) { iBox.hide(); }});
  _pub.addEvent(window, 'resize', _pub.reposition);
  _pub.addEvent(window, 'load', initialize);
  _pub.addEvent(window, 'scroll', _pub.reposition);

  // DEFAULT PLUGINS

  /**
   * Handles embedded containers in the page based on url of #container.
   * This _ONLY_ works with hidden containers.
   */
  var iBoxPlugin_Container = function() {
    var was_error = false;
    var original_wrapper = null;
    return {
      /**
       * Matches the url and returns true if it fits this plugin.
       */
      match: function(url) {
        return url.indexOf('#') != -1;
      },
      /**
       * Called when this plugin is unloaded.
       */
      unload: function() {
        if (was_error) return;
        var elemSrc = _pub.html().firstChild;
        if (elemSrc) {
          elemSrc.style.display = 'none';
          original_wrapper.appendChild(elemSrc);
        }
      },
      /**
       * Handles the output
       * @param {iBox} ibox
       * @param {String} url
       * @return {iBoxContent} an instance or subclass of iBoxContent
       */
      render: function(url, params) {
        was_error = false;
        var elemSrcId = url.substr(url.indexOf("#") + 1);
        var elemSrc = document.getElementById(elemSrcId);
        // If the element doesnt exist, break the switch
        if (!elemSrc) {
          was_error = true;
          _pub.html(document.createTextNode('There was an error loading the document.'), params);
        }
        else {
          original_wrapper = elemSrc.parentNode;
          elemSrc.style.display = 'block';
          _pub.html(elemSrc, params);
        }
      }
    }
  }();
  _pub.plugins.register(iBoxPlugin_Container, true);

  /**
   * Handles images
   */
  var iBoxPlugin_Image = function() {
    // Image types (for auto detection of image display)
    var image_types = /\.jpg|\.jpeg|\.png|\.gif/gi;

    return {
      match: function(url) {
        return url.match(image_types);
      },

      render: function(url, params) {  
        var img = document.createElement('img');
        img.onclick = _pub.hide;
        img.className = 'ibox_image'
        img.style.cursor = 'pointer';
        img.onload = function() {
          _pub.html(img, {width: this.width, height: this.height, constrain: true})
        }
        img.onerror = function() {
          _pub.html(document.createTextNode('There was an error loading the document.'), params);
        }
        img.src = url;
      }
    }
  }();
  _pub.plugins.register(iBoxPlugin_Image);

  var iBoxPlugin_YouTube = function() {
    var youtube_url = /(?:http:\/\/)?(?:www\d*\.)?(youtube\.(?:[a-z]+))\/(?:v\/|(?:watch(?:\.php)?)?\?(?:.+&)?v=)([^&]+).*/;
    return {
      match: function(url) {
        return url.match(youtube_url);
      },

      render: function(url, params) {
        var _match = url.match(youtube_url);
        var domain = _match[1];
        var id = _match[2];
        params.width = 425;
        params.height = 355;
        params.constrain = true;
        var html = '<object width="100%" height="100%" style="overflow: hidden; display: block;"><param name="movie" value="http://www.' + domain + '/v/' + id + '"/><param name="wmode" value="transparent"/><embed src="http://www.' + domain + '/v/' + id + '" type="application/x-shockwave-flash" wmode="transparent" width="100%" height="100%"></embed></object>';
        _pub.html(html, params);
      }
    }
  }();
  _pub.plugins.register(iBoxPlugin_YouTube);

  var iBoxPlugin_Document = function() {
    return {
      match: function(url) {
        return true;
      },

      render: function(url, params) {
        _pub.http.open('get', url, true);

        _pub.http.onreadystatechange = function() {
          if (_pub.http.readyState == 4) {
            // XXX: why does status return 0?
            if (_pub.http.status == 200 || _pub.http.status == 0) {
              _pub.html(_pub.http.responseText, params);
            }
            else {
              _pub.html(document.createTextNode('There was an error loading the document.'), params);
            }
          }
        }
        _pub.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        try {
          _pub.http.send(null);
        }
        catch (ex) {
          _pub.html(document.createTextNode('There was an error loading the document.'), params);
        }
      }
    };
  }();
  _pub.plugins.register(iBoxPlugin_Document, true);

  return _pub;
}();

/************** END IBOX ***************/

/*********** GALLERY ************/
if (!hs) { var hs = {
// Language strings
lang : {
	cssDirection: 'ltr',
	loadingText : 'Loading...',
	loadingTitle : 'Click to cancel',
	focusTitle : 'Click to bring to front',
	fullExpandTitle : 'Expand to actual size (f)',
	creditsText : 'Powered by <i>Highslide JS</i>',
	creditsTitle : 'Go to the Highslide JS homepage',
	previousText : 'Previous',
	nextText : 'Next', 
	moveText : 'Move',
	closeText : 'Close', 
	closeTitle : 'Close (esc)', 
	resizeTitle : 'Resize',
	playText : 'Play',
	playTitle : 'Play slideshow (spacebar)',
	pauseText : 'Pause',
	pauseTitle : 'Pause slideshow (spacebar)',
	previousTitle : 'Previous (arrow left)',
	nextTitle : 'Next (arrow right)',
	moveTitle : 'Move',
	fullExpandText : '1:1',
	number: 'Image %1 of %2',
	restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.'
},
// See http://highslide.com/ref for examples of settings  
graphicsDir : '/js/gallery/graphics/',
expandCursor : 'zoomin.cur', // null disables
restoreCursor : 'zoomout.cur', // null disables
expandDuration : 250, // milliseconds
restoreDuration : 250,
marginLeft : 15,
marginRight : 15,
marginTop : 15,
marginBottom : 15,
zIndexCounter : 1001, // adjust to other absolutely positioned elements
loadingOpacity : 0.75,
allowMultipleInstances: true,
numberOfImagesToPreload : 5,
outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only 
outlineStartOffset : 3, // ends at 10
padToMinWidth : false, // pad the popup width to make room for wide caption
fullExpandPosition : 'bottom right',
fullExpandOpacity : 1,
showCredits : true, // you can set this to false if you want
creditsHref : 'http://highslide.com/',
creditsTarget : '_self',
enableKeyListener : true,
openerTagNames : ['a', 'area'], // Add more to allow slideshow indexing
transitions : [],
transitionDuration: 250,
dimmingOpacity: 0, // Lightbox style dimming background
dimmingDuration: 50, // 0 for instant dimming

allowWidthReduction : false,
allowHeightReduction : true,
preserveContent : true, // Preserve changes made to the content and position of HTML popups.
objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion.
cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup.
anchor : 'auto', // where the image expands from
align : 'auto', // position in the client (overrides anchor)
targetX: null, // the id of a target element
targetY: null,
dragByHeading: true,
minWidth: 200,
minHeight: 200,
allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight
outlineType : 'drop-shadow', // set null to disable outlines
skin : {
	controls:
		'<div class="highslide-controls"><ul>'+
			'<li class="highslide-previous">'+
				'<a href="#" title="{hs.lang.previousTitle}">'+
				'<span>{hs.lang.previousText}</span></a>'+
			'</li>'+
			'<li class="highslide-play">'+
				'<a href="#" title="{hs.lang.playTitle}">'+
				'<span>{hs.lang.playText}</span></a>'+
			'</li>'+
			'<li class="highslide-pause">'+
				'<a href="#" title="{hs.lang.pauseTitle}">'+
				'<span>{hs.lang.pauseText}</span></a>'+
			'</li>'+
			'<li class="highslide-next">'+
				'<a href="#" title="{hs.lang.nextTitle}">'+
				'<span>{hs.lang.nextText}</span></a>'+
			'</li>'+
			'<li class="highslide-move">'+
				'<a href="#" title="{hs.lang.moveTitle}">'+
				'<span>{hs.lang.moveText}</span></a>'+
			'</li>'+
			'<li class="highslide-full-expand">'+
				'<a href="#" title="{hs.lang.fullExpandTitle}">'+
				'<span>{hs.lang.fullExpandText}</span></a>'+
			'</li>'+
			'<li class="highslide-close">'+
				'<a href="#" title="{hs.lang.closeTitle}" >'+
				'<span>{hs.lang.closeText}</span></a>'+
			'</li>'+
		'</ul></div>'
	,
	contentWrapper:
		'<div class="highslide-header"><ul>'+
			'<li class="highslide-previous">'+
				'<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+
				'<span>{hs.lang.previousText}</span></a>'+
			'</li>'+
			'<li class="highslide-next">'+
				'<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+
				'<span>{hs.lang.nextText}</span></a>'+
			'</li>'+
			'<li class="highslide-move">'+
				'<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+
				'<span>{hs.lang.moveText}</span></a>'+
			'</li>'+
			'<li class="highslide-close">'+
				'<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+
				'<span>{hs.lang.closeText}</span></a>'+
			'</li>'+
		'</ul></div>'+
		'<div class="highslide-body"></div>'+
		'<div class="highslide-footer"><div>'+
			'<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+
		'</div></div>'
},
// END OF YOUR SETTINGS


// declare internal properties
preloadTheseImages : [],
continuePreloading: true,
expanders : [],
overrides : [
	'allowSizeReduction',
	'useBox',
	'anchor',
	'align',
	'targetX',
	'targetY',
	'outlineType',
	'outlineWhileAnimating',
	'captionId',
	'captionText',
	'captionEval',
	'captionOverlay',
	'headingId',
	'headingText',
	'headingEval',
	'headingOverlay',
	'creditsPosition',
	'dragByHeading',
	'autoplay',
	'numberPosition',
	'transitions',
	'dimmingOpacity',
	
	'width',
	'height',
	
	'contentId',
	'allowWidthReduction',
	'allowHeightReduction',
	'preserveContent',
	'maincontentId',
	'maincontentText',
	'maincontentEval',
	'objectType',	
	'cacheAjax',	
	'objectWidth',
	'objectHeight',
	'objectLoadTime',	
	'swfOptions',
	'wrapperClassName',
	'minWidth',
	'minHeight',
	'maxWidth',
	'maxHeight',
	'slideshowGroup',
	'easing',
	'easingClose',
	'fadeInOut',
	'src'
],
overlays : [],
idCounter : 0,
oPos : {
	x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'],
	y: ['above', 'top', 'middle', 'bottom', 'below']
},
mouse: {},
headingOverlay: {},
captionOverlay: {},
swfOptions: { flashvars: {}, params: {}, attributes: {} },
timers : [],

slideshows : [],

pendingOutlines : {},
sleeping : [],
preloadTheseAjax : [],
cacheBindings : [],
cachedGets : {},
clones : {},
onReady: [],
uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 :
	parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]),
ie : (document.all && !window.opera),
safari : /Safari/.test(navigator.userAgent),
geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),

$ : function (id) {
	if (id) return document.getElementById(id);
},

push : function (arr, val) {
	arr[arr.length] = val;
},

createElement : function (tag, attribs, styles, parent, nopad) {
	var el = document.createElement(tag);
	if (attribs) hs.extend(el, attribs);
	if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0});
	if (styles) hs.setStyles(el, styles);
	if (parent) parent.appendChild(el);	
	return el;
},

extend : function (el, attribs) {
	for (var x in attribs) el[x] = attribs[x];
	return el;
},

setStyles : function (el, styles) {
	for (var x in styles) {
		if (hs.ie && x == 'opacity') {
			if (styles[x] > 0.99) el.style.removeAttribute('filter');
			else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')';
		}
		else el.style[x] = styles[x];
	}
},
animate: function(el, prop, opt) {
	var start,
		end,
		unit;
	if (typeof opt != 'object' || opt === null) {
		var args = arguments;
		opt = {
			duration: args[2],
			easing: args[3],
			complete: args[4]
		};
	}
	if (typeof opt.duration != 'number') opt.duration = 250;
	opt.easing = Math[opt.easing] || Math.easeInQuad;
	opt.curAnim = hs.extend({}, prop);
	for (var name in prop) {
		var e = new hs.fx(el, opt , name );
		
		start = parseFloat(hs.css(el, name)) || 0;
		end = parseFloat(prop[name]);
		unit = name != 'opacity' ? 'px' : '';
		
		e.custom( start, end, unit );
	}	
},
css: function(el, prop) {
	if (document.defaultView) {
		return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop);

	} else {
		if (prop == 'opacity') prop = 'filter';
		var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })];
		if (prop == 'filter') 
			val = val.replace(/alpha\(opacity=([0-9]+)\)/, 
				function (a, b) { return b / 100 });
		return val === '' ? 1 : val;
	} 
},

getPageSize : function () {
	var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' 
		? d.documentElement : d.body;
	
	var width = hs.ie ? iebody.clientWidth : 
			(d.documentElement.clientWidth || self.innerWidth),
		height = hs.ie ? iebody.clientHeight : self.innerHeight;
	
	hs.page = {
		width: width,
		height: height,		
		scrollLeft: hs.ie ? iebody.scrollLeft : pageXOffset,
		scrollTop: hs.ie ? iebody.scrollTop : pageYOffset
	}
},

getPosition : function(el)	{
	if (/area/i.test(el.tagName)) {
		var imgs = document.getElementsByTagName('img');
		for (var i = 0; i < imgs.length; i++) {
			var u = imgs[i].useMap;
			if (u && u.replace(/^.*?#/, '') == el.parentNode.name) {
				el = imgs[i];
				break;
			}
		}
	}
	var p = { x: el.offsetLeft, y: el.offsetTop };
	while (el.offsetParent)	{
		el = el.offsetParent;
		p.x += el.offsetLeft;
		p.y += el.offsetTop;
		if (el != document.body && el != document.documentElement) {
			p.x -= el.scrollLeft;
			p.y -= el.scrollTop;
		}
	}
	return p;
},

expand : function(a, params, custom, type) {
	if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container);
	if (typeof a.getParams == 'function') return params;
	if (type == 'html') {
		for (var i = 0; i < hs.sleeping.length; i++) {
			if (hs.sleeping[i] && hs.sleeping[i].a == a) {
				hs.sleeping[i].awake();
				hs.sleeping[i] = null;
				return false;
			}
		}
		hs.hasHtmlExpanders = true;
	}	
	try {	
		new hs.Expander(a, params, custom, type);
		return false;
	} catch (e) { return true; }
},

htmlExpand : function(a, params, custom) {
	return hs.expand(a, params, custom, 'html');
},

getSelfRendered : function() {
	return hs.createElement('div', { 
		className: 'highslide-html-content', 
		innerHTML: hs.replaceLang(hs.skin.contentWrapper) 
	});
},
getElementByClass : function (el, tagName, className) {
	var els = el.getElementsByTagName(tagName);
	for (var i = 0; i < els.length; i++) {
    	if ((new RegExp(className)).test(els[i].className)) {
			return els[i];
		}
	}
	return null;
},
replaceLang : function(s) {
	s = s.replace(/\s/g, ' ');
	var re = /{hs\.lang\.([^}]+)\}/g,
		matches = s.match(re),
		lang;
	if (matches) for (var i = 0; i < matches.length; i++) {
		lang = matches[i].replace(re, "$1");
		if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]);
	}
	return s;
},


setClickEvents : function () {
	var els = document.getElementsByTagName('a');
	for (var i = 0; i < els.length; i++) {
		var type = hs.isUnobtrusiveAnchor(els[i]);
		if (type && !els[i].hsHasSetClick) {
			(function(){
				var t = type;
				if (hs.fireEvent(hs, 'onSetClickEvent', { element: els[i], type: t })) {
					els[i].onclick =(type == 'image') ?function() { return hs.expand(this) }:
						function() { return hs.htmlExpand(this, { objectType: t } );};
				}
			})();
			els[i].hsHasSetClick = true;	
		}
	}
	hs.getAnchors();
},
isUnobtrusiveAnchor: function(el) {
	if (el.rel == 'highslide') return 'image';
	else if (el.rel == 'highslide-ajax') return 'ajax';
	else if (el.rel == 'highslide-iframe') return 'iframe';
	else if (el.rel == 'highslide-swf') return 'swf';
},

getCacheBinding : function (a) {
	for (var i = 0; i < hs.cacheBindings.length; i++) {
		if (hs.cacheBindings[i][0] == a) {
			var c = hs.cacheBindings[i][1];
			hs.cacheBindings[i][1] = c.cloneNode(1);
			return c;
		}
	}
	return null;
},

preloadAjax : function (e) {
	var arr = hs.getAnchors();
	for (var i = 0; i < arr.htmls.length; i++) {
		var a = arr.htmls[i];
		if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax'))
			hs.push(hs.preloadTheseAjax, a);
	}
	
	hs.preloadAjaxElement(0);
},

preloadAjaxElement : function (i) {
	if (!hs.preloadTheseAjax[i]) return;
	var a = hs.preloadTheseAjax[i];
	var cache = hs.getNode(hs.getParam(a, 'contentId'));
	if (!cache) cache = hs.getSelfRendered();
	var ajax = new hs.Ajax(a, cache, 1);	
   	ajax.onError = function () { };
   	ajax.onLoad = function () {
   		hs.push(hs.cacheBindings, [a, cache]);
   		hs.preloadAjaxElement(i + 1);
   	};
   	ajax.run();
},

focusTopmost : function() {
	var topZ = 0, 
		topmostKey = -1,
		expanders = hs.expanders,
		exp,
		zIndex;
	for (var i = 0; i < expanders.length; i++) {
		exp = expanders[i];
		if (exp) {
			zIndex = exp.wrapper.style.zIndex;
			if (zIndex && zIndex > topZ) {
				topZ = zIndex;				
				topmostKey = i;
			}
		}
	}
	if (topmostKey == -1) hs.focusKey = -1;
	else expanders[topmostKey].focus();
},

getParam : function (a, param) {
	a.getParams = a.onclick;
	var p = a.getParams ? a.getParams() : null;
	a.getParams = null;
	
	return (p && typeof p[param] != 'undefined') ? p[param] : 
		(typeof hs[param] != 'undefined' ? hs[param] : null);
},

getSrc : function (a) {
	var src = hs.getParam(a, 'src');
	if (src) return src;
	return a.href;
},

getNode : function (id) {
	var node = hs.$(id), clone = hs.clones[id], a = {};
	if (!node && !clone) return null;
	if (!clone) {
		clone = node.cloneNode(true);
		clone.id = '';
		hs.clones[id] = clone;
		return node;
	} else {
		return clone.cloneNode(true);
	}
},

discardElement : function(d) {
	if (d) hs.garbageBin.appendChild(d);
	hs.garbageBin.innerHTML = '';
},
dim : function(exp) {
	if (!hs.dimmer) {
		hs.dimmer = hs.createElement ('div', {
				className: 'highslide-dimming highslide-viewport-size',
				owner: '',
				onclick: function() {
					if (hs.fireEvent(hs, 'onDimmerClick'))
					
						hs.close();
				}
			}, {
                visibility: 'visible',
				opacity: 0
			}, hs.container, true);
	}

	hs.dimmer.style.display = '';

	hs.dimmer.owner += '|'+ exp.key;
	if (hs.geckoMac && hs.dimmingGeckoFix)
		hs.setStyles(hs.dimmer, {
			background: 'url('+ hs.graphicsDir + 'geckodimmer.png)',
			opacity: 1
		});
	else
		hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration);
},
undim : function(key) {
	if (!hs.dimmer) return;
	if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, '');

	if (
		(typeof key != 'undefined' && hs.dimmer.owner != '')
		|| (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity'))
	) return;

	if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none';
	else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() {
		hs.dimmer.style.display = 'none';
	});
},
transit : function (adj, exp) {
	var last = exp = exp || hs.getExpander();
	if (hs.upcoming) return false;
	else hs.last = last;
	try {
		hs.upcoming = adj;
		adj.onclick(); 		
	} catch (e){
		hs.last = hs.upcoming = null;
	}
	try {
		if (!adj || exp.transitions[1] != 'crossfade')
		exp.close();
	} catch (e) {}
	return false;
},

previousOrNext : function (el, op) {
	var exp = hs.getExpander(el);
	if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp);
	else return false;
},

previous : function (el) {
	return hs.previousOrNext(el, -1);
},

next : function (el) {
	return hs.previousOrNext(el, 1);	
},

keyHandler : function(e) {
	if (!e) e = window.event;
	if (!e.target) e.target = e.srcElement; // ie
	if (typeof e.target.form != 'undefined') return true; // form element has focus
	if (!hs.fireEvent(hs, 'onKeyDown', e)) return true;
	var exp = hs.getExpander();
	
	var op = null;
	switch (e.keyCode) {
		case 70: // f
			if (exp) exp.doFullExpand();
			return true;
		case 32: // Space
			op = 2;
			break;
		case 34: // Page Down
		case 39: // Arrow right
		case 40: // Arrow down
			op = 1;
			break;
		case 8:  // Backspace
		case 33: // Page Up
		case 37: // Arrow left
		case 38: // Arrow up
			op = -1;
			break;
		case 27: // Escape
		case 13: // Enter
			op = 0;
	}
	if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);
		if (!hs.enableKeyListener) return true;
		
		if (e.preventDefault) e.preventDefault();
    	else e.returnValue = false;
    	if (exp) {
			if (op == 0) {
				exp.close();
			} else if (op == 2) {
				if (exp.slideshow) exp.slideshow.hitSpace();
			} else {
				if (exp.slideshow) exp.slideshow.pause();
				hs.previousOrNext(exp.key, op);
			}
			return false;
		}
	}
	return true;
},


registerOverlay : function (overlay) {
	hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } ));
},


addSlideshow : function (options) {
	var sg = options.slideshowGroup;
	if (typeof sg == 'object') {
		for (var i = 0; i < sg.length; i++) {
			var o = {};
			for (var x in options) o[x] = options[x];
			o.slideshowGroup = sg[i];
			hs.push(hs.slideshows, o);
		}
	} else {
		hs.push(hs.slideshows, options);
	}
},

getWrapperKey : function (element, expOnly) {
	var el, re = /^highslide-wrapper-([0-9]+)$/;
	// 1. look in open expanders
	el = element;
	while (el.parentNode)	{
		if (el.hsKey !== undefined) return el.hsKey;
		if (el.id && re.test(el.id)) return el.id.replace(re, "$1");
		el = el.parentNode;
	}
	// 2. look in thumbnail
	if (!expOnly) {
		el = element;
		while (el.parentNode)	{
			if (el.tagName && hs.isHsAnchor(el)) {
				for (var key = 0; key < hs.expanders.length; key++) {
					var exp = hs.expanders[key];
					if (exp && exp.a == el) return key;
				}
			}
			el = el.parentNode;
		}
	}
	return null; 
},

getExpander : function (el, expOnly) {
	if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null;
	if (typeof el == 'number') return hs.expanders[el] || null;
	if (typeof el == 'string') el = hs.$(el);
	return hs.expanders[hs.getWrapperKey(el, expOnly)] || null;
},

isHsAnchor : function (a) {
	return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/));
},

reOrder : function () {
	for (var i = 0; i < hs.expanders.length; i++)
		if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost();
},
fireEvent : function (obj, evt, args) {
	return obj && obj[evt] ? (obj[evt](obj, args) !== false) : true;
},

mouseClickHandler : function(e) 
{	
	if (!e) e = window.event;
	if (e.button > 1) return true;
	if (!e.target) e.target = e.srcElement;
	
	var el = e.target;
	while (el.parentNode
		&& !(/highslide-(image|move|html|resize)/.test(el.className)))
	{
		el = el.parentNode;
	}
	var exp = hs.getExpander(el);
	if (exp && (exp.isClosing || !exp.isExpanded)) return true;
		
	if (exp && e.type == 'mousedown') {
		if (e.target.form) return true;
		var match = el.className.match(/highslide-(image|move|resize)/);
		if (match) {
			hs.dragArgs = { 
				exp: exp , 
				type: match[1], 
				left: exp.x.pos, 
				width: exp.x.size, 
				top: exp.y.pos, 
				height: exp.y.size, 
				clickX: e.clientX, 
				clickY: e.clientY
			};
			
			
			hs.addEventListener(document, 'mousemove', hs.dragHandler);
			if (e.preventDefault) e.preventDefault(); // FF
			
			if (/highslide-(image|html)-blur/.test(exp.content.className)) {
				exp.focus();
				hs.hasFocused = true;
			}
			return false;
		}
		else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) {
			exp.focus();
			exp.doShowHide('hidden');
		}
	} else if (e.type == 'mouseup') {
		
		hs.removeEventListener(document, 'mousemove', hs.dragHandler);
		
		if (hs.dragArgs) {
			if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') 
				hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor;
			var hasDragged = hs.dragArgs.hasDragged;
			
			if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) {
				if (hs.fireEvent(exp, 'onImageClick'))
				exp.close();
			} 
			else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) {
				hs.dragArgs.exp.doShowHide('hidden');
			}
			
			if (hs.dragArgs.exp.releaseMask) 
				hs.dragArgs.exp.releaseMask.style.display = 'none';
			
			if (hasDragged) hs.fireEvent(hs.dragArgs.exp, 'onDrop', hs.dragArgs);
			hs.hasFocused = false;
			hs.dragArgs = null;
		
		} else if (/highslide-image-blur/.test(el.className)) {
			el.style.cursor = hs.styleRestoreCursor;		
		}
	}
	return false;
},

dragHandler : function(e)
{
	if (!hs.dragArgs) return true;
	if (!e) e = window.event;
	var a = hs.dragArgs, exp = a.exp;
	if (exp.iframe) {		
		if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, 
			{ position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', 
				left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4,	background: (hs.ie ? 'white' : 'none'), 
				opacity: .01 }, 
			exp.wrapper, true);
		if (exp.releaseMask.style.display == 'none')
			exp.releaseMask.style.display = '';
	}
	
	a.dX = e.clientX - a.clickX;
	a.dY = e.clientY - a.clickY;	
	
	var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2));
	if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0)
		|| (distance > (hs.dragSensitivity || 5));
	
	if (a.hasDragged && e.clientX > 5 && e.clientY > 5) {
		if (!hs.fireEvent(exp, 'onDrag', a)) return false;
		
		if (a.type == 'resize') exp.resize(a);
		else {
			exp.moveTo(a.left + a.dX, a.top + a.dY);
			if (a.type == 'image') exp.content.style.cursor = 'move';
		}
	}
	return false;
},

wrapperMouseHandler : function (e) {
	try {
		if (!e) e = window.event;
		var over = /mouseover/i.test(e.type); 
		if (!e.target) e.target = e.srcElement; // ie
		if (hs.ie) e.relatedTarget = 
			over ? e.fromElement : e.toElement; // ie
		var exp = hs.getExpander(e.target);
		if (!exp.isExpanded) return;
		if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp 
			|| hs.dragArgs) return;
		hs.fireEvent(exp, over ? 'onMouseOver' : 'onMouseOut', e);
		for (var i = 0; i < exp.overlays.length; i++) (function() {
			var o = hs.$('hsId'+ exp.overlays[i]);
			if (o && o.hideOnMouseOut) {
				if (over) hs.setStyles(o, { visibility: 'visible', display: '' });
				hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur);
			}
		})();	
	} catch (e) {}
},
addEventListener : function (el, event, func) {
	if (el == document && event == 'ready') hs.push(hs.onReady, func);
	try {
		el.addEventListener(event, func, false);
	} catch (e) {
		try {
			el.detachEvent('on'+ event, func);
			el.attachEvent('on'+ event, func);
		} catch (e) {
			el['on'+ event] = func;
		}
	} 
},

removeEventListener : function (el, event, func) {
	try {
		el.removeEventListener(event, func, false);
	} catch (e) {
		try {
			el.detachEvent('on'+ event, func);
		} catch (e) {
			el['on'+ event] = null;
		}
	}
},

preloadFullImage : function (i) {
	if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') {
		var img = document.createElement('img');
		img.onload = function() { 
			img = null;
			hs.preloadFullImage(i + 1);
		};
		img.src = hs.preloadTheseImages[i];
	}
},
preloadImages : function (number) {
	if (number && typeof number != 'object') hs.numberOfImagesToPreload = number;
	
	var arr = hs.getAnchors();
	for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) {
		hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i]));
	}
	
	// preload outlines
	if (hs.outlineType)	new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} );
	else
	
	hs.preloadFullImage(0);
	
	// preload cursor
	if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor });
},


init : function () {
	if (!hs.container) {
	
		hs.getPageSize();
		hs.ieLt7 = hs.ie && hs.uaVersion < 7;
		hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:';
		for (var x in hs.langDefaults) {
			if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x];
			else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') 
				hs.lang[x] = hs.langDefaults[x];
		}
		
		hs.container = hs.createElement('div', {
				className: 'highslide-container'
			}, {
				position: 'absolute', 
				left: 0, 
				top: 0, 
				width: '100%', 
				zIndex: hs.zIndexCounter,
				direction: 'ltr'
			}, 
			document.body,
			true
		);
		hs.loading = hs.createElement('a', {
				className: 'highslide-loading',
				title: hs.lang.loadingTitle,
				innerHTML: hs.lang.loadingText,
				href: 'javascript:;'
			}, {
				position: 'absolute',
				top: '-9999px',
				opacity: hs.loadingOpacity,
				zIndex: 1
			}, hs.container
		);
		hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container);
		hs.viewport = hs.createElement('div', {
				className: 'highslide-viewport highslide-viewport-size'
			}, {
				visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden'
			}, hs.container, 1
		);
		hs.clearing = hs.createElement('div', null, 
			{ clear: 'both', paddingTop: '1px' }, null, true);
		
		// http://www.robertpenner.com/easing/ 
		Math.linearTween = function (t, b, c, d) {
			return c*t/d + b;
		};
		Math.easeInQuad = function (t, b, c, d) {
			return c*(t/=d)*t + b;
		};
		Math.easeOutQuad = function (t, b, c, d) {
			return -c *(t/=d)*(t-2) + b;
		};
		
		hs.hideSelects = hs.ieLt7;
		hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' 
			|| (hs.ie && hs.uaVersion < 5.5));
		hs.fireEvent(this, 'onActivate');
	}
},
ready : function() {
	if (hs.isReady) return;
	hs.isReady = true;
	
	for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i]();
},

updateAnchors : function() {
	var el, els, all = [], images = [], htmls = [],groups = {}, re;
		
	for (var i = 0; i < hs.openerTagNames.length; i++) {
		els = document.getElementsByTagName(hs.openerTagNames[i]);
		for (var j = 0; j < els.length; j++) {
			el = els[j];
			re = hs.isHsAnchor(el);
			if (re) {
				hs.push(all, el);
				if (re[0] == 'hs.expand') hs.push(images, el);
				else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el);
				var g = hs.getParam(el, 'slideshowGroup') || 'none';
				if (!groups[g]) groups[g] = [];
				hs.push(groups[g], el);
			}
		}
	}
	hs.anchors = { all: all, groups: groups, images: images, htmls: htmls };
	return hs.anchors;
	
},

getAnchors : function() {
	return hs.anchors || hs.updateAnchors();
},


close : function(el) {
	var exp = hs.getExpander(el);
	if (exp) exp.close();
	return false;
}
}; // end hs object
hs.fx = function( elem, options, prop ){
	this.options = options;
	this.elem = elem;
	this.prop = prop;

	if (!options.orig) options.orig = {};
};
hs.fx.prototype = {
	update: function(){
		(hs.fx.step[this.prop] || hs.fx.step._default)(this);
		
		if (this.options.step)
			this.options.step.call(this.elem, this.now, this);

	},
	custom: function(from, to, unit){
		this.startTime = (new Date()).getTime();
		this.start = from;
		this.end = to;
		this.unit = unit;// || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		if ( t() && hs.timers.push(t) == 1 ) {
			hs.timerId = setInterval(function(){
				var timers = hs.timers;

				for ( var i = 0; i < timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval(hs.timerId);
				}
			}, 13);
		}
	},
	step: function(gotoEnd){
		var t = (new Date()).getTime();
		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if (this.options.complete) this.options.complete.call(this.elem);
			}
			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;
			this.pos = this.options.easing(n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);
			this.update();
		}
		return true;
	}

};

hs.extend( hs.fx, {
	step: {

		opacity: function(fx){
			hs.setStyles(fx.elem, { opacity: fx.now });
		},

		_default: function(fx){
			try {
				if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
					fx.elem.style[ fx.prop ] = fx.now + fx.unit;
				else
					fx.elem[ fx.prop ] = fx.now;
			} catch (e) {}
		}
	}
});

hs.Outline =  function (outlineType, onLoad) {
	this.onLoad = onLoad;
	this.outlineType = outlineType;
	var v = hs.uaVersion, tr;
	
	this.hasAlphaImageLoader = hs.ie && v >= 5.5 && v < 7;
	if (!outlineType) {
		if (onLoad) onLoad();
		return;
	}
	
	hs.init();
	this.table = hs.createElement(
		'table', { 
			cellSpacing: 0 
		}, {
			visibility: 'hidden',
			position: 'absolute',
			borderCollapse: 'collapse',
			width: 0
		},
		hs.container,
		true
	);
	var tbody = hs.createElement('tbody', null, null, this.table, 1);
	
	this.td = [];
	for (var i = 0; i <= 8; i++) {
		if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true);
		this.td[i] = hs.createElement('td', null, null, tr, true);
		var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' };
		hs.setStyles(this.td[i], style);
	}
	this.td[4].className = outlineType +' highslide-outline';
	
	this.preloadGraphic(); 
};

hs.Outline.prototype = {
preloadGraphic : function () {
	var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png";
				
	var appendTo = hs.safari ? hs.container : null;
	this.graphic = hs.createElement('img', null, { position: 'absolute', 
		top: '-9999px' }, appendTo, true); // for onload trigger
	
	var pThis = this;
	this.graphic.onload = function() { pThis.onGraphicLoad(); };
	
	this.graphic.src = src;
},

onGraphicLoad : function () {
	var o = this.offset = this.graphic.width / 4,
		pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],
		dim = { height: (2*o) +'px', width: (2*o) +'px' };
	for (var i = 0; i <= 8; i++) {
		if (pos[i]) {
			if (this.hasAlphaImageLoader) {
				var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px';
				var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true);
				hs.createElement ('div', null, { 
						filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", 
						position: 'absolute',
						width: w, 
						height: this.graphic.height +'px',
						left: (pos[i][0]*o)+'px',
						top: (pos[i][1]*o)+'px'
					}, 
				div,
				true);
			} else {
			//	hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'});
			}
			
			if (window.opera && (i == 3 || i ==5)) 
				hs.createElement('div', null, dim, this.td[i], true);
			
			hs.setStyles (this.td[i], dim);
		}
	}
	this.graphic = null;
	if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy();
	hs.pendingOutlines[this.outlineType] = this;
	if (this.onLoad) this.onLoad();
},
	
setPosition : function (pos, offset, vis, dur, easing) {
	var exp = this.exp,
		stl = exp.wrapper.style,
		offset = offset || 0,
		pos = pos || {
			x: exp.x.pos + offset,
			y: exp.y.pos + offset,
			w: exp.x.get('wsize') - 2 * offset,
			h: exp.y.get('wsize') - 2 * offset
		};
	if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) 
		? 'visible' : 'hidden';
	hs.setStyles(this.table, {
		left: (pos.x - this.offset) +'px',
		top: (pos.y - this.offset) +'px',
		width: (pos.w + 2 * this.offset) +'px'
	});
	
	pos.w -= 2 * this.offset;
	pos.h -= 2 * this.offset;
	hs.setStyles (this.td[4], {
		width: pos.w >= 0 ? pos.w +'px' : 0,
		height: pos.h >= 0 ? pos.h +'px' : 0
	});
	if (this.hasAlphaImageLoader) this.td[3].style.height 
		= this.td[5].style.height = this.td[4].style.height;	
	
},
	
destroy : function(hide) {
	if (hide) this.table.style.visibility = 'hidden';
	else hs.discardElement(this.table);
}
};

hs.Dimension = function(exp, dim) {
	this.exp = exp;
	this.dim = dim;
	this.ucwh = dim == 'x' ? 'Width' : 'Height';
	this.wh = this.ucwh.toLowerCase();
	this.uclt = dim == 'x' ? 'Left' : 'Top';
	this.lt = this.uclt.toLowerCase();
	this.ucrb = dim == 'x' ? 'Right' : 'Bottom';
	this.rb = this.ucrb.toLowerCase();
	this.p1 = this.p2 = 0;
};
hs.Dimension.prototype = {
get : function(key) {
	switch (key) {
		case 'loadingPos':
			return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2;
		case 'loadingPosXfade':
			return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2;
		case 'wsize':
			return this.size + 2 * this.cb + this.p1 + this.p2;
		case 'fitsize':
			return this.clientSize - this.marginMin - this.marginMax;
		case 'maxsize':
			return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ;
		case 'opos':
			return this.pos - (this.exp.outline ? this.exp.outline.offset : 0);
		case 'osize':
			return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0);
		case 'imgPad':
			return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0;
		
	}
},
calcBorders: function() {
	// correct for borders
	this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2;
	
	this.marginMax = hs['margin'+ this.ucrb];
},
calcThumb: function() {
	this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : 
		this.exp.el['offset'+ this.ucwh];
	this.tpos = this.exp.tpos[this.dim];
	this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2;
	if (this.tpos == 0 || this.tpos == -1) {
		this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt];		
	};
},
calcExpanded: function() {
	var exp = this.exp;
	this.justify = 'auto';
	
	// get alignment
	if (exp.align == 'center') this.justify = 'center';
	else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null;
	else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max';
	
	
	// size and position
	this.pos = this.tpos - this.cb + this.tb;
	
	if (this.maxHeight && this.dim == 'x')
		exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); 
		
	this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full);
	this.minSize = exp.allowSizeReduction ? 
		Math.min(exp['min'+ this.ucwh], this.full) :this.full;
	if (exp.isImage && exp.useBox)	{
		this.size = exp[this.wh];
		this.imgSize = this.full;
	}
	if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth;
	this.target = exp['target'+ this.dim.toUpperCase()];
	this.marginMin = hs['margin'+ this.uclt];
	this.scroll = hs.page['scroll'+ this.uclt];
	this.clientSize = hs.page[this.wh];
},
setSize: function(i) {
	var exp = this.exp;
	if (exp.isImage && (exp.useBox || hs.padToMinWidth)) {
		this.imgSize = i;
		this.size = Math.max(this.size, this.imgSize);
		exp.content.style[this.lt] = this.get('imgPad')+'px';
	} else
	this.size = i;
	
	exp.content.style[this.wh] = i +'px';
	exp.wrapper.style[this.wh] = this.get('wsize') +'px';
	if (exp.outline) exp.outline.setPosition();
	if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px';
	if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try {
		exp.iDoc.body.style.overflow = 'auto';
	} catch (e) {}
	if (exp.isHtml) {
		var d = exp.scrollerDiv;
		if (this.sizeDiff === undefined)
			this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh];
		d.style[this.wh] = (this.size - this.sizeDiff) +'px';
			
		if (this.dim == 'x') exp.mediumContent.style.width = 'auto';
		if (exp.body) exp.body.style[this.wh] = 'auto';
	}
	if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true);
	if (this.dim == 'x' && exp.slideshow && exp.isImage) {
		if (i == this.full) exp.slideshow.disable('full-expand');
		else exp.slideshow.enable('full-expand');
	}
},
setPos: function(i) {
	this.pos = i;
	this.exp.wrapper.style[this.lt] = i +'px';	
	
	if (this.exp.outline) this.exp.outline.setPosition();
	
}
};

hs.Expander = function(a, params, custom, contentType) {
	if (document.readyState && hs.ie && !hs.isReady) {
		hs.addEventListener(document, 'ready', function() {
			new hs.Expander(a, params, custom, contentType);
		});
		return;
	} 
	this.a = a;
	this.custom = custom;
	this.contentType = contentType || 'image';
	this.isHtml = (contentType == 'html');
	this.isImage = !this.isHtml;
	
	hs.continuePreloading = false;
	this.overlays = [];
	this.last = hs.last;
	hs.last = null;
	hs.init();
	var key = this.key = hs.expanders.length;
	// override inline parameters
	for (var i = 0; i < hs.overrides.length; i++) {
		var name = hs.overrides[i];
		this[name] = params && typeof params[name] != 'undefined' ?
			params[name] : hs[name];
	}
	if (!this.src) this.src = a.href;
	
	// get thumb
	var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a;
	el = this.thumb = el.getElementsByTagName('img')[0] || el;
	this.thumbsUserSetId = el.id || a.id;
	if (!hs.fireEvent(this, 'onInit')) return true;
	
	// check if already open
	for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && hs.expanders[i].a == a 
			&& !(this.last && this.transitions[1] == 'crossfade')) {
			hs.expanders[i].focus();
			return false;
		}
	}	

	// cancel other
	if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) {
			hs.expanders[i].cancelLoading();
		}
	}
	hs.expanders[key] = this;
	if (!hs.allowMultipleInstances && !hs.upcoming) {
		if (hs.expanders[key-1]) hs.expanders[key-1].close();
		if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey])
			hs.expanders[hs.focusKey].close();
	}
	
	// initiate metrics
	this.el = el;
	this.tpos = hs.getPosition(el);
	hs.getPageSize();
	var x = this.x = new hs.Dimension(this, 'x');
	x.calcThumb();
	var y = this.y = new hs.Dimension(this, 'y');
	y.calcThumb();
	if (/area/i.test(el.tagName)) this.getImageMapAreaCorrection(el);
	this.wrapper = hs.createElement(
		'div', {
			id: 'highslide-wrapper-'+ this.key,
			className: 'highslide-wrapper '+ this.wrapperClassName
		}, {
			visibility: 'hidden',
			position: 'absolute',
			zIndex: hs.zIndexCounter += 2
		}, null, true );
	
	this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler;
	if (this.contentType == 'image' && this.outlineWhileAnimating == 2)
		this.outlineWhileAnimating = 0;
	
	// get the outline
	if (!this.outlineType 
		|| (this.last && this.isImage && this.transitions[1] == 'crossfade')) {
		this[this.contentType +'Create']();
	
	} else if (hs.pendingOutlines[this.outlineType]) {
		this.connectOutline();
		this[this.contentType +'Create']();
	
	} else {
		this.showLoading();
		var exp = this;
		new hs.Outline(this.outlineType, 
			function () {
				exp.connectOutline();
				exp[exp.contentType +'Create']();
			} 
		);
	}
	return true;
};

hs.Expander.prototype = {
error : function(e) {
	// alert ('Line '+ e.lineNumber +': '+ e.message);
	window.location.href = this.src;
},

connectOutline : function() {
	var outline = this.outline = hs.pendingOutlines[this.outlineType];
	outline.exp = this;
	outline.table.style.zIndex = this.wrapper.style.zIndex - 1;
	hs.pendingOutlines[this.outlineType] = null;
},

showLoading : function() {
	if (this.onLoadStarted || this.loading) return;
	
	this.loading = hs.loading;
	var exp = this;
	this.loading.onclick = function() {
		exp.cancelLoading();
	};
	
	
	if (!hs.fireEvent(this, 'onShowLoading')) return;
	var exp = this, 
		l = this.x.get('loadingPos') +'px',
		t = this.y.get('loadingPos') +'px';
	if (!tgt && this.last && this.transitions[1] == 'crossfade') 
		var tgt = this.last; 
	if (tgt) {
		l = tgt.x.get('loadingPosXfade') +'px';
		t = tgt.y.get('loadingPosXfade') +'px';
		this.loading.style.zIndex = hs.zIndexCounter++;
	}
	setTimeout(function () { 
		if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })}
	, 100);
},

imageCreate : function() {
	var exp = this;
	
	var img = document.createElement('img');
    this.content = img;
    img.onload = function () {
    	if (hs.expanders[exp.key]) exp.contentLoaded(); 
	};
    if (hs.blockRightClick) img.oncontextmenu = function() { return false; };
    img.className = 'highslide-image';
    hs.setStyles(img, {
    	visibility: 'hidden',
    	display: 'block',
    	position: 'absolute',
		maxWidth: '9999px',
		zIndex: 3
	});
    img.title = hs.lang.restoreTitle;
    if (hs.safari) hs.container.appendChild(img);
    if (hs.ie && hs.flushImgSize) img.src = null;
	img.src = this.src;
	
	this.showLoading();
},

htmlCreate : function () {
	if (!hs.fireEvent(this, 'onBeforeGetContent')) return;
	
	this.content = hs.getCacheBinding(this.a);
	if (!this.content) 
		this.content = hs.getNode(this.contentId);
	if (!this.content) 
		this.content = hs.getSelfRendered();
	this.getInline(['maincontent']);
	if (this.maincontent) {
		var body = hs.getElementByClass(this.content, 'div', 'highslide-body');
		if (body) body.appendChild(this.maincontent);
		this.maincontent.style.display = 'block';
	}
	hs.fireEvent(this, 'onAfterGetContent');
	
	var innerContent = this.innerContent = this.content;
	
	if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent);
	
	// the content tree
	hs.container.appendChild(this.wrapper);
	hs.setStyles( this.wrapper, { 
		position: 'static',
		padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px'
	});
	this.content = hs.createElement(
    	'div', {
    		className: 'highslide-html' 
    	}, {
			position: 'relative',
			zIndex: 3,
			overflow: 'hidden'
		},
		this.wrapper
	);
	this.mediumContent = hs.createElement('div', null, null, this.content, 1);
	this.mediumContent.appendChild(innerContent);
	
	hs.setStyles (innerContent, { 
		position: 'relative',
		display: 'block',
		direction: hs.lang.cssDirection || ''
	});
	if (this.width) innerContent.style.width = this.width +'px';
	if (this.height) hs.setStyles(innerContent, {
		height: this.height +'px',
		overflow: 'hidden'
	});
	if (innerContent.offsetWidth < this.minWidth)
		innerContent.style.width = this.minWidth +'px';
		
	
    
	if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) {
		this.showLoading();
    	var exp = this;
    	var ajax = new hs.Ajax(this.a, innerContent);
		ajax.src = this.src;
    	ajax.onLoad = function () {	if (hs.expanders[exp.key]) exp.contentLoaded(); };
    	ajax.onError = function () { location.href = exp.src; };
    	ajax.run();
	}
    else
    
    if (this.objectType == 'iframe' && this.objectLoadTime == 'before') {
		this.writeExtendedContent();
	}
    else
    	this.contentLoaded();
},

contentLoaded : function() {
	try {	
		if (!this.content) return;
		this.content.onload = null;
		if (this.onLoadStarted) return;
		else this.onLoadStarted = true;
		
		var x = this.x, y = this.y;
		
		if (this.loading) {
			hs.setStyles(this.loading, { top: '-9999px' });
			this.loading = null;
			hs.fireEvent(this, 'onHideLoading');
		}
		if (this.isImage) {	
			x.full = this.content.width;
			y.full = this.content.height;
			
			hs.setStyles(this.content, {
				width: x.t +'px',
				height: y.t +'px'
			});
			this.wrapper.appendChild(this.content);
			hs.container.appendChild(this.wrapper);
		} else if (this.htmlGetSize) this.htmlGetSize();
		
		x.calcBorders();
		y.calcBorders();
		
		hs.setStyles (this.wrapper, {
			left: (x.tpos + x.tb - x.cb) +'px',
			top: (y.tpos + x.tb - y.cb) +'px'
		});
		
		
		this.initSlideshow();
		this.getOverlays();
		
		var ratio = x.full / y.full;
		x.calcExpanded();
		this.justify(x);
		
		y.calcExpanded();
		this.justify(y);
		if (this.isHtml) this.htmlSizeOperations();
		if (this.overlayBox) this.sizeOverlayBox(0, 1);

		
		if (this.allowSizeReduction) {
			if (this.isImage)
				this.correctRatio(ratio);
			else this.fitOverlayBox();
			var ss = this.slideshow;			
			if (ss && this.last && ss.controls && ss.fixedControls) {
				var pos = ss.overlayOptions.position || '', p;
				for (var dim in hs.oPos) for (var i = 0; i < 5; i++) {
					p = this[dim];
					if (pos.match(hs.oPos[dim][i])) {
						p.pos = this.last[dim].pos 
							+ (this.last[dim].p1 - p.p1)
							+ (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i];
						if (ss.fixedControls == 'fit') {
							if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax)
								p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2;
							if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; 
						} 
					}
				}
			}
			if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) {
				//this.createFullExpand();
				if (this.overlays.length == 1) this.sizeOverlayBox();
			}
		}
		this.show();
		
	} catch (e) {
		this.error(e);
	}
},


setObjContainerSize : function(parent, auto) {
	var c = hs.getElementByClass(parent, 'DIV', 'highslide-body');
	if (/(iframe|swf)/.test(this.objectType)) {
		if (this.objectWidth) c.style.width = this.objectWidth +'px';
		if (this.objectHeight) c.style.height = this.objectHeight +'px';
	}
},

writeExtendedContent : function () {
	if (this.hasExtendedContent) return;
	var exp = this;
	this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body');
	if (this.objectType == 'iframe') {
		this.showLoading();
		var ruler = hs.clearing.cloneNode(1);
		this.body.appendChild(ruler);
		this.newWidth = this.innerContent.offsetWidth;
		if (!this.objectWidth) this.objectWidth = ruler.offsetWidth;
		var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight,
			h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom,
			onload = this.objectLoadTime == 'before' ? 
				' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : '';
		this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" '
			+' style="width:'+ this.objectWidth +'px; height:'+ h +'px" '
			+ onload +' src="'+ this.src +'" ></iframe>';
		this.ruler = this.body.getElementsByTagName('div')[0];
		this.iframe = this.body.getElementsByTagName('iframe')[0];
		
		if (this.objectLoadTime == 'after') this.correctIframeSize();
		
	}
	if (this.objectType == 'swf') {
		this.body.id = this.body.id || 'hs-flash-id-' + this.key;
		var a = this.swfOptions;
		if (!a.params) a.params = {};
		if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent';
		if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, 
			a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes);
	}
	this.hasExtendedContent = true;
},
htmlGetSize : function() {
	if (this.iframe && !this.objectHeight) { // loadtime before
		this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px';
	}
	this.innerContent.appendChild(hs.clearing);
	if (!this.x.full) this.x.full = this.innerContent.offsetWidth;
    this.y.full = this.innerContent.offsetHeight;
    this.innerContent.removeChild(hs.clearing);
    if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug
		this.newHeight = parseInt(this.innerContent.currentStyle.height);
	}
	hs.setStyles( this.wrapper, { position: 'absolute',	padding: '0'});
	hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'});
	
},

getIframePageHeight : function() {
	var h;
	try {
		var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document;
		var clearing = doc.createElement('div');
		clearing.style.clear = 'both';
		doc.body.appendChild(clearing);
		h = clearing.offsetTop;
		if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) 
			+ parseInt(doc.body.currentStyle.marginBottom) - 1;
	} catch (e) { // other domain
		h = 300;
	}
	return h;
},
correctIframeSize : function () {
	var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth;
	hs.discardElement(this.ruler);
	if (wDiff < 0) wDiff = 0;
	
	var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight;
	if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try {
		this.iDoc.body.style.overflow = 'hidden';
	} catch (e) {}
	hs.setStyles(this.iframe, { 
		width: Math.abs(this.x.size - wDiff) +'px', 
		height: Math.abs(this.y.size - hDiff) +'px'
	});
    hs.setStyles(this.body, { 
		width: this.iframe.style.width, 
    	height: this.iframe.style.height
	});
    	
    this.scrollingContent = this.iframe;
    this.scrollerDiv = this.scrollingContent;
	
},
htmlSizeOperations : function () {
	
	this.setObjContainerSize(this.innerContent);
	
	
	if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent();	
	
    // handle minimum size
    if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full;
    if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full;
	this.scrollerDiv = this.innerContent;
    hs.setStyles(this.mediumContent, { 
		position: 'relative',
		width: this.x.size +'px'
	});
    hs.setStyles(this.innerContent, { 
    	border: 'none',
    	width: 'auto',
    	height: 'auto'
    });
	var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body');
    if (node && !/(iframe|swf)/.test(this.objectType)) {
    	var cNode = node; // wrap to get true size
    	node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true);
    	cNode.parentNode.insertBefore(node, cNode);
    	node.appendChild(hs.clearing); // IE6
    	node.appendChild(cNode);
    	
    	var wDiff = this.innerContent.offsetWidth - node.offsetWidth;
    	var hDiff = this.innerContent.offsetHeight - node.offsetHeight;
		node.removeChild(hs.clearing);
    	
    	var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug
    	hs.setStyles(node, { 
    			width: (this.x.size - wDiff - kdeBugCorr) +'px', 
    			height: (this.y.size - hDiff) +'px',
    			overflow: 'auto', 
    			position: 'relative' 
    		} 
    	);
		if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight)	{
    		node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px';
		}
    	this.scrollingContent = node;
    	this.scrollerDiv = this.scrollingContent;
	}
    if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize();
    if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content;
	
	if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) {
		this.x.size += 17; // room for scrollbars
	}
	if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) {
		setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}",
			 hs.expandDuration);
	}
},

getImageMapAreaCorrection : function(area) {
	var c = area.coords.split(',');
	for (var i = 0; i < c.length; i++) c[i] = parseInt(c[i]);
	
	if (area.shape.toLowerCase() == 'circle') {
		this.x.tpos += c[0] - c[2];
		this.y.tpos += c[1] - c[2];
		this.x.t = this.y.t = 2 * c[2];
	} else {
		var maxX, maxY, minX = maxX = c[0], minY = maxY = c[1];
		for (var i = 0; i < c.length; i++) {
			if (i % 2 == 0) {
				minX = Math.min(minX, c[i]);
				maxX = Math.max(maxX, c[i]);
			} else {
				minY = Math.min(minY, c[i]);
				maxY = Math.max(maxY, c[i]);
			}
		}
		this.x.tpos += minX;
		this.x.t = maxX - minX;
		this.y.tpos += minY;
		this.y.t = maxY - minY;
	}
},
justify : function (p, moveOnly) {
	var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y';
	
	if (tgt && tgt.match(/ /)) {
		tgtArr = tgt.split(' ');
		tgt = tgtArr[0];
	}
	if (tgt && hs.$(tgt)) {
		p.pos = hs.getPosition(hs.$(tgt))[dim];
		if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) 
			p.pos += parseInt(tgtArr[1]);
		if (p.size < p.minSize) p.size = p.minSize;
		
	} else if (p.justify == 'auto' || p.justify == 'center') {
	
		var hasMovedMin = false;
		
		var allowReduce = p.exp.allowSizeReduction;
		if (p.justify == 'center')
			p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2);
		else
			p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2));
		if (p.pos < p.scroll + p.marginMin) {
			p.pos = p.scroll + p.marginMin;
			hasMovedMin = true;		
		}
		if (!moveOnly && p.size < p.minSize) {
			p.size = p.minSize;
			allowReduce = false;
		}
		if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) {
			if (!moveOnly && hasMovedMin && allowReduce) {
				p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize'));
			} else if (p.get('wsize') < p.get('fitsize')) {
				p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize');
			} else { // image larger than viewport
				p.pos = p.scroll + p.marginMin;
				if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize');
			}			
		}
		
		if (!moveOnly && p.size < p.minSize) {
			p.size = p.minSize;
			allowReduce = false;
		}
		
	
	} else if (p.justify == 'max') {
		p.pos = Math.floor(p.pos - p.size + p.t);
	}
	
		
	if (p.pos < p.marginMin) {
		var tmpMin = p.pos;
		p.pos = p.marginMin; 
		
		if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin);
		
	}
},

correctRatio : function(ratio) {
	var x = this.x, 
		y = this.y,
		changed = false,
		xSize = Math.min(x.full, x.size),
		ySize = Math.min(y.full, y.size),
		useBox = (this.useBox || hs.padToMinWidth);
	
	if (xSize / ySize > ratio) { // width greater
		xSize = ySize * ratio;
		if (xSize < x.minSize) { // below minWidth
			xSize = x.minSize;
			ySize = xSize / ratio;
		}
		changed = true;
	
	} else if (xSize / ySize < ratio) { // height greater
		ySize = xSize / ratio;
		changed = true;
	}
	
	if (hs.padToMinWidth && x.full < x.minSize) {
		x.imgSize = x.full;
		y.size = y.imgSize = y.full;
	} else if (this.useBox) {
		x.imgSize = xSize;
		y.imgSize = ySize;
	} else {
		x.size = xSize;
		y.size = ySize;
	}
	changed = this.fitOverlayBox(useBox ? null : ratio, changed);
	if (useBox && y.size < y.imgSize) {
		y.imgSize = y.size;
		x.imgSize = y.size * ratio;
	}
	if (changed || useBox) {
		x.pos = x.tpos - x.cb + x.tb;
		x.minSize = x.size;
		this.justify(x, true);
	
		y.pos = y.tpos - y.cb + y.tb;
		y.minSize = y.size;
		this.justify(y, true);
		if (this.overlayBox) this.sizeOverlayBox();
	}
},
fitOverlayBox : function(ratio, changed) {
	var x = this.x, y = this.y;
	if (this.overlayBox && (this.isImage || this.allowHeightReduction)) {
		while (y.size > this.minHeight && x.size > this.minWidth 
				&&  y.get('wsize') > y.get('fitsize')) {
			y.size -= 10;
			if (ratio) x.size = y.size * ratio;
			this.sizeOverlayBox(0, 1);
			changed = true;
		}
	}
	return changed;
},

reflow : function () {
	if (this.scrollerDiv) {
		var h = /iframe/i.test(this.scrollerDiv.tagName) ? (this.getIframePageHeight() + 1) +'px' : 'auto';
		if (this.body) this.body.style.height = h;
		this.scrollerDiv.style.height = h;
		this.y.setSize(this.innerContent.offsetHeight);
	}
},

show : function () {
	var x = this.x, y = this.y;
	this.doShowHide('hidden');
	hs.fireEvent(this, 'onBeforeExpand');
	if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb();
	
	// Apply size change
	this.changeSize(
		1, {
			wrapper: {
				width : x.get('wsize'),
				height : y.get('wsize'),
				left: x.pos,
				top: y.pos
			},
			content: {
				left: x.p1 + x.get('imgPad'),
				top: y.p1 + y.get('imgPad'),
				width:x.imgSize ||x.size,
				height:y.imgSize ||y.size
			}
		},
		hs.expandDuration
	);
},

changeSize : function(up, to, dur) {
	// transition
	var trans = this.transitions,
	other = up ? (this.last ? this.last.a : null) : hs.upcoming,
	t = (trans[1] && other 
			&& hs.getParam(other, 'transitions')[1] == trans[1]) ?
		trans[1] : trans[0];
		
	if (this[t] && t != 'expand') {
		this[t](up, to);
		return;
	}
	
	if (this.outline && !this.outlineWhileAnimating) {
		if (up) this.outline.setPosition();
		else this.outline.destroy(
				(this.isHtml && this.preserveContent));
	}
	
	
	if (!up) this.destroyOverlays();
	
	var exp = this,
		x = exp.x,
		y = exp.y,
		easing = this.easing;
	if (!up) easing = this.easingClose || easing;
	var after = up ?
		function() {
				
			if (exp.outline) exp.outline.table.style.visibility = "visible";
			setTimeout(function() {
				exp.afterExpand();
			}, 50);
		} :
		function() {
			exp.afterClose();
		};
	if (up) hs.setStyles( this.wrapper, {
		width: x.t +'px',
		height: y.t +'px'
	});
	if (up && this.isHtml) {
		hs.setStyles(this.wrapper, {
			left: (x.tpos - x.cb + x.tb) +'px',
			top: (y.tpos - y.cb + y.tb) +'px'
		});
	}
	if (this.fadeInOut) {
		hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 });
		hs.extend(to.wrapper, { opacity: up });
	}
	hs.animate( this.wrapper, to.wrapper, {
		duration: dur,
		easing: easing,
		step: function(val, args) {
			if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') {
				var fac = up ? args.pos : 1 - args.pos;
				var pos = {
					w: x.t + (x.get('wsize') - x.t) * fac,
					h: y.t + (y.get('wsize') - y.t) * fac,
					x: x.tpos + (x.pos - x.tpos) * fac,
					y: y.tpos + (y.pos - y.tpos) * fac
				};
				exp.outline.setPosition(pos, 0, 1);				
			}
			if (exp.isHtml) {	
				if (args.prop == 'left') 
					exp.mediumContent.style.left = (x.pos - val) +'px';
				if (args.prop == 'top') 
					exp.mediumContent.style.top = (y.pos - val) +'px';
			}
		}
	});
	hs.animate( this.content, to.content, dur, easing, after);
	if (up) {
		this.wrapper.style.visibility = 'visible';
		this.content.style.visibility = 'visible';
		if (this.isHtml) this.innerContent.style.visibility = 'visible';
		this.a.className += ' highslide-active-anchor';
	}
},



fade : function(up, to) {
	this.outlineWhileAnimating = false;
	var exp = this,	t = up ? hs.expandDuration : 0;
	
	if (up) {
		hs.animate(this.wrapper, to.wrapper, 0);
		hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' });
		hs.animate(this.content, to.content, 0);
		this.content.style.visibility = 'visible';

		hs.animate(this.wrapper, { opacity: 1 }, t, null, 
			function() { exp.afterExpand(); });
	}
	
	if (this.outline) {
		this.outline.table.style.zIndex = this.wrapper.style.zIndex;
		var dir = up || -1, 
			offset = this.outline.offset,
			startOff = up ? 3 : offset,
			endOff = up? offset : 3;
		for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) {
			(function() {
				var o = up ? endOff - i : startOff - i;
				setTimeout(function() {
					exp.outline.setPosition(0, o, 1);
				}, t);
			})();
		}
	}
	
	
	if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50);
	else {
		setTimeout( function() {
			if (exp.outline) exp.outline.destroy(exp.preserveContent);
			
			exp.destroyOverlays();
	
			hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){
				exp.afterClose();
			});
		}, t);		
	}
},
crossfade : function (up, to, from) {
	if (!up) return;
	var exp = this, 
		last = this.last,
		x = this.x,
		y = this.y,
		lastX = last.x,
		lastY = last.y,
		wrapper = this.wrapper,
		content = this.content,
		overlayBox = this.overlayBox;
	hs.removeEventListener(document, 'mousemove', hs.dragHandler);
	
	hs.setStyles(content, { 
		width: (x.imgSize || x.size) +'px', 
		height: (y.imgSize || y.size) +'px'		
	});
	if (overlayBox) overlayBox.style.overflow = 'visible';
	this.outline = last.outline;
	if (this.outline) this.outline.exp = exp;
	last.outline = null;
	var fadeBox = hs.createElement('div', {
			className: 'highslide-image'
		}, { 
			position: 'absolute', 
			zIndex: 4,
			overflow: 'hidden',
			display: 'none'
		}
	);
	var names = { oldImg: last, newImg: this };
	for (var n in names) { 	
		this[n] = names[n].content.cloneNode(1);
		hs.setStyles(this[n], {
			position: 'absolute',
			border: 0,
			visibility: 'visible'
		});
		fadeBox.appendChild(this[n]);
	}
	wrapper.appendChild(fadeBox);
	if (this.isHtml) hs.setStyles(this.mediumContent, { 
		left: 0,
		top: 0
	});
	if (overlayBox) {
		overlayBox.className = '';
		wrapper.appendChild(overlayBox);
	}
	fadeBox.style.display = '';
	last.content.style.display = 'none';
	
	
	if (hs.safari) {
		var match = navigator.userAgent.match(/Safari\/([0-9]{3})/);
		if (match && parseInt(match[1]) < 525) this.wrapper.style.visibility = 'visible';
	}
	hs.animate(wrapper, {
		width: x.size
	}, {
		duration: hs.transitionDuration, 
		step: function(val, args) {
			var pos = args.pos,
				invPos = 1 - pos;
			var prop,
				size = {}, 
				props = ['pos', 'size', 'p1', 'p2'];
			for (var n in props) {
				prop = props[n];
				size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]);
				size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]);
				size.ximgSize = Math.round(
					invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size));
				size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad'));
				size.yimgSize = Math.round(
					invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size));
				size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad'));
			}
			if (exp.outline) exp.outline.setPosition({ 
				x: size.xpos, 
				y: size.ypos, 
				w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, 
				h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb
			});
			last.wrapper.style.clip = 'rect('
				+ (size.ypos - lastY.pos)+'px, '
				+ (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, '
				+ (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, '
				+ (size.xpos - lastX.pos)+'px)';
				
			hs.setStyles(content, {
				top: (size.yp1 + y.get('imgPad')) +'px',
				left: (size.xp1 + x.get('imgPad')) +'px',
				marginTop: (y.pos - size.ypos) +'px',
				marginLeft: (x.pos - size.xpos) +'px'
			});
			hs.setStyles(wrapper, {
				top: size.ypos +'px',
				left: size.xpos +'px',
				width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px',
				height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px'
			});
			hs.setStyles(fadeBox, {
				width: (size.ximgSize || size.xsize) + 'px',
				height: (size.yimgSize || size.ysize) +'px',
				left: (size.xp1 + size.ximgPad)  +'px',
				top: (size.yp1 + size.yimgPad) +'px',
				visibility: 'visible'
			});
			
			hs.setStyles(exp.oldImg, {
				top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px',
				left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px'
			});		
			
			hs.setStyles(exp.newImg, {
				opacity: pos,
				top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px',
				left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px'
			});
			if (overlayBox) hs.setStyles(overlayBox, {
				width: size.xsize + 'px',
				height: size.ysize +'px',
				left: (size.xp1 + x.cb)  +'px',
				top: (size.yp1 + y.cb) +'px'
			});
		},
		complete: function () {
			wrapper.style.visibility = content.style.visibility = 'visible';
			content.style.display = 'block';
			fadeBox.style.display = 'none';
			exp.a.className += ' highslide-active-anchor';
			exp.afterExpand();
			last.afterClose();
			exp.last = null;
		}
		
	});
},
reuseOverlay : function(o, el) {
	if (!this.last) return false;
	for (var i = 0; i < this.last.overlays.length; i++) {
		var oDiv = hs.$('hsId'+ this.last.overlays[i]);
		if (oDiv && oDiv.hsId == o.hsId) {
			this.genOverlayBox();
			oDiv.reuse = this.key;
			hs.push(this.overlays, this.last.overlays[i]);
			return true;
		}
	}
	return false;
},


afterExpand : function() {
	$('.banner').find('object').parent().hide();
	this.isExpanded = true;	
	this.focus();
	
	if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent();
	if (this.iframe) {
		try {
			var exp = this,
				doc = this.iframe.contentDocument || this.iframe.contentWindow.document;
			hs.addEventListener(doc, 'mousedown', function () {
				if (hs.focusKey != exp.key) exp.focus();
			});
		} catch(e) {}
		if (hs.ie && typeof this.isClosing != 'boolean') // first open 
			this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout
	}
	if (this.dimmingOpacity) hs.dim(this);
	if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null;
	this.prepareNextOutline();
	var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop;
	this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize')
		&& this.y.pos < mY && mY < this.y.pos + this.y.get('wsize');	
	if (this.overlayBox) this.showOverlays();
	hs.fireEvent(this, 'onAfterExpand');
	
},


prepareNextOutline : function() {
	var key = this.key;
	var outlineType = this.outlineType;
	new hs.Outline(outlineType, 
		function () { try { hs.expanders[key].preloadNext(); } catch (e) {} });
},


preloadNext : function() {
	var next = this.getAdjacentAnchor(1);
	if (next && next.onclick.toString().match(/hs\.expand/)) 
		var img = hs.createElement('img', { src: hs.getSrc(next) });
},


getAdjacentAnchor : function(op) {
	var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none'];
	
	/*< ? if ($cfg->slideshow) : ?>s*/
	if (!as[current + op] && this.slideshow && this.slideshow.repeat) {
		if (op == 1) return as[0];
		else if (op == -1) return as[as.length-1];
	}
	/*< ? endif ?>s*/
	return as[current + op] || null;
},

getAnchorIndex : function() {
	var arr = hs.getAnchors().groups[this.slideshowGroup || 'none'];
	if (arr) for (var i = 0; i < arr.length; i++) {
		if (arr[i] == this.a) return i; 
	}
	return null;
},


getNumber : function() {
	if (this[this.numberPosition]) {
		var arr = hs.anchors.groups[this.slideshowGroup || 'none'];
		if (arr) {
			var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length);
			this[this.numberPosition].innerHTML = 
				'<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML;
		}
	}
},
initSlideshow : function() {
	if (!this.last) {
		for (var i = 0; i < hs.slideshows.length; i++) {
			var ss = hs.slideshows[i], sg = ss.slideshowGroup;
			if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) 
				this.slideshow = new hs.Slideshow(this.key, ss);
		} 
	} else {
		this.slideshow = this.last.slideshow;
	}
	var ss = this.slideshow;
	if (!ss) return;
	var key = ss.expKey = this.key;
	
	ss.checkFirstAndLast();
	ss.disable('full-expand');
	if (ss.controls) {
		var o = ss.overlayOptions || {};
		o.overlayId = ss.controls;
		o.hsId = 'controls';		
		this.createOverlay(o);
	}
	if (ss.thumbstrip) ss.thumbstrip.add(this);
	if (!this.last && this.autoplay) ss.play(true);
	if (ss.autoplay) {
		ss.autoplay = setTimeout(function() {
			hs.next(key);
		}, (ss.interval || 500));
	}
},

cancelLoading : function() {
	hs.discardElement (this.wrapper);
	hs.expanders[this.key] = null;
	if (hs.upcoming == this.a) hs.upcoming = null;
	hs.undim(this.key);
	if (this.loading) hs.loading.style.left = '-9999px';
	hs.fireEvent(this, 'onHideLoading');
},

writeCredits : function () {
	if (this.credits) return;
	this.credits = hs.createElement('a', {
		href: hs.creditsHref,
		target: hs.creditsTarget,
		className: 'highslide-credits',
		innerHTML: hs.lang.creditsText,
		title: hs.lang.creditsTitle
	});
	this.createOverlay({ 
		overlayId: this.credits, 
		position: this.creditsPosition || 'top left', 
		hsId: 'credits' 
	});
},

getInline : function(types, addOverlay) {
	for (var i = 0; i < types.length; i++) {
		var type = types[i], s = null;
		if (type == 'caption' && !hs.fireEvent(this, 'onBeforeGetCaption')) return;
		else if (type == 'heading' && !hs.fireEvent(this, 'onBeforeGetHeading')) return;
		if (!this[type +'Id'] && this.thumbsUserSetId)  
			this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId;
		if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']);
		if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try {
			s = eval(this[type +'Eval']);
		} catch (e) {}
		if (!this[type] && this[type +'Text']) {
			s = this[type +'Text'];
		}
		if (!this[type] && !s) {
			this[type] = hs.getNode(this.a['_'+ type + 'Id']);
			if (!this[type]) {
				var next = this.a.nextSibling;
				while (next && !hs.isHsAnchor(next)) {
					if ((new RegExp('highslide-'+ type)).test(next.className || null)) {
						if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++;
						this[type] = hs.getNode(next.id);
						break;
					}
					next = next.nextSibling;
				}
			}
		}
		if (!this[type] && !s && this.numberPosition == type) s = '\n';
		
		if (!this[type] && s) this[type] = hs.createElement('div', 
				{ className: 'highslide-'+ type, innerHTML: s } );
		
		if (addOverlay && this[type]) {
			var o = { position: (type == 'heading') ? 'above' : 'below' };
			for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x];
			o.overlayId = this[type];
			this.createOverlay(o);
		}
	}
},


// on end move and resize
doShowHide : function(visibility) {
	if (hs.hideSelects) this.showHideElements('SELECT', visibility);
	if (hs.hideIframes) this.showHideElements('IFRAME', visibility);
	if (hs.geckoMac) this.showHideElements('*', visibility);
},
showHideElements : function (tagName, visibility) {
	var els = document.getElementsByTagName(tagName);
	var prop = tagName == '*' ? 'overflow' : 'visibility';
	for (var i = 0; i < els.length; i++) {
		if (prop == 'visibility' || (document.defaultView.getComputedStyle(
				els[i], "").getPropertyValue('overflow') == 'auto'
				|| els[i].getAttribute('hidden-by') != null)) {
			var hiddenBy = els[i].getAttribute('hidden-by');
			if (visibility == 'visible' && hiddenBy) {
				hiddenBy = hiddenBy.replace('['+ this.key +']', '');
				els[i].setAttribute('hidden-by', hiddenBy);
				if (!hiddenBy) els[i].style[prop] = els[i].origProp;
			} else if (visibility == 'hidden') { // hide if behind
				var elPos = hs.getPosition(els[i]);
				elPos.w = els[i].offsetWidth;
				elPos.h = els[i].offsetHeight;
				if (!this.dimmingOpacity) { // hide all if dimming
				
					var clearsX = (elPos.x + elPos.w < this.x.get('opos') 
						|| elPos.x > this.x.get('opos') + this.x.get('osize'));
					var clearsY = (elPos.y + elPos.h < this.y.get('opos') 
						|| elPos.y > this.y.get('opos') + this.y.get('osize'));
				}
				var wrapperKey = hs.getWrapperKey(els[i]);
				if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image
					if (!hiddenBy) {
						els[i].setAttribute('hidden-by', '['+ this.key +']');
						els[i].origProp = els[i].style[prop];
						els[i].style[prop] = 'hidden';
						
					} else if (hiddenBy.indexOf('['+ this.key +']') == -1) {
						els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']');
					}
				} else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey)
						&& wrapperKey != this.key) { // on move
					els[i].setAttribute('hidden-by', '');
					els[i].style[prop] = els[i].origProp || '';
				} else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) {
					els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', ''));
				}
						
			}
		}
	}
},

focus : function() {
	this.wrapper.style.zIndex = hs.zIndexCounter += 2;
	// blur others
	for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && i == hs.focusKey) {
			var blurExp = hs.expanders[i];
			blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur';
			if (blurExp.isImage) {
				blurExp.content.style.cursor = hs.ie ? 'hand' : 'pointer';
				blurExp.content.title = hs.lang.focusTitle;	
			}	
			hs.fireEvent(blurExp, 'onBlur');
		}
	}
	
	// focus this
	if (this.outline) this.outline.table.style.zIndex 
		= this.wrapper.style.zIndex - 1;
	this.content.className = 'highslide-'+ this.contentType;
	if (this.isImage) {
		this.content.title = hs.lang.restoreTitle;
		
		if (hs.restoreCursor) {
			hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer';
			if (hs.ie && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand';
			this.content.style.cursor = hs.styleRestoreCursor;
		}
	}
	hs.focusKey = this.key;	
	hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);	
	hs.fireEvent(this, 'onFocus');	
},
moveTo: function(x, y) {
	this.x.setPos(x);
	this.y.setPos(y);
},
resize : function (e) {
	var w, h, r = e.width / e.height;
	w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full));
	if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full;
	h = this.isHtml ? e.height + e.dY : w / r;
	if (h < Math.min(this.minHeight, this.y.full)) {
		h = Math.min(this.minHeight, this.y.full);
		if (this.isImage) w = h * r;
	}
	this.resizeTo(w, h);
},
resizeTo: function(w, h) {
	this.y.setSize(h);
	this.x.setSize(w);
	this.wrapper.style.height = this.y.get('wsize') +'px';
},

close : function() {
	if (this.isClosing || !this.isExpanded) return;
	if (this.transitions[1] == 'crossfade' && hs.upcoming) {
		hs.getExpander(hs.upcoming).cancelLoading();
		hs.upcoming = null;
	}
	if (!hs.fireEvent(this, 'onBeforeClose')) return;
	this.isClosing = true;
	if (this.slideshow && !hs.upcoming) this.slideshow.pause();
	
	hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);

	try {
		if (this.isHtml) this.htmlPrepareClose();
		this.content.style.cursor = 'default';
		this.changeSize(
			0, {
				wrapper: {
					width : this.x.t,
					height : this.y.t,
					left: this.x.tpos - this.x.cb + this.x.tb,
					top: this.y.tpos - this.y.cb + this.y.tb
				},
				content: {
					left: 0,
					top: 0,
					width: this.x.t,
					height: this.y.t
				}
			}, hs.restoreDuration
		);
	} catch (e) { this.afterClose(); }
},

htmlPrepareClose : function() {
	if (hs.geckoMac) { // bad redraws
		if (!hs.mask) hs.mask = hs.createElement('div', null, 
			{ position: 'absolute' }, hs.container);
		hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', 
			left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' });			
	}
	if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {}
	
	if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject();		
	if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) 
		this.scrollerDiv.style.overflow = 'hidden';
},

destroyObject : function () {
	if (hs.ie && this.iframe)
		try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {}
	if (this.objectType == 'swf') swfobject.removeSWF(this.body.id);
	this.body.innerHTML = '';
},

sleep : function() {
	if (this.outline) this.outline.table.style.display = 'none';
	this.releaseMask = null;
	this.wrapper.style.display = 'none';
	hs.push(hs.sleeping, this);
},

awake : function() {try {
	
	hs.expanders[this.key] = this;
	
	if (!hs.allowMultipleInstances &&hs.focusKey != this.key) {	
		try { hs.expanders[hs.focusKey].close(); } catch (e){}
	}
	
	var z = hs.zIndexCounter++, stl = { display: '', zIndex: z };
	hs.setStyles (this.wrapper, stl);
	this.isClosing = false;
	
	var o = this.outline || 0;
	if (o) {
		if (!this.outlineWhileAnimating) stl.visibility = 'hidden';
		hs.setStyles (o.table, stl);		
	}
	if (this.slideshow) {
		this.initSlideshow();
	}
		
	this.show();
} catch (e) {}


},

createOverlay : function (o) {
	var el = o.overlayId, 
		relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position));
	if (typeof el == 'string') el = hs.getNode(el);
	if (o.html) el = hs.createElement('div', { innerHTML: o.html });
	if (!el || typeof el == 'string') return;
	if (!hs.fireEvent(this, 'onCreateOverlay', { overlay: el })) return;
	el.style.display = 'block';
	o.hsId = o.hsId || o.overlayId; 
	if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return;
	this.genOverlayBox();
	var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto';
	if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px';
	var overlay = hs.createElement(
		'div', {
			id: 'hsId'+ hs.idCounter++,
			hsId: o.hsId
		}, {
			position: 'absolute',
			visibility: 'hidden',
			width: width,
			direction: hs.lang.cssDirection || '',
			opacity: 0
		},
		relToVP ? hs.viewport :this.overlayBox,
		true
	);
	if (relToVP) overlay.hsKey = this.key;
	
	overlay.appendChild(el);
	hs.extend(overlay, {
		opacity: 1,
		offsetX: 0,
		offsetY: 0,
		dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250
	});
	hs.extend(overlay, o);
		
	if (this.gotOverlays) {
		this.positionOverlay(overlay);
		if (!overlay.hideOnMouseOut || this.mouseIsOver) 
			hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur);
	}
	hs.push(this.overlays, hs.idCounter - 1);
},
positionOverlay : function(overlay) {
	var p = overlay.position || 'middle center',
		relToVP = (overlay.relativeTo == 'viewport'),
		offX = overlay.offsetX,
		offY = overlay.offsetY;
	if (relToVP) {
		hs.viewport.style.display = 'block';
		overlay.hsKey = this.key;
		if (overlay.offsetWidth > overlay.parentNode.offsetWidth)
			overlay.style.width = '100%';
	} else
	if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay);
	if (/left$/.test(p)) overlay.style.left = offX +'px'; 
	
	if (/center$/.test(p))	hs.setStyles (overlay, { 
		left: '50%',
		marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px'
	});	
	
	if (/right$/.test(p)) overlay.style.right = - offX +'px';
		
	if (/^leftpanel$/.test(p)) { 
		hs.setStyles(overlay, {
			right: '100%',
			marginRight: this.x.cb +'px',
			top: - this.y.cb +'px',
			bottom: - this.y.cb +'px',
			overflow: 'auto'
		});		 
		this.x.p1 = overlay.offsetWidth;
	
	} else if (/^rightpanel$/.test(p)) {
		hs.setStyles(overlay, {
			left: '100%',
			marginLeft: this.x.cb +'px',
			top: - this.y.cb +'px',
			bottom: - this.y.cb +'px',
			overflow: 'auto'
		});
		this.x.p2 = overlay.offsetWidth;
	}
	var parOff = overlay.parentNode.offsetHeight;
	overlay.style.height = 'auto';
	if (relToVP && overlay.offsetHeight > parOff)
		overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%';

	if (/^top/.test(p)) overlay.style.top = offY +'px'; 
	if (/^middle/.test(p))	hs.setStyles (overlay, { 
		top: '50%', 
		marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px'
	});	
	if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px';
	if (/^above$/.test(p)) {
		hs.setStyles(overlay, {
			left: (- this.x.p1 - this.x.cb) +'px',
			right: (- this.x.p2 - this.x.cb) +'px',
			bottom: '100%',
			marginBottom: this.y.cb +'px',
			width: 'auto'
		});
		this.y.p1 = overlay.offsetHeight;
	
	} else if (/^below$/.test(p)) {
		hs.setStyles(overlay, {
			position: 'relative',
			left: (- this.x.p1 - this.x.cb) +'px',
			right: (- this.x.p2 - this.x.cb) +'px',
			top: '100%',
			marginTop: this.y.cb +'px',
			width: 'auto'
		});
		this.y.p2 = overlay.offsetHeight;
		overlay.style.position = 'absolute';
	}
},

getOverlays : function() {	
	this.getInline(['heading', 'caption'], true);
	this.getNumber();
	if (this.caption) hs.fireEvent(this, 'onAfterGetCaption');
	if (this.heading) hs.fireEvent(this, 'onAfterGetHeading');
	if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move';
	if (hs.showCredits) this.writeCredits();
	for (var i = 0; i < hs.overlays.length; i++) {
		var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup;
		if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId)
				|| (sg && sg === this.slideshowGroup)) {
			if (this.isImage || (this.isHtml && o.useOnHtml))
			this.createOverlay(o);
		}
	}
	var os = [];
	for (var i = 0; i < this.overlays.length; i++) {
		var o = hs.$('hsId'+ this.overlays[i]);
		if (/panel$/.test(o.position)) this.positionOverlay(o);
		else hs.push(os, o);
	}
	for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]);
	this.gotOverlays = true;
},
genOverlayBox : function() {
	if (!this.overlayBox) this.overlayBox = hs.createElement (
		'div', {
			className: this.wrapperClassName
		}, {
			position : 'absolute',
			width: (this.x.size || (this.useBox ? this.width : null) 
				|| this.x.full) +'px',
			height: (this.y.size || this.y.full) +'px',
			visibility : 'hidden',
			overflow : 'hidden',
			zIndex : hs.ie ? 4 : 'auto'
		},
		hs.container,
		true
	);
},
sizeOverlayBox : function(doWrapper, doPanels) {
	var overlayBox = this.overlayBox, 
		x = this.x,
		y = this.y;
	hs.setStyles( overlayBox, {
		width: x.size +'px', 
		height: y.size +'px'
	});
	if (doWrapper || doPanels) {
		for (var i = 0; i < this.overlays.length; i++) {
			var o = hs.$('hsId'+ this.overlays[i]);
			var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat');
			if (o && /^(above|below)$/.test(o.position)) {
				if (ie6) {
					o.style.width = (overlayBox.offsetWidth + 2 * x.cb
						+ x.p1 + x.p2) +'px';
				}
				y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight;
			}
			if (o && ie6 && /^(left|right)panel$/.test(o.position)) {
				o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px';
			}
		}
	}
	if (doWrapper) {
		hs.setStyles(this.content, {
			top: y.p1 +'px'
		});
		hs.setStyles(overlayBox, {
			top: (y.p1 + y.cb) +'px'
		});
	}
},

showOverlays : function() {
	var b = this.overlayBox;
	b.className = '';
	hs.setStyles(b, {
		top: (this.y.p1 + this.y.cb) +'px',
		left: (this.x.p1 + this.x.cb) +'px',
		overflow : 'visible'
	});
	if (hs.safari) b.style.visibility = 'visible';
	this.wrapper.appendChild (b);
	for (var i = 0; i < this.overlays.length; i++) {
		var o = hs.$('hsId'+ this.overlays[i]);
		o.style.zIndex = o.hsId == 'controls' ? 5 : 4;
		if (!o.hideOnMouseOut || this.mouseIsOver) {
			o.style.visibility = 'visible';
			hs.setStyles(o, { visibility: 'visible', display: '' });
			hs.animate(o, { opacity: o.opacity }, o.dur);
		}
	}
},

destroyOverlays : function() {
	if (!this.overlays.length) return;
	if (this.slideshow) {
		var c = this.slideshow.controls;
		if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c);
	}
	for (var i = 0; i < this.overlays.length; i++) {
		var o = hs.$('hsId'+ this.overlays[i]);
		if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o);
	}
	if (this.isHtml && this.preserveContent) {
		this.overlayBox.style.top = '-9999px';
		hs.container.appendChild(this.overlayBox);
	} else
	hs.discardElement(this.overlayBox);
},



createFullExpand : function () {
	if (this.slideshow && this.slideshow.controls) {
		this.slideshow.enable('full-expand');
		return;
	}
	this.fullExpandLabel = hs.createElement(
		'a', {
			href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();',
			title: hs.lang.fullExpandTitle,
			className: 'highslide-full-expand'
		}
	);
	if (!hs.fireEvent(this, 'onCreateFullExpand')) return;
	
	this.createOverlay({ 
		overlayId: this.fullExpandLabel, 
		position: hs.fullExpandPosition, 
		hideOnMouseOut: true, 
		opacity: hs.fullExpandOpacity
	});
},

doFullExpand : function () {
	try {
		if (!hs.fireEvent(this, 'onDoFullExpand')) return;
		if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel);
		
		this.focus();
		var xSize = this.x.size;
		this.resizeTo(this.x.full, this.y.full);
		
		var xpos = this.x.pos - (this.x.size - xSize) / 2;
		if (xpos < hs.marginLeft) xpos = hs.marginLeft;
		
		this.moveTo(xpos, this.y.pos);
		this.doShowHide('hidden');
	
	} catch (e) {
		this.error(e);
	}
},


afterClose : function () {
	$('.banner').find('object').parent().show();
	this.a.className = this.a.className.replace('highslide-active-anchor', '');
	
	this.doShowHide('visible');	
	
	if (this.isHtml && this.preserveContent
			 && this.transitions[1] != 'crossfade') {
		this.sleep();
	} else {
		if (this.outline && this.outlineWhileAnimating) this.outline.destroy();
	
		hs.discardElement(this.wrapper);
	}
	if (hs.mask) hs.mask.style.display = 'none';
	this.destroyOverlays();
	if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none';
	
	if (this.dimmingOpacity) hs.undim(this.key);
	hs.fireEvent(this, 'onAfterClose');
	hs.expanders[this.key] = null;		
	hs.reOrder();
}

};


// hs.Ajax object prototype
hs.Ajax = function (a, content, pre) {
	this.a = a;
	this.content = content;
	this.pre = pre;
};

hs.Ajax.prototype = {
run : function () {
	var xhr;
	if (!this.src) this.src = hs.getSrc(this.a);
	if (this.src.match('#')) {
		var arr = this.src.split('#');
		this.src = arr[0];
		this.id = arr[1];
	}
	if (hs.cachedGets[this.src]) {
		this.cachedGet = hs.cachedGets[this.src];
		if (this.id) this.getElementContent();
		else this.loadHTML();
		return;
	}
	try { xhr = new XMLHttpRequest(); }
	catch (e) {
		try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e) {
			try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (e) { this.onError(); }
		}
	}
	var pThis = this; 
	xhr.onreadystatechange = function() {
		if(pThis.xhr.readyState == 4) {
			if (pThis.id) pThis.getElementContent();
			else pThis.loadHTML();
		}
	};
	var src = this.src;
	this.xhr = xhr;
	if (hs.forceAjaxReload) 
		src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime());
	xhr.open('GET', src, true);
	xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr.send(null);
},

getElementContent : function() {
	hs.init();
	var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null;
	
	this.iframe = hs.createElement('iframe', attribs, 
		{ position: 'absolute', top: '-9999px' }, hs.container);
		
	this.loadHTML();
},

loadHTML : function() {
	var s = this.cachedGet || this.xhr.responseText,
		regBody;
	if (this.pre) hs.cachedGets[this.src] = s;
	if (!hs.ie || hs.uaVersion >= 5.5) {
		s = s.replace(new RegExp('<link[^>]*>', 'gi'), '')
			.replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), '');
		if (this.iframe) {
			var doc = this.iframe.contentDocument;
			if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document;
			if (!doc) { // Opera
				var pThis = this;
				setTimeout(function() {	pThis.loadHTML(); }, 25);
				return;
			}
			doc.open();
			doc.write(s);
			doc.close();
			try { s = doc.getElementById(this.id).innerHTML; } catch (e) {
				try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera
			}
			hs.discardElement(this.iframe);
		} else {
			regBody = /(<body[^>]*>|<\/body>)/ig;
			
			if (regBody.test(s)) s = s.split(regBody)[hs.ie ? 1 : 2];
		}
	}
	hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s;
	this.onLoad();
	for (var x in this) this[x] = null;
}
};


hs.Slideshow = function (expKey, options) {
	if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors();
	this.expKey = expKey;
	for (var x in options) this[x] = options[x];
	if (this.useControls) this.getControls();
	if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this);
};
hs.Slideshow.prototype = {
getControls: function() {
	this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, 
		null, hs.container);
	
	var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close'];
	this.btn = {};
	var pThis = this;
	for (var i = 0; i < buttons.length; i++) {
		this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]);
		this.enable(buttons[i]);
	}
	this.btn.pause.style.display = 'none';
	//this.disable('full-expand');
},
checkFirstAndLast: function() {
	if (this.repeat || !this.controls) return;
	var exp = hs.expanders[this.expKey],
		cur = exp.getAnchorIndex(), 
		re = /disabled$/;
	if (cur == 0) 
		this.disable('previous');
	else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className))
		this.enable('previous');
	if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) {
		this.disable('next');
		this.disable('play');
	} else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) {
		this.enable('next');
		this.enable('play');
	}
},
enable: function(btn) {
	if (!this.btn) return;
	var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/;
	a.onclick = function() {
		sls[btn]();
		return false;
	};
	if (re.test(a.className)) a.className = a.className.replace(re, '');
},
disable: function(btn) {
	if (!this.btn) return;
	var a = this.btn[btn].getElementsByTagName('a')[0];
	a.onclick = function() { return false; };
	if (!/disabled$/.test(a.className)) a.className += ' disabled';
},
hitSpace: function() {
	if (this.autoplay) this.pause();
	else this.play();
},
play: function(wait) {
	if (this.btn) {
		this.btn.play.style.display = 'none';
		this.btn.pause.style.display = '';
	}
	
	this.autoplay = true;	
	if (!wait) hs.next(this.expKey);
},
pause: function() {
	if (this.btn) {
		this.btn.pause.style.display = 'none';
		this.btn.play.style.display = '';
	}
	
	clearTimeout(this.autoplay);
	this.autoplay = null;
},
previous: function() {
	this.pause();
	hs.previous(this.btn.previous);
},
next: function() {
	this.pause();
	hs.next(this.btn.next);
},
move: function() {},
'full-expand': function() {
	hs.getExpander().doFullExpand();
},
close: function() {
	hs.close(this.btn.close);
}
};
hs.Thumbstrip = function(slideshow) {
	function add (exp) {
		hs.extend(options || {}, {
			overlayId: dom,
			hsId: 'thumbstrip',
			className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '')
		});
		if (hs.ieLt7) options.fade = 0;
		exp.createOverlay(options);
		hs.setStyles(dom.parentNode, { overflow: 'hidden' });
	};
	
	function scroll (delta) {	
		selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7));
	};
	
	function selectThumb (i, scrollBy) {
		if (i === undefined) for (var j = 0; j < group.length; j++) {
			if (group[j] == hs.expanders[slideshow.expKey].a) {
				i = j;
				break;
			}
		}
		if (i === undefined) return;
		var as = dom.getElementsByTagName('a'),
			active = as[i],
			cell = active.parentNode,
			left = isX ? 'Left' : 'Top',
			right = isX ? 'Right' : 'Bottom',
			width = isX ? 'Width' : 'Height',
			offsetLeft = 'offset' + left,
			offsetWidth = 'offset' + width,
			overlayWidth = div.parentNode.parentNode[offsetWidth],
			minTblPos = overlayWidth - table[offsetWidth],
			curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0,
			tblPos = curTblPos,
			mgnRight = 20;
		if (scrollBy !== undefined) {
			tblPos = curTblPos - scrollBy;
			
			if (minTblPos > 0) minTblPos = 0;
			if (tblPos > 0) tblPos = 0;
			if (tblPos < minTblPos) tblPos = minTblPos;
			
	
		} else {
			for (var j = 0; j < as.length; j++) as[j].className = '';
			active.className = 'highslide-active-anchor';
			var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft],
				activeRight = cell[offsetLeft] + cell[offsetWidth] + 
					(as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0);
			if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight;
			else if (activeLeft < -curTblPos) tblPos = -activeLeft;
		}
		var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos;
		hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad');
		hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad');
		scrollUp.style.display = tblPos < 0 ? 'block' : 'none';
		scrollDown.style.display = (tblPos > minTblPos)  ? 'block' : 'none';
		
	};
	

	// initialize
	var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'],
		options = slideshow.thumbstrip,
		mode = options.mode || 'horizontal',
		floatMode = (mode == 'float'),
		tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'],
		isX = (mode == 'horizontal'),
		dom = hs.createElement('div', {
				className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode,
				innerHTML:
					'<div class="highslide-thumbstrip-inner">'+
					'<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+
					'<div class="highslide-scroll-up"><div></div></div>'+
					'<div class="highslide-scroll-down"><div></div></div>'+
					'<div class="highslide-marker"><div></div></div>'
			}, {
				display: 'none'
			}, hs.container),
		domCh = dom.childNodes,
		div = domCh[0],
		scrollUp = domCh[1],
		scrollDown = domCh[2],
		marker = domCh[3],
		table = div.firstChild,
		tbody = dom.getElementsByTagName(tree[1])[0],
		tr;
	for (var i = 0; i < group.length; i++) {
		if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody);
		(function(){
			var a = group[i],
				cell = hs.createElement(tree[3], null, null, tr),
				pI = i;
			hs.createElement('a', {
				href: a.href,
				onclick: function() {
					hs.getExpander(this).focus();
					return hs.transit(a);
				},
				innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML
			}, null, cell);
		})();
	}
	if (!floatMode) {
		scrollUp.onclick = function () { scroll(-1); };
		scrollDown.onclick = function() { scroll(1); };
		hs.addEventListener(tbody, document.onmousewheel !== undefined ? 
				'mousewheel' : 'DOMMouseScroll', function(e) {        
			var delta = 0;
	        e = e || window.event;
	        if (e.wheelDelta) {
				delta = e.wheelDelta/120;
				if (hs.opera) delta = -delta;
	        } else if (e.detail) {
				delta = -e.detail/3;
	        }
	        if (delta) scroll(-delta * 0.2);
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
		});
	}
	
	return {
		add: add,
		selectThumb: selectThumb
	}
};
hs.langDefaults = hs.lang;
// history
var HsExpander = hs.Expander;
if (hs.ie) {
	(function () {
		try {
			document.documentElement.doScroll('left');
		} catch (e) {
			setTimeout(arguments.callee, 50);
			return;
		}
		hs.ready();
	})();
}
hs.addEventListener(document, 'DOMContentLoaded', hs.ready);
hs.addEventListener(window, 'load', hs.ready);

// set handlers
hs.addEventListener(document, 'ready', function() {
	if (hs.expandCursor || hs.dimmingOpacity) {
		var style = hs.createElement('style', { type: 'text/css' }, null, 
			document.getElementsByTagName('HEAD')[0]);
			
		function addRule(sel, dec) {		
			if (!hs.ie) {
				style.appendChild(document.createTextNode(sel + " {" + dec + "}"));
			} else {
				var last = document.styleSheets[document.styleSheets.length - 1];
				if (typeof(last.addRule) == "object") last.addRule(sel, dec);
			}
		}
		function fix(prop) {
			return 'expression( ( ( ignoreMe = document.documentElement.'+ prop +
				' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );';
		}
		if (hs.expandCursor) addRule ('.highslide img', 
			'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;');
		addRule ('.highslide-viewport-size',
			hs.ie && (hs.uaVersion < 7 || document.compatMode == 'BackCompat') ?
				'position: absolute; '+
				'left:'+ fix('scrollLeft') +
				'top:'+ fix('scrollTop') +
				'width:'+ fix('clientWidth') +
				'height:'+ fix('clientHeight') :
				'position: fixed; width: 100%; height: 100%; left: 0; top: 0');
	}
});
hs.addEventListener(window, 'resize', function() {
	hs.getPageSize();
	if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) {
		var node = hs.viewport.childNodes[i],
			exp = hs.getExpander(node);
		exp.positionOverlay(node);
		if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb();
	}
});
hs.addEventListener(document, 'mousemove', function(e) {
	hs.mouse = { x: e.clientX, y: e.clientY	};
});
hs.addEventListener(document, 'mousedown', hs.mouseClickHandler);
hs.addEventListener(document, 'mouseup', hs.mouseClickHandler);
hs.addEventListener(document, 'ready', hs.setClickEvents);
hs.addEventListener(window, 'load', hs.preloadImages);
hs.addEventListener(window, 'load', hs.preloadAjax);
}

/************ END HIGHSLIDE GALLERY ************/

/************ HIGHSLIDE GALLERY CONFIG ************/

hs.graphicsDir = '/js/gallery/graphics/';
hs.showCredits = false;
hs.outlineType = false;
hs.dimmingOpacity = 0.75;
hs.fadeInOut = true;
hs.align = 'center';
hs.marginBottom = 70;
hs.marginLeft = 100;

// Add the slideshow controller
hs.addSlideshow({
	slideshowGroup: ['1','2','3','4','5','6','7','8','9','10'],
	interval: 5000,
	repeat: false,
	useControls: true,
	fixedControls: false,
	overlayOptions: {
		className: 'text-controls',
		opacity: '1',
		position: 'top center',
		offsetX: '0',
		offsetY: '10',
		hideOnMouseOut: true
	},
	thumbstrip: {
		mode: 'horizontal',
		position: 'below',
		relativeTo: 'image'
	}

});

// Russian language strings
hs.lang = {
	cssDirection: 'ltr',
	loadingText: 'Загружается...',
	loadingTitle: 'Нажмите для отмены',
	focusTitle: 'Нажмите чтобы поместить на передний план',
	fullExpandTitle: 'Развернуть до оригинального размера',
	creditsText: 'Использует <i>Highslide JS</i>',
	creditsTitle: 'Перейти на домашнюю страницу Highslide JS',
	previousText: 'Предыдущее',
	nextText: 'Следующее',
	moveText: 'Переместить',
	closeText: 'Закрыть',
	closeTitle: 'Закрыть (esc)',
	resizeTitle: 'Изменить размер',
	playText: 'Слайдшоу',
	playTitle: 'Начать слайдшоу (пробел)',
	pauseText: 'Пауза',
	pauseTitle: 'Приостановить слайдшоу (пробел)',
	previousTitle: 'Предыдущее (стрелка влево)',
	nextTitle: 'Следующее (стрелка вправо)',
	moveTitle: 'Переместить',
	fullExpandText: 'Оригинальный размер',
	number: 'Изображение %1 из %2',
	restoreTitle: 'Нажмите чтобы закрыть изображение, нажмите и перетащите для изменения местоположения. Для просмотра изображений используйте стрелки.'
};

// gallery config object
var config1 = {
	slideshowGroup: '1',
	transitions: ['expand', 'crossfade']
};

var config2 = {
	slideshowGroup: '2',
	transitions: ['expand', 'crossfade']
};

var config3 = {
	slideshowGroup: '3',
	transitions: ['expand', 'crossfade']
};

var config4 = {
	slideshowGroup: '4',
	transitions: ['expand', 'crossfade']
};

var config5 = {
	slideshowGroup: '5',
	transitions: ['expand', 'crossfade']
};

var config6 = {
	slideshowGroup: '6',
	transitions: ['expand', 'crossfade']
};

var config7 = {
	slideshowGroup: '7',
	transitions: ['expand', 'crossfade']
};

var config8 = {
	slideshowGroup: '8',
	transitions: ['expand', 'crossfade']
};

var config9 = {
	slideshowGroup: '9',
	transitions: ['expand', 'crossfade']
};

var config10 = {
	slideshowGroup: '10',
	transitions: ['expand', 'crossfade']
};

/************  END HIGHSLIDE GALLERY CONFIG ************/


hs.align = 'center';
    hs.graphicsDir = 'http://www.vipgeo.ru/js/gallery/graphics/';

	if (!hs.ie || hs.uaVersion > 6) hs.extend ( hs.Expander.prototype, {
	fix: function(on) {
		var sign = on ? -1 : 1,
			stl = this.wrapper.style;

		if (!on) hs.getPageSize(); 

		hs.setStyles (this.wrapper, {
			position: on ? 'fixed' : 'absolute',
			zoom: 1, 
			left: (parseInt(stl.left) + sign * hs.page.scrollLeft) +'px',
			top: (parseInt(stl.top) + sign * hs.page.scrollTop) +'px'
		});

		if (this.outline) {
			stl = this.outline.table.style;
			hs.setStyles (this.outline.table, {
				position: on ? 'fixed' : 'absolute',
				zoom: 1, 
				left: (parseInt(stl.left) + sign * hs.page.scrollLeft) +'px',
				top: (parseInt(stl.top) + sign * hs.page.scrollTop) +'px'
			});

		}
		this.fixed = on; 
	},
	onAfterExpand: function() {
    	this.fix(true); 
	},

	onBeforeClose: function() {
		this.fix(false); 
	},

    onDrop: function() {
    	this.fix(true); 
	},

	onDrag: function(sender, args) {
		if (this.fixed) { 
			this.fix(false);
		}
	}

});

/************* bannerSlider.js **************/

$(document).ready(function(){
	$('div.banner').each(function(){
		$(this).css('width','100%');
		var $place = $(this).attr('rel');
		$(this).load('/ajax/index.php?mode=banners&banner_place=' + $place,
			function()
			{
				if ($place == 'middle_top')
				{
					$(this).find('object param[name=wmode]').attr('value','opaque');
				}
				$(this).find('div[rel]').each(function(){
					var $pos = $(this).attr('rel');
					var sort = $(this).attr('sort');
					var li = $(this).parent();
					var div = $(this);
					
					$.post('/ajax/index.php?mode=bannerRotate', {pos: $pos, sort: sort, place: $place},
						function(data)
						{
							if (data !== '')
							{
								if ($place == 'left_column')
								{
									sliderId = 'leftSlider' + $pos;
								}
								if ($place == 'right_column')
								{
									sliderId = 'rightSlider' + $pos;
								}
								
								$(data).appendTo(li);
								$(li).find('div[rel]').not(div).each(function(){
									if ($(this).attr('sort') < $(div).attr('sort'))
									{
										$(this).appendTo(li);
									}
								});
								$('<div class="'+ sliderId +'Image SliderImage bannerForSort"></div>').appendTo(li);
								$(li)
									.addClass('Slider')
									.attr('rel','ya')
									.attr('id', sliderId);

								$(li).find('div.bannerForSort')
									.wrapAll('<div class="SliderContent" id="'+ sliderId +'Content"></div>');
								
								$(li).find('div.bannerForSort').each(function(){
										$(this).addClass(sliderId +'Image SliderImage');
									});
								//alert(li.html());
							//alert($('li[id='+ sliderId +']').html());
							$('li[id='+ sliderId +']').s3Slider({ 
								timeOut: 5000
							});
							}
						}
					);
						
				});
			}
		);
	});
});
/************* end bannerSlider.js **************/
/***************** s3Slider.js ******************/

(function($){  

    $.fn.s3Slider = function(vars) {       
        
        var element     = this;
        var timeOut     = (vars.timeOut != undefined) ? vars.timeOut : 4000;
        var current     = null;
        var timeOutFn   = null;
        var faderStat   = true;
        var mOver       = false;
		var pokaz = true;
        var items       = $("#" + element[0].id + "Content ." + element[0].id + "Image");
        var itemsSpan   = $("#" + element[0].id + "Content ." + element[0].id + "Image span");
            
        items.each(function(i) {
    
            $(items[i]).mouseover(function() {
               mOver = true;
            });
            
            $(items[i]).mouseout(function() {
                mOver = false;
            });
            
        });
        

		function detectIE6(){
		  var browser = navigator.appName;
		  var b_version = navigator.appVersion;
		  var version = parseFloat(b_version);
		  if ((browser == "Microsoft Internet Explorer") && (version <= 6)){
			return true;
		  }else{
			return false;
		  }
		}
        
        var makeSlider = function() {

			function show()
			{
				current = (current != null) ? current : items[(items.length-1)];
				var currNo      = jQuery.inArray(current, items) + 1
				currNo = (currNo == items.length) ? 0 : (currNo - 1);
				var newMargin   = $(element).width() * currNo;
				
				if (detectIE6)
				{
					var height = $(items[currNo]).attr('height');
					if (height == 'undefined')
					{
						height = '170px';
					}
					$(items[(currNo)]).parent().css('height', height);
				}
				$(items[currNo]).animate({opacity: "show"}, 500, function(){
					//alert($(items[(currNo+1)]).html());

					$(this).mouseover(function(){
						mOver == true;
						//alert(mOver);
					});

					$(this).mouseout(function(){
						mOver == false;

						setTimeout(function(){
							$(items[(currNo+1)]).animate({opacity: "show"}, 1000);
						}, (timeOut-500));

						hide();
						//alert(mOver);
					});
					setTimeout(function(){
						if (mOver == false)
						{
							$(items[(currNo+1)]).animate({opacity: "show"}, 1000);
							if (detectIE6)
							{
								var height = $(items[(currNo+1)]).attr('height');
								if (height == 'undefined')
								{
									height = '170px';
								}
								$(items[(currNo)]).parent().css('height', height);
							}
						}}, (timeOut-500));
						
						hide();
					
				});
			}

			function hide()
			{
				current = (current != null) ? current : items[(items.length-1)];
				var currNo      = jQuery.inArray(current, items) + 1
				currNo = (currNo == items.length) ? 0 : (currNo - 1);
				var newMargin   = $(element).width() * currNo;
				
				var len = items.length;
				var num = len-2;

				setTimeout(function(){
					if (mOver == false)
					{
						$(items[(currNo-num)]).animate({opacity: "show"}, 1000);
					}}, (timeOut-500));
				setTimeout(function(){
					if (mOver == false)
					{
						$(items[currNo]).animate({opacity: "hide"}, 500, function(){
							current = items[(currNo+1)];
							show();
						});
					}}, timeOut);
			}
			show();
			
        }
          makeSlider();
    };  

})(jQuery);
/***************** end s3Slider.js ******************/

/********************** comment.js ***************************/

var commentLoadPath = '/ajax/noindex.php?action=comment';
var allCommentsContainerClass = 'comment-container';

function LoadCommentFunctions(commentTable, commentTableId)
{
	var allCommentsContainer = $(document).find('div.' + allCommentsContainerClass);
	if (allCommentsContainer)
	{
		$(allCommentsContainer).find('li').each(function(){
			var commentItem = $(this);
			var commentRel = $(this).attr('rel');
			if (commentRel)
			{
				var commentTextContainer = $(this).find('div.comment-text-container:first');
				if (typeof commentTextContainer[0] != 'undefined')
				{
					var commentShowLinkContainer = $(commentTextContainer).find('p.comment-show-link-container');
					if (typeof commentShowLinkContainer[0] != 'undefined')
					{
						$(commentShowLinkContainer).find('span.pseudo-link').click(function(){
							var showLinkParent = $(this).parent('span');
							if (typeof showLinkParent[0] != 'undefined')
							{
								var commentShow = $(showLinkParent).attr('rel');
								if (commentShow)
								{
									if (settingPath)
									{
										jQuery.post(settingPath, {table: 'comments', field: 'comment_show', record: commentRel, value: commentShow}, function(data){
											if (data == "true")
											{
												$(commentTextContainer).removeClass('comment-show-paused');
												$(commentTextContainer).removeClass('comment-show-not-checked');
												$(commentTextContainer).removeClass('comment-show-active');
												switch (commentShow)
												{
													case "-1":
														$(commentTextContainer).addClass('comment-show-paused');
														$(commentItem).find('p.comment-responses-header:first').slideUp('normal');
														$(commentItem).find('ul.comment-list:first').slideUp('normal');
														break;
													case "0":
														$(commentTextContainer).addClass('comment-show-not-checked');
														$(commentItem).find('p.comment-responses-header:first').slideUp('normal');
														$(commentItem).find('ul.comment-list:first').slideUp('normal');
														break;
													case "1":
														$(commentTextContainer).addClass('comment-show-active');
														$(commentItem).find('p.comment-responses-header:first').slideDown('normal');
														$(commentItem).find('ul.comment-list:first').slideDown('normal');
														break;
												}
											}
											else
											{
												alert(data);
											}
										}); 
									}
									
								}
							}
						});
					}
					if (($(commentTextContainer).hasClass('comment-show-paused')) || ($(commentTextContainer).hasClass('comment-show-not-checked')))
					{
						$(commentItem).find('p.comment-responses-header:first').slideUp(0);
						$(commentItem).find('ul.comment-list:first').slideUp(0);
					}
				}
				var commentResponseLinkContainer = $(this).find('p.comment-response-link-container:first');
			

				if (commentResponseLinkContainer)
				{
					$(commentResponseLinkContainer).after('<div class = "comment-response-form-container"></div>');
					var commentResponseLink = $(commentResponseLinkContainer).find('span.comment-response-link');
					if (commentResponseLink)
					{
						//$(commentResponseLink).append(commentRel);
						$(commentResponseLink).unbind('click');
						$(commentResponseLink).click(function(){
							
							$('p.comment-response-link-container').show();

							$(commentResponseLinkContainer).slideUp(0);
							
							LoadCommentInterface(commentTable, commentTableId, commentRel);
							$('form[rel=90]:first:visible').remove();

								$('p[rel=main-response]').remove();

								$('<p class = "comment-response-link-container" rel="main-response"><span class = "comment-response-link pseudo-link">Добавить отзыв</span></p>').appendTo('li[rel=0]');

								$('p[rel=main-response]').find('span.comment-response-link').click(function(){
									$('form[rel=90]').remove();
									$('p[rel=main-response]').remove();
									$('p.comment-response-link-container').show();
									LoadCommentInterface(commentTable, commentTableId, '0');
								});
							
						});
					}
				};
			}
		});
		LoadCommentInterface(commentTable, commentTableId, '0');
	}
}

function LoadCommentInterface(commentTable, commentTableId, comment)
{
	var commentContainer = $(document).find('div.' + allCommentsContainerClass + ' li[rel="' + comment + '"] div.comment-response-form-container:first');
	if (commentContainer)
	{
		//$(commentContainer).slideUp(0);
		var commentLoadPathParams = '&table=' + commentTable + '&id=' + commentTableId + '&parent=' + comment;
		$(commentContainer).load(commentLoadPath + commentLoadPathParams, function(){
				if (typeof tinyMCE != 'undefined')
				{
					tinyMCE.init({ 
						language : "ru",
						mode : "specific_textareas", 
						theme : "advanced", 
						editor_selector : "comment-text",
						plugins : "contextmenu,emotions",
						// Theme options
						theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,bullist,numlist,|,emotions",
						theme_advanced_buttons2 : "", 
						theme_advanced_buttons3 : "",
						theme_advanced_buttons4 : "",
						theme_advanced_toolbar_location : "bottom",
						theme_advanced_toolbar_align : "center",
						theme_advanced_statusbar_location : "none",
						theme_advanced_resizing : false
					});
				}
			//$(commentContainer).slideDown("slow");
			var commentForm = $(commentContainer).find('form');
			if (commentForm)
			{
				$('#imageContainer').remove();
				$('<div id="imageContainer"></div>').insertAfter(commentForm);
				
				/*$(commentForm).find('textarea.comment-text').focus(function(){
					if ($(this).attr('value') == 'Текст отзыва')
					{
						$(this).attr('value', '');
					}
				});
				$(commentForm).find('textarea.comment-text').blur(function(){
					if ($(this).attr('value') == '')
					{
						$(this).attr('value', 'Текст отзыва');
					}
				});*/
				$(commentForm).find('span.comment-response-form-submit').hover(
					function(){
						$(this).addClass('hover');
					},
					function(){
						$(this).removeClass('hover');
					}
				);

				$(commentForm).find('span.comment-response-form-submit').click(function(){
					var ConfirmButton = $(this).parent();
					//alert($(this).parent().parent().html());
					$('div#name-check').remove();
					//alert (tinyMCE.activeEditor.getBody ().innerHTML);
					//alert($('.comment-container').html());
					if (typeof tinyMCE == 'undefined' || !tinyMCE.activeEditor)
					{
						var text = $(commentForm).find('textarea.comment-text').attr('value');
						var textPost = text;
					}
					else
					{
						//var text = tinyMCE.activeEditor.getBody ().innerHTML;
						var text = $(tinyMCE.activeEditor.getBody ()).text();
						var textPost = $(tinyMCE.activeEditor.getBody ()).html();
					}
					if 
					(
						($(commentForm).find('span.comment-author-name').attr('value') == '') ||
						($(commentForm).find('span.comment-author-name').attr('value') == 'Ваше имя') ||
						(text == 'Текст отзыва') ||
						(text == '')
					)
					{
						alert('Пожалуйста, представьтесь и введите текст ответа перед отправкой отзыва.');
					}
					
					else
					{
						var name = $(commentForm).find('div.comment-user-name').text();
						if (!name)
						{
							name = $(commentForm).find('input[name=comment-author-name]').val();
						}
						if (/^(\s+.*|.*\s{2}|[0-9]*|[\"\-\_\'])*$|[\`\*\\\/\|\!?\#$%^&\;:,.\~\@\><]+/.test(name))
						{
							var wrongName = '<ul><li>Имя не может состоять из одних цифр</li><li>Допустимые символы: \' " - _</li></ul>';
							$("<div id='name-check' style='color:red;margin-left:3px;'>&nbsp;Недопустимое имя <span style='cursor:pointer;border-bottom:1px solid;' id='wrongsName'>?</span></div><span id='whatsWrong'>"+ wrongName +"</span>").insertAfter('input[name=comment-author-name]');
							$('span#wrongsName').hover(
								function(){
									$('span#whatsWrong')
										.animate({opacity: 'show', left: '130'}, 500);
								},
								function(){
									$('span#whatsWrong')
										.animate({opacity: 'hide', left: '150'}, 500);
								}
							);
							return false;
						}
						else
						{
							ConfirmButton.hide();
							$('<img src="http://vipgeo.ru/images/wait.gif" style="">').insertAfter(ConfirmButton);
							$.post(commentLoadPath + commentLoadPathParams, 'rate=' + $(commentForm).find('input.comment-rate-value').attr('value') + '&comment-author-name=' + $(commentForm).find('input.comment-author-name').attr('value') + '&comment-text=' + textPost + '&url=' + sitePage, function(responseText){
								$(commentContainer).html(responseText);
							});
						}
					}
				});
				$(commentForm).find('p.comment-rate span.pseudo-link').click(function(){
					if ($(this).hasClass('pseudo-link'))
					{
						var parentSpan = $(this).parent('span');
						if (parentSpan)
						{
							var commentRate = $(parentSpan).attr('rel');
						}
					}
					var commentRateContainer = $(commentForm).find('p.comment-rate');
					$(commentRateContainer).removeClass('comment-negative');
					$(commentRateContainer).removeClass('comment-neutral');
					$(commentRateContainer).removeClass('comment-positive');
					switch (commentRate)
					{
						case "-1":
							$(commentRateContainer).addClass('comment-negative');
							break;
						case "0":
							$(commentRateContainer).addClass('comment-neutral');
							break;
						case "1":
							$(commentRateContainer).addClass('comment-positive');
							break;
					}
					var commentRateValueInput = $(commentForm).find('input.comment-rate-value');
					if (commentRateValueInput)
					{
						$(commentRateValueInput).attr('value', commentRate);
					}
				});
			}
		});
	}
}

function UserAuthCheckName(name, container)
{
	var $name = $(name).val();

	container.find('div#name-check').remove();

	if ($name !== '' && $name !== 'Ваше имя')
	{
		container.find('#user_name').css({display:'none'});

		if (/^(\s+.*|.*\s{2}|[0-9]*|[\"\-\_\'])*$|[\`\*\\\/\|\!?\#$%^&\;:,.\~\@\><]+/.test($name))///^([0-9]|[\`\*\\\/\|\!?\#$%^&\;:,.\~\@\><]|\s)*$/.test($name)   ^([0-9]|[\`\*\\\/\|\!?\#$%^&\;:,.\~\@\><]|\s)*$/.test($name)
		{
			var wrongName = '<ul><li>Имя не может состоять из одних цифр</li><li>Допустимые символы: \' " - _</li></ul>';
			$("<div id='name-check' style='color:red;'>&nbsp;Недопустимое имя <span style='cursor:pointer;border-bottom:1px solid;' id='wrongsName'>?</span></div><span id='whatsWrong'>"+ wrongName +"</span>").insertAfter(container.find('input[name=comment-author-name]'));

			$('span#wrongsName').hover(
				function(){
					container.find('span#whatsWrong')
						.animate({opacity: 'show', left: '130'}, 500);
				},
				function(){
					container.find('span#whatsWrong')
						.animate({opacity: 'hide', left: '150'}, 500);
				}
			);
		}
		else
		{
			$("<div id='name-check' style='color:green;'>&nbsp;Имя введено верно</div>").insertAfter(container.find('input[name=comment-author-name]'));
		}
	}
	else
	{
		container.find('#user_name').css({display:'inline'});
	}
}

function UserAuthCheckPass($pass, container)
{
	if (/[а-яА-Я]$/.test($pass))
	{
		container.find('#rus-letters-yes:visible').animate({opacity:'hide'},100);
		container.find('#rus-letters:hidden').animate({opacity:'show'},100);
	}
	else
	{
		if (/[а-яА-Я]/.test($pass))
		{
			container.find('#rus-letters:visible').animate({opacity:'hide'},100);
			container.find('#rus-letters-yes:hidden').animate({opacity:'show'},100);
		}
		else
		{
			container.find('#rus-letters-yes:visible').animate({opacity:'hide'},100);
			container.find('#rus-letters:visible').animate({opacity:'hide'},100);
		}
	}
}

function UserAuthCheckEmail($mail, container)
{
	var $email = $($mail).val();

	container.find('span#email-check').remove();

	if ($email !=='')
	{
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($email))
		{
			$("<span id='email-check' style='color:green;'>Email введен верно</span>").appendTo(container.find('div[rel=login]'));
		}
		else
		{
			$("<span id='email-check' style='color:red;'>Некорректный email</span>").appendTo(container.find('div[rel=login]'));
		}
	}
}

function UserAuthNoLogin(container)
{
	UserAuthNameBlur()

	var $login = container.find('input[name=login]').val();

	if ($login !=='')
	{
		$.post('/ajax/index.php?mode=user_auth&act=checklogin', {login: $login},
			function(data)
			{
				container.find('span.status').html(data);
				var $error = container.find('span.status #error').text();
				
				if ($error == '0')
				{
					container.find('#no-login').animate({opacity:'hide'}, 100);

					if ($login !== '')
					{
						container
							.find('#no-login')
							.text('Такого пользователя нет')
							.css({color:'red'})
							.animate({opacity:'show'}, 100);	
						;
						container.find('input.comment-author-name').removeAttr('disabled');
						container.find('.wrongPass').fadeOut(200);
											
						if(container.find('input.comment-author-name').val() == 'Ваше имя')
						{
							container.find('#user_name').css({display:'inline'});
						}
					}
					container.find('.auth_ok span').text("Зарегистрироваться");
				}
				else
				{
					container.find('#no-login').animate({opacity:'hide'}, 100);

					if ($login !== '')
					{
						container.find('#no-login')
							.text('Такой пользователь есть')
							.css({color:'green'})
							.animate({opacity:'show'}, 100);

						container.find('input.comment-author-name').attr('disabled','disabled');

						container.find('#user_name').css({display:'none'});
					}
					container.find('.auth_ok span').text("Войти");
				}
			}
		);
	}
}

function UserAuthLoadInterface()
{
	$('input.comment-author-name').attr('disabled','disabled');

	$('p.userAuth').find('div#table').show(800);

	$('.auth_ok span').text('Войти');

	$('.auth_ok').show(800);
}

function UserAuthLoad(container)
{
	container.load('/ajax/index.php?mode=user_auth&main',
		function()
		{
			var submitButton = container.find('.auth_ok span');

			container.find('input').keyup(function(e){
				if (e.keyCode == '13')
				{
					submitButton.click();
				}
			});
		}
	);
}

function UserMainAuthLogout(container)
{
	container.load('/ajax/index.php?mode=user_auth&main&act=exit',
		function()
		{
			window.location.reload();
			//UserAuthLoad(container);
		}
	);
}

function UserAuthLogout()
{
	$('p.userAuth').load('/ajax/index.php?mode=user_auth&act=exit',
		function()
		{
			UserCommentsAuthLoad();
		}
	);
}

function UserAuthError(container, type)
{
	var $login = container.find('input[name=login]').val();
	var $password = container.find('input[name=password]').val();
	var $name = container.find('input[name=comment-author-name]').val();
	if (type)
	{
		type = '&main';
	}
	else
	{
		type = '';
	}
	var link = '/ajax/index.php?mode=user_auth'+type;

	$.post(link, {login: $login, pass: $password, name: $name},
		function(data)
		{
			container.find('span.status').html(data);
			var $error = container.find('span.status').find('#error').text();

			if ($error == 'register_success' || $error == 'login_success')
			{
				container.load(link);
			}
			else
			{
				UserAuthLoadInterface();
														
				if(container.find('input.comment-author-name').val() !== 'Ваше имя' && container.find('input.comment-author-name').val() !== '')
				{
					$('#user_name').css({display:'none'});
				}

				container.find('input.comment-author-name').attr('disabled','disabled');
														
				container.find('div#table').show();
															
				container.find('input[name=name]').val($name);
				container.find('input[name=login]').val($login);

				var $val = container.find('input[name=login]').val();

				container.find('.auth_ok').show();
				if ($error == 'incorrect_email')
				{
					container.find('.wrongPass').fadeOut(200);
				}
				else
				{
					if ($error == '')
					{
						container.find('.wrongPass').fadeOut(200);
					}
					else
					{
						container.find('.wrongPass').fadeIn(600);
					}
				}

				UserAuthCheckEmail(container.find('input[name=login]'), container);
				UserAuthCheckName(container.find('input[name=comment-author-name]'), container);

				UserAuthNoLogin();
			}
		}
	);
}

function UserAuthNameBlur()
{
	$('input.comment-author-name').focus(function(){
		if ($(this).attr('value') == 'Ваше имя')
		{
			$(this).attr('value', '');
		}
	});
	
	$('input.comment-author-name').blur(function(){
		if ($(this).attr('value') == '')
		{
			$(this).attr('value', 'Ваше имя');
		}
							
		if($(this).val() !== 'Ваше имя' && $(this).val() !== '')
		{
			$('#user_name').css({display:'none'});
		}
	});
}

function UserCommentsAuthLoad()
{
	$('form:visible').find('p.userAuth').load('/ajax/index.php?mode=user_auth',
		function()
		{
			UserAuthNameBlur();

			$('span#exit').click(function(){
				UserAuthLogout();
			});
	
		}
	);
}

function UserCommentsAuthLogin()
{
	var container = $('p.userAuth');
	$('form:visible').find('p.userAuth').load('/ajax/index.php?mode=user_auth&act=login',
		function()
		{
			UserAuthLoadInterface();

			container.find('input[name=comment-author-name]').keyup(function()
			{
				UserAuthCheckName(this, container);
			});

			container.find('input[name=login]').keyup(function()
			{
				UserAuthCheckEmail(this, container);
			});
			
			
			container.find('input[name=login]').blur(function()
			{
				UserAuthNoLogin(container);
			});

			container.find('.auth_ok span.pseudo-link').click(function(){
	
				UserAuthError(container);
			});

			container.find('.close-auth').click(function(){

				UserCommentsAuthLoad();

			});
		}
	);
}
/********************** end comment.js ***************************/

/*************** FILES UPLOAD *****************/
(function($){
	if ( ! $) return;
	
	$.file_upload = function(button, options){
		button = $(button);

		if (button.size() != 1 ){
			//console.error('You passed ', button.size(),' elements to ajax_upload at once');
			return false;
		}

		return new File_upload(button, options);
		
	};
	

	var get_uid = function(){
		var uid = 0;
		return function(){
			return uid++;
		}
	}();

	var File_upload = function(button, options){
		this.button = button;

		this.wrapper = null;
		this.form = null;
		this.input = null;
		this.iframe = null;

		this.disabled = false;
		this.submitting = false;

		this.settings = {
			action: 'upload.php',
			name: 'userfile',
			data: {},
			onSubmit: function(file, extension) {},
			onComplete: function(file, response, success, error) {},
			onSuccess: function(file, response){},
			onError: function(file, response){}
		};
		$.extend(this.settings, options);

		this.create_wrapper();
		this.create_input();

		/*if (jQuery.browser.msie){
			this.make_parent_opaque();
		}*/
		this.create_iframe();

	}
	
	File_upload.prototype = {
		set_data : function(data){
			this.settings.data = data;
		},
		disable : function(){
			this.disabled = true;
			if ( ! this.submitting){
				this.input.attr('disabled', true);
			}
		},
		enable : function(){
			this.disabled = false;
			this.input.attr('disabled', false);
		},
		create_wrapper : function(){
			var button = this.button, wrapper;

			wrapper = this.wrapper = $('<div id="fileWrapper"></div>')
				.insertAfter(button)
				.append(button);

			setTimeout(function(){
				wrapper.css({
					position: 'relative'
					,display: 'block'
					,overflow: 'hidden'
					,cursor: 'pointer'

					,height: button.outerHeight(true)
					,width: button.outerWidth(true)
				});
			}, 1);

			var self = this;
			wrapper.mousemove(function(e){
				if (!self.input) {
					return;
				}

				self.input.css({
					top: e.pageY - wrapper.offset().top - 5 + 'px'
					,left: e.pageX - wrapper.offset().left - 170 + 'px'
				});
			});
		},
		create_input : function(){
			var self = this;

			this.input =
				$('<input type="file" id="fileInput"/>')
				.attr('name', this.settings.name)
				.css({
					'position' : 'absolute'
					,'margin': 0
					,'padding': 0
					,'width': '220px'
					,'heigth': '10px'
					,'opacity': 0
					,'cursor': 'pointer'
				})
				.change(function(){
					if ($(this).val() == ''){
						return;
					}

					self.submitting = true;

					self.submit();

					self.submitting = false;
				})
				.appendTo(this.wrapper)

				//
				.hover(
					function(){self.button.addClass('hover');}
					,function(){self.button.removeClass('hover');}
				);

			if (this.disabled){
				this.input.attr('disabled', true);
			}

		},
		create_iframe : function(){
			var name = 'iframe_au' + get_uid();

			this.iframe =
				$('<iframe name="' + name + '"></iframe>')
				.css('display', 'none')
				.appendTo('body');

		},
		submit : function(){
			var self = this, settings = this.settings;

			var file = this.file_from_path(this.input.val());

			if (settings.onSubmit.call(this, file, this.get_ext(file)) === false){
				if (self.disabled){
					this.input.attr('disabled', true);
				}
				return;
			}

			this.create_form();
			this.input.appendTo(this.form);
			this.form.submit();

			this.input.remove(); this.input = null;
			this.form.remove();	this.form = null;

			this.submitting = false;

			this.create_input();

			var iframe = this.iframe;
			
			iframe.load(function(){
				
				var response = iframe.contents().find('body').html();
				var success = iframe.contents().find('body').find('span#success').text();
				var error = iframe.contents().find('body').find('#error');

				settings.onComplete.call(self, file, response, success, error);
				if (success == 'success'){
					settings.onSuccess.call(self, file, response);
				} else {
					settings.onError.call(self, file, response);
				}

				setTimeout(function(){
					iframe.remove();
				}, 1);
			});

			this.create_iframe();
		},
		create_form : function(){
			this.form =
				$('<form method="post" enctype="multipart/form-data"></form>')
				.appendTo('body')
				.attr({
					"action" : this.settings.action
					,"target" : this.iframe.attr('name')
				});

			for (var i in this.settings.data){
				$('<input type="hidden" />')
					.appendTo(this.form)
					.attr({
						'name': i
						,'value': this.settings.data[i]
					});
			}
		},
		file_from_path : function(file){
			var i = file.lastIndexOf('\\');
			if (i !== -1 ){
				return file.slice(i+1);
			}
			return file;
		},
		get_ext : function(file){
			var i = file.lastIndexOf('.');

			if (i !== -1 ){
				return file.slice(i+1);
			}
			return '';
		},
		make_parent_opaque : function(){
			this.button.add(this.button.parents()).each(function(){
				var color = $(this).css('backgroundColor');
				var image = $(this).css('backgroundImage');

				if ( color != 'transparent' ||  image != 'none'){
					$(this).css('opacity', 1);
					return false;
				}
			});
		}

	};
})(jQuery);

jQuery.fn.filesUpload = function(options)
{
	var options = jQuery.extend({
		extensions: false, // допустимые типы файлов, задаются как jpg|gif|swf
		actionUrl: '/ajax/index.php?mode=filesUpload', // адрес к обработчику загружаемых файлов
		container: '.fileUpload', // контейнер кнопки загрузки файлов
		filesPreviewContainer: '#filesPreviewContainer', // контейнер для предпросмотра загруженных файлов
		fileName: 'file', // аттрибут name input'а файла
		filesLimit: false, // лимит количества загружаемых файлов
		filesLimitShow: true, // показывать количество файлов, которые можно добавить
		filesTmpDir: false, // папка для временных файлов
		maxWeight: false, // максимальный размер файла в кб, 1024 кб = 1Мб
		preloader: '/images/loader.gif' // путь к картинке прелоадера. ПОКА НЕ МЕНЯТЬ!!!
	},options);

	if (options.filesLimit && options.filesLimitShow)
	{
		$('<div id="filesCount">Можно загрузить:&nbsp;<span>'+options.filesLimit+'</span></div>').insertBefore(options.container);
	}
	if (options.extensions)
	{
		var exten = options.extensions;
	}
	else
	{
		var exten = '';
	}
	if (options.filesTmpDir)
	{
		var tmpDir = '&tmpDir='+ options.filesTmpDir;
	}
	else
	{
		var tmpDir = '';
	}
	if (options.maxWeight)
	{
		var maxWeight = '&maxWeight='+ options.maxWeight;
	}
	else
	{
		var maxWeight = '';
	}
	return this.each(function(){
		var button = $(this), interval;
		
		$.file_upload(button, {
			action : options.actionUrl+'&ext='+exten+tmpDir+maxWeight,
			name : options.fileName,
			onSubmit : function(file, ext) {
				$('#fileUploadError').remove();
				if (options.extensions)
				{
					var reg = new RegExp('^('+options.extensions+')$','i');

					if (!(ext && reg.test(ext)))
					{
						$('<div><p id="fileUploadError">Файл имеет недопустимое расширение</p></div>').insertBefore(options.filesPreviewContainer);
						return false;
					}
				}
				$('<div id="fileUploadError" style="width:32px;height:32px; background-image: url('+ options.preloader +');"></div>').insertBefore(options.filesPreviewContainer);
				this.disable();
			},
			onComplete : function(file, response, success) {
				
				$('#fileUploadError').remove();
				if (success !== 'success')
				{
					$('<div>' + response + '</div>').insertBefore(options.filesPreviewContainer);
				}
				else
				{
					$('<div class="fileResponse" style="float:left;margin:5px;">' + response + '</div>').prependTo(options.filesPreviewContainer);
				}
				this.enable();
				var knopka = this;
				$(options.filesPreviewContainer).find('.fileDelete span').click(function(){
					var imgSmall = $(this).parent().parent().find('.filePreview').attr('imgSmall');
					var imgBig = $(this).parent().parent().find('.filePreview').attr('imgBig');
					$(this).parent().parent().remove();
					knopka.enable();
					if ($(options.container).is(':hidden'))
					{
						$(options.container).slideDown(100);
					}
					$.post(options.actionUrl+'&del', {small: imgSmall, big: imgBig});

					if (options.filesLimit)
					{
						var newCount = $(options.filesPreviewContainer).find('.fileResponse').length;
						if (options.filesLimitShow)
						{
							$('#filesCount span').html((options.filesLimit-newCount));
						}
						
						$(options.container).find('*[count='+(newCount+1)+']:hidden').show();
					}
				});
				if (options.filesLimit)
				{
					var count = $(options.filesPreviewContainer).find('.fileResponse').length;
					if (options.filesLimitShow)
					{
						var filesCount = options.filesLimit-count;
						$('#filesCount span').html(filesCount);
					}
					if (count == options.filesLimit)
					{
						knopka.disable();
						$(options.container).slideUp(100);
					}
					else
					{
						var count = $(options.filesPreviewContainer).find('.fileResponse').length;
						var fileInput = $(options.container).find('#fileInput').length;
						if (fileInput > count)
						{
							$(options.container).find('#fileWrapper:visible:last').attr('count',count).hide();
						}
					}
				}
			}
		});
	});
}

/*************** END FILES UPLOAD *****************/

/************** FELLOWS PHOTO ***************/
$(function(){
	var button = $('#AddFellowPhoto'), interval;
	$.file_upload(button, {
		action : '/ajax/noindex.php?action=fellowPhoto',
		name : 'file',
		onSubmit : function(file, ext) {
			$('#fellowPhotoError').remove();
			if (!(ext && /^(jpg|png|jpeg|gif)$/i.test(ext)))
			{
				$('<li id="fellowPhotoError">Файл имеет недопустимое расширение</li>').appendTo('#fellowPhoto');
				return false;
			}
			$('<div id="fellowPhotoImg" style="width:128px;height:15px; background-image: url(images/wait.gif);display:inline-block"></div>').appendTo('#fellowPhoto');
			this.disable();
		},
		onComplete : function(file, response, success) {
			$('#fellowPhotoImg').remove();
			$(response).appendTo('#fellowPhoto');
			var knopka = this;
			$('#fileWrapper').css('cursor','auto');
			$('#fileInput').css('cursor','auto');
			$('#fellowPhotoWrapper').slideUp(100);
			$('<p id="fellowPhotoDel"><span class="pseudo-link" style="border-bottom:1px solid;font-size:9px;">Удалить фото</span>&nbsp;<span class="pseudo-link" style="border:none;"><img src="/images/site/fellowsPhotoDel.png" alt="X" /></span></p>').appendTo('#fellowPhoto').parent();
			$('#fellowPhotoDel span').click(function(){
			var imgSmall = $('#fellowPhotoPre').attr('imgSmall');
			var imgBig = $('#fellowPhotoPre').attr('imgBig');
			//$(this).remove();
			$('#fellowPhotoPre').parent().remove();
			$('#fellowPhotoDel').remove();
			$('#fellowPhotoWrapper').slideDown(100);
			knopka.enable();
			$('#fileWrapper').css('cursor','pointer');
			$('#fileInput').css('cursor','pointer');
			$.post('/ajax/noindex.php?action=fellowPhoto&del', {small: imgSmall, big: imgBig});
		});
		}
	});
});

/************** END FELLOWS PHOTO ***************/

/************** KURORTI ****************/
function curortsList(value)
{
	var country = $('#country_select option:selected').val();
	$('#resortList').load('/ajax/index.php?mode=resortList&curort=' + value + '&country=' + country,
		function(data)
		{
			$(this).find('.resortName').click(function(){
				var val = $(this).text();
				var href = $(this).parent().find('.resortView').attr('rel');
				$('input#resort').removeAttr('value').attr('value', val);
				$('input#resort_href').removeAttr('value').attr('value', href);
				$('#resortList').html('<div id = "resort-message" class = "resort-message">Для данного тура указано точное наименование отеля</div>');
			});
		}
	);
}

function resortInfo(resort)
{
	var resortLink = $(resort).attr('rel');
	window.open(resortLink,"","toolbar=no,status=no,directories=no,menubar=no,resizable=yes,width=800,height=600,scrollbars=yes,top=50,left=50");
}
/************* END KURORTI **************/

/*************** FELLOWS ****************/
	function zebra()
	{
		$("ul#fellow-ads li").removeClass("zebra");
		$("ul#fellow-ads li:visible:odd").each(function(){
			$(this).addClass("zebra");
			$(this).find('.fellows-contactInfo').addClass("zebra");
		});
		var footer = $('#footer');
		$(footer).hide().show();
	}
	function scrollTop(element)
	{
		var destination = $(element).offset().top;
		$('body').animate({ scrollTop: destination}, 0 );
		$('html').animate({ scrollTop: destination}, 0 );
	}
	function pagesBuild(actPage, pagesCount)
	{
		var activePage = $(actPage).parent();
		var nextPage = $(activePage).next().not('div#pagesPoints');
		var prevPage =  $(activePage).prev().not('div#pagesPoints');
		
		var firstPage =  $('#fellowsPages').find('#pagesHref[page=1]');
		var lastPage = $('#fellowsPages').find('#pagesHref[page='+ pagesCount +']');

		if ($(activePage).text() > 4 && $(nextPage).is(':hidden'))
		{
			$(nextPage).removeClass('inactiveHref');
			$(activePage)
				.prev()
				.prev()
				.prev()
				.addClass('inactiveHref');
			$('#fellowsPages').find('#pagesPoints[pos=first]:hidden').removeClass('inactiveHref');
		}
		else if (pagesCount > 5 && $(activePage).text() == pagesCount)
		{
			$(activePage).prevAll().not(firstPage).addClass('inactiveHref');
			$(activePage).prev().prev().prev().prev().nextAll().removeClass('inactiveHref');

			$('#fellowsPages').find('#pagesPoints[pos=first]:hidden').removeClass('inactiveHref');
		}
		else if ($(activePage).text() < 5)
		{
			$('#fellowsPages').find('#pagesHref:visible').each(function(){
				var href = $(this);
				if ($(href).text() > 5 && $(href).text() < pagesCount && $(href).is(':visible'))
				{
					$(this).addClass('inactiveHref');
				}
			});
			$('#fellowsPages').find('#pagesHref:hidden').each(function(){
				var href = $(this);
				if ($(href).text() <= 5 && $(href).is(':hidden'))
				{
					$(this).removeClass('inactiveHref');
				}
			});
			$('#fellowsPages').find('#pagesPoints[pos=first]:visible').addClass('inactiveHref');
		}
		else if ($(activePage).text() >= 5)
		{
			$(nextPage).nextAll().not('div#pagesPoints').not($(lastPage)).addClass('inactiveHref');
			$(activePage)
				.prev()
				.prev()
				.prev()
				.nextAll()
				.not($(nextPage)
				.nextAll())
				.removeClass('inactiveHref');
		}
		if ($(activePage).text() >= (pagesCount-2))
		{
			$('#fellowsPages').find('#pagesPoints[pos=last]:visible').addClass('inactiveHref');
		}
		else
		{
			$('#fellowsPages').find('#pagesPoints[pos=last]:hidden').removeClass('inactiveHref');
		}
	}
	function pages(value)
	{
		var fellowsLimit = $('input[name=fellowsLimit]').val();
		var url = '/ajax/index.php?mode=fellows&limit='+ fellowsLimit;
		$('#fellowsPages').remove();
		$('#fellowsPagesArrows').remove();
		$('<div id="fellowsPagesArrows" style="height:20px;"></div>').insertAfter('ul#fellow-ads');
		$('<div id="fellowsPages"></div>').insertAfter('#fellowsPagesArrows');
		var count = value;
		var limit = $('input[name=fellowsLimit]').val();
		var pagesCount = Math.ceil(count/limit);
		
		if (pagesCount > '1')
		{
			$('<div class="prev-page pageInactive">&larr;Предыдущая страница</div><div class="next-page">Следующая страница&rarr;</div>').appendTo('#fellowsPagesArrows');
			for (i=1; i<=pagesCount; i++)
			{
				if (pagesCount>6)
				{
					if (i>5 && i<pagesCount)
					{
						$('<div id="pagesHref"  page="'+ i +'" class="inactiveHref"><span>'+ i +'</span></div>').appendTo('#fellowsPages');
					}
					else
					{
						$('<div id="pagesHref" page="'+ i +'"><span>'+ i +'</span></div>').appendTo('#fellowsPages');
					}
					if (i == '1')
					{
						$('<div id="pagesPoints" pos="first" class="inactiveHref"><span>...</span></div>').appendTo('#fellowsPages');
					}
					if (i == (pagesCount-1))
					{
						$('<div id="pagesPoints" pos="last"><span>...</span></div>').appendTo('#fellowsPages');
					}
				}
				else
				{
					$('<div id="pagesHref" page="'+ i +'"><span>'+ i +'</span></div>').appendTo('#fellowsPages');
				}
				if (i == '1')
				{
					$('#pagesHref').addClass('activePage');
				}
			}
		}

		$('#fellowsPages').find('#pagesHref').find('span').click(function(){
			if ($(this).parent().attr('class') !== 'activePage')
			{
				$('#fellowsLoader').remove();
				$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');
				scrollTop($('div.param-top'));
				$('#fellowsPages').find('.activePage').removeClass('activePage');
				$(this).parent().addClass('activePage');

				var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
				var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
				var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
				var country = $('input[name=fellowsCountry]').val();
				var countryName = $('#lookingMenu').find('select[name=looking-for-country]').find('option:selected').attr('rel');
				countryName = urlencode(countryName);
				var nowPage = $(this);
				var page = $(nowPage).text();

				var link = url;
				link += '&page='+ page;
				link += '&author='+ author;
				link += '&fellow='+ fellow;
				link += '&city='+ city;
				link += '&country='+ country;
				link += '&countryname='+ countryName;

				$('ul#fellow-ads').load(link, function(){
					zebra();
					$('#fellowsLoader').remove();
					pagesBuild($(nowPage), pagesCount);
				});
				if ($(this).text() != '1')
				{
					$('#fellowsPagesArrows').find('.prev-page').removeClass('pageInactive');
				}
				else
				{
					$('#fellowsPagesArrows').find('.prev-page').addClass('pageInactive')
				}
				if ($(this).text() != pagesCount)
				{
					$('#fellowsPagesArrows').find('.next-page').removeClass('pageInactive');
				}
				else
				{
					$('#fellowsPagesArrows').find('.next-page').addClass('pageInactive')
				}
			}
		});

		$('#fellowsPagesArrows').find('.prev-page').click(function(){
			var nowPage = $('#fellowsPages').find('.activePage').prev();
			if ($(nowPage).attr('id') == 'pagesPoints')
			{
				nowPage = $(nowPage).prev();
			}
			if ($(nowPage).text()!= '')
			{
				$('#fellowsLoader').remove();
				$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');
				scrollTop($('div.param-top'));
				$('#fellowsPagesArrows').find('.next-page').removeClass('pageInactive');
				$(nowPage).addClass('nowActive');
				$('#fellowsPages').find('.activePage').removeClass('activePage');
				$('#fellowsPages').find('.nowActive').removeClass('nowActive').addClass('activePage');

				var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
				var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
				var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
				var country = $('input[name=fellowsCountry]').val();
				var countryName = $('#lookingMenu').find('select[name=looking-for-country]').find('option:selected').attr('rel');
				countryName = urlencode(countryName);
				var page = $('#fellowsPages').find('.activePage').text();
				var link = url;
				link += '&page='+ page;
				link += '&author='+ author;
				link += '&fellow='+ fellow;
				link += '&city='+ city;
				link += '&country='+ country;
				link += '&countryname='+ countryName;
				
				$('ul#fellow-ads').load(link, function(){
					zebra();
					$('#fellowsLoader').remove();
					pagesBuild($(nowPage).find('span'), pagesCount);
				});
			}
			if ($(nowPage).text() == '1')
			{
				$(this).removeClass('pageActive').addClass('pageInactive');
			}
		});

		$('#fellowsPagesArrows').find('.next-page').click(function(){
			var nowPage = $('#fellowsPages').find('.activePage').next();
			if ($(nowPage).attr('id') == 'pagesPoints')
			{
				nowPage = $(nowPage).next();
			}
			if ($(nowPage).text()!= '')
			{
				$('#fellowsLoader').remove();
				$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');
				scrollTop($('div.param-top'));
				$('#fellowsPagesArrows').find('.prev-page').removeClass('pageInactive');
				$(nowPage).addClass('nowActive');
				$('#fellowsPages').find('.activePage').removeClass('activePage');
				$('#fellowsPages').find('.nowActive').removeClass('nowActive').addClass('activePage');

				var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
				var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
				var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
				var country = $('input[name=fellowsCountry]').val();
				var countryName = $('#lookingMenu').find('select[name=looking-for-country]').find('option:selected').attr('rel');
				countryName = urlencode(countryName);
				var page = $('#fellowsPages').find('.activePage').text();
				var link = url;
				link += '&page='+ page;
				link += '&author='+ author;
				link += '&fellow='+ fellow;
				link += '&city='+ city;
				link += '&country='+ country;
				link += '&countryname='+ countryName;
				
				$('ul#fellow-ads').load(link, function(){
					zebra();
					$('#fellowsLoader').remove();
					pagesBuild($(nowPage).find('span'), pagesCount);
				});
			}
			if ($(nowPage).text() == pagesCount)
			{
				$(this).removeClass('pageActive').addClass('pageInactive');
			}
		});
	}

	function authorNum ()
	{
		var author = $('select[name=s_author] option:selected').val();
		if (author == '3' || author == '4' || author == '5' || author == '6')
		{
			$('select[name=s_vozrast]:visible').hide();
			$('span#s_num:hidden').css('display','block');
			$('span#s_num:visible input').keyup(function(){
				$('#no-letters').remove();
				if (/[^0-9\-]+/.test($(this).val()))
				{
					var value = $(this).val();
					value = value.replace(/[^0-9\-]+/,"");
					$(this).val(value);

					$('<span id="no-letters"><nobr>Используйте только цифры и -(тире)</nobr></span>').insertAfter($(this));
				}
				else {}
			});
		}
		else
		{
			$('span#s_num:visible')
				.find('input')
				.val('')
				.end()
				.css('display','none');
			$('select[name=s_vozrast]:hidden').show();
		}
	}

	function fellowsEdit (session)
	{
		$('ul#fellow-ads').find('li[id='+ session +']').each(function(){
			$(this).css({
				'border':'2px solid red'
			});
			$('<div id="fellowEditButton"><span>Редактировать</span></div>').appendTo(this);
			$('<div id="fellowsToolTip">Это ваше объявление. Вы можете редактировать его в течении сессии (пока не закрыто окно браузера)</div>').appendTo(this);
		})
		.end()
		.find('#fellowEditButton span')
		.click(function(){
			var container = $(this).parent().parent();
			var id = container.attr('id');

			var imageCount = container.find('.fellows-image').length;
			
			var imageId = null;
			var image = null;
			
			$('form#find')
				.find('input:visible')
				.not('input[name=keystring]')
				.each(
					function()
					{
						$(this).val('');
					}
				)
				.end()
				.end()
				.find('#fellows-image-container')
				.remove()
				.end()
				.find('#fellowPhotoDel')
				.remove()
				.end()
				.find('#fellowPhotoWrapper:hidden')
				.slideDown(0);
			
			$('input[name=s_id]').remove();
			
			$('<input type="hidden" name="s_id" value="'+ id +'" />').appendTo('form#find');

			if (imageCount > '0')
			{
				image = container.find('.fellows-image img').attr('src');
				imageId = container.find('.fellows-image').attr('rel');
				$('input[name=s_image_id]').remove();
				$('input[name=s_image]').remove();

				$('<div id="fellows-image-container"><img src="'+ image +'" id="fellowPhotoPre"></div>').appendTo('#fellowPhoto');
				$('<p id="fellowPhotoDel"><span class="pseudo-link" style="border-bottom:1px solid;font-size:9px;">Удалить фото</span>&nbsp;<span class="pseudo-link" style="border:none;"><img src="/images/site/fellowsPhotoDel.png" alt="X" /></span></p>').appendTo('#fellowPhoto').parent();

				$('#fellowPhotoWrapper').slideUp(100);

				$('form#find').find('#fellowPhotoDel span').bind('click', function(){
					$('<input type="hidden" name="s_image_id" value="'+ imageId +'" />').appendTo('form#find');
					$('<input type="hidden" name="s_image" value="'+ image +'" />').appendTo('form#find');
					$('#fellowPhotoPre').parent().remove();
					$('#fellowPhotoDel').remove();
					$('#fellowPhotoWrapper').slideDown(100);

					$(this).unbind('click');
				});
			}

			var destination = $('a[name=create_your_ad]').offset().top;
			$('body').animate({ scrollTop: destination}, 0 );
			$('html').animate({ scrollTop: destination}, 0 );

			$('a[name=create_your_ad]').next('h2').text('Изменить объявление');
			
			container.find('span[rel]').each(function(){

				var rel = $(this).attr('rel');
				var cont = $(this).attr('attr');

				$('form#find')
					.find('select[name='+ rel +'] option')
					.each(function(){
				//	alert($(this).text()+ '-' +cont);
						if ($(this).text() == cont)
						{
							$(this).attr('selected','selected');
							if ($(this).parent().attr('name') == 's_author')
							{
								authorNum();
							}
							return false;
						}
						else
						{
							$(this).removeAttr('selected');
						}
					})
					.end()
					.find('input[name='+ rel +']')
					.each(function(){
						$(this).val(cont);
					})
					.end()
					.find('textarea[name='+ rel +']')
					.each(function(){
						$(this).text(cont);
					});
			});
		});
		$('ul#fellow-ads')
			.find('#fellowEditButton:odd')
			.addClass('zebra')
			.end()
			.find('#fellowsToolTip:odd')
			.addClass('zebra')
			.end()
			.find('#fellowEditButton span')
			.hover(
				function(){
					$(this).parent().parent().find('#fellowsToolTip').animate({opacity: 'show'}, 100);
				},
				function()
				{
					$(this).parent().parent().find('#fellowsToolTip').animate({opacity: 'hide'}, 100);
				}
			);
	}

	function fellowsCheckEmail ($email)
	{
		//var $email = $($mail).val();

		$('div#fellows-email-check').remove();

		if ($email !=='' && !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($email))
		{
			$("<div id='fellows-email-check'><span>Некорректный email</span></div>").appendTo('form#find');
		}
	}

	function fellowsCheckICQ ($icq)
	{
		$('#no-letters').remove();
		if (/[^0-9\-]+/.test($($icq).val()))
		{
			var value = $($icq).val();
			value = value.replace(/[^0-9\-]+/,"");
			$($icq).val(value);

			$('<span id="no-letters"><nobr>Используйте только цифры и -(тире)</nobr></span>').insertAfter($icq);
		}
	}

	function fellows()
	{
		var fellowsLimit = $('input[name=fellowsLimit]').val();
		var url = '/ajax/index.php?mode=fellows&limit='+ fellowsLimit;
		var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
		var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
		var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
		var country = $('#lookingMenu').find('select[name=looking-for-country]').val();
		var countryName = $('#lookingMenu').find('select[name=looking-for-country]').find('option:selected').attr('rel');
		countryName = urlencode(countryName);
	
		var link = url;

		link += '&author='+ author;
		link += '&fellow='+ fellow;
		link += '&city='+ city;
		link += '&country='+ country;
		link += '&countryname='+ countryName;

		$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');

		$('ul#fellow-ads').load(link, function(data){
			zebra();
			var newPage = $('#fellows_pages_count').text();
			pages(newPage);
			$('#fellowsLoader').remove();
		});

		$('#lookingMenu').find('span').click(function(){
			$('#fellowsLoader').remove();
			$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');
			$(this)
				.parent()
				.parent()
				.find('span')
				.removeClass('searchActive')
				.end()
				.end()
				.end()
				.addClass('searchActive');

			var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
			var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
			var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
			var country = $('#lookingMenu').find('select[name=looking-for-country]').val();
			var countryName = $('#lookingMenu').find('select[name=looking-for-country]').find('option:selected').attr('rel');
			countryName = urlencode(countryName);

			var link = url;

			link += '&author='+ author;
			link += '&fellow='+ fellow;
			link += '&city='+ city;
			link += '&country='+ country;
			link += '&countryname='+ countryName;

			$('ul#fellow-ads').load(link, function(data){
				zebra();
				$('#fellowsLoader').remove();
				var newPage = $('#fellows_pages_count').text();
				pages(newPage);
			});
		});

		$('#lookingMenu').find('select[name=looking-for-country]').change(function(){

			var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
			var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
			var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
			var country = this.value;
			var countryName = $(this).find('option:selected').attr('rel');
			countryName = urlencode(countryName);

			var link = url;

			link += '&author='+ author;
			link += '&fellow='+ fellow;
			link += '&city='+ city;
			link += '&country='+ country;
			link += '&countryname='+ countryName;

			var diffCountry = $('#lookingMenu').find('div.different-country');
			var option = $('#lookingMenu').find('select[name=looking-for-country]').find('option.different-country-option');

			if (option.attr('rel') !== 'different')
			{
				option.attr('rel','different');
			}
			if (diffCountry.find('input[name=different-country]').val() !== '')
			{
				diffCountry.find('input[name=different-country]').val('');
			}

			if (countryName == 'different')
			{
				diffCountry.css('display','inline');
			}
			else
			{
				diffCountry.css('display','none');
			}
			
			if (countryName !== 'different')
			{
				$('#fellowsLoader').remove();
				$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');

				$('ul#fellow-ads').load(link, function(data){
					zebra();
					$('#fellowsLoader').remove();
					var newPage = $('#fellows_pages_count').text();
					pages(newPage);
				});
			}
		});
	}

	function fellowsFindCountry()
	{
		var diffCountry = $('#lookingMenu').find('div.different-country');
		var option = $('#lookingMenu').find('select[name=looking-for-country]').find('option.different-country-option');
		var rel = diffCountry.find('input[name=different-country]').val();
		option.attr('rel', rel);
		fellows();
	}

	function fellowsCountryFilter(container)
	{
		var fellowsLimit = $('input[name=fellowsLimit]').val();
		var url = '/ajax/index.php?mode=fellows&limit='+ fellowsLimit;
		var author = $('#who-s-looked-for').find('span.searchActive').parent().attr('class');
		var fellow = $('#who-looks-for').find('span.searchActive').parent().attr('class');
		var city = $('#looking-for-city').find('span.searchActive').parent().attr('class');
		var country = $('#lookingMenu').find('select[name=looking-for-country]').val();
		var countryName = container.attr('rel');
		
		var diffCountry = $('#lookingMenu').find('div.different-country');
		var option = $('#lookingMenu').find('select[name=looking-for-country]').find('option.different-country-option');
		option.attr('selected','selected').attr('rel', countryName);
		diffCountry
			.css('display','inline');
			//.find('input[name=different-country]')
			//.val(countryName)

		countryName = urlencode(countryName);
	
		var link = url;

		link += '&author='+ author;
		link += '&fellow='+ fellow;
		link += '&city='+ city;
		link += '&country='+ country;
		link += '&countryname='+ countryName;

		$('#fellowsLoader').remove();
		$('<div id="fellowsLoader" style="position:relative;margin:10px;height:15px;margin-top:-25px;background: url(/images/wait.gif) center no-repeat;"></div>').prependTo('ul#fellow-ads');

		$('ul#fellow-ads').load(link, function(data){
			zebra();
			$('#fellowsLoader').remove();
			var newPage = $('#fellows_pages_count').text();
			pages(newPage);
			scrollTop($('div.param-top'));
		});
	}

	/*
		function fellowsCountryFilter(container)
	{
		var countryName = container.attr('rel');
		var diffCountry = $('#lookingMenu').find('div.different-country');
		var option = $('#lookingMenu').find('select[name=looking-for-country]').find('option.different-country-option');
		option.attr('selected','selected').attr('rel', countryName);
		diffCountry
			.css('display','inline')
			.find('input[name=different-country]')
			.val(countryName)
	}
	*/

/************** END FELLOWS ***************/
	
/************** icPhotoGallery ***************/
jQuery.fn.icPhotoGallery = function(options){
	var options = jQuery.extend({
		animate: true, //Анимировать ли изменение размеров
		animateDuration: 500, //Время анимации изменения размера в миллисекундах
		border: null, //CSS-код рамки элемента галереи
		debug: false, //просто свойство, не обращайте внимания
		imageBgColor: null, //цвет фона картинок
		imageHeight: null, //высота каждой картинки
		imageWidth: null, //ширина каждой картинки
		itemBgColor: null, //цвет фона каждого элемента DOM, содержащего картинку
		itemHeight: null, //высота каждого элемента DOM, содержащего картинку
		itemWidth: null, //ширина каждого элемента DOM, содержащего картинку
		marginTop: null, // CSS-свойство элемента галереи
		marginRight: null, // CSS-свойство элемента галереи
		marginBottom: null, // CSS-свойство элемента галереи
		marginLeft: null, // CSS-свойство элемента галереи
		galleryHeight: null, //принудительная высота галереи
		padding: null //размер внутреннего поля каждого элемента фотогалереи
	}, options);
	
	return this.each(function(){
		var animating = false;
		var opCount = 0;
		var contextObject = this;
		jQuery(contextObject).before('<div id = "her" class = "ic-photo-gallery-container"><div class = "ic-photo-gallery"></div></div>');
		jQuery(contextObject).after('<div style = "clear: both; position: relative;"></div>');
		var photoGallery = jQuery('div.ic-photo-gallery:last');
		var photoGalleryContainer = jQuery('div.ic-photo-gallery-container:last');
		var galleryWidth = jQuery(photoGallery).innerWidth();
		var photoWidth = 0;
		var photoCount = 0;
		jQuery(contextObject).find('img').each(function(){
			if (options.imageBgColor)
			{
				jQuery(this).css('background-color', options.imageBgColor);
			}
			if (options.imageHeight)
			{
				jQuery(this).css('height', options.imageHeight);
			}
			if (options.imageWidth)
			{
				jQuery(this).css('width', options.imageWidth);
			}
			var imgParent = jQuery(this).parents('a:first');
			var cuttingObject = (typeof imgParent[0] != 'undefined') ? imgParent : this;
			jQuery(cuttingObject).remove();
			var insertingObject = jQuery('<div class = "item"></div>');
			if (options.itemBgColor)
			{
				jQuery(insertingObject).css('background-color', options.itemBgColor);
			}
			if (options.itemHeight)
			{
				jQuery(insertingObject).css('height', options.itemHeight);
			}
			if (options.itemWidth)
			{
				jQuery(insertingObject).css('width', options.itemWidth);
			}
			jQuery(cuttingObject).appendTo(insertingObject);
			jQuery(insertingObject).appendTo(photoGallery);
			photoWidth += parseInt(jQuery(insertingObject).outerWidth()) + parseInt(jQuery(insertingObject).css('margin-left')) + parseInt(jQuery(insertingObject).css('margin-right'));
			photoCount ++;
		});
		jQuery(photoGallery).attr('rel', photoWidth);
		jQuery(photoGallery).attr('length', photoCount);
		jQuery('<div style = "clear: both"></div>').appendTo(photoGallery);
		function CalcMinHeight()
		{
			var firstGalleryItem = jQuery(photoGallery).find('.item:first');
			return options.galleryHeight ? parseInt(options.galleryHeight) : (parseInt(jQuery(firstGalleryItem).outerHeight()) + parseInt(jQuery(firstGalleryItem).css('margin-top')) + parseInt(jQuery(firstGalleryItem).css('margin-bottom')));
		}
		
		function CalcMaxHeight()
		{
			animating = true;
			opCount++;
			jQuery('#opCount').html(opCount);
			var firstGalleryItem = jQuery(photoGallery).find('.item:first');
			if (typeof firstGalleryItem[0] != 'undefined')
			{
				var itemWidth = parseInt(firstGalleryItem.outerWidth()) + parseInt(firstGalleryItem.css('margin-left')) + parseInt(firstGalleryItem.css('margin-right'));
				var minHeight = CalcMinHeight();
				var currentHeight = jQuery(photoGallery).css('height');
				var galleryWidth = jQuery(photoGallery).innerWidth();
				var photoWidth = jQuery(photoGallery).attr('rel');
				var photoCount = parseInt(jQuery(photoGallery).attr('length'));
				if ((photoWidth <= galleryWidth) || (photoCount == 0))
				{
					return minHeight;
				}
				var gwMODiw = galleryWidth % itemWidth;
				var colCount = parseInt((galleryWidth - gwMODiw) / itemWidth);
				var pcMODcc = photoCount % colCount;
				var rowCount = parseInt((photoCount - pcMODcc) / colCount + ((pcMODcc == 0) ? 0 : 1));
				if (options.debug)
				{
					jQuery(maximizeButton).html(opCount + ', ' + photoCount + ', ' + rowCount);
				}
				return minHeight * rowCount;
			}
		}
		function CheckButtonPos()
		{
			if (jQuery.browser.msie)
			{
				var buttonTop = parseInt(jQuery(maximizeButton).css('top'));
				var buttonBottom = parseInt(jQuery(maximizeButton).css('bottom'));
				var buttonLeft = parseInt(jQuery(maximizeButton).css('left'));
				var buttonRight = parseInt(jQuery(maximizeButton).css('right'));
				var buttonWidth = parseInt(jQuery(maximizeButton).outerWidth());
				var buttonHeight = parseInt(jQuery(maximizeButton).outerHeight());
				var galleryWidth = parseInt(jQuery(photoGallery).innerWidth());
				var galleryHeight = parseInt(jQuery(photoGallery).innerHeight());
				if (buttonBottom > 0)
				{
					jQuery(maximizeButton).css('top', parseInt(galleryHeight - buttonBottom + parseInt(jQuery(maximizeButton).css('margin-top')) - parseInt(jQuery(maximizeButton).css('margin-bottom'))));
				}
				if (buttonRight > 0)
				{
					jQuery(maximizeButton).css('left', parseInt(galleryWidth - buttonRight + parseInt(jQuery(maximizeButton).css('margin-left')) - parseInt(jQuery(maximizeButton).css('margin-right'))));
				}
			}
		}
		function Minimize()
		{
			var minHeight = CalcMinHeight();
			if (minHeight > 0)
			{
				jQuery(photoGallery).animate({height: minHeight}, (jQuery.browser.msie ? 0 : options.animateDuration), function(){
					jQuery(photoGallery).attr('maximized', 'false');
					animating = false;
					CheckButtonPos();
				});
			}
		}
		function Maximize()
		{
			var maxHeight = CalcMaxHeight();
			jQuery(photoGallery).animate({height: maxHeight}, (jQuery.browser.msie ? 0 : options.animateDuration), function(){
				jQuery(photoGallery).attr('maximized', 'true');
				CheckButtonPos();
			});
		}
		function CheckWidth()
		{
			var maximizeButton = jQuery(photoGalleryContainer).find('.maximize-button');
			if (typeof maximizeButton[0] != 'undefined')
			{
				var galleryWidth = parseInt(jQuery(photoGallery).innerWidth());
				if (galleryWidth < parseInt(jQuery(photoGallery).attr('rel')))
				{
					jQuery(maximizeButton).show();
				}
				else
				{
					jQuery(maximizeButton).hide();
				}
				if (jQuery(photoGallery).attr('maximized') == 'true')
				{
					Maximize();
				}
			}
		}
		jQuery(photoGallery).css('height', CalcMinHeight());
		var maximizeButton = jQuery(contextObject).find('.maximize-button');
		if ((typeof maximizeButton[0] != 'undefined') && (typeof photoGalleryContainer[0] != 'undefined'))
		{
			jQuery(maximizeButton).remove();
			jQuery(maximizeButton).appendTo(photoGalleryContainer);
			jQuery(maximizeButton).hide();
			jQuery(maximizeButton).click(function(){
				if (jQuery(this).hasClass('maximize'))
				{
					Maximize();
					jQuery(this).removeClass('maximize');
					jQuery(this).addClass('minimize');
				}
				else if (jQuery(this).hasClass('minimize'))
				{
					Minimize();
					jQuery(this).removeClass('minimize');
					jQuery(this).addClass('maximize');
				}
			});
			jQuery(maximizeButton).addClass('maximize');
		}
		else
		{
			alert('maximize button is empty!');
		}
		var galleryID = jQuery(contextObject).attr('id');
		jQuery(contextObject).remove();
		jQuery(photoGallery).attr('id', galleryID);
		jQuery(photoGallery).attr('align', 'center');
		jQuery(photoGallery).css('margin', '0 auto');
		jQuery(window).resize(function(){
			jQuery(photoGallery).stopTime();
			jQuery(photoGallery).oneTime('300ms', function(){CheckWidth();});
		});
		CheckWidth();
	});
};
/************** END icPhotoGallery ***************/

/************** AVIA ***************/

function ticketSearch ()
{
	var active = false;
	$('div#ticketSearch').bind ('load', function ()
	{
		$(this).show ();
	});
	$('div#ticketSearch').
		bind ('mouseover', function ()
		{
			if (!active)
			{
				$('div#ticketSearch').stop ().animate ({'height':'1050'}, 'fast');
				active = true;
			}
		});
	$('iframe#fav').click (function ()
	{
		$('div#ticketSearch').stop ().animate ({'height':'1050'}, 'fast');
	});
	$('div#ticketSearch, iframe#fav').
		bind ('mouseout', function ()
		{
			if (active)
			{
				$('div#ticketSearch').stop ().animate ({'height':'700px'}, 'fast');
				active = false;
			}
		}
	);
}

 function addRow()
{

	var datatable;

	datatable = document.getElementById("route");

	var rowIndex = datatable.rows.length - 1;

	datatable.insertRow(rowIndex + 1);

	var thisRow = datatable.rows[0];

	thisRow.cells[0].className = "t_l";

	thisRow.cells[5].className = "t_r";

	var thisRow = datatable.rows[rowIndex + 1];

	thisRow.insertCell(0);

	thisRow.cells[0].innerHTML = "<input type = \"hidden\" value = \"true\" name = \"r[" + rowIndex + "]\" id = \"r[" + rowIndex + "]\">" +

	  "<input type = \"text\"   value = \"\"     name = \"cityfrom[" + rowIndex + "]\"   id = \"cityfrom[" + rowIndex + "]\" size = \"11\">";

	thisRow.insertCell(1);

	thisRow.cells[1].innerHTML = "<input type = \"text\" value = \"\" name = \"cityto[" + rowIndex + "]\" id = \"cityto[" + rowIndex + "]\" size = \"11\">";

	thisRow.insertCell(2);

	thisRow.cells[2].innerHTML = "<input type = \"text\" value = \"\" name = \"startdate[" + rowIndex + "]\" id = \"startdate[" + rowIndex + "]\">";

	thisRow.insertCell(3);

	thisRow.cells[3].innerHTML = "<input type = \"checkbox\" class = \"checkbox\" name = \"ch[" + rowIndex + "]\" id = \"ch[" + rowIndex + "]\">" +

	  "<label for = \"ch[" + rowIndex + "]\">Туда-обратно</label>";

	thisRow.insertCell(4);

	thisRow.cells[4].innerHTML = "<input type = \"text\" value = \"\" name = \"enddate[" + rowIndex + "]\" id = \"enddate[" + rowIndex + "]\">";

	thisRow.insertCell(5);

	thisRow.cells[5].innerHTML = "<input type = \"button\" value = \"Удалить\" onclick = \"delRow(" + rowIndex + ")\">";

	/*thisRow.cells.length = 6;

	for(var i = 0; i <= 6; i++)

	{

	  thisRow.cells[i].innerHTML = "&nbsp;";

	}*/



	thisRow.className = "row_content";

	thisRow.cells[0].className = "b_l";

	thisRow.cells[5].className = "b_r";

	if (rowIndex > 0)

	{

	  thisRow = datatable.rows[rowIndex];

	  thisRow.cells[0].className = "";

	  thisRow.cells[5].className = "";

	}

}

function delRow(rowNumber)
{

	var datatable;

	datatable = document.getElementById("route");

	for (var i = rowNumber; i < datatable.rows.length - 2; i++)

	{

	  document.getElementById("cityfrom[" + i + "]").value = document.getElementById("cityfrom[" + (i + 1) + "]").value;

	  document.getElementById("cityto[" + i + "]").value = document.getElementById("cityto[" + (i + 1) + "]").value;

	  document.getElementById("startdate[" + i + "]").value = document.getElementById("startdate[" + (i + 1) + "]").value;

	  document.getElementById("ch[" + i + "]").checked = document.getElementById("ch[" + (i + 1) + "]").checked;

	  document.getElementById("enddate[" + i + "]").value = document.getElementById("enddate[" + (i + 1) + "]").value;

	}

	datatable.deleteRow(datatable.rows.length - 1);

	if (datatable.rows.length <= 1)

	  addRow();

	var thisRow = datatable.rows[datatable.rows.length - 1];

	thisRow.cells[0].className = "b_l";

	thisRow.cells[5].className = "b_r";

}

function addPass()
{

  var datatable;

  datatable = document.getElementById("passengers");

  var rowIndex = datatable.rows.length - 1;

  datatable.insertRow(rowIndex + 1);

  var thisRow = datatable.rows[rowIndex + 1];

  thisRow.insertCell(0);

  thisRow.cells[0].innerHTML = "<input type = \"hidden\" value = \"true\" name = \"h[" + rowIndex + "]\"><input type = \"text\" name = \"fio[" + rowIndex + "]\" id = \"fio[" + rowIndex + "]\">";

  thisRow.insertCell(1);

  thisRow.cells[1].innerHTML = "<input type = \"text\" name = \"vozr[" + rowIndex + "]\" id = \"vozr[" + rowIndex + "]\">";

  thisRow.insertCell(2);

  thisRow.cells[2].innerHTML = "<input type = \"button\" value = \"Удалить\" title = \"Удалить текущего пассажира\" onclick = \"delPass(" + rowIndex + ")\">";

  thisRow.className = "row_content";

  thisRow.cells[0].className = "b_l";

  thisRow.cells[2].className = "b_r";

  if (rowIndex > 0)

  {

	thisRow = datatable.rows[rowIndex];

	thisRow.cells[0].className = "";

	thisRow.cells[2].className = "";

  }

}

function delPass(rowNumber)
{

  var datatable;

  datatable = document.getElementById("passengers");

  for (var i = rowNumber; i < datatable.rows.length - 2; i++)

  {

	document.getElementById("fio[" + i + "]").value = document.getElementById("fio[" + (i + 1) + "]").value;

	document.getElementById("vozr[" + i + "]").value = document.getElementById("vozr[" + (i + 1) + "]").value;

  }

  datatable.deleteRow(datatable.rows.length - 1);

  if (datatable.rows.length <= 1)

	addPass();

	var thisRow = datatable.rows[datatable.rows.length - 1];

	thisRow.cells[0].className = "b_l";

	thisRow.cells[2].className = "b_r";

}

function textClear()
{

	if ((document.getElementById("editing_ad").value == "false") && (document.getElementById("ad_text").value == "Пример: требуется заказать билет для одного человека старше 18 лет с попутным оформлением визы в страну вылета и бронированием номера в трехзвездочном отеле."))

		document.getElementById("ad_text").value = "";

}



function textInit()
{

	if ((document.getElementById("editing_ad").value == "false") && (document.getElementById("ad_text").value == ""))

		document.getElementById("ad_text").value = "Пример: требуется заказать билет для одного человека старше 18 лет с попутным оформлением визы в страну вылета и бронированием номера в трехзвездочном отеле.";

}



function textFocus()
{

	textClear();

	document.getElementById("editing_ad").value = "true";

}



function textBlur()
{

	document.getElementById("editing_ad").value = "false";

	textInit();

}

function sendit()
{

	if ((document.getElementById("cont_phone").value == "") && (document.getElementById("cont_mail").value == ""))

	{

		alert("Для размещения заказа нужно заполнить поля - e-mail либо телефон.");

		return;

	}

	document.getElementById("editing_ad").disabled = "yes";

	if ((document.getElementById("ad_text").value == "Пример: требуется заказать билет для одного человека старше 18 лет с попутным оформлением визы в страну вылета и бронированием номера в трехзвездочном отеле.") || (document.getElementById("ad_text").value == ""))

		document.getElementById("ad_text").disabled = "yes";

	document.forms["avia"].submit();

}

/************** END AVIA ***************/

/******** COUNTRY PHOTOGALLERY ********/

jQuery.fn.loadGalleryImages = function(options){
	var options = jQuery.extend({
		imgTableID: null, // значение поля `img_table_id`
		imgTable: null, // значение поля `img_table`
		page: '1', // страница, с которой начинать отображение
		limit: false, // лимит фотографий на страницу
		photoUploadForm: false, // показывть форму добавления иображений
		photoUploadContainer: '.country-photo-add-c', // контейнер для формы добавления изображений
		onComplete: function(){}
	},options);
	return this.each(function(){
		var container = $(this);
		var hash = window.location.hash.substring(1);
		if (hash !=='')
		{
			options.limit = false;
		}
		container.load('/ajax/index.php?mode=countryImages', {countryID: options.imgTableID, table: options.imgTable, page: options.page, limit: options.limit},
			function()
			{
				if (options.photoUploadForm)
				{
					countryPhotoUpload(options.photoUploadContainer, options.imgTableID, options.imgTable, '0');
				}
				var countNoImg1 = container.find('.country-image-div[image=noimage]').length;
				if (countNoImg1 > '0')
				{
					showImage (container,options.imgTableID,options.imgTable);
				}
					$(window).scroll(function () {
						var countNoImg = container.find('.country-image-div[image=noimage]').length;
						if (countNoImg > '0')
						{
							showImage (container,options.imgTableID,options.imgTable);
						}
					});
				if (hash !=='')
				{
					showOneImage(hash,options.imgTableID,options.imgTable);
				}
				options.onComplete.call();
			}
		);
	});
};

// Показ изображений по прокрутке окна браузера \\
function showImage (container, countryID, table)
{
	//var windowHeight = window.screen.availHeight;
	var url = window.location.href;
	var windowHeight = getClientHeight();
	var scrollHeight = getBodyScrollTop();
	//alert($(container).find('.country-image-div[image!=shown]').length);
	$(container)
		.find('.country-image-div[image=noimage]')
		.each(function(){
			if ($(this).attr('pos') == '0')
			{
				$(this).attr('pos', $(this).offset().top);
			}
			var pos = $(this).attr('pos');
			var position = (windowHeight + scrollHeight);
			var src = $(this).attr('rel');
			var srcBig = $(this).attr('relBig');
			var width = $(this).width();
			var height = $(this).height();
			var imgWidth = $(this).attr('imgWidth');
			var imgHeight = $(this).attr('imgHeight');
			var imgHeight1 = imgHeight.split('px');
			if (imgHeight1[0] > height)
			{
				imgHeight = height+'px';
				imgWidth = '';
			}
			else
			{
				var margin = Math.floor((height - imgHeight1[0])/2);
			}
			//alert(pos + '-' + scrollHeight);
			$(this).find('img').css('margin-top',margin);
			if ((pos >= scrollHeight || pos > (scrollHeight-height)) && pos < (position-(height/4)) && $(this).attr('image') !== 'shown')
			{
				$(this).find('img').imageSrc();
			}
		});
}

jQuery.fn.imageSrc = function(options)
{
	var options = jQuery.extend({
		src: $(this).parent().attr('rel'),
		image: $(this),
		onComplete: function(){
						options.image
							.parent()
							.removeAttr('rel')
							.removeAttr('image')
							.attr('image','shown')
							.find('.imageLoader')
							.animate({opacity: 'hide'}, 500);
					}
	},options);
	return this.each(function(){
		$(this)
			.animate({opacity: '0'}, 1)
			.animate({opacity: 'show'}, 1)
			.attr('src', options.src)
			.animate({opacity: '1'}, 500);

		options.onComplete.call();
	});
}

function oneImage(image, id, countryID, table, container)
{
	var imageActive = $(image);
	if (imageActive.parent().hasClass('active'))
	{}
	else
	{
		if (container.hasClass('mini'))
		{
			showOneImage(id, countryID, table);
		}
		else
		{
			container.loadGalleryImages({
				imgTableID: countryID,
				imgTable: table,
				onComplete: function()
				{
					showOneImage(id, countryID, table);
				}
			});
		}
	}
}

// Выводим одно изображение \\
function showOneImage (id, countryID, table)
{
	window.location.hash = id;
	var url = window.location.href;
	var container = $('.country-one-photo-container');
	var miniContainer = $('.country-photo-container');
	var width = container.width();
	var imgActive = miniContainer.find('.country-image-div[relID='+ id +']');
	var prevButton = miniContainer.find('.prev-button img');
	var nextButton = miniContainer.find('.next-button img');
	var maxCount;
	var countHidden;
	var countVisible;

	miniContainer
		.find('.country-image-div[image=noimage]')
		.each(function(){
			if ($(this).attr('image') !== 'shown')
			{
				var src = $(this).attr('rel');
				$(this)
					.find('img')
					.animate({opacity: '0'}, 1)
					.animate({opacity: 'show'}, 1)
					.load(function(){
						$(this)
							.animate({opacity: '1'}, 500)
							.parent()
							.parent()
							.find('.imageLoader')
							.animate({opacity: 'hide'}, 500);
					})
					.attr('src', src);
				$(this).removeAttr('rel').removeAttr('image').attr('image','shown');
			}
		});
	
	if (container.find('img').length == '0')
	{
		container.css('height','35px');
	}
	else
	{
		container.css('height', container.find('img').height());
	}

	miniContainer
		.removeClass('country-photo-multiple')
		.css({
			'height':'80px',
			'background-color':'#fff',
			'overflow-y':'hidden',
			'border-top':'5px solid #fff',
			'border-bottom':'5px solid #fff'
		});
	miniContainer.find('.imageLoader').remove();

	prevButton.unbind('click').parent().css('display','block');
	nextButton.unbind('click').parent().css('display','block');

	miniContainer
		.find('.country-image-div')
		.css({'height':'75px','width':'100px','margin-top':'0','opacity':'0.7','display':'inline-block'})
		.find('img')
		.css({'height':'75px','width':''});
	
	miniContainer.addClass('mini');
	miniContainer.show();

	if (!/MSIE (5\.5|6|7).+Win/.test(navigator.userAgent))
	{
		miniContainer
			.find('.country-image-div')
			.css({'float':'none','position':'static'});
	}
	if (/MSIE (5\.5|6|7).+Win/.test(navigator.userAgent))
	{
		miniContainer
			.find('.country-image-div')
			.css({'position':'static'});
	}
	
	maxCount = Math.floor(miniContainer.width()/120);

	container
		.css('display','block')
		.load('/ajax/index.php?mode=countryImages', {imageID: id},
			function ()
			{
				
				var src = $(this).find('img').attr('rel');
				
				
				if (!/MSIE (5\.5|6|7|8).+Win/.test(navigator.userAgent))
				{
					if ($(this).find('img').length == '0')
					{
						container.css('height','35px');
					}
					$(this).find('img')
						.hide()
						.load(function(){
							container.css('height','');
							$(this)
								.animate({opacity: 'show'}, 1000)
								.parent()
								.find('.imageLoader').remove();

								var bigImage = container.find('img');
								if (bigImage.width() > container.width())
								{
									bigImage.css('width','100%');
								}

								/*$('.ph_comments').load('/ajax/index.php?mode=countryImages', {comments: 'img', commentImgID: id},
									function()
									{
										$(this).css('display','block');
									}
								)*/
						})
						.attr('src', src);
				}
				else
				{
					if ($(this).find('img').length == '0')
					{
						container.css('height','35px');
					}
					$(this).find('img')
						.load(function(){
							container.css('height','');
							$(this)
								.parent()
								.find('.imageLoader').animate({opacity: 'hide'}, 500);

							var bigImage = container.find('img');
							if (bigImage.width() > container.width())
							{
								bigImage.css('width','100%');
							}

							/*$('.ph_comments').load('/ajax/index.php?mode=countryImages', {comments: 'img', commentImgID: id},
								function()
								{
									$(this).css('display','block');
								}
							)*/
						})
						.attr('src', src);
				}

			
				var nowImage = imgActive.html() == null ? '0' : imgActive.prevAll().not('.prev-button').not('.next-button').length + 1;
				var allImages = miniContainer.find('.country-image-div').length;

				$('.country-photo-count').css('display','block').html((nowImage) + ' из ' + allImages);

					imgActive.css('opacity','1');
					
					imgActive.prevAll().not('.prev-button').removeClass('prev next active hide');
					imgActive.nextAll().not('.next-button').removeClass('prev next active hide');
					imgActive.prev().not('.prev-button').addClass('prev').prev().not('.prev-button').addClass('prev');
					imgActive.next().not('.next-button').addClass('next');
					imgActive.removeClass('prev next active hide').addClass('active');
					imgActive.prevAll().not('.prev').not('.prev-button').not('.next-button').addClass('hide');

					if (imgActive.nextAll().length < maxCount-1)
					{
						for (i=1; i<maxCount-imgActive.nextAll().length; i++)
						{
							miniContainer.find('.country-image-div:hidden:last').removeClass('hide');
						}
					}

					countHidden = miniContainer.find('.country-image-div:hidden').length;
					countVisible = miniContainer.find('.country-image-div:visible').length;

					if (countHidden == '0')
					{
						prevButton.addClass('btnInactive');
					}
					else
					{
						if (prevButton.hasClass('btnInactive'))
						{
							prevButton.removeClass('btnInactive');
						}
					}
					if (countVisible == maxCount || countVisible == '0')
					{
						nextButton.addClass('btnInactive')
					}
					else
					{
						if (nextButton.hasClass('btnInactive'))
						{
							nextButton.removeClass('btnInactive');
						}
					}

					prevButton.click(function(){
						maxCount = Math.floor(miniContainer.width()/120);
						countHidden = miniContainer.find('.country-image-div:hidden').length;
						if (countHidden > '0')
						{
							$(this)
								.animate({width: '28px'},100)
								.animate({width: '30px'},1);
							miniContainer
								.find('.country-image-div:hidden:last')
								.removeClass('hide');

							if (miniContainer.find('.country-image-div:hidden:last').attr('image') !== 'shown')
							{
							}

							countVisible = miniContainer.find('.country-image-div:visible').length;
							if (countVisible > maxCount && nextButton.hasClass('btnInactive'))
							{
								nextButton.removeClass('btnInactive');
							}
						}
						if (countHidden == '1')
						{
							$(this).addClass('btnInactive');
						}
					});
					
					nextButton.click(function(){
						maxCount = Math.floor(miniContainer.width()/120);
						countVisible = miniContainer.find('.country-image-div:visible').length;
						
						if (countVisible > maxCount)
						{
							$(this)
								.animate({width: '28px'},100)
								.animate({width: '30px'},1);

							miniContainer
								.find('.country-image-div:visible:first')
								.addClass('hide');

							countHidden = miniContainer.find('.country-image-div:hidden').length;

							if (countHidden > '0' && prevButton.hasClass('btnInactive'))
							{
								prevButton.removeClass('btnInactive');
							}
						}
						if (countVisible == (maxCount+1))
						{
							$(this).addClass('btnInactive')
						}
						
					});
			}
	);
	var containerInfo = $('.country-photo-info-c');
	containerInfo.load('/ajax/index.php?mode=countryImages', {info: 'get', id: id, url: url},
	function(data)
	{
		
	}
	);
}

// Загрузка изображений \\
function countryPhotoUpload (mainContainer, countryID, table, count)
{
	$(mainContainer).load('/ajax/countryImagesForm.php',
		function()
		{
			var container = $(mainContainer).find('.country-photo-add-container');

			$(container)
				.find('.countryPhSubmit span')
				.click(function(){
					if ($(container).find('span#success').text() !== 'success')
					{
						$(container)
							.find('.countryPhotoButton')
							.animate({opacity: '0.5'}, 300)
							.animate({opacity: '1'}, 300)
							.animate({opacity: '0.5'}, 300)
							.animate({opacity: '1'}, 300);
						return false;
					}
				})
			.end()
				.find('#ph_tags input')
				.focus(function(){
					$(container)
						.find('#tagsToolTip')
						.animate({opacity: 'show'}, 300);
				})
				.blur(function(){
					$(container)
						.find('#tagsToolTip')
						.animate({opacity: 'hide'}, 300);
				});
			var button = $(container).find('.countryPhotoButton'), interval;

			$.file_upload(button, {
				action : '/ajax/noindex.php?action=countryImages&table='+table,
				name : 'file',
				onSubmit : function(file, ext) {
					$('#phImageError').remove();
					if (!(ext && /^(jpg|jpeg)$/i.test(ext)))
					{
						$('<div id="phImageError">Файл имеет недопустимое расширение</div>').insertAfter('.country-photo-add-container #fileWrapper');
						return false;
					}
					else
					{
						$('<div id="phImageError" style="width:128px;height:15px; background-image: url(/images/wait.gif);display:inline-block"></div>').insertAfter('.country-photo-add-container #fileWrapper');
					}
					this.disable();
				},
				onComplete : function(file, response, success) {
					var knopka = this;
					$('#phImageError').remove();
					$('<div id="phImageError">'+ response +'</div>').insertAfter('.country-photo-add-container #fileWrapper');
					var success = $('.country-photo-add-container').find('span#success').text();
					if (success !== 'success')
					{
						knopka.enable();
						return false;
					}
					else
					{
						$(container).find('#fileWrapper').slideUp(0);
						$(container)
							.find('.countryPhSubmit span')
							.bind('click',
								function(data)
								{
									var submit = $(container).find('.countryPhSubmit');
									submit.hide();
									$('<div id="phImageError" align="center"><div style="width:128px;height:15px; background-image: url(/images/wait.gif);display:inline-block"></div></div>').insertAfter(submit);
									var image = $(container).find('#phImageError #delete').attr('image');
									var author =  $(container).find('input[name=ph_author]').val();
									var name =  $(container).find('input[name=ph_name]').val();
									var text =  $(container).find('textarea[name=ph_text]').val();
									var tagName = $(container).find('#ph_tags input').val();

									var link = '/ajax/noindex.php?action=countryImages&upload=true';
									
									$.post(link, {country: countryID, table: table, image: image, author: author, name: name, text: text, tagName: tagName},
										function(data)
										{
											//alert(data);
											if (/(^success)/.test(data))
											{
												countryPhotoUpload (mainContainer, countryID, table, '1');
											}
										}
									);
									$(this).unbind('click');
								}
							)
						.end()
							.find('#phImageError #delete')
							.bind('click',
								function()
								{
									var image = $(this).attr('image');
									$.post('/ajax/noindex.php?action=countryImages&del', {image: image});
									$('#phImageError').remove();
									$(container).find('#fileWrapper').slideDown(0);
									knopka.enable();
									$(this).unbind('click');
									$(container).find('.countryPhSubmit').remove();
									var textarea = $(container).find('textarea').parent();
									$('<div class = "countryPhSubmit"><span>Отправить</span></div>').insertAfter(textarea);
								}
							);
					}
				}
			});
			if (count > '0')
			{
				$('<div class="countryPhoto1">Фото загружено и будет добавлено после проверки модератором</div>').appendTo(container);
				$(container).find('#fileInput').change(function(){
					$(container).find('.countryPhoto1').remove();
				});
			}
			
		}
	);
}

// Проверка тегов, вывод существующих \\
function tagsList (container, value)
{
	container = $(container);
	container.css('position','relative');
	var link = '/ajax/noindex.php?action=tags&tagsList';
	var count = container.find('#tags').length;
	var valueOld = null;
	//var inputHeight = (container.find('input').height()*2)+4;
	var margin = container.height();

	value = trim(value);
	
	if (/,+/.test(value))
	{
		valueNew = value.split(',');
		var i = valueNew.length - 1;
		value = trim(valueNew[i]);

		if (valueNew[0] !== 'undefined')
		{
			var valueOld = trim(valueNew[0]);

			for (j=1; j<i; j++)
			{
				valueOld += ','+valueNew[j];
			}
		}
	}

	if(count == '0')
	{
		if (value !== '')
		{
			$.post(link, {tag: value},
				function(data)
				{
					if(data !== '')
					{
						$('<div id="tags" style="margin-top:'+ margin +'px">'+ data +'</div>').insertAfter(container.find('input'));

						container
							.find('#tags div span')
							.bind('click', function(){
								var text = $(this).text();
								if (valueOld !== null)
								{
									text = valueOld +',' + text;
								}
								else
								{
									text = text;
								}
								container.find('input').val(text);
								$(this).unbind('click');
								container.find('#tags').remove();
							});
						
						
						var reg = new RegExp('^'+value+'{1}.+$','i');

						container
							.find('#tags')
								.find('div')
								.each(function(){
									if (reg.test($(this).text()))
									{
										$(this).css('display','block').addClass('visible');

										container.find('#tags:hidden').show();
									}
									else
									{
										$(this).css('display','none').removeClass('visible');

										if (container.find('#tags div:visible').length == '0')
										{
											container.find('#tags:visible').hide();
										}
									}

								});
					}
				}
			);
		}
	}
	else
	{
		if (value == '')
		{
			container.find('#tags').remove();
		}
		else
		{
			var reg = new RegExp('^'+value+'{1}.+$','i');

			container
				.find('#tags')
					.find('div')
					.each(function(){
						if (reg.test($(this).text()))
						{
							$(this).css('display','block').addClass('visible');

							container.find('#tags:hidden').show();
						}
						else
						{
							$(this).css('display','none').removeClass('visible');

							if (container.find('#tags div:visible').length == '0')
							{
								container.find('#tags:visible').hide();
							}
						}

					});
		}
	}
}
/******** END COUNTRY PHOTOGALLERY ********/

/************* STORIES *************/
function addStory(id)
{
	var link = '/ajax/noindex.php?action=add_story';

	if (id !='0')
	{
		link += '&storyID=' + id;
	}
	
	$('.story-list-container').load(link,
		function()
		{
			if (!id)
			{
				$('#storyForm')
					.find('input[name=story_tags]')
					.val('Россия')
				.end()
					.find('#story_tags_tables')
					.val('countries,');
			}
			StoriesCurortsList('', 'russia');		
			storyTinyMce();
		}
	);
}

function formSubmit(form, button)
{
	if (typeof tinyMCE == 'undefined' || !tinyMCE.activeEditor)
	{
		var text = $(form).find('textarea[name=story_text]').attr('value');
	}
	else
	{
		var text = $(tinyMCE.activeEditor.getBody ()).text();
	}

	if 
		(
			$(form).find('input[name=story_author]').val() =='' ||
			$(form).find('input[name=story_name]').val() =='' ||
			text ==''
		)
	{
		alert('Должны быть заполнены все обязательные поля: Автор, Название, Текст и указана Страна');
	}
	else
	{
		$(button)
			.parent()
			.find('img')
			.show()
		.end()
			.find('span')
			.hide();
		$(tinyMCE.activeEditor.getBody ()).find('img').each(function(){
			var imgBig = $(this).attr('imgBig');
			if (!imgBig)
			{
			}
			else
			{
				$(this).wrap('<a href="'+ imgBig +'" class="highslide" onclick="return hs.expand(this)"></a>');
				$(this).removeAttr('imgBig');
			}
		});
		$(form).submit();
	}
}

function storyTinyMce()
{
	tinyMCE.execCommand('mceAddControl', false, 'story_text');

	var intervalId = setInterval(function(){
		if (tinyMCE.get('story_text'))
		{
			clearInterval(intervalId);
			$('.mceToolbarRow1').parent().css('position','relative')
			$('<div class="story-image-button"><span>Добавить фото</span></div>').appendTo($('.mceToolbarRow1').parent());
			var button = $('.story-image-button'), interval;
			$.file_upload(button, {
				action : '/ajax/noindex.php?action=storyImages',
				name : 'file',
				onSubmit : function(file, ext) {
					if (!(ext && /^(jpg|png|jpeg)$/i.test(ext)))
					{
						alert('Файл имеет недопустимый формат');
						return false;
					}
					this.disable();
				},
				onComplete : function(file, response, success, error) {
					this.enable();
					if (error.length > '0')
					{
						alert(error.text());
					}
					else
					{
						var ed = tinyMCE.activeEditor;
						ed.execCommand('mceInsertContent', false, response, {skip_undo : 1});
					}
				}
			});
		}
	}, 100);
}

function tagsCheck(newTag, tags)
{
	var reg = new RegExp(',?'+ newTag +',?','i');
	if (reg.test(tags))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function tagFromTable(table,container)
{
	container = $(container);
	var value = container.val();
	var regExp = new RegExp(',?'+ table +',?','i');
	if (!regExp.test(value))
	{
		var newValue = value+table+',';
		container.val(newValue);
	}
}

function checkCountriesInTags(tags, country)
{
	var array = new Array();
	var newValue;
	$('select[name=story_country]').find('option[rel!='+country+'][value!=0]').each(function(){
		var find = $(this).attr('rel');
		var reg = new RegExp(find +',?','ig');
		if (reg.test(tags))
		{
			tags = tags.replace(reg,'');
		}
	});
	
	var find2 = $('input[name=story-different-country]').val();
	if (find2 !=='' && find2 !=='Страна' && find2 !=='Страна')
	{
		var reg3 = new RegExp(find2 +',?','ig');
		if (reg3.test(tags))
		{
			tags = tags.replace(reg3,'');
		}
	}

	var reg2 = new RegExp(',$');

	if (reg2.test(tags))
	{
		tags = tags.replace(reg2,'');
	}
	
	if (country == 'all' || country == 'different' || country=='Страна')
	{
		country = '';
	}
	if (tags == '')
	{
		newValue = country;
	}
	else
	{
		newValue = tags + ',' + country;
	}
	$('#story_tags').find('input[name=story_tags]').val(newValue);
	
}

function StoriesCountry(toShow, container)
{
	container = $(container);
	toShow = $(toShow);
	var value = container.find('option:selected').attr('rel');
	var oldValue = $('#story_tags').find('input[name=story_tags]').val();

	if (tagsCheck(value, oldValue))
	{
		checkCountriesInTags(oldValue, value);
	}
	if (value == 'different')
	{
		toShow.show();
		$('#resortsList').html('');
		toShow.blur(function(){
			var value = $(this).val();
			checkCountriesInTags(oldValue, value);
		});
	}
	else
	{
		if (container.val() !=='0')
		{
			StoriesCurortsList('', container.val());
		}
		else
		{
			$('#resortsList').html('');
		}
		toShow.hide();

	}
}

function StoryOtherResort(value)
{
	var oldValue = $('#story_tags').find('input[name=story_tags]').val();
	var newValue;

	if (tagsCheck(value, oldValue))
	{
		if (oldValue == '')
		{
			newValue = value;
		}
		else
		{
			newValue = oldValue + ',' + value;
		}
		$('#story_tags').find('input[name=story_tags]').val(newValue);
	}
}

function StoriesCurortsList(value, country)
{
	var resort = 'resorts';
	if (country == 'russia')
	{
		resort = 'russia'
	}
	$('#resortsList')
		.html('<img src="/images/loader.gif" style="width:15px; height:15px;" />')
		.load('/ajax/index.php?mode=resortList&curort=' + value + '&country=' + country + '&nomore',
			function(data)
			{
				//$('.story-different-resort').show();
				$(this).find('.resortName').click(function(){
					var oldValue = $('#story_tags').find('input[name=story_tags]').val();
					var value = $(this).text();
					var newValue;

					if (tagsCheck(value, oldValue))
					{
						if (oldValue == '')
						{
							newValue = value;
						}
						else
						{
							newValue = oldValue + ',' + value;
						}
						$('#story_tags').find('input[name=story_tags]').val(newValue);
						tagFromTable(resort,$('#story_tags_tables'))
					}
				});
			}
		);
}

function StoriesSelectReload(url,reload)
{
	window.location.href = url;
	if (reload)
	{
		window.location.reload();
	}
}

function StoriesSelectByTag(country, countryName, tag, page)
{
	if (window.location.hash.substring(1)!==tag)
	{
		window.location.hash=tag;
	}
	if (!page)
	{
		var page='1';
	}
	countryName = urlencode(countryName);
	$('.child-cloud-container')
		.find('a.active')
		.removeClass('active')
	.end()
		.find('a[tag='+tag+']')
		.addClass('active');
	var link = '/ajax/index.php?mode=stories&country='+country+'&resort='+tag+'&spage='+page;
	$('.story-list-container ul').html('<div align="center"><img src="/images/wait.gif" /></div>').load(link, {countryName: countryName});

}

/************** END STORIES ***************/

function checkEmail (email, container)
{
	$('div#email-check').remove();

	if (email !=='' && !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
	{
		if (container)
		{
			$("<div id='email-check'><span>Некорректный email</span></div>").insertAfter(container);
		}
		return false;
	}
}

function consultantAddQuestion()
{
	var height = getClientHeight();
	var top = Math.round(height/2)/2;

	var container;
	var overlay;

	overlay = '<div class="overlay"></div>';
	container = '<div id="consultant-add-dialog">';
	container += '<div class="header"></div>';
	container += '<div class="body">';
	container += 'Ваше имя:(обязательное поле)<br /><input type="text" name="consultant_author" /><br />';
	container += 'E-mail:<br /><input type="text" name="consultant_email" onKeyUp="checkEmail(this.value, this)" /><br />';
	container += 'Введите ваш вопрос:(обязательное поле)<br /><textarea name="consultant_question"></textarea>';
	container += '</div>';
	container += '<div class="footer">';
	container += '<div class="cancel-button">Отменить</div>';
	container += '<div class="ok-button">OK</div>';
	container += '</div>';
	container += '</div>';
	
	$('.banner').find('object').parent().hide();

	$(overlay).appendTo('body');
	$(container)
		.appendTo('body')
		.css('top',top)
		.find('.cancel-button')
		.click(function(){
			$('.overlay').remove();
			$('#consultant-add-dialog').remove();
			$('.banner').find('object').parent().show();
		})
	.end()
		.find('.ok-button')
		.bind('click',function(){
			var text = $('#consultant-add-dialog').find('textarea[name=consultant_question]').val();
			var author = $('#consultant-add-dialog').find('input[name=consultant_author]').val();
			var email = $('#consultant-add-dialog').find('input[name=consultant_email]').val();
			
			if (text !== '' && author !== '' && (email == '' || /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)))
			{
				var response;
				var overlay2;

				response = '<div class="response">';
				response += '<div class="header"></div>';
				response += '<div class="body">';
				response += '<div id="loader"><img src="/images/wait.gif" style="margin-top:10px;"/></div>';
				response += '</div>';
				response += '<div class="footer">';
				response += '<div class="ok-button">OK</div>';
				response += '</div>';
				response += '</div>';
				
				$(overlay).appendTo('body');
				$(response).appendTo('#consultant-add-dialog');

				text = urlencode(text);
				author = urlencode(author);

				$.post('/ajax/noindex.php?action=consultant&mode=add', {question: text, author: author, email: email},
					function(data){
						$('#loader').html('Ваш вопрос успешно добавлен, он будет показан после получения ответа');
						$('#consultant-add-dialog')
							.find('.response')
								.find('.ok-button')
								.click(function(){
									$(this).parent().parent().remove();
									$('.overlay').remove();
									$('#consultant-add-dialog').remove();
									$('.banner').find('object').parent().show();
								});
					}
				);

				$(this).unbind('click');
			}
			else
			{
				var error = 'Вы не ввели имя, ввели некорректный e-mail или не ввели вопрос';
				response = '<div class="response">';
				response += '<div class="header"></div>';
				response += '<div class="body">';
				response += error;
				response += '</div>';
				response += '<div class="footer">';
				response += '<div class="cancel-button">Закрыть</div>';
				response += '</div>';
				response += '</div>';
				
				$(overlay).appendTo('#consultant-add-dialog');
				$(response).appendTo('#consultant-add-dialog');
				
				$('#consultant-add-dialog')
					.find('.response')
						.find('.cancel-button')
						.click(function(){
							$(this).parent().parent().remove();
							$('.overlay:last').remove();
						});

				return false;
			}
	});
	$('#consultant-add-dialog').find('textarea').focus();
	var intervalId = setInterval(function(){
		if ($('#consultant-add-dialog').length > '0')
		{
			if ($('.banner').find('object:visible').length > '0')
			{
				$('.banner').find('object').parent().hide();
			}
			else
			{
				clearInterval(intervalId);
			}
		}
	},500);

	$(document).bind('keyup',function(e) {
		if (e.keyCode == 27)
		{
			var dialogCount = $('#consultant-add-dialog').length;
			var responseCount = $('.response').length;
			if (dialogCount > '0')
			{
				if (responseCount > '0')
				{
					$('.response:last').remove();
				}
				else
				{
					$('#consultant-add-dialog').remove();
					$('.banner').find('object').parent().show();
					$(this).unbind('keyup');
				}
				$('.overlay:last').remove();
			}
		}
	});
}

function consultantAnswer(container)
{
	var answerForm = container.find('.agencyAnswerForm');
	var hideForm = $('.consultant-container').find('.agencyAnswerForm').not(answerForm);
	hideForm.slideUp(100);
	if (answerForm.is(':visible'))
	{
		answerForm.slideUp(100);
	}
	else
	{
		answerForm.slideDown(100);
		answerForm.find('textarea').focus();
	}
}

function consultantAddAnswer(button, author_id, author_table, question)
{
	var container = $('.agencyAnswerForm[rel='+ question +']');
	var author = container.find('input[name=author_name]').val();
	var answer = container.find('textarea[name=answer]').val();
	
	if (answer !== '' && author !== '')
	{
		$(button).unbind('click').css('border','none').html('<img src="/images/wait.gif" />');
		author = urlencode(author);
		answer = urlencode(answer);
		$.post('/ajax/noindex.php?action=consultant&mode=addAnswer', {author: author, answer: answer, authorID: author_id, author_table: author_table, question: question},
			function(data)
			{
				window.location.reload();
				//container.slideUp(100);
			}
		);
	}
	else
	{
		alert('Введите свое имя и текст ответа');
		return false;
	}
}

function consultantShowAnswer (elemHide, elemShow)
{
	$(elemHide).css('display','none');
	$(elemShow).css('display','block');

	$('.consultant-container')
		.find('.full-answer:visible')
		.not(elemShow)
		.css('display','none')
	.end()
	.end()
		.find('.short-answer:hidden')
		.not(elemHide)
		.css('display','block');
}

function consultantAllReaden(agencyID)
{
	$('.consultant').find('.new:visible').hide(300);
	var link = '/ajax/noindex.php?action=consultant&mode=all_readen';
	$.post(link, {agencyID: agencyID});
}

// УЗНАТЬ ВЕРСИЮ FLASH-ПЛЕЕРА \\
function getFlashPluginVersion()
{
	var ie=0
	var f=0
	var fz=0
	var n=navigator

	if ((n.platform=='Win32')&&(n.userAgent.indexOf('Opera')== -1)){ie=1
	for (var i=3;i<10;i++){if (eval('new ActiveXObject("ShockwaveFlash.ShockwaveFlash.'+i+'")')){f=i}}}
	if ((ie==0)&&(n.plugins))
	{
	for (var i=0;i<n.plugins.length;i++){if (n.plugins[i].name.indexOf('Flash')> -1)
	{fz=parseInt(n.plugins[i].description.charAt(16))
	if (fz>f) f=fz;
	}}}
	/*if (f!==1)
	{
		alert('Версия вашего flas-плеера ('+ f +') устарела, обновите его');
	}*/
	/*function insFl(v,fl,gif,lnk,w,h)
	{var d=' width='+w+' height='+h
	if (f>=v) {
	document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+d+'><param name=movie value='+fl+'><embed src='+fl+' quality=high'+d+'></embed></object>') }
	else {document.write('<a href='+lnk+'><img src='+gif+d+' border=0></a>')}}*/
}

/************* TOURSEARCH **************/

function tourSearch_places(container, id)
{
	if (container.is(':enabled'))
	{
		container.attr('disabled','disabled').html('<option value="0">[Любой курорт]</option>');
		$('#tour-search-hotels').attr('disabled','disabled').html('<option value="0">[Любой отель]</option>');
	}
	if (id !== '0')
	{
		var link = '/ajax/index.php?mode=toursearch&param=place';

		$.post(link, {country: id},
			function(data)
			{
				if (data !== '')
				{
					container.html(data).removeAttr('disabled');
				}
			}
		);
	}
}

function tourSearch_hotels(container, id, hotelID, star)
{
	if (!star)
	{
		var star = $('.tour-search-container').find('#tour-search-hotel-category').val();
	}
	if (container.is(':enabled'))
	{
		container.attr('disabled','disabled').html('<option value="0">[Любой отель]</option>');
	}
	if (id !== '0')
	{
		var link = '/ajax/index.php?mode=toursearch&param=hotels';

		$.post(link, {placeID: id, star: star},
			function(data)
			{
				if (data !== '')
				{
					container.html(data).removeAttr('disabled');
					if (hotelID)
					{
						container.find('option[value='+ hotelID +']').attr('selected','selected');
					}
				}
			}
		);
	}
}

function tourSearch(container, euroRate, dollarRate, hotelID, page)
{
	var link = '/ajax/index.php?mode=toursearch&param=result';
	var country = $('#tour-search-country').val();
	var place = $('#tour-search-place').val();
	var depart = $('#tour-search-depart').val();
	var tourType = $('#tour-search-tourtype').val();
	var hotelCategory = $('#tour-search-hotel-category').val();
	var startDate = $('.tour-search-container').find('.startDate').val();
	var endDate = $('.tour-search-container').find('.endDate').val();
	var price = $('#tour-search-price').val();
	var currency = $('#tour-search-currency').val();
	var ticket = $('#tour-search-ticket:checked').val();
	var food = $('#tour-search-food').val();

	if (country == '0')
	{
		alert('Выберите страну');
		return false;
	}
	else
	{
		var hotel;
		if (hotelID !== '0')
		{
			hotel = hotelID;
			$('#tour-search-hotels').find('option[value='+ hotelID +']').attr('selected','selected');
		}
		else
		{
			hotel = $('#tour-search-hotels').val();
		}

		var height = getClientHeight();
		var top = Math.round(height/2)/1.5;
		
		var style;

		if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
		{
			style='style="position:absolute;"';
			top = top*1.5;
			$(document).find('select:visible').hide(0);
		}
		
		if (!page)
		{
			$('.banner').find('object').parent().hide();
			$('<div class="overlay" rel="toursearch"></div>').appendTo('body');
			$('<div id="loader2" '+ style +'><span>Идет поиск</span></div>').appendTo('body').css('top',top+'px');
		}
		else
		{
			container.find('div[rel=loader]').css('display','block');
		}
		scrollTop($('.tour-search-container'));

		var start = new Date();
		$.post(link, {country: country, place: place, hotel: hotel, depart: depart, tourType: tourType, euroRate: euroRate, dollarRate: dollarRate, hotelCategory: hotelCategory, startDate: startDate, endDate: endDate, price: price, currency: currency, ticket: ticket, food: food, page: page},
				function(data)
				{
					if (!/MSIE (5\.5|6|7).+Win/.test(navigator.userAgent))
					{
						container.html('<div style="clear:both;height:1px;"></div>' + data);
								
						scrollTop($('.tour-search-container'));
						if (place == '0')
						{
							var placeID = container.find('td[placeID]:first').attr('placeID');
							$('#tour-search-place').find('option[value='+ placeID +']').attr('selected','selected');
							tourSearch_hotels($('#tour-search-hotels'), placeID, hotel);
						}
					}
					else
					{
						setTimeout(
							function()
							{
								container.html('<div style="clear:both;height:1px;"></div>' + data);
								
								if (place == '0')
								{
									var placeID = container.find('td[placeID]:first').attr('placeID');
									$('#tour-search-place').find('option[value='+ placeID +']').attr('selected','selected');
									tourSearch_hotels($('#tour-search-hotels'), placeID, hotel);
								}
							}
						,600);
					}

					setTimeout(
						function()
						{
							$('.overlay[rel=toursearch]').remove();
							$('#loader2').remove();
							$('.banner').find('object').parent().show();
							$(document).find('select:hidden').show(0);
						}
					,500);

					$('#loader2')
						.css('background-image','none')
						.find('span')
						.css('margin-top','65px')
						.text("Поиск завершен");

					var end = new Date();
					//$('<div style="margin:15px;font-weight:bold;color:red;">Скорость выполнения: ' + (end.getTime()-start.getTime()) + ' мс</div>').prependTo(container);
				}
			);
	}
}

function tourSearchPages(container, euroRate, dollarRate, hotelID, page)
{
	var pagesContainer = $('.toursearch-pages-container');

	var activePage = pagesContainer.find('span.active');

	if (activePage.attr('page') !== page)
	{
		tourSearch(container, euroRate, dollarRate, hotelID, page)

		pagesContainer
			.find('span:not(.active)[page='+ page +']')
			.addClass('active')
		.end()
			.find('span.active[page!='+ page +']')
			.removeClass('active');
	}
}

function tourSearchPrice(value)
{
	var box = $('#tour-search-ticket');
	if (value !=='')
	{
		if (box.is(':disabled'))
		{
			box.removeAttr('disabled');
		}
	}
	else
	{
		if (box.not(':disabled'))
		{
			box.attr('disabled','disabled');
			if (box.not(':checked'))
			{
				box.attr('checked','checked');
			}
		}
	}
}

/************* END TOURSEARCH **************/

jQuery.fn.sortBanners = function(options){
	var options = jQuery.extend({
		link: null
	},options);
	return this.each(function(){
		var oldVal;
		var newVal;
		var id;

		jQuery(this).focus(function(){
			oldVal = this.value;
		});
		
		jQuery(this).keyup(function(e){
			if (e.keyCode == 13)
			{
				id = jQuery(this).attr('rel');
				newVal = this.value;
				container = jQuery(this);
				
				if (newVal !== oldVal)
				{
					container.css({
						'color':'red',
						'font-weight':'bold'
					});
					jQuery.post(options.link, {id: id, position: newVal},
						function()
						{
							oldVal = newVal;
							setTimeout(function(){
								container.css({
									'color':'#000',
									'font-weight':'normal'
								});
							},200);
						}
					);
				}
			}
		});

		jQuery(this).blur(function(){
			id = jQuery(this).attr('rel');
			newVal = this.value;
			container = jQuery(this);
			
			if (newVal !== oldVal)
			{
				container.css({
					'color':'red',
					'font-weight':'bold'
				});
				jQuery.post(options.link, {id: id, position: newVal},
					function()
					{
						setTimeout(function(){
								container.css({
									'color':'#000',
									'font-weight':'normal'
								});
							},200);
					}
				);
			}
		});
	});
};

function bannerShowChange(bannerID, container)
{
	var show = '0';
	var bgColor = '#ccc';
	if (container.is(':checked'))
	{
		show = '1';
		bgColor = '#FFFFE0';
	}
	$.post('/ajax/index.php?mode=bannerSave', {id: bannerID, show: show},
		function(data)
		{
			container
				.css('background-color', bgColor)
				.parent()
				.parent()
				.css('background-color', bgColor)
				.children()
				.css('background-color', bgColor);
		}
	);
}

function userInfoUpdate(id, name)
{
	name = urlencode(name);

	var link = '/?page=usercp&user_action=update';

	$.post(link, {id: id, name: name},
		function()
		{
			window.location.reload();
		}
	);
}

function userNameCheck(container, value)
{
	var newValue;
	container = $(container);
	container.keyup(function(){
		newValue = $(this).val();
		if (newValue == value)
		{
			$('.usercp-container').find('#user-save-button:visible').hide(0);
		}
		else
		{
			$('.usercp-container').find('#user-save-button:hidden').show(0);
		}
	});
}
/********** ALL COUNTRIES, RESORTS **********/

function sortCountries(option, array, page)
{
	if (option == 'char')
	{
		$('#container div.column').height('');
		var header;
		var navigation;

		$('.all-countries-container, .all-resorts-container').find('.navigation').html('');
		//$('.all-resorts-container').find('.navigation').removeClass('nav-float');
		$('.all-countries-container, .all-resorts-container')
			.find('.background')
			.height('75')
				.find('.alphabet')
				.hide()
			.end()
				.find('.worldparts')
				.show();

		for (var key in array )
		{
			navigation = '<span onClick="scrollTo($(\'[char-main='+ array[key] +']\'), 300)">'+ array[key] +'</span>';
			$(navigation).appendTo($('.all-countries-container, .all-resorts-container').find('.navigation'));
			header = '<ul class="othercountries country-flag chars" char-main="'+ array[key] +'"><h3>'+ array[key] +'</h3></ul>';
			
			var li = $('.all-countries-container, .all-resorts-container').find('.rlist').find('li[char='+ array[key] +']');

			$(header).appendTo($('.all-countries-container, .all-resorts-container').find('.rlist'));
			$(li).appendTo($('ul[char-main='+ array[key] +']'));
			$('<div class="clear"></div>').appendTo($('ul[char-main='+ array[key] +']'));
		}

		$('[part-main]').remove();
	}
	else
	{
		var header;
		var navigation;
		var nav;

		var width = 160;
		var blockWidth = $('.all-countries-container').width();
		var num = Math.floor(blockWidth/width);

		$('.all-countries-container, .all-resorts-container').find('.navigation').html('');
		//$('.all-resorts-container').find('.navigation').addClass('nav-float');

		$('.all-countries-container, .all-resorts-container')
			.find('.background')
			.height('36')
				.find('.worldparts')
				.hide()
			.end()
				.find('.alphabet')
				.show();

		for (var key in array )
		{
			/*nav = array[key];
			if (nav == 'Доминиканская республика')
			{
				nav = 'Доминикана';
			}
			navigation = '<span onClick="scrollTo($(\'[part-main='+ key +']\'), 300)">'+ nav +'</span>';
			$(navigation).appendTo($('.all-countries-container, .all-resorts-container').find('.navigation'));*/
			header = '<ul class="othercountries country-flag parts" part-main="'+ key +'"><h3>';
			if (page && page=='resorts')
			{
				header += '<span class="'+ key +'"></span>';
				header += '<a href="../countries/'+ key +'.html">';
				header += array[key];
				header += '</a>';
			}
			else
			{
				header += array[key];
			}
			header += '</h3></ul>';

			var li = $('.all-countries-container, .all-resorts-container').find('.rlist').find('li[part='+ key +']');
			
			$(header).appendTo($('.all-countries-container, .all-resorts-container').find('.rlist'));
			$(li).appendTo($('ul[part-main='+ key +']'));
			$('<div class="clear"></div>').appendTo($('ul[part-main='+ key +']'));
		}

		$('[char-main]').remove();
	}
}

function sortCountriesColumn(option, array)
{
	var header;
	var navigation;
	var nav;

	var width = 165;
	var blockWidth = $('.all-countries-container').width();
	var num = Math.floor(blockWidth/width);

	$('.all-countries-container').find('.navigation').html('');
	//$('.all-resorts-container').find('.navigation').addClass('nav-float');

	$('.all-countries-container')
		.find('.background')
		.height('36')
			.find('.worldparts')
			.hide()
		.end()
			.find('.alphabet')
			.show();

	var li = $('.all-countries-container').find('.rlist').find('li');

	for (j=0;j<num;j++)
	{
		var wrapperLength = $('ul[part-main='+j+']').length;
		if (wrapperLength == '0')
		{
			$('<ul class="othercountries country-flag parts" part-main="'+j+'"></ul>').appendTo($('.all-countries-container').find('.rlist'));
		}
	}

	var count = Math.ceil(li.length/num);
	var count2 = count;
	var count3 = 0;
	$(li).each(function(i){
		var wrapper = $('ul[part-main='+count3+']');
		$(this).appendTo(wrapper);
		if (i==count2-1)
		{
			count2=count2+count;
			count3++;
		}
	});

	$('[char-main]').remove();
}

function scrollTo(element, duration)
{
	var destination = $(element).offset().top;
	if (!duration)
	{
		var duration = 0;
	}
	$('body').animate({ scrollTop: destination}, duration );
	$('html').animate({ scrollTop: destination}, duration );
}

/********** END ALL COUNTRIES, RESORTS **********/

/***************** AGENCY *****************/

function agencyLoginField()
{
	var container = $('.controll-login-form');
	
	container.animate({opacity:'show'},300);
	
	$('#controll').css('background-image','url(../images/site/controll_agencies_login.jpg)');
	$('#controll > a.agencies').css('color','#75726c');
	$('#controll').find('a[name=agencies_enter]').addClass('active2');
	container.find('input').focus(function(){
		container.find('.wrong-login-pass:visible').animate({opacity:'hide'},200);
	});

	container
		.find('input#login')
		.focus(
			function()
			{
				if (this.value=='Логин')
				{
					this.value='';
					this.style.color='#000';
				}
			}
		)
		.blur(
			function()
			{
				if (this.value=='')
				{
					this.value='Логин';
					this.style.color='#8f8f8f';
				}
			}
		);

	container
		.find('input#password')
		.focus(
			function()
			{
				container.find('span.pass').hide();
			}
		)
		.blur(
			function()
			{
				if (this.value=='')
				{
					container.find('span.pass').show();
				}
			}
		);

	container
		.find('span.pass:visible')
		.click(
			function()
			{
				container.find('input#password').focus();
			}
		)

	container.find('a.close').click(function(){
		$('.controll-login-form:visible').animate({opacity:'hide'},300);
		$('#controll').css('background-image','url(../images/site/controll_agencies.jpg)');
		$('#controll > a.agencies').css('color','#FFF');
		$('#controll').find('a[name=agencies_enter]').removeClass('active2');
		container.find('.wrong-login-pass:visible').animate({opacity:'hide'},200);
	});
}

function agencyLogin()
{
	var container = $('.controll-login-form');
	var login = container.find('input#login').val();
	var password = container.find('input#password').val();
	var link = '/ajax/index.php?mode=agencyLogin';

	$.post(link, {login: login, password: password},
		function(response)
		{
			if (response == 'success')
			{
				window.location = '/?page=agencyAdmin';
			}
			else
			{
				container.find('.wrong-login-pass').animate({opacity:'show'},200);
			}
		}
	);
}

/*************** END AGENCY ****************/

/************** JQUERY UPLOADIFY *************/

if(jQuery)(
	function(jQuery){
		jQuery.extend(jQuery.fn,{
			uploadify:function(options) {
				jQuery(this).each(function(){
					settings = jQuery.extend({
					id             : jQuery(this).attr('id'), // The ID of the object being Uploadified
					uploader       : 'uploadify.swf', // The path to the uploadify swf file
					script         : 'uploadify.php', // The path to the uploadify backend upload script
					expressInstall : null, // The path to the express install swf file
					folder         : '', // The path to the upload folder
					height         : 30, // The height of the flash button
					width          : 110, // The width of the flash button
					cancelImg      : 'cancel.png', // The path to the cancel image for the default file queue item container
					wmode          : 'opaque', // The wmode of the flash file
					scriptAccess   : 'sameDomain', // Set to "always" to allow script access across domains
					fileDataName   : 'Filedata', // The name of the file collection object in the backend upload script
					method         : 'POST', // The method for sending variables to the backend upload script
					queueSizeLimit : false, // The maximum size of the file queue
					simUploadLimit : 1, // The number of simultaneous uploads allowed
					queueID        : false, // The optional ID of the queue container
					displayData    : 'percentage', // Set to "speed" to show the upload speed in the default queue item
					onInit         : function() {}, // Function to run when uploadify is initialized
					onSelect       : function() {}, // Function to run when a file is selected
					onQueueFull    : function() {}, // Function to run when the queue reaches capacity
					onCheck        : function() {}, // Function to run when script checks for duplicate files on the server
					onCancel       : function() {}, // Function to run when an item is cleared from the queue
					onError        : function() {}, // Function to run when an upload item returns an error
					onProgress     : function() {}, // Function to run each time the upload progress is updated
					onComplete     : function() {}, // Function to run when an upload is completed
					onAllComplete  : function() {}  // Functino to run when all uploads are completed
				}, options);
				jQuery('#files-limit-count span').html(settings.queueSizeLimit);
				jQuery('#'+settings.queueID).find('.file-upload-error').remove();
				var main = jQuery(this);
				var pagePath = location.pathname;
				pagePath = pagePath.split('/');
				pagePath.pop();
				pagePath = pagePath.join('/') + '/';
				var data = {};
				data.uploadifyID = settings.id;
				data.pagepath = pagePath;
				if (settings.buttonImg) data.buttonImg = escape(settings.buttonImg);
				if (settings.buttonText) data.buttonText = escape(settings.buttonText);
				if (settings.rollover) data.rollover = true;
				data.script = settings.script;
				data.folder = escape(settings.folder);
				if (settings.scriptData) {
					var scriptDataString = '';
					for (var name in settings.scriptData) {
						scriptDataString += '&' + name + '=' + settings.scriptData[name];
					}
					data.scriptData = escape(scriptDataString.substr(1));
				}
				data.width          = settings.width;
				data.height         = settings.height;
				data.wmode          = settings.wmode;
				data.method         = settings.method;
				data.queueSizeLimit = settings.queueSizeLimit;
				data.simUploadLimit = settings.simUploadLimit;
				if (settings.hideButton)   data.hideButton   = true;
				if (settings.fileDesc)     data.fileDesc     = settings.fileDesc;
				if (settings.fileExt)      data.fileExt      = settings.fileExt;
				if (settings.multi)        data.multi        = true;
				if (settings.auto)         data.auto         = true;
				if (settings.sizeLimit)    data.sizeLimit    = settings.sizeLimit;
				if (settings.checkScript)  data.checkScript  = settings.checkScript;
				if (settings.fileDataName) data.fileDataName = settings.fileDataName;
				if (settings.queueID)      data.queueID      = settings.queueID;
				if (settings.onInit() !== false) {
					//jQuery(this).css('display','none');
					jQuery(this).html('<div id="' + jQuery(this).attr('id') + 'Uploader"></div>');
					swfobject.embedSWF(settings.uploader, settings.id + 'Uploader', settings.width, settings.height, '9.0.24', settings.expressInstall, data, {'quality':'high','wmode':settings.wmode,'allowScriptAccess':settings.scriptAccess});
					if (settings.queueID == false) {
						jQuery("#" + jQuery(this).attr('id') + "Uploader").after('<div id="' + jQuery(this).attr('id') + 'Queue" class="uploadifyQueue"></div>');
					}
				}
				if (typeof(settings.onOpen) == 'function') {
					jQuery(this).bind("uploadifyOpen", settings.onOpen);
				}
				jQuery(this).bind("uploadifySelect", {'action': settings.onSelect, 'queueID': settings.queueID}, function(event, ID, fileObj) {
					if (event.data.action(event, ID, fileObj) !== false) {
						var byteSize = Math.round(fileObj.size / 1024 * 100) * .01;
						var suffix = 'KB';
						if (byteSize > 1000) {
							byteSize = Math.round(byteSize *.001 * 100) * .01;
							suffix = 'MB';
						}
						var sizeParts = byteSize.toString().split('.');
						if (sizeParts.length > 1) {
							byteSize = sizeParts[0] + '.' + sizeParts[1].substr(0,2);
						} else {
							byteSize = sizeParts[0];
						}
						if (fileObj.name.length > 20) {
							fileName = fileObj.name.substr(0,20) + '...';
						} else {
							fileName = fileObj.name;
						}
						queue = '#' + jQuery(this).attr('id') + 'Queue';
						if (event.data.queueID) {
							queue = '#' + event.data.queueID;
						}
						jQuery(queue).append('<div id="' + jQuery(this).attr('id') + ID + '" class="uploadifyQueueItem">\
								<div class="cancel">\
									<a href="javascript:jQuery(\'#' + jQuery(this).attr('id') + '\').uploadifyCancel(\'' + ID + '\')"><img src="' + settings.cancelImg + '" border="0" /></a>\
								</div>\
								<span class="fileName">' + fileName + ' (' + byteSize + suffix + ')</span><span class="percentage"></span>\
								<div class="uploadifyProgress">\
									<div id="' + jQuery(this).attr('id') + ID + 'ProgressBar" class="uploadifyProgressBar"><!--Progress Bar--></div>\
								</div>\
							</div>');
					}
				});
				if (typeof(settings.onSelectOnce) == 'function') {
					jQuery(this).bind("uploadifySelectOnce", settings.onSelectOnce);
				}
				jQuery(this).bind("uploadifyQueueFull", {'action': settings.onQueueFull}, function(event, queueSizeLimit) {
					if (event.data.action(event, queueSizeLimit) !== false) {
						//alert('The queue is full.  The max size is ' + queueSizeLimit + '.');
						jQuery('#'+settings.queueID).find('.file-upload-error').remove();
						$('<div class="file-upload-error">Вы не можете загрузить больше ' + queueSizeLimit + ' файлов</div>').prependTo('#'+settings.queueID);
					}
				});
				jQuery(this).bind("uploadifyCheckExist", {'action': settings.onCheck}, function(event, checkScript, fileQueueObj, folder, single) {
					var postData = new Object();
					postData = fileQueueObj;
					postData.folder = pagePath + folder;
					if (single) {
						for (var ID in fileQueueObj) {
							var singleFileID = ID;
						}
					}
					jQuery.post(checkScript, postData, function(data) {
						for(var key in data) {
							if (event.data.action(event, checkScript, fileQueueObj, folder, single) !== false) {
								var replaceFile = confirm("Do you want to replace the file " + data[key] + "?");
								if (!replaceFile) {
									document.getElementById(jQuery(event.target).attr('id') + 'Uploader').cancelFileUpload(key, true,true);
								}
							}
						}
						if (single) {
							document.getElementById(jQuery(event.target).attr('id') + 'Uploader').startFileUpload(singleFileID, true);
						} else {
							document.getElementById(jQuery(event.target).attr('id') + 'Uploader').startFileUpload(null, true);
						}
					}, "json");
				});
				jQuery(this).bind("uploadifyCancel", {'action': settings.onCancel}, function(event, ID, fileObj, data, clearFast) {
					if (event.data.action(event, ID, fileObj, data, clearFast) !== false) {
						var fadeSpeed = (clearFast == true) ? 0 : 250;
						jQuery("#" + jQuery(this).attr('id') + ID).fadeOut(fadeSpeed, function() { jQuery(this).remove() });
					}
				});
				if (typeof(settings.onClearQueue) == 'function') {
					jQuery(this).bind("uploadifyClearQueue", settings.onClearQueue);
				}
				var errorArray = [];
				jQuery(this).bind("uploadifyError", {'action': settings.onError}, function(event, ID, fileObj, errorObj) {
					if (event.data.action(event, ID, fileObj, errorObj) !== false) {
						var fileArray = new Array(ID, fileObj, errorObj);
						errorArray.push(fileArray);
						jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(" - " + errorObj.type + " Error");
						jQuery("#" + jQuery(this).attr('id') + ID).addClass('uploadifyError');
					}
				});
				jQuery(this).bind("uploadifyProgress", {'action': settings.onProgress, 'toDisplay': settings.displayData}, function(event, ID, fileObj, data) {
					if (event.data.action(event, ID, fileObj, data) !== false) {
						jQuery("#" + jQuery(this).attr('id') + ID + "ProgressBar").css('width', data.percentage + '%');
						if (event.data.toDisplay == 'percentage') displayData = ' - ' + data.percentage + '%';
						if (event.data.toDisplay == 'speed') displayData = ' - ' + data.speed + 'KB/s';
						if (event.data.toDisplay == null) displayData = ' ';
						jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(displayData);
					}
				});
				jQuery(this).bind("uploadifyComplete", {'action': settings.onComplete}, function(event, ID, fileObj, response, data) {
					if (event.data.action(event, ID, fileObj, unescape(response), data) !== false) {
						//jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(' - Загружено');
						//jQuery("#" + jQuery(this).attr('id') + ID).fadeOut(250, function() { jQuery(this).remove()});
						
						var container = jQuery("#" + main.attr('id') + ID);

						container.html(unescape(response)).find('.fileResponse').animate({opacity:'show'},500);

						container.find('.fileDelete span').click(function(){
							var imgSmall = container.find('.filePreview').attr('imgSmall');
							var imgBig = container.find('.filePreview').attr('imgBig');
							jQuery('#'+settings.queueID).find('.file-upload-error').remove();

							jQuery.post('/ajax/index.php?mode=flashFilesUpload&del', {small: imgSmall, big: imgBig},
								function()
								{
									container.fadeOut(250,
										function()
										{
											jQuery(this).remove();

											var count = $('#'+settings.queueID).find('.fileResponse').length;
											var newLimit = settings.queueSizeLimit-count;
											
											if (count < settings.queueSizeLimit)
											{
												main.parent().show(250);
											}

											main.uploadifySettings('queueSizeLimit',newLimit);
											jQuery('#files-limit-count span').html(newLimit);
										}
									);
								}
							);
						});	

						var count = $('#'+settings.queueID).find('.fileResponse').length;
						var newLimit = settings.queueSizeLimit-count;
						main.uploadifySettings('queueSizeLimit',newLimit);
						jQuery('#files-limit-count span').html(newLimit);
						if (count >= settings.queueSizeLimit)
						{
							main.parent().hide(250);
						}
					}
				});
				if (typeof(settings.onAllComplete) == 'function') {
					jQuery(this).bind("uploadifyAllComplete", {'action': settings.onAllComplete}, function(event, uploadObj) {
						if (event.data.action(event, uploadObj) !== false) {
							errorArray = [];
						}
					});
				}
			});
		},
		uploadifySettings:function(settingName, settingValue, resetObject) {
			var returnValue = false;
			jQuery(this).each(function() {
				if (settingName == 'scriptData' && settingValue != null) {
					if (resetObject) {
						var scriptData = settingValue;
					} else {
						var scriptData = jQuery.extend(settings.scriptData, settingValue);
					}
					var scriptDataString = '';
					for (var name in scriptData) {
						scriptDataString += '&' + name + '=' + escape(scriptData[name]);
					}
					settingValue = scriptDataString.substr(1);
				}
				returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);
			});
			if (settingValue == null) {
				if (settingName == 'scriptData') {
					var returnSplit = unescape(returnValue).split('&');
					var returnObj   = new Object();
					for (var i = 0; i < returnSplit.length; i++) {
						var iSplit = returnSplit[i].split('=');
						returnObj[iSplit[0]] = iSplit[1];
					}
					returnValue = returnObj;
				}
				return returnValue;
			}
		},
		uploadifyUpload:function(ID) {
			jQuery(this).each(function() {
				document.getElementById(jQuery(this).attr('id') + 'Uploader').startFileUpload(ID, false);
			});
		},
		uploadifyCancel:function(ID) {
			jQuery(this).each(function() {
				document.getElementById(jQuery(this).attr('id') + 'Uploader').cancelFileUpload(ID, true, false);
			});
		},
		uploadifyClearQueue:function() {
			jQuery(this).each(function() {
				document.getElementById(jQuery(this).attr('id') + 'Uploader').clearFileUploadQueue(false);
			});
		}
	})
})(jQuery);

/************** END JQUERY UPLOADIFY *************/

/************** TEXTSHADOW ****************/

(function($){

	var dropShadowZindex = 1;  //z-index counter

	$.fn.dropShadow = function(options)
	{
		// Default options
		var opt = $.extend({
			left: 4,
			top: 4,
			blur: 2,
			opacity: .5,
			color: "black",
			swap: false
			}, options);
		var jShadows = $([]);  //empty jQuery collection
		
		// Loop through original elements
		this.not(".dropShadow").each(function()
		{
			var jthis = $(this);
			var shadows = [];
			var blur = (opt.blur <= 0) ? 0 : opt.blur;
			var opacity = (blur == 0) ? opt.opacity : opt.opacity / (blur * 8);
			var zOriginal = (opt.swap) ? dropShadowZindex : dropShadowZindex + 1;
			var zShadow = (opt.swap) ? dropShadowZindex + 1 : dropShadowZindex;
			
			// Create ID for shadow
			var shadowId;
			if (this.id) {
				shadowId = this.id + "_dropShadow";
			}
			else {
				shadowId = "ds" + (1 + Math.floor(9999 * Math.random()));
			}

			// Modify original element
			$.data(this, "shadowId", shadowId); //store id in expando
			$.data(this, "shadowOptions", options); //store options in expando
			jthis
				.attr("shadowId", shadowId)
				.css("zIndex", zOriginal);
			if (jthis.css("position") != "absolute") {
				jthis.css({
					position: "relative",
					zoom: 1 //for IE layout
				});
			}

			// Create first shadow layer
			bgColor = jthis.css("backgroundColor");
			if (bgColor == "rgba(0, 0, 0, 0)") bgColor = "transparent";  //Safari
			if (bgColor != "transparent" || jthis.css("backgroundImage") != "none" 
					|| this.nodeName == "SELECT" 
					|| this.nodeName == "INPUT"
					|| this.nodeName == "TEXTAREA") {		
				shadows[0] = $("<div></div>")
					.css("background", opt.color);								
			}
			else {
				shadows[0] = jthis
					.clone()
					.removeAttr("id")
					.removeAttr("name")
					.removeAttr("shadowId")
					.css("color", opt.color);
			}
			shadows[0]
				.addClass("dropShadow")
				.css({
					height: jthis.outerHeight(),
					left: blur,
					opacity: opacity,
					position: "absolute",
					top: blur,
					width: jthis.outerWidth(),
					zIndex: zShadow
				});
				
			// Create other shadow layers
			var layers = (8 * blur) + 1;
			for (i = 1; i < layers; i++) {
				shadows[i] = shadows[0].clone();
			}

			// Position layers
			var i = 1;			
			var j = blur;
			while (j > 0) {
				shadows[i].css({left: j * 2, top: 0});           //top
				shadows[i + 1].css({left: j * 4, top: j * 2});   //right
				shadows[i + 2].css({left: j * 2, top: j * 4});   //bottom
				shadows[i + 3].css({left: 0, top: j * 2});       //left
				shadows[i + 4].css({left: j * 3, top: j});       //top-right
				shadows[i + 5].css({left: j * 3, top: j * 3});   //bottom-right
				shadows[i + 6].css({left: j, top: j * 3});       //bottom-left
				shadows[i + 7].css({left: j, top: j});           //top-left
				i += 8;
				j--;
			}

			// Create container
			var divShadow = $("<div></div>")
				.attr("id", shadowId) 
				.addClass("dropShadow")
				.css({
					left: jthis.position().left + opt.left - blur,
					marginTop: jthis.css("marginTop"),
					marginRight: jthis.css("marginRight"),
					marginBottom: jthis.css("marginBottom"),
					marginLeft: jthis.css("marginLeft"),
					position: "absolute",
					top: jthis.position().top + opt.top - blur,
					zIndex: zShadow
				});

			// Add layers to container	
			for (i = 0; i < layers; i++) {
				divShadow.append(shadows[i]);
			}
			
			// Add container to DOM
			jthis.after(divShadow);

			// Add shadow to return set
			jShadows = jShadows.add(divShadow);

			// Re-align shadow on window resize
			$(window).resize(function()
			{
				try {
					divShadow.css({
						left: jthis.position().left + opt.left - blur,
						top: jthis.position().top + opt.top - blur
					});
				}
				catch(e){}
			});
			
			// Increment z-index counter
			dropShadowZindex += 2;

		});  //end each
		
		return this.pushStack(jShadows);
	};


	$.fn.redrawShadow = function()
	{
		// Remove existing shadows
		this.removeShadow();
		
		// Draw new shadows
		return this.each(function()
		{
			var shadowOptions = $.data(this, "shadowOptions");
			$(this).dropShadow(shadowOptions);
		});
	};


	$.fn.removeShadow = function()
	{
		return this.each(function()
		{
			var shadowId = $(this).shadowId();
			$("div#" + shadowId).remove();
		});
	};


	$.fn.shadowId = function()
	{
		return $.data(this[0], "shadowId");
	};


	$(function()  
	{
		// Suppress printing of shadows
		var noPrint = "<style type='text/css' media='print'>";
		noPrint += ".dropShadow{visibility:hidden;}</style>";
		$("head").append(noPrint);
	});

})(jQuery);



$(document).ready(function(){
	var is_chrome = false, chrome_version = false;
	if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
		is_chrome = true;
		chrome_version = navigator.userAgent.replace(/^.*Chrome\/([\d\.]+).*$/i, '$1')
		if (is_chrome && chrome_version < '2')
		{
			$("#Sezon span[class!=sezon-price]").dropShadow({
				color:"#000",
				left:1,
				top:-6,
				opacity:1,
				blur:1
			});

			$("#Sezon span.sezon-price").css('margin-top','-10px').dropShadow({
				color:"#000",
				left:1,
				top:12,
				opacity:1,
				blur:1
			});

			$("#Sezon a").dropShadow({
				color:"#000",
				left:1,
				top:18,
				opacity:1,
				blur:1
			});
		}
	}
	if($.browser.msie)
	{
		if ($.browser.version < '8')
		{
			$("#Sezon span").dropShadow({
					color:"#000",
					left:1,
					top:2,
					opacity:1,
					blur:1
				});

				$("#Sezon a").dropShadow({
					color:"#000",
					left:1,
					top:2,
					opacity:1,
					blur:1
				});
		}
		else
		{
			$("#Sezon span[class!=sezon-price]").dropShadow({
					color:"#000",
					left:1,
					top:-3,
					opacity:1,
					blur:1
				});

			$("#Sezon span.sezon-price").dropShadow({
				color:"#000",
				left:1,
				top:2,
				opacity:1,
				blur:1
			});

				$("#Sezon a").dropShadow({
					color:"#000",
					left:1,
					top:20,
					opacity:1,
					blur:1
				});
		}
	}
});

/************** END TEXTSHADOW ****************/