window.feedback = (function() {
	"use strict";
	
	var html = '<div id="feedback-dialog"><div id="feedback-feedback-error"></div>\
			<label for="feedback-name">Ваше имя: <div class="error" id="feedback-name-error"></div></label>\
			<div><input id="feedback-name"/></div>\
			<label for="feedback-email">E-mail:<div class="error" id="feedback-email-error"></div></label>\
			<div><input id="feedback-email"/></div>\
			<label for="feedback-message">Сообщение:<div class="error" id="feedback-message-error"></div></label>\
			<textarea id="feedback-message"></textarea></div>';
	var completeHtml = '<div id="feedback-complete-dialog">Ваше сообщение отправлено. Мы ответим Вам в ближайшее время.</div>';
	var waitHtml = '<div id="feedback-wait-dialog">Идет отправка сообщения…</div>';
	
	
	function cleanErrors() {
		$('#feedback-name-error').text('').hide();
		$('#feedback-email-error').text('').hide();
		$('#feedback-message-error').text('').hide();
		$('#feedback-feedback-error').text('').hide();
	}
	

	function showError(type, message) {
		var el = $('#feedback-' + type + '-error');
		if (el.length)
			el.text(message).show();
	}
	
	
	function open(error) {
		var dialog = uui.dialog({
			width: '400px',
			title: 'Задать вопрос',
			name: 'feedback',
			content: html,
			buttons: [
				{title: 'Отправить вопрос', action: function() {send();}},
				{title: 'Закрыть', action: 'close' }
			]
		});

		cleanErrors();
		if (arguments.length > 0)
			showError('feedback', error);

		dialog.open();
		
		if ($('#feedback-name').val() == '' && $.cookie('userName') != '')
			$('#feedback-name').val($.cookie('userName'));
		if ($('#feedback-email').val() == '' && $.cookie('userEmail') != '')
			$('#feedback-email').val($.cookie('userEmail'));

		if ($('#feedback-name').val() == '')
			$('#feedback-name').focus();
		else if ($('#feedback-email').val() == '')
			$('#feedback-email').focus();
		else
			$('#feedback-message').focus();
	}
	
	
	function send() {
		cleanErrors();
		var error = '';
		
		var name = $.trim($('#feedback-name').val());
		if (name == '') {
			showError('name', 'Представьтесь, пожалуйста');
			error = 'name';
		}
		
		var email = $.trim($('#feedback-email').val());
		if (email == '') {
			showError('email', 'На этот адрес мы пришлем ответ');
			if (error == '')
				error = 'email';				
		}
		else if (!String(email).match(window.emailRegexp)) {
			showError('email', 'E-mail введен неверно');
			if (error == '')
				error = 'email';
		}
		
		var msg = $.trim($('#feedback-message').val());
		if (msg == '') {
			showError('message', 'Вы забыли написать сообщение');
			if (error == '')
				error = 'message';
		}
		
		if (error != '') {
			$('#feedback-' + error).focus();
			return;
		}
		
		uui.getDialog('feedback').close();
		
		// wait dialog
		uui.dialog({
			width: '300px',
			title: 'Отправка сообщения',
			name: 'feedback-wait',
			content: waitHtml
		}).open();
		
		$.cookie('userName', name, {path: '/'});
		$.cookie('userEmail', email, {path: '/'});
		
		$.post('/rpc.php', {action: 'feedback', name: name, email: email, message: msg, url: String(window.location)}, function(answer) {sendCallback(answer)}, 'text');
	}


	function sendCallback(answer) {
		uui.getDialog('feedback-wait').close();
		
		answer = eval(answer);
		if (typeof(answer) == 'object' && answer.state == 'ok') {
			uui.dialog({
				width: '300px',
				title: 'Сообщение отправлено',
				name: 'feedback-complete',
				content: completeHtml
			}).open();

			$('#feedback-message').val('');
		}
		else
			open('Не удалось отправить сообщение, попробуйте позже');
	}


	return {
		open: function() {
			open();
		}
	}
	
}());
