CF.Helpers.onSelectWithChecksChange = function (select, parentMasterName, childMasterName) {
	select = $(select);
	var checkBoxDiv = select.up().next();
	var key = checkBoxDiv.id.split('-')[0];
	var name = checkBoxDiv.id.split('-')[1];

	// 子供の div の中身を空にする
	checkBoxDiv.innerHTML = '';
	checkBoxDiv.innerHTML = '';

	//retreive order master
	var orderMaster = {};
	try{
		var orderList = CF.MasterData['job_order_master_' + select.value];
		var len = orderList.length;
		for(var i = 0; i < len ; i++){
			orderMaster[orderList[i]] = i;
		};
	}catch(e){};
	// 子供のチェックボックスに使う値を取得
	var values = Array(select.value).flatten();
	var relations = CF.MasterData.getRelations(parentMasterName, childMasterName);
	var children = values.inject([], function (result, value) {
		return result.concat(relations[value]);
	}).without(undefined).sort(function (a, b) {
		if(!orderMaster) return b-a;
		var orderA = Number(orderMaster[a]);
		var orderB = Number(orderMaster[b]);
		if (isNaN(orderA)) return 1;
		else if (isNaN(orderB)) return -1;
		
		return orderA - orderB;
	});
	// 子供の div の中身を作る
	// dvi > ul > li > label > input, text
	var master = CF.MasterData[childMasterName];
	var listItems = children.collect(function (code) {
		var childId = [key, name, code].join('_');
		var text = master[code];
		var input = Builder.node('input', {
			type: 'checkbox',
			id: childId,
			name: name + '[]',
			value: code
		});
		var label = Builder.node('label', {
			htmlFor: childId
		},
		[input, text]);
		var li = Builder.node('li', label);
		return li;
	});
	var ul = Builder.node('ul', listItems);
	checkBoxDiv.appendChild(ul);
};

(function($){
	$(function(){
		
		var $select = $('#job-job_category select');
		var selected = {};
		$('input[name^=job]').each(function(){
			var $this = $(this);
			if($this.is(':checked')) {
				selected[$this.val()] = true;
			}
			})
			.hide();
		
		$select.trigger('change');
		
		//restore state
		$('input[name^=job]').each(function(){
			var $this = $(this);
			if(selected[$this.val()]) {$this.attr('checked', 'checked');}
		})
		.show();
		
	});
})(jQuery);
