LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id)
{
	LLScriptFloater* floater = LLFloaterReg::getTypedInstance<LLScriptFloater>("script_floater", notification_id);
	floater->setNotificationId(notification_id);
	floater->createForm(notification_id);

	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
	floater->setAutoFocus(FALSE);

	LLScriptFloaterManager::e_object_type floaterType=LLScriptFloaterManager::getObjectType(notification_id);

	// for some reason an inventory offer comes back as OBJ_UNKNOWN -Zi
	if(floaterType==LLScriptFloaterManager::OBJ_UNKNOWN ||
	   floaterType==LLScriptFloaterManager::OBJ_SCRIPT)
	{
		floater->setSavePosition(true);
		if(gSavedSettings.getBOOL("ShowScriptDialogsTopRight"))
		{
			// undock the dialog
			floater->setDocked(false,true);
			LLRect pos=floater->getRect();

			S32 width=pos.getWidth();
			S32 height=pos.getHeight();
			pos.setOriginAndSize(gViewerWindow->getWorldViewWidthScaled()-width,
								 gViewerWindow->getWorldViewHeightScaled()-height,
								 width,height);
			floater->setRect(pos);
			floater->savePosition();
		}
		// do this only for inventory offers -Zi
		else if(floaterType==LLScriptFloaterManager::OBJ_UNKNOWN)
		{
			// undock the dialog
			floater->setDocked(false,true);
			LLRect pos=floater->getRect();

			S32 width=pos.getWidth();
			S32 height=pos.getHeight();

			pos.setOriginAndSize(gViewerWindow->getWorldViewWidthScaled()-width,
								 gViewerWindow->getWorldViewHeightScaled()-height,
								 width,height);

			floater->setRect(pos);
			floater->savePosition();
		}

		floater->restorePosition();
	}
	else
	{
		floater->dockToChiclet(true);
	}

	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
	LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id, FALSE);

	return floater;
}
void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
{
	if(notification_id.isNull())
	{
		llwarns << "Invalid notification ID" << llendl;
		return;
	}

	// remove related chiclet
	if (LLChicletBar::instanceExists())
	{
		LLChicletBar::getInstance()->getChicletPanel()->removeChiclet(notification_id);
	}

	LLIMWellWindow* im_well_window = LLIMWellWindow::findInstance();
	if (im_well_window)
	{
		im_well_window->removeObjectRow(notification_id);
	}

	mNotifications.erase(notification_id);

	// close floater
	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
	if(floater)
	{
		floater->savePosition();
		floater->setNotificationId(LLUUID::null);
		floater->closeFloater();
	}
}