void handle_upload(void* data)
{
	const std::string filename = upload_pick(data);
	if (!filename.empty())
	{
		LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
		LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_name_description.xml");
		floaterp->childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() ));
	}
}
	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
	{
		std::string filename = upload_pick((void*)LLFilePicker::FFLOAD_WAV);
		if (!filename.empty())
		{
			LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
			LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_sound_preview.xml");
			floaterp->childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() ));
		}
		return true;
	}
// static 
//-----------------------------------------------------------------------------
// onBtnOK()
//-----------------------------------------------------------------------------
void LLFloaterNameDesc::onBtnOK( void* userdata )
{
	LLFloaterNameDesc *fp =(LLFloaterNameDesc *)userdata;

	fp->childDisable("ok_btn"); // don't allow inadvertent extra uploads
	
	LLAssetStorage::LLStoreAssetCallback callback = NULL;
	S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
	void *nruserdata = NULL;
	std::string display_name = LLStringUtil::null;
	upload_new_resource(fp->mFilenameAndPath, // file
			    fp->childGetValue("name_form").asString(), 
			    fp->childGetValue("description_form").asString(), 
			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
			    display_name, callback, expected_upload_cost, nruserdata);
	fp->close(false);
}
	// Inherited from AIFileUpload.
	/*virtual*/ void handle_event(std::string const& filename)
	{
		LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
		LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_sound_preview.xml");
		floaterp->childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() ));
	}
// static 
//-----------------------------------------------------------------------------
// onBtnCancel()
//-----------------------------------------------------------------------------
void LLFloaterNameDesc::onBtnCancel( void* userdata )
{
	LLFloaterNameDesc *fp =(LLFloaterNameDesc *)userdata;
	fp->close(false);
}
// static 
//-----------------------------------------------------------------------------
// onCommit()
//-----------------------------------------------------------------------------
void LLFloaterNameDesc::doCommit( class LLUICtrl *, void* userdata )
{
	LLFloaterNameDesc* self = (LLFloaterNameDesc*) userdata;
	self->onCommit();
}