var params = new Array();
var c_params = new Array();
var tiped = false;
var avaliable_actions = { 'delete':'',
			'undelete':'',
			'close':'',
			'open':'',
			'pin':'',
			'unpin':'',
			'rename':'',
			'move':'',
			'resolved':'',
			'unpublish':'',
			'ban':'',
			'unban':'',
			'kick':'',
			'chown':''};

var extra_id_actions = {'move':'',
			'kick':'',
			'chown':''};

var extra_string_actions = {'rename':'',
			    'ban':''};

var avaliable_types = { 'topic':'',
			'post':'',
			'journal':'',
			'journal_comment':'',
			'success_comment':'',
			'article_comment':'',
			'user':'',
			'group':'',
			'recipe':'',
			'recipe_comment':'',
			'dietmessage':''};

var avaliable_ids = /^[1-9][0-9]*$/;

function ShowComplain(init_params) {//obj_type, obj_id
	var ObjectTypesComplain = {	'topic':'ой темой форума',
					'post':'им сообщением',
					'journal':'ой записью блога',
					'journal_comment':'им комментарием к записи блога',
					'success_comment':'им комментарием к истории успеха',
					'article_comment':'им комментарием к статье',
					'user':'им пользователем',
					'group':'ой группой',
					'recipe':'им рецептом',
					'recipe_comment':'им комментарием к рецепту',
					'dietmessage':'ой diet-почтой'
				  }
	var ComplainModal = '<div style="width:100%;text-align: left;">									\
	<form name="ComplainModalForm" action="javascript:void(0);" class="AnyModalForm">						\
	<p style="font-size:14px;font-weight:bold;">Жалоба будет отправлена на стол модератору, и он обязательно разберётся с эт' +ObjectTypesComplain[init_params['object_type']]+ '.</p>					\
	Укажите суть жалобы:<br>';
	
	if(init_params['object_type'] == 'user') {
		ComplainModal += '<small>Обязательно приведите пример нарушений, если жалуетесь на пользователя, а не на его сообщение, журнал и т.д.</small><br>';
	}
	
	ComplainModal += '<textarea name="comment" style="height:110px;" onClick="if(this.value==\'Спам, реклама, оскорбления, нарушение правил Диеты Онлайн или тебе просто хотелось о чём-нибудь попросить модератора?\') this.value=\'\';">Спам, реклама, оскорбления, нарушение правил Диеты Онлайн или тебе просто хотелось о чём-нибудь попросить модератора?</textarea><br><br>								\
	Вы действительно хотите пожаловаться?												\
	<div style="text-align:right;">													\
	<span id="moderation_action_wait" style="display:none;">обрабатывается...</span>						\
	<a href="javascript:AJAXComplain();" style="color: red;" onClick="this.style.display=\'none\';document.getElementById(\'moderation_action_wait\').style.display = \'\'">пожаловаться</a> | 		\
	<a href="javascript:CloseComplain();" style="color: orange;">отмена</a>								\
	</div>																\
	</form>																\
	</div>';
	CloseComplain();
	c_params['object_type'] = init_params['object_type'];
	c_params['object_id'] = init_params['object_id'];
	tiped = true;
	Tip(ComplainModal, CENTERMOUSE, true, OFFSETX, 0, WIDTH, 305, TEXTALIGN, 'center', TITLE, 'Сообщить модератору', CLICKCLOSE, false, EXCLUSIVE, true, DURATION, 0);
}
function AJAXComplain() {
	
	c_params['comment'] = document.ComplainModalForm.comment.value;
	c_params['complain'] = true;
	
	if( !(c_params['object_type'] in avaliable_types) ) {
		alert('Такого объекта не существует.');
		CloseModal();
		return false;
	}
	if( !avaliable_ids.test(c_params['object_id']) ) {
		alert('Неверный идентификатор объекта.');
		CloseModal();
		return false;
	}

	var req = new JsHttpRequest();
	
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if(req.responseText.length > 1)
				alert("В результате отправки жалобы возникла ошибка:\n\n" + req.responseText);
			else {
				alert("Жалоба отправлена модератору. Спасибо, что помогаешь делать Диету Онлайн лучше!");
				CloseComplain();
			}
		}
	}
	
	req.open(null, '../community/forum_admin_action.php', true);

	req.send(c_params);
}
function CloseComplain() {
	c_params = new Array();
	if(tiped) {
		UnTip();
		tiped = false;
	}
}
/******************************************************************************/
function ShowThanks(init_params) {//obj_type, obj_id
	var ComplainModal = '<div style="width:100%;text-align: left;">								\
	<form name="ThanksModalForm" action="javascript:void(0);" class="AnyModalForm">						\
	<p style="font-size:14px;font-weight:bold;">Поблагодарить пользователя.</p>					\
	Комментарий:<br>													\
	<textarea name="comment" style="height:110px;"></textarea><br><br>												\
	<div style="text-align:right;">													\
	<span id="moderation_action_wait" style="display:none;">обрабатывается...</span>						\
	<a href="javascript:AJAXThanks();" style="color: green;" onClick="this.style.display=\'none\';document.getElementById(\'moderation_action_wait\').style.display = \'\'">спасибо</a> | 		\
	<a href="javascript:CloseThanks();" style="color: orange;">отмена</a>								\
	</div>																\
	</form>																\
	</div>';
	CloseThanks();
	t_params['object_type'] = init_params['object_type'];
	t_params['object_id'] = init_params['object_id'];
	tiped = true;
	Tip(ComplainModal, CENTERMOUSE, true, OFFSETX, 0, WIDTH, 305, TEXTALIGN, 'center', TITLE, 'Спасибо', CLICKCLOSE, false, EXCLUSIVE, true, DURATION, 0);
}
function AJAXThanks() {
	
	t_params['comment'] = document.ThanksModalForm.comment.value;
	t_params['thanks'] = true;
	
	if( !(t_params['object_type'] in avaliable_types) ) {
		alert('Такого объекта не существует.');
		CloseModal();
		return false;
	}
	if( !avaliable_ids.test(t_params['object_id']) ) {
		alert('Неверный идентификатор объекта.');
		CloseModal();
		return false;
	}

	var req = new JsHttpRequest();
	
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if(req.responseText.length > 1)
				alert("В результате отправки сообщения возникла ошибка:\n\n" + req.responseText);
			else {
				alert("Твоя благодарность передана пользователю! Спасибо за активное участие в общественной жизни на Диете Онлайн.");
				CloseThanks();
			}
		}
	}
	
	req.open(null, '../community/forum_admin_action.php', true);

	req.send(t_params);
}
function CloseThanks() {
	t_params = new Array();
	if(tiped) {
		UnTip();
		tiped = false;
	}
}
/******************************************************************************/
function ShowModal(init_params) { //obj_id, action, obj_type  сюда так же передаются 'rcnhs
	CloseModal();
	params['action'] = init_params['action'];
	params['object_type'] = init_params['object_type'];
	params['object_id'] = init_params['object_id'];
	var modal_html = PrepareModalHTML();

	tiped = true;
	Tip(modal_html, CENTERMOUSE, true, OFFSETX, 0, WIDTH, 305, TEXTALIGN, 'center', TITLE, 'Модерация', CLICKCLOSE, false, EXCLUSIVE, true, DURATION, 0);
}
function PrepareModalHTML() {
	var AnyModal = '<div style="width:100%;text-align: left;">									\
	<form name="AnyModalForm" action="javascript:void(0);" class="AnyModalForm">							\
	sc_special_element														\
	Укажите причину sc_action_reason_text:<br>											\
	<textarea name="comment" style="height:110px;"></textarea><br><br>								\
	Вы действительно хотите sc_action_confirm_text?											\
	<div style="text-align:right;">													\
	<span id="moderation_action_wait" style="display:none;">обрабатывается...</span>						\
	<a href="javascript:AJAXModeration();" style="color: red;" onClick="this.style.display=\'none\';document.getElementById(\'moderation_action_wait\').style.display = \'\'">sc_action_text</a> | 		\
	<a href="javascript:CloseModal();" style="color: orange;">отмена</a>								\
	</div>																\
	</form>																\
	</div>';
	
	AnyModal = AnyModal.replace(/sc_action_reason_text/g, PrepareActionText('reason'));
	
	AnyModal = AnyModal.replace(/sc_action_confirm_text/g, PrepareActionText('confirm'));
	
	AnyModal = AnyModal.replace(/sc_action_text/g, PrepareActionText('button'));
	
	AnyModal = AnyModal.replace(/sc_special_element/g, PrepareSpecialElement());
	
	return AnyModal;
}
function CloseModal() {
	params = new Array();
	if(tiped) {
		UnTip();
		tiped = false;
	}
}
function UpdateButtons(actions) {
	var text = '';
	var separator = ' ';
	
	for(i=0;i<actions['buttons'].length;i++) {
		if(i!=0)
			text += separator;
		text += actions['buttons'][i];
	}
	
	if(document.getElementById('buttons_' + params['object_type'] + '.' + params['object_id']))
		document.getElementById('buttons_' + params['object_type'] + '.' + params['object_id']).innerHTML = text;
	if(params['action'] == 'resolved')
		document.getElementById('complain_' + params['object_type'] + params['object_id']).style.display = 'none';
	if(params['action'] == 'rename')
		document.getElementById('name_' + params['object_type'] + '.' + params['object_id']).innerHTML = actions['name'];
	if(typeof(GModeration) != 'undefined') {
		if(typeof(GModeration['state'][params['object_type'] + '.' + params['object_id']]) != 'undefined') {
			if(params['action'] == 'delete')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['deleted'] = 1;
			if(params['action'] == 'undelete')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['deleted'] = 0;
				
			if(params['action'] == 'close')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['closed'] = 1;
			if(params['action'] == 'open')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['closed'] = 0;
				
			if(params['action'] == 'pin')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['pinned'] = 1;
			if(params['action'] == 'unpin')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['pinned'] = 0;
				
			if(params['action'] == 'ban')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['banned'] = 1;
			if(params['action'] == 'unban')
				GModeration['state'][params['object_type'] + '.' + params['object_id']]['banned'] = 0;
		}
		if(typeof(GModeration['name'][params['object_type'] + '.' + params['object_id']]) != 'undefined')	
			if(params['action'] == 'rename')
				GModeration['name'][params['object_type'] + '.' + params['object_id']] = actions['name'];
	}
}
function AJAXModeration() {
	
	if(document.AnyModalForm.extra_id)
		params['extra_id'] = document.AnyModalForm.extra_id.value;
		
	if(document.AnyModalForm.extra_string)
	params['extra_string'] = document.AnyModalForm.extra_string.value;
	
	params['comment'] = document.AnyModalForm.comment.value;
	
	if(typeof(GModeration) != 'undefined') {
		if(typeof(GModeration['special'][params['object_type']]) != 'undefined')
			params['special'] = GModeration['special'][params['object_type']];
		if(typeof(GModeration['state'][params['object_type'] + '.' + params['object_id']]) != 'undefined') {
			params['object_state'] = {'deleted':GModeration['state'][params['object_type'] + '.' + params['object_id']]['deleted'],
						  'closed':GModeration['state'][params['object_type'] + '.' + params['object_id']]['closed'],
						  'pinned':GModeration['state'][params['object_type'] + '.' + params['object_id']]['pinned'],
						  'banned':GModeration['state'][params['object_type'] + '.' + params['object_id']]['banned']
						};
		}
	}
	if( !(params['action'] in avaliable_actions) ) {
		alert('Такого действия не существует.');
		CloseModal();
		return false;
	}
	if( !(params['object_type'] in avaliable_types) ) {
		alert('Такого объекта не существует.');
		CloseModal();
		return false;
	}
	if( !avaliable_ids.test(params['object_id']) ) {
		alert('Неверный идентификатор объекта.');
		CloseModal();
		return false;
	}
	if( (params['action'] in extra_id_actions) && !avaliable_ids.test(params['extra_id'])) {
		alert('Выберите дополнительные параметры.');
		CloseModal();
		return false;
	}
	if( ((params['action'] in extra_string_actions) || (params['action'] == 'move' && params['object_type'] == 'recipe')) && params['extra_string'].length < 1) {
		alert('Введите дополнительные параметры.');
		CloseModal();
		return false;
	}
	
	if(params['action'] == 'kick')
		params['extra_id'] = params['special']['group_id'];
	
	var req = new JsHttpRequest();
	
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if(req.responseText.length > 1)
			       alert("В результате модерирования возникла ошибка:\n\n" + req.responseText);
			else {
				UpdateButtons(req.responseJS.actions);
				CloseModal();
			}
		}
	}
	
	req.open(null, '../community/forum_admin_action.php', true);

	req.send(params);
}
function PrepareActionText(mode) {
	var ActionReason = {'delete':{'genitive':'удаления', 'infinitive':'удалить'},
			    'undelete':{'genitive':'восстановления', 'infinitive':'восстановить'},
			    'close':{'genitive':'закрытия', 'infinitive':'закрыть'},
			    'open':{'genitive':'открытия', 'infinitive':'открыть'},
			    'pin':{'genitive':'прикрепления', 'infinitive':'прикрепить'},
			    'unpin':{'genitive':'открепления', 'infinitive':'открепить'},
			    'rename':{'genitive':'переименовывания', 'infinitive':'переименовать'},
			    'move':{'genitive':'перемещения', 'infinitive':'переместить'},
			    'resolved':{'genitive':'решения', 'infinitive':'решить'},
			    'unpublish':{'genitive':'скрытия', 'infinitive':'скрыть'},
			    'ban':{'genitive':'бана', 'infinitive':'забанить'},
			    'unban':{'genitive':'разбана', 'infinitive':'разбанить'},
			    'kick':{'genitive':'исключения', 'infinitive':'исключить'},
			    'chown':{'genitive':'смены администратора', 'infinitive':'сменить администратора'}
			   }

	var ObjectTypes = {'topic':{'genitive':'темы', 'accusative':'тему'},
			   'post':{'genitive':'сообщения', 'accusative':'сообщение'},
			   'journal':{'genitive':'записи блога', 'accusative':'запись блога'},
			   'journal_comment':{'genitive':'комментария к записи блога', 'accusative':'комментарий к записи блога'},
			   'success_comment':{'genitive':'комментария к истории успеха', 'accusative':'комментарий к истории успеха'},
			   'article_comment':{'genitive':'комментария к статье', 'accusative':'комментарий к статье'},
			   'user':{'genitive':'пользователя', 'accusative':'пользователя'},
			   'group':{'genitive':'группы', 'accusative':'группу'},
			   'recipe':{'genitive':'рецепта', 'accusative':'рецепт'},
			   'recipe_comment':{'genitive':'комментария к рецепту', 'accusative':'комментарий к рецепту'},
			   'dietmessage':{'genitive':'diet-почты', 'accusative':'diet-почту'}
			  }

	if(mode == 'reason') {
		if(params['action'] == 'resolved')
			return ActionReason[params['action']]['genitive'] + ' проблемы';
		else
			return ActionReason[params['action']]['genitive'] + ' ' + ObjectTypes[params['object_type']]['genitive'];
	}
	else if(mode == 'confirm') {
		if(params['action'] == 'resolved')
			return 'отметить проблему как решённую';
		else {
			if(params['action'] == 'chown')
				return ActionReason[params['action']]['infinitive'] + ' ' + ObjectTypes[params['object_type']]['genitive'];
			else
				return ActionReason[params['action']]['infinitive'] + ' ' + ObjectTypes[params['object_type']]['accusative'];
		}
	}
	else if(mode == 'button')
		return ActionReason[params['action']]['infinitive'];

	return 'неизвестное действие';
}
function ShowGroupMoveByType(type) {
	document.AnyModalForm.extra_id.value=0;
	for(i=1;i<=4;i++) {
		document.getElementById('moderation_recipe_move_' + i).style.display = 'none';
		document.getElementById('moderation_recipe_move_' + i).selectedIndex = '0';
	}
	if(type != 0)
		document.getElementById('moderation_recipe_move_' + type).style.display = '';
	
}
function PrepareSpecialElement() {
	if(params['action'] in {'rename':'', 'move':'', 'ban':'', 'chown':'', 'kick':''}) {
		var Special = [];
		Special['rename'] = '<input type="text" name="extra_string" value="sc_old_name">';
		Special['move'] = '<select name="extra_id"><option>куда перенестиsc_move_list</select>';
		Special['recipe_move'] = '<input type="hidden" name="extra_id"><select name="extra_string" onChange="ShowGroupMoveByType(this.value)">	\
						<option value="0">выберите тип пермещения				\
						<option value="1">класс							\
						<option value="2">событие						\
						<option value="3">кухня							\
						<option value="4">тип							\
					  </select>									\
					  <br>										\
					  <select id="moderation_recipe_move_1" onChange="document.AnyModalForm.extra_id.value = this.value" style="display:none;">\
						<option value="0">Выберите класс рецепта				\
						<option value="1">Салаты и Закуски					\
						<option value="2">Первые блюда						\
						<option value="3">Вторые блюда						\
						<option value="4">Выпечка						\
						<option value="5">Десерты						\
					  </select>									\
					  <select id="moderation_recipe_move_2" onChange="document.AnyModalForm.extra_id.value=this.value" style="display:none;">\
						<option value="0">Выберите событие					\
						<option value="1">Пикник						\
						<option value="2">День Рождения						\
						<option value="3">Свадьба						\
						<option value="4">Вечеринка						\
						<option value="5">Дети							\
					  </select>									\
					  <select id="moderation_recipe_move_3" onChange="document.AnyModalForm.extra_id.value=this.value" style="display:none;">\
						<option value="0">Выберите кухню					\
						<option value="1">Русская						\
						<option value="2">Азиатская						\
						<option value="3">Итальянская						\
						<option value="4">Мексиканская						\
						<option value="5">Французская						\
						<option value="6">Немецкая						\
						<option value="7">Индийская						\
						<option value="8">Испанская						\
					  </select>									\
					  <select id="moderation_recipe_move_4" onChange="document.AnyModalForm.extra_id.value=this.value" style="display:none;">\
						<option value="0">Выберите тип						\
						<option value="1">Вегетарианские					\
						<option value="2">Низкожировые						\
						<option value="3">Низкоуглеводные					\
						<option value="4">Без сахара						\
					  </select>';
		
		Special['ban'] = '<input type="hidden" name="extra_string"><select onChange="UnixTimeByID(document.AnyModalForm.extra_string, this.value);"><option>выберите время<option value="1">час<option value="2">три часа<option value="3">день<option value="4">неделя</select>';
		Special['chown'] = '<select name="extra_id"></select>';
		Special['kick'] = '<input type="hidden" name="extra_id" value="'+GModeration['special']['user']['group_id']+'">';
		
		if(params['action'] == 'rename')
			Special['rename'] = Special['rename'].replace(/sc_old_name/g, GModeration['name'][params['object_type'] + '.' + params['object_id']]);
		else if(params['action'] == 'move') {
			if(params['object_type'] == 'recipe') {
				return Special['recipe_move'];
			}
			else {
				count = GModeration['move'].length;
				txt = '';
				for(i=0;i<count;i++) {
					txt += '<option value="' + GModeration['move'][i]['id'] + '">' + GModeration['move'][i]['name'];
				}
				Special['move'] = Special['move'].replace(/sc_move_list/g, txt);
			}
		}
		else if(params['action'] == 'chown') {
			
			var req = new JsHttpRequest();
			
			req.onreadystatechange = function() {
				if (req.readyState == 4) {
					if(req.responseText.length > 1)
					       alert("В результате модерирования возникла ошибка:\n\n" + req.responseText);
					else {
						var txt = '';
						var cnt = req.responseJS.chowns.length;
						
						var opt = document.createElement('OPTION');
						var text = document.createTextNode('выбери нового администратора из участников группы');
						opt.appendChild(text);
						document.AnyModalForm.extra_id.appendChild(opt);
						
						for(i=0;i<cnt;i++) {
							if(req.responseJS.chowns[i]) {
								var opt = document.createElement('OPTION');
								opt.setAttribute('value',req.responseJS.chowns[i]['id']);
								var text = document.createTextNode(req.responseJS.chowns[i]['name']);
								opt.appendChild(text);
								document.AnyModalForm.extra_id.appendChild(opt);
							}
						}
					}
				}
			}
			
			
			
			req.open(null, '../dietgroups/get_chowns.php', true);
		
			req.send({'object_type':params['object_type'], 'object_id':params['object_id']});
		}
		return Special[params['action']] + '<br>';
	}
	else
		return '';
}
function UnixTimeByID(obj, tid) {
	var t = new Date;
	var unixtime = parseInt(t.getTime() / 1000);
	if(tid == 1)
		obj.value = unixtime + 3600;//час
	else if(tid == 2)
		obj.value = unixtime + 10800;//три часа
	else if(tid == 3)
		obj.value = unixtime + 86400;//день
	else if(tid == 4)
		obj.value = unixtime + 604800;//неделя		
}
