var
	slideSpeed = 3000, // скорость (мс) смещения одного слайда в карусели
	shadowSpeed = 500, // время (мс) появления тени
	windowSpeed = 300, // время (мс) появления окошка
	windowPadding = 20, // отступ окошка от окна в случае скролла
	viewerSpeed = 500; // скорость исчезновения/появления фотографии в просмотрщике

var // скорости (мс) смещения слайдов
	photoPeriod = 1000, // фото
	articlePeriod = 1000, // статьи
	bankPeriod = 2000; // банки

var // прочие переменные
	$window = null, // ссылка на окошко (null - никакое окошко  не открыто)
	windowDelta = 0, // текущее смещение (px) окошка относительно нормального положения
	windowDeltaTop = 0, // верхняя граница смещения окошко для текущей картинки
	windowDeltaBottom = 0, // нижняя граница смещения окошко для текущей картинки
	windowMutex = 1, // мьютекс окошка (для скролла)
	$photoLinks, // список ссылок на большие версии фотографий
	currentPhoto, // индекс (в списке) ссылки на отображаемую большую фотографию
	isViewer = false; // открыт ли просмотрщик изображений

$(document).ready(function(){

	// фокус и потеря фокуса текстовых полей с подсказками

	$(".autohiding").each( function() {
   		$(this).val($(this).attr("title"));
	}).focus( function() {
		if ( $(this).hasClass("pure") ) {
			$(this).val("");
			$(this).removeClass("pure");
		}
	}).blur( function() {
    	if ( trim($(this).val()) == "" ) {
       		$(this).val( $(this).attr("title") );
			$(this).addClass("pure");
    	}
	});

	// очищаем формы от подсказок перед отправкой

	$("form").submit(function(){
		$(".pure").val("");
	});

	// ролловеры

	makeHover( ".triggers li", "hover" );
	makeHover( ".house-triggers li", "hover" );
	makeHover( ".photo-cycle .btn", "hover" );
	makeHover( ".article-cycle .btn", "hover" );
	makeHover( ".bank-cycle .btn", "hover" );
	makeHover( ".report-cycle .btn", "hover" );
	makeHover( ".big-report .btn", "hover" );

	if ( $.browser.msie && $.browser.version < 7 ) {
		makeHover( ".flats tr", "hover" );
		makeHover( ".big-report ul a", "hover" );
	}

	$(".submit-btn").mouseover(function(){
		$(this).addClass("submit-btn-hover");
	}).mouseout(function(){
		$(this).removeClass("submit-btn-hover");
		$(this).removeClass("submit-btn-press");
	}).mousedown(function(){
		$(this).addClass("submit-btn-press");
	}).mouseup(function(){
		$(this).removeClass("submit-btn-press");
	});

	// переключение вкладок

	$(".tabs div").hover(function(){ // наведение мыши

		// добавляем на язычок подсветку
		if ( ! $(this).hasClass("selected") )
			$(this).addClass("hover");

		// обновляем стыки язычков
		updateTabs( $(this).parent() );

	}, function(){ // отведение мыши

		// убираем с язычка подсветку
		$(this).removeClass("hover");

		// обновляем стыки язычков
		updateTabs( $(this).parent() );

	}).click(function(){ // клик

		if ( ! $(this).hasClass("selected") ) {

			// переключаем язычок
			$(this).siblings(".selected").removeClass("selected");
			$(this).removeClass("hover").addClass("selected");

			// обновляем стыки язычков
			updateTabs( $(this).parent() );

			// переключаем вкладку
			$tabs = $(this).parent(); // язычки
			$insets = $tabs.siblings(".insets").first(); // вкладки
			var newInset = $tabs.find("div").index( $(this) ); // индекс открываемой владки
			var $currentInset = $insets.find(".visible"); // текущая вкладка
			$insets.find(".inset").eq( newInset ).addClass("visible"); // делаем открываемую вкладку видимой
			$currentInset.removeClass("visible"); // делаем закрываемую вкладку невидимой

		}
	});

	// карусели

	setCarousel( $(".photo-cycle"), 3, photoPeriod, false);
	setCarousel( $(".article-cycle"), 1, articlePeriod, false );
	setCarousel( $(".bank-cycle"), 3, bankPeriod, true );
	setCarousel( $(".report-cycle"), 6, photoPeriod, false );
	setCarousel( $(".report"), 4, photoPeriod, true );
	setCarousel( $(".big-report:not(.photo-reports)"), 3, photoPeriod, false );

	// подсветка рамки фотографий при наведении мыши

	$(".photo-cycle ul li a").hover(function(){
		$(this).parent().addClass("hover");
	}, function(){
		$(this).parent().removeClass("hover");
	});

	// наведение мыши на иконки на карте

	$(".map .icon").hover(function( e ){

		$("#tip").find(".tip-content").html( $(this).html() );
		moveTip( e.pageX, e.pageY );

	}, function(){

		$("#tip").css(
			"left", "-999px"
		).css(
			"top", "-999px"
		);

	}).mousemove(function( e ){

		moveTip( e.pageX, e.pageY );

	});

	// делаем ссылки и изображения в карусели статей единым целым

	$(".article-cycle img").hover(function(){
		$(this).parentsUntil("div").last().parent().find("a:eq(1)").addClass("hover");
	}, function(){
		$(this).parentsUntil("div").last().parent().find("a:eq(1)").removeClass("hover");
	});

	// переключение триггеров (новости, фотоотчеты)

	$(".triggers li").click(function(){
		if ( ! $(this).hasClass("selected") ) {

			$(this).siblings(".selected").removeClass("selected");
			$(this).addClass("selected");

			var index = $(this).parent().find("li").index( $(this) );
			var $layerSet = $(this).parent().parent();
			var $currentLayer = $layerSet.find(".visible");
			$layerSet.find(".layer").eq(index).addClass("visible");
			$currentLayer.removeClass("visible");
 		}
	});

	// переключение триггеров на странице дома

	$(".house-triggers li").click(function(){
		if ( ! $(this).hasClass("selected") && ! $(this).parent().hasClass("no-click") ) {

			$(this).parent().addClass("no-click");

			$(this).siblings(".selected").removeClass("selected");
			$(this).addClass("selected");

			var
				index = $(this).parent().find("li").index( $(this) ),
				$nextLayer = $(".house-layer").eq(index),
				$currentLayer = $(".house-layer.open"),
				$layers = $(".house-layers");

			$layers.height( $currentLayer.outerHeight() );
			$currentLayer.slideUp( 500, function(){
				$layers.animate({
					height: $nextLayer.attr("h")//outerHeight()
				}, 500, function(){
					$nextLayer.height( $nextLayer.attr("h") );
					$nextLayer.slideDown(500, function() {
						map.redraw(); }).addClass("open");
					$(".house-triggers").removeClass("no-click");
				});
			}).removeClass("open");
		}
	});

	// ДОПОЛНЕНИЯ

	$(".house-layer").each(function(){
		$(this).attr( "h", $(this).outerHeight() );
	});
	$(".house-layer").not(".visible").css("display", "none");

	// открываем окошки

	$(".plan-preview").click(function(){
		showWindow( $(".plan") );
		return false;
	});

	// окошко закрывается по ECS

	$("html").keydown(function(e){
		if ( e.keyCode == 27 )
			hideWindow();
	});

	// окошко закрывается по клику на "отменить"

	$(".window .close, .plan img").click(function(){
		hideWindow();
		return false;
	});

	// выравниваем окошко по вертикали при ресайзе окна

	$(window).resize(function(){
		updateWindowPosition();
	}).scroll(function(){
		if ( windowMutex )
			updateWindowPosition();
	});

	// связываем список квартир с содержимым их окошек

	$(".flats tr").each(function(i){
		if ( i ) {
			var rnd = Math.round( Math.random() * 1000000000000 );
			$(this).attr( "id", "fp-" + rnd );
			$(".flat-plans").children("div").eq(i - 1).attr( "id", "fp-" + rnd + "-content" );
		}
	});

	// открываем планы квартир

	$(".flats tr:not(:eq(0))").click(function(){

		// копируем контент
		var $windowContent = $("#" + $(this).attr("id") + "-content");
		$(".flat-plan .window-content").html(
			$windowContent.html()
		);

		// вертикальная карусель в окошке с планом квартиры
		var rnd = Math.round( Math.random() * 1000000000000 );
		var left = $(".flat-plan").find(".btn-up").attr( "id", "btn-up-" + rnd ).attr("id");
		var right = $(".flat-plan").find(".btn-down").attr( "id", "btn-down-" + rnd ).attr("id");
		$(".flat-plan .v-gallery").jCarouselLite({
			visible: 4,
			auto: 0,
			speed: slideSpeed / 2,
			easing: "jswing",
			circular: true,
			vertical: true,
			start: $windowContent.find("li").index( $windowContent.find(".selected") ),
			btnPrev: "#" + left,
			btnNext: "#" + right
		});

		var planMutex = 1;

		// переключение фотографий
		$(".flat-plan .v-gallery a").click(function(){

			if ( ! $(this).parent().hasClass("selected") && planMutex ) {

				planMutex = 0;

				// перемещаем рамку в превьюшках
				$(".flat-plan .v-gallery .selected").removeClass("selected");
				$(this).parent().addClass("selected");

				var
					$loader = $(".flat-plan .loader"),
					$image = $(".flat-plan .big-photo"),
					imgSrc = $image.get(0).src,
					newSrc = $(this).attr("href");

				var img = new Image();
				img.src = newSrc;

				if ( imgSrc != img.src ) { // если это не то же самое изображение

					$image.animate({ // прячем старую фотографию
						opacity: 0
					}, viewerSpeed, function(){

						$loader.removeClass("none");

						img = new Image();

						$(img).load(function(){
							$loader.addClass("none");
							$image.attr(
								"src", img.src
							).animate({ // показываем новую фотографию
								opacity: 1
							}, viewerSpeed, function(){
								planMutex = 1;
							});
						});

						img.src = newSrc;
					});
				}
			}

			return false;

		});

		// показываем окошко
		showWindow( $(".flat-plan") );

	});

	// отображение фотографий в просмотрщике

	if ( $(".gallery").length )
		$photoLinks = $(".gallery a");

	$(".gallery a").click(function(){
		$(".viewer").css( "left", ( $("body").width() - $(".viewer").width() ) / 2 + "px" );
		currentPhoto = $photoLinks.index( $(this) );
		updatePhoto( true, function(){
			showWindow( $(".viewer"), function(){
				isViewer = true;
			});
		});

		return false;
	});

	var photoMutex = 1;

	$(".viewer .btn").click(function(){

		if ( photoMutex ) {

			photoMutex = 0;

			currentPhoto += ( $(this).hasClass("right-btn") ? 1 : -1 );

			// зацикливаем просмотр

			if ( currentPhoto < 0 )
				currentPhoto = $photoLinks.length - 1;

			if ( currentPhoto > $photoLinks.length - 1 )
				currentPhoto = 0;

			updatePhoto(false, function(){
				photoMutex = 1;
			});
		}
	});

	// клик по текущей фотографии загружает следующую

	$(".viewer .window-content img").live("click", function(){
		$(".viewer .right-btn").click();
	});

	// скролл лайтбокса

	var oldScrollTop = $(document).scrollTop();

	$(window).scroll(function(){

		if ( $window ) {

			var newScrollTop = $(document).scrollTop();

			var padding = 20;

			if ( newScrollTop <= oldScrollTop && windowDelta < windowDeltaTop  )
				windowDelta = windowDeltaTop;

			if ( newScrollTop >= oldScrollTop && windowDelta > windowDeltaBottom )
				windowDelta = windowDeltaBottom;
		}

		oldScrollTop = newScrollTop;
	});

	// курсор на активных областях тени

	$(".shadow").mousemove(function(e){

		if ( $window != null && isViewer ) {

			var mouseX = e.pageX;
			var mouseY = e.pageY - $(document).scrollTop();
			var left = $window.offset().left;
			var right = left + $window.width();
			var top = parseInt( $window.css("top") );
			var bottom = top + $window.height();

			if ( mouseY > top && mouseY < bottom ) {

				if ( mouseX < left ) {
					$(this).addClass("go-prev");
					$(".viewer .left-btn").addClass("hover");
				} else {
					$(this).removeClass("go-prev");
					$(".viewer .left-btn").removeClass("hover");
				}

				if ( mouseX > right ) {
					$(this).addClass("go-next");
					$(".viewer .right-btn").addClass("hover");
				} else {
					$(this).removeClass("go-next");
					$(".viewer .right-btn").removeClass("hover");
				}

			} else {
				$(this).removeClass("go-prev");
				$(this).removeClass("go-next");
			}
		}
	});

	$(".window").mousemove(function(){
		$(".viewer .btn").removeClass("hover");
	});

	// клик вне лайтбокса

	$(".shadow").click(function(){

		if ( $window != null && isViewer ) {
			if ( $(this).hasClass("go-prev") )
				$(".viewer .left-btn").click();
			else
				if ( $(this).hasClass("go-next") )
					$(".viewer .right-btn").click();
				else
					hideWindow();
		} else
			if ( $window != null )
				hideWindow();

	});

	// селекты

	function updateSelectWidth( $obj ) { // обновляет ширину селекта
		var $select = $obj.find(".jNiceSelectText");
		$select.html("<span>" + $select.text() + "</span>");

		var width = $select.find("span").width();
		$select.attr("style", "width:" + width + "px !important;");
		$select.parent().parent().attr("style", "width:" + (width + 32) + "px !important");
		$select.parent().parent().find("ul").attr("style", "width:" + (width + 25) + "px !important");
	}

	updateSelectWidth( $(".header-date .jNiceSelectWrapper") );
	$(".header-date .jNiceSelectWrapper ul a").click(function(){
		updateSelectWidth( $(".header-date .jNiceSelectWrapper") );
	});

	// сортировка таблицы

	if ( $(".all-flats").length )
		$(".all-flats").tablesorter({
			sortList: [[1,0]],
			headers: { 0: { sorter: false} },
			after: function(){
				$(".all-flats .odd").removeClass("odd");
				$(".all-flats tbody tr:even").addClass("odd");
			}
		});

	// ползунки

	$(".range").each(function(k){

		var
			$range = $(this),
			$scale = $range.find(".scale"),
			markCount = $range.find(".marks").val(),
			min = parseFloat( $range.find(".min").val() ),
			max = parseFloat( $range.find(".max").val() ),
			$from = $range.find(".from"),
			from = parseFloat( $from.val() ),
			$to = $range.find(".to"),
			to = parseFloat( $to.val() ),
			$leftSlider = $range.find(".from-slider"),
			$left = $leftSlider.find("div"),
			$rightSlider = $range.find(".to-slider"),
			$right = $rightSlider.find("div"),
			$selected = $range.find(".selected"),
			prec = parseInt( $range.find(".precision").val() );

		for ( var i = 0; i < markCount; i++ ) {
			var left = i * $scale.width() / (markCount - 1);
			if ( i == markCount - 1 )
				left--;
			$('<span style = "left: ' + left + 'px"></span>').appendTo( $scale );
		}

		var
			leftX = $range.width() * (from - min) / (max - min),
			rightX = $range.width() * (to - min) / (max - min);

		$leftSlider.css( "left", leftX + "px" );
		$rightSlider.css( "left", rightX + "px" );

		$selected.width(rightX - leftX + 3).css("left", leftX - 1 + "px");

		$left.text( from );
		$right.text( to );

		// левый ползунок

		$leftSlider.draggable({
			axis: "x",
			containment: [$range.position().left, 0, $range.position().left + $range.width(), 0],
			drag: function(event, ui) {
				var result = true;
				leftX = parseInt( $(this).css("left") );
				if ( leftX > rightX - 1 ) {
					leftX = rightX - 1;
					$(this).css( "left", leftX - 1 + "px");
					result = false;
				}
				$selected.width(rightX - leftX + 1).css("left", leftX + "px");

				var p = Math.pow( 10, prec );
				var val = min + (max - min) * leftX / $range.width();
				val = Math.round(val * p) / p;
				$left.text( val );
				$from.val( val );

				return result;
			},
			stop: function() {
				var result = true;
				leftX = parseInt( $(this).css("left") );
				if ( leftX > rightX - 1 ) {
					leftX = rightX - 1;
					$(this).css( "left", leftX - 1 + "px");
					result = false;
				}
				$selected.width(rightX - leftX + 1).css("left", leftX + "px");

				var p = Math.pow( 10, prec );
				var val = min + (max - min) * leftX / $range.width();
				val = Math.round(val * p) / p;
				$left.text( val );
				$from.val( val );

				return result;
			}
		});

		// правый ползунок

		$rightSlider.draggable({
			axis: "x",
			containment: [$range.position().left, 0, $range.position().left + $range.width(), 0],
			drag: function(event, ui) {
				var result = true;
				rightX = parseInt( $(this).css("left") );
				if ( leftX > rightX - 1 ) {
					rightX = leftX + 1;
					$(this).css( "left", rightX + 1 + "px");
					result = false;
				}
				$selected.width(rightX - leftX + 1).css("left", leftX + "px");

				var p = Math.pow( 10, prec );
				var val = min + (max - min) * rightX / $range.width();
				val = Math.round(val * p) / p;
				$right.text( val );
				$to.val( val );

				return result;
			},
			stop: function() {
				var result = true;
				rightX = parseInt( $(this).css("left") );
				if ( leftX > rightX - 1 ) {
					rightX = leftX + 1;
					$(this).css( "left", rightX + 1 + "px");
					result = false;
				}
				$selected.width(rightX - leftX + 1).css("left", leftX + "px");

				var p = Math.pow( 10, prec );
				var val = min + (max - min) * rightX / $range.width();
				val = Math.round(val * p) / p;
				$right.text( val );
				$to.val( val );

				return result;
			}
		});

	});

});

function screenHeight() { // возвращает высоту рабочей области браузера
	return $.browser.opera ? window.innerHeight : $(window).height();
}

function updatePhoto( instantly, func )
{// обновляет фотографию в просмотрщике в соответствии с текущим состоянием

	func = func || function(){};
	var viewerSpeed = ( instantly ? 0 : viewerSpeed );

	var
		$photoLink = $photoLinks.eq(currentPhoto),
		$viewer = $(".viewer"),
		$loader = $viewer.find(".loader"),
		$image = $viewer.find(".window-content img"),
		imgWidth = $image.width(),
		imgHeight = $image.height(),
		imgSrc = $image.get(0).src,
		newSrc = $photoLink.attr("href"),
		pHeight = $viewer.find("p").height();

	if ( imgSrc.indexOf(newSrc) == -1 ) { // если это не то же самое изображение

		windowMutex = 0;
		windowDelta = 0;

		$image.animate({
			opacity: 0
		}, viewerSpeed, function(){

			$viewer.find("p").addClass("transparent");

			// показываем загрузчик
			$loader.css(
				"left", ( $viewer.width() - $loader.width() ) / 2 + "px"
			).css(
				"top", ( $image.position().top + imgHeight - $loader.height() ) / 2 +  "px"
			).removeClass(
				"none"
			);

			var img = new Image();


			// когда фотография загрузилась
			$(img).load(function(){

				$loader.addClass("none");


                var w = $(window).width()-100;
                var h = $(window).height()-65;

				if (img.width>w) {
					img.height=Math.round((img.height*w)/img.width);
					img.width=w;
				}
				if (img.height>h) {
					img.width=Math.round((img.width*h)/img.height);
					img.height=h;
				}

				var widthDelta = img.width - imgWidth;
				var heightDelta = ( img.height - imgHeight );

				// изменяем размеры окошка

				$viewer.find(".btn").animate({
					top: "+=" + heightDelta / 2
				}, viewerSpeed);

				$viewer.find(".window-content").animate({
					height: img.height
				}, viewerSpeed);

				$viewer.animate({
					width: "+=" + widthDelta,
					left: "-=" + widthDelta / 2,
					top: "-=" + heightDelta / 2
				}, viewerSpeed, function(){

		  			// вставляем новую фотографию

					$(this).find(".window-content").html(
						'<img class = "transparent" src = "' + img.src + '" width = "' + img.width +
						'" height = "' + img.height + '" title = "" alt = "" />' +
						'<p class = "none">' + $photoLink.attr("title") + '</p>'
					).css("height", "auto");

					$(this).find(".window-content").find("img").animate({
						opacity: 1
					}, viewerSpeed);

					// показываем подпись

					$(this).find("p").slideDown(viewerSpeed, function(){

						updateWindowPosition(function(){
							func();
							getDeltas();
							windowMutex = 1;
						});

					});
				})
			});

			img.src = newSrc;

		});
	} else
	 	func();

}


function setCarousel( $obj, count, period, circ )
{// устанавливает карусель в объекте $obj с количеством видимых элементов равным count

	$obj.each(function(){
		var left = $(this).find(".left-btn").attr("id");
		var right = $(this).find(".right-btn").attr("id");

		$(this).find(".cycle-block").jCarouselLite({
			visible: count,
			auto: (circ ? period : 0),
			speed: (circ ? slideSpeed : slideSpeed / 2),
			easing: "jswing",
			circular: circ,
			btnPrev: "#" + left,
			btnNext: "#" + right,
			afterEnd: function(a){
				if ( !circ ) {
					var current = $(this).find("li").index( a.eq(0) );

					if ( current <= 0 )
						$("#" + left).addClass("dead-btn");
					else
						$("#" + left).removeClass("dead-btn");

					if ( current >= $(this).find("li").length - count )
						$("#" + right).addClass("dead-btn");
					else
						$("#" + right).removeClass("dead-btn");
				}
			}
		});
	});
}


function moveTip( x, y )
{// обновляет позицию всплывающей подсказки в карте

	var $tip = $("#tip");

	$tip.css(
		"left", x + 2 + "px"
	).css(
		"top",  y - $tip.height() - 3 + "px"
	);
}


function updateTabs( $tabs )
{// обновляет внешний вид стыков язычков вкладок в соответствии с состоянием язычков

	$tabs.find("span").each(function(i){

		// обозначения язычков слева и справа от стыков
		// n - нормальный
		// h - подсвеченный
		// s - выбранный
		// e - нет
		var left,
		    right;

		var className; // класс рассматриваемого язычка

		// определяем какой язычок слева
		if ( ! $(this).prev().length )
			left = "e";
		else {
			className = $(this).prev().attr("class");
			left = className.replace(
				"hover", "h"
			).replace(
				"selected", "s"
			);
			if ( left == "" )
				left = "n";
		}

		// определяем какой язычок справа
		if ( ! $(this).next().length )
			right = "e";
		else {
			className = $(this).next().attr("class");
			right = className.replace(
				"hover", "h"
			).replace(
				"selected", "s"
			);
			if ( right == "" )
				right = "n";
		}

		// присваиваем стыку соответствующий класс
		$(this).attr( "class", left + right );
	});
}

function getDeltas()
{// считает допустимое смещение окошка
	if ( $window != null ) {
		windowDeltaTop = windowPadding - parseInt( $window.css("top") );
		windowDeltaBottom = - ( parseInt( $window.css("top") ) + $window.height()
	    	                    - (screenHeight() - windowPadding) );
	}
}


function showWindow( $obj, func )
{// открывает окошко

	func = func || function(){};

	// показываем тень
	shadow( 0.5, function(){
		$window = $obj;
		$window.animate({
			top: ( $("body").height() - $window.height() ) / 2
		}, windowSpeed, function(){
			func();
			getDeltas();
		});
	});
}

function hideWindow()
{// закрывает окошко

	// скрываем окошко
	$window.animate({
		top: - $window.height() - 500
	}, windowSpeed, function(){
		$window = null;
		shadow( 0, function(){ // скрываем тень
			isViewer = false;
		});
	});
}

function updateWindowPosition( func )
{// центрует окошко по вертикали

	func = func || function(){};

	if ( $window != null ) {// если окошко видно

		if ( isViewer )
			$window.stop().animate({
				top: ( ( $.browser.msie && $.browser.version < 7 ) ?
				       $(document).scrollTop() + ( $("body").height() - $window.height() ) / 2 :
				       ( $("body").height() - $window.height() ) / 2
				     ) + windowDelta,
				left: ( $("body").width() - $window.width() ) / 2
			}, windowSpeed, function(){
				func();
			});
		else
			$window.stop().animate({
				top: ( ( $.browser.msie && $.browser.version < 7 ) ?
				       $(document).scrollTop() + ( $("body").height() - $window.height() ) / 2 :
				       ( $("body").height() - $window.height() ) / 2
				     ) + windowDelta
			}, windowSpeed, function(){
				func();
			});

	} else
		func();
}

function shadow( value, func )
{// плавно изменяет прозрачность тени на фоне всплывающего окошка

	func = func || function(){};

	// если вызов нелогичен, выходим из функции
	if ( value > 0 && $(".shadow").css("display") == "block" ) return 0;
	if ( !value && $(".shadow").css("display") == "none" ) return 0;

	// показываем тень
	$(".shadow").css("display", "block").animate({
		opacity: value
	}, shadowSpeed, function(){
		if ( !value )
			$(".shadow").css("display", "none");
		func();
	});

}


function makeHover( object, className )
{// добавляет к объекту класс при наведении мыши

	$("" + object).hover(
		function(){
			$(this).addClass(className);
		},
		function(){
			$(this).removeClass(className);
		}
	);
}


function ltrim(s)
{// очищает левую сторону строки от лишних символов

	var ptrn = /\s*((\S+\s*)*)/;
	return s.replace(ptrn, "$1");
}

function rtrim(s)
{// очищает правую сторону строки от лишних символов

	var ptrn = /((\s*\S+)*)\s*/;
	return s.replace(ptrn, "$1");
}

function trim(s)
{// очищает строку от лишних символов

	return ltrim(rtrim(s));
}









