var genre_bunch_rex = RegExp('^(.+)_genre_bunch_cd(.*)$');
var genre_bunch_id_rex = RegExp('^(.+)_genre_bunch_id(.*)$');
var genres_el_origin = new Array();
function genre_bunch2genres(el_bunch) {

	if(!el_bunch) {
		return;
	}

	var bunch_by_id;
	var target_type;
	if(el_bunch.id.match(genre_bunch_rex)) {
		target_type = RegExp.$1;
		genres = document.getElementById(RegExp.$1 + '_genre_cd' + RegExp.$2);
		if(!genres) {
			return;
		}
		bunch_by_id = false;
	} else if(el_bunch.id.match(genre_bunch_id_rex)) {
		target_type = RegExp.$1;
		genres = document.getElementById(RegExp.$1 + '_genre_id' + RegExp.$2);
		if(!genres) {
			return;
		}
		bunch_by_id = true;
	} else {
		return;
	}

//	if(!genre_set) {
//		get_genre_set();
//	}
	if(!genres_el_origin || !genres_el_origin[genres.id]) {
		genres_el_origin[genres.id] = genres;
	}

	var data;
	var skip_cds = null;
	var skip_ids = null;
	if(target_type == 'common') {
		target_type = document.getElementById('common_target').value;
	}
	if(!bunch_by_id) {
		genre_bunch_cd = el_bunch.value;
		data = genre_set[genre_bunch_cd];
		if(genre_skip_set && genre_skip_set[target_type+'_']) {
			skip_cds = genre_skip_set[target_type+'_'];
		}
	} else {
		genre_bunch_id = el_bunch.value;
		data = genre_id_set[genre_bunch_id];
		if(genre_id_skip_set && genre_id_skip_set[target_type+'_']) {
			skip_ids = genre_id_skip_set[target_type+'_'];
		}
	}


	var el_old = document.getElementById(genres.id + '_old');
	var value_old = (el_old) ? el_old.value : null;

	el = genres_el_origin[genres.id];
	el.length = 1;
	for(i in data) {
		if((skip_cds && skip_cds[i]) || (skip_ids && skip_ids[i])) {
		} else {
			el.length++;
			el.options[el.length - 1].text = data[i];
			el.options[el.length - 1].value = i;
			if(value_old && i == value_old) {
				el.options[el.length - 1].selected = true;
				el_old.value = '';
			}
		}
	}
}

function genre_bunch2genres_init() {
	var el_common_target = document.getElementById('common_target');

	if(el_common_target) {
		el_common_target.onchange = function() {
			var el = document.getElementById('common_genre_bunch_cd');
			if(el) {
				var original_bunch_cd = el.value;

				var selected = false;
				el.length = 1;
				for(i in genre_bunch_set) {
					if(genre_bunch_skip_set[i] && genre_bunch_skip_set[i][this.value+'_']) {
					} else {
						el.length++;
						el.options[el.length - 1].text = genre_bunch_set[i];
						el.options[el.length - 1].value = i;
						if(original_bunch_cd && i == original_bunch_cd) {
							el.options[el.length - 1].selected = true;
							selected = true;
						}
					}
				}
				var el_genre_cd = document.getElementById('common_genre_cd');
				if(!selected) {
					el.onchange();
				}
				el.onchange();
			} else {
				var el = document.getElementById('common_genre_bunch_id');
				if(el) {
					var original_bunch_id = el.value;

					var selected = false;
					el.length = 1;
					for(i in genre_bunch_id_set) {
						if(genre_bunch_id_skip_set[i] && genre_bunch_id_skip_set[i][this.value+'_']) {
						} else {
							el.length++;
							el.options[el.length - 1].text = genre_bunch_id_set[i];
							el.options[el.length - 1].value = i;
							if(original_bunch_id && i == original_bunch_id) {
								el.options[el.length - 1].selected = true;
								selected = true;
							}
						}
					}

					var original_genre_id;
					var el_genre_id = document.getElementById('common_genre_id');
					if(!selected) {
						el_genre_id.value = '';
					} else {
						original_genre_id = el_genre_id.value;
					}
					el.onchange();
					if(selected) {
						el_genre_id.value = original_genre_id;
					}
				}
			}
		}
	}


	var els = document.getElementsByTagName('select');
	if(els) {
		var i, el;
		for(i in els) {
			el = els[i];
			if(el && el.id) {
				if(el.id.match(genre_bunch_rex) || el.id.match(genre_bunch_id_rex)) {
					genre_bunch2genres(el);
					el.onchange = function () {
						genre_bunch2genres(this);
					}
				}
			}
		}
	}

	if(el_common_target) {
		el_common_target.onchange();
	}
}

window.onload = function () {
	genre_bunch2genres_init();
}

//Event.observe(
//	window
//	, 'load'
//	, function() {
//		genre_bunch2genres_init();
//	}
//	, false
//);
