// プルダウン自動選択JavaScript
// 依存：jobdata.js、prototype.js(onChangeSelectedAjax()を使用する場合)

// 設定





// 実行開始

// イニシャライズ
var formSelect = new Array();


// 1グループのフォームの表示を一気に切り替え
function onChangeSelected(obj, type, layer, num, init){
	var val = getSelected(type + formParent[type][layer] + num + formName);
	var len = formParent[type].length;
	var hid = type + formParent[type][layer] + num;
	var men = hid + formName;
	if(val){
		formSelect[layer] = val;
		formSelect.splice(parseInt(layer)+1, len);
		for(var i = 0; i < formSelect.length; i++){
			obj = getChildobj(obj, formSelect[i]);
		}
		setSelectedScript(obj, type, parseInt(layer), num);
		var st = 1;
	}else{
		var st = 0;
	}

	var max = len - parseInt(layer) - 2;
	for(var i = st; i <= max; i++){
		setSelectedScript(null, type, parseInt(layer)+i, num);
		if(init != 1){
			var hidx = type + formParent[type][parseInt(layer)+i+1] + num;
			var menx = hidx + formName;
			replaceHiddenValue(menx, hidx);
		}
	}

	if(document.getElementsByName(hid)[0]){
		replaceHiddenValue(men, hid);
	}
	return;
}


// 一つのフォームの表示を切り替える
function setSelectedScript(obj, type, layer, num){
	if(obj){
		var arr = parseChildobj(obj);
	}
	var nextLayer = parseInt(layer) + 1;
	var opt = '';
	var target = type + formParent[type][nextLayer] + num + containerName;
	var getparam = '';

	if(formParent[type].length > nextLayer+1){
		var opt = " onchange=" + '"' + "onChangeSelected(" + type + ", '" + type + "', '" + nextLayer + "', '" + num + "');" + '"';
	}else if(formParent[type].length == nextLayer+1){
		var opt = " onchange=" + '"' + "replaceHiddenValue('" + type + formParent[type][nextLayer] + num + formName + "', '" + type + formParent[type][nextLayer] + num + "');" + '"';
	}
	getparam += '<select name="' + type + formParent[type][nextLayer] + num + formName + '"'+ opt + '>';
	if(arr) {
		getparam += '<option value = "">' + messages['select'] + '</option>';
		for(i in arr) {
			getparam += '<option value="'+arr[i]["id"]+'">'+arr[i]["value"]+"</option>";
		}
	}else{
		getparam += '<option value = "">' + messages['upselect'] + '</option>';
	}
	getparam += '</select>';
	document.getElementById(target).innerHTML = getparam;
	return;
}


// PHPにアクセスして、1グループのフォームの表示を一気に切り替え
function onChangeSelectedAjax(url, type, layer, num, def, add, init){
	var val = getSelected(type + formParent[type][layer] + num + formName);
	var len = formParent[type].length
	var hid = type + formParent[type][layer] + num;
	var men = hid + formName;
	if(val){
		formSelect[layer] = val;
		formSelect.splice(parseInt(layer)+1, 2);
		setSelectedAjax(url, type, layer, num, val, def, add);
		var max = len - formSelect.length;
		var st = 1;
	}else{
		var st = 0;
	}

	var max = len - parseInt(layer) - 2;
	for(var i = st; i <= max; i++){
		setSelectedScript(null, type, parseInt(layer)+i, num);
		if(init != 1){
			var hidx = type + formParent[type][parseInt(layer)+i] + num;
			var menx = hidx + formName;
			replaceHiddenValue(menx, hidx);
		}
	}

	if(document.getElementsByName(hid)[0]){
		replaceHiddenValue(men, hid);
	}
	return;
}


// PHP問い合わせで一つのフォームの表示を切り替える
function setSelectedAjax(url, type, layer, num, val, def, add){
	var nextLayer = parseInt(layer) + 1;
	var target = type + formParent[type][nextLayer] + num + containerName;
	if(val){
		var getparam = type + formParent[type][layer] + num + "=" + val;
		if(def){
			getparam = getparam + '&default=' + def;
		}
		if(add){
			getparam = getparam + '&' + add;
		}
		ajaxAccess(url, getparam, target);
	}else{
		setSelectedScript(null, type, nextLayer, num);
	}
	return;
}


// AJAX処理
function ajaxAccess(url, getparam, target){
	var a = new Ajax.Request(
		url,
		{
			"method": "get",
			"parameters": getparam,
			onSuccess: function(request){
				// alert('読み込み成功しました');
			},
			onComplete: function(request){
				if(target){
					document.getElementById(target).innerHTML = getResponseText(request);
				}
			},
			onFailure: function(request){
				//alert('読み込みに失敗しました');
			},
			onException: function(request){
				//alert('読み込み中にエラーが発生しました');
			}
		}
	);
	return;
}


// 子オブジェクト取得
function getChildobj(obj, value){
	var arr = {};
	for(var i = 0; i < obj.ctg.length; i++){
		if(obj.ctg[i].id == value) {
			arr = obj.ctg[i];
		}
	}
	return arr;
}


// 子カテゴリ分解
function parseChildobj(obj){
	var arr = {};
	for(var i = 0; i < obj.ctg.length; i++){
		arr[i] = {};
		arr[i]['value'] = obj.ctg[i].value;
		arr[i]['id'] = obj.ctg[i].id;
	}
	return arr;
}


// Safariのみ、一旦エスケープしてからdecodeURIComponentする
function getResponseText(req){
	var text = req.responseText;
	if ( navigator.appVersion.indexOf("KHTML") > -1 ) {
		var esc = escape(text);
		if ( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ) {
			text = decodeURIComponent(esc);
		}
	}
	return text;
}


// 現在選択されているプルダウンメニューの取得
function getSelected(menuName){
	if(!document.getElementsByName(menuName)[0]) return false;
	var sid = document.getElementsByName(menuName)[0].selectedIndex;
	var sItem = document.getElementsByName(menuName)[0].options[sid].value;
	return sItem;
}


// プルダウンメニューの変更
function changeMenu(menuName, selValue){
	if(!document.getElementsByName(menuName)[0]) return false;
	var now = false;
	for(i = 0; i < document.getElementsByName(menuName)[0].length; i++ ){
		if(document.getElementsByName(menuName)[0].options[i].value == selValue){
			now = i;
			break;
		}
	}
	document.getElementsByName(menuName)[0].selectedIndex = now;
	return now;
}


// hiddenフィールドの値を置き換える
function replaceHiddenValue(menuName, hiddenName){
	if(!document.getElementsByName(menuName)[0]) return false;
	var selectedIndex = document.getElementsByName(menuName)[0].selectedIndex;
	var selectedItem = document.getElementsByName(menuName)[0].options[selectedIndex].value;
	document.getElementsByName(hiddenName)[0].value = selectedItem;
}


// 終了
