/**
 * 「お友達に教える」メール送信
 */
$(function() {

	var tipsInput	= $("#validateTipsInput");
	var tipsConfirem= $("#validateTipsConfirem");

	var fromName	= $("#fromName");
	var fromAddress	= $("#fromAddress");
	var toName		= $("#toName");
	var toAddress	= $("#toAddress");
	var emailBody	= $("#emailBody");
	var goodsName	= $("#goodsGroupNamePC");
	var senderFlg	= $("#senderFlg");
	var ggcd		= $("#ggcd");

	/**
	 * 「友達に教える」ボタン押下
	 * 入力ダイアログ開く
	 */
	$('#teaches-to-friend')
		.click(function() {
			$('#inputDialog').dialog('open');
		})
		.hover(
			function(){
				$(this).addClass("");
			},
			function(){
				$(this).removeClass("");
			}
		)
		.mousedown(
			function(){
				$(this).addClass("");
			}
		)
		.mouseup(
			function(){
				$(this).removeClass("");
			}
		)
		.css("cursor", "pointer");

	/**
	 *******************************************************
	 ** 入力ダイアログ
	 ** オプション設定 ※参照 -> http://ectech.seesaa.net/article/130396042.html
	 *******************************************************
	 */
	$("#inputDialog").dialog({
		bgiframe	: true,
		autoOpen	: false,
		height		: 'auto',
		width		: 698,
		modal		: true,
		draggable	: true,
		closeText	: '',
		close		: false,
		resizable	: false,
		position	: ['center',50]
	});

	/**
	 * 入力ダイアログ 「close」ボタン押下
	 */
	$('#close_input')
	.click(function() {
		formClear();
		validateTipsClear();
		$('#inputDialog').dialog('close');
	})

	/**
	 * 「確認へ」ボタン押下
	 * 確認ダイアログ開く
	 */
	$('#confirm')
		.click(function() {
			checkParamButton();
			$("#fromNameLabel").text(fromName.val());
			$("#fromAddressLabel").text(fromAddress.val());
			$("#toNameLabel").text(toName.val());
			$("#toAddressLabel").text(toAddress.val());
			$("#emailBodyLabel").html(emailBody.val().split("<").join("&lt;").split(">").join("&gt;")
													 .split("\r\n").join("<br>").split("\r").join("<br>").split("\n").join("<br>"));

		})
	.hover(
			function(){
				$(this).addClass("");
			},
			function(){
				$(this).removeClass("");
			}
		)
		.mousedown(
			function(){
				$(this).addClass("");
			}
		)
		.mouseup(
			function(){
				$(this).removeClass("");
			}
		)
		.css("cursor", "pointer");

	/**
	 *******************************************************
	 * 確認ダイアログ
	 *******************************************************
	 */
	$("#confirmDialog").dialog({
		bgiframe	: true,
		autoOpen	: false,
		height		: 'auto',
		width		: 698,
		modal		: true,
		draggable	: true,
		closeText	: '',
		close		: false,
		resizable	: false,
		position	: ['center',50]
	});

	/**
	 * 確認ダイアログ 「キャンセル」ボタン押下
	 */
	$('#cancell_confirm')
	.click(function() {
		$('#confirmDialog').dialog('close');
		$('#inputDialog').dialog('open');
	})

	/**
	 * 確認ダイアログ 「close」ボタン押下
	 */
	$('#close_confirm')
	.click(function() {
		formClear();
		validateTipsClear();
		$('#confirmDialog').dialog('close');
	})

	/**
	 * 確認ダイアログ「送信する」ボタン押下
	 * 完了ダイアログ開く
	 */
	$('#send')
	.click(function() {
		sendButton();
	})

	/**
	 *******************************************************
	 * 完了ダイアログ
	 *******************************************************
	 */
	$("#completeDialog").dialog({
		bgiframe	: true,
		autoOpen	: false,
		height		: 'auto',
		width		: 698,
		modal		: true,
		draggable	: true,
		buttons		: false,
		closeText	: '',
		close		: false,
		resizable	: false,
		position	: ['center',50]
	});

	/**
	 * 完了ダイアログ 「close」ボタン押下
	 */
	$('#close_complete')
	.click(function() {
		formClear();
		validateTipsClear();
		$('#completeDialog').dialog('close');
	})

	/**
	 *******************************************************
	 * 以下、共通関数
	 *******************************************************
	 */

	/**
	 * フォームを初期化します。
	 */
	function formClear() {
		fromName	.val('');
		fromAddress	.val('');
		toName		.val('');
		toAddress	.val('');
		emailBody	.val('');
	}

	/**
	 * エラーメッセージを初期化します
	 */
	function validateTipsClear(){
		tipsInput.html('');
		tipsConfirem.html('');
	}

	/**
	 * エラーメッセージを設定します。
	 */
	function updateTipsInput(t) {
		tipsInput.html(t).effect("highlight",{},1500);
	}

	/**
	 * エラーメッセージを設定します。
	 */
	function updateTipsConfirem(t) {
		tipsConfirem.html(t).effect("highlight",{},1500);
	}

	/**
	 * 「確認する」時のコールバック関数
	 * @param response String サーバーからのレスポンス
	 *
	 */
	function ajaxSendMail_paramCheck(response) {
		if (response) {
			updateTipsInput(response);
		} else {
			$("#confirmDialog").dialog('open');
			$('#inputDialog').dialog('close');
			validateTipsClear();
		}
	}

	/**
	 * 「送信する」時のコールバック関数
	 * @param response String サーバーからのレスポンス
	 *
	 */
	function ajaxSendMail_ajaxSendMail(response) {
		if (response) {
			updateTipsConfirem(response);
		} else {
			$("#completeDialog").dialog('open');
			$("#confirmDialog").dialog('close');
			validateTipsClear();
		}
	}

	/**
	 * 活性中のボタンオブジェクト
	 * 「確認する」ボタン押下時に呼び出されます。
	 */
	var checkParamButton = function() {
		// 文字化け回避のためURLエンコード
		var fromNameValue		= encodeURIComponent(fromName.val());
		var fromAddressValue	= encodeURIComponent(fromAddress.val());
		var toNameValue			= encodeURIComponent(toName.val());
		var toAddressValue		= encodeURIComponent(toAddress.val());
		var emailBodyValue		= encodeURIComponent(emailBody.val());
		var goodsNameValue		= encodeURIComponent(goodsName.html());
		var ggcdValue			= encodeURIComponent(ggcd.val());

		// メール送信
		var ajax = Kumu.Ajax.getS2AjaxComponent();
	
		// コール対象クラス(component)とメソッドに分割
		var components = Kumu.Ajax._getComponentName(ajaxSendMail_paramCheck);
	
		/*
		 * URLエンコードしたパラメータと
		 * コール対象クラス(component)のプロパティ名をバインド
		 */
		var param = {"fromName"		: fromNameValue
					,"fromAddress"	: fromAddressValue
					,"toName"		: toNameValue
					,"toAddress"	: toAddressValue
					,"emailBody"	: emailBodyValue
					,"ggcd"			: ggcdValue
					,"goodsName"	: goodsNameValue
					};
		ajax.params = Kumu.Ajax._clone(param);
	
		/*
		 * コール対象クラス(component)のプロパティとバインドさせるため連想配列でパラメータを格納
		 * 「"AjaxParam" + new String(i)」は、AjaxServletでパラメータを取得する際必要なので固定
		 */
		if(param instanceof Array){
		  for(var i = 0; i < param.length; i++){
			ajax.params["AjaxParam" + new String(i)] = param[i];
		  }
		}
	
		if(!("component" in param) && !("action" in param) && (components.length == 2) ){
			// コール対象クラス(component)とメソッドをバインド
			ajax.params["component"] = components[0];
			ajax.params["action"] = components[1];
		}
	
		// POSTで送信
		ajax.params.method = 'POST';
	
		// コールバック関数を設定
		ajax.doAction = ajaxSendMail_paramCheck;
	
		// 送信
		Kumu.Ajax.executeAjax(ajax);
	}

	/**
	 * 活性中のボタンオブジェクト
	 * 「送信する」ボタン押下時に呼び出されます。
	 */
	var sendButton = function() {
		// 文字化け回避のためURLエンコード
		var fromNameValue		= encodeURIComponent(fromName.val());
		var fromAddressValue	= encodeURIComponent(fromAddress.val());
		var toNameValue			= encodeURIComponent(toName.val());
		var toAddressValue		= encodeURIComponent(toAddress.val());
		var emailBodyValue		= encodeURIComponent(emailBody.val());
		var goodsNameValue		= encodeURIComponent(goodsName.html());
		var senderFlgValue		= encodeURIComponent(senderFlg.val());
		var ggcdValue			= encodeURIComponent(ggcd.val());
	
		// メール送信
		var ajax = Kumu.Ajax.getS2AjaxComponent();
	
		// コール対象クラス(component)とメソッドに分割
		var components = Kumu.Ajax._getComponentName(ajaxSendMail_ajaxSendMail);
	
		/*
		 * URLエンコードしたパラメータと
		 * コール対象クラス(component)のプロパティ名をバインド
		 */
		var param = {"fromName"		: fromNameValue
					,"fromAddress"	: fromAddressValue
					,"toName"		: toNameValue
					,"toAddress"	: toAddressValue
					,"emailBody"	: emailBodyValue
					,"goodsName"	: goodsNameValue
					,"fromSendFlg"	: senderFlgValue
					,"ggcd"			: ggcdValue
					};
		ajax.params = Kumu.Ajax._clone(param);
	
		/*
		 * コール対象クラス(component)のプロパティとバインドさせるため連想配列でパラメータを格納
		 * 「"AjaxParam" + new String(i)」は、AjaxServletでパラメータを取得する際必要なので固定
		 */
		if(param instanceof Array){
		  for(var i = 0; i < param.length; i++){
			ajax.params["AjaxParam" + new String(i)] = param[i];
		  }
		}
	
		if(!("component" in param) && !("action" in param) && (components.length == 2) ){
			// コール対象クラス(component)とメソッドをバインド
			ajax.params["component"] = components[0];
			ajax.params["action"] = components[1];
		}
	
		// POSTで送信
		ajax.params.method = 'POST';
	
		// コールバック関数を設定
		ajax.doAction = ajaxSendMail_ajaxSendMail;
	
		// 送信
		Kumu.Ajax.executeAjax(ajax);
	}
});

