/**
 * FrameWork "Tama"
 * JavaScript(要prototype.js)
 * 
 * フォーム関係スクリプト
 * 
 * $Id: $
 */


//グローバル変数
var fSubmitSent = false;
var fFishVlaues = new Array();	//入力された魚名
var fFishNames = new Array();	//魚名フォーム
var fishTables = new Array();	//魚名テーブル
var fFishNameInputed = new Array();

//onLoad時のイベント
Event.observe(window, 'load', function(){
	//セレクトボックス(県)の監視(釣り場取得)
	if ($("f_pref")) {
		new Form.Element.EventObserver("f_pref", fGetCity);
	}
	//セレクトボックス(市郡)の監視(釣り場取得)
	if ($("f_city") && $("f_point_id")) {
		new Form.Element.EventObserver("f_city", fGetPoint);
	}
	//セレクトボックス(出身地の県)の監視
	if ($("f_homepref")) {
		new Form.Element.EventObserver("f_homepref", fGetCity);
	}
	//セレクトボックス(釣り場カテゴリ・船宿・釣具店)の監視
	if ($("f_point_category")) {
		new Form.Element.EventObserver("f_point_category", fAltPointDetail);
		//釣り場・船宿・釣具店の詳細の非表示
		fAltPointDetail();
	}
	
	//テキストサイズ監視
	if ($("fTextSize")) {
		var textareas = document.getElementsByTagName("textarea");
		for (i=0; i<textareas.length; i++) {
			Event.observe(textareas[i], "keyup", fGetTextSize, false);
		}
	}
		
	//フォームオブジェクト取得
	var forms = document.getElementsByTagName("form");
	for (i=0; i<forms.length; i++) {
		//フォームサブミットの監視（二重Submit防止）
		Event.observe(forms[i], "submit", fSubmit, false);
		
	}
	
	//魚名フォームが存在する場合、魚名検索の監視
	fFishNames = document.getElementsByClassName("fFishName");
	if (fFishNames) {
		fishTables = document.getElementsByClassName("fishTable");
		for (i=0; i<fFishNames.length; i++) {
			//魚名入力済みフラグ初期化
			fFishNameInputed[i] = true;
		}
		//インプットフォームにフォーカスで魚名テーブルを隠す
		for (i=0; i<forms.length; i++) {
			var inputs = forms[i].getElementsByTagName("input");
			for (j=0; j<inputs.length; j++) {
				Event.observe(inputs[j], "focus", fFishTableClear, false);
			}
		}
		//魚名検索監視開始
		new PeriodicalExecuter(fFishSuggest, 1);
	}
	
}, false);

/**
 * function：テキストサイズ取得
 */
function fGetTextSize(){
	var textareas = document.getElementsByTagName("textarea");
	var size = 0;
	for (i=0; i<textareas.length; i++) {
		size += jstrlen(textareas[i].value);
	}
	$("fTextSize").update("文字数:" + size + "/" +$("fTextSize").title + "バイト");
}


/**
 * function：魚名検索
 * 
 * 説明：
 */
function fFishSuggest(){
	//魚名フォーム分まわす
	for (i=0; i<fFishNames.length; i++) {
		//今入力された魚名がない場合
		if (fFishNames[i].value == '') {
			fishTables[i].style.display = "none";
		}
		//今入力された魚名と入力された魚名がちがう場合
		else if (fFishNames[i].value && fFishVlaues[i] != fFishNames[i].value) {
			fFishVlaues[i] = fFishNames[i].value;
			//魚名入力フラグOnの場合、Offにして戻る
			if (fFishNameInputed[i]) {
				fFishNameInputed[i] = false;
				return;
			}			
			fishTables[i].style.display = "block";

			new Ajax.Updater(
				fishTables[i],
				'/a/fish_name/',
				{
					'method': 'get',
					'parameters': 'a=b&fish_name=' + fFishVlaues[i]
				}
			);
		}
	}
}

/**
 * function：詳細入力表示切り替え
 */
function fAltPointDetail(){
	var elms = $("form1").getElementsByClassName("f_alt_point_detail");
	var str = ($F("f_point_category").match(/6\d/))? "none": "table-row";
	for (var i=0; i<elms.length; i++) {
		elms[i].style.display = str;
	}
}

/**
 * function：魚名詳細表示
 */
function fFishDetail(id, did){
	$('fishDetail' + did).update($('fishName' + id).innerHTML);
}

/**
 * function：魚名フォーム入力
 */
function fFishNameInput(fish_name){
	for (i=0; i<fFishNames.length; i++) {
		//魚名テーブルが開いている場合そのフォームに魚名入力
		if (fishTables[i].style.display == "block") {
			fFishNames[i].value = fish_name;
			//魚名入力フラグOn
			fFishNameInputed[i] = true;
		}
	}
	fFishTableClear();
}

/**
 * function：魚名テーブルを隠す
 */
function fFishTableClear(){
	for (i=0; i<fFishNames.length; i++) {
		if (fishTables[i].style.display == "block") {
			fishTables[i].style.display = "none";
		}
	}
}

/**
 * function：ブックマーク追加
 */
function fBookAdd(){
//	$("book_add").update('登録中');
//alert(Form.serialize("book_add"));
	new Insertion.Bottom("book_add", " 登録中"); 
	new Ajax.Updater(
		"book_add",
		'/my/book/add/',
		{
			'method': 'post',
			'parameters': 'a=b&' + Form.serialize("book_add")
		}
	);
	Form.disable("book_add")
	return false;
}

/**
 * function：二重Submit防止
 */
function fSubmit(evt){
	if(fSubmitSent){
		evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
	}else{
		fSubmitSent = true;
	}
}

/**
 * function：市郡取得
 */
function fGetCity(formid){
	var targetid;
	if (formid.id == "f_pref") {
		targetid = "f_city";
	}
	else if (formid.id == "f_homepref") {
		targetid = "f_homecity";
	}
	$(targetid).update('<option value="">読み込み中');
	new Ajax.Updater(
		targetid,
		'/a/city/',
		{
			'method': 'get',
			'parameters': 'a=b&pref=' + $F(formid)
		}
	);
	//セレクトボックス(市郡)の監視(釣り場取得)
	if ($("f_city") && $("f_point_id")) {
		fGetPoint();
	}
};

/**
 * function：釣り場取得
 */
function fGetPoint(formid){
	var targetid = "f_point_id";
	$(targetid).update('<option value="">読み込み中');
	new Ajax.Updater(
		targetid,
		'/a/point/',
		{
			'method': 'get',
			'parameters': 'a=b&point_pref=' + $F("f_pref") + '&point_city=' + $F("f_city")
		}
	);
};

/**
 * function：divオープン・クローズ
 */
function fAltDiv(id){
	if ($(id).style.display != "block") {
		fOpenDiv(id);
		return true;
	}
	fCloseDiv(id);
	return false;
}
function fOpenDiv(id){
	$(id).style.display = "block";
}
function fCloseDiv(id){
	$(id).style.display = "none";
}

/**
 * function：絵文字パレットオープン・クローズ
 */
function fAltEmojiPallet(id){
	if (fAltDiv("emojiPallet_" + id)) {
		var mainId = $("emojiPalletMain_" + id);
		if(mainId.empty()) {
			mainId.update("読み込み中・・・");
			new Ajax.Updater(
				mainId,
				'/a/emoji_pallet/',
				{
					'method': 'get',
					'parameters': 'a=b&target=' + id
				}
			);
		}
	} else {
		fCloseDiv("emojiPallet_" + id);
	}
}
function fCloseEmojiPallet(id){
	fCloseDiv("emojiPallet_" + id);
}

/**
 * function：絵文字インプット
 */
function fInputEmoji(id, no){
	var str = "[e:" + no + "]";
	fTextInput("", str, "", id);
	fCloseEmojiPallet(id);
}

/**
 * function：テキストエリアインプット
 */
function fTextInput(tagOpen, tagClose, sampleText, textboxID) {
	var txtarea = $(textboxID);
	if (document.selection) {
		
		var theSelection = document.selection.createRange().text;
		if(!theSelection) { theSelection=sampleText;}
		txtarea.focus();
		if(theSelection.charAt(theSelection.length - 1) == " "){// exclude ending space char, if any
			theSelection = theSelection.substring(0, theSelection.length - 1);
			document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
		} else {
			document.selection.createRange().text = tagOpen + theSelection + tagClose;
		}
	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
 		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		var scrollTop=txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		if(!myText) { myText=sampleText;}
		if(myText.charAt(myText.length - 1) == " "){ // exclude ending space char, if any
			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
		} else {
			subst = tagOpen + myText + tagClose;
		}
		txtarea.value = txtarea.value.substring(0, startPos) + subst +
		  txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();

		var cPos=startPos+(tagOpen.length+myText.length+tagClose.length);
		txtarea.selectionStart=cPos;
		txtarea.selectionEnd=cPos;
		txtarea.scrollTop=scrollTop;

	// All others
	} else {
		return;
	}
	// reposition cursor if possible
	if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
}



