/**
 * Vars
 */

var type = false;

var typeArray = {'plain': 'Простой текст', 'bbcode': 'bbCode', 'html': 'HTML', 'markdown': 'Markdown'};
// Да, да, я знаю :)
var clearURL = function(){var url = blogURL.split('/');return '/' + [url[1], url[2]].join('/') + '/';};

/**
 * Ajax
 */

function ajaxErr(ajx, errMsg) {
    if(!ajx) {
        var errMsg = errMsg + 'Во время запроса произошла ошибка';
    }
    else if(ajx.status == 403) {
        var errMsg = 'Вы не авторизованы! <a href="/" target="_blank">Нажмите здесь, чтобы войти</a>';
    }
    else if(ajx.status == 500) {
        var errMsg = 'Внутренняя ошибка сервера. Попробуйте повторить запрос позднее';
    }
    else {
	var errCode = 'неизвестно';
	if(ajx.status){
		errCode = ajx.status;
	}
        var errMsg = 'Во время запроса произошла ошибка. HTTP статус: ' + ajx.responseText + '. Если ошибка повторяется&nbsp;&mdash; пожалуйста, сообщите по адресу: <a href="mailto:support@novsu.ru">support@novsu.ru</a>';
    }
    $('#err').append('<p>' + errMsg + '</p>').fadeIn('fast');
}

function errHandler(data, inner){
	var errMsg = null;
	if(data.err.error){
		switch(data.err.error){
			case(-1):
				errMsg = 'Ошибка';
				break;
			case(3):
				errMsg = 'Значение параметра должно быть уникальным';
				break;
			case(5):
				errMsg = 'Недостаточно прав для выполнения операции';
				break;
			case(4):
				errMsg = 'Отсутствует обязательный ключ';
				break;
			default:
				errMsg = 'Неизвестная ошибка. Обратитесь в support@novsu.ru';
		}
	}
	else{
		errMsg = 'Заполнены не все обязательные поля формы!';
	}
	if(inner){
		$("p.error").text(errMsg);
		$("p.error").show();
	}
	else{
		alert(errMsg, true);
	}
}

$.ajaxSetup({
	dataType: 'json',
	type: 'POST',
	url: ajaxURL,
	error: function(ajx) {ajaxErr(ajx)}
});

/**
 * Help functions
 */

function changeGG(keyword, val){
	$("#selectHelp").attr('href', 'http://ru.wikipedia.org/wiki/Служебная:Search/' + keyword.replace(' ', '_'));
	if(val != 'bbcode'){
		$("#toolbar").hide("fast");
	}
	else{
		$("#toolbar").show("fast");
	}
}

function dateFormat(date){
	date = date.split(' ');
	d = date[0].split('-');
	t = date[1].substr(0, 5);
	return '<b>' + d[2] + '.' + d[1] + '.' + d[0].substr(2) + '</b>' + '<br>' + t;
}

function openWindow(url){
	window.open(url, 'popup', 'toolbar=no,status=no,menubar=no,scrollbars=yes,resizeable=yes,width=800,height=300');
}

function writeURL(type){
	url = $("#url").val();
	if(type == 'img'){
		doImage('ed', url);
	}
	else{
		doURL('ed', url);
	}
}

function setURL(url){
	if(type == 'img'){
		doImage('ed', url);
	}
	else{
		doURL('ed', url);
	}
}

function setURL2(url){
	if(type == 'img'){
		doImage('cf', url);
	}
	else{
		doURL('cf', url);
	}
}

function chooseURL(tp, obj){
	type = tp;
        var l = (window.screen.width - 800) / 2;
        var t = (window.screen.height - 150) / 2;

	//alert(obj);
	if(obj == 'cf'){
	if(type == 'img'){
		url = wopen + '?wopen=1&type=img&callback=setURL2&dialog=' + escape(imgDialog).replace(/\//g, "%2F");
	}
	else{
		url = wopen + '?wopen=1&type=url&callback=setURL2&dialog=' + escape(imgDialog).replace(/\//g, "%2F");
	}}
	else{
	if(type == 'img'){
		url = wopen + '?wopen=1&type=img&callback=setURL&dialog=' + escape(imgDialog).replace(/\//g, "%2F");
	}
	else{
		url = wopen + '?wopen=1&type=url&callback=setURL&dialog=' + escape(imgDialog).replace(/\//g, "%2F");
	}}
	var win = window.open(url, 'popup', 'toolbar=no,status=no,menubar=no,scrollbars=no,resizeable=no,width=800,height=150,left=' + l + ',top=' + t);
        ///win.moveTo(l, t);
	win.focus();

	//div = '<div><input type="hidden" id="urlType" value="' + type + '"><label for="url">' + txt + ':<input type="text" id="url" value="http://" style="width:220px;"><input type="button" style="display:inline;width:150px;" onClick="openWindow(\'' + url + '\')" value="Посмотреть на сервере"></label></div>';
	//$("#fdialog").append(div);
	//$("#fdialog").dialog('open').dialog('option', 'title', title);
}

/**
 * Base functions
 */

function createPostForm()
{	var formData = 'action=get_categories';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			var html = '<form id="add-post-form">';
			html += '<p class="error"></p>';
			html += '<input type="hidden" name="action" id="act" value="add_post">';
			html += '<label for="title"><b>Заголовок:</b><input type="text" name="title" id="title" class="input"></label>';
			if(data.categories){
				html += '<label for="category">Рубрика:<select name="category" id="category">';
				html += '<option value="0">---</option>';
				for(var i = 0; i < data.categories.length; i++){
					html += '<option value="' + data.categories[i].id + '">' + data.categories[i].title + '</option>';
				}
				html += '</select></label>';
			}
			html += '<label for="type"><b>Форматирование:</b><select title="Если вы не знаете, что это такое&nbsp;&mdash; выберите bbCode" name="type"  onChange="javascript:var w = this.options[this.selectedIndex];var kw = w.text;changeGG(kw, w.value);" id="type">';
			for(var i in typeArray){
				if(i == 'bbcode'){
					html += '<option value="' + i + '" selected>' + typeArray[i] + '</option>';
					var kw = typeArray[i];
					var kwval = i;
				}
				else{
					html += '<option value="' + i + '">' + typeArray[i] + '</option>';
				}
			}
			html += '</select><a href="http://ru.wikipedia.org/wiki/bbCode" target="_blank" id="selectHelp">Справка по форматированию</a></label>';
			if(!tos){
			    html += '<label for="tos"><input type="checkbox" name="tos" value="1" id="tos"><b>Я соглашаюсь с &laquo;<a href="/file/142541/" style="color:darkblue;" target="_blank">Правилами публикации сообщений на портале НовГУ</a>&raquo;</b><label>';
			}
			html += '<label for="ca"><input type="checkbox" name="comments" value="1" checked="true" id="ca">Разрешить комментарии</label>';
			html += '<label for="ed"><b>Текст сообщения</b></label><textarea name="text" class="ed" id="ed"></textarea></form>';

			$("#dialog").append(html);
			edToolbar('ed');
			$("#dialog").dialog('open').dialog('option', 'title', 'Добавить новое сообщение');
			changeGG(kw, kwval);
		}
		else{
			errHandler(data);
		}
	}
	});
};

function getRawPost(id){
	var formData = 'postID=' + id + '&action=get_raw_post';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			var html = '<form id="edit-post-form">';
			html += '<input type="hidden" name="postID" id="postID" value="' + data.id + '">';
			html += '<input type="hidden" name="action" id="act" value="edit_post">';
			html += '<label for="title"><b>Заголовок:</b><input type="text" name="title" id="title" value="' + data.title + '" class="input"></label>';
			if(data.categories){
				html += '<label for="category">Рубрика:<select name="category" id="category">';
				html += '<option value="0">---</option>';
				for(var i = 0; i < data.categories.length; i++){
					if(data.categories[i].id == data.category){
						html += '<option value="' + data.categories[i].id + '" selected>' + data.categories[i].title + '</option>';
					}
					else{
					html += '<option value="' + data.categories[i].id + '">' + data.categories[i].title + '</option>';
					}
				}
				html += '</select></label>';
			}

			html += '<label for="type"><b>Форматирование:</b><select title="Если вы не знаете, что это такое&nbsp;&mdash; выберите bbCode" name="type"  onChange="javascript:var w = this.options[this.selectedIndex];var kw = w.text;changeGG(kw, w.value);" id="type">';
			for(var i in typeArray){
				if(i == data.text_src_type){
					html += '<option value="' + i + '" selected>' + typeArray[i] + '</option>';
					var kw = typeArray[i];
					var kwval = i;
				}
				else{
					html += '<option value="' + i + '">' + typeArray[i] + '</option>';
				}
			}
			html += '</select><a id="selectHelp" href="http://www.google.com/" target="_blank">Справка по форматированию</a></label>';
			if(data.comments_allow == 1){
				html += '<label for="ca"><input type="checkbox" name="comments" value="1" checked="true" id="ca">Разрешить комментарии</label>';
			}
			else{
				html += '<label for="ca"><input type="checkbox" name="comments" value="1" id="ca">Разрешить комментарии</label>';
			}
			html += '<label for="ed"><b>Текст сообщения</b></label><textarea name="text" class="ed" id="ed">' + data.text_src + '</textarea>';
			html += '</form>';

			$("#dialog").append(html);
			edToolbar('ed');
			$("#dialog").dialog('open').dialog('option', 'title', 'Редактировать сообщение');
			changeGG(kw, kwval);
		}
		else{
			errHandler(data);
		}
	}
	});
};

function getPost(id){
	var formData = 'postID=' + id + '&action=get_post';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("#msg_" + id).html(data.title);
			if($("#cat") && data.category != 0){
				$("#cat").attr('href', blogURL + '?cat=' + data.category);
				$("#cat").html(data.cTitle);
			}
			$("#msg_cnt_" + id).html(data.text);
			$("#msg_cnt_" + id).replaceWith('<div id="msg_cnt_' + id + '">' + data.text + '</div>');
		}
		else{
			errHandler(data);
		}
	}
	});
};

function addPost() {
	var formData = $("#add-post-form").serialize();
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("p.error").hide();
			$("#dialog").dialog('close');
			window.location = clearURL();
		}
		else{
			errHandler(data, true);
		}
	}
	});
};

function editPost(id) {
	var formData = $("#edit-post-form").serialize();
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			getPost(id);
			$("#dialog").dialog('close');
		}
		else{
			errHandler(data, true);
		}
	}
	});
};

function removePost(id) {
	var formData = 'postID=' + id + '&action=remove_post';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("#tbl_" + id).remove();
		}
		else{
			errHandler(data);
		}
	}
	});
};

function addComment() {
	var formData = $("#commentForm").serialize();
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			var html = '<table id="comment_' + data.id + '" style="width:100%; margin-bottom:20px" cellpadding="8" cellspacing="0" border="0"><tr style="background-color: #F0F8F0"><td align="left" style="padding:5px; font-weight:bold"><a href="/person/' + data.auth + '/">' + data.fullName + '</a>&nbsp;<a style="color:#ccc;" href="' + blogURL + '?id=' + data.post_id + '#comment_' + data.id + '" title="Ссылка на комментарий">&para;</a></td><td align="right" style="padding:5px">' + dateFormat(data.date_pub) + '</td></tr><tr><td colspan="2" style="background-color: #EEFFEE; padding: 10px; border-top:1px solid #AAAAAA">' + data.text + '<p style="float:right;"><i class="removeComment" id="' + data.id + '">Удалить</i></p></td></tr></table>';
			$(".comment:last").after(html);
			$("form")[0].reset();
		}
		else{
			errHandler(data);
		}
	}
	});
};

function removeComment(id) {
	var formData = 'commentID=' + id + '&action=remove_comment';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("#comment_" + id).remove();
		}
		else{
			errHandler(data);
		}
	}
	});
};

function getCat(title){
	var formData = 'title=' + title + '&action=get_category';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$(".catp:last").after('<p class="catp" id="cat_' + data.id + '"><a href="' + blogURL + '?cat=' + data.id + '" class="cat">' + data.title + '</a><img border=0 class="editCat" id="' + data.id + '" src="' + static + 'img/edit.png">&nbsp;<img border=0 class="removeCat" id="' + data.id + '" src="' + static + 'img/editdelete.png"><br></p>');
		}
		else{
			errHandler(data);
		}
	}
	});
}

function addCat(title) {
	var formData = 'title=' + title + '&action=add_category';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			getCat(title);
		}
		else{
			errHandler(data);
		}
	}
	});
};

function editCat(id, title) {
	var formData = 'title=' + title + '&categoryID=' + id + '&action=edit_category';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("#cat_" + id + ' > a').text(title);
		}
		else{
			errHandler(data);
		}
	}
	});
};

function removeCat(id) {
	var formData = 'categoryID=' + id + '&action=remove_category';
	$.ajax({
	data: formData,
	success: function(data, textStatus){
		$('#err').fadeOut('fast');
		if(data.status == 0){
			$("#cat_" + id).remove();
		}
		else{
			errHandler(data);
		}
	}
	});
};

/**
 * jQuery init
 */

$(function(){
    $("body").append('<div id="dialog"></div>');
    $("body").append('<div id="fdialog"></div>');
    $("#dialog").dialog({
        bgiframe: true,
        autoOpen: false,
        height: 650,
        width: 800,
        closeOnEscape: false,
        close: function(){
			$(this).empty();
		},
        modal: true,
        buttons: {
		'Отправить': function(){
			var action = $("#act").val();
			if(action == 'edit_post'){
				var id = $("#postID").val();
				editPost(id);
			}
			else{
				addPost();
			}
                },
		'Закрыть': function(){
			$(this).dialog('close');
		}
        }
    });
    $("#fdialog").dialog({
        bgiframe: true,
	resizable: false,
        autoOpen: false,
        height: 70,
        width: 550,
	close: function(){
			$(this).empty();
		},
        modal: true,
        buttons: {
		'OK': function(){
			var t = $("#urlType").val();
			writeURL(t);
			$(this).dialog('close');
                },
		'Закрыть': function(){
			$(this).dialog('close');
		}
        }
    });
});

$(document).ready(function(){
	$("body").append('<div id="err" title="Дважды щелкните мышкой, чтобы скрыть сообщение"></div>');
	$("#err").live('dblclick', function(){$(this).fadeOut().empty();});
	$(".addPost").live('click', function(){createPostForm();});
	$(".editPost").click(function(){var id = $(this).attr("id");getRawPost(id);});
	$(".removePost").click(function(){var id = $(this).attr("id");var title = $("#msg_" + id).text();if(confirm("Вы уверены, что хотите удалить пост '" + title + "'?\nЭта операция не может быть отменена!")){removePost(id);}});
	$("#addComment").live('click', function(){addComment();});
	$(".removeComment").live('click', function(){var id = $(this).attr("id");if(confirm("Вы уверены, что хотите удалить комментарий?\nЭта операция не может быть отменена!")){removeComment(id);}});
	$(".addCat").click(function(){var title = prompt("Название рубрики", "");if(title){addCat(title);}});
	$(".editCat").live('click', function(){var id = $(this).attr("id");var title = prompt("Название рубрики", $("#cat_" + id + " > a").text());if(title){editCat(id, title);};});
	$(".removeCat").live('click', function(){var id = $(this).attr("id");if(confirm("Вы уверены, что хотите удалить рубрику?\nЭта операция не может быть отменена!")){removeCat(id);}});
	$("#select").change(function(){type = $(this).attr();});
});