var authNotice = "Необходимо выполнить вход на сайт",
	list_of_smiles = ['01_smile.gif', '02_good.gif', '03_good2.gif', '04_grin.gif', '05_mosking.gif', '06_laugh2.gif', '07_derisive.gif', '08_yes.gif', '09_acute.gif', '10_blush2.gif', '11_pardon.gif', '12_sad.gif', '13_resent.gif', '14_sorry.gif', '15_cray.gif', '16_umnik2.gif', '17_threaten.gif', '18_nonono.gif', '19_ireful1.gif', '20_negative.gif', '21_shout.gif', '22_ireful2.gif', '23_air_kiss.gif', '24_bye.gif', '25_tongue.gif', '26_agree.gif', '27_mda.gif', '28_boredom.gif', '29_clapping.gif', '30_angel.gif', '31_happy.gif', '32_rose.gif', '33_queen.gif', '34_rest.gif', '35_dirol.gif', '36_dance2.gif', '37_whistle.gif', '38_dance4.gif', '39_dance.gif', '40_heat.gif', '41_lazy2.gif', '42_read.gif', '43_scratch_one-s_head.gif', '44_search.gif', '45_secret.gif', '46_facepalm.gif', '47_declare.gif', '48_don-t_mention.gif', '49_dntknw.gif', '50_swoon.gif', '51_meeting.gif', '52_help.gif', '53_drinks.gif', '54_friends.gif'],
	pickmeup_cfg = {format:'Y-m-d',hide_on_select:true,locale:{days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"],daysShort:["Вос","Пон","Вто","Сре","Чет","Пят","Суб","Вос"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб","Вс"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"]}},
	notThisTime_tids = {
		"dflt": "Действие недоступно",
		"companies_review_rt": "<strong>Внимание!</strong><br><br>Написание отзывов доступно для пользователей с рейтингом выше [[rp1]] баллов.",
		"auth": authNotice,
		"rp": "[[rp1]]",
	};

$(document).ready(function(){ noFlexboxCss(); initPinBnFixed(); });
$(function(){
	if ($('.asdSocToggle.a6').length) { setTimeout(function(){ $('.asdSocToggle.a6')[0].click(); }, 100); }
	if ($('#greeting').length) {
		$('#greeting div').css('max-height', window.innerHeight);
		$('#greeting').click(function(e){ if (e.target == this) { $('#greeting').remove(); } });
		$('#greeting .cl').click(function(){ $('#greeting').remove(); });
		$('#greeting a').click(function(){ setTimeout(function(){ $('#greeting').remove(); }, 100); });
	}
	if ($('.congratulations').length) {
		carouselOfCongratulations();
	}
	// рейтинг публикаций и комментариев
	$('.cmmLst, .pbRtWr').on('click', '.pbRtAr', function(){
		var $ax = $(this).before('<b class="icoLoad"></b>'), $rt = $ax.parent().children('.pbRt'), cm = false;
		if (!$rt.length) {
			$rt = $ax.parent().children('.cmRt'); cm = true;
		}
		$.get('/ae?'+((cm)?'cm':'pub')+'Rt='+$ax.data('i')+'&'+((cm)?'cm':'pub')+'='+$rt.data('pid'), function(dt){
			$ax.prev('.icoLoad').remove();
			if (dt.st=='ok') {
				$rt.html(dt.tx);
			} else {
				showCurtain(dt.tx);
			}
		},'json');
		return false;
	});
	$('.thanks_for_pub').click(function(){
		var $ax = $(this);
		if (typeof $ax.data('pid') == 'undefined') {
			return false;
		}
		$ax.prepend('<b class="icoLoad"></b>');
		$.get('/ae?pubRt=pl&pub='+ $ax.data('pid'), function(dt){
			$ax.children('.icoLoad').remove();
			if (dt.st == 'ok') {
				$('.thanks_for_pub b').html(dt.tx);
				$('#who_thanked_author a:first').before('<img src="'+ $('nav .avatar').attr('src') +'">');
				if ($('#who_thanked_author a').length > 4) {
					$('#who_thanked_author a:gt(3)').hide();
				}
			} else {
				showCurtain(dt.tx);
			}
		}, 'json');
	}).children('b').hover(function(){
		var qt = this.innerHTML * 1, tx = '';
		if (qt) {
			if (qt == 1) {
				tx = 'Поблагодарил 1 участник';
			} else if (qt < 5) {
				tx = 'Поблагодарили '+ qt +' участника';
			} else {
				tx = 'Поблагодарило '+ qt +' участников';
			}
			$('#who_thanked_author').fadeIn(100).children('strong').html(tx);
		}
	}, function(){
		setTimeout(function(){
			if (!$('#who_thanked_author').hasClass('redCard')) {
				$('#who_thanked_author').fadeOut(100);
			}
		}, 300);
	});
	$('#who_thanked_author').hover(function(){
		$(this).addClass('redCard');
	}, function(){
		$(this).removeClass('redCard');
		$('#who_thanked_author').fadeOut(100);
	});
	$('#addPubInFav').click(function(){
		var $ax = $(this).prepend('<b class="icoLoad"></b>');
		$.get('/ae?add_pub_in_fav='+ $ax.data('pid'), function(dt){
			$ax.children('.icoLoad').remove();
			if (dt == 'on' || dt == 'off') {
				$ax.children('span').html((dt == 'on') ? 'В избранном' : 'Добавить в избранное');
			} else {
				showCurtain(dt);
			}
		});
	});
	$('#complain2pub').click(function(){
		var $ax = $(this),
			tx = '<form action="/ae?complain2pub" method="post"><input type="hidden" name="pid" value="'+ $('#addPubInFav').data('pid') +'"><p>Пожалуйста, укажите причину обращения:</p>'+
				'<select name="reason" style="width: 360px;"><option value="">-- Выберите один из вариантов --</option>' +
				'<option value="theme">Публикация не соответствует теме группы</option>' +
				'<option value="plagiarism">Плагиат / Нарушение авторских прав</option>' +
				'<option value="spam">Это спам / Реклама</option>' +
				'<option value="other">Другое</option></select>' +
				'<p>Ваш комментарий к обращению:</p><textarea name="comment" style="width: 338px; height: 8em;"></textarea>' +
				'<p><input type="submit" value="Отправить"></p></form>',
			$curtain = showCurtain(tx, {class: 'close2Right'});
		$curtain.find('form').submit(function(){
			var $form = $(this), $inp = $form.find('input[type=submit]').after('<b class=icoLoad></b>');
			$.post($form.attr('action'), $form.serialize(), function(dt){
				$inp.next('.icoLoad').remove();
				if (dt == 'ok') {
					$curtain.remove();
					$ax.children('span').html('Обращение принято').addClass('green');
				} else {
					var $font = $inp.after('<span class="red ml10">'+ dt +'</span>').next();
					removeElement($font);
				}
			});
			return false;
		});
	});

	if ($('.pbTx .insElm').length) {
		replaceInsElm();
	}

	if ($('#pubAddTag').length) {
		initPubTag();
	}

	$('#subscribe').click(function(){
		var a = $(this), b = a.offset();
		if ($('.group-b4links').length && a.children('.icoBlueStar').length && $('.group-b4stars .icoMySubs').length && !$('.curtain').length) {
			var $curtain = showCurtain("Отписываясь от новостей группы, Вы автоматически выходите из нее. Продолжить?<p><input type='button' value='Да' class='unsubscribe'>", {class: 'close2Right'});
			$curtain.find('.unsubscribe').click(function(){
				$('#subscribe').click();
				setTimeout(function(){ $('.curtain').remove(); }, 200);
			});
			return false;
		}
		icoLoad(a, {style: "top:"+ b.top +"px;left:"+ b.left +"px;"});
		$.get(a.attr('href'), function(dt){
			icoLoad(a);
			if ($('.group-b4links').length && dt.i != 'null') {
				groupSubStarAndLink(dt);
				if (dt.group == 'logout') {
					groupJoinStarAndLink({tx: 'out'});
				}
			} else if (dt.i == 'on' || dt.i == 'off') {
				if (dt.i == 'on') { var c = document.createElement('div'); c.className = "popup green"; c.innerText = "Подписка оформлена"; document.body.appendChild(c); c.style = "top:"+ b.top +"px;left:"+ (b.left - (c.offsetWidth-a.outerWidth())/2) +"px;"; setTimeout(function(){ c.remove(); }, 2100); }
				a.children('.text').html((dt.i == 'on') ? 'Отписаться' : 'Подписаться');
				$('.subsCnt').html(dt.cn +' подписчиков');
			} else {
				showCurtain(dt.m ? dt.m : 'Что-то пошло не так');
			}
		}, 'json');
		return false;
	});
	$('#join2Grp').click(function(){
		var $ax = $(this), logo = '<img src="'+ $('.usrInfBlc .avatar').attr('src') +'" class="grpLogo mr15">', name = $('.usrInfNam').text().replace(/</g, '&lt;'),
			tx = "Это закрытая группа. Чтобы в неё вступить, необходимо одобрение администратора. Отправить запрос на регистрацию?<p align=center><input type=button value=Отправить class=join>",
			txBid = "Это закрытая группа. Ваша заявка на вступление находится на рассмотрении.<br><br>Желаете отменить заявку?<p align=center><input type=button value='Отменить заявку' class=join>",
			txLogout = "Выходя из группы, Вы теряете возможность создавать в ней какие-либо публикации, дискуссии и уроки. Однако вы остаётесь подписаны на новости группы. Продолжить?<p><input type='button' value='Да' class='logout'>",
			txWelcome = "<table><tr><td>"+ logo +"<td>Вы вступили в группу «"+ name +"». Теперь Вы можете следить за обновлениями группы, создавать здесь свои публикации, уроки и дискуссии.</table>",
			fn = function(){
				$ax.after('<b class=icoLoad></b>');
				$.get($ax.data('link'), function(dt){
					$ax.next('.icoLoad').remove();
					if (dt.st == 'ok') {
						groupJoinStarAndLink(dt);
						if ($ax.data('close')) {
							$ax.data('bid',(dt.tx=='bid')?1:0);
						}
						if (dt.subscription) {
							groupSubStarAndLink({i: 'on'});
						}
						if (dt.tx == 'in') {
							$('.group-b4pub').show();
							showCurtain(txWelcome);
						} else if (dt.tx == 'out') {
							$('.group-b4pub').hide();
						}
					} else {
						showCurtain(dt.tx,{style:"width: 340px;"});
					}
				},'json');
			}, byInvitation = location.search.match(/invitationFrom=(\d+)/);
		if ($ax.children('.icoMySubs').length && !$('.curtain').length && !$ax.data('bid')) {
			var $curtain = showCurtain(txLogout, {class: 'close2Right'});
			$curtain.find('.logout').click(function(){
				$('#join2Grp').click();
				setTimeout(function(){ $('.curtain').remove(); }, 200);
			});
			return false;
		} else if ($ax.data('close') && (!byInvitation || byInvitation[1] != $('#groupOwner').data('uid'))) {
			var $curtain = showCurtain(($ax.data('bid') && $ax.data('bid') == 1) ? txBid : tx, {style:"width: 340px;"});
			$curtain.find('.join').click(function(){
				$curtain.remove();
				fn();
			});
		} else {
			fn();
		}
		return false;
	});
	if (location.hash == '#join' && $('#join2Grp').parent('.group-b4links').length) {
		$('#join2Grp').click();
	}
	$('.invInGrp, .inviteHere').click(function(e){
		var $ax = $(this), tx = '', errors = {
			'auth': authNotice,
			'join': "Вы не являетесь участником этой группы, поэтому не можете приглашать в неё других пользователей.<p align='center'><a href='#join' class='join'>Хотите вступить в группу?</a>",
			'groups': "Вы можете приглашать в группу, только когда сами являетесь участником группы.<br><br>Вы не состоите ни в одной группе, поэтому не можете приглашать пользователей.",
			'party': "Вы не являетесь участником этой дискуссии",
			'discus': "Вы не можете отправить приглашение, так как сами не участвуете ни в одной дискуссии.<br><br>Вы можете приглашать только в те дискуссии, которые создавали сами или в те, в которых отвечали."
		}, lnk = $ax.data('t');
		if ($ax.data('i')) {
			lnk += '='+ $ax.data('i');
		}
		$ax.prepend('<b class=icoLoad></b>');
		$.get('/ae?checkBeforeInvitation&'+ lnk, function(dt){
			$ax.children('.icoLoad').remove();
			if (dt != 'ok') {
				var $curtain = showCurtain(errors[dt],{style:"width: 340px;"});
				$curtain.find('.join').click(function(){
					$('#join2Grp').click();
					$curtain.remove();
				});
				e.preventDefault();
			} else {
				location.href = $ax.attr('href');
			}
		});
		return false;
	});

	initSubs();

	$('#showSupportForm').click(getSpprtFrm);

	$('nav').on('click', '.nm', function(){
		location.href = '/lk/messages'; return false;
	});

	$('.privateMess').click(function(){
		var $ax = $(this),
			uid = $ax.data('id'),
			form = '<form action="/ae?message" method="post">' +
				'<input type="hidden" name="uid" value="'+ uid +'">' +
				'Написать сообщение <a href="/user/'+ uid +'">'+ $ax.data('name').replace(/</g, '&lt;') +'</a><br>' +
				'<textarea name="mess" maxlength="5000" class="mv10" style="width: 100%; box-sizing: border-box; height: 10em; resize: vertical;"></textarea><br>' +
				'<input type="submit" value="Отправить">' +
				'</form>';
		if ($ax.data('st')) {
			showCurtain(authNotice);
			return false;
		}
		var $curtain = showCurtain(form, {class: 'privateMessForm'});
		$curtain.find('form').submit(function(){
			var $cx = $(this), $inp = $cx.find('input[type=submit]');
			$inp.prop('disabled', true).after('<b class=icoLoad></b>');
			$.post($cx.attr('action'), $cx.serialize(), function(dt){
				$inp.prop('disabled', false).next('.icoLoad').remove();
				if (dt.st == 'ok') {
					$cx.html('<div align="center"><font color="green">Сообщение отправлено</font><br><a href="/lk/messages" class="mt10i">Посмотреть мои сообщения</a></div>');
					$cx.parent().removeClass('privateMessForm');
					$ax.prev('.read').replaceWith('<font color="gray">Прочитано</font>');
				} else {
					$inp.before('<div class="red mb10">'+ dt.er +'</div>');
				}
			},'json');
			return false;
		});
		lengthCounter($curtain.find('textarea[name=mess]'), {style: 'display: inline-block; margin: -10px 0 10px;'});
		$curtain.find('textarea[name=mess]').focus();

		$.post('/a', {check_pm_opt: uid}, function(dt){
			if (dt) {
				$curtain.find('form textarea').replaceWith('<p>'+ dt +'</p>');
				$curtain.find('form input[type=submit]').css('visibility', 'hidden').prop('disabled', true);
			}
		});

		return false;
	});

	if ($('.blockWithHint').length) {
		function blockWithHint() {
			$('.blockWithHint').after('<div class="mainBlock pv5"><a class="js">Показать подсказку</a></div>').next('div').click(function(){
				delete localStorage[$(this).prev().show().attr('id')];
				$(this).remove();
				return false;
			});
		}
		if (!localStorage[$('.blockWithHint').attr('id')]) {
			$('.blockWithHint').show();
		} else {
			blockWithHint();
		}
		$('.hideHint').click(function(){
			$(this).parent().hide();
			localStorage[$(this).parent().attr('id')] = 'hide';
			blockWithHint();
			return false;
		});
	}

	$('.listOfPM').on('click', '.dl, .del', function(){
		var $ax = $(this),
			$curtain = showCurtain("Вы действительно хотите удалить это сообщение?<p><input type=button value=Удалить class=remove>", {class: "close2Right"});
		$curtain.find('.remove').click(function(){
			$curtain.remove();
			$ax.after('<b class=icoLoad></b>');
			$.get('/a?message&remove='+ $ax.data('id'), function(dt){
				$ax.next('.icoLoad').remove();
				if (dt == 'ok') {
					$ax.closest('.item').replaceWith('<font color=gray>Сообщение удалено</font>');
				} else {
					$ax.replaceWith('<font color=red>Что-то пошло не так</font>');
				}
			});
		});
		return false;
	}).find('.read').click(function(){
		var $ax = $(this).hide().after('<b class=icoLoad></b>');
		$.get('/ae?message&read='+ $ax.data('id'), function(dt){
			$ax.next('.icoLoad').remove();
			if (dt == 'ok') {
				$ax.replaceWith('<font color=gray>Прочитано</font>');
			} else {
				$ax.replaceWith('<font color=red>Что-то пошло не так</font>');
			}
		});
		return false;
	});

	if ($(".aside-list-users, .list-users, .asdCrsAuthors").length) {
		$(".aside-list-users .nickname, .list-users .nickname, .asdCrsAuthors .nickname").each(function(){
			if ($(this).width() > 238) {
				$(this).addClass('ending').attr('title', $(this).html());
			}
		});
	}

	initHomepageNews($('#homepageNews'));

	$('.pubHelp').click(function(){
		showCurtain($(this).data('tx'));
		return false;
	});

	if ($('.cmmLst, #msgBoardQuest').length) {
		var awc_sn = function(st, $after){
			var texts = {
				'null': ['red', 'Что-то пошло не так'],
				'auth': ['blue', authNotice],
				'wrong': ['red', 'Комментарий не найден'],
				'timeout': ['red', 'Этот комментарий нельзя '+ (($after.hasClass('comment-edit')) ? 'редактировать' : 'удалить') +', так как прошло более 24 часов с момента его публикации'],
			}, tx = (typeof texts[st] != 'undefined') ? texts[st][1] : 'Что-то пошло не так',
				cl = (typeof texts[st] != 'undefined') ? texts[st][0] : red;
			var $font = $after.after('<font color='+ cl +' class=ml10>'+ tx +'</font>').next('font');
			removeElement($font);
		};
		$('.cmmLst, #msgBoardQuest .answers').on('click', '.comment-edit', function(){
			var $ax = $(this), $bx = $ax.parent(), pushImages = function($form, images){
				var ffai = '/data/attached_image/';
				$.each(images, function(k,v){
					$form.find('.attachImg').click();
					$form.find('.attachImg_block:last .attachImg_selectImage').parent().html('<img src="'+ ffai + (v.src_min ? v.src_min : v.src) +'" style="max-width: 200px;">');
					$form.find('.attachImg_block:last [name="caption[]"]').val(v.descr);
					$form.find('.attachImg_block:last').append('<input type="hidden" name="iid[]" value="'+ v.id +'">');
				});
			};
			if ($bx.prevAll('.comment-ffe, .reply2pub_form').length) {
				return false;
			}
			icoLoad($ax);
			$.get('/a?comment='+ $ax.data('id') +'&from='+ $ax.data('cat') +'&edit&get', function(dt){
				icoLoad($ax);
				if (dt.st != 'ok') {
					awc_sn(dt.st, $ax);
					return false;
				}
				if ($ax.data('cat') == 'discussion') {
					$('.reply2discussion.veshka').removeClass('veshka');
					$('#reply2discussion_form .comment-cancel_edit').click();
					jQuery('#reply2discussion_form').hide(0, function(){
						$form = $(this);
						$form[0].reset();
						$form.find('.link:not(.proto), .attachImg_block, input[name=edit]').remove();
						$form.find('input[type=submit]').val('Сохранить изменения');
						$form.attr('action', '/a?comment='+ $ax.data('id') +'&from='+ $ax.data('cat') +'&edit&save');
						$form.append('<input type="button" value="Отменить редактирование" class="comment-cancel_edit ml20">').find('.comment-cancel_edit').click(function(){
							$form.attr('action', '/a');
							$form.find('input[name=edit], .comment-cancel_edit').remove();
							$form.find('input[type=submit]').val('Ответить');
							$form.hide().prevAll('.answerBody, .tools').show();
						});

						$bx.after($form);

						$form.show(0, function(){
							jQuery(this).find('.cmm_secondLayer').html(dt.tx.replace(/\r?\n/g, '<br>')).focus();
							showSmiles($('.cmm_secondLayer')[0]);
							$(this).append('<input type="hidden" name="edit" value="'+ $ax.data('id') +'">');
							$.each(dt.links, function(k,v){
								$form.find('.links .add').click();
								$form.find('.link:last [name="url[]"]').val(v.url);
								$form.find('.link:last [name="descr[]"]').val(v.descr);
								$form.find('.link:last').append('<input type="hidden" name="lid[]" value="'+ v.id +'">');
							});
							pushImages($form, dt.images);
						});
					}).prevAll('.answerBody, .tools').hide();
				} else {
					var $form = $('.reply2pub_form:last').clone();
					$form = $bx.after($form).next('.reply2pub_form');
					$form.append('<input type="hidden" name="edit" value="'+ $ax.data('id') +'">');
					$form.prevAll('.tools, .answerBody').hide();
					$form.children('.cmmTo').remove();
					$form.children('.cmmTA').attr('name', 'text').val(dt.tx).focus();
					r2p_form_init($form);
					$form.children('.attachImg').click(attachImg);
					$form.children('.attachImg_block').remove();
					$form.find('input[type=submit]').val('Сохранить изменения');
					$form.attr('action', '/ae?comment='+ $ax.data('id') +'&from='+ $ax.data('cat') +'&edit&save');
					$form.find('.cmmCnc').replaceWith('<input type="button" value="Отменить редактирование" class="comment-cancel_edit ml40">');
					$form.find('.comment-cancel_edit').click(function(){
						$form.prevAll('.answerBody, .tools').show();
						$form.remove();
					});
					pushImages($form, dt.images);
					return false;
				}
			}, 'json');
			return false;
		}).on('click', '.comment-delete', function(){
			var $ax = $(this),
				$bx = showCurtain('<b>Удаление ответа</b><p>Вы действительно хотите удалить<br>свой ответ?</p><p><input type="button" value="Удалить" class="dl_cm"></p>', {class: 'close2Right', close_text: 'Отменить', width: 290});
			$bx.find('.dl_cm').click(function(){
				$bx.remove();
				$ax.after('<b class=icoLoad></b>');
				$.get('/ae?comment&delete='+ $ax.data('id') +'&from='+ $ax.data('cat'), function(dt){
					$ax.next('.icoLoad').remove();
					if (dt == 'ok') {
						$ax.closest('.cmmItm, .answer').replaceWith('<div class="gray mv20">Комментарий удалён</div>');
					} else {
						awc_sn(dt, $ax);
					}
				});
				return false;
			});
			return false;
		});
	}

	$('<a href="#up" id="up"></a>').click(function(){
		$('html, body').animate({'scrollTop':0}, 400, 'linear');
		return false;
	}).appendTo('body');

	$('.deletePost').click(function(e){
		var a = $(this),
			b = $('<div>', {"class": 'popup'}).html('Точно удалить? <a class="js mh10">удалить</a> <a class="js">отмена</a>');
		b.insertBefore(a);
		b.children('a:eq(0)').click(function(){
			b.remove();
			icoLoad(a);
			$.get('/a?delPub='+ a.data('id'), function(d){
				icoLoad(a);
				if (d == 'ok') {
					a.parent().html('<h3 class="maroon">Публикация удалена</h3>');
				} else if (d == 'nil') {
					a.before('<font class="popup">Операция недоступна</font>');
				} else {
					showCurtain(d, {"class": 'pv20s'});
				}
			});
		});
		b.children('a:eq(1)').click(function(){
			b.remove();
		});
	});

	if ($('.text_of_news').length) {
		$('.text_of_news img').each(function(k,v){
			if (v.alt) {
				$(v).after('<div class="signature2image">'+ v.alt +'</div>');
			}
		});
	}

	$('body').on('mouseenter', '.custom_hint', function(e){ showCustomHintBubble(this, e); })
		.on('mouseleave', '.custom_hint', function(){ $('.custom_hint_bubble').remove(); })
		.on('mousemove', '.custom_hint', floatingBubble)
		.on('click', '.custom_hint', function(e){ showCustomHintBubble(this, e); removeElement($('.custom_hint_bubble')); });

	var $asdLst = $('aside > :last');
	if ($asdLst.length && $asdLst.offset().top + $asdLst.outerHeight() < window.innerHeight && $('.mainBlock:last').offset().top + $('.mainBlock:last').outerHeight() < $('aside').offset().top + $('aside').outerHeight() && !$('.stEl').length && !$asdLst.hasClass('srchBySite')) {
		$asdLst.css('min-height', window.innerHeight - $asdLst.offset().top - ($asdLst.outerHeight() - $asdLst.height()));
	}
	if ($('.mainBlock').length && $('#mainWrapper').width() >= 1000 && !$('.stEl').length && $('aside').length) {
		var $ax = $('.mainBlock:last'),
			bx = $ax.offset().top + $ax.outerHeight(),
			cx = $('aside').offset().top + $('aside').outerHeight();
		if (bx < cx) {
			$ax.css('min-height', $ax.height() + (cx - bx));
		}
	}

	$('.showAuthNotice').click(function(){
		showCurtain(authNotice);
		return false;
	});

	$('.showCertDummy').click(function(){
		showCurtain('<img src="'+ this.dataset.src +'" style="max-height: 93%;">', {width: "auto", height: window.innerHeight, css: {"text-align": "center"}});
		return false;
	});

	if ($('#pubAddFrm').length > 0) {
		initPubAddFrm($('#pubAddFrm'));
	}

	if ($('#testAdd').length > 0) {
		initTestAdd($('#testAdd'));
	}

	if ($('#testExrcSearch').length > 0) {
		initTestExrcSearch($('#testExrcSearch'));
	}

	if ($('#testExrcView').length > 0) {
		initTestExrcView($('#testExrcView'));
	}

	if ($('#testList').length > 0) {
		initTestList($('#testList'));
	}

	if ($('#test').length > 0) {
		initTest($('#test'));
	}

	if ($('#asideTestFormatter').length > 0) {
		initAsideTestFormatter($('#asideTestFormatter'));
	}

	if ($('#asideTestFilter').length > 0) {
		initAsideTestFilter($('#asideTestFilter'));
	}

	if ($('#msgBoardQuest .answers, .cmmWrp .cmmLst').length && location.hash) {
		showCmmByAnchor();
	}

	$('#attachVote').click(attachVote);
	if ($('#attachedVoting').length) {
		attachedVoting();
	}

	$('.attachImg').click(attachImg);

	if ($('.cmmWrp').length) {
		initComments();
	}

	if ($('#loadable_list').length) {
		if ($('#loadable_list').find('.pbLsPb, .item').length >= (typeof $('#loadable_list').data('qty') == 'number' ? $('#loadable_list').data('qty') : 10)) {
			$('#loadable_list').after('<a id="show_more_items">ПОКАЗАТЬ БОЛЬШЕ</a>');
			$('#show_more_items').click(load_more_items);
		}
	}

	$('.quest, .answers, .cmmLst').on('click', '.attachedImage_link', function(){
		showCurtain('<a href="'+ this.href +'" target="_blank"><img src="'+ this.href +'" style="max-width: 900px; max-height: 600px;"></a>', {width: 'auto'});
		return false;
	});

	$('#add2friends').click(function(){
		var $ax = $(this).after('<b class="icoLoad"></b>'), res = {
			on: 'Пользователь добавлен в список друзей',
			off: 'Пользователь удален из списка друзей',
			auth: authNotice,
		};
		$.get('/ae?add2friends='+ $ax.data('uid'), function(dt){
			$ax.next('.icoLoad').remove();
			showCurtain(res[dt]);
			if (dt == 'on') {
				$ax.html('Убрать из друзей');
				$ax.prev('.icons').toggleClass('icoRmFromFriends icoInvNewPart')
			} else if (dt == 'off') {
				$ax.html('Добавить в друзья');
				$ax.prev('.icons').toggleClass('icoRmFromFriends icoInvNewPart')
			}
		});
	});

	if ($('.insertSmile').length) {
		insertSmile();
	}

	if ($('.pbTx').length) {
		$('.pbTx table').each(function(i,e){
			if ($(e).width() > $(e).closest('.mainBlock').width()) {
				if ($(e).parent('div').length) {
					$(e).parent().addClass('wrp4el');
				} else {
					$(e).wrap('<div class="wrp4el"></div>');
				}
			}
		});
	}

	$('.qty_tags_in_dis').each(function(i,e){
		var $ax = $(e).find('div');
		$ax.eq(Math.ceil($ax.length/2) - 1).addClass('nbb');
	});

	$('.tags_groups-toggle').click(function(){
		var $ax = $(this);
		$ax.next().toggle();
		$ax.children().html(($ax.next(':visible').length) ? '&and;' : '&or;');
		if (!$ax.children(':visible').length) {
			$ax.children().show();
		}
	});

	$('.iWantCert4ThisPub, .pbBtW .pbBtC').click(iWantCert4ThisPub);

	if ($('#msgBoardQuest').length) {
		init4discus();
	}

	if ($('#polls').length) {
		initPolls($('#polls'));
	}

	$(document).click(function(e){
		if ($('#mainWrapper').width() < 781 && $('nav').hasClass('slide') && $('nav').hasClass('ps2')) {
			if (!$(e.target).parent('.chSc').length && !$(e.target).closest('nav').length && !$(e.target).closest('.nav_l2').length) {
				$('nav .switch').click();
			}
		}
	});
	$('nav .switch').click(function(){
		var swHg = $(this).height();
		if ($('nav').height() > swHg) {
			$('.nav_l2').removeAttr('style');
			$('nav').animate({height: swHg}, 200, function(){
				$('nav').removeAttr('style').children('.chSc').remove();
				if ($('main').offset().top > window.scrollY) {
					$('nav').removeClass('slide').next('.nav_shadow').remove();
				}
			}).removeClass('ps2 ps4');
			if (typeof showLogout == 'function') {
				showLogout({type: "mouseleave"});
			}
		} else {
			if (typeof showLogout == 'function') {
				showLogout({type: "mouseenter", f: true});
			}
			$('nav').addClass('ps2').animate({height: $('nav')[0].scrollHeight + 10}, 200, function(){
				$('.nav_l2').show();
				if ($('nav').hasClass('slide') && $('nav').hasClass('ps2')) {
					$('.nav_l2').css({position: 'fixed', top: $('nav')[0].scrollHeight + 10});
				}
			});
		}
	});

	floating_blocks();

	$('#mobileZyx .close i').click(function() {
		$('#mobileZyx').hide();
var date_ = new Date();
 var minutes_ = 60;
 date_.setTime(date_.getTime() + (minutes_ * 60 * 1000));
		$.cookie('hideMobileBn', true, {expires: date_, path: '/'});
	});

	if ($('#mobileZyx').length) {
		setTimeout(function() {
			$('#mobileZyx').show();
		}, 3000);
	}

	$('.asdSocToggle').click(function(){
		var $ax = $(this), $b = $ax.parent();
		$('.asdSocToggle.a6').removeClass('a6');
		$ax.addClass('a6');
		if ($ax.data('t') == 'ok') {
			$('#vk_groups_edu').hide();
			if (!$('#ok_group_widget').length) {
				$('<div>', {id: 'ok_group_widget'}).insertAfter($b);
				jQuery.getScript('//connect.ok.ru/connect.js', function(){
					OK.CONNECT.insertGroupWidget('ok_group_widget','53676750602464','{"width":305,"height":285}');
				});
			} else {
				$('#ok_group_widget').show();
			}
		} else {
			$('#ok_group_widget').hide();
			if (!$('#vk_groups_edu').length) {
				$('<div>', {id: 'vk_groups_edu'}).insertAfter($b);
				jQuery.getScript("//vk.com/js/api/openapi.js?105", function(){
					VK.Widgets.Group("vk_groups_edu", { mode: 0, width: 305, height: 285, color1: 'FFFFFF', color2: '2B587A', color3: '5B7FA6' }, 101332469);
				});
			} else {
				$('#vk_groups_edu').show();
			}
		}
	});

	$('.tglNxtElm').click(function(){
		$(this).next().slideToggle();
	});

	$('.showWarnAboutEdit').click(function(){
		showCurtain('<p><strong>Редактирование материала</strong></p><p>Редактирование публикации невозможно, так как прошло 30 дней с момента размещения на сайте.</p>');
	});

	$('.notThisTime').click(function(e){
		e.preventDefault();
		var $a = $(this);
		if ($a.data('tid') && notThisTime_tids[$a.data('tid')]) {
			tx = notThisTime_tids[$a.data('tid')];
		} else {
			tx = notThisTime_tids['dflt'];
		}
		if ($a.data('rp1')) {
			tx = tx.replace('[[rp1]]', $a.data('rp1'));
		}
		var opt = {};
		if ($a.data('md1')) {
			opt = {close_2: 1, class: 'pv20s'};
		}
		showCurtain(tx, opt);
	});

	var e = document.getElementById('fstDcr_off');
	if (e) {
		e.style.marginTop = "-"+ document.body.style.paddingTop;
		e.addEventListener('click', function(){
			document.body.removeAttribute("style");
			document.cookie = "hideFestiveDecoration=1;path=/;expires="+ new Date(new Date() * 1 + 4 * 864e+5).toUTCString();
			this.remove();
		});
	}

	$('.addMoreZ').click(function(){
		var a = $(this), c = a.prevAll().length, mx = a.data("mx")*1;
		if (c < mx) {
			var b = a.prev().clone(); b.val(''); b.insertBefore(a); b.focus();
			c++;
		}
		if (c >= mx) {
			a.hide();
		}
	});

	if ($('.pbBtW').length) {
		$('.pbBtW .pbBtR').click(pbOrdRvw);
		$('.pbBtW .pbBtP').click(pbPubInCll);
	}

        $('.asdRcnCmm').each(function(i,e){
            showSmiles(e);
        });
});

$(this).scroll(function(){
	if (window.scrollY > window.innerHeight) {
		$('#up').fadeIn(400);
	} else {
		$('#up').fadeOut(200);
	}
	if ($('#loadable_list').length && !$('#loadable_list').hasClass('manualLoading') && $('html').scrollTop() + window.innerHeight >= $('#loadable_list').height() && $('#mainWrapper').width() >= 1000) {
		load_more_items();
	}
	slidingMenu();
	fixAsideFiller();
}).resize(function(){
	if ($('#greeting').length) { $('#greeting div').css('max-height', window.innerHeight); }
	if ($('nav').height() > $('nav .switch').height()) {
		$('nav').removeAttr('class style').next('.nav_shadow').remove();
		$('nav .chSc, nav .logout').remove();
		$('.nav_l2').removeAttr('style');
	}
	floating_blocks();
});

function getSpprtFrm(e) {
	e.preventDefault();
	var a = $(this);
	icoLoad(a, {"style": a.attr("id") ? "padding:3px 0;" : ""});
	$.get('/support?form', function(d){
		icoLoad(a);
		if ($('.curtain').length) {
			$('.curtain').remove();
		}
		showCurtain(d, {class: 'close2Right', width: 480});
		lengthCounter('#bottomSupportForm textarea[name=ms]');
		supportForm();
	});
}

function load_more_items() {
	var $list = $('#loadable_list'), ln = $list.children('.pbLsPb, .item, .grLsGr').length,
		qty = (typeof $('#loadable_list').data('qty') == 'number') ? $('#loadable_list').data('qty') : 10;
	if (!ln || ln < qty) {
		$list.data('st', 'all');
	}
	if (typeof $list.data('st') == 'undefined' || $list.data('st') == '') {
		$list.append('<p align="center"><b class="icoLoad" style="position:static;"></b></p>').data('st','load');
		$('#show_more_items').hide();
		$.get((location.search ? location.search +'&' : '?') +'beginningWith='+ ln, function(dt){
			$('#loadable_list .icoLoad').parent().remove();
			if (dt) {
				$list.append(dt).data('st','');
				replaceInsElm();
				$('#show_more_items').show();
			} else {
				$list.data('st','all');
			}
		}).error(function(){
			$('#loadable_list .icoLoad').parent().remove();
			var $font = $list.append('<div class="red mv20">Ошибка выполения запроса. Обновите страницу и попробуйте ещё раз.</div>').children('.red:last');
			removeElement($font);
		});
	}
}

function autocomplete($obj, source, adtPrm, connType, connData) {
	adtPrm = adtPrm || false;
	connType = connType || 'get';
	connData = connData || '';
	var makeSet = function(dt){
		var $hintsList = $('<div>',{class: 'hintsList'}), re = new RegExp($obj.val(), "i");
		$.each(dt, function(i,v){
			if (re.test(v) || !$obj.val()) {
				$('<i>', {html: v.replace(/</g, '&lt;').replace(re, "<b>$&</b>")}).data({i: i, ax: v}).appendTo($hintsList);
			}
		});
		$('.hintsList').remove();
		if ($hintsList.children().length) {
			$hintsList.children('i:first').addClass('select');
			$hintsList.children('i').click(function(){
				$obj.val($(this).data('ax')).data('i',$(this).data('i'));
				$('.hintsList').remove();
			});
			$hintsList.append($('<a>',{href: '#close', html: 'закрыть'}).click(function(){ $('.hintsList').remove(); return false; })).insertAfter($obj);
		}
	}
	if (typeof adtPrm == 'string') {
		adtPrm = $(adtPrm);
	}
	$obj.keyup(function(e){
		if (($obj.val().length > 1 || ($obj.val() && typeof source == 'object')) && ((e.keyCode > 45 && e.keyCode < 91) || e.keyCode == 8 || e.keyCode == 32)) { // del или буквы, backspace или пробел
			if (typeof ACTO != 'undefined' && ACTO) {
				clearInterval(ACTO);
			}
			if (!$obj.val() || $obj.val().length < 2) {
				return false;
			}
			if (typeof source == 'object') {
				ACTO = setTimeout(function(){
					makeSet(source);
				}, 100);
			} else {
				ACTO = setTimeout(function(){
					$obj.after('<b class=icoLoad></b>');
					$.ajax({
						type: connType,
						url: !connData ? source + $obj.val() + (adtPrm ? '&'+ adtPrm.attr('name') +'='+ adtPrm.val() : '') : source,
						data: connData ? connData + $obj.val() + (adtPrm ? '&'+ adtPrm.attr('name') +'='+ adtPrm.val() : '') : connData,
						success: function(dt){
							$obj.next('.icoLoad').remove();
							makeSet(dt);
						},
						dataType: 'json'
					});
				}, 320);
			}
		}
		if ($('.hintsList').length) {
			var cx = $('.hintsList .select');
			if (e.keyCode == 13) { // enter
				$obj.val(cx.data('ax')).data('i',cx.data('i'));
				$('.hintsList').remove();
			}
			if (e.keyCode == 27 || !$obj.val()) { // esc
				$('.hintsList').remove();
			}
			if (e.keyCode == 38) { // вверх
				cx.removeClass('select');
				if (cx.prev('i').length) {
					cx.prev('i').addClass('select');
				} else {
					$('.hintsList i:last').addClass('select');
				}
			}
			if (e.keyCode == 40) { // вниз
				cx.removeClass('select');
				if (cx.next('i').length) {
					cx.next('i').addClass('select');
				} else {
					$('.hintsList i:first').addClass('select');
				}
			}
		}
	}).keypress(function(e){
		if (e.keyCode == 13 && $('.hintsList').length) { // enter
			return false;
		}
	}).blur(function(){
		if (typeof ACTO != 'undefined' && ACTO) {
			clearInterval(ACTO);
		}
		setTimeout(function(){ $('.hintsList').remove(); }, 400);
	});
}

function replaceInsElm() {
	$('#pubAddTa, .pbTx').find('.insElm').each(function(){
		var $ax = $(this);
		if ($ax.hasClass('elmImg')) {
			var descr = '';
			$ax.next('br').remove();
			$ax.prev('br').remove();
			if ($ax.data('descr')) {
				descr = '<div class="signature2image">'+ $ax.data('descr') +'</div>';
			}
			$ax.replaceWith("<div class='mv10'><img src='"+$ax.data('src')+"'>"+ descr +"</div>");
		}
		if ($ax.hasClass('elmCut')) {
			$ax.remove();
		}
		if ($ax.hasClass('elmFile')) {
			var href = $ax.data('href'),
				ex = href.match(/\w+$/)[0],
				size = $ax.data('size');
			if (size > 1024 * 1024) {
				size = [size / (1024 * 1024), "Мб"];
			} else if (size > 1024 * 2) {
				size = [size / 1024, "Кб"];
			} else {
				size = [size, "байт"];
			}
			size[0] = Math.round(size[0] * 100) / 100;
			$ax.replaceWith("<a href='"+ href +"' class='fileLink "+ex+"File'>"+$ax.data('tx')+"<br><font color=gray>"+ex.toUpperCase()+" / "+size[0]+' '+size[1]+"</font></a>");
		}
		if ($ax.hasClass('elmVid')) {
			var $bx = $ax.replaceWith('<div>'+ $ax.data('i') +'</div>');
		}
	});
}

function initPubTag() {
	$('#pubAddTag').click(function(){
		if ($('#pubTagInp').length) {
			return false;
		}
		var $ax = $('.pubAddTagLst').append('<li><input type=text id=pubTagInp>').find('input:last').focus();
		$('#pubAddTag').hide();
		autocomplete($('#pubTagInp'), '/ae?tgpt=');
		return false;
	});

	$('.pubAddTagLst').on('change','#pubTagInp',function(){
		var $ax = $(this);
		setTimeout(function(){
			$ax.val($ax.val().replace(/ \(\d+\)$/,''));
			if ($ax.val()) {
				$ax.nextAll('.icoLoad').remove();
				$ax.before('<input type=hidden name=tag[] value="'+ $ax.val() +'"> '+ $ax.val() +' <a href=#delete class="delTag ml10 a3">удалить</a>').remove();
				$('.pubTagInpHint').remove();
				$('#pubAddTag').show().focus();
			}
		}, 360);
	}).on('keypress','#pubTagInp',function(e){
		if (e.keyCode == 13) {
			$('#pubTagInp').change();
			return false;
		}
	}).on('click','.delTag',function(){
		var $ax = $(this).parent();
		if ($ax.parent().children('li').length > 1) {
			$ax.remove();
			$('#pubAddTag').show().focus();
		} else {
			$ax.html('<input type=text id=pubTagInp>');
			autocomplete($('#pubTagInp'), '/ae?tgpt=');
		}
		return false;
	}).on('focus','#pubTagInp', function(){
		$(this).after($('<div>',{class: 'pubTagInpHint', html: "Enter - добавить тег"}));
	}).on('blur','#pubTagInp', function(){
		$('.pubTagInpHint').remove();
	});

	if ($('#pubTagInp').length) {
		autocomplete($('#pubTagInp'), '/ae?tgpt=');
	}
}

function initSubs() {
	$('.subs-list-users .unsub').click(function(){
		var $ax = $(this);
		$.get('/ae?subscribe=user&id='+$ax.parent().data('id'), function(dt){
			if (dt.i == 'off') {
				$ax.closest('.item').remove();
			}
		},'json');
		return false;
	});
	$('.subs-list-tags .icoDel').click(function(){
		var $ax = $(this)
		$.get('/ae?subscribe=tag&id='+$ax.data('id'), function(dt){
			if (dt.i == 'off') {
				$ax.parent().remove();
			}
		},'json');
	});
	$('.subs-list-groups .unsub').click(function(){
		var $ax = $(this)
		$.get('/ae?subscribe=group&id='+$ax.data('id'), function(dt){
			if (dt.i == 'off') {
				$ax.parent().remove();
			}
		},'json');
		return false;
	});
}

function initComments() {
	$('.cmmWrp').on('click', '.cmmAnsBtn', function(){
		var $ax = $(this).closest('.cmmItm'),
			$form = $('.reply2pub_form:last').clone();
		if ($ax.children('.reply2pub_form').length) {
			return false;
		}
		$form = $ax.append($form).children('.reply2pub_form');
		$form.children('.cmmTo').val($ax.data('i'));
		$form.children('.cmmTA').val('').focus();
		r2p_form_init($form);
		$form.children('.attachImg').click(attachImg);
		$form.children('.images').empty();
		return false;
	}).on('click', '.cmmCmpBtn', function(){
		var $ax = $(this);
		$.get('/ae?comment='+ $ax.closest('.cmmItm').data('i') +'&complain', function(dt){
			if (dt.st == 'ok') {
				removeElement($ax.after('<font color=green>'+ dt.ms +'</font>').next());
				$ax.remove();
			} else {
				showCurtain(dt.ms);
			}
		},'json');
		return false;
	}).on('click', '.cmmCnc', function(){
		var $ax = $(this).closest('.cmmItm');
		if ($ax.length) {
			$ax.children('.reply2pub_form').remove();
		} else {
			var $form = $(this).closest('form');
			$form.find('.cmmTA').val('');
			$form.find('.images').empty();
			$form.find('.attachImg').show();
		}
		return false;
	});
	$('.cmmOrd').click(function(){
		var $ax = $(this), url = '/ae?comments&aid='+ $ax.data('id') +'&date='+ $ax.data('date') +'&from='+ $ax.data('from');
		$.get(url, function(dt){
			$('#showMoreComments').data('date', $ax.data('date')).show();
			$('.cmmLst').html(dt);
			$ax.data('date', ($ax.data('date') == 'asc') ? 'desc' : 'asc');
		});
		return false;
	});
	$('#showMoreComments').click(function(){
		if ($(this).data('card') == 'red') {
			return false;
		}
		var $ax = $(this).append('<b class=icoLoad></b>').data('card', 'red'),
			url = '/ae?comments&aid='+ $ax.data('id') +'&offset='+ $('.cmmLst .cmmItm').length +'&from='+ $ax.data('from');
		if ($ax.data('date')) {
			url += '&date='+ $ax.data('date');
		}
		$.get(url, function(dt){
			$ax.data('card', 'green').children('.icoLoad').remove();
			if (dt) {
				$('.cmmLst').append(dt);
			} else {
				$ax.hide();
			}
		});
		return false;
	});

	if ($('.reply2pub_form').length) {
		r2p_form_init($('.reply2pub_form'));
	}

	$('.cmmLst .answerBody div').each(function(i,e){
		activationLinks(e);
	});
}

function showCustomHintBubble(element, event) {
	$('.custom_hint_bubble').remove();
	$('<div>', {class: "custom_hint_bubble", html: $(element).data('title')}).appendTo('body');
	floatingBubble(event);
}
function floatingBubble(event) {
    var $bubble = $('.custom_hint_bubble'),
        x = event.clientX + 14,
        y = event.clientY;
    if (event.clientX + $bubble.width() > window.innerWidth) {
        x = event.clientX - $bubble.width() - 14;
    }
    if (event.clientY + $bubble.height() > window.innerHeight) {
        y = event.clientY - $bubble.height() - 14;
    }
    $bubble.css({position: 'fixed', top: y, left: x});
}

function r2p_form_init($form) {
	var $percent, $btn = $form.find('input[type=submit]');
	$form.ajaxForm({
		forceSync: true,
		dataType: 'json',
		beforeSubmit: function(arr, $form, options){
			if (!$form.children('.cmmTA').val()) {
				var $ta = $form.children('.cmmTA'),
					$el = $ta.addClass('bgRed').after('<div class="red mb10">Текст комментария не заполнен</div>').focus().next('div');
				removeElement($el);
				setTimeout(function(){ $ta.removeClass('bgRed'); }, 2000);
				return false;
			}
			$btn.prop('disabled', true).before('<b class="icoLoad" style="margin:0;width:'+ $btn.outerWidth() +'px;height:'+ $btn.outerHeight() +'px;"></b>');
			$percent = $btn.after('<span class="percent"></span>').next();
		},
		beforeSend: function(){
			$percent.html('0%');
		},
		uploadProgress: function(event, position, total, percentComplete){
			$percent.html(percentComplete +'%');
		},
		success: function(res){
			$percent.remove();
			$btn.prop('disabled', false).prev('.icoLoad').remove();
			if (res.st == 'null') {
				var $el = $form.find('input[type=submit]').parent().before('<p class="red">'+ res.ms +'</p>').prev();
				removeElement($el, 6000);
			} else if ($form.find('input[name=edit]').length) {
				var $answer = $($.parseHTML(res.answerHtml));
				activationLinks($answer.find('.answerBody div:first')[0]);
				$form.prevAll('.answerBody').replaceWith($answer.find('.answerBody'));
				$form.prevAll('.tools').show();
				$form.remove();
			} else {
				var $cmm = $form.closest('.cmmItm'),
					$answer = $($.parseHTML(res.ms));
				activationLinks($answer.find('.answerBody div:first')[0]);
				if ($cmm.length) {
					$form.remove();
					$cmm.after($answer);
				} else {
					$form.find('.cmmCnc').click();
					$('.cmmLst').append($answer);
				}
			}
		},
		error: function(){
			$percent.remove();
			showCurtain('<font color="maroon">Ошибка выполения запроса. Обновите страницу и попробуйте ещё раз.</font>');
		},
	});
}

function lengthCounter(obj,opt) {
	var $ax = (obj.jquery) ? obj : $(obj);
	$ax.keyup(function(e){
		var ml = $ax.attr('maxlength') * 1, cl = $ax.val().length, nm = ml - cl;
		if ((ml < 200 || cl > ml - ml/3) && cl) {
			if (!$ax.next('.lengthCounter').length) {
				var $span = $('<span>',$.extend({html: 'Осталось: <span></span>', class: 'lengthCounter gray'}, opt));
				$ax.after($span).blur(function(){
					$ax.next('.lengthCounter').remove();
				});
			}
			$ax.next('.lengthCounter').children('span').html(nm);
		} else {
			$ax.next('.lengthCounter').remove();
		}
	});
}

function showCurtain(tx, opt) {// opt - объект
	if (typeof opt != 'object') {
		opt = {};
	}
	var close_t = opt.close_text || "Закрыть";
	if (opt.close_2) {
		tx += '<input type="button" value="'+ close_t +'" class="close_2">'; delete opt.close_2;
	} else if (opt.close_3) {
		tx += '<div class="mt20"><input type="button" value="'+ close_t +'" class="close"></div>'; delete opt.close_3;
	} else {
		var closeBtnClass = (typeof opt.closeBtnClass != 'undefined') ? opt.closeBtnClass : '';
		tx += "<p align='center' class='mb0 " + closeBtnClass + "'><input type='button' class='close' value='"+ close_t +"'>";
		if (opt.close_text) {
			delete opt.close_text;
		}
	}
	var $inner = $('<div>', $.extend({html: tx},opt)).addClass('innerLayer'),
		$curtain = $('<div>', {html: $inner, class: 'curtain'}).appendTo('body');
	$curtain.find('.close, .close_2').click(function(){
		$curtain.remove();
	});
	return $curtain;
}

function supportForm() {
	$('#bottomSupportForm').submit(function(){
		var $form = $(this), $inp = $form.find('input:last'), e = false;
		if (!$form.find('[name=ms]').val()) {
			e = 'Текст сообщения отсутствует';
		} else if ($form.find('[name=email]').length && !$form.find('[name=email]').val()) {
			e = 'E-mail не указан';
		} else {
			$inp.prop('disabled', true).after('<b class="icoLoad"></b>');
			$.post($form.attr('action'), $form.serialize(), function(dt){
				$form.replaceWith('<p class="green">'+ dt +'</font>');
				$('.close2Right.innerLayer').removeClass('close2Right').children('p:last').removeAttr('class');
			}).error(function(){
				$inp.prop('disabled', false).next('.icoLoad').remove();
				e = 'Ошибка выполения запроса. Обновите страницу и попробуйте ещё раз';
			});
		}
		if (e) {
			removeElement($inp.before('<p class="red mt0">'+ e +'</p>').prev());
		}
		return false;
	}).children('[name=ms]').focus();
}

function groupSubStarAndLink(dt) {
	var texts = {
		"on": "<b class='icons icoBlueStar' title='Отписаться'></b>",
		"off": "<b class='icons icoStar'></b> Подписаться"
	}, logo = '<img src="'+ $('.usrInfBlc .avatar').attr('src') +'" class="grpLogo mr15">', name = $('.usrInfNam').text(),
	tx = "<table><tr><td>"+ logo +"<td>Вы подписались на группу «"+ name +"». Теперь Вы можете следить за обновлениями группы. Чтобы получить возможность добавлять в группу свои публикации, уроки и открывать дискусии, вступите в группу.</table>";
	if (dt.tx) {
		showCurtain(tx);
	}
	var $blueStar = $('#subscribe').clone(true).html(texts[dt.i]), to = '.group-b4stars';
	if ($('#subscribe').parent(to).length) {
		to = '.group-b4links';
	}
	$blueStar.toggleClass('mr30');
	$('#subscribe').remove();
	$blueStar.prependTo(to); 
}
function groupJoinStarAndLink(dt) {
	var texts = {
		"in": "<b class='icons icoMySubs' title='Выйти из группы'></b>",
		"out": "<b class='icons icoInv'></b> Вступить в группу",
		"bid": "Заявка отправлена",
	}, $orangeStar = $('#join2Grp').html(texts[dt.tx]).clone(true), to = '.group-b4stars';
	if (dt.tx == 'bid') {
		showCurtain(texts.bid);
		$orangeStar.html(texts.in);
	}
	if (dt.tx == 'out') {
		$('.group-b4pub').hide();
	}
	if ($('#join2Grp').parent(to).length) {
		to = '.group-b4links';
	}
	$('#join2Grp').remove();
	$orangeStar.appendTo(to);
}

function initDiscussion() {
	if (location.search.indexOf('group') > -1) {
		var inGroup = location.search.match(/group=(\d+)/)[1];
		$('.brdGrpLst :input').each(function(){
			if (this.value == inGroup) {
				this.checked = true;
			}
		});
	}
}

function PopupWindow(Url, WinName, Width, Height){
    var left  = (jQuery(window).width() / 2) - (Width / 2),
	    top   = (jQuery(window).height() / 2) - (Height / 2),
	    parameters = 'resizable=1,width='+Width+',height='+Height+',left='+left+',top='+top;

    popup = window.open(Url, WinName, parameters);
}

function GetSocialButtons(DivId, Type, For, Url, Title, Description, Image) {
	$.get('/ajax_social_buttons.php', {'type': Type, 'for': For, 'url': Url, 'title': Title, 'description': Description, 'image': escape(Image)}, function(dt){ jQuery('#'+ DivId +', .'+ DivId).html(dt); });
}

function initHomepageNews($div) {
	var $news = $div.find('.news'),
		timer = null,
		i = 0,
		maxI = $news.find('li').length - 1;
	
	function startTimer() {
		timer = setInterval(function() {
			i = i < maxI ? (i + 1) : 0;
			selNews($news, i);
		}, 3000);
	}

	function selNews($div, i) {
		var $el = $div.find('li').eq(i);
		$el.closest('section').find('.newsPic img').attr('src', $el.find('a').data('imgPath'));
		$el.siblings('li').removeClass('hover');
		$el.addClass('hover');
	}

	selNews($news, i);
	startTimer();

	$div.find('.news li').on({
		mouseenter: function() {
			i = jQuery(this).index();
			selNews($news, i);
			clearInterval(timer);
		},
		mouseleave: function() {
			startTimer();
		}
	});
}

function removeElement($el, delay) {
	delay = delay || 2400;
	setTimeout(function(){
		$el.fadeOut(600, function(){ this.remove(); });
	}, delay);
}

(function($){
	// @param delay Seconds * 10. By default used 2.5 second
	$.fn.rmEl = function(delay){
		return this.each(function(){
			$(this).delay((delay||25)*100).fadeOut(500, function(){ this.remove(); })
		});
	};
	// @param delay Seconds * 10. By default used 2.5 second
	$.fn.rmBgCl = function(delay){
		return this.each(function(){
			var a = this;
			setTimeout(function(){
				a.classList.remove("bgGreen", "bgRed");
			}, (delay||25)*100);
		});
	};
	$.browserTest = function (a, z) {
		var u = 'unknown', x = 'X', m = function (r, h) {
			for (var i = 0; i < h.length; i = i + 1) {
				r = r.replace(h[i][0], h[i][1]);
			}

			return r;
		}, c = function (i, a, b, c) {
			var r = {
				name: m((a.exec(i) || [u, u])[1], b)
			};

			r[r.name] = true;

			r.version = (c.exec(i) || [x, x, x, x])[3];

			if (r.name.match(/safari/) && r.version > 400) {
				r.version = '2.0';
			}

			if (r.name === 'presto') {
				r.version = ($.browser.version > 9.27) ? 'futhark' : 'linear_b';
			}
			r.versionNumber = parseFloat(r.version, 10) || 0;
			r.versionX = (r.version !== x) ? (r.version + '').substr(0, 1) : x;
			r.className = r.name + r.versionX;

			return r;
		};

		a = (a.match(/Opera|Navigator|Minefield|KHTML|Chrome/) ? m(a, [
			[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/, ''],
			['Chrome Safari', 'Chrome'],
			['KHTML', 'Konqueror'],
			['Minefield', 'Firefox'],
			['Navigator', 'Netscape']
		]) : a).toLowerCase();

		$.browser = $.extend((!z) ? $.browser : {}, c(a, /(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/, [], /(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));

		$.layout = c(a, /(gecko|konqueror|msie|opera|webkit)/, [
			['konqueror', 'khtml'],
			['msie', 'trident'],
			['opera', 'presto']
		], /(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);

		$.os = {
			name: (/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase()) || [u])[0].replace('sunos', 'solaris')
		};

		if (!z) {
			$('html').addClass([$.os.name, $.browser.name, $.browser.className, $.layout.name, $.layout.className].join(' '));
		}
	};

	$.browserTest(navigator.userAgent);
})(jQuery);

function noFlexboxCss() {
	if ($.browser.name == 'msie' || $.browser.name == 'safari') {
		var timestamp = '';

		$.ajax({
	        url: '/styles/edu-no-flex.css',
	        type: 'get',
	        dataType: 'html',
	        async: false,
	        success: function(response, result, xhr) {
	            timestamp = Date.parse(xhr.getResponseHeader('last-modified'));;
	        } 
     	});

		$('<link rel="stylesheet" href="/styles/edu-no-flex.css?v=' + timestamp + '">').insertAfter($('#mainCssLink'));
		$('<script src="/js/prefixfree.min.js">').appendTo('head');
	}
}

function initPubAddFrm($div) {
	var $uploadDocText = $div.find('.uploadDocText');

	$uploadDocText.find('input[type="button"], .upload').click(function() {
            
            
            $('#pubTxt').val($('#pubAddTa').html());
		var $ax = $(this),
			data = $('#pubAddFrm').serialize();
		$ax.before('<b class="icoLoad" style="margin:0;width:'+ $ax.outerWidth() +'px;height:'+ ($ax.prevAll('#pubAddTa').length ? $ax.outerHeight() +'px' : '1.8em') +';"></b>');
		$.post('?save', data +'&draft=true', function(dt){
			$('.pubPreview').next('.icoLoad').remove();
			$ax.prev('.icoLoad').remove();
			if (dt.st == 'ok') {
				if (!$('#pubAddFrm input[name=id]').length) {
					$('<input>', {type: 'hidden', name: 'id', value: dt.id}).prependTo('#pubAddFrm');
				} else {
					$('#pubAddFrm input[name=id]').val(dt.id);
				}
				if ($('.pubDraft2').css('display') != 'none') {
					$('.pubDraft2').after('<font color="green">Черновик сохранён</font>');
				}
              var  $publication_id = $('#pubAddFrm input[name="id"]').val();
		var $text = '<div id="pubAddUploadDocWindow"><h3>Загрузка публикации из файла MS Word</h3>'+ (($('#pubAddTa').html()) ? 'При загрузке публикации из файла, содержимое поля «Текст» будет полностью заменено на содержимое файла.<br><br>' : '') +'Текст и его форматирование, фотографии, таблицы и другие элементы документа Word будут сохранены.<br><br>После завершения загрузки файла внимательно проверьте, как прошел экспорт. Прочитайте содержимое поля «Текст». Помните, что при автоматическом переносе данных могут возникать проблемы с таблицами, схемами и другими сложными элементами.<div class="progress"><img src="/images/progress_bar.gif">Идет преобразование файла</div><div class="err">Не удалось. Попробуйте еще раз.<br>(файл должен быть с расширением .doc или .docx)</div><p><form action="/a" method="post" enctype="multipart/form-data"><div class="inputFileWrap"><input type="hidden" name="source" value="eduUploadDocText"><input type="hidden" name="publication_id" value="'+$publication_id+'"><a class="btn" data-text="Продолжить загрузку"><input type="file" name="docFile" accept="application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation"></a></div></form></p></div>';
	
		var $curtain = showCurtain($text, {class: "close2Right", close_text: "Закрыть"});
		var $form = $curtain.find('form');
		var $fileInput = $form.find('input[type="file"]');
		var $progress = $curtain.find('.progress');
		var $err = $curtain.find('.err');

		$form.ajaxForm(function(d){
			var $res = $.parseJSON(d);
				$progress.hide();
				if ($res.state == 'ok') {
					$('#pubAddTa').html($res.html);
					var f0 = $('#pubAddFrm').length ? '#pubAddFrm' : 'form#pub';
					$('.pubAddBtt').show();
					if ($(f0 +' input[name=docPath]').length) {
						$(f0 +' input[name=docPath]').val($res.docPath);
					} else {
						$('<input>', {type: 'hidden', name: 'docPath', value: $res.docPath}).appendTo(f0);
					}
					if ($('#lesson-choice').length) {
						lesson_choice(lesson_warn.text_from_file);
					}
					$curtain.find('.close').click();
                                        $('#lesson-editor_hint').before('<br><span style="color:green">Файл загружен</span><br><br>');
				} else if ($res.state == 'auth') {
					$curtain.remove();
					showCurtain($res.tx);
				} else if ($res.state == 'err' && $res.msgs) {
					$curtain.remove();
					showCurtain($res.msgs);
				} else {
					$err.show();
				}
			});

		var upload = function(){
			$err.hide();
			$progress.show();
			$form.submit();
		};

		var ERR_TYPE = 'Данная форма не предназначена для загрузки файлов такого типа. Чтобы загрузить файл используйте <img src="/images/forHint1a.png" style="vertical-align:middle;"> или <img src="/images/forHint1b.png" style="vertical-align:middle;"> из блока "Форматирование"';

		$fileInput.change(function(){
			if (this.files[0].size > 104857600) {
				$curtain.remove();
				showCurtain('Размер файла не должен превышать 30Мб<br>Размер выбраного файла: '+ Math.ceil(this.files[0].size/1048576) +'Мб');
				return false;
			}

//			if (this.files[0].type != "" && this.files[0].type != "application/msword" && this.files[0].type != "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
			if (
                                ((this.files[0].type != "" && this.files[0].type != "application/msword" && this.files[0].type != "application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
                                        && (this.files[0].type != "" && this.files[0].type != "application/vnd.ms-powerpoint" && this.files[0].type != "application/vnd.openxmlformats-officedocument.presentationml.presentation"))) {
				$curtain.remove();
				showCurtain(ERR_TYPE);
				return false;
			}

			if (window.FileReader && window.Blob) {
				var fb = "";
				var fileReader = new FileReader();
				fileReader.onload = function(ev){
					var bytes = new Uint8Array(ev.target.result);
					for (var i = 0; i < bytes.length; i++) {
						fb += ((bytes[i] < 10) ? '0' : '') + bytes[i].toString(16);
					}
					if (fb != "d0cf11e0" && fb != "504b0304") {
						$curtain.remove();
						showCurtain(ERR_TYPE);
					} else {
						upload();
					}
				};
				fileReader.readAsArrayBuffer(this.files[0].slice(0, 4));
			} else {
				upload();
			}
		});
			} else {
				showCurtain('Ошибка сохранения черновика:<br>'+ dt.er);
			}
		}, 'json');
	});

	$uploadDocText.find('.delDoc').click(function() {
		var $uploadDocText = $(this).closest('.uploadDocText');

		if (!confirm('Вы уверены?')) {
			return false;
		}

		$.post('/a', {'source': 'eduDocConsumerFileDel', 'elementType': $uploadDocText.data('elementType'), 'elementId': $uploadDocText.data('elementId')}, function(res) {
			if (res.state == 'ok') {
				$uploadDocText.attr('data-id', '');
			}
		}, 'json');
	});
}

function initTestAdd($div) {
	var $partCotrol = $('.partCotrol');
	var $litems = $partCotrol.find('li');
	var $mainForm = $div.find('.mainForm');
	var $partSwitches = $mainForm.find('.partSwitch input');

	$mainForm.find('textarea').each(function() {
		lengthCounter($(this));
	});

	$partCotrol.find('a').click(function() {
		var $li = $(this).closest('li');
		var part = $(this).data('a');

		$partCotrol.find('li').removeClass('sel');
		$li.addClass('sel');

		$div.find('.editPart').removeClass('vis');
		$div.find('.editPart.' + part).addClass('vis');

		// если это раздел правил, то кнопка назад скрывается
		$partSwitches.filter('.prev').css('display', (part == 'rules' ? 'none' : 'inline-block'))
		
		// если это раздел заданий и тест еще не опубликован, то кнопка Продолжить переименовывается в Опубликовать
		$partSwitches.filter('.next').attr('value', function(k, v) {
			var value = $(this).attr('data-normal-value');

			switch (part) {
				case 'exercises':
					if ($div.attr('data-test-published') == 0) {
						value = $(this).attr('data-pub-value');
					}
					break;

				case 'display':
					if ($div.attr('data-test-id') == 0) {
						value = $(this).attr('data-save-value');
					}
					break;
			}

			return value;
		});
	});

	// переход в раздел "Вопросы" после сохранения теста, либо в Правила, если тест открыт для редактирования/создается новый
	function hashNav() {
		if (window.location.hash == '') {
			window.location.hash = '#rules';
		}
		
		$partCotrol.find('a[data-a="' + window.location.hash.substring(1) + '"]').click();	
	}
	
	hashNav();

	window.onhashchange = function() {
		hashNav();
	}

	$partSwitches.click(function() {
		var $btn = $(this);
		var $asidePrevLi = $litems.filter('.sel').prev();
		var $asideNextLi = $litems.filter('.sel').next();
		var hashNext = '#' + $asideNextLi.find('a').data('a');
		var hashPrev = '#' + $asidePrevLi.find('a').data('a');

		if ($btn.hasClass('prev')) {
			window.location.hash = hashPrev;
		} else {
			if ($mainForm.find('.editPart.display').hasClass('vis')) {
				if ($div.attr('data-test-id') > 0) {
					window.location.hash = hashNext;
					return false;
				}

				// всплывающее сообщение только для теста, который еще не сохранен
				var html = '<div id="confirmTestSave"><div class="innerGrayBox mb20">Нажав кнопку «Сохранить», вы сохраните параметры теста и не сможете их изменить. </div><input type="submit" value="Сохранить"></div>'
			
				var $curtain = showCurtain(html, {class: 'close2Right', close_text: 'Отмена'});
				var $confirmTestSave = $curtain.find('#confirmTestSave');

				$curtain.find('input[type="submit"]').click(function() {
					$.post($mainForm.attr('action'), $mainForm.serialize(), function(res) {
						$confirmTestSave.find('.err').remove();

						switch (res.state) {
							case 'err':
								var errHtml = '<div class="err">Обнаружены ошибки в следующих разделах';

								$(res.errors).each(function(k, v) {
									errHtml += '<div class="errDiv">' + v.errDiv + '</div><ul class="unstyled">';
									
									$(v.errorsList).each(function(kk, vv) {
										errHtml += '<li>' + vv + '</li>';
									});

									errHtml += '</ul>';
								});

								errHtml += '</div>';

								$confirmTestSave.children('input[type="submit"]').before(errHtml);
								break;

							case 'ok':								
								$curtain.find('input[type="button"].close').click();
								window.location.replace('/lk/testEdit?id=' + res.testId + '#exercises');
								break;
						}
					}, 'json');
				});
			} else if ($mainForm.find('.editPart.exercises').hasClass('vis')) {
				if ($div.attr('data-test-id') == 0) {
					return false;
				}

				if ($div.attr('data-test-published') == 0) {
					// всплывающее сообщение только для теста, который еще не опубликован
					var html = '<div id="confirmTestSave"><div class="innerGrayBox mb20"><p>Количество заданий в тесте: ' + $mainForm.find('.editPart.exercises .testExrcList .exrc').length + '</p><p>Вы уверены, что ваш тест готов к публикации?</p><p>Нажав кнопку «Опубликовать», вы сделаете тест доступным для просмотра другими пользователями.</p><p>Редактирование теста будет доступно в личном кабинете.</p> </div><input type="submit" value="Опубликовать"></div>'
				
					var $curtain = showCurtain(html, {class: 'close2Right', close_text: 'Отмена'});
					var $confirmTestSave = $curtain.find('#confirmTestSave');

					$curtain.find('input[type="submit"]').click(function() {
						$mainForm.find('input[name="oper"]').val('pub');
						$mainForm.find('input[name="published"]').val(1);

						$.post($mainForm.attr('action'), $mainForm.serialize(), function(res) {
							$confirmTestSave.find('.err').remove();

							switch (res.state) {
								case 'err':
									$confirmTestSave.append('<div class="err"><ul class="unstyled fl"><li>' + res.error + '</li></ul></div>');
									break;

								case 'ok':								
									$curtain.find('input[type="button"].close').click();
									window.location.replace('/lk/tests');
									break;
							}
						}, 'json');
					});
					return false;
				}

				window.location.replace('/lk/tests');
			} else {
				window.location.hash = hashNext;
			}
		}
	});

	$mainForm.find('.editPart .piece.kind .item').click(function() {
		if ($div.data('testId') > 0) {
			return false;
		}

		var $otherItem = $(this).siblings('.item');

		$otherItem.removeClass('sel');
		
		$(this).addClass('sel');
		$(this).find('input[type="radio"]').prop('checked', true);
	});

	// принудитльный выбор только 1 предмета и 1 класса
	var $subjectCheckboxes = $mainForm.find('.editPart .piece.subjects input[name="subject[]"]');
	var $classCheckboxes = $mainForm.find('.editPart .piece.classes input[name="class[]"]');

	[$subjectCheckboxes, $classCheckboxes].forEach(function($set) {
		$set.each(function(k, v) {
			$(v).click(function() {
				$set.prop('checked', false);
				$(v).prop('checked', true);
			});
		});
	});

	// если тест сохранен, то инпуты в разделах "описание теста" и "настройки показа" заблокированы
	if ($div.data('testId') > 0) {
		$mainForm.find('.editPart.params :input, .editPart.display :input').prop('disabled', true);
	}

	// инициализация раздела по добавлению заданий в тест
	var $exrcPart = $mainForm.find('.editPart.exercises');

	$exrcPart.find('.testExrcList .exrc').each(function(k, v) {
		initLkTestExrc($(v));
	});

	$exrcPart.find('.exrcFinder .editExrc').each(function(k, v) {
		initLkTestExrcEditBtn($(v));
	});

	// смена порядка заданий
	$exrcPart.find('.testExrcList').sortable({
        axis: 'y',
        containment: 'parent',
        cursor: 'move',
        forcePlaceholderSize: true,
        items: '> .exrc',
        scroll: true,
        tolerance: 'pointer',
        start: function(event, ui) {
        	ui.item.css('opacity', 0.6);
        },
        stop: function(event, ui) {
            var order = [];

            ui.item.css('opacity', 1);

            $exrcPart.find('.testExrcList > .exrc').each(function(k, v) {
                order.push(jQuery(this).data('id'));
            });

            jQuery.post('/a', {'source': 'lkTestExrcAddInterface', 'oper': 'reorder', 'testId': $div.data('testId'), 'order': order}, function(res) {
            	return res.state == 'ok' ? true : false;
            }, 'json');
        },
    });

	// принудительный выбор только 1 юзерской группы
	var $groupCheckboxes = $mainForm.find('.editPart.display input[name="toGroup"]');

	$groupCheckboxes.each(function(k, v) {
		$(v).click(function() {
			var checked = $(v).prop('checked');
			$groupCheckboxes.prop('checked', false);
			$(v).prop('checked', checked);
		});
	});
}

function initLkTestExrc($exrc) {
	initLkTestExrcEditBtn($exrc.find('.editExrc'));
	initLkTestExrcDelBtn($exrc.find('.delExrc'));
}

function initLkTestExrcEditBtn($btn) {
	$btn.click(function() {
		var $btn = $(this);
		var exrcAddType = $btn.data('type');
		var testId = $('#testAdd').data('testId');
		var $mainForm = $('#testAdd').find('.mainForm');
		var $exrc = $btn.closest('.exrc');
		var exrcId = $exrc.length > 0 ? $exrc.data('id') : 0;

		var $lkTestExrcAddWrap = $('#lkTestExrcAddWrap').length > 0 ? $('#lkTestExrcAddWrap') : $('<div id="lkTestExrcAddWrap" data-test-id="' + testId + '"></div>');

		if ($exrc.length > 0) {
			$exrc.append($lkTestExrcAddWrap);
		} else {
			$btn.closest('.exrcFinder').before($lkTestExrcAddWrap);
		}

		$lkTestExrcAddWrap.html('<img src="/images/aj.gif">');

		$.get('/a', {'source': 'lkTestExrcAddInterface', 'oper': 'getForm', 'testId': testId, 'exrcId': exrcId, 'type': exrcAddType}, function(res) {
			if (res.state == 'ok') {
				var $testExrcOperDiv = $($.parseHTML(res.html));

				$lkTestExrcAddWrap.html($testExrcOperDiv);

				switch (exrcAddType) {
					case 'own':
						var $exrcForm = $testExrcOperDiv.find('form');

						// инициализация кнопок добавления изображений к тексту и комментарию задания
						$exrcForm.find('.picAdd').each(function(k, v) {
							var $picAdd = $(v);
							var $inputFileWrap = $picAdd.find('.inputFileWrap');
							var $inputFile = $inputFileWrap.find('input[type="file"]');
							var $imgWrap = $picAdd.find('.imgWrap');
							var $img = $imgWrap.find('img');
							var $picDelInput = $imgWrap.find('.picDelInput');

							$picAdd.find('input[type="file"]').change(function() {
								var input = this;

								if (input.files && input.files[0]) {
									var reader = new FileReader();

									reader.onload = function (e) {
										$img.attr('src', e.target.result);
										$img.parent().removeClass('hid');
										$picDelInput.val(0);
									}

									reader.readAsDataURL(input.files[0]);
								}
							});

							$picAdd.find('.del').click(function() {
								$imgWrap.addClass('hid');
								$imgWrap.find('img').attr('src', '');
								$inputFile.val('');
								$picDelInput.val(1);
							});
						});

						$exrcForm.ajaxForm({
							beforeSubmit: function(arr, $form, options) {
								if (jQuery.active == 1) {
									return false;
								}

								$exrcForm.addClass('process');
							},
							success: function(res) {
								var $res = $.parseJSON(res);

								$exrcForm.removeClass('process');

								if ($res.state == 'ok') {
									var $exrcRenewed = $($.parseHTML($res.exrcHtml));

									if ($exrc.length > 0) {
										$exrc.replaceWith($exrcRenewed);	
									} else {
										$mainForm.find('.testExrcList').append($exrcRenewed);
									}
									
									initLkTestExrc($exrcRenewed);

									$lkTestExrcAddWrap.remove();

									$btn.closest('.exercises').find('header .count').attr('data-count', function(k, v) {
										return parseInt(v) + 1;
									});
								} else {
									var $errors = $('<ul>', {'class': 'errors unstyled'});

									$res.errors.forEach(function(i) {
										$('<li>').text(i).appendTo($errors);
									});

									$exrcForm.find('.errors').remove();
									$errors.appendTo($exrcForm);
								}
							}
						});
						break;

					case 'db':
						initTestExrcSearch($testExrcOperDiv);
						break;
				}
			} else {

			}
		}, 'json');
	});
}

function initLkTestExrcDelBtn($btn) {
	var $exrcCount = $btn.closest('.testExrcList').siblings('.testHeader').find('.count'); 

	$btn.click(function() {
		var $btn = $(this);
		var testId = $('#testAdd').data('testId');
		var $exrc = $btn.closest('.exrc');
		var exrcId = $exrc.data('id');

		if (!confirm('Удалить задание?')) {
			return false;
		}

		$.post('/a', {'source': 'lkTestExrcAddInterface', 'oper': 'delExrc', 'testId': testId, 'exrcId': exrcId}, function(res) {
			if (res.state == 'ok') {
				$exrc.fadeOut(300, function() {
					$(this).remove();
					
					$exrcCount.attr('data-count', function(k, v) {
						return v - 1;
					});
				});
			}
		}, 'json');
	});
}

function initTestExrcSearch($div) {
	var $form = $div.find('form');
	var detecting = true;
	
	$form.ajaxForm({
		dataType: 'json',
		beforeSubmit: function(arr, $form, options) {
			$div.find('.searchExrcResWrap').html('<img src="/images/aj.gif">');
			detecting = true;
		},
		success: function(res) {
			var $html = $($.parseHTML(res.html));
			$div.find('.searchExrcResWrap').html($html);
			initSearchExrcRes($html);
		}
	});

	// инициализация селектов поиска
	var $selects = $form.find('select');
	var $subjectSelect = $selects.filter('[name="subjectId"]');
	var $themeSelect = $selects.filter('[name="themeId"]');
	var $classSelect = $selects.filter('[name="classId"]');
	var $difficultySelect = $selects.filter('[name="difficulty"]');

	function getSubjectThemes(subjectId) {
		$.get('/a', {'source': 'eduGetTestSubjectThemes', 'subjectId': subjectId}, function(res) {
			if (res.state == 'ok') {
				var options = res.html;

				$themeSelect.find('option:not(:first-child)').remove();

				if (Object.keys(options).length > 0) {
					for (var k in options) {
						$('<option value="' + options[k] + '">' + k + '</option>').appendTo($themeSelect);
					}
				}
			}
		}, 'json');
	}

	$selects.change(function() {
		if ($(this).is($subjectSelect)) {
			getSubjectThemes($(this).val());
		}
		
		$form.submit();
	});

	if ($form.data('restoreState') == 1) {
		getSubjectThemes($subjectSelect.val());
		$form.submit();
	}

	// автоподгрука вопросов
	$(window).scroll(function() {
		if (detecting) {
			testExrcLoad($div);
		}
	});

	function testExrcLoad($div) {
		var $exrcList = $div.find('.searchExrcRes .exrcList');
		var bot = $(window).scrollTop() + $(window).height();
		var botCheck = $exrcList.offset().top + $exrcList.height();

		if (bot >= botCheck) {
			detecting = false;

			var $aj = $('<div class="ajWrap"><span class="aj">').appendTo($exrcList);
			var data = {
					'source': 'testExrcSearch',
					'oper': 'search',
					'suboper': 'exrcLoad',
					'testId': $div.data('testId'),
					'subjectId': $form.find('select[name="subjectId"]').val(),
					'classId': $form.find('select[name="classId"]').val(),
					'themeId': $form.find('select[name="themeId"]').val(),
					'difficulty': $form.find('select[name="difficulty"]').val(),
					'page': $exrcList.data('page') + 1
				};

			setTimeout(function() {
				$.post('/a', data, function(res) {
					if (res.state == 'ok') {
						var $newExrcs = $($.parseHTML(res.html));

						$exrcList.find('.ajWrap').remove();

						if ($newExrcs.length > 0) {
							var $wrap = $('<div class="wrap">');

							$exrcList.data().page++;
							$newExrcs.appendTo($wrap);

							$wrap.appendTo($exrcList).fadeIn(500, function() {
								$(this).find('.exrc').unwrap();
							});

							detecting = true;
						} else {
							detecting = false;
						}
					} else {
						detecting = true;
					}
				}, 'json');
			}, 300);
		}
	}
}

function initSearchExrcRes($div) {
	initExrcDiffHintToggle($div.find('.exrcDiffHintToggle'));
}

function initExrcDiffHintToggle($div) {
	$div.click(function() {
		var $btn = $(this);
		var $wrap = $btn.closest('.exrcDiffHintToggleWrap');
		var html = '<div class="exrcDiffHint"><p>Сложность вопроса показывает процент школьников, которые неправильно ответили на этот вопрос. Чем выше этот показатель, тем сложнее вопрос.</p><p>Ежегодно более миллиона посетителей сайта <a href="http://moeobrazovanie.ru">moeobrazovanie.ru</a> проходят тесты и статистика их ответов отражена в базе вопросов.</p><p><span class="testExrcDiff num1">10%</span> значит, что каждый десятый ответил на этот вопрос неверно</p></div>';
		var $exrcDiffHint = $wrap.find('.exrcDiffHint').length > 0 ? $wrap.find('.exrcDiffHint') : $(html).appendTo($wrap);

		$exrcDiffHint.toggle();
	});
}

function initTestExrcView($div) {
	initExrcDiffHintToggle($div.find('.exrcDiffHintToggle'));

	var $actions = $div.find('.actions');
	var $testAdd = $div.find('.testAdd');
	var $form = $testAdd.find('form');

	$actions.find('button').click(function() {
		var $btn = $(this);

		switch ($btn.attr('data-act')) {
			case 'use':
				if ($div.data('userLoggedIn') == '') {
					window.location.href = "/login";
					return false;
				}

				$actions.hide();
				$testAdd.addClass('active').removeClass('messaged');
				break;

			case 'reportError':
				var text = '<div id="testExrcError"><h2>Сообщение об ошибке</h2><form action="/a" method="post"><input type="hidden" name="source" value="testExrcView"><input type="hidden" name="exrcId" value="' + $div.data('id') + '"><input type="hidden" name="oper" value="reportError"><div class="label">Тип ошибки</div><select name="type" required><option value="">-- Выберите тип ошибки --</option>' + $btn.data('errorTypeOptions') + '</select><div class="label">Ваш комментарий</div><textarea name="msg" placeholder="-- Пожалуйста, подробно опишите ошибку --" required></textarea><p><p class="msg"></p><input type="submit" value="Сообщить об ошибке"></p></form></div>';

				var $curtain = showCurtain(text, {class: 'close2Right', close_text: 'Закрыть', closeBtnClass: 'closeTestExrcErr'});
				var $form = $curtain.find('form');
				var $msg = $form.find('.msg');

				$form.ajaxForm({
					beforeSubmit: function(arr, $form, options) {
						if (jQuery.active == 1) {
							return false;
						}

						$form.addClass('process');
						$msg.hide().removeClass('err').html('');
					},
					success: function(res) {
						var $res = $.parseJSON(res);

						$form.removeClass('process');

						if ($res.state == 'ok') {
							$form.children().hide();
							$('.closeTestExrcErr .close').css({'float': 'none', 'margin': 0});	
						} else {
							$msg.addClass('err');
						}

						$msg.html($res.msg).show();
					}
				});
				break;
		}
	});

	$testAdd.find('button').click(function(e) {
		e.preventDefault();

		var $btn = $(this);
		var $form = $btn.closest('form');

		switch ($btn.attr('data-act')) {
			case 'add':
				$form.submit();
				break;

			case 'cancel':
				$actions.show();
				$testAdd.removeClass('active messaged');
				break;
		}
	});


	$form.ajaxForm({
		beforeSubmit: function(arr, $form, options) {
			if (jQuery.active == 1) {
				return false;
			}

			$testAdd.removeClass('messaged');
			$form.addClass('process');
		},
		success: function(res) {
			var $res = $.parseJSON(res);

			$form.removeClass('process');
			$testAdd.addClass('messaged').attr({'data-msg': $res.msg, 'data-state': $res.state});

			if ($res.state == 'ok') {
				$actions.show();
				$testAdd.removeClass('active');
				resetCustomSelect($testAdd.find('.fakeSelWrap'));
			} else {

			}
		}
	});

	// init custom select
	initCustomSelect($testAdd.find('.fakeSelWrap'));
}

function initCustomSelect($div) {
	var $fakeSelect = $div.find('.fakeSelect');
	var $realSelect = $div.find('.realSelect');
	var $fakeOptions = $fakeSelect.find('li');

	$fakeOptions.click(function() {
		var val = $(this).data('value');

		$realSelect.find('option[value="' + val + '"]').prop('selected', true);

		$fakeSelect.toggleClass('toggled');
		$fakeOptions.removeClass('sel');
		$(this).addClass('sel');
	});
}

function resetCustomSelect($div) {
	$div.find('.fakeSelect li').removeClass('sel');
	$div.find('.fakeSelect .opener').addClass('sel');

	$div.find('.realSelect option').prop('selected', false);
	$div.find('.realSelect option:first-child').prop('selected', true);
}

function initTestList($div) {
	var $tests = $div.find('.testItem');

	$tests.each(function(k, v) {
		var testId = $(v).data('id');
		var $rating = $(v).find('.rateThis');
		var $arrows = $rating.find('.arr');
		var $val = $rating.find('.val');

		if (!$rating.data('canVote')) {
			$arrows.addClass('dis').attr('title', 'Вы уже проголосовали');
			return;
		}

		$arrows.click(function() {
			var rt = $(this).data('i');

			if ($.active == 1) {
				return false;
			}

			$rating.addClass('process');

			$.post('/a', {'source': 'rateTest', 'testId': testId, 'rt': rt}, function(res) {
				$rating.removeClass('process');

				if (res.state == 'ok') {
					$arrows.addClass('dis').unbind('click');
					
					$val.text(function(k, v) {
						return parseInt(v) + (rt == 'pl' ? 1 : -1);
					});
				} else {
					alert(res.msg);
				}
			}, 'json');
		});
	});

	// инит кнопки удаления
	$tests.find('.delTest').click(function(e) {
		e.preventDefault();
		var $test = $(this).closest('.testItem');

		if (confirm('Вы точно хотите удалить этот тест?')) {
			$test.addClass('process');

			$.post('/a', {'source': 'eduLkTestEdit', 'oper': 'del', 'id': $test.data('id')}, function(res) {
				if (res.state == 'ok') {
					$test.fadeOut(300, function() {
						$test.remove();
					});
				} else {
					$test.addClass('process');
				}
			}, 'json');
		}

		return false;
	});
}

function initTest($div) {
	var testId = $div.data('id');
	var $rating = $div.find('.rateThis');
	var $arrows = $rating.find('.arr');
	var $val = $rating.find('.val');

	if (!$rating.data('canVote')) {
		$arrows.addClass('dis').attr('title', 'Вы уже проголосовали');
		return;
	}

	$arrows.click(function() {
		var rt = $(this).data('i');

		if ($.active == 1) {
			return false;
		}

		$rating.addClass('process');

		$.post('/a', {'source': 'rateTest', 'testId': testId, 'rt': rt}, function(res) {
			$rating.removeClass('process');

			if (res.state == 'ok') {
				$arrows.addClass('dis').unbind('click');
				
				$val.text(function(k, v) {
					return parseInt(v) + (rt == 'pl' ? 1 : -1);
				});
			} else {
				alert(res.msg);
			}
		}, 'json');
	});
}

function initAsideTestFormatter($div) {
	var $wrap = $div.find('.scalerWrap');
	var $scaler = $('<div class="scaler">').appendTo($wrap);
	var $scalerValues = $('<div class="scalerValues"><span class="min">0</span><span class="current">100</span><span class="max">100</span></div>').appendTo($wrap);
	var $input = $('<input type="hidden" name="scale" value="100">').appendTo($wrap);
	var $form = $div.find('form');
	var $previewBtn = $form.find('input[name="preview"]');

	function avoidExrBreaks() {
		var $exrcWraps = $('#testPrint .exrcWrap');

		$exrcWraps.each(function(k, v) {
			$(v).removeAttr('style');
		});

		$exrcWraps.each(function(k, v) {
			var $page = $('#testPrintPages .page:last-child');
			var pageTop = $page.offset().top;
			var pageBottom = $page.offset().top + $page.outerHeight();
			var exrcTop = $(v).offset().top;
			var exrcBottom = $(v).offset().top + $(v).outerHeight();
			var topDiff = pageBottom - exrcTop;

			if (exrcTop <= pageBottom && exrcBottom > pageBottom) {
				$(v).css('margin-top', function(a, b) {
					return (parseInt(b) + topDiff) + 'px';
				});

				$('<div class="page">').insertAfter($page);
			}

			if (exrcTop > pageBottom) {
				$('<div class="page">').insertAfter($page);
			}
		});
	}

	$scaler.slider({
		min: 0,
		max: 100,
		value: 100,
		slide: function(event, ui) {
			$input.val(ui.value);
			$scalerValues.find('.current').text(ui.value);
		},
		change: function(event, ui) {
			$form.find('input[name="preview"]').click();
		}
	});

	$form.find('input[type="button"]').click(function() {
		var $btn = $(this);
		var oper = $btn.attr('name');

		$form.find('input[name="oper"]').val(oper);

		switch (oper) {
			case 'preview':
				$.post($form.attr('action'), $form.serialize() + '&ajax=1', function(res) {
					$('main').html(res);

					avoidExrBreaks();
				}, 'json');
				break;

			case 'print':
				$form.submit();
				break;
		}
	});

	$form.find('select, input[type="checkbox"]').change(function() {
		$previewBtn.click();
	});

	$form.find('textarea').keyup(function() {
		$('#testPrint .title').text($(this).val());
	});

	avoidExrBreaks();
}

function initAsideTestFilter($div) {
	$div.find('.filter a').click(function() {
		$(this).siblings('.list').toggle();
	});
}

function fixAsideFiller() {
	var $aside = $('#mainWrapper > aside');

	if ($aside.length === 0) {
		return false;
	}

	var windowTop = $(window).scrollTop();
	var botCheck = $aside.offset().top + $aside.height();
	var $filler = $aside.children('.filler');

	if (windowTop >= botCheck - 5) {
		if ($filler.data('cn')) {
			$filler.html($filler.data('cn')).data('cn', '');
		}
		$filler.fadeIn(300);
	} else {
		$filler.hide(0);
	}
}

function showCmmByAnchor() {
	var cid = location.hash.match(/\d+$/);
	if (cid) {
		cid = cid[0];
		$('.answers .answer, .cmmLst .cmmItm').each(function(i,e){
			if ($(e).data('id') == cid || $(e).data('i') == cid) {
				$('html, body').animate({'scrollTop': $(e).offset().top - 80}, 400, 'linear', function(){
					$(e).addClass('bgGreen');
					setTimeout(function(){
						$(e).removeClass('bgGreen');
					}, 1800);
				});
			}
		});
	}
}

function attachVote() {
	$('#attachVote').hide();
	$('#attachVote_block').show().find(':input').prop('disabled', false).first().focus();
	$('#attachVote_anotherOption').click(function(){
		var ln = $('#attachVote_block input[name="vote_answer[]"]').length,
			$ax = $(this).closest('tr');
		if (ln > 5) {
			return false;
		}
		var $bx = $ax.prev().clone();
		$bx.children('td:first').html('Вариант '+ (ln+1));
		$bx.find(':input').val('').focus();
		$bx.insertBefore($ax);
		if (ln >= 5) {
			$ax.hide();
		}
	});
	$('#attachVote_cancel').click(function(){
		$('#attachVote_block').hide().find(':input').prop('disabled', true);
		$('#attachVote').show();
	});
}
function attachedVoting() {
	$('#attachedVoting').submit(function(){
		var $form = $(this), $inp = $form.find('input[type=submit]').after('<b class=icoLoad></b>');
		$.post($form.attr('action'), $form.serialize(), function(dt){
			$inp.next('.icoLoad').remove();
			if (dt == 'auth') {
				showCurtain(authNotice);
			} else if (dt == 'not defined') {
				showCurtain("Голосование не определено");
			} else if (dt == 'already') {
				showCurtain("Ваш ответ уже учтён");
			} else {
				$form.find('.answers_of_vote').html(dt).addClass('rs');
				$inp.replaceWith('Ваш ответ учтён');
			}
		});
		return false;
	});
}

function attachImg() {
	var $ax = $(this), $form = $ax.closest('form');
	if ($form.find('.attachImg_block').length > 9) {
		return false;
	}

	var bx = '<table>' +
		'<tr><td width="100px">Файл<td><a class="js mask">Загрузить файл изображения</a><input type="file" name="img[]" class="attachImg_selectImage">' +
		'<tr><td>Подпись<td><textarea name="caption[]" maxlength="300"></textarea>' +
		'</table><span class="attachImg_cancel"></span>',
		$block = $('<div>', {class: 'attachImg_block', html: bx});

	$block.find('.attachImg_selectImage').change(function(){
		var input = this, reader = new FileReader();
		reader.onload = function(e){
			$('<img>', {src: e.target.result, class: 'attachImg_previewImage'}).insertAfter(input);
			$(input).hide().prev().hide();
		};
		reader.readAsDataURL(input.files[0]);
	});

	$block.find('.attachImg_cancel').click(function(){
		$(this).closest('.attachImg_block').remove();
		$('.attachImg').show();
	});

	$form.find('.images').show().append($block);

	if ($form.find('.attachImg_block').length > 9) {
		$(this).hide();
	}
}

function activationLinks(el) {
	var $ax = $(el), matches = false,
		tx = $ax.html(),
		matches = tx.match(/(https?|ftp)?:\/\/([\wа-я\.-]+)(?:\/[a-z0-9.,_@%&?+=\~\/;«»-]*)?(?:\#[^ '\"&<>]*)?/ig);
	if (matches) {
		matches = matches.filter(function(value, index, self){
		    return self.indexOf(value) === index;
		});
		$.each(matches, function(i,e){
			var host = e.match(/(https?|ftp)?:\/\/([\wа-я\.-]+)/)[2],
				nf = ($.inArray(host.replace('www.', ''), ['moeobrazovanie.ru', 'урок.рф', 'xn--j1ahfl.xn--p1ai']) == -1),
				e = e.replace(/\.$/, '').replace(/,$/, '').replace(/\(|\)/g, '\\$&').replace(/\./g, '\\.').replace(/\?/, '\\?');//.replace(/\&/g, '\\&');//.replace(/;/g, '\\;');//.replace(/&amp;/g, '&');
			var re = new RegExp(e, 'ig');
			tx = tx.replace(re, '<a href="$&" target="_blank"'+ (nf ? ' rel="nofollow"' : '') +'>$&</a>');
		});
		$ax.html(tx);
	}
}

function initPinBnFixed() {
	var $banner = jQuery('.pinZyxFs.fixed');

	if ($banner.length == 0) {
		return false;
	}

	$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1">');

	$banner.find('.close').click(function() {
		$banner.remove();
var date_ = new Date();
 var minutes_ = 60;
 date_.setTime(date_.getTime() + (minutes_ * 60 * 1000));
		$.cookie('eduHidePinBnFixed', true, {expires: date_, path: '/'});
		$('#mainBody').removeClass('adaptive');
		$('meta[name="viewport"]').remove();
	});

$banner.find('.ab_in_aside').click(function() {
        $banner.remove();
var date_ = new Date();
 var minutes_ = 60;
 date_.setTime(date_.getTime() + (minutes_ * 60 * 1000));
        $.cookie('eduHidePinBnFixed', true, {expires: date_, path: '/'});
        $('#mainBody').removeClass('adaptive');
        $('meta[name="viewport"]').remove();
    });

	$('#mainBody').addClass('adaptive');
}

function insertSmile() {
	var tile = '',
		rm_tof = function(){
			setTimeout(function(){
				if (!$('.tileOfSmiles').hasClass('redCard')) {
					$('.tileOfSmiles').remove();
				}
			}, 600);
		};
	$.each(list_of_smiles, function(i,v){
		tile += '<span><img src="/images/smiles/'+ v +'" class="smile" data-sn="'+ i +'"></span>';
	});
	$('#reply2discussion_form, .reply2pub_form').each(function(i,e){
		var $form = $(this);
		if (!$form.find('.cmm_secondLayer').length) {
			var $ta = $form.find('[name=text], .cmmTA').hide();
			$('<div>', {contenteditable: true, class: 'cmm_secondLayer', css: {minHeight: $ta.height()}}).insertBefore($ta);
			$ta.prev()[0].addEventListener('paste', function(){
				var ax = this, $ax = $(this);
				$ax.find('.smile').each(function(i,e){
					$(e).replaceWith('::smile'+ $(e).data('sn') +'::');
				});
				setTimeout(function(){
					$ax.html(ax.innerText.replace(/\n/g, '<br>')).focus();
					showSmiles($ax[0]);
				}, 2);
			});
		}
	});
	$('.insertSmile').hover(function(){
		if (!$('.tileOfSmiles').length) {
			var $ax = $('<div>', {class: 'tileOfSmiles redCard', html: tile, unseletable: 'on', onselectstar: 'return false', onmousedown: 'return false'}).insertBefore(this);
			$ax.css({marginTop: -1 * $ax.outerHeight() - 10}).hover(function(){
				$(this).addClass('redCard');
			}, function(){
				$(this).removeClass('redCard');
				rm_tof();
			}).find('img').click(function(){
				if (window.getSelection) {
				    var el = $(this).clone().attr('onmousedown', 'return false')[0],
					    sel = window.getSelection(),
				        setRange = function(range){
				            if (document.getSelection) {
				                var sel = window.getSelection();
				                sel.removeAllRanges();
				                sel.addRange(range);
				            }
				        },
				        setCursorAfterElement = function(el){
				            var range = document.createRange();
				            range.setStartAfter(el);
				            range.setEndAfter(el);
				            setRange(range);
				        };
				    if (sel.getRangeAt && sel.rangeCount) {
				        var range = window.getSelection().getRangeAt(0);
						if ($(range.startContainer).closest($('.cmm_secondLayer')).length) {
					        range.insertNode(el);
					    } else {
					    	$ax.closest('form').find('.cmm_secondLayer').append(el).focus();
					    }
				        setCursorAfterElement(el);
				    }
				}
			});
		} else {
			$('.tileOfSmiles').addClass('redCard');
		}
	}, function(){
		$('.tileOfSmiles').removeClass('redCard');
		rm_tof();
	}).attr({unseletable: 'on', onselectstar: 'return false', onmousedown: 'return false'});
}

function showSmiles(el) {
	var tx = el.innerHTML, n,
		ax = tx.match(/::smile\d+::/g);
	if (ax) {
		$.each(ax, function(i,v){
			n = v.match(/\d+/);
			tx = tx.replace(v, '<img src="/images/smiles/'+ list_of_smiles[n] +'" class="smile" data-sn="'+ n +'">');
		});
		$(el).html(tx);
	}
}

function iWantCert4ThisPub() {
	var z = this, a = $(this);
	if (z.tagName == "INPUT") {
		icoLoad(a);
	} else {
		a.append('<b class="icoLoad" style="position:static;"></b>')
	}
	$.get('/a?cert_for_pub='+ a.data('pid'), function(d){
		if (z.tagName == "INPUT") {
			icoLoad(a);
		} else {
			a.children('.icoLoad').remove();
		}
		var c = showCurtain(d, {"class": "a1 pv20s"});
		if (c.find('.issue').length) {
			c.children('.innerLayer').addClass('close2Right');
			c.find('.issue').click(function(){
				$(this).hide().after('<span>Сертификат формируется <img src="/images/1367996417_sun_3.gif" style="vertical-align:-11px;"></span>');
				$.get('/a?cert_for_pub='+ a.data('pid') +'&print', function(d){
					c.children('.innerLayer').children(':not(p:last)').remove();
					c.children('.innerLayer').removeClass('close2Right').prepend(d);
				});
			});
		} else if (c.find('.cert_allow').length && z.tagName == "A") {
			a.attr({ "href": c.find('.cert_allow').attr('href'), "target": '_blank' }).unbind('click').toggleClass('iWantCert4ThisPub green');
		}
	});
}

function init4discus() {
	$('.followDis').click(function(){
		var $ax = $(this);
		$ax.prepend('<b class=icoLoad></b>');
		$.get('/ae?follow_dis='+ $('.quest').data('id'), function(dt){
			$ax.children('.icoLoad').remove();
			if (dt == 'auth') {
				showCurtain("Необходимо выполнить вход на сайт");
			} else {
				$('.followDis').html((dt=='on') ? 'Перестать следить' : 'Следить за дискуссией');
			}
		});
		return false;
	});

	$('.deleteDis').click(function(){
		var $ax = $(this), tx = [
			'Дискуссия будет удалена безвозвратно. Вы действительно хотите удалить дискуссию?<p><input type="button" value="Удалить" class="delete"></p>',
			'В этой дискуссии есть ответы, поэтому удалить её нельзя. Но вы можете оставить заявку на удаление, которая будет проверена модератором.<p><input type="button" value="Оставить заявку" class="delete"></p>'
		], i = (!$ax.data('ans')) ? 0 : 1;
		var $curtain = showCurtain(tx[i], {"class": 'close2Right'});
		$curtain.find('.delete').click(function(){
			$curtain.remove();
			$ax.prev().before('<b class=icoLoad style="margin: 0 0 0 4px;"></b>');
			$.get('/ae?delete_dis='+ $('.quest').data('id'), function(dt){
				$ax.prevAll('.icoLoad').remove();
				if (dt == 'auth') {
					showCurtain("Необходимо выполнить вход на сайт");
				} else if (dt == 'null') {
					showCurtain("Дискуссия не найдена");
				} else if (dt == 'del') {
					$('.r2d_wrp').html('<h3 class="red">Дискуссия удалена</h3>');
				} else if (dt == 'que') {
					$ax.prev().remove();
					$('.deleteDis').replaceWith('<div class="blue mt10">Дискуссия поставлена в очередь на удаление</div>');
				} else {
					var $font = $ax.after(' <font class="red flRg">Что-то пошло не так</font>').next('font');
					removeElement($font);
				}
			});
		});
		return false;
	});

	if ($('.answers .ds_nw_ms, .answers .ds_cm_for_me').length) {
		if ($('.answers .ds_nw_ms').length) {
			$('#ds_bt_for_cm_wr').append('<span class="ds_bt_for_cm" data-i="new_cm">Новые <b>'+ $('.answers .ds_nw_ms').length +'</b></span>');
		}
		if ($('.answers .ds_cm_for_me').length) {
			$('#ds_bt_for_cm_wr').append('<span class="ds_bt_for_cm" data-i="cm_for_me">Мне <b>'+ $('.answers .ds_cm_for_me').length +'</b></span>');
		}
		$('.ds_bt_for_cm').click(function(){
			var i = ($(this).data('i') == 'new_cm') ? '.ds_nw_ms' : '.ds_cm_for_me',
				$ax = $(i).not('.flazhok').first();
			if ($ax.closest('.answer:hidden').length) {
				$ax.closest('.answer').prevAll('.show_all').click();
			}
			$('html, body').animate({'scrollTop': $ax.offset().top - 80}, 400, 'linear');
			$ax.addClass('flazhok').css('font-weight', 900).animate({fontWeight: 100}, 1000);
			if ($(i).not('.flazhok').length) {
				if (!$(this).hasClass('off')) {
					$(this).children('b').html($(i).not('.flazhok').length);
				}
			} else {
				$(this).addClass('off').children('b').html($(i).length);
				$(i).removeClass('flazhok');
			}
		});
		$(document).scroll(function(){
			var sl = '.answers header';
			if ($(this).scrollTop() > $('.answers').offset().top) {
				$(sl).addClass('flew');
			} else {
				$(sl).removeClass('flew');
			}
		});
	}

	$('#reply2discussion_form').find('.attachLink').click(function() {
		var $ax = $('#reply2discussion_form .links'),
			$newItem = $ax.children('.proto').clone().removeClass('proto');
		$newItem.find(':input').prop('disabled', false);
		$newItem.appendTo($ax);
	});

	activationLinks('#main_text_of_dis');

	$('.answers .answer .text').each(function(i,e){
		activationLinks(e);
		showSmiles(e);
	});

	if ($('section.answers').height() > window.innerHeight) {
		$('.r2d_wrp').clone(true).addClass('mainBlock lower').insertAfter('section.answers');
	}

	$('#msgBoardQuest .subanswers').each(function(i,e){
		var qty = $(e).children('.subanswer').length,
			nw_cm = $(e).find('.ds_nw_ms').length;
		if (qty > 2) {
			$(e).children('.subanswer:gt(1)').hide();
			$(e).children('.subanswer:eq(1)').after('<a href="#show" class="show_all">Показать все ('+ qty +')</a>'+ ((nw_cm) ? ' <span class="orange ml10">Новых ('+ nw_cm +')</span>' : ''));
		}
	});

	$('#msgBoardQuest .show_all').click(function(){
		$(this).nextAll('.subanswer').show();
		$(this).next('.orange').remove();
		$(this).remove();
		return false;
	});

	var $form = $('#reply2discussion_form'),
		$percent;

	$form.ajaxForm({
		forceSync: true,
		dataType: 'json',
		beforeSerialize: function($form, options) {
			var $sl = $('.cmm_secondLayer');
			if (!$sl.html().replace(/<br>/g, '')) {
				var $el = $sl.addClass('bgRed').after('<div class="red" style="margin: -5px 0 10px;">Не заполнен текст комментария</div>').focus();
				setTimeout(function(){ $sl.removeClass('bgRed').next().remove(); }, 2400);
				return false;
			}
			$sl.find('.smile').each(function(i,e){
				$(e).replaceWith('::smile'+ $(e).data('sn') +'::');
			});
			var cm = $sl.html(),
				tg = {"<div><br></div>": "\n", "<div>": "", "</div>": "\n", "<br>": "\n"};
			for (var k in tg) {
				while (cm.indexOf(k) > -1) {
					cm = cm.replace(k, tg[k]);
				}
			}
			cm = cm.replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&');
			while (cm.lastIndexOf("\n") == cm.length-1) {
				cm = cm.substr(0, cm.length-1);
			}
			$form.find('[name=text]').val(cm);

			var fields = {
				'source': 'msgBoardPostAnswer',
				'parentId': $('#msgBoardQuest .quest').data('id'),
				'branchId': $form.closest('.answer:not(.subanswer)').data('id'),
				'answerTo': $form.closest('.quest, .answer').data('id'),
				'from': 'teachers',
			}, $div = $('<div>', {class: 'svFields'});
			$.each(fields, function(k,v){
				$('<input>', {type: 'hidden', name: k, value: v}).appendTo($div);
			});
			$form.append($div);
		},
		beforeSubmit: function(arr, $form, options){
			$percent = $form.find('input[type=submit]').after('<span class="percent"></span>').next();
		},
		beforeSend: function(){
			$percent.html('0%');
		},
		uploadProgress: function(event, position, total, percentComplete){
			$percent.html(percentComplete +'%');
		},
		success: function(res){
			$percent.remove();

			var $answers = $('#msgBoardQuest .answers');

			if (res.state == 'ok') {
				$form.hide(0, function() {
					$('.reply2discussion.veshka').removeClass('veshka');

					if ($form.find('input[name=edit]').length) {
						var $answer = jQuery(jQuery.parseHTML(res.answerHtml)),
							el = $answer.find('.text')[0];
						activationLinks(el);
						showSmiles(el);
						$form.prevAll('.answerBody').replaceWith($answer.find('.answerBody'));
						$form.prevAll('.tools').show();
					} else {
						// увеличение счетчика ответов
						$answers.find('> header .answersCount').attr('data-count', function(k, v) {
							return parseInt(v) + 1;
						});

						var $newAnswer = jQuery(jQuery.parseHTML(res.answerHtml)),
							$subanswers = $form.siblings('.subanswers').length > 0 ? $form.siblings('.subanswers') : $form.closest('.subanswers');

						if ($subanswers.length > 0) {
							$subanswers.append($newAnswer);
						} else {
							$answers.append($newAnswer);	
						}

						var el = $newAnswer.find('.text')[0];
						activationLinks(el);
						showSmiles(el);

						jQuery('html, body').animate({
					        scrollTop: $newAnswer.offset().top - jQuery('#main-menu').height()
					    }, 0);

						$newAnswer.hide(0, function() {
							$newAnswer.fadeIn(500);
						});
					}
				}).children('.svFields').remove();
			}
		},
	});

	$('.r2d_wrp, .answers').on('click', '.reply2discussion', function(){
		$('.reply2discussion.veshka').removeClass('veshka');
		$(this).addClass('veshka');

		var $mbQuest = jQuery('#msgBoardQuest'),
			$answeredItem = $(this).closest('.r2d_wrp, .answer');

		if ($mbQuest.data('userLoggedIn') == 1) {
			$('#reply2discussion_form .comment-cancel_edit').click();
			jQuery('#reply2discussion_form').hide(0, function(){
				jQuery(this)[0].reset();
				$form.find('.link:not(.proto), .attachImg_block').remove();

				// Присоединение формы ответа. В главном вопросе в конце, в ответе сразу после текста
				if ($answeredItem.hasClass('lower')) {
					$answeredItem.find('.reply2discussion').show();
					$('.r2d_wrp:first').after($(this)).find('.reply2discussion').addClass('veshka');
				} else if ($answeredItem.hasClass('r2d_wrp')) {
					$answeredItem.after(jQuery(this));
				} else {
					$answeredItem.find('> .meat > .answerBody').after(jQuery(this));
				}

				jQuery(this).show(0, function() {
					$('.cmm_secondLayer').empty().focus();
				});
			});
		} else {
			showCurtain(authNotice);
		}
	}).on('click', '.vote span', function(){
		var $vote = $(this).parent();

		if ($vote.hasClass('done')) {
			return false;
		}

		$vote.addClass('process');
		$.post('/a', {'source': 'msgBoardVote', 'msgId': $vote.closest('.answer').data('id'), 'act': (jQuery(this).hasClass('plus') ? '+' : '+')}, function(res){
			$vote.removeClass('process');
			if (res.state == 'ok') {
				$vote.addClass('done').children('b').text(res.newRating);
				$vote.children('span').unbind('click');
			} else if (res.state == 'auth') {
				showCurtain(authNotice);
			}
		}, 'json');
	}).on('click', '.loadSubanswers', function(){
		var $btn = jQuery(this),
			$subanswers = $btn.closest('.subanswers');

		$btn.addClass('process');

		function msgBoardSubanswersPostLoad(res) {
			if (res.html.length > 0) {
				var $wrap = jQuery('<div>').hide();

				jQuery.each(res.html, function(k, v) {
					var $subanswer = jQuery(jQuery.parseHTML(v));
					$wrap.append($subanswer);
				});

				$btn.after($wrap).remove();

				$wrap.find('.answer .text').each(function(i,e){
					activationLinks(e);
					showSmiles(e);
				});

				$wrap.slideDown(300, function() {
					$btn.remove();
					$wrap.find('.answer').unwrap();
				});
			}
		}

		// фильтрация ответов, которые были даны до загрузки предыдущих ответов
		var loadedAnswerIds = [],
			data = {
				'source': 'msgBoardSubanswersLoad',
				'branchId': $btn.closest('.answer').data('id')
			};

		if ($subanswers.find('.answer').length > 0) {
			$subanswers.find('.answer').each(function(k, v) {
				loadedAnswerIds.push(v.dataset.id);
			});

			data.loadedAnswerIds = loadedAnswerIds;
		}

		$.post('/a', data, msgBoardSubanswersPostLoad, 'json');
	});

	$('.showPreviousAnswer').click(function(){
		var $ax = $(this),
			$bx = $('#answer'+ $ax.data('pan')).clone(),
			$a = $('<a>', {class: 'js flRg mt10i', html: 'Закрыть окно'}).click(function(){
				$bx.remove();
				$('.curtain').remove();
			}),
			$answers = $('#msgBoardQuest .answers');
		$bx.css({position: 'fixed', width: $answers.width(), background: 'white', zIndex: 3}).removeAttr('id')
			.children('.meat').append($a);
		$bx.find('.reply2discussion, .subanswers, .tools').remove();
		$bx.appendTo($answers).css('top', window.innerHeight/2 - $bx.outerHeight()/2);
		if ($bx.outerHeight() > window.innerHeight) {
			var sy = window.pageYOffset || document.documentElement.scrollTop;
			$bx.css({position: 'absolute', top: sy});
		}
		$('<div>', {class: 'curtain', css: {zIndex: 2, background: 'rgba(0,0,0,0.5)'}}).click(function(){
			this.remove();
			$bx.remove();
		}).appendTo('body');
	});
}

function initPolls($div) {
	$div.find('.polls_list a').click(function() {
		var $link = jQuery(this),
			$linkRow = $link.closest('tr').addClass('loading');

		if ($linkRow.next().is('.imgRow')) {
			var $imgRow = $linkRow.next(),
				$img = $imgRow.find('img');
		} else {
			var $imgRow = jQuery('<tr>', {'class': 'imgRow'}).insertAfter($linkRow),
				$imgTd = jQuery('<td>').attr('colspan', 2).appendTo($imgRow),
				$img = jQuery('<img>', {'class': 'pollImg', 'src': '/polls.php?operation=show_chart&poll_id=' + $link.data('pollId')}).appendTo($imgTd);
		}

		if (imgIsLoaded($img[0])) {
			togglePoll();
		} else {
			$img.bind('load', function() {
				togglePoll();
			});
		}

		function togglePoll() {
			jQuery('.linkRow').removeClass('sel');
			jQuery('.imgRow').removeClass('sel');	
			$linkRow.addClass('sel').removeClass('loading');
			$imgRow.addClass('sel');
		}
	});
}

function imgIsLoaded(img) {
    if (!img.complete) {
        return false;
    }
    if (typeof img.naturalWidth != 'undefined' && img.naturalWidth === 0) {
        return false;
    }
    return true;
}

function slidingMenu() {
	if ($('#mainWrapper').width() < 1000) {
		if (typeof scrollYLstPos == 'undefined') {
			window.scrollYLstPos = 0;
		}
		if (scrollY < scrollYLstPos) {
			var nav_l2_hg = ($('.nav_l2:visible').length && $('#mainWrapper').width() < 781) ? $('.nav_l2').outerHeight(true) : 0;
			var hg4SlMn = ($('.nav_shadow').length ? $('.nav_shadow').offset().top + $('.nav_shadow').height() : $('nav').offset().top + $('nav').outerHeight(true) + nav_l2_hg) + 20;
			if (scrollY > hg4SlMn) {
				if (!$('nav').hasClass('slide')) {
					if ($('nav').hasClass('ps2')) {
						var scrollYCr = $('nav').outerHeight(true) + nav_l2_hg;
						$('.nav_l2').removeAttr('style'); nav_l2_hg = 0;
					}
					$('nav').removeAttr('class style').addClass('slide').after($('<div>', {class: 'nav_shadow', height: $('nav').outerHeight(true) + nav_l2_hg}));
					$('nav .chSc').remove();
					if (typeof scrollYCr != 'undefined') {
						window.scrollBy(0, (scrollYCr - $('.nav_shadow').height()) * -1);
					}
				}
				if ($('nav').hasClass('ps4') && window.scrollY <= $('nav').offset().top) {
					$('nav').removeClass('ps4').css('top', 0);
					$('.nav_l2').css({position: 'fixed', top: $('nav')[0].scrollHeight + 10});
				}
			} else {
				if ($('nav').hasClass('slide')) {
					$('nav').removeClass('slide').next('.nav_shadow').remove();
					if ($('nav').hasClass('ps2')) {
						$('.nav_l2').css('position', 'static');
					}
				}
			}
		} else if (scrollY > scrollYLstPos) {
			if ($('nav').hasClass('slide')) {
				var nav_l2_hg = ($('.nav_l2:visible').length && $('#mainWrapper').width() < 781) ? $('.nav_l2').outerHeight(true) : 0;
				if ($('nav').hasClass('ps2') && window.innerHeight < $('nav').outerHeight(true) + nav_l2_hg && window.scrollY + window.innerHeight - 60 < ($('nav').hasClass('ps4') ? $('nav').offset().top + $('nav').outerHeight(true) + nav_l2_hg : window.scrollY + $('nav').outerHeight(true) + nav_l2_hg)) {
					if (!$('nav').hasClass('ps4')) {
						$('nav').addClass('ps4').css('top', window.scrollY);
						$('.nav_l2').css({position: 'absolute', top: window.scrollY + $('nav').outerHeight(true)});
					}
				} else {
					$('nav').removeClass('slide').next('.nav_shadow').remove();
					if ($('nav').hasClass('ps2')) {
						$('nav').removeAttr('class style').children('.chSc').remove();
						$('.nav_l2').removeAttr('style');
					}
				}
			}
		}
	}
	if ($('#mainWrapper').width() < 820 && $('#lk_links').length) {
		if (scrollY < scrollYLstPos) {
			var hg4SlMn = ($('.lk_links_shadow').length ? $('.lk_links_shadow').offset().top + $('.lk_links_shadow').height() : $('#lk_links').offset().top + $('#lk_links').outerHeight(true)) + 20;
			if (scrollY > hg4SlMn) {
				if (!$('#lk_links.slide').length) {
					$('#lk_links').addClass('slide').after($('<div>', {class: 'lk_links_shadow', height: $('#lk_links').outerHeight(true)}));
				}
			} else {
				$('#lk_links').removeClass('slide').next('.lk_links_shadow').remove();
			}
		} else if (scrollY > scrollYLstPos) {
			$('#lk_links').removeClass('slide').next('.lk_links_shadow').remove();
		}
	}
	window.scrollYLstPos = window.scrollY;
}

function floating_blocks() {
	var el = ($('#lk_links').length) ? '#lk_links' : '.srchBySite';
	if ($('#mainWrapper').width() < 820) {
		if (!$(el).closest('main').length) {
			$('main').prepend($(el));
			if (el == '#lk_links') {
				$('#lk_links').removeAttr('style');
			}
		}
		if ($('.asdUsrLnk').length && $('.usrInfBlc').length && $('.asdUsrLnk').closest('aside').length) {
			$('.usrInfBlc').parent().after($('.asdUsrLnk'));
			$('.asdUsrLnk .icoRating').toggleClass('mt10');
			$('.asdUsrLnk .asdTtl').html('О пользователе <span>&or;</span>').toggleClass('asdTtl subheader');
			$('.asdUsrLnk .asdCnt').removeAttr('style');
		}
	} else {
		if (!$(el).closest('aside').length) {
			$('aside').prepend($(el));
		}
		if ($('.asdUsrLnk').length && $('.usrInfBlc').length && $('.asdUsrLnk').closest('main').length) {
			$('.asdUsrLnk .icoRating').toggleClass('mt10');
			$('.asdUsrLnk .subheader').html('Пользователь <span>&or;</span>').toggleClass('asdTtl subheader');
			$('.asdUsrLnk .asdCnt').removeAttr('style');
			$('.srchBySite').after($('.asdUsrLnk'));
		}
		if (el == '#lk_links') {
			$('#lk_links .asdTtl span, #lk_links .asdCnt').removeAttr('style');
		}
	}
	if ($('#mainWrapper').width() < 780) {
		if ($('.attic_info').parent('.attic').length) {
			$('aside').prepend($('.attic_info'));
			$('.attic_info').wrap('<div class="asdBlc ph0s"></div>');
		}
	} else {
		if (!$('.attic_info').parent('.attic').length) {
			$('.attic').append($('.attic_info').unwrap());
		}
	}
}

function carouselOfCongratulations() {
	$('#add_congr').click(function(){
		var $ax = $(this),
			notice = '<div class="add_congr-notice">Чтобы добавить свое поздравление, необходимо быть <a href="/edu/login">зарегистированным</a> пользователем и иметь рейтинг больше 10 баллов.</div>';
		if (!$ax.data('limit')) {
			$('.congratulations .author').html('<img src="'+ $ax.data('av') + '" class="avatar">'+ $ax.data('nm')).clearQueue();
			$('.congratulations .congratulation').html("<form action='/a?congratulations' methode='post' id='send_congr'><textarea name='tx' maxlength='150' placeholder='Напишите своё поздравление'></textarea><input type='submit' value='Отправить'></form>").clearQueue();
			lengthCounter('#send_congr textarea');
			$('#send_congr').submit(function(){
				$form = $(this);
				if (!$form.children('textarea').val()) {
					$form.children('textarea').focus().css('outline', '1px solid red').animate({"outline-color": "transparent"}, function(){
						$(this).css('outline', 'none');
					});
					return false;
				}
				$form.children('input[type=submit]').before('<b class=icoLoad></b>');
				$.post($form.attr('action'), $form.serialize(), function(dt){
					$form.children('.icoLoad').remove();
					if (dt == 'ok') {
						var ax = {
							av: $ax.data('av'),
							nm: $ax.data('nm'),
							tx: $form.children('[name=tx]').val(),
						};
						$('#add_congr').replaceWith('<span class="add_congr-gray"></span>');
						$('.congratulations .congratulation').html(ax.tx);
						if (congratulations.length) {
							$('.congratulations').data('i', congratulations.length - 1);
							congratulations.push(ax);
							next_congr();
						}
					} else {
						var aor = {
							auth: 'Необходимо выполнить вход на сайт',
							rating: 'Недостаточно рейтинга',
							already: 'Ваше поздравление уже принято',
							null: 'Что-то пошло не так'
						}
						if (aor[dt]) {
							showCurtain(aor[dt]);
						}
					}
				});
				return false;
			});
		} else {
			var $el = $ax.after(notice).next();
			removeElement($el, 3200);
		}
		return false;
	});

	var delay = 10000,
		ms = 400,
		next_congr = function(){
			var $ax = $('.congratulations'),
				i = $ax.data('i');
			if ($('#send_congr').length) {
				return false;
			}
			if (!i) {
				i = 1;
			} else if (i == congratulations.length - 1) {
				i = 0;
			} else {
				i++;
			}
			var dt = congratulations[i];
			$('.congratulations .author').html('<img src="'+ (dt.av ? dt.av : $ax.data('av')) + '" class="avatar">'+ dt.nm).delay(delay-ms).animate({opacity: 0.2}, ms, function(){
				$(this).css('opacity', 1);
				next_congr();
			});
			$('.congratulations .congratulation').html(dt.tx).delay(delay-ms).animate({opacity: 0.2}, ms, function(){
				$(this).css('opacity', 1);
			});
			$ax.data('i', i);
		};

	if (congratulations.length > 1) {
		$('.congratulations .author').delay(delay-ms).animate({opacity: 0}, ms, function(){
			$(this).css('opacity', 1);
			next_congr();
		});
		$('.congratulations .congratulation').delay(delay-ms).animate({opacity: 0}, ms, function(){
			$(this).css('opacity', 1);
		});
	}
}

function icoLoad($ax, adtOpt) {
	adtOpt = adtOpt || new Object();
	if ($ax.siblings('.icoLoad').length) {
		$ax.siblings('.icoLoad').remove();
		if ($ax.prop('tagName') == 'INPUT' && $ax.prop('disabled')) {
			$ax.prop('disabled', false);
		}
	} else {
		$ax.before('<b class="icoLoad" style="margin:0;width:'+ $ax.outerWidth() +'px;height:'+ $ax.outerHeight() +'px;'+ (adtOpt.style ? adtOpt.style : '') +'"></b>');
		if ($ax.prop('tagName') == 'INPUT' && ($ax.attr('type') == 'button' || $ax.attr('type') == 'submit')) {
			$ax.prop('disabled', true);
		}
	}
}

function z_useful_links() {
	$('.useful_link_add').click(function(e){
		e.preventDefault();
		var a = $('.useful_link_cliсhe.hidden').clone(),
			b = a.removeClass('hidden').find('input').prop('disabled', false).eq(0).focus();
		$(this).before(a);
		b.focus();
	});

	$('.useful_links').on('click', '.edit', function(){
		var a = $(this).closest('.useful_link'),
			b = $('.useful_link_cliсhe.hidden').clone();
		b.children('span').html('Редактирование ссылки');
		b.removeClass('hidden').find('input').prop('disabled', false);
		b.append('<input type="hidden" name="useful_link[edt][]" value="'+ a.data('lid') +'"><a class="js cancel">Отменить редактирование</a>');
		console.log(a.data());
		$.each(['url', 'txt', 'dsc'], function(i,v){
			b.find('[name="useful_link['+ v +'][]"]').val(a.data(v));
		});
		a.hide().after(b);
	}).on('click', '.dl', function(){
		var i = $(this).closest('.useful_link').data('lid');
		$(this).after('<font color="maroon">Ссылка будет удалена<br></font><input type="hidden" name="useful_link[del][]" value="'+ i +'"><a class="js cancel">Отменить удаление</a>').hide()
			.prev('a').hide();
	}).on('click', '.cancel', function(){
		var a = $(this);
		if (a.closest('.useful_link').length) {
			a.prevAll('font, input').remove();
			a.prevAll('a').show();
			a.remove();
		} else if (a.closest('.useful_link_cliсhe').length) {
			a = a.closest('.useful_link_cliсhe');
			a.prev('.useful_link').show();
			a.remove();
		}
	});
}

function precisely_delete(event, url) {
    var a = $(event.target),
        x = event.pageX, y = event.pageY,
        s = {background: 'white', border: '1px solid gray', padding: '3px 5px', position: 'absolute', top: y, left: x, lineHeight: '1.8em', whiteSpace: 'nowrap'},
        $div = $('<div>', { html: 'Точно удалить? <a class="js ml10">удалить</a> <a class="js ml10">отмена</a>', css: s }).appendTo('body');
    $div.css({left: (x > window.innerWidth/2) ? x - $div.outerWidth()/1.21 : x - $div.outerWidth()/3.9, top: y - $div.outerHeight()/2});
    $div.children('a:first').click(function(){
        $div.remove();
        icoLoad(a);
        $.get(url, function(dt){
	        icoLoad(a);
            if (dt == 'ok') {
                a.replaceWith('<font color="maroon">Запись удалена</font>');
            } else {
                showCurtain(dt);
            }
        });
    });
    $div.children('a:last').click(function(){
        $div.remove();
    });
}

function mask_phoneNumber(selector) {
	$(selector).focus(function(){
		if (!this.value) {
			this.value = "+7 ";
		}
	}).keyup(function(e){
		if (e.keyCode == 46) { return true; }
		var v = this.value;
		if (v.indexOf("+7") == -1) {
			v = "7"+ v;
		}
		v = v.replace(/\D/g, '').match(/(\d{0,1})(\d{0,3})(\d{0,3})(\d{0,2})(\d{0,2})/);
		this.value = '+7 '+ (v[3] ? '('+ v[2] +') '+ (v[3] ? v[3] + (v[4] ? '-'+ v[4] + (v[5] ? '-'+ v[5] : '') : '') : '') : v[2]);
	}).blur(function(){
		if (this.value == "+7 ") {
			this.value = "";
		}
	}).attr('placeholder', "+7");
}

function pbOrdRvw() {
	var a = $(this),
		ln = location.pathname +'?review='+ a.data('i');
	icoLoad(a);
	$.get(ln, function(d){
		icoLoad(a);
		if (d.tx) {
			var opt = {"class": "pv20s"};
			if (d.st) {
				if (d.st == "st0") {
					opt.close_2 = 1;
				} else {
					opt.close_3 = 1;
					opt.close_text = "Спасибо, понятно";
				}
			}
			showCurtain(d.tx, opt);
		} else if (d.upd) {
			$('main').html(d.upd);
			$('aside').html('<div class="asdBlc">'+ d.asd +'</div>');
			window.history.pushState(null, d.ttl, ln);
			window.addEventListener('popstate', function(e){
				location.reload();
			});
		} else {
			showCurtain("Что-то пошло не так");
		}
	}, "json");
}

function pbPubInCll() {
	var a = $(this),
		ln = location.pathname +'?pub_in_cll='+ a.data('i');

	var lc = function(a){
		var b = a.next().children();
		a.keyup(function(){
			b.text(this.maxLength - this.value.length);
		}).keyup();
	};

	icoLoad(a);
	$.getJSON(ln, function(d){
		icoLoad(a);
		if (d.tx) {
			var c = showCurtain(d.tx, {"class": "pv20s"});
			if (c.find('form').length) {
				var f = c.find('form');
				c.find('.close').addClass('flRg').unwrap().appendTo(f);
				lc(f.find('textarea'));
				f.submit(function(e){
					e.preventDefault();
					var b = f.find('input[type=submit]');
					icoLoad(b);
					$.post(ln, f.serialize(), function(d){
						icoLoad(b);
						if (d.st == 'ok') {
							$('<span>', {"class": 'green ml10'}).text('Данные сохранены').insertAfter(b).rmEl();
							a.val('Описание в сборнике');
						} else {
							showCurtain(d.tx ? d.tx : 'Что-то пошло не так');
						}
					}, 'json');
				});
			}
		} else {
			showCurtain("Что-то пошло не так");
		}
		if (d.st == 'in') {
			a.val('Внести описание для сборника');
		}
	});
}

function ajaxForm_chkBar(form) {
	if (typeof form == "string" || typeof form.jquery == "undefined") {
		form = $(form);
	}
	var a = form.find('.ajaxUploadPrg');
	if (a.filter(':empty').length) {
		a.html('<div class="wr"><div class="br"></div><div class="pr"></div></div>');
	}
	a.show();
}

function ajaxForm_updBar(form, val) {
	if (typeof form == "string" || typeof form.jquery == "undefined") {
		form = $(form);
	}
	form.find('.ajaxUploadPrg .br').width(val);
	form.find('.ajaxUploadPrg .pr').text(val);
}

function crs_promo() {
	var a = $('<div>', {"class": 'mv10'}).html('<div style="font-size:15px;">Применить промокод</div>'+'<div class="mv15">'+'Промокод'+'<div class="mv10">'+'<input type="text" style="width:100%;box-sizing:border-box;">'+'</div>'+'Обратите внимание: промокод можно использовать только один раз.'+'</div>'+'<input type="button" value="Применить промокод">');

	const processingResponse_crs = function(d, inp, btn){
		const s = [{
			"nil": "Код указан неверно",
			"act": "Код был активирован ранее",
			"exp": "Срок годности истёк",
			"wrn": "Сюда этот код не походит",
		}, {
			"usr": "Данные пользователя не определены",
			"crs": "Курс не определён",
		}];

		if (d.tx) {
			$('<div>', {"class": 'red mb10'}).text(d.tx).insertBefore(btn).rmEl();
		} else if (s[0].hasOwnProperty(d.st)) {
			$('<span>', {"class": "red mt5i ml10"}).text(s[0][d.st]).insertAfter(inp).rmEl();
		} else if (s[1].hasOwnProperty(d.st)) {
			$('<div>', {"class": "blue mb15"}).text(s[1][d.st]).insertBefore(btn).rmEl();
		} else {
			inp.addClass('bgGreen');
			btn.replaceWith('<span class="green lh28">Код активирован</span>');
			$('.curtain .close').val("Закрыть");

			if ($('#crs_prt_regFrm').length) {
				if ($('#crs_prt_regFrm input[name=promo_code]').length) {
					$('#crs_prt_regFrm input[name=promo_code]').val(inp.val());
				} else {
					$('<input>', {"type": 'hidden', "name": 'promo_code'}).val(inp.val()).appendTo('#crs_prt_regFrm');
				}
			}

			if ($('#crs_prt').length) {
				if (d.upd) {
					const c = $('#crs_prt');
					const wrp = c.closest('.crsBtns');
					c.next('input').remove();
					wrp.prev('.dsc').remove();
					$('<div>', {class: 'mb20'}).html(d.upd).insertBefore(wrp);
					c.remove();
				} else if ($('#crs_prt').closest('.crsBtns').prev('.dsc').length) {
					$('#crs_prt').closest('.crsBtns').prev('.dsc').text(d.ms);
				} else {
					$('<div>', {class: 'green dsc'}).text(d.ms).insertBefore($('#crs_prt').closest('.crsBtns'));
				}
			} else if (d.upd || d.ms) {
				$('<div>', {class: 'green mb15'}).html(d.upd || d.ms).insertBefore($('#crs_promo').prev());
			}
		}
	};

	const processingResponse_rvw = function(r, inp, btn){
		const unxpEr = () => {
			$('<div>', {class: 'red mb10'}).text('Непредвиденная ошибка. Пожалуйста, обратитесь в техническую поддержку.').insertBefore(btn).rmEl(90);
		};

		if (r.st == 'er' || r.st == 'wr') {
			const cl = {er: 'red', wr: 'blue'};
			if ('ms' in r) {
				$('<div>', {class: cl[r.st] +' mb10'}).text(r.ms).insertBefore(btn).rmEl((r.ms.length < 30) ? 30 : r.ms.length);
			} else {
				unxpEr();
			}
		} else if (r.st == 'ok') {
			btn.replaceWith('<span class="green lh28">Код активирован</span>');
			inp.addClass('bgGreen').closest('.curtain').find('.close').val('Закрыть');
			if ('tx' in r) {
				const btn0 = $('#crs_promo');
				btn0.prevAll().remove();
				btn0.next('input').removeAttr('class').val('Спасибо, понятно');
				btn0.before(r.tx);
				btn0.remove();
			}
		} else {
			unxpEr();
		}
	};

	a.find('input[type=button]').click(function(){
		var a = $(this), b = a.parent().find('input[type=text]');
		if (!b.val()) {
			b.focus().addClass('bgRed').rmBgCl();
			return false;
		}

		const btn = $('#crs_promo');
		let ln = '';
		if (btn.data('cid') != undefined) {
			ln = '/a?courses&participate='+ btn.data('cid') + (!$('#crs_prt').length ? '&act=prcd' : '');
		} else if (btn.data('pid') != undefined) {
			ln = location.pathname +'?review='+ btn.data('pid');
		} else {
			$('<div>', {class: 'maroon mb15'}).text('Не удалось определить цель применения. Пожалуйста, обратитесь в техническую поддержку.').insertBefore(a.prop('disabled', true));
			return false;
		}

		b.prop('readonly', true);
		icoLoad(a);
		$.post(ln, { promo_code: b.val() }, function(d){
			icoLoad(a);
			b.removeProp('readonly');
			if (btn.data('cid') != undefined) {
				processingResponse_crs(d, b, a);
			} else if (btn.data('pid') != undefined) {
				processingResponse_rvw(d, b, a);
			}
		}, 'json');
	});

	var c = showCurtain('', {"close_text": 'Отмена', "class": 'close2Right'});
	a.prependTo(c.find('.innerLayer'));
	var t = c.find('.close');
	t.css('marginTop', t.outerHeight()*-1 - t.parent().outerHeight(true));
	c.find('input[type=text]').focus();
}

//COOKIE


/**
 * jQuery Cookie plugin
 *
 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
jQuery.cookie = function (key, value, options) {

    // key and at least value given, set cookie...
    if (arguments.length > 1 && String(value) !== "[object Object]") {
        options = jQuery.extend({}, options);

        if (value === null || value === undefined) {
            options.expires = -1;
        }

        if (typeof options.expires === 'number') {
            var days = options.expires, t = options.expires = new Date();
            t.setDate(t.getDate() + days);
        }

        value = String(value);

        return (document.cookie = [
            encodeURIComponent(key), '=',
            options.raw ? value : encodeURIComponent(value),
            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
            options.path ? '; path=' + options.path : '',
            options.domain ? '; domain=' + options.domain : '',
            options.secure ? '; secure' : ''
        ].join(''));
    }

    // key and possibly options given, get cookie...
    options = value || {};
    var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
};

  $(function() {
    /* проверяем показывалось ли оповещение */
    var showedCookiesWarning = $.cookie('showCookiesWarning');

    /* если нет, то показываем */
    if (!showedCookiesWarning) {
      showCookiesWarning();
    }
  });

  function showCookiesWarning() {
    /* создаем всплывашку */
    var cookiesWarning = document.createElement('div');
    cookiesWarning.className = "cookies-warning ";
    
        cookiesWarning.innerHTML = "\
                <div class=\"cookies-warning__inner container \"> \
                  Продолжая использовать наш сайт, вы даете согласие на обработку <a href=\"/cookies.html\">файлов cookie</a>. \
                  <div class=\"cookies-warning__close\"></div>\
                </div>";
    
      /* добавляем её на страницу */
      $('body').append(cookiesWarning);
      $(cookiesWarning).find('.cookies-warning__close').on('click', function() {
        $(cookiesWarning).remove();

        $.cookie('showCookiesWarning', 'true', { expires: 36500, path: '/' });
      });
  }
