// JavaScript

$(function(){	
	JPGE.init();
	SWITCH_TAB.init();
});

var JPGE = function(){};

JPGE.PHP_PATH = 'inc_search.php';
JPGE.ABORT_PREVIOUS_CONNECTION = true;
JPGE.sequence = 0;
JPGE.ajaxInstances = [];
JPGE.last_connection = 0;

JPGE.init = function() {

	if (!KeywordSuggestion) {
		alert('KeywordSuggestionクラスが必要です。');
		return false;
	}
	
	// 検索用関数の設定
	KeywordSuggestion.setSearchFunction(function(inputelement, func){
	
		var keyword = inputelement.val();
		var query = 'kana='+encodeURIComponent(keyword);
		
		// 医薬品名称の場合
		if (inputelement.attr('class').indexOf('medi_name')>=0) {
			query += '&standard_name='+encodeURIComponent($('input.standard_name', inputelement.parent().parent()).val());
		}
		// 規格名称の場合
		else if (inputelement.attr('class').indexOf('standard_name')>=0) {
			keyword = $('input.medi_name', inputelement.parent().parent()).val();
			query = 'kana='+encodeURIComponent(keyword);
			query += '&standard_name='+encodeURIComponent(inputelement.val());
		}
		
		if (JPGE.ABORT_PREVIOUS_CONNECTION && JPGE.last_connection>0 && JPGE.ajaxInstances[JPGE.last_connection])
			JPGE.ajaxInstances[JPGE.last_connection].abort();
		JPGE.last_connection = JPGE.sequence++;
		
		if (keyword.length > 1) {
			JPGE.ajaxInstances[JPGE.last_connection] = $.get(JPGE.PHP_PATH, query, function(resposnse){
				var results = JSON.parse(resposnse);
				if (Number(results.count)>results.list.length) {
					func(results.list, '候補が'+results.count+'件あります');
				} else {
					func(results.list);
				}
			});
		} else {
			func([]);
		}
	});
	
	$('input.medi_name').each(function(){
		new KeywordSuggestion(this);
	});
	var i=0;
	$('input.standard_name').each(function(){
		new KeywordSuggestion(this, $('input.medi_name')[i++]);
	});
	
	$('#medicine-name-input').submit(function(){
		return false;
	});
	
	// reset
	$('#clear-button').click(function(){
		if (confirm('入力内容を消去します。よろしいですか？')) {
			$.cookie('last_inputed', null);
			$('input[type="text"]').val('');
		}
	});
	
	// submit
	$('#search-button').click(function(){
		
		// 入力内容をCookieに保存
		var inputedObject = [];
		$('#input-medicine tbody tr').each(function(){
			inputedObject.push(new InputedRow($('input.medi_name', this).val(), $('input.standard_name', this).val()));
		});
		$.cookie('last_inputed', JSON.stringify(inputedObject));
		
		try {
			$('#medicine-name-input')[0].submit();
		} catch (e) {
			alert('検索できる医薬品の上限を超えています。数を減らして、再度お試しください。');
		}
	});
	
	// 入力欄の追加
	$('#add-input-field').click(function(){
		if ($('#input-medicine tbody tr').length>0) {
			JPGE.addRow();
		}
	});
	
	// 初回は５つの入力欄（４つ加える）
	for (var i=0; i<4; i++)
		JPGE.addRow();
	
	// 入力欄のデフォルト値
	if ($.cookie) {
		var last_inputed = $.cookie('last_inputed');
		if (last_inputed) {
			last_inputed = JSON.parse(last_inputed);
			if ($('#input-medicine tbody tr').length < last_inputed.length) {
				var add_num = last_inputed.length-$('#input-medicine tbody tr').length;
				for (var i=0; i<add_num; i++) {
					JPGE.addRow();
				}	
			}
			var i=0;
			$('input.medi_name').each(function(){
				$(this).val(last_inputed[i++].medi_name);
			});
			i=0;
			$('input.standard_name').each(function(){
				$(this).val(last_inputed[i++].standard_name);
			});
		}
	}

};

JPGE.addRow = function() {
	if ($('#input-medicine tbody tr').length>=30) {
		alert('一度に検索できるのは30件までです。不要なものを削除して、入力してください。');
		return;
	}
	var row = $('#input-medicine tbody tr:first').clone();
	$('#input-medicine tbody').append(row);
	var appended = $('#input-medicine tbody tr:last');
	$('th', appended).text('医薬品名'+$('#input-medicine tbody tr').length+' :');
	$('input', appended).val('');
	$('input.medi_name', appended).each(function(){
		new KeywordSuggestion(this);
	});
	$('input.standard_name', appended).each(function(){
		new KeywordSuggestion(this, $('input.medi_name', appended)[0]);
	});
};

/**
 * 直接入力と同期
 */
JPGE.sync = function(){
	SELECTED_LIST.clear();
	$('input.medi_name').each(function(index){
		if ($(this).val()) {
			SELECTED_LIST.add($(this).val(), SELECTED_LIST.NO_SYNC);
		}
	});
};

if (typeof window.console != 'object') {
	window.console = {};
	window.console.log = function(message){
	};
}


/**
 * 1行の情報
 */
var InputedRow = function(medi_name, standard_name){
	this.medi_name = medi_name;
	this.standard_name = standard_name;
}; 



/**
 * タブの制御
 */
var SWITCH_TAB = function(){};

SWITCH_TAB.DIRECT = 1;
SWITCH_TAB.KANA = 2;
SWITCH_TAB.init = function(){
	$('#tab a').click(function(){
		var tab = $(this).parent().hasClass('direct')?SWITCH_TAB.DIRECT:SWITCH_TAB.KANA;
		SWITCH_TAB.selectTab(tab);
		return false;
	});
	$('#input-kana').hide();
	if ($.cookie('last_tab_selected')) {
		SWITCH_TAB.selectTab($.cookie('last_tab_selected'));
	}
};

SWITCH_TAB.selectTab = function(tab) {
	if (tab == SWITCH_TAB.DIRECT) {
		$('#tab li.direct a').addClass('selected');
		$('#tab li.kana a').removeClass('selected');
		$('#input-direct').show();
		$('#input-kana').hide();
		$.cookie('last_tab_selected', SWITCH_TAB.DIRECT);
	}
	else if (tab == SWITCH_TAB.KANA) {
		$('#tab li.kana a').addClass('selected');
		$('#tab li.direct a').removeClass('selected');
		$('#input-kana').show();
		$('#input-direct').hide();
		$.cookie('last_tab_selected', SWITCH_TAB.KANA);
		JPGE.sync();
	}
};
