function CategoryLoader() {
	var p_main_name;
	var p_sub_name;
	var p_detail_name;

    CategoryLoader.prototype.deleteList = function(elm_nm) {
		var elm_obj = $(elm_nm);

		if ( elm_obj ) {
			for ( i = elm_obj.length ; i > 0 ; i-- ) {
	            elm_obj[i - 1] = null;
	        }
		}
	};

	CategoryLoader.prototype.setValue = function(elm_nm, val) {
		var elm_obj = $(elm_nm)
		var	idx     = -1;

		if ( elm_obj ) {
			for ( i = 0 ; i < elm_obj.length ; i++ ) {
				if ( elm_obj[i].value == val ) {
					idx = i;
				}
			}
			elm_obj.selectedIndex = idx;
		}
	}

    CategoryLoader.prototype.initMain = function(main_nm, emptyflg) {
		p_main_name = main_nm;

		var json_txt = "";

        new Ajax.Request("../util/category/main.php", {
            method     : 'post',
			asynchronous : false,
            onComplete : function(request) {
				json_txt = request.responseText;
			}
        });

		if ( json_txt ) {
			var elm_obj = $(p_main_name);
			var opts    = elm_obj.options;
    
			var jlst = eval(json_txt);

			if ( emptyflg ) {
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = "指定しない";
		        eopt.value     = "";
			}

			for ( var i = 0 ; i < jlst.length ; i++ ) {
				if ( !jlst[i].categorymainid ) continue;
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = jlst[i].name;
		        eopt.value     = jlst[i].categorymainid;
		    }
		}
	};

    CategoryLoader.prototype.initSub = function(main_nm, sub_nm, emptyflg) {
		p_main_name = main_nm;
		p_sub_name  = sub_nm;

        this.deleteList(p_sub_name);

		var main_cd  = $(p_main_name).value;

		if ( !main_cd ) {
			return;
		}

		var json_txt  = "";
		var parameter = "categorymainid=" + encodeURIComponent(main_cd);

        new Ajax.Request("../util/category/sub.php", {
            method       : 'post',
            postBody     : parameter,
			asynchronous : false,
            onComplete : function(request) {
				json_txt = request.responseText;
			}
        });

		if ( json_txt ) {
			var elm_obj = $(p_sub_name);
			var opts    = elm_obj.options;
    
			var jlst = eval(json_txt);

			if ( emptyflg ) {
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = "指定しない";
		        eopt.value     = "";
			}

			for ( var i = 0 ; i < jlst.length ; i++ ) {
				if ( !jlst[i].categorysubid ) continue;
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = jlst[i].name;
		        eopt.value     = jlst[i].categorysubid;
		    }
		}
	};

    CategoryLoader.prototype.initSubFromMainId = function(main_cd, sub_nm, emptyflg) {

		if ( !main_cd ) {
			return;
		}

		p_sub_name  = sub_nm;

        this.deleteList(p_sub_name);

		var json_txt  = "";
		var parameter = "categorymainid=" + encodeURIComponent(main_cd);

        new Ajax.Request("../util/category/sub.php", {
            method       : 'post',
            postBody     : parameter,
			asynchronous : false,
            onComplete : function(request) {
				json_txt = request.responseText;
			}
        });

		if ( json_txt ) {
			var elm_obj = $(p_sub_name);
			var opts    = elm_obj.options;
    
			var jlst = eval(json_txt);

			if ( emptyflg ) {
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = "指定しない";
		        eopt.value     = "";
			}

			for ( var i = 0 ; i < jlst.length ; i++ ) {
				if ( !jlst[i].categorysubid ) continue;
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = jlst[i].name;
		        eopt.value     = jlst[i].categorysubid;
		    }
		}
	};

	CategoryLoader.prototype.initDetail = function(main_nm, sub_nm, detail_nm, emptyflg) {
		p_main_name   = main_nm;
		p_sub_name    = sub_nm;
		p_detail_name = detail_nm;

        this.deleteList(p_detail_name);

		var main_cd  = $(p_main_name).value;
		var sub_cd   = $(p_sub_name).value;

		if ( !main_cd || !sub_cd ) {
			return;
		}

		var json_txt  = "";
		var parameter = "categorymainid=" + encodeURIComponent(main_cd) + "&"
					  + "categorysubid="  + encodeURIComponent(sub_cd);

        new Ajax.Request("../util/category/detail.php", {
            method       : 'post',
            postBody     : parameter,
			asynchronous : false,
            onComplete : function(request) {
				json_txt = request.responseText;
			}
        });

		if ( json_txt ) {
			var elm_obj = $(p_detail_name);
			var opts    = elm_obj.options;
    
			var jlst = eval(json_txt);

			if ( emptyflg ) {
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = "指定しない";
		        eopt.value     = "";
			}

			for ( var i = 0 ; i < jlst.length ; i++ ) {
				if ( !jlst[i].categorydetailid ) continue;
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = jlst[i].name;
		        eopt.value     = jlst[i].categorydetailid;
		    }
		}
	};

	CategoryLoader.prototype.initDetailFromMainId = function(main_cd, sub_nm, detail_nm, emptyflg) {
		if ( !main_cd ) {
			return;
		}

		p_sub_name    = sub_nm;
		p_detail_name = detail_nm;

        this.deleteList(p_detail_name);

		var sub_cd   = $(p_sub_name).value;

		if ( !sub_cd ) {
			return;
		}

		var json_txt  = "";
		var parameter = "categorymainid=" + encodeURIComponent(main_cd) + "&"
					  + "categorysubid="  + encodeURIComponent(sub_cd);

        new Ajax.Request("../util/category/detail.php", {
            method       : 'post',
            postBody     : parameter,
			asynchronous : false,
            onComplete : function(request) {
				json_txt = request.responseText;
			}
        });

		if ( json_txt ) {
			var elm_obj = $(p_detail_name);
			var opts    = elm_obj.options;
    
			var jlst = eval(json_txt);

			if ( emptyflg ) {
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = "指定しない";
		        eopt.value     = "";
			}

			for ( var i = 0 ; i < jlst.length ; i++ ) {
				if ( !jlst[i].categorydetailid ) continue;
				var eopt = document.createElement('option');
		        elm_obj.appendChild(eopt);
		        eopt.innerHTML = jlst[i].name;
		        eopt.value     = jlst[i].categorydetailid;
		    }
		}
	};
}

