/**
 * マイページ向けJavaScript
 * charset UTF-8
 */

/**
 * お気に入りへの追加 Submit
 *
 * @param frm form
 */
function onsubmit_MyPageAddFavorite(frm)
{
	var target = frm.elements['target'].value;
	var id = frm.elements[target + '_id'].value;
	var favoriteGroupId = frm.elements['favorite_group'].value;
	var favoriteGroupName = '';
	
	// グループ未選択
	if ('' == favoriteGroupId)
	{
		alert('登録するグループを選択してください。');
		return true;
	}
	
	// 新しくグループを作る
	if ('__NEW__' == favoriteGroupId)
	{
		favoriteGroupName = prompt('新しいグループ名を入力してください。', '');
		
		if (null != favoriteGroupName)
			favoriteGroupName = favoriteGroupName.replace(/^[ ]+|[ ]+$/g, '');
		
		if (null == favoriteGroupName || '' == favoriteGroupName)
		{
			alert('グループ名を指定してください。');
			return true;
		}
	}
	
	// 登録要求を送信
	MyPage_addFavorite(frm.action, target, id, favoriteGroupId, favoriteGroupName);
	
	return true;
}

/**
 * お気に入りに追加
 */
function MyPage_addFavorite(url, target, id, favoriteGroupId, favoriteGroupName)
{
	var xmlHttpRequest = MyPage_createXMLHttpRequest(null);
	
	// 読み込み完了時の処理
	xmlHttpRequest.onreadystatechange = function () { MyPage_onreadystatechangeAddFavorite(xmlHttpRequest); };
	
	// URL指定
	urlWithData = url;
	if (-1 == urlWithData.indexOf('?'))
		urlWithData+= '?';
	else
		urlWithData+= '&';
	urlWithData+= 'target=' + target + '&id=' + id + '&group_id=' + favoriteGroupId + '&group_name=' + encodeURI(favoriteGroupName);
	
	xmlHttpRequest.open('GET', urlWithData, true);
	
	// 通信
	xmlHttpRequest.send(null);
}

/**
 * お気に入り追加処理コールバック
 *
 * @param xmlHttpRequest XMLHttpRequestインスタンス
 */
function MyPage_onreadystatechangeAddFavorite(xmlHttpRequest)
{
	if (4 != xmlHttpRequest.readyState || 200 != xmlHttpRequest.status)
		return;
	
	//alert(xmlHttpRequest.responseText);
	var ret = eval('(' + xmlHttpRequest.responseText + ')');
	
	if ('object' == typeof(ret))
	{
		// エラー処理
		//alert('code: ' + ret.code + "\n\n" + ret.msg);
		alert(ret.msg);
		return;
	}
	
	alert('お気に入りに登録しました。');
}

/**
 * クチコミに評価を追加する
 *
 * @param url URL
 * @param userWordOfMonthId クチコミID
 */
function MyPage_addUserWordOfMonthEvaluation(url, userWordOfMouthId)
{
	var xmlHttpRequest = MyPage_createXMLHttpRequest(null);
	
	// 読み込み完了時の処理
	xmlHttpRequest.onreadystatechange = function () { MyPage_onreadystatechangeAddUserWordOfMonthEvaluation(xmlHttpRequest); };
	
	// URL指定
	urlWithData = url;
	if (-1 == urlWithData.indexOf('?'))
		urlWithData+= '?';
	else
		urlWithData+= '&';
	urlWithData+= 'user_wom_id=' + userWordOfMouthId;
	
	xmlHttpRequest.open('GET', urlWithData, true);
	
	// 通信
	xmlHttpRequest.send(null);
}

/**
 * クチコミ評価用処理コールバック
 *
 * @param xmlHttpRequest XMLHttpRequestインスタンス
 */
function MyPage_onreadystatechangeAddUserWordOfMonthEvaluation(xmlHttpRequest)
{
	if (4 != xmlHttpRequest.readyState || 200 != xmlHttpRequest.status)
		return;
	
	//alert(xmlHttpRequest.responseText);
	var ret = eval('(' + xmlHttpRequest.responseText + ')');
	
	if ('object' == typeof(ret))
	{
		// エラー処理
		//alert('code: ' + ret.code + "\n\n" + ret.msg);
		alert(ret.msg);
		return;
	}
	
	alert('評価しました。');
}

/**
 * 対象のクチコミページを読み込む
 *
 * @param url URL
 * @param target spot or event or course
 * @param targetId spotId or eventId or courseId
 * @param pageId ページID
 * @param pageInWOMId 指定されたIDが含まれるページを表示
 * @param elementId HTMLを展開する要素ID
 *
 * @note
 * pageIdとpageInWOMId両方が指定された場合、pageInWOMIdが優先される
 */
function MyPage_loadTargetUserWordOfMouth(url, target, targetId, pageId, pageInWOMId, elementId)
{
	var xmlHttpRequest = MyPage_createXMLHttpRequest(null);
	
	// 読み込み完了時の処理
	xmlHttpRequest.onreadystatechange = function () { MyPage_onreadystatechangeLoadTargetUserWordOfMouth(xmlHttpRequest, elementId); };
	
	// URL指定
	urlWithData = url;
	if (-1 == urlWithData.indexOf('?'))
		urlWithData+= '?';
	else
		urlWithData+= '&';
	var dt = new Date();
	urlWithData+= 'target=' + target + '&target_id=' + targetId;
	if (0 < pageInWOMId)
		urlWithData+= '&page_in_id=' + pageInWOMId;
	else
		urlWithData+= '&page_id=' + pageId;
	urlWithData+= '&sec=' + dt.getTime();
	
	xmlHttpRequest.open('GET', urlWithData, true);
	
	// Loading要素
	var elemLoading = document.getElementById(elementId + '_loading');
	if (elemLoading)
		elemLoading.style.display = 'block';
	
	// 通信
	xmlHttpRequest.send(null);
}

/**
 * 対象のクチコミページ読み込み用コールバック
 *
 * @param xmlHttpRequest XMLHttpRequestインスタンス
 * @param elementId HTMLを展開する要素ID
 */
function MyPage_onreadystatechangeLoadTargetUserWordOfMouth(xmlHttpRequest, elementId)
{
	if (4 != xmlHttpRequest.readyState || 200 != xmlHttpRequest.status)
		return;
	
	var elem = document.getElementById(elementId);
	
	//alert(xmlHttpRequest.responseText);
	elem.innerHTML = xmlHttpRequest.responseText;
	
	// Loading要素
	var elemLoading = document.getElementById(elementId + '_loading');
	if (elemLoading)
		elemLoading.style.display = 'none';
}

/**
 * XMLHttpRequestのインスタンスを作成
 *
 * @param callback onreadystatechangeイベントのコールバック先
 * @return XMLHttpRequestのインスタンス
 */
function MyPage_createXMLHttpRequest(callback)
{
	var xmlHttpRequest = null;
	
	// XMLHttpRequestを作る
	try
	{
		// mozilla
		xmlHttpRequest = new XMLHttpRequest();
	}
	catch (e)
	{
		// Microsoft
		try
		{
			xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e)
		{
			try
			{
				xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch (e)
			{
				xmlHttpRequest = null;
			}
		}
	}
	
	// インスタンスを作れたらコールバックを関連づけ
	if (xmlHttpRequest && callback)
		xmlHttpRequest.onreadystatechange = callback;
	
	return xmlHttpRequest;
}