/*
 * Mail
 *
 * Copyright: (c) 2009 九州旅客鉄道株式会社
 *
 * Depends Script:
 *	js/jQuery/jquery.js (1.3.2)
 *	js/dialog.js
 */

var mail = {
	jQuery: $,

	settings: {
	},

	selectors: {
		ml_fname: 'mail-form',
		ml_fname_receiver: 'receiver',
		ml_fname_sender: 'sender',
		ml_fname_message: 'message',
		ml_container: 'mail-container',
		ml_items: 'mail-form-items',
		ml_receiver_error: 'mail-receiver-error',
		ml_sender_error: 'mail-sender-error',
		ml_message_error: 'mail-message-error',
		ml_button: 'mail-button',
		ml_send: 'mail-send',
		ml_cancel: 'mail-cancel',
		mail_thanks: 'mail-thanks',
		ml_ok: 'mail-ok'
	},

/* objects~ */
	_path: false,
	_action: false,
	_msie: false,
/* ~objects */

/* action~ */
	init: function(path) {
		this._path = path;
		if (this.jQuery.browser.msie) this._msie = true;
		this.enableAction();
	},

	set: function(mode, message, callback) {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		if (mail._action) {
			var html = '<div id="' + selectors.ml_container + '">'
						+ '<form action="javascript:mail.send(\'' + mode + '\');" id="' + selectors.ml_fname + '" name="' + selectors.ml_fname + '">'
							+ '<div id="' + selectors.ml_items + '">'
								+ '<div class="mail-form-header clearfix">'
									+ '<div class="mail-form-receiver">'
										+ '<p class="key mtxt2j">'
											+ '宛先'
											+ '<span id="' + selectors.ml_receiver_error + '" class="error mtxt1j"></span>'
										+ '</p>'
										+ '<p class="val">'
											+ '<input type="text" name="' + selectors.ml_fname_receiver + '" value="" maxlength="200" />'
										+ '</p>'
									+ '</div>'
									+ '<div class="mail-form-sender">'
										+ '<p class="key mtxt2j">'
											+ '差出人'
											+ '<span id="' + selectors.ml_sender_error + '" class="error mtxt1j"></span>'
										+ '</p>'
										+ '<p class="val">'
											+ '<input type="text" name="' + selectors.ml_fname_sender + '" value="" maxlength="200" />'
										+ '</p>'
									+ '</div>'
								+ '</div>'
								+ '<div class="mail-form-message">'
									+ '<p class="key mtxt2j">'
										+ 'メッセージ'
										+ '<span id="' + selectors.ml_message_error + '" class="error mtxt1j"></span>'
									+ '</p>'
									+ '<p class="val">'
										+ '<textarea name="' + selectors.ml_fname_message + '" rows="8">' + message + '</textarea>'
									+ '</p>'
								+ '</div>'
							+ '</div>'
							+ '<div id="' + selectors.ml_button + '">'
								+ '<input type="submit" value="送信" id="' + selectors.ml_send + '" />'
								+ '<input type="button" value="キャンセル" id="' + selectors.ml_cancel + '" />'
							+ '</div>'
						+ '</form>'
					+ '</div>';
			dialog.html('この情報を送る', html, function(r) {
				if (r) {
					mail.enableAction();
					if ($.isFunction(callback)) callback();
				}
			});
			var $ml_cancel = $('#' + selectors.ml_cancel);
			$ml_cancel.click(function() {
				dialog.remove(function() {
					mail.enableAction();
					if ($.isFunction(callback)) callback();
				});
			});
		}
	},

	send: function(mode) {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		if (mail._action) {
			mail.disableAction();
			var $ml_fname = $('#' + selectors.ml_fname),
				timeout = 60000,
				uri = mail._path + 'mail/send.php?mode=' + mode,
				data = $ml_fname.serialize(),
				send_flg = false;
			$.ajax({
				cache: false,
				data: data,
				dataType: 'script',
				timeout: timeout,
				type: 'POST',
				url: uri,
				dataFilter: function(d) {
					try {
						eval(d);
						if (send_flg) {
							mail.sendDisplay();
						} else {
							mail.errorDisplay(error);
							mail.enableAction();
						}
					} catch(e) {
						mail.enableAction();
					}
				},
				error: function() {
					mail.enableAction();
				}
			});
		}
	},
/* ~action */

	enableAction: function() {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		mail._action = true;
	},

	disableAction: function() {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		mail._action = false;
	},

	sendDisplay: function() {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		var $ml_container = $('#' + selectors.ml_container),
			$ml_items = $('#' + selectors.ml_items),
			$ml_send = $('#' + selectors.ml_send),
			$ml_cancel = $('#' + selectors.ml_cancel),
			html = '<div class="' + selectors.mail_thanks + '">'
					+ '<p class="txt2j">送信完了しました。</p>'
				+ '</div>';
		$ml_container.animate(
			{opacity: 0},
			200,
			'swing',
			function() {
				$ml_send.remove();
				$ml_cancel.val(' O K ');
				$ml_items.html(html);
				if (mail._msie) $('#' + selectors.ml_items + ' > *').css({opacity: 1});
				$ml_container.animate(
					{opacity: 1},
					400,
					'swing'
				);
			}
		);
	},

	errorDisplay: function(error) {
		var mail = this,
			$ = this.jQuery,
			settings = this.settings,
			selectors = this.selectors;

		var $ml_fname_receiver = $('input[name=' + selectors.ml_fname_receiver + ']', '#' + selectors.ml_fname),
			$ml_receiver_error = $('#' + selectors.ml_receiver_error);
		if (error[selectors.ml_fname_receiver]) {
			$ml_fname_receiver.addClass('error');
			$ml_receiver_error.html(error[selectors.ml_fname_receiver]);
		} else {
			$ml_fname_receiver.removeClass('error');
			$ml_receiver_error.empty();
		}
		var $ml_fname_sender = $('input[name=' + selectors.ml_fname_sender + ']', '#' + selectors.ml_fname),
			$ml_sender_error = $('#' + selectors.ml_sender_error);
		if (error[selectors.ml_fname_sender]) {
			$ml_fname_sender.addClass('error');
			$ml_sender_error.html(error[selectors.ml_fname_sender]);
		} else {
			$ml_fname_sender.removeClass('error');
			$ml_sender_error.empty();
		}
		var $ml_fname_message = $('textarea[name=' + selectors.ml_fname_message + ']', '#' + selectors.ml_fname),
			$ml_message_error = $('#' + selectors.ml_message_error);
		if (error[selectors.ml_fname_message]) {
			$ml_fname_message.addClass('error');
			$ml_message_error.html(error[selectors.ml_fname_message]);
		} else {
			$ml_fname_message.removeClass('error');
			$ml_message_error.empty();
		}
	}
}
