/*
	resumeFormClass
	работает по принципу статического класса:
	для работы требует создания одного объекта
*/
var habraMailClass = function(){
	habraMailClass.superClass.apply(this, arguments);

	this.ajaxUrls = {
		send: (window.baseURL || '') + "/ajax/messages/add/",
		preview: (window.baseURL || '') + "/ajax/messages/preview/",
		del: "/ajax/messages/delete/"
	};
	
	this.xmlResponse = {
		redirect: {
			node: 'redirect',
			handler: 'xmlResponseHandler_redirect'
		},
		preview: {
			node: 'preview',
			handler: 'xmlResponseHandler_preview'
		},
		error: {
			node: 'error',
			handler: 'xmlResponseHandler_error'
		}
	};
	
	// Используемые в форме classNames
	this.classNames = {
		fieldHolder: 'js-field-holder', // контейнер-родитель поля формы и ошибки
		fieldData: 'js-field-data', // поле формы, которое нужно сериализовать
		fieldErrorMsgBox: 'js-field-error-msg', // контейнер для вывода сообщения об ошибке
		fieldMarkedError: 'js-marked-error', // помечаем контейнер, если в поле - ошибка
		fieldMarkedChecked: 'js-marked-checked', // помечаем контейнер, если поле прошло проверку
		fieldIsRequired: 'js-required', // поле, обязательное для заполнения 
		fieldPass_1: 'js-pass-field-main', // поле с основным паролем
		fieldPass_2: 'js-pass-field-repeat', // поле с повтором пароля
		isLoading: 'loading', // прелоадер
		unknownErrorHolder: 'js-unknown-error-holder', // держатель вывода неопознанной ошибки
		unknownErrorMsg: 'js-unknown-error-msg', // само поле неопознанной ошибки
		previewHolder: 'js-message-preview' // контейнер-родитель поля предпросмотра
	};

}

habraMailClass.inheritsFrom(ajaxFormClass);




Object.extendObject (
	habraMailClass.prototype, {
	
	setRecipients: function() {
		var recipients = $('wrapper').getElements('a.recipients');
		if(recipients && recipients.length && $('to')) {
			for(var i=0, length=recipients.length; i<length; i++) {
				recipients[i].onclick = function() {
					var to = '';
					$('to').value == '' ? to = '' : to = $('to').value + ', ';
					to += this.innerHTML;
					$('to').value = to;
				}
			}
		}
	},
	preview: function() {
		_this = this;
		if($('preview')) {
			$('preview').onclick = function(e) {
				var targ;
				if (!e) var e = window.event;
				if (e.target) targ = e.target;
				else if (e.srcElement) targ = e.srcElement;
				if (targ.nodeType == 3) // defeat Safari bug
					targ = targ.parentNode;
				
				var form = targ.form;
				var holders = $(form).getElements('.' + _this.classNames.fieldHolder);
				for(var i =0, length = holders.length; i<length; i++) {
					$(holders[i]).removeClass(_this.classNames.fieldMarkedError);
				}
				var errors = $(form).getElements('.' + _this.classNames.fieldErrorMsgBox);
				for(var k =0, length = errors.length; k<length; k++) {
					errors[k].innerHTML = '';
				}
				tm.log(_this);
				tm.log(form);
				_this.sendData(form, 'preview');
			}
		}
	},
	send: function() {
		_this = this;
		if($('send_msg')) {
			$('send_msg').onclick = function(e) {

				var targ;
				if (!e) var e = window.event;
				if (e.target) targ = e.target;
				else if (e.srcElement) targ = e.srcElement;
				if (targ.nodeType == 3) // defeat Safari bug
					targ = targ.parentNode;
				
				var form = targ.form;
				var holders = $(form).getElements('.' + _this.classNames.fieldHolder);
				for(var i =0, length = holders.length; i<length; i++) {
					$(holders[i]).removeClass(_this.classNames.fieldMarkedError);
				}
				var errors = $(form).getElements('.' + _this.classNames.fieldErrorMsgBox);
				for(var k =0, length = errors.length; k<length; k++) {
					errors[k].innerHTML = '';
				}
				_this.sendData(form, 'send');	
			}
		}
	},
	// обработчик ответа сервера при предпросмотре
	xmlResponseHandler_preview: function(xmlNodes, params){
		if(xmlNodes.preview && xmlNodes.preview.length) {
			var previewHolder = $('wrapper').getElement('.' + this.classNames.previewHolder);
			previewHolder.innerHTML = xmlNodes.preview[0].firstChild.data;
			$(params.form).removeClass(params.loadingClassName);
		}
	},
	// Обработчик ответа сервера при получении ошибки
	xmlResponseHandler_error: function(xmlNodes, params){
		if(xmlNodes.error && xmlNodes.error.length) {
			$(params.form).removeClass(params.loadingClassName);

			for (var i=0; i<xmlNodes.error.length; i++){
				var errorHolder = $('wrapper').getElement('.js-field-error-msg');
				var errorMessage = xmlNodes.error[i].firstChild ? xmlNodes.error[i].firstChild.data : this.errorMessages.unknownError;
			}
			
			if (errorHolder) {
				errorHolder.innerHTML = errorMessage;
			}

		}
	},
	
	checkAllForDelete : function(checkbox) {
		if ($('js-form-mailList')) {
			var checkboxes = $('js-form-mailList').getElements('.js-field-delete-mail-checkbox'); 
			if (checkbox.checked == true) {
				for (var i = 0, length = checkboxes.length; i < length; i++) {
					checkboxes[i].checked = true;

				}
			} else {
				for (var i = 0, length = checkboxes.length; i < length; i++) {
					checkboxes[i].checked = false;
				}
			}
		}
		
	}
});

var habraMail = new habraMailClass();
tm.init.add(function(){
	habraMail.setRecipients();
	habraMail.send();
	habraMail.preview();
})




