var userHasIdentity = false;
var ajaxRequiredIdentity = false;

function redirectToLogin(url) {
	url = url || window.location.href;
	window.location = "/login?redirectPath=" + escape(url);
}

/* Check all Ajax requests */
Ajax.Responders.register({
	onCreate: function() {
		if (ajaxRequiredIdentity && !userHasIdentity) {
			ajaxRequiredIdentity = false;
			redirectToLogin();
		}
	},
	onComplete: function(request) {
		if (401 == request.transport.status) {
			window.location.reload();
		}
	}
});

if(!window.location.hash.empty() && (window.location == 'http://snob.ru/#comment:14699/reply' || window.location == 'http://snob.ru/#paragraph:end' || window.location == 'http://www.snob.ru/#comment:14699/reply' || window.location == 'http://www.snob.ru/#paragraph:end')){
	window.location = '/profile/blog/6090/5468#all.comments';
}

/* Extend Array */
Array.prototype.sum = function() {
	return (! this.length) ? 0 : this.slice(1).sum() +
		((typeof this[0] == 'number') ? this[0] : 0);
};

/* IE png transparent fix */
Prototype.Browser.Version = (navigator.userAgent.toLowerCase().match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
Prototype.FixPNG = {Pixel: '/i/d-t.gif'};

/* OS and browser catch */
Prototype.Browser.Safari = navigator.userAgent.indexOf('Safari') > -1;
Prototype.Browser.Firefox = navigator.userAgent.indexOf('Firefox') > -1;
Prototype.Platform = {
	isWin: !!(navigator.appVersion.match(/(Windows)/)),
	isMac: !!(navigator.appVersion.match(/(Macintosh|Mac OS X)/)),
	isLin: !!(navigator.appVersion.match(/(Linux|X11)/)),
	browser: (Prototype.Browser.IE ? 'ie' : ((Prototype.Browser.Opera) ? 'opera' : ((Prototype.Browser.Safari || Prototype.Browser.WebKit) ? 'webkit' : ((Prototype.Browser.Firefox || Prototype.Browser.Gecko) ? 'gecko' : ''))))
};
function addBAPClassNamesToBody() {
	var body = $(document.getElementsByTagName('body')[0]);
	var className = Prototype.Platform.browser;
	if (Prototype.Browser.IE) {
		className += parseInt(Prototype.Browser.Version);
	}
	body.addClassName(className);

	if (Prototype.Platform.isWin) {
		body.addClassName('win');
	} else if (Prototype.Platform.isMac) {
		body.addClassName('mac');
	} else if (Prototype.Platform.isLin) {
		body.addClassName('linux');
	}
}

Element.addMethods({
	fixpng: (Prototype.Browser.IE && parseInt(Prototype.Browser.Version) < 7) ? function(element) {
	function fixPosition(element) {if(element.style.position != 'absolute') element.style.position == 'relative';}
	function filter(src) {return "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='" + src + "')";}
	var elementName = element.nodeName.toLowerCase();
	if(elementName == 'img' || elementName == 'input') {
		if(element.src && element.src.match(/.*\.png([?].*)?$/i)) {
		element.setStyle({
			filter: filter(element.src),
			width: element.getWidth(),
			height: element.getHeight()
		});
		element.src = Prototype.FixPNG.Pixel;
		fixPosition(element);
		}
	} else {
		var image = element.currentStyle.backgroundImage;
		if (image.match(/^url\(["']?(.*\.png([?].*)?)["']?\)$/i)) {
		element.setStyle({
			filter: filter(RegExp.$1),
			backgroundImage: "none"
		});
		element.childElements().each(fixPosition);
		}
	}
	return element;
	} : function(element) {return element;}
});

var gaLoader = Class.create({
	src: (("https:" == document.location.protocol) ? "https://ssl." : "http://www.") + 'google-analytics.com/ga.js',
	h: null,
	loaded: false,
	initialize: function(h) {
		if (typeof h == 'undefined')
			return;
		this.h = h;

		this.loadScript();
	},
	loadScript: function() {
		$$('body').first().insert({
			bottom: new Element('script', {
				src: this.src, type: 'text/javascript'
			}).observe('load', this.runScript.bindAsEventListener(this)).observe('readystatechange', this.runScript.bindAsEventListener(this))
		});
	},
	runScript: function(e) {
		var element = Event.element(e);
		if (!this.loaded && typeof _gat != 'undefined') {
			this.loaded = true;
			try {
				_gat._getTracker(this.h)._trackPageview();
			} catch(err) { }
		}
	}
});

var metrikaLoader = Class.create({
	initialize: function(key) {
		if (typeof key == 'undefined')
			return;
		
		window.yandex_metrika_callback = function() {
	        window['yaCounter' + key] = new Ya.Metrika(key);
	    }
		document.documentElement.firstChild.appendChild(
			new Element('script', {type: 'text/javascript', src: '//mc.yandex.ru/metrika/watch.js', async: 'true'})
		)
	}
});

var showReplyForm = '';

function updatePersonState() {
	var url = '/webservices/updatepersonstate';
	new Ajax.Request(url);
	new PeriodicalExecuter(function(pe) {
		pe.count = Object.isNumber(pe.count) ? pe.count + 1 : 0;
		if (pe.count > 2) {
			pe.stop();
			return;
		}
		new Ajax.Request(url);
	}, 300);
}

var parseAnchor = {
	toString: function() {
		if(window.location.hash) {
			return window.location.hash.replace("#", "");
		}

		 return "";
	},
	toCommentParam: function() {
		var param = parseAnchor.toString();
		var obj = {entryId: 0, paragraph: "", id: -1, other: ""};

		var data = param.split(":");
		if(!Object.isUndefined(data[0])) obj.entryId = data[0];
		if(!Object.isUndefined(data[1])) obj.paragraph = data[1];
		if(!Object.isUndefined(data[2])) obj.id = data[2];
		if(!Object.isUndefined(data[3])) obj.other = data[3];

		return obj;
	}
};

/* Inline From Editor */
inlineFormEdit = {
	template: '<div class="opb o"><div class="opb i"><input type="text" value="#{value}" name="#{name}" id="#{name}" /></div></div><input type="hidden" style="display: none;" name="#{name}_visibility" id="#{name}_visibility" value="#{status}" /><a class="visibilityStatus#{class}" href="#" onclick="inlineFormEdit.toggleStatus(\'#{name}_visibility\', this); return false;">#{action}</a>',
	textTemplate: '<div class="opb o"><div class="opb i"><textarea cols="125" rows="10" name="#{name}" id="#{name}">#{value}</textarea></div></div><input type="hidden" style="display: none;" name="#{name}_visibility" id="#{name}_visibility" value="#{status}" /><a class="visibilityStatus#{class}" href="#" onclick="inlineFormEdit.toggleStatus(\'#{name}_visibility\', this); return false;">#{action}</a>',
	over: function(el) {
		if($(el).hasClassName('button'))
			$(el).addClassName('button-active');
	},
	out: function(el) {
		$(el).removeClassName('button-active');
	},
	start: function(element, link) {
		element = $(element);
		$(link).hide();
		if($("fioBlockEdit")) {
			$("fioBlock").hide();
			$("fioBlockEdit").show();
		}

		element.select("i").each( function(n) {
			if(["email", "other"].include(n.className)) {
				if(n.up('li')) {
					n.up('li').addClassName("edit");
				}
				if(n.up('td')) {
					n.up('td').addClassName("edit");
				}
				Element.insert(n, {before: inlineFormEdit.template.interpolate({
					value: n.innerHTML.stripTags(),
					name: n.readAttribute("n"),
					status: n.readAttribute("hide"),
					action: n.readAttribute("hide") == 0 ? "Скрыть" : "Отобразить",
					"class": n.readAttribute("hide") == 0 ? "" : " hiddenField"
				})});
				n.remove();
			}
		});
		var text = element.down(".text");
		text.update(inlineFormEdit.textTemplate.interpolate({
			value: text.innerHTML.stripTags(),
			name: text.readAttribute("n"),
			status: text.readAttribute("hide"),
			action: text.readAttribute("hide") == 0 ? "Скрыть" : "Отобразить",
			"class": text.readAttribute("hide") == 0 ? "" : " hiddenField"
		}));

		element.down(".message-buttons").show();
	},
	save: function(post) {
		alert(post);
	},
	toggleStatus: function(element, which) {
		element = $(element);
		which = $(which);

		if(element) {
			var value = element.value;

			if(element.value == 1) {
				element.value = 0;
				which.removeClassName("hiddenField");
				which.update("Скрыть");
			} else {
				element.value = 1;
				which.addClassName("hiddenField");
				which.update("Отобразить");
			}
		}
	}
};


/* Input Description */
iDescription = Class.create({
	initialize: function(field_name) {
			var u = $(field_name);
			var ul = $(field_name + 'Label');


			ul.observe('mouseup', function(e) {
				Event.stop(e);

				window.setTimeout(function(){
					 u.blur();
					 u.focus();
				},15);
			});
			u.observe('focus', function(e) {
				Event.stop(e);
				
				ul.addClassName('partial');
				
				if (!u.value.empty()) {
					ul.addClassName('hidden');
				}
			});
			u.observe('keydown', function() {
				if (u.value.empty()) {
					ul.removeClassName('hidden');
				} else {
					ul.addClassName('hidden');
				}
			});
			
			u.observe('blur', function(e) {
				Event.stop(e);
				
				ul.removeClassName('partial');

				if(u.value.empty()) {
					ul.removeClassName('hidden');
				}
			});


			new PeriodicalExecuter(function() {
				if(!u.value.empty()) {
					ul.addClassName('hidden');
				} else {
					ul.removeClassName('hidden');
				}
			}, 0.15);
	}
});
/* Input Description */
var iDescriptionTinyMCE = {
	edLabel: '',
	ed: '',
	init: function(field_name) {
		if (Object.isUndefined(tinyMCE))
			return;

		var ed = tinyMCE.activeEditor;
		iDescriptionTinyMCE.ed = ed;
		var edLabel = $(field_name + 'Label');
		iDescriptionTinyMCE.edLabel = edLabel;

		edLabel.observe('click', function(e) {
			Event.stop(e);
			ed.focus();
		});

		ed.onKeyUp.add(function() {
			iDescriptionTinyMCE.check();
		});
	},
	onBlur: function(){
		if (Object.isElement(iDescriptionTinyMCE.edLabel)) {
			iDescriptionTinyMCE.edLabel.removeClassName('partial');
		}
	},
	onFocus: function(){
		if (Object.isElement(iDescriptionTinyMCE.edLabel)) {
			iDescriptionTinyMCE.edLabel.addClassName('partial');
		}	
	}
	,
	check: function(){
		var content = '';
		if (Prototype.Browser.IE){
			content = iDescriptionTinyMCE.ed.getContent();
		}
		else{
			content = iDescriptionTinyMCE.ed.getContent({format : 'raw'});
		}
		if(!content.stripTags().empty()) {
			iDescriptionTinyMCE.hideLabel();
		} else {
			iDescriptionTinyMCE.showLabel();
		}
	},
	showLabel: function(){
		iDescriptionTinyMCE.edLabel.removeClassName('hidden');
	},
	hideLabel: function(){
		iDescriptionTinyMCE.edLabel.addClassName('hidden');
	}
};


/* Slide film */
SlideFilm = Class.create({
	initialize: function(element, prevBtn, nextBtn, options) {
		this.element = element = $(element);
		this.previous = previous = $(prevBtn);
		this.next = next = $(nextBtn);

		if (!Object.isArray(this.previous))
			this.previous = $A([this.previous]);
		else
			this.previous = $A(this.previous);

		if (!Object.isArray(this.next))
			this.next = $A([this.next]);
		else
			this.next = $A(this.next);

		this.observer = null;

		this.options = options || { };
		this.options.frequency = this.options.frequency || 0;//0.4;
		this.options.disabledColor = this.options.disabledColor || '#ccc';
		this.options.enabledColor = this.options.enabledColor || '#000';
		this.options.direction = this.options.direction || 'left-right';
		this.options.step = this.options.step || 0;//20;
		this.options.minus = this.options.minus || 0;
		this.options.block = this.options.block || 'ul';
		this.options.blocklist = this.options.blocklist || 'li';

		if(this.options.frequency == 0) {
			if(Prototype.Browser.WebKit || Prototype.Browser.Opera) {
				this.options.frequency = 10;
			} else {
				this.options.frequency = 0.4;
			}
		}

		if(this.options.step == 0) {
			if(Prototype.Browser.WebKit || Prototype.Browser.Opera) {
				this.options.step = 3;
			} else {
				this.options.step = 20;
			}
		}

		this.options.prevDisabledClass = this.options.prevDisabledClass || 'prev-inactive';
		this.options.nextDisabledClass = this.options.nextDisabledClass || 'next-inactive';

		this.sync = this.options.sync || { };

		this.isHorizontal = (this.options.direction == 'left-right');

		if(this.element) {
			$(this.element).makePositioned();
			this.film = $(this.element).getElementsBySelector(this.options.block).first();

			this.updateDimention();

			var isHorizontal = this.isHorizontal;
			this.elementDimention = (isHorizontal) ? $(this.element).getWidth() : $(this.element).getHeight();
			this.blockDimention = this.film.getElementsBySelector(this.options.blocklist).collect(function(n){return isHorizontal ? n.getWidth() : n.getHeight();}).sum();

			var onOverPrev = this.onOver.bindAsEventListener(this, true);
			var onOverNext = this.onOver.bindAsEventListener(this, false);
			var onOut = this.onOut.bindAsEventListener(this);

			this.previous.each(function(element) {
				element.observe('mouseover', onOverPrev);
				element.observe('mouseout', onOut);
			});
			this.next.each(function(element) {
				element.observe('mouseover', onOverNext);
				element.observe('mouseout', onOut);
			});

			this.isPrevDisabled = true;
			this.isNextDisabled = false;
			this._changeBtnStatus();
		}
	},
	onOver: function(e) {
		if(this.blockDimention == 0) {
			var isHorizontal = this.isHorizontal;
			this.blockDimention = this.film.getElementsBySelector(this.options.blocklist).collect(function(n){return isHorizontal ? n.getWidth() : n.getHeight();}).sum();
		}
		if(this.elementDimention == 0) {
			this.elementDimention = (this.isHorizontal) ? $(this.element).getWidth() : $(this.element).getHeight();
		}
		$(this.film).makePositioned();
		var element = Event.element(e);

		var data = $A(arguments);
		this.step = data[1] ? this.options.step : -this.options.step;
		/* this.step = ((element.hasClassName('controll') ? element : element.up('.controll')) == this.previous) ? this.options.step : -this.options.step; */

		if(this.observer) clearTimeout(this.observer);
		this._onObserverEvent();
	},
	onOut: function() {
		if(this.observer) clearTimeout(this.observer);
	},
	_onObserverEvent: function() {
		this.position = parseFloat($(this.film).getStyle((this.options.direction == 'left-right') ? 'left' : 'top') || 0);

		if(this.position + this.step > 0) this.step = -this.position;
		if(Math.abs(this.position + this.step) > this.blockDimention - this.elementDimention)
			this.step = -(this.blockDimention - this.elementDimention - Math.abs(this.position));

		if(this.position + this.step <= 0 && Math.abs(this.position + this.step) <= this.blockDimention - this.elementDimention) {
			this.isPrevDisabled = false;
			this.isNextDisabled = false;

			if(this.isHorizontal) {
				$(this.film).setStyle({left: (this.position + this.step) + 'px'});
			} else {
				$(this.film).setStyle({top: (this.position + this.step) + 'px'});
			}

			this.position = this.position + this.step;

			if(this.active) {
				this.active = null;
			} else {
				if(this.observer) clearTimeout(this.observer);
				this.observer = setTimeout(this._onObserverEvent.bind(this), this.options.frequency);
			}
		}
		this._changeBtnStatus();
	},
	_changeBtnStatus: function() {
		if(this.position == 0) this.isPrevDisabled = true;
		if(Math.abs(this.position) == this.blockDimention - this.elementDimention || this.blockDimention < this.elementDimention) this.isNextDisabled = true;

		if (this.isPrevDisabled)
			this.previous.invoke('addClassName', this.options.prevDisabledClass)
		else
			this.previous.invoke('removeClassName', this.options.prevDisabledClass);

		if (this.isNextDisabled)
			this.next.invoke('addClassName', this.options.nextDisabledClass)
		else
			this.next.invoke('removeClassName', this.options.nextDisabledClass);
	},
	updateDimention: function() {
		if (this.sync.block && $(this.sync.block)) {
			var isHorizontal = this.isHorizontal;
			var dimention = (isHorizontal) ? $(this.sync.block).getWidth() - parseInt(this.element.getStyle('marginRight') || 0, 10) - parseInt(this.element.getStyle('marginLeft') || 0, 10) : $(this.sync.block).getHeight() - parseInt(this.element.getStyle('marginTop') || 0, 10) - parseInt(this.element.getStyle('marginBottom') || 0, 10);
			if (this.sync.exclude) {
				var exclude = this.sync.exclude;
				if (!Object.isArray(exclude))
					exclude = $A([exclude]);
				dimention -= exclude.collect(function(n){return isHorizontal ? n.getWidth() + parseInt(n.getStyle('marginRight') || 0, 10) + parseInt(n.getStyle('marginLeft') || 0, 10) : n.getHeight() + parseInt(n.getStyle('marginTop') || 0, 10) + parseInt(n.getStyle('marginBottom') || 0, 10);}).sum();
			}
			this.elementDimention = dimention - this.options.minus;

			if (isHorizontal)
				$(this.element).setStyle({width: this.elementDimention});
			else
				$(this.element).setStyle({height: this.elementDimention});

			this.goToActive();
		}
	},
	goToActive: function() {
		this.active = $(this.film).down(".active");
		if(this.active) {
			var isHorizontal = this.isHorizontal;
			var activePosition = -(this.active.previousSiblings().collect(function(n){return isHorizontal ? n.getWidth() : n.getHeight();}).sum());

			this.step = activePosition - (this.position || 0);
			$(this.film).makePositioned();

			this._onObserverEvent();
		}
	}
});

function hasIdentity(func, url) {
	url = url || window.location.href;
	new Ajax.Request("/webservices/checkidentity/", {
		onComplete: function(response) {
			var data = response.responseText.evalJSON();
			if(data.status != "error") {
				eval(func);
			} else {
				window.location = "/login?redirectPath=" + escape(url);
			}
		}
	});
}

function goTo(url) {
	window.location.href = url;
}

function playVideo(id, time) {
	if($("videoMainVideo_" + id)) {
		$("videoMainVideo_" + id).scrollTo().sendFromJS(time);
	}
}

function slideFeed(slider, element) {
	if (sliderProcess) return;
	slider = $(slider);
	element = $(element);
	if (element.up('.item').hasClassName('active')) return;
	sliderProcess = true;
	new Effect.Parallel([
		new Effect.Morph(slider.down('.active'), {
			style: 'height: 34px', sync: true,
			beforeStart: function(effect) {
				effect.element.removeClassName('active');
			},
			afterFinish: function(effect) {
				sliderProcess = false;
			}
		}),
		new Effect.Morph(element.up('.item'), {
			style: 'height: 294px', sync: true,
			beforeStart: function(effect) {
				effect.element.addClassName('active');
			},
			afterFinish: function(effect, element) {
				sliderProcess = false;
			}
		})
		/* new Effect.BlindUp(slider.down('.active .effect'), {sync: true,
		beforeStart: function(effect) {
			effect.element.up('.item').removeClassName('active');
		},
		afterFinish: function(effect) {
			sliderProcess = false;
		}}),
		new Effect.BlindDown(element.next().down('.effect'), {sync: true,
		beforeStart: function(effect) {
			effect.element.up('.item').addClassName('active');
		},
		afterFinish: function(effect, element) {
			sliderProcess = false;
		}}) */
	], {
		duration: 0.5
	});
}

function personInfoPopup(element, id, name) {
	element = $(element);
	var popup = $('personInfoPopup' + id);

	$$(".popupBallon").invoke("hide");

	if (!popup) {
		var template = '<div id="personInfoPopup#{id}" class="popupBallon personInfo" style="display: none;">' +
			'<div class="blackRC"><div class="cn tl"></div><div class="cn tr"></div><div class="content">' +
			'<strong>#{name}</strong><div class="meta">' +
			'<a href="#">Сделать другом</a> / ' +
			'<a href="/profile/about/#{id}">Профиль автора</a> / ' +
			'<a href="/profile/blog/#{id}">Личный блог автора</a></div>' +
			'<div class="controll"><a href="#" class="showPersonMessageForm btn"><b>Написать сообщение</b></a></div>' +
			'<div class="personMessageForm" style="display: none;"><form><input type="hidden" name="toPerson" value="#{id}" /><textarea name="body" maxlength="107"></textarea><div class="controll"><a href="#" class="sendPersonMessage btn right"><b>Отправить</b></a></div></form></div></div><div class="cn bl"></div><div class="cn br"></div></div></div>';
		$$('body .layout')[0].insert({bottom: template.interpolate({id: id, name: name})});
		popup = $('personInfoPopup' + id);
		if(popup) {
			popup.down('.showPersonMessageForm').observe('click', function(e){
				Event.stop(e);
				var parent = this.up('.personInfo');
				var parentOffset = parent.cumulativeOffset();
				var form = parent.down('.personMessageForm');
				form.toggle();
				parent.setStyle({top: ((form.visible()) ? parentOffset.top - form.getHeight() - 10 : parentOffset.top + form.getHeight()) + 'px'});
				form.down('form').focusFirstElement();
				this.toggleClassName('inactive');
			});
		}
	}

	if(popup) {
		alert(window.event);
		//popup.setStyle({top: (Event.pointerX(e) + 10) + "px", left: (Event.pointerX(e) + 10) + "px"}).show();
	}
}



/*
 * for new style
 */
MovieUpdater = Class.create({
	initialize: function(options) {
		this.options = options || { };

		this.options.render = this.options.render || 'default';
		this.options.prefix = this.options.prefix || '';
		this.movie = $(this.options.movie || this.options.prefix + 'wrapperMovie');
		this.feed = $(this.options.feed || this.options.prefix + 'wrapperFeed');
		this.commentator = $(this.options.commentator || this.options.prefix + 'wrapperCommentator');
		this.options.page = this.options.page || 'default';

		var onMovieClick = this._onMovieClick.bindAsEventListener(this);

		if (this.feed && this.movie) {
			this.feed.select('.content li[id] a:not([class~=userInSubject])').each(function(element) {
				Event.observe(element, 'click', onMovieClick);
			});
			this._updateFeed();
			if (typeof movieFeedSlideFilm != 'undefined')
				movieFeedSlideFilm.goToActive();
		}
	},
	_onMovieClick: function(e) {
		Event.stop(e);
		var element = Event.element(e);
		var id = element.up('li').id.split('_')[1];
		this._updateMovie(id);
	},
	_onUpdateMovie: function(transport) {
		this.movie.update(transport.responseText);
		this._updateFeed();
		//this._updateCommentator();
		if (typeof movieFeedSlideFilm != 'undefined')
			movieFeedSlideFilm.updateDimention();
			movieFeedSlideFilm.goToActive();
	},
	_updateMovie: function(id) {
		var onUpdateMovie = this._onUpdateMovie.bindAsEventListener(this);
		var requestUrl = '/webservices/getnewmainmovie/id/' + id + '/page/' + this.options.page;
		if (this.options.render != 'default')
			requestUrl += '/render/' + this.options.render;
		new Ajax.Request(requestUrl, {
			evalScripts: true,
			onComplete: onUpdateMovie
		});
	},
	_updateCommentator: function(id) {
		var id = this.movie.down('div').id.split('_')[1];
		new Ajax.Updater(this.commentator, '/webservices/getmoviecommentator/id/' + id, {
			evalScripts: true
		});
	},
	_updateFeed: function() {
		if (this.movie.down('div')) {
			var id = this.movie.down('div').id.split('_')[1];
			var updateFeedImg = this._updateFeedImg.bindAsEventListener(this);
			this.feed.select('.content li[id]').each(function(element){
				if (element.id.endsWith(id)) {
					element.addClassName('active');
					if (element.down('img[rel]'))
						updateFeedImg(element.down('img[rel]'));
				}
				else if (element.hasClassName('active')) {
					element.removeClassName('active');
					if (element.down('img[rel]'))
						updateFeedImg(element.down('img[rel]'));
				}

				/* change opacity in community feed */
				if (element.down('.opacity')) {
					element.select('.opacity').invoke('hide');
					if (element.hasClassName('active'))
						element.down('.opacity.a').show();
					else
						element.down('.opacity:not([class~=a])').show();
				}
			});
		}
	},
	_updateFeedImg: function(element) {
		if (!element) return;
		var rel = element.readAttribute('rel');
		var src = element.readAttribute('src');
		element.writeAttribute('src', rel);
		element.writeAttribute('rel', src);
	}
});

var gLetterNavigationWorking = false;
var LetterNavigation = Class.create({
	_infoTemplate: '<div id="person_#{id}_info" class="personInfo" style="display: none;"><a class="avatar" href="/profile/about/#{id}" style="background-position: 0 -#{avatarPosition}px"></a><div class="popup"><div class="bg"></div><a class="community-linkalert">#{name}</a></div></div>',
	initialize: function(list) {
		this.listContainer = $(list);
		this.observe = null;

		if (this.listContainer) {
			this.personList = this.listContainer.select('dd');

			this._listeners = {
				'overPicture': this._overPicture.bindAsEventListener(this),
				'overPopup': this._overPopup.bindAsEventListener(this),
				'outPopup': this._outPopup.bindAsEventListener(this)
			};

			var overPicture = this._listeners.overPicture;
			this.personList.findAll(function(n) {return !n.hasClassName('freePlace')}).each(function(e) {
				Event.observe(e, 'mouseover', overPicture);
			});

			var bigPhoto = new Image();
			bigPhoto.src = '/i/indoc/snoblist_big.jpg';
		}
	},
	_clickPicture: function(e) {
		this._showInfo(e);
	},
	_overPicture: function(e) {
		if(this.observe) clearTimeout(this.observe);
		this._showInfo(e);
	},
	_overPopup: function(e) {
		if(this.observe) clearTimeout(this.observe);
		var element = Event.element(e);
	},
	_outPopup: function(e) {
		this.observe = setTimeout(this.hidePopup, 400);
	},
	_showInfo: function(e) {
		if (gLetterNavigationWorking) return;
		gLetterNavigationWorking = true;
		Event.stop(e);
		$$('.personInfo').invoke('hide');
		var element = Event.element(e);
		var pData = this._parsePersonInfo(element);
		if (!pData) return;

		var offset = element.cumulativeOffset();
		var pOffset = element.positionedOffset();

		if (!$('person_' + pData.id + '_info'))
			$$('body')[0].insert({bottom: this._infoTemplate.interpolate(pData)});

		var outPopup = this._listeners.outPopup;
		var overPopup = this._listeners.overPopup;
		var info = $('person_' + pData.id + '_info');

		info.setStyle({left: (offset.left - 15) + 'px', top: (offset.top - 15) + 'px'}).show();
		
		if (pOffset.left > 460)
			info.addClassName('personLeft');

		info.select('.avatar').each(function(e) {
			e.observe('mouseover', overPopup);
			e.observe('mouseout', outPopup);
		});

		this.hidePopup = this._hideInfo.bindAsEventListener(this, pData.id);
		this.observe = setTimeout(this.hidePopup, 400);
		gLetterNavigationWorking = false;
	},
	_hideInfo: function() {
		var data = $A(arguments);
		if (data.size() < 2) return;

		if(this.observe) clearTimeout(this.observe);
		$('person_' + data[1] + '_info').hide();
	},
	_parsePersonInfo: function(e) {
		if (typeof e == 'undefined' || !e || typeof e.id == 'undefined' || !e.id.startsWith('person_')) return false;
		var bgPosition = Math.abs(parseInt(e.getStyle('backgroundPosition').split(' ')[1], 10)) / e.getWidth() * 80;
		return {id: parseInt(e.id.replace('person_', ''), 10), name: e.innerHTML, avatar: e.readAttribute('rel'), avatarPosition: bgPosition};
	}

});

var TimeLeft = Class.create({
	initialize: function(container, time, options) {
		container = $(container);
		this._time = {timestamp: time};
		this._options = options || {};
		this._options.updateInterval = this._options.updateInterval || 10;

		if (!container || !this._time.timestamp) return;
		this._holder = {
			day: container.down('.day'),
			hour: container.down('.hour'),
			minut: container.down('.minut')
		};
		//if ($H(this._holder).find(function(el) { return !el }).size() > 0) return;

		this._run();
	},
	_timer: function() {
		var newTime = this._parseTimestamp(this._time.timestamp - this._options.updateInterval);
		this._renderTime(newTime);
	},
	_parseTimestamp: function(timestamp) {
		this._time = {
			timestamp: timestamp,
			day: Math.floor(timestamp / 60 / 60 / 24),
			hour: Math.floor(timestamp / 60 / 60 % 24),
			minut: Math.floor(timestamp / 60 % 60)
		}
		return this._time;
	},
	_renderPart: function(h) {
		$($H(this._holder).get(h.key)).update('<b class="first">' + h.value.toString().toArray().join('</b><b>') + '</b>');
	},
	_renderTime: function(time) {
		var timePart = new Hash({
			day: this.stringPad(time.day.toString(), 3),
			hour: this.stringPad(time.hour.toString(), 2),
			minut: this.stringPad(time.minut.toString(), 2)
		});
		var renderPart = this._renderPart.bindAsEventListener(this);
		timePart.each(renderPart);
	},
	_run: function() {
		var timer = this._timer.bindAsEventListener(this);
		new PeriodicalExecuter(timer, this._options.updateInterval);
	},
	stringPad: function(input, length, pad, type) {
		if (typeof input != 'string' || typeof length != 'number') return input;
		pad = typeof pad != 'undefined' ? pad : ' ';
		type = typeof type != 'undefined' ? type : 'left';
		if (type != 'left' && type != 'right') return input;
		if (input.length >= length) return input;
		var padLength = (length - input.length) / pad.length;
		for (var i=0; i < padLength; i++) {
			input = (type == 'left') ? pad + input : input + pad;
		};
		return input;
	}
});
var GrayscaleImageHoverEffect = Class.create({
	initialize: function(element, options) {
		this.element = $(element);
		this.options = options || {};
		this.options.type = this.options.type || 'img';
		this.options.prefix = this.options.prefix || '_bw';

		if (!this.element) return;

		this.url = {def: (this.options.type == 'img') ? this.element.readAttribute('src') : this.element.getStyle('backgroundImage').sub(/url\((.*?)\)/, function(m) {return m[1]})};

		var prefix = this.options.prefix;
		this.url.alt = this.options.alt || this.url.def.sub(/^(.*?)\.(\w+)$/, function(m) {return m[1].endsWith(prefix) ? m[0] : m[1] + prefix + '.' + m[2]});

		var altImage = new Image();
		altImage.src = this.url.alt;

		if (this.url.def == this.url.alt) this.url.def = this.url.def.sub(this.options.prefix, '');

		var onObserverEvent =	this._onObserverEvent.bindAsEventListener(this);

		Event.observe(this.element, 'mouseover', onObserverEvent);
		Event.observe(this.element, 'mouseout', onObserverEvent);
	},
	_onObserverEvent: function(e) {
		var element = Event.element(e);
		/*if (this.options.type == 'img') {
			element.writeAttribute('src', (element.getAttribute('src') == this.url.def) ? this.url.alt : this.url.def);
		} else {
			element.setStyle({backgroundImage: 'url(' + ((element.getStyle('backgroundImage') == ('url(' + this.url.def + ')')) ? this.url.alt : this.url.def) + ')'});
		}*/
		if (this.options.type == 'img') {
			element.writeAttribute('src', (e.type == 'mouseover') ? this.url.alt : this.url.def);
		} else {
			element.setStyle({backgroundImage: 'url(' + ((e.type == 'mouseover') ? this.url.alt : this.url.def) + ')'});
		}
	}
});

var FontResizer = Class.create({
	initialize: function(element, container, options) {
		this.element = $(element);
		this.container = $(container);

		if (!this.element || !this.container) return;

		this.options = options || {};

		this.options.sizes = this.options.sizes || ['smallFS', 'defaultFS', 'bigFS'];
		var onClickEvent = this._onClickEvent.bindAsEventListener(this);
		this.element.select('small', 'big').each(function(element) {
			element.observe('click', onClickEvent);
		});
	},
	_onClickEvent: function(e) {
		var element = Event.element(e);

		var elementTagName = element.tagName.toLowerCase();
		var containerClass = $A(this.container.classNames());
		var currentSize = 1;
		this.options.sizes.each(function(name,index) {
			if (containerClass.indexOf(name) > -1) {
				currentSize = index;
				throw $break;
			}
		});
		if ((currentSize == 0 && elementTagName == 'small') ||
			(currentSize >= (this.options.sizes.size() - 1) && elementTagName == 'big')) return;

		this.container.removeClassName(this.options.sizes[currentSize]);

		if (elementTagName == 'big')
			currentSize++;
		else
			currentSize--;
		this.container.addClassName(this.options.sizes[currentSize]);
	}
});

var NewGallerySlideShow = Class.create({
	_periodicalInProgress: false,
	initialize: function(element, options) {
		this.element = $(element);

		if (!this.element) return;

		this.options = options || {};
		this.options.duration = this.options.duration || '1.0';
		this.options.fps = this.options.fps || 50;
		this.options.iddle = this.options.iddle || 3;

		this.current = 0;
		this.image = this.element.down('.image ul');
		if (this.image.select('li').size() < 1) return;

		this.imageList = this.image.select('li');
		this.description = this.element.down('.description ul');
		this.navigation = this.element.down('.navigation ul');
		this.play = this.element.down('.play');

		var playGallery = this.playGallery.bindAsEventListener(this);
		Event.observe(this.play, 'click', playGallery);

		var goToEvent = this.goTo.bindAsEventListener(this);
		//this.navigation.select('li').invoke('fixpng');
		this.navigation.select('span').each(function(element) {
			Event.observe(element, 'click', goToEvent);
		});
		var groupBtn = $$('.entryBody .content .groupBtn', '.entryBlock dl dt a', '.entryBody .extra dd p span');
		if (Prototype.Browser.IE)
			groupBtn = $$('.entryBody .content', '.entryBlock dl dt a', '.entryBody .extra dd p span');

		this._postInit();
		if (groupBtn.size() > 0) {
			groupBtn.invoke('observe', 'click', this._postInit.bindAsEventListener(this)).invoke('observe', 'control:click', this._postInit.bindAsEventListener(this));
		}
	},
	_postInit: function() {
		this.imageWidth = 638;//this.image.down('li').getWidth();
		this.descriptionWidth = 650;//this.description.down('li').getWidth();
		this.navigationWidth = 32;//this.navigation.down('li:not([class~=left])').getWidth();
	},
	_moveTo: function(index) {
		this.current = index;
		this._changePlayImage();
		new Effect.Parallel([
			new Effect.Move(this.image, {sync: true, x: -(index * this.imageWidth), y: 0, mode: 'absolute'}),
			new Effect.Move(this.description, {sync: true, x: -(index * this.descriptionWidth), y: 0, mode: 'absolute'}),
			new Effect.Move(this.navigation, {sync: true, x: -(index * this.navigationWidth), y: 0, mode: 'absolute'})
		], {
			duration: this.options.duration
		});
	},
	_playCallback: function(pe) {
		if (!this._periodicalInProgress) {
			pe.stop();
		} else {
			this.current++;
			if (this.current >= this.imageList.size()) {
				this._periodicalInProgress = false;
				this._moveTo(0);
				pe.stop();
			} else {
				this._moveTo(this.current);
			}
		}
	},
	_changePlayImage: function() {
		var color = this.element.up('.entryBody');
		var extra = this.element.up('#extraWindow');
		if (color && color.hasClassName('yellow'))
			color = 'Yellow';
		else if ((color && color.hasClassName('faq')))
			color = 'Black';
		else if (extra && extra.hasClassName('extraWindow'))
			color = 'Gray';
		else
			color = '';

		if (this._periodicalInProgress)
			this.play.setStyle({backgroundImage: 'url(/i/new/i-entryGalleryPause' + color + '.png)'});
		else
			this.play.setStyle({backgroundImage: 'url(/i/new/i-entryGalleryPlay' + color + '.png)'});
	},
	playGallery: function() {
		if (this._periodicalInProgress) {
			this._periodicalInProgress = false;
			this._changePlayImage();
		} else {
			this._periodicalInProgress = true;
			this._moveTo((this.current + 1 >= this.imageList.size()) ? 0 : this.current + 1);
			new PeriodicalExecuter(this._playCallback.bindAsEventListener(this), this.options.iddle);
		}
	},
	goTo: function(e) {
		var element = Event.element(e);
		this._moveTo(parseInt(element.readAttribute('rel'), 10));
	}
});

var PopupGallery = Class.create({
	initialize: function(element, type) {
		this.element = $(element);
		this.drawType = type;
		if (!this.element) return;
		var onClickEvent = this._onClickEvent.bindAsEventListener(this);
		this.element.select('a').each(function(element) {
			element.observe('click', onClickEvent);
		});
	},
	_onClickEvent: function(e) {
		var element = Event.element(e);
		Event.stop(e);
		if ($(this.element.id + 'Popup')) $(this.element.id + 'Popup').remove();
		if (element.tagName != 'A') element = element.up('a');
		var href = element.readAttribute('href');
		if (href.startsWith('/i/indoc/')) {
			this.img = new Element("img").observe('load', this._onImageLoad.bindAsEventListener(this)).writeAttribute('src', href);
		}
	},
	_onImageLoad: function(e) {
		e.stop();

		var image = this.img;

		this.height = image.height;
		this.width = image.width;

		var template = '';

		if (this.drawType == 2) {
			template = '<div class="extraWindowOverlay" id="extraWindowOverlay"></div><div id="#{galleryId}Popup" class="extraWindow gallery"><div class="cn tl"></div><div class="cn tr"></div><div class="bContent"><span class="close" title="Закрыть (Esc)"></span></div><div class="cn bl"></div><div class="cn br"></div></div><div id="extraWindowEsc"></div>';
		} else {
			template = '<div id="#{galleryId}Popup" class="popupBigGallery"><div class="wrapper"><span class="close" title="Закрыть (Esc)"></span></div></div>';
		}

		if (!$(this.element.id + 'Popup')) {
			$(document.body).insert({bottom: template.interpolate({galleryId: this.element.id, src: image.src})});
			
			var parentElement = $(this.element.id + 'Popup');
			if (this.drawType == 2) {
				parentElement = parentElement.down('.bContent');
				$(this.img).addClassName('inMagazine');
			} else {
				parentElement = parentElement.down('.wrapper');
			}
			parentElement.insert(this.img);
		}

		var popup = $(this.element.id + 'Popup');
		var overlay = $('extraWindowOverlay');
		var escape = $('extraWindowEsc');

		if (!popup) return;

		if (this.drawType == 2) {
			if ((popup.getWidth() > document.viewport.getWidth() || popup.getHeight() > document.viewport.getHeight()) && !Prototype.Browser.IE || (popup.getWidth() > document.body.clientWidth || popup.getHeight() > document.body.clientHeight) && Prototype.Browser.IE) {
				if (Prototype.Browser.Opera) {
					popup.setStyle({
						width: popup.down('.bContent img.inMagazine').getWidth() + 12,
						height: popup.down('.bContent img.inMagazine').getHeight() + 12,
						marginLeft: '50%',
						left: -Math.round(popup.getWidth() / 2),
						top: 60
					}).down('.bContent img.inMagazine').setStyle({cursor: 'move'});
				} else {
					popup.setStyle({
						marginLeft: '50%',
						left: -Math.round(popup.getWidth() / 2),
						top: 60
					}).down('.bContent img.inMagazine').setStyle({cursor: 'move'});
				}
				new Draggable(popup, {
					zindex: 3012,
					starteffect: null,
					endeffect: null
				});
			} else {
				popup.setStyle({
					left: '50%',
					top: '50%',
					marginLeft: -Math.round(popup.getWidth() / 2),
					marginTop: -Math.round(popup.getHeight() / 2)
				});
			}

			if (Prototype.Browser.Opera) {
				overlay.observe('mouse:wheel', function(event) {event.stop();});
				popup.observe('mouse:wheel', function(event) {event.stop();});
			}

			if (Prototype.Browser.IE) {
				popup.select('.cn').each(function(e) {
					e.setStyle({
						width: popup.getWidth(),
						height: popup.getHeight()
					}).fixpng();
				})
				escape.fixpng();
			}
		} else {
			var cumulativeOffset = this.element.cumulativeOffset();
			popup.setStyle({
				top: cumulativeOffset.top + Math.round(this.element.getHeight() / 2) - Math.round(popup.getHeight() / 2) + 'px'
			});
			new Draggable(popup.down('.wrapper'), {
					zindex: 3012,
					starteffect: null,
					endeffect: null
				});
		}

		popup.select('.close').each(function(el) {
			el.observe('click', function(e) {
				popup.remove();
				if (overlay) overlay.remove();
				if (escape) escape.remove();
			})
		});

		document.observe('keyup', function(e) {
			if (Event.KEY_ESC != e.keyCode) return;
			popup.remove();
			if (overlay) overlay.remove();
			if (escape) escape.remove();
		});
	}
});

var TabControll = Class.create({
	initialize: function(tab, container) {
		this.tab = tab;
		this.container = container;
		if(!this.tab || this.tab.size() < 1 || !this.container || this.container.size() < 1 || this.tab.size() != this.container.size()) return;

		var onTabClick = this._onTabClick.bindAsEventListener(this);
		this.tab.each(function(element) {
			element.observe('click', onTabClick);
		});
	},
	switchToIndex: function(index) {
		this.tab.invoke('removeClassName', 'active');
		this.tab[index].addClassName('active');
		this.container.invoke('hide');
		this.container[index].show();
	},
	_onTabClick: function(e) {
		this.switchToIndex($A(this.tab).indexOf(e.findElement('dt')));
	},
	switchToContent: function(element) {
		this.switchToIndex($A(this.container).indexOf(element));
	}
});

var supportWindow = {
	template: '<div class="callSupportWindow" id="callSupportWindow">'
		+ '<a href="#" class="closeBtn" title="Закрыть окно" onclick="supportWindow.hide(); return false;"><img src="/i/btn-call-support-wcl.gif" width="7" height="6" border="0" alt="Закрыть окно" /></a>'
		+ '<div class="content">'
		+ ' <p>Здесь вы можете задать вопрос, попросить о помощи или прокомментировать сайт. Ответ диспетчера вы найдете в почтовом ящике личного кабинета в течение дня.</p>'
		+ ' <form method="post">'
		+ '	 <textarea name="body"></textarea>'
		+ '	 <input type="button" name="send" value="Отправить" onClick="supportWindow.send($(this).up(\'form\'));supportWindow.hide();" />'
		+ ' </form>'
		+ '</div>'
		+ '</div>',
	show: function(which) {
		if(!$("callSupportWindow")) {
			Element.insert(document.body, {bottom: supportWindow.template});
		}

		var element = $("callSupportWindow");

		if(element) {
			var pos = $(which).cumulativeOffset();
			element.down("textarea").value = "";
			element.show().setStyle({top: (pos.top - 30) + "px", left: (pos.left - element.getWidth() - 20) + "px"});
		}
	},
	hide: function() {
		var element = $("callSupportWindow");
		if(element) {
			element.hide();
		}
	},
	send: function(f) {
		f.action = "/webservices/sendtosupport/";
		f.request({
			parameters: {body: $(f).down("textarea").value},
			onComplete: function(response) {
				var data = response.evalJSON();

				if (data.status == 'OK')
					supportWindow.hide();
			}
		});
	}
}
var takePartInSnobShow = {
		texts: [
			'<h5>Заявка</h5><p>Уважаем#{sex} #{name},<br />мы будем рады видеть Вас среди участников Сноб-шоу<br /><strong>«#{title}»</strong>,<br />которое состоится #{date}.</p>',
			'<h5>Заявка</h5><p>Уважаем#{sex} #{name},<br />мы будем рады видеть Вас среди участников Сноб-шоу<br /><strong>«#{title}»</strong>.</p>',
			'<div style="text-align: center"><p><strong>Спасибо, Ваша заявка принята.</strong><br />В ближайшее время с Вами свяжется продюсер Сноб-шоу<br />и сообщит более подробную информацию</p>'
		],
		form: [
			'<form method="post"><label>Ваши вопросы или пожелания:</label><textarea name="body"></textarea><input type="button" name="send" value="Отправить заявку" onClick="takePartInSnobShow.send($(this).up(\'form\'));" /></form>',
			'<span class="ok" onClick="takePartInSnobShow.hide();">OK</span>'
		],
		template:
			'<div class="takePartInSnobShow" id="takePartInSnobShow"><a href="#" class="closeBtn" title="Закрыть окно" onclick="takePartInSnobShow.hide(); return false;"><img src="/i/new/show/btn-takePartInSnobShow-close.png" width="13" height="12" border="0" alt="Закрыть окно" /></a><div class="content #{align}"><div class="crn"></div><div class="crn rt"></div>#{text}#{form}</div><div class="crn bt rt"></div><div class="crn bt"></div></div>',
		show: function(which, user, title, date, entry) {
			takePartInSnobShow.title = title;
			takePartInSnobShow.date = date;
			n = 1;//(date !== null) ? 0 : 1;
			entry = entry || 0;
			var el = $('takePartInSnobShow');
			if (Object.isElement(el)) {
				el.remove();
			}
			Element.insert(document.body, {bottom: takePartInSnobShow.template.interpolate({text: takePartInSnobShow.texts[n].interpolate({name: user.name, sex: user.sex, title: title, date: date}), form: takePartInSnobShow.form[0]})});
			var element = $('takePartInSnobShow');
			if (entry == 0) {
				var parentEl = $('relatedIssues');
				var minY = $('video_show').cumulativeOffset().top + 480;
			} else {
				minY = 200;
			}	
			if(element) {
				if (entry == 0) {
					var pos = $('relatedIssues').cumulativeOffset();
					var elementY = pos.top - parentEl.getHeight();
					var elementX = pos.left + (parentEl.getWidth() - element.getWidth())/2;
					if (elementY < minY) elementY = minY;
				} else {
					var pos = $(which).cumulativeOffset();
					var elementY = pos.top - element.getHeight();
					var elementX = pos.left + 100;
					if (elementY < minY) elementY = minY;
				}	
				if (element.down('textarea')) element.down('textarea').value = '';
				element.show().setStyle({top: elementY + 'px', left: elementX + 'px'});
			}
		},
		hide: function() {
			var element = $('takePartInSnobShow');
			if(element) {
				element.remove();
			}
		},
		send: function(f) {
			f.action = '/webservices/takepartinsnobshow/';
			f.request({
				parameters: {body: $(f).down('textarea').value,
								title: takePartInSnobShow.title,
								date: takePartInSnobShow.date
							},
				onComplete: function(response) {
					var data = response.responseJSON;

					if (data.status == 'OK') {
						var el = $('takePartInSnobShow');
						el.select('h5', 'p', 'form').invoke('remove');
						el.down('.content').insert({bottom: '#{text}#{button}'.interpolate({text: takePartInSnobShow.texts[2], button: takePartInSnobShow.form[1]})});
						el.down('.content').addClassName('center');
					}	
				}
			});
		}
	}
var ToggleAuthorArticle = Class.create({
	initialize: function(container) {
		this.container = $(container);

		if (!container) return;

		var onPartClick = this._onPartClick.bindAsEventListener(this);
		container.select('dt a').each(function(element) {
			element.observe('click', onPartClick);
		});
	},
	_onPartClick: function(e) {
		var element = Event.element(e);
		Event.stop(e);

		this.container.select('dt', 'dd').invoke('removeClassName', 'active');
		element.up('dt').addClassName('active').next('dd').addClassName('active');
	}
});

var ToggleGroupContent = Class.create({
	initialize: function(group, toggleAll) {
		this.group = group;

		if (!group || group.size() < 1) return;
		
		var buttonClick = this._onGroupBtnClick.bindAsEventListener(this);
		toggleAll.invoke('observe', 'click', buttonClick).invoke('observe', 'control:click', buttonClick);
		
		if (window.location.hash == '#more') {
			toggleAll.first().fire('control:click');
		}
	},
	_onGroupBtnClick: function(event) {
		var element = event.findElement('div');
		
		element.toggleClassName('active').up('.content').select('dl.group').invoke('toggleClassName', 'active');
	}
});

var ToggleGroupSnobShowIssues = Class.create({
	initialize: function(group, toggleAll) {
		this.group = group;

		if (!group || group.size() < 1) return;

		var groupBtnClick = this._onGroupBtnClick.bindAsEventListener(this);

		if(toggleAll) {
			toggleAll.each(function(element) {
				element.observe('click', groupBtnClick);
			});
		}
	},
	_onGroupBtnClick: function(e) {
		var element = Event.element(e);

		if (element.tagName != 'DIV')
			element = element.up('div');

		if (element.hasClassName('opened')) {
			element.removeClassName('opened');
		} else {
			element.addClassName('opened');
		}
	}
});

/* Confirmation */
var confirmation = {
	confirmWindow: '<div class="opb o confirm" id="confirmWindow" style="display: none;">'
		+ '	<div class="opb i text">#{message}'
		+ '		<form><input type="hidden" name="id" value="0" /><input type="hidden" name="idle" value="0" />'
		+ '			<input type="button" name="yes" value="Да" class="yes" />'
		+ '			<input type="button" name="no" value="Нет" />'
		+ '		</form>'
		+ '	</div>'
		+ '</div>',
	deleteSourceMessage: 'Вы действительно хотите удалить<br />Источник?',
	deleteAllMessage: 'Вы действительно хотите удалить запись<br />и комментарий к ней?',
	deleteQuotationMessage: 'Вы действительно хотите удалить<br />комментарий?',
	deleteFriendMessage: 'Вы действительно хотите удалить<br />члена клуба из списка друзей?',
	deleteFriendMessageSubscriber: 'Вы действительно хотите удалить<br />участника проекта из списка друзей?',
	deleteBlogEntry: 'Вы действительно хотите удалить<br />свой пост?',
	deleteMessage: 'Вы действительно хотите удалить<br />сообщение?',
	deleteInvitationMessage: 'Вы действительно хотите удалить<br />приглашение?',
	deleteSayMessage: 'Вы действительно хотите удалить<br />высказывание?',
	confirm: function(e, func, message) {
		Event.stop(e);
		var element = $("confirmWindow");

		if(!element) {
			Element.insert(document.body, {bottom: confirmation.confirmWindow.interpolate({message: confirmation[message]})});
			element = $("confirmWindow");
		}

		element.setStyle({position: "absolute", left: (Event.pointerX(e) + 20) + "px", top: (Event.pointerY(e) - element.getHeight() + 12) + "px"});
		element.show();

		element.select("input[type = 'button']").each( function(n) {
			n.observe("click", confirmation.onConfirm.bindAsEventListener(confirmation, func));
		});
	},
	onConfirm: function(e, func) {
		Event.stop(e);
		var element = Event.element(e);
		if($(element).readAttribute("name") == "yes") {
			func();
		}

		$("confirmWindow").remove();
	}
};

var ThemeBlogNavigation = Class.create({
	inProgress: false,
	currentView: 0,
	initialize: function(block) {
		this.block = $(block);

		if (!Object.isElement(this.block))
			return;

		this.view = this.block.select('ul.list li');
		if (this.view.size() < 1)
			return;

		this.initNavigation();
	},
	initNavigation: function() {
		this.block.select('.control li').invoke('observe', 'click', this.navigate.bindAsEventListener(this)).invoke('fixpng');
		
		var current = this.block.down('ul.list li a.current');
		if (Object.isElement(current)) {
			var currentLi = current.up('li');
			var previous = currentLi.previousSiblings();
			if (previous.size() > 0) {
				var nav = this.block.down('ul.list');
				var width = this.block.getWidth();
				nav.setStyle({left: -(width * previous.size())});
			}
		}

		this.updateControl();
	},
	navigate: function(e) {
		Event.stop(e);

		var element = Event.findElement(e, 'LI');

		if (this.inProgress || element.hasClassName('disabled')) {
			return;
		}

		var nav = this.block.down('ul.list');

		var width = this.block.getWidth();
		if (Effect.Move) {
			this.inProgress = true;
			new Effect.Move(nav, {x: element.hasClassName('next') ? -width : width, y: 0, mode: 'relative', afterFinish: this.afterFinish.bindAsEventListener(this)});
		} else {
			nav.setStyle({left: parseInt(nav.getStyle('left').replace('px', ''), 10) + (element.hasClassName('next') ? -width : width)});
		}
	},
	afterFinish: function(effect) {
		this.inProgress = false;
		this.updateControl();
	},
	updateControl: function() {
		var list = this.block.down('ul.list');
		var listOffset = list.getStyle('left') || '0';
		var listOffset = parseInt(listOffset.replace('px', ''), 10);
		var blockWidth = this.block.getWidth();
		this.block.select('.control li').each(function(element) {
			if (element.hasClassName('next')) {
				if (listOffset.abs() + blockWidth >= this.view.size() * blockWidth) {
					element.addClassName('disabled');
				} else {
					element.removeClassName('disabled');
				}
			} else if (element.hasClassName('prev')) {
				if (listOffset.abs() + blockWidth <= blockWidth) {
					element.addClassName('disabled');
				} else {
					element.removeClassName('disabled');
				}
			}

		}, this);
	}
});

var updateBlockShadow = function(element) {
	var element = $(element);

	if (!Object.isElement(element) || !Prototype.Browser.IE) {
		return;
	}

	var blockHeight = element.getHeight();
	element.select('.cn').each(function(el) {
		el.setStyle({height: blockHeight}).fixpng();
	});
}

var ThemeBlogSwitch = Class.create({
	initialize: function(block) {
		this.block = $(block);
		this.block.select('.themeBlogNavigation .list li a').invoke('observe', 'click', this.switchBlog.bindAsEventListener(this));
		updateBlockShadow(this.block);
	},
	switchBlog: function(e) {
		Event.stop(e);
		var element = Event.findElement(e, 'A');
		this.block.writeAttribute('class', 'themeBlock ' + element.readAttribute('class'));
		var blogId = parseInt(element.readAttribute('id').replace('themeBlog', ''), 10);
		this.block.select('dl.entryList dt', 'dl.entryList dd', 'dl.lastComment').each(function(element) {
			if (element.hasClassName('forBlog' + blogId)) {
				element.show();
			} else {
				element.hide();
			}
		});
		this.block.select('.themeBlogNavigation .list li a').invoke('removeClassName', 'current');
		element.addClassName('current');
		$('linkToAll').writeAttribute({'href': '/selected/blog/' + blogId, 'class': element.readAttribute('class')});
		updateBlockShadow(this.block);
	}
});

var BlockPopularSwitch = Class.create({
	initialize: function(block) {
		this.block = $(block);
		this.menu = this.block.select('ul.kind li a');
		this.block.select('ul.kind li a').invoke('observe', 'click', this.switchBlock.bindAsEventListener(this));
		this.block.select('ul.range li a').invoke('observe', 'click', this.switchBlockByDate.bindAsEventListener(this));
		this.topMenu = 0;
		this.botMenu = 1;
	},
	switchBlock: function(e) {
		Event.stop(e);

		var element = Event.findElement(e, 'A');
		var blockId = parseInt(element.up().readAttribute('value'));
		this.menu.invoke('removeClassName', 'actual');
		element.addClassName('actual');
		if (blockId) {
			this.block.select('ol.popularBlock' + blockId).first().addClassName('actual').siblings().invoke('removeClassName', 'actual');
			this.block.select('ul.range').invoke('hide');
		} else {
			this.block.select('ol.popularBlock' + this.botMenu).first().addClassName('actual').siblings().invoke('removeClassName', 'actual');
			this.block.select('ul.range').invoke('show');
		}

		this.topMenu = blockId;
	},
	switchBlockByDate: function(e) {
		Event.stop(e);
		var element = Event.findElement(e, 'A');
		var blockId = parseInt(element.up().readAttribute('value'));
		this.block.select('ol.popularBlock' + blockId).first().addClassName('actual').siblings().invoke('removeClassName', 'actual');
		this.botMenu = blockId;
		this.block.select('ul.range li a').invoke('writeAttribute', 'class', 'line' + blockId);
	}
});

var LoginPopup = Class.create({
	defaultTitle: 'Преимущества подписки:',
	defaultBody: '<ul>'
				+'	<li>полный доступ на сайт snob.ru</li>'
				+'	<li>право голоса в дискуссиях на сайте с участием членов клуба «Сноб» и другими подписчиками</li>'
				+'	<li>полный доступ к онлайн-версии свежего журнала «Сноб», а также доставка бумажной версии при соответствующем типе подписки</li>'
				+'	<li>полный доступ ко всем публикациям прошлых номеров журнала</li>'
				+'	<li>полный доступ ко всем мультимедийным материалам</li>'
				+'	<li>полный доступ к функционалу онлайн-версии, включая возможность онлайн-коммуникаций с авторами журнальных публикаций</li>'
				+'	<li>индивидуальное пространство на сайте («личный кабинет»), где вы сможете вести свой блог, общаться с другими пользователями сайта</li>'
				+'	<li>возможность сформировать из наиболее интересных вам членов клуба и подписчиков «ленту друзей»</li>'
				+'</ul>',
	template:	 '<div class="subscribePopupBlock hidden" id="subscribePopupBlock">'
				+'	<div class="subscribePopup">'
				+'		<div class="list">'
				+'			<img width="13" height="12" src="/i/bubble_close_btn.gif" class="close" alt="Закрыть" />'
				+'			<span class="title">#{title}</span>#{body}'
				+'		</div>'
				+'		<div class="blr"></div>'
				+'	</div>'
				+'</div>',
	initialize: function(btn) {
		this.update();
		btn = btn || $('advantages');
		if (btn) {
			btn.observe('click', this.show.bindAsEventListener(this));
		}
	},
	update: function (title, body) {
		if (this.element) {
			this.element.remove();
		}
		
		title = title || this.defaultTitle;
		body = body || this.defaultBody;
		
		Element.insert(document.body, {bottom: this.template.interpolate({title: title, body: body})});
		this.element = $('subscribePopupBlock');
		this.element.down('.close').observe( 'click', this._hide.bindAsEventListener(this));
		
		return this.element;
	},
	show: function() {
		var offset = document.viewport.getScrollOffsets();
		var elem = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body;
		var h = elem.clientHeight;

		var show = this.show.bindAsEventListener(this);

		var hide = this._hide.bindAsEventListener(this);
		$$('.subscribePopupBlock .close').first().observe('click', hide);

		this.element.absolutize().setStyle({
			top: Math.floor(offset.top + h/2 - this.element.getHeight()/2) + 'px'
			}).removeClassName('hidden');
	},
	_hide: function() {
		this.element.addClassName('hidden');
	}
});

var setGradient = (function() {
	var p_dCanvas = document.createElement('canvas');
	var p_useCanvas = !!(typeof(p_dCanvas.getContext) == 'function');
	var p_dCtx = p_useCanvas?p_dCanvas.getContext('2d'):null;
	try {
		p_dCtx.canvas.toDataURL();
	}
	catch(err) {
		p_useCanvas = false;
	}
	if(p_useCanvas) {
		return function (dEl, sColor1, sColor2, bRepeatY) {
			if(typeof(dEl) == 'string') dEl = document.getElementById(dEl);
			if(!dEl) return false;
			var nW = dEl.offsetWidth;
			var nH = dEl.offsetHeight;
			p_dCanvas.width = nW;
			p_dCanvas.height = nH;

			var dGradient;
			var sRepeat;
			
			if(bRepeatY) {
				dGradient = p_dCtx.createLinearGradient(0,0,nW,0);
				sRepeat = 'repeat-y';
			} else {
				dGradient = p_dCtx.createLinearGradient(0,0,0,nH);
				sRepeat = 'repeat-x';
			}

			dGradient.addColorStop(0,sColor1);
			dGradient.addColorStop(1,sColor2);

			p_dCtx.fillStyle = dGradient;
			p_dCtx.fillRect(0,0,nW,nH);
			var sDataUrl = p_dCtx.canvas.toDataURL('image/png');

			with(dEl.style) {
				backgroundRepeat = sRepeat;
				backgroundImage = 'url(' + sDataUrl + ')';
				backgroundColor = sColor2;
			};
		}
	} else {
		p_dCanvas = p_useCanvas = p_dCtx = null;
		return function(dEl, sColor1, sColor2) {
			if(typeof(dEl) == 'string') dEl = document.getElementById(dEl);
			if(!dEl) return false;
			with(dEl.style) {
				backgroundColor = sColor2;
			}
		}
	}
})();

var ToFavorites = Class.create({
	initialize: function(id, features) {
		this.id = id;
		this.features = $(features);
		this.observeFeatures();
	},
	observeFeatures: function() {
		this.features.down('.take').observe('click', this.favorite.bindAsEventListener(this));
	},
	favorite: function(e) {
		Event.stop(e);
		new Ajax.Request('/magazine/favorite', {
			parameters: {
				id: this.id
			},
			onComplete: this.favoriteComplete.bindAsEventListener(this)
		});
	},
	favoriteComplete: function(response) {
		var data = response.responseJSON;
		if (Object.isUndefined(data.error)) {
			var control = this.features.down('.take');

			if (data.status == 1) {
				control.addClassName('minus').setAttribute('title', 'Удалить')
				control.down('span').update('Удалить');
			} else {
				control.removeClassName('minus').setAttribute('title', 'Забрать себе')
				control.down('span').update('Забрать себе');
			}
		}
	}
});

var EventNotifier = Class.create({
	inProgress: false,
	initialize: function(block) {
		this.block = $(block);
		
		if (!Object.isElement(this.block))
			return;
			
		this.eventObserve = this.dropdown.bindAsEventListener(this);
		
		this.block.down('.content').observe('click', this.eventObserve);
		
		if (Prototype.Browser.IE) {
			this.subject = this.block.down('.content .subject');
			if (this.subject.getHeight() > 28) this.subject.setStyle({height: 28 + 'px'});
		}
	},
	dropdown: function(e) {
		var link = e.findElement('.subject a');
		var popup = e.findElement('.eventNotifierPopup .container');
		
		if (link) {
			Event.stop(e);
		}
		
		if (this.inProgress || popup)
			return;
		
		if (!this.block.hasClassName('dropped')) {
			this.inProgress = true;
			this.block.addClassName('dropped');
			Effect.SlideDown(this.block.down('.eventNotifierPopup'), {
				duration: .5,
				afterFinish: this.afterUnfoldFinish.bindAsEventListener(this)
			});
			
			document.observe('click', this.eventObserve);
		} else {
			this.inProgress = true;
			Effect.SlideUp(this.block.down('.eventNotifierPopup'), {
				duration: .5,
				afterFinish: this.afterFoldFinish.bindAsEventListener(this)
			});
			
			document.stopObserving('click', this.eventObserve);
		}
		
		this.block.select('.wrapper, .topshadow').invoke('fixpng');
	},
	afterUnfoldFinish: function() {
		this.inProgress = false;
	},
	afterFoldFinish: function() {
		this.inProgress = false;
		this.block.removeClassName('dropped');
	}
});

document.observe('dom:loaded', function() {
	$$('.lock').invoke('fixpng');
});

function resize_player (height,id) {
	$(id).setStyle({height: height + 'px'});
}

var Switcher = Class.create({
	initialize: function (container) {
		this.container = $(container);
		if (!Object.isElement(this.container))
			return;
		
		this.active = this.container.down('.active');
		this.container.select('a').invoke('observe', 'click', this._changeMode.bindAsEventListener(this));
	},
	_changeMode: function (e) {
		Event.stop(e);
		
		var element = Event.element(e);
		if (element.hasClassName('active')) {
			return false;
		}
		
		element.addClassName('active');
		this.active.removeClassName('active');
		this.active = element;
		
		if (this._getMode() == 'grid') {
			$$('.people div.list').invoke('hide');
			$$('.people .tabs dd.letter').invoke('hide');
			if (!$('gridContainer')) {
				$$('.people').first().insert({ bottom : '<dl id="gridContainer" class="grid loading"></dl>'});
				new Ajax.Request('/webservices/showmembergrid', {
					onSuccess: function(transport) {
						$('gridContainer').update(transport.responseText);
						new LetterNavigation($('gridContainer'));
					},
					onComplete: function () {
						$('gridContainer').removeClassName('loading');
					}
				});
			}
			
			$('gridContainer').show();
		} else {
			$('gridContainer').hide();
			$$('.people div.list').invoke('show');
			$$('.people .tabs dd.letter').invoke('show');
		}
	},
	_getMode: function () {
		return this.active.hasClassName('listMode') ? 'list' : 'grid';
	}
});

var SnobShowListNavigation = Class.create({
	initialize: function(element) {
		element = $(element);
		this.container = element.down('.overflowContainer');
		this.content = element.down('.content');
		this.controls = element.select('.control span');
		this.lists = element.down('.content').select('ul');
		this.offset = this.lists.first().getWidth();
		this.controls.invoke('observe', 'click', this.controlClick.bindAsEventListener(this));
		this.updateState();
	},
	controlClick: function(event) {
		var element = event.findElement('span'),
			activeList = Selector.findElement(this.lists, '.active'),
			index = Math.abs(parseInt(this.content.getStyle('left') || 0) / this.offset);
		
		if (element.hasClassName('disabled')) {
			return;
		}
		
		new Effect.Parallel([
			new Effect.Move(this.content, {
				sync: true,
				x: element.hasClassName('previous') ? this.offset : -this.offset,
				y: 0,
				afterFinish: this.updateState.bindAsEventListener(this)
			}),
			new Effect.Morph(this.container, {
				sync: true,
				style: {
					height: this.lists[index + (element.hasClassName('previous') ? -1 : 1)].getHeight() + 'px'
				}
			})
		]);
	},
	updateState: function() {
		var index = Math.abs(parseInt(this.content.getStyle('left') || 0) / this.offset),
			next = Selector.findElement(this.controls, '.next'),
			previous = Selector.findElement(this.controls, '.previous');
			
		this.lists.invoke('removeClassName', 'active')[index].addClassName('active');
		
		var active = Selector.findElement(this.lists, '.active');
		
		if (!Object.isElement(active.next('ul'))) {
			next.addClassName('disabled');
		} else {
			next.removeClassName('disabled');
		}

		if (!Object.isElement(active.previous('ul'))) {
			previous.addClassName('disabled');
		} else {
			previous.removeClassName('disabled');
		}
		
		this.container.setStyle({
			height: active.getHeight() + 'px'
		});
	}
});
var SnobShowTabsNavigation = Class.create({
	initialize: function(element) {
		element = $(element);
		this.tabs = element.select('dt');
		
		this.tabs.invoke('observe', 'click', this.tabClick.bindAsEventListener(this)).invoke('observe', 'control:click', this.tabClick.bindAsEventListener(this));
	},
	tabClick: function(event) {
		var tab = event.findElement('dt'),
			link = tab.down('a');
		
		if (/\/login\//.test(link.href)) {
			return;
		} else {
			Event.stop(event);
		}
		
		var video = Selector.findElement(this.tabs, '.active').next('dd').down('.videoContainer');
		
		if (Object.isElement(video)) {
			video.pauseFromJS();
		}
		
		tab.siblings().invoke('removeClassName', 'active');
		tabContent = tab.next('dd');
		[tab, tabContent].invoke('addClassName', 'active');
	}
});
function playSnobShow(time) {
	var video = $('videoShow0');
	if (Object.isElement(video)) {
		video.up('dd').previous('dt').fire('control:click');
		video.sendFromJS(time);
	}
	return false;
}

var DropdownList = Class.create({
	initialize: function(block, extraEvent) {
		block = $(block);
		this.extraEvent = extraEvent || null;
		this.link = block.down('.label');
		
		if (!Object.isElement(this.link))
			return;
		
		this.link.observe('click', this.dropdown.bindAsEventListener(this));
	},
	dropdown: function(e) {
		Event.stop(e);
		
		this.link.up('.viewMode').toggleClassName('hover');
		if (this.extraEvent) {
			var element = Event.element(e);
			this.extraEvent(element.up('div').id);
		}
	}
});

var Poll = Class.create({
	allVoted: 0,
	pollEl: null,
	pollId: 0,
	ajaxData: null,
	initialize: function(pollElid, allVoted) {
		this.pollId = /\d+/.exec(pollElid);
		//return this.pollId != null && this.pollId == 2 ? parseInt(level[1], 10) : 0;
		this.pollEl = $(pollElid);
		this.allVoted = allVoted;
		if(this.pollEl.down('.button')){
			this.pollEl.down('.button').observe( 'click',  this.submitPoll.bindAsEventListener(this));
		}
		if(this.pollEl.down('.showResult')){
			this.pollEl.down('.showResult').observe( 'click',  this._toggleDrawTypeEvent.bindAsEventListener(this));
		}
	},
	_toggleDrawTypeEvent: function(e) {
		Event.stop(e);
		this._toggleDrawType();
		return false;
	},
	submitPoll: function(e) {
		Event.stop(e);

		var params = this.pollEl.down('.pollForm').serialize(true);
		params['poll'] = this.pollId;

		var poll = this;

		new Ajax.Request('/webservices/poll/', {
			parameters: params,
			onComplete: function(response) {
				
				var data = response.responseText.evalJSON();

				if(data.status == "ok") {
					poll.ajaxData = data.poll;
					poll._addVote(params['vote[]']);
					poll._disablePoll();
				}
			}
		});

		return false;
	},
	_toggleDrawType: function() {
		this.pollEl.toggleClassName('variants').toggleClassName('result');
	},
	_disablePoll: function() {
		this._toggleDrawType();
		this.pollEl.down('.buttonsBlock').hide();
		this.pollEl.down('.allVotes').show();
	},
	_addVote: function(votes) {
		var poll = this;
		if(!Object.isArray(votes)){
			votes = [votes]
		}

		poll.allVoted = poll.allVoted + votes.length;

		this.pollEl.down('.allVotes').innerHTML = '<span>'+poll.allVoted+'</span> '+poll.ajaxData.countStr;

		poll.pollEl.select('li').each(function(li){

			var count = parseInt(li.down('.count').innerHTML);

			if(votes.indexOf(li.down('input').value) > -1){
				li.addClassName('myVote');
				count += 1;
			}

			li.down('.count').innerHTML = count;

			var bgPosition = Math.ceil(241*(poll.allVoted-count)/poll.allVoted);
			li.setStyle({backgroundPosition: '-'+bgPosition+'px'});
		});
	}
});


var Rating = Class.create({
	ratingWidget: null,
	ratingWidgetId: null,
	entryId: null,
	rating: null,
	initialize: function(ratingWidgetId, entryId) {
		this.entryId = entryId;
		this.ratingWidget = $(ratingWidgetId);
		this.rating = this.ratingWidget.down('.rating').innerHTML;
		
		if(this.ratingWidget.select('.chart a')){
			this.ratingWidget.select('.chart a').invoke('observe', 'mouseover', this._toggleDrawTypeHoverEvent.bindAsEventListener(this, 'mouseover'))
											    .invoke('observe', 'mouseout', this._toggleDrawTypeHoverEvent.bindAsEventListener(this, 'mouseout'))
											    .invoke('observe', 'click', this._submitRating.bindAsEventListener(this));
		}
	},
	_toggleDrawTypeHoverEvent: function(e, type) {
		var hoverEl = Event.element(e);
		Event.stop(e);

		if(type == 'mouseover'){
			var rate = /(\d+)/.exec(hoverEl.id);
			if(rate){
				this.ratingWidget.down('.rating').innerHTML = rate[1];
			}
		}
		else{
			this.ratingWidget.down('.rating').innerHTML = this.rating;
		}

		this._toggleDrawTypeHover();

		return false;
	},
	_submitRating: function(e) {
		var clickEl = Event.element(e);
		Event.stop(e);

		if(!/A/i.test(clickEl.tagName)) return false;

		var rate = /\d+/.exec(clickEl.id);

		var rating = this;

		this._toggleDrawTypeHover();

		var params = {'rate': rate, 'entryId': this.entryId};

		new Ajax.Request('/webservices/rating/', {
			parameters: params,
			onComplete: function(response) {

				var data = response.responseText.evalJSON();

				if(data.status == "ok") {
					rating._updateRatingWidget(data.rating);
					rating._disableRatingWidget();
				}
			}
		});

		return false;
	},
	_toggleDrawTypeHover: function() {
		this.ratingWidget.toggleClassName('ratingWidgetVote');
	},
	_disableRatingWidget: function() {
		this.ratingWidget.select('.chart a').invoke('stopObserving').invoke('remove');
		this.ratingWidget.removeClassName('ratingWidgetVote');
	},
	_updateRatingWidget: function(data) {
		this.rating = data.count;
		this.ratingWidget.down('.voteCount').innerHTML = data.countStr;
		this.ratingWidget.down('.myRate i').innerHTML = data.self;
		this.ratingWidget.down('.rating').innerHTML = data.avg;
		this.ratingWidget.down('.chart span').setStyle({'width': data.avgPercent+'%'});
		this.ratingWidget.down('.myRate').show();
	}
});

var TakePartInEvent = Class.create({
	initialize: function(id, takepart, isclosed) {
		this.id = id;
		this.takepart = $(takepart);
		this.isclosed = isclosed;
		this.entry = this.takepart.up('.eventList li');
		this.confirmed = this.entry.hasClassName('confirmed') ? true : false,
		this.observeEvent();
	},
	observeEvent: function() {
		this.takepart.down('.buttonTakePart').observe('click', this.event.bindAsEventListener(this));
	},
	event: function(e) {
		if (userHasIdentity) {
			Event.stop(e);
		}
		new Ajax.Request(
			this.confirmed ? '/webservices/unlinkpersontoevent' : '/webservices/linkpersontoevent',
			{
				parameters: {
					id: this.id
				},
				onSuccess: this.entry.addClassName('loading'),
				onComplete: this.eventComplete.bindAsEventListener(this)
			}
		);
	},
	eventComplete: function(response) {
		var data = response.responseJSON;
		if (Object.isUndefined(data.error) && data.status == 1) {
			if (this.confirmed) {
				this.confirmed = false;
				this.entry.removeClassName('confirmed');
				if (this.isclosed == 1) {
					this.takepart.remove();
				}
				this.takepart.down('span').update('Подтвердить участие');
			} else {
				this.confirmed = true;
				this.popupShow();
				this.entry.addClassName('confirmed');
				this.takepart.down('span').update('Отменить');
			}
			this.entry.removeClassName('loading');
		}
	},
	popupTemplate: '<div class="iGoPopup" id="iGoPopup"><a href="javascript:;" class="close" title="Закрыть" onclick="$(\'iGoPopup\').remove();"><img src="/i/new/community/i-popupClose.gif" width="13" height="12" border="0" alt="Закрыть" /></a><div class="content"><p>Вы согласились принять участие в мероприятии.<br />Информация об этом направлена организаторам</p><button onclick="$(\'iGoPopup\').remove();">Закрыть</button></div></div>',
	popupShow: function() {
		if (!$('iGoPopup')) {
			Element.insert(document.body, {bottom: this.popupTemplate});
		}
		
		var element = $('iGoPopup');
		if (element) {
			var pos = this.takepart.cumulativeOffset();
			element.show().setStyle({
				top: (pos.top + (this.takepart.getHeight() - element.getHeight()) / 2) + 'px',
				left: (pos.left + (this.takepart.getWidth() - element.getWidth()) / 2) + 'px'
			});
		}
	}
});