text: //#include include/jobs.js, include/cultivation.js
  
  var label = "L. Herb Garden";
  var version = "1347907556";
  var name_single = "L. Herb Garden";
  var name_plural = "L. Herb Gardens";
  var article = "a";
  var description = "";
  var is_hidden = false;
  var has_info = false;
  var has_infopage = false;
  var proxy_item = null;
  var is_routable = false;
  var adjusted_scale = 1;
  var stackmax = 1;
  var base_cost = 2000;
  var input_for = [];
  var parent_classes = ["proto_herb_garden_large", "proto"];
  var has_instance_props = false;
  
  var classProps = {
  	"item_class"	: "garden_new",	// defined by proto (overridden by proto_herb_garden_large)
  	"job_class_id"	: "job_cult_herb_garden_large_4",	// defined by proto (overridden by proto_herb_garden_large)
  	"width"	: "450",	// defined by proto (overridden by proto_herb_garden_large)
  	"placement_set"	: "all"	// defined by proto (overridden by proto_herb_garden_large)
  };
  
  var instancePropsDef = {};
  
  var verbs = {};
  
  verbs.remove = { // defined by proto
  	"name"				: "remove",
  	"ok_states"			: ["in_location"],
  	"requires_target_pc"		: false,
  	"requires_target_item"		: false,
  	"include_target_items_from_location"		: false,
  	"is_default"			: false,
  	"is_emote"			: false,
  	"sort_on"			: 50,
  	"tooltip"			: "Remove from the location",
  	"is_drop_target"		: true,
  	"drop_many"			: false,
  	"drop_tip"			: "Pour {$stack_name} on {$item_name}",
  	"drop_ok_code"			: function(stack, pc){
  
  		return stack.class_tsid == 'wine_of_the_dead' && this.hasInProgressJob(pc);
  	},
  	"conditions"			: function(pc, drop_stack){
  
  		if (!this.container.pols_is_owner(pc)) return {state: null};
  
  		if ((!drop_stack || drop_stack.class_tsid != 'wine_of_the_dead') && this.hasInProgressJob(pc)) return {state: 'disabled', reason: "Pour some Wine of the Dead to cancel the project first."};
  
  		return {state:'enabled'};
  	},
  	"handler"			: function(pc, msg, suppress_activity){
  
  		if (this.hasInProgressJob(pc)){
  			var it = pc.getAllContents()[msg.target_itemstack_tsid];
  			if (!it) return false;
  
  			msg.target = this;
  			return it.verbs['pour'].handler.call(it, pc, msg);
  		}
  		else{
  			pc.prompts_add({
  				title			: 'Please Confirm!',
  				txt			: "Are you really sure you want to remove this "+this.name_single+"?",
  				is_modal		: true,
  				icon_buttons	: true,
  				choices		: [
  					{ value : 'ok', label : 'Yes' },
  					{ value : 'cancel', label : 'Nevermind' }
  				],
  				callback	: 'prompts_itemstack_location_callback',
  				itemstack_tsid		: this.tsid
  			});
  		}
  	}
  };
  
  verbs.build_tower = { // defined by proto
  	"name"				: "build tower",
  	"ok_states"			: ["in_location"],
  	"requires_target_pc"		: false,
  	"requires_target_item"		: false,
  	"include_target_items_from_location"		: false,
  	"is_default"			: false,
  	"is_emote"			: false,
  	"sort_on"			: 51,
  	"tooltip"			: "Start a project to build a tower here",
  	"is_drop_target"		: false,
  	"conditions"			: function(pc, drop_stack){
  
  		if (this.class_tsid != 'proto_furniture_tower_chassis') return {state:null};
  		if (this.hasJobs(pc)) return {state:'enabled'};
  
  		return {state:null};
  	},
  	"handler"			: function(pc, msg, suppress_activity){
  
  		return this.verbs.restore.handler.call(this, pc, msg, suppress_activity);
  	}
  };
  
  verbs.restore = { // defined by proto
  	"name"				: "restore",
  	"ok_states"			: ["in_location"],
  	"requires_target_pc"		: false,
  	"requires_target_item"		: false,
  	"include_target_items_from_location"		: false,
  	"is_default"			: false,
  	"is_emote"			: false,
  	"sort_on"			: 52,
  	"tooltip"			: "Start a project to restore this item",
  	"is_drop_target"		: false,
  	"conditions"			: function(pc, drop_stack){
  
  		if (this.class_tsid == 'proto_furniture_tower_chassis') return {state:null};
  		if (this.hasJobs(pc)) return {state:'enabled'};
  
  		return {state:null};
  	},
  	"handler"			: function(pc, msg, suppress_activity){
  
  		this.offerJobs(pc, msg);
  		return true;
  	}
  };
  
  function onRemoved(pc){ // defined by proto_herb_garden_large
  	if (pc){
  		pc.runDropTable('cult_remove_garden_large', this);
  	}
  }
  
  function getEndItems(){ // defined by proto
  	//this.container.geo_placement_get(this.pl_tsid);
  	return this.getClassProp('item_class').split(',');
  }
  
  function modal_callback(pc, value, details){ // defined by proto
  	if (value == 'ok'){
  		if (this.hasInProgressJob(pc) && details.target_itemstack_tsid){
  			var wine = pc.removeItemStackTsid(details.target_itemstack_tsid, 1);
  			if (wine){
  				wine.apiConsume(1);
  				this.resetJob(pc);
  				pc.sendActivity("You poured Wine of the Dead on a "+this.name_single+" and canceled the project.");
  			}
  			else{
  				pc.sendActivity("Where'd your wine go? I can't find it.");
  			}
  		}
  		else{
  			this.removeResource(pc);
  		}
  	}
  }
  
  function onCreate(){ // defined by proto
  	this.setAndBroadcastState('depleted');
  	this.setJobData();
  }
  
  function onPlayerEnter(pc){ // defined by proto
  	var jobs = this.getAvailableJobs(pc);
  		
  	for (var i in jobs.given){
  		var qi = jobs.given[i];
  		if (qi){
  			var status = this.buildJobStatus(pc, qi);
  			status.is_update = true;
  			status.spirit_id = this.tsid;
  		
  			return pc.apiSendMsgAsIs(status);
  		}
  	}
  
  	for (var i in jobs.open){
  		var qi = jobs.open[i];
  		if (qi){
  			var status = this.buildJobStatus(pc, qi);
  			status.is_update = true;
  			status.spirit_id = this.tsid;
  		
  			return pc.apiSendMsgAsIs(status);
  		}
  	}
  
  	for (var i in jobs.delayed){
  		var qi = jobs.delayed[i];
  		if (qi){
  			var status = this.buildJobStatus(pc, qi);
  			status.is_update = true;
  			status.spirit_id = this.tsid;
  		
  			return pc.apiSendMsgAsIs(status);
  		}
  	}
  }
  
  function setJobData(){ // defined by proto
  	if (!this.container) return this.apiSetTimer('setJobData', 500);
  
  	log.info(this+' running setJobData');
  	if (this.getClassProp('job_class_id') != '' && this.getClassProp('job_class_id') != undefined){
  		var id = 'proto-'+this.tsid;
  
  		log.info(this+' setting street data');
  		this.container.jobs_set_street_info({id: id, type: 1});
  
  		log.info(this+' setting class ids');
  		var job_class_ids = {};
  
  		var class_ids = this.getClassProp('job_class_id').split(',');
  		var phase = 1;
  		for (var i in class_ids){
  			var class_id = class_ids[i];
  			job_class_ids[class_id] = {in_order : phase, class_id: class_id, delay_seconds: 60};
  			phase++;
  		}
  		this.container.jobs_set_class_ids({ id: id, job_class_ids: job_class_ids});
  
  		if (class_ids[0]) this.updatePlayers(id, class_ids[0]);
  	}
  }
  
  function getDescExtras(pc){
  	var out = [];
  	return out;
  }
  
  var tags = [
  	"no_rube",
  	"no_trade",
  	"proto"
  ];
  
  
  // this is a temporary fix, while the client doesn't load item defs
  // from the XML files. we pass this data on login events.
  
  function getAssetInfo(){
  	return {
  		'position': {"x":-204,"y":-68,"w":408,"h":69},
  		'thumb': "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM\/rhtAAAC6klEQVR42u1US08TURQmxp0LHyhE\ntDOdmTItWCi0lGcptUKhdWZaoPQFAiVIKA+pKA8LOioPEQP4YK8L\/4Bxa8KGjb\/Cn8DCH3A85xaM\nRnRvcr\/ky3ncc8\/97j2TKSnh4ODg4ODg4ODg+N+xm63pyPgEM+GTzaGAjfHdZMBMUeyXzcWYwxwN\nquZYp818Eq82nyaqzUKfw5zpUVl+MqQe552M41hHe\/Oaaq6lnOYqrtH6WNBmDgdUFu8M15q7E56R\nfwr7utPruqff2OtvsR7FmkSIt1oBfdC9IhhIzStAL+aTbTIMtEoQbRShr7loqS7drmBM9QIYjQLE\nWyRIYG3Sh\/VtElujXG9zse9Jj0G\/DDNdVhhqFw5PFfbxQVCci6jvxztVyPgVyOBB1LTHbWENUu0y\nDHXYAF+B5UkUHZjCOlaPHGiV8VCJiSdRGb+NCWb7fQrzqW4Q89SPajNol6IOmO2SjtLNV1dQyrnf\nhO1na0eWdPvBWFBhTejmYRRFrxVlLygxQRSHPRa2TnH6+AIRT\/EC9MIkOHEsji520ovEUI4EUcyE\nodB5TYVcUICRtopPUU95Dco5w0S9mWo0P0y799aSVd+MhutsFPTcfUgmDmM2ChwvWRopHRb7xdJo\nSLSB4orjLY6PyHJYQ2M0vBa0xXqtoXgOfqewbNhhsKXisNNZWvXHODdSVQe5Tis80mR4HFWgoMvw\nMGz9yfW4Hd5m62BjwA6bCTuzq9FKmA\/LsKgpkO+WYDJohUKfE54lXbCRqYf1dB3zn6fqYHOwHl4M\n1cMW8tWwG7bvuGF3tAH2c01QSNZAzF32\/bbr8gRKOXvq99btKm2ski6I6F5EXkGWIsuQl0b9YiQb\nELRVXQlOBCyxfEgMz3RJxlxI1u4GxP4FvVKbCgr6bJcllGm1RNPecn0hovTkbl6byPoqtvIhYXNF\nV9bvd1tf4t4d8pcNZRvj12bc8Xlas3+5VXle5v9JDg4ODg4ODg6Ov+EHZzVxof3\/cfcAAAAASUVO\nRK5CYII=",
  	};
  };
  
  var itemDef = {
  	label		: this.label,
  	name_plural	: this.name_plural,
  	stackmax	: this.stackmax,
  	is_hidden	: this.is_hidden,
  	has_info	: this.has_info,
  	adjusted_scale	: this.adjusted_scale,
  	asset_swf_v	: "\/c2.glitch.bz\/items\/2012-04\/proto_herb_garden_large-1333485719.swf",
  	admin_props	: false,
  	obey_physics	: false,
  	in_background	: true,
  	in_foreground	: false,
  	has_status	: false,
  	not_selectable	: false,
  };
  
  if (this.consumable_label_single) itemDef.consumable_label_single = this.consumable_label_single;
  if (this.consumable_label_plural) itemDef.consumable_label_plural = this.consumable_label_plural;
  
  itemDef.verbs = {
  };
  itemDef.hasConditionalVerbs = 1;
  itemDef.emote_verbs = {
  };
  itemDef.hasConditionalEmoteVerbs = 0;
  itemDef.tags = [
  	"no_rube",
  	"no_trade",
  	"proto"
  ];
  itemDef.keys_in_location = {
  	"u"	: "build_tower",
  	"e"	: "remove",
  	"t"	: "restore"
  };
  itemDef.keys_in_pack = {};
  
  // generated ok 2012-09-17 11:45:56 by martlume
  