view src/nabble/view/lib/help/Help.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children 72765b66e2c3
line wrap: on
line source


package nabble.view.lib.help;

import fschmidt.html.Html;
import fschmidt.util.java.HtmlUtils;
import nabble.model.Lucene;
import nabble.model.Message;
import nabble.naml.compiler.CompileException;
import nabble.naml.compiler.Template;
import nabble.naml.compiler.Program;
import nabble.naml.compiler.TemplatePrintWriter;
import nabble.naml.namespaces.BasicNamespace;
import nabble.view.lib.Jtp;
import nabble.view.lib.Shared;
import nabble.view.web.template.HtmlListNamespace;
import nabble.modules.ModuleManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public abstract class Help {
	private static final Logger logger = LoggerFactory.getLogger(Help.class);

	private static final Map<Integer,Help> map = new HashMap<Integer,Help>();
	public final int id;
	public final String question;

	Help(int id,String question) {
		this.id = id;
		this.question = question;
		if( map.put(id,this) != null )
			throw new RuntimeException("duplicate id");
	}

	public abstract String answer();
	public String getMetaDescription() { return null; }
	public String getMetaKeywords() { return null; }

	public String path() {
		return "/help/Answer.jtp?id=" + id;
	}

	public String url() {
		return Jtp.defaultContextUrl()+path();
	}

	public String link() {
		return 
		"<a href=\""
		+(url())
		+"\">"
		+(question)
		+"</a>"
;
	}

	public String url(HttpServletRequest request) throws IOException {
		return url();
	}

	public String link(HttpServletRequest request) throws IOException {
		return link();
	}

	public static Help getHelp(int id) {
		return map.get(id);
	}

	public static final Help what = new Help(
		1, 
		"What is Nabble?"
){public String answer(){return 
		"\r\n		<p>\r\n		Nabble wants to improve public discussions on the web and provide useful embeddable applications to end users.\r\n		This includes forums, user groups, message boards, mailing lists, photo galleries, newspapers, blogs, etc.  There are many vibrant discussions in these places, so are problems such as cluttered UI, broken search, moderation, and cataloging. Nabble wants to be a place where your discussion can grow and be free of these problems.\r\n		</p>\r\n	"
;}};
	public static final Help free = new Help(
		2, 
		"Is Nabble really free?"
){public String answer(){return 
		"\r\n		<p>\r\n		Yes. Nabble is absolutely free and will remain free to the users. This includes the end users,\r\n		mailing list owners, and webmasters. If your website uses Nabble as a hosted forum or a list archive,\r\n		be assured that there is no limit on traffic or disk space, no hosting fees, no pay-for versions or label schemes.\r\n		Nabble is just free.\r\n		</p>\r\n	"
;}};
	public static final Help add = new Help(
		4, 
		"How do I add my mailing list to Nabble archive?"
){public String answer(){return 
		"\r\n		<p>\r\n		Go the <a href=\"/\">Nabble home page</a>, and click on the <a href=\"/more/MailingListRequest.jtp\">Archive Mailing list</a> link.\r\n		Fill out the form and follow the instructions there.\r\n		</p>\r\n	"
;}};
	public static final Help find = new Help(
		5, 
		"How do I find my mailing list on Nabble?"
){public String answer(){return 
		"\r\n		<p>\r\n		Search your mailing list address from <a href=\"/\">Nabble home page</a>. If there is a match, you will find a forum link in the upper part of the result page.\r\n		</p>\r\n	"
;}};
	public static final Help owner = new Help(
		6, 
		"Do I have to be the list owner to archive a list at Nabble?"
){public String answer(){return 
		"\r\n		<p>\r\n			No. Anybody can add a list to Nabble archive.\r\n			If you subscribe to a list, and find yourself receiving too many emails, or having a hard time searching through the messages, you can consider getting a Nabble archive for the list.\r\n			This way you can view, search, post, entirely from the web without cluttering your inbox.\r\n		</p>\r\n	"
;}};
	public static final Help why = new Help(
		7, 
		"Why is my mailing list archived without my knowledge?"
){public String answer(){return 
		"\r\n		<p>\r\n		Mailing list archive is not something new. Besides Nabble, a public mailing list is very likely archived somewhere else.\r\n		For example, try searching on <a href=\"http://gmane.org/find.php\" target=\"_top\" rel=\"nofollow\">Gmane</a>, <a href=\"http://www.mail-archive.com/\" target=\"_top\" rel=\"nofollow\">Mail-archive</a>, <a href=\"http://marc.theaimsgroup.com/\" target=\"_top\" rel=\"nofollow\">MARC</a>, and <a href=\"http://opensubscriber.com/\" target=\"_top\" rel=\"nofollow\">OpenSubscriber</a>.\r\n		They have all existed long before Nabble. Nabble may have found your public mailing list from these places.\r\n		Or, your list's members may have added your list to Nabble's archive.\r\n		</p>\r\n		<p>\r\n		If you feel upset because nobody asked you for permission, take it easy.\r\n		An archive works like Google. Google will use a crawler to crawl your site to collect the web pages and index them,\r\n		much the same way as an archive using an email address to subscribe to your list to receive the messages and index them.\r\n		Were Google to ask permission from every webmaster, it would take too long, and there\r\n		would be no Google or search engines. But, if you don't like it, we will delete it.\r\n		</p>\r\n	"
;}};
	public static final Help sell = new Help(
		10, 
		"Can Nabble sell the data (archive)?"
){public String answer(){return 
		"\r\n		<p>\r\n		It's like asking can Google sell the web pages in its index?\r\n		Absolutely not. A message belongs to its author. Besides, an email address is sacred.\r\n		</p>\r\n	"
;}};
	public static final Help post = new Help(
		11, 
		"Did Nabble break my subscription policy?"
){public String answer(){return 
		"\r\n		<p>\r\n		Nabble supports many mailing list software such as mailman, ezmlm, and listserv. For all supported list software, Nabble conforms to the mailing list subscription policy. A non-subscriber will be prompted to subscribe to the mailing list before he/she can post to the mailing list. Without subscription, the post will be rejected as a non-subscriber post. Note that only registered users can post from Nabble. The Nabble registration process is the same as the mailing list subscription process. This means extra protection and validation.\r\n		</p>\r\n		<p>\r\n		You can think of Nabble as a web interface to your list. Without it, a user will have to view and post from an email box that tends to clutter. With Nabble, users who prefer the web view can post from the web, and interact with the same email users seamlessly.\r\n		</p>\r\n		<p>\r\n		The feature of bridging a forum and a list is not new. It is called mail-to-news gateway - Gmane.org probably has already archived your list this way. If you still have concerns, please contact us.\r\n		</p>\r\n	"
;}};
	public static final Help userid = new Help(
		12, 
		"Why do I see a user account with my name when I haven't registered?"
){public String answer(){return 
		"\r\n		<p>\r\n		Nabble archives public mailing lists and will create user accounts for users on these lists.  If you have posted to the  mailing lists before, Nabble may have created an unregistered account for you.  Since this account is unregistered, you cannot use it until you register with Nabble.  When you register with Nabble using the same email address as you used on the mailing list, you will be able to take ownership of this account and will be able to post messages.\r\n		</p>\r\n		<p>\r\n		It is important that you use the same email address (that you used for the mailing list) to register because Nabble identifies users by their email addresses.  If you use an email address different from the one that you used for the mailing list, you are just creating a new account.  Nabble currently does not support merging of multiple user accounts.\r\n		</p>\r\n	"
;}};
	public static final Help delpost = new Help(
		13, 
		"How do I delete my posts?"
){public String answer(){return 
		"\r\n		<p>\r\n		Log in to (or register with) Nabble and then you can find and delete your posts on Nabble.\r\n		</p>\r\n		<p>\r\n		Please note that Nabble archives public mailing lists. If you post to a public mailing list, then your message will become public records and anybody can archive it. There are several public mailing list archives like Nabble, for example, Gmane and mail-archive.com; in addition, a mailing list usually has its own native archive. Once you make a public post, it's hard to remove it from the web.\r\n		</p>\r\n		<p>\r\n		Most archives do not allow you to delete your message. With Nabble, you can. But you will need to register with Nabble using the same email address that you used for your post. Please note that we have no particular interest in knowing your email address because your email address is already available to public through the mailing list archives. We require you to register only because we need to verify that you are the owner of the post. After you register, log in, go to your post, and you will find a \"delete\" link to delete your post.\r\n		</p>\r\n	"
;}};
	public static final Help pending = new Help(
		15, 
		"Why is my post \"pending\"? How to fix it?"
){public String answer(){return 
		"\r\n		<p>\r\n		Your post is pending because you posted it to a special Nabble forum which is both a forum and a web\r\n		gateway to a mailing list. Your message is already posted on Nabble, but it has not been accepted by\r\n		the mailing list yet.\r\n		</p>\r\n		<p>\r\n		A mailing list is a subscriber-only email forwarding service. A subscriber sends email to the\r\n		mailing list, and the mailing list fowards his email to all subscribers. This allows subscribers to discuss\r\n		topics by reading and replying via email. Nabble works as a bridge to forward your post to the mailing list.\r\n		If you are a subscriber, the mailing list will take your post and forward it to all subscribers.\r\n		But if you are not, then your post will be rejected and thus it will be in a \"pending\" status.\r\n		</p>\r\n		<p>\r\n		<strong>Are you a registered user of Nabble?</strong> Please note that being registered with Nabble does not mean that you are a subscriber to mailing lists. In fact, each mailing list requires a separate subscription.\r\n		</p>\r\n		<p>\r\n		Have you confirmed your subscription yet? You may have just clicked a \"Subscribe\" button, but may not have followed\r\n		through with the two additional steps:\r\n		</p>\r\n		<ol>\r\n			<li>Check your email for a confirmation email from the mailing list.\r\n			<li>Follow the instruction in the email to confirm subscription.\r\n		</ol>\r\n		<p>\r\n		Sounds complicated? You bet. But the good part of this mechanism is that it helps to filter out careless posters.\r\n		Because most users on a mailing list are dedicated and careful users, you are likely to get quality responses\r\n		once your post goes through.\r\n		</p>\r\n		<h3>How to fix pending messages?</h3>\r\n		<p>\r\n			Nabble doesn't allow you to resend your message to the mailing list.\r\n			The right way of doing this is to compose a new message, which will be sent as a new email.\r\n			You might want to delete your old pending messages in order to keep the forum clean and organized.\r\n			To find your pending messages, go to <b>Your Account > Account Settings > Pending Posts</b>.\r\n		</p>\r\n		<p>\r\n		The most important thing is to make sure you are a subscriber.\r\n		If you haven't subscribed yet, do it and wait for confirmation.\r\n		Then follow the instruction to confirm.\r\n		If you don't remember whether you have subscribed before, subscribe again.\r\n		After you have confirmed a subscription, go back to your pending message and repost the message.\r\n		</p>\r\n\r\n		<h3>I am sure I have subscribed, but why is my message still pending?</h3>\r\n		<p>\r\n		A post to a mailing list will appear as pending right after being posted.\r\n		This is normal because it takes a few minutes for your post to get forwarded and processed by a mailing list server.\r\n		Usually, if you are a subscriber, after a few minutes, your pending message will get posted and the pending messages page will remove that post from the list.\r\n		</p>\r\n		<p>\r\n		When you are a subscriber and you see a post pending for several hours after your have posted, it could be that the mailing list server is slow or unavailable.\r\n		Your post may be pending simply because the mailing list server has not processed it yet.\r\n		Try going to the mailing list website to see if it is slow. Don't post repeatedly. Try reposting in a day or two.\r\n		</p>\r\n		<p>\r\n		Sometimes mailing lists may reject your message for format or editorial reasons. For example, some mailing lists\r\n		do not accept HTML formats, and some forbids certain language or content. Usually, the mailing list will reject\r\n		your post and email you a notice with an explanation. In such cases, go to the pending post to \"Edit\" it so that\r\n		it conforms with the mailing list requirement, then post again. Or, you can simply delete your post.\r\n		</p>\r\n	"
;}};
	public static final Help moderation = new Help(
		16, 
		"How do I remove SPAM or bad users from my forum?"
){public String answer(){return 
		"\r\n		<p>\r\n			SPAM and bad posts are common problems for forums.\r\n			With Nabble, forum owners can easily remove unwanted messages and ban bad users.\r\n			Both actions are available in the dropdown menu close to the message.\r\n		</p>\r\n		<p>\r\n			We should remember that anonymous users can't be banned.\r\n			However, you can disable anonymous posts for your forum by accessing the <b>Options > Users > Control anonymous users</b> action in the forum options menu.\r\n		</p>\r\n	"
;}};
	public static final Help mailingListIntro = new Help(
		17, 
		"What is a \"mailing list\"?"
){public String answer(){return 
		"\r\n		<p>\r\n		A mailing list is an email forwarding service for subscribers. People set up a mailing list to distribute information about a certain topic. If you are interested in the topic, you can subscribe and then start receiving messages via email. You can also email your questions or relevant information to the mailing list which will then forward them to all other subscribers. Some people call \"mailing list\" the email discussion group.\r\n		</p>\r\n		<h2>Nabble provides a web archive/gateway to mailing lists.</h2>\r\n		<p>\r\n		Nabble works as a web archive to mailing lists to allow search and browsing. Also it allows web users to post messages through Nabble which then forwards it as an email to the mailing list. This means web users can join an email discussion through the web and all users are in sync.\r\n		</p>\r\n		<p>\r\n		Nabble supports many mailing list software. For all the supported listserv software, Nabble conforms with the mailing list's subscription policy. This means that a user will need to become a subscriber to a mailing list before he can post through the Nabble web archive.\r\n		</p>\r\n		<p>\r\n		<b>Please note:</b> being a registered Nabble user does not mean you are a subscriber to a mailing list. Each mailing list requires separate subscription.\r\n		</p>\r\n	"
;}};
	public static final Help stopEmails = new Help(
		18, 
		"Why do I receive emails after I made a post on Nabble? How to stop it?"
){public String answer(){return 
		"\r\n		<p>\r\n		If you find yourself receiving many emails (not spam, just regular emails) after making a post on Nabble, don't worry, it can be easily fixed.\r\n		</p>\r\n		<p>\r\n		What happened is that your were probably posting through Nabble to a \"mailing list\", also known as the email discussion group,\r\n		and it requires that you become a subscriber before you can post. You probably remember seeing the prompt to subscribe.\r\n		You have to do that in order for your post to go out, but as a result, you subscribed and that is why you are receiving\r\n		the emails. You should also have received an automatic email from Nabble with a link that you can click to stop\r\n		receiving emails. If you missed that email or don't remember, continue reading.\r\n		</p>\r\n		<h3>How to stop it?</h3>\r\n		<ol>\r\n		<li>Go to the forum where you posted a message.\r\n		<br/>If you remember where you posted, go there directly. If you don't, try to find your post first, then go up one level\r\n		to the forum level. Or, you can search Nabble by the email address of the mailing list. You can find the email address by\r\n		looking for the \"to:\" field in those unwanted emails that you received from the mailing list.\r\n		<br/><br/>\r\n		<li>Click the \"mailing list options\" link.\r\n		<br/>In the subsequent page you will find options to turn off email delievery or simply unsubscribe. Follow through\r\n		the instructions there.\r\n		</ol>\r\n	"
;}};
	public static final Help stopAlert = new Help(
		19, 
		"How do I stop an email alert?"
){public String answer(){return 
		"\r\n		<p>\r\n		At the end of an email alert, there is always a link to stop it. Click that link and you will no longer be alerted.\r\n	"
;}};
	public static final Help restrictions = new Help(
		20, 
		"How do I control who can view and post in my forum? "
){public String answer(){return 
		"\r\n		<p>\r\n			Under the \"Options\" menu, under \"Users\", is the option \"Who can view & post\".\r\n			This page controls who can view and post in this forum.  But if this forum has a parent forum\r\n			and if the parent forum has restrictions, then those restriction will also apply.\r\n			This means that restrictions are only added as you go down your forum hierarchy.\r\n			This makes sense because when you set restrictions, you assume that they will apply to\r\n			all sub-forums as well.\r\n		</p>\r\n		<p>\r\n			Let's look at a few examples.  Suppose you have a forum hierarchy and want to ban anonymous users\r\n			throughout. You would go to the top forum and select that only registered users can create new topics and replies:\r\n		</p>\r\n		<p><img src=\"/images/help/registered_only.png\" width=505 height=108 style=\"padding-left:2em\"/></p>\r\n		<p>\r\n			Now suppose that under the top forum, you have an \"Official Business\" forum where only members of\r\n			a group should be allowed to post.  You would select that only members can create new topics and replies:\r\n		</p>\r\n		<p><img src=\"/images/help/members_only.png\" width=505 height=108 style=\"padding-left:2em\"/></p>\r\n		<p>\r\n			You would then authorize the right members for that \"Official Business\" forum only.\r\n		</p>\r\n		<p>\r\n			Now suppose that under that forum, you have an \"Announcements\" forum where only the organizer should\r\n			post.  The organizer should create that forum and select again that only members can post and reply in that forum,\r\n			but this time not authorize anyone else.  Now only the owner of the \"Announcements\" forum is authorized\r\n			to post there.  But suppose you want to allow members to comment on announcements but not to\r\n			make announcements.  Then instead of members can create new topics, but let everyone reply.\r\n			Note that \"Everyone\" means everyone who would otherwise be allowed to post.  So now within the \"Announcements\" forum,\r\n			only the owner can create threads, but all members can reply to those threads.\r\n		</p>\r\n	"
;}};

	public static final Help copy = new Help(
		9, 
		"Isn't Nabble trying to copy and replace me?"
){public String answer(){return 
		"\r\n		<p>\r\n		Nabble wants to be useful and transparent.  If you feel shocked on seeing the Nabble mirror of your content,\r\n		please relax and be assured that the content is still yours, and you can delete it anytime. Then, before cursing\r\n		Nabble, try asking yourself:\r\n		</p>\r\n\r\n		<ul>\r\n		<li><p>Is Nabble useful?\r\n		<br>You probably will find the archive search useful. Nabble search is fast, and you can cross search all your\r\n		lists instead of searching each list or relying on Google's \"site:archive url\" search (which is a hack because\r\n		Google does not index all your posts, especially the new ones). What's more, some of your users may want a web\r\n		interface to read and post instead of using a cluttered email box. With Nabble, these users can talk from the\r\n		web and interact with the traditional email users seamlessly.\r\n		</p>\r\n		<li><p>Is Nabble taking users away from my site?\r\n		<br>We understand this concern. You put in effort to grow your users, and we have no right to get in between.\r\n		What we offer is an <a href=\""
		+(Help.embed_what_how.url())
		+"\" target=\"_top\" rel=\"nofollow\">\"embeddable\" forum</a>.\r\n		It means that you can customize the Nabble mirror to \"embed\" it into your website. The Nabble mirror will still be hosted at\r\n		Nabble, but you can control the look and feel so that it looks like a part of\r\n		your site, complete with your logo, style sheet, javascript, and even your ads.\r\n		</p>\r\n		<li><p>Is Nabble bypassing me?\r\n		<br>No. <a href=\""
		+(Help.post.url())
		+"\" target=\"_top\" rel=\"nofollow\">Nabble conforms with your subscription policy</a>.\r\n		This means if users want to post to your list via Nabble, they will have to join your list to become subscribers.\r\n		</p>\r\n		<li><p>What's in it for Nabble?\r\n		<br>Nabble wants to become the best place for online discussions. That's it for now. We don't know\r\n		yet how to make money.\r\n		</p>\r\n		</ul>\r\n		<p>\r\n		Keep in mind that by mirroring your discussion on Nabble, you could also expand your subscribers through\r\n		Nabble users. They may join your discussions and thus expand your membership.\r\n		They could also go from the discussion page to visit your website.\r\n		</p>\r\n	"
;}};
	public static final Help listSpam = new Help(
		22, 
		"My list received spam from Nabble. What do I do to prevent it from happening again?"
){public String answer(){return 
		"\r\n		<p>\r\n		We hate spam. We sincerely apologize if a spam comes to your list through Nabble.\r\n		</p>\r\n		<p>\r\n		Please let us know through the <a href=\""
		+(Jtp.supportUrl())
		+"\">support forum</a> if you see or suspect spam. We will take actions immediately.\r\n		</p>\r\n		<p>\r\n		Forum owners can also <a href=\""
		+(Help.moderation.url())
		+"\" target=\"_top\" rel=\"nofollow\">delete spam and ban bad users</a>.\r\n		</p>\r\n	"
;}};
	public static final Help cataloging = new Help(
		24, 
		"What's the right way to organize forums and messages?"
){public String answer(){return 
		"\r\n		<p>\r\n			Nabble offers a flexible way to organize forums and messages.\r\n		</p>\r\n		<p>\r\n			An active forum is great, but its many users and diverse interests often drive the discussion off topic. Nabble tries to address this problem by allowing users to easily create child forums. A child forum structure helps to keep messages focused and properly categorized. The hierarchy is displayed at the parent level for easy drill down. Users who want to ignore off-topic discussions can drill down to the relevant child; and the users who don't mind reading all the messages can still do it at the parent forum level.\r\n		</p>\r\n		<h3>Create a child forum only when it is truly needed</h3>\r\n		<p>\r\n			Creating child forums is a powerful way to add a structure to your discussion, but you should be careful to avoid overdoing it. For example, if you are in a new forum with few messages and users, why bother creating a fancy structure? No matter how well structured, a forum without users is still a dead forum. What's more, a structure that goes too wide or too deep could get people confused as to where to visit or post, thus making it difficult for them to join the discussion. We recommend that you create child forums only when it is truly needed.\r\n		</p>\r\n		<h3>Force users to select a child forum to post</h3>\r\n		<p>\r\n			After you have created child forums, you may find users ignore it when they post, and most of the messages continue to get posted at the parent level. In such cases, don't just blame the users. Take a good look at your design and ask, does it make sense? Is it clear and easy to follow? Is the hierarchy too wide or too deep? If you feel certain that the structure is sound, and that you and a few other forum members support it, then you can use the \"Who Can View & Post\" feature to <a href=\""
		+(Help.restrictions.url())
		+"\">make the parent forum read-only</a>. This means that a user cannot post a new message in the parent forum. They will be prompted to drill down to a child forum to post there.\r\n		</p>\r\n		<h3>Keep the hierarchy efficient</h3>\r\n		<p>\r\n			You can build an elaborate structure by using a combination of parent and child categories and forums, but don't overdo it. The goal of a hierarchy is to help users navigate. Does yours help people get to the right forum quickly? For example, if a category has only one child forum under it, then it is a waste, because it just means a useless extra click for navigation.\r\n		</p>\r\n	"
;}};
	public static final Help password = new Help(
		25, 
		"How does Nabble store passwords?"
){public String answer(){return 
		"\r\n		<p>\r\n			Nabble does not store your password in plain text. Only a cryptographic digest of you password is kept in our database. This is why if you forget your password we cannot email it back to you. But if you do forget it, we can always email you a link which allows you to reset your password and pick a new one.\r\n		</p>\r\n		<p>\r\n			It is a good security practice, however, to use different passwords for different websites, so please do not choose a password that you already use elsewhere.\r\n		</p>\r\n	"
;}};
	public static final Help seo = new Help(
		27, 
		"Is my application optimized for search engines?"
){public String answer(){return 
		"\r\n		<p>\r\n		Yes. Nabble's content pages are designed with SEO (Search Engine Optimization) in mind.\r\n		Our SEO effort goes further beyond the usual tags and headers to advanced techniques such as URL encoding and PageRank distribution.\r\n		</p>\r\n	"
;}};
	public static final Help mirror = new Help(
		30, 
		"Can I mirror my groups on Nabble?"
){public String answer(){return 
		"\r\n		<p>\r\n		If you own a discussion group such as Yahoo or Google group, you can mirror it on Nabble by using Nabble's mailing list archive feature. Nabble complements your existing group by providing a nice threaded view and a <a href=\""
		+(Help.search.url())
		+"\">powerful search</a>. What's more, if you have a quality group you may expand it by getting new users from Nabble.\r\n		</p>\r\n		<p>\r\n		Most importantly, Nabble adds an extra layer of redundancy. With Nabble, you can download all your content for backup or moving purposes anytime you want. This means you will never get stuck with any forum provider including Nabble.\r\n		</p>\r\n	"
;}};
	public static final Help search = new Help(
		31, 
		"What search features does Nabble provide?"
){public String answer(){return 
		"\r\n		<p>\r\n		Nabble allows many flavors of specific search.\r\n		</p>\r\n		<ul>\r\n		<li>You can search entire Nabble (with the help of Google Search).\r\n		<li>You can search within an application (e.g., forum, photo gallery, newspaper, blog) to include all subcategories below.\r\n		<li>You can narrow your search result by date.\r\n		<li>You can search messages by user. Click a user name link to go to the user's profile page, search from there. Then you can narrow your search result by date, by category, or by both.\r\n		<li>Nabble search supports keyword stemming, i.e. search, searching, searched, searches...\r\n		</ul>\r\n\r\n		<h2>Examples</h2>\r\n\r\n		<p>\r\n		<table class=\"search-tips-table\" style=\"\r\n			width: 100%;\r\n			border-collapse: collapse;\r\n		\">\r\n		<style type=\"text/css\">\r\n		.nabble .search-tips-table th {\r\n			text-align: left;\r\n			font-weight: bold;\r\n			padding: .5em;\r\n			vertical-align: top;\r\n		}\r\n		.nabble .search-tips-table td {\r\n			padding: .3em;\r\n			border-bottom-width: 1px;\r\n			border-bottom-style: solid;\r\n			vertical-align: top;\r\n		}\r\n		</style>\r\n		<tr>\r\n			<th>Your search</th>\r\n			<th>What will search results show</th>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">hello world</code></td>\r\n\r\n			<td class=\"info-message\">Messages with both <code class=\"important\">hello</code> and <code class=\"important\">world</code></td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">\"hello world\"</code></td>\r\n			<td class=\"info-message\">Messages with the phrase <code class=\"important\">hello world</code></td>\r\n\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">hello OR world</code></td>\r\n			<td class=\"info-message\">Messages with either <code class=\"important\">hello</code> or <code class=\"important\">world</code></td>\r\n		</tr>\r\n		<tr>\r\n\r\n			<td class=\"info-message\"><code class=\"important\">hello AND world</code></td>\r\n			<td class=\"info-message\">Messages with <code class=\"important\">hello</code> and <code class=\"important\">world</code>; same as entering <code class=\"important\">hello world</code></td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">\"hello world\" lucene</code></td>\r\n\r\n			<td class=\"info-message\">Messages with both the phrase <code class=\"important\">hello world</code> and <code class=\"important\">lucene</code></td>\r\n		</tr>\r\n\r\n\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">hello NOT world</code></td>\r\n			<td class=\"info-message\">Messages that have <code class=\"important\">hello</code>, but do not have <code class=\"important\">world</code></td>\r\n\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">(\"hello world\" lucene) OR apache</code></td>\r\n			<td class=\"info-message\">Messages with either both <code class=\"important\">hello world</code> and <code class=\"important\">lucene</code>, or <code class=\"important\">apache</code></td>\r\n		</tr>\r\n\r\n\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">lucene NOT \"hello world\"</code></td>\r\n			<td class=\"info-message\">Messages with <code class=\"important\">lucene</code>, but not the phrase <code class=\"important\">hello world</code></td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">hello*</code></td>\r\n\r\n			<td class=\"info-message\">Messages that have words that begin with <code class=\"important\">hello</code>. For example, <code class=\"important\">hello</code>, <code class=\"important\">helloworld</code>, and <code class=\"important\">hellooooooo</code>. * is a wildcard and matches 0 or more characters.</td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">par?</code></td>\r\n\r\n			<td class=\"info-message\">Messages that have words such as <code class=\"important\">park</code>, <code class=\"important\">part</code>, <code class=\"important\">para</code>, and so forth. ? is a 1-character wildcard and matches 1 and only 1 character.</td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">subject:\"hello world\"</code></td>\r\n			<td class=\"info-message\">Messages with the phrase <code class=\"important\">hello world</code> in its <code class=\"important\">subject</code> only.</td>\r\n\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">subject:(hello world)</code></td>\r\n			<td class=\"info-message\">Messages with <code class=\"important\">hello</code> and <code class=\"important\">world</code> in its <code class=\"important\">subject</code> only. Note the use of () to groups words together, rather than \"\" which denote a phrase.</td>\r\n	    </tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">message:\"hello world\"</code></td>\r\n			<td class=\"info-message\">Messages with the phrase <code class=\"important\">hello world</code> in its <code class=\"important\">message body</code> only.</td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">author:\"Erik Hatcher\"</code></td>\r\n			<td class=\"info-message\">Messages of <code class=\"important\">Erik Hatcher</code> only.</td>\r\n		</tr>\r\n		<tr>\r\n			<td class=\"info-message\"><code class=\"important\">roam~</code></td>\r\n			<td class=\"info-message\">Messages with <code class=\"important\">foam</code>, <code class=\"important\">roam</code>, and so forth. In essence, messages that match or sound like <code class=\"important\">roam</code>.</td>\r\n		</tr>\r\n		</table>\r\n		</p>\r\n\r\n		<a name=\"search1\"><h2>Search Using Words or Phrases </h2></a>\r\n		<p>You may search Nabble using a single-word (e.g., \"test\" or \"hello\") or use a group of words or a phrase surrounded by double quotes (e.g., \"hello dolly\"). When searching by a group of words or a phrase, Nabble will return only those items that have both the words present. </p>\r\n\r\n		<a name=\"search2\"><h2>Boolean Searches</h2></a>\r\n		<p>Boolean operators allow combining of search terms using logical operators such as AND, OR, and NOT. Please note that the Boolean operators must be all caps as in the examples below:</p>\r\n\r\n		<ul>\r\n			<li>To search for documents that contain \"debian linux\" and \"java\" use: \"debian linux\" AND java </li>\r\n			<li>To search for documents that contain either \"jetty\" or \"resin\" use: jetty OR resin </li>\r\n			<li>To search for documents that contain \"linux\" but not \"kernel\" use: linux NOT kernel </li>\r\n			<li>To search for documents that contain \"lucene\" or \"nutch\" but not \"apache\" use: (lucene OR nutch) NOT apache </li>\r\n		</ul>\r\n\r\n		<a name=\"search3\"><h2>Search Messages, Subjects, Authors</h2></a>\r\n		<p>You can limit your search to either the message text, the subject of the message, the author name, the name of the forum, and/or the topic of the discussion by using the syntax shown in examples below: </p>\r\n\r\n		<ul>\r\n			<li>subject:\"lord of the rings\" message:film </li>\r\n			<li>author:\"doug cutting\" message:lucene </li>\r\n		</ul>\r\n\r\n		<p>If you don't specify the type of search, it will search all -- message, subject, author. </p>\r\n\r\n		<a name=\"search4\"><h2>Wildcard Searches </h2></a>\r\n		<p>Nabble allows you to do both single and multiple character wildcard searches. </p>\r\n\r\n		<ul>\r\n			<li>To perform a single character wildcard search use the \"?\" symbol. The single character wildcard search looks for terms that match that with the single character replaced. For example, to search for \"text\" or \"test\" you can use: te?t </li>\r\n			<li>To perform a multiple character wildcard search use the \"*\" symbol. Multiple character wildcard searches looks for 0 or more characters. For example, to search for photo, photography, photographer, you can use: photo* </li>\r\n			<li>You can also use the wildcard searches in the middle of a term.</li>\r\n		</ul>\r\n\r\n		<p><strong>Note:</strong> You cannot use a * or ? symbol as the first character of a search. Also if your wildcard search will result in too many matches, it cannot be processed.</p>\r\n\r\n		<a name=\"search5\"><h2>Fuzzy Searches</h2> </a>\r\n		<p>To do a fuzzy search use the tilde, \"~\", symbol at the end of a single word search. For example to search for a term similar in spelling to \"roam\" use the fuzzy search: roam~ </p>\r\n\r\n		<p>This search will find terms like foam and roams. </p>\r\n\r\n		<a name=\"search6\"><h2>Proximity Searches </h2></a>\r\n		<p>Nabble supports proximity search -- that is, finding words that are a within a specific distance away from each other. To do a proximity search use the tilde, \"~\", symbol at the end of a Phrase. For example to search for a \"apache\" and \"jakarta\" within 10 words of each other in a document use: \"jakarta apache\"~10 </p>\r\n\r\n	"
;}};
    public static final Help orphan = new Help(
		34, 
		"What does \"parent message unknown\" mean?"
){public String answer(){return 
		"\r\n		<p>\r\n		Some messages that we receive from mailing lists don't have enough information for us to determine which message the message we received was in reply to.  In other words, we don't know the parent of that message.  So we mark the message with the image <img alt=\"Parent Message unknown\" title=\"Parent Message unknown\" width=\"13\" height=\"14\" src=\"/images/icon_orphan.png\" style=\"vertical-align:middle; vertical-align: absmiddle;\" border=\"0\" /> and usually assign the first post in the thread as the parent.  This only matters in the \"Threaded\" view where you can see the structure of messages and their replies.\r\n		</p>\r\n	"
;}};
	public static final Help security = new Help(
		35, 
		"Does Nabble have a security policy for mailing lists?"
){public String answer(){return 
		"\r\n		<p>\r\n		Yes.\r\n		</p>\r\n		<p>\r\n		Javascript code is not allowed in Nabble's archive.\r\n		Thus, any code that may arrive with an email is blocked for your security.\r\n		Only the safe part of the message is displayed in the archive, and\r\n		we also show a warning that the JavaScript was blocked.\r\n		</p>\r\n		<p>Nabble also removes <b>&lt;style&gt;</b> tags because they might prevent messages from being displayed properly.</p>\r\n	"
;}};
	public static final Help embed_what_how = new Help(
		36, 
		"Embeddable Forum, Photo Gallery, News, Blog, Mailing List & Other Apps!"
){
		public String getMetaDescription() { return "Nabble has different embeddable applications, including free forum, photo gallery, news, blog and much more! All applications have no installation, no HTML hassle, just copy and paste of a small javascript code."; }
		public String getMetaKeywords() { return "free, embeddable, forum, photo gallery, newspaper, blog, mailing list archive, easy, embedding, embedded, embed my forum, hosted, website, site, HTML"; }
		public String answer(){return 
		"\r\n\r\n		<h2>All Nabble apps are naturally embeddable!</h2>\r\n\r\n		<p>Yes, with Nabble, you get an embeddable forum, embeddable photo gallery, embeddable news, embeddable blog, embeddable mailing list & archive... and there are more to come!</p>\r\n		<p>All these embeddable apps are fully featured web applications. They all have full text search, user profile and access control, email subscription and integration, XML feed, moderation, CSS customization, unlimited uploading of pictures and files, threading, cataloging ... What's more, embedding a Nabble app is as easy as embedding a YouTube video - you just copy and paste a line of javascript code into your HTML page.</p>\r\n		<p>You may have seen some embeddable widgets, but Nabble's \"embeddability\" is far more advanced. A widget runs in a fixed frame, making the content either underflows or overflows (frame scrolling is your only option). In contrast, a Nabble embeddable app adjusts its height automatically and always fit seamlessly into your site.</p>\r\n\r\n		<p>All you have to do is go to your application, click on \"Options > Embedding options\" and you will see a text area with a code snippet.</p>\r\n		<p>Copy and paste that snippet into your HTML web page. Now open the page and you will see that your forum loads up seamlessly. No installation, no HTML hassle, just copy and paste.</p>\r\n		<p><b>Embedding may have issues with third-party cookies.</b>  This can be a problem if the user has disabled third-party cookies or if they are using Safari.  To avoid problems, we suggest that you use a <a href=\""
		+(Help.domain_names.url())
		+"\">custom domain</a> for Nabble that matches your domain.  For example, if your website is www.your-domain.com, you could use forum.your-domain.com for Nabble.  This ensures that Nabble's cookies aren't considered third-party by the browser.</p>\r\n		<p>Users will browse, search, post, and navigate without ever leaving your page. Your embedded application works as if it were custom built, installed, and visually integrated with your website.</p>\r\n		<p>Try this feature by creating a new application (e.g., forum, photo gallery, newspaper, blog, etc.) or using any Nabble forum that allows embedding. It is dead easy and seamless.</p>\r\n		"
;}};

		public static final Help embed_permalinks = new Help(
		38, 
		"How do I link to a page in an embedded application?"
){public String answer(){return 
		"\r\n		<p>\r\n		You will notice that when you navigate through an embedded application (e.g., forum, photo gallery, blog, etc), the URL in the browser doesn't change.\r\n		To get the URL of a specific page, such as a thread or a post, in an embedded application, look on the top-right corner of each page for <b>Permalinks</b>.</p>\r\n		<p><img src=\"/images/help/help_embed_permalink.png\" style=\"padding-left:2em\"/></p>\r\n		<p>When you click on the \"Permalink\" link, you will see the page URL in a text field. All you have to do is click on the URL to\r\n		select it, and then copy it (e.g., ctrl+c).</p>\r\n		<p><img src=\"/images/help/help_embed_permalink2.png\" style=\"padding-left:2em\"/></p>\r\n		Even though the URL points to the <i>nabble.com</i> domain, the browser will redirect to the embedding page so that it will look\r\n		exactly like it was when you first got the permalink (you should <a href=\""
		+(Help.embed_redirect.url())
		+"\">enable this option</a> to work).\r\n		</p>\r\n	"
;}};
	public static final Help embed_skin = new Help(
		39, 
		"How can I customize the appearance of my embeddable application?"
){
		public String getMetaDescription() { return "All Nabble applications are fully customizable. You can easily change the CSS stylesheet of your embeddable forum, photo gallery, newspaper, blog and mailing list archives."; }
		public String getMetaKeywords() { return "customizable, embeddable, forum, photo gallery, newspaper, blog, mailing list archive, css, skins, examples, simple, easy"; }
		public String answer(){return 
		"\r\n		<p>\r\n			Go to \"Options > Editor > Change appearance\" link in your application.\r\n			This screen has easy options to customize the basic look of your application:\r\n		</p>\r\n		<p><img src=\"/images/help/help_style_easy.png\" style=\"padding-left:2em\" alt=\"Here you can customize details about your application\"/></p>\r\n		<p>\r\n			If you want a more detailed customization, you can go to the \"Look and Feel\" section in order to provide a custom CSS (Cascading Style Sheets) text for your application.\r\n		</p>\r\n		<p><img src=\"/images/help/help_style_tab.png\" style=\"padding-left:2em\"/></p>\r\n		<p>As you can see in the image above, Nabble has some predefined styles ready for you. You can simply click on them to get their CSS into the text area.\r\n			After that, you can modify the text the way you want. This is a valuable source of examples that you can also use to learn more about Nabble's style.</p>\r\n		<h2>How to write your custom CSS</h2>\r\n		<p>\r\n			If you want to change the appearance of your application, you have to override <a href=\""
		+(Shared.getCssPath())
		+"\">Nabble's style</a>.\r\n			The <b>cheat table</b> below can easily guide you through this process. Learn how each style is defined and change them as you want.\r\n			Since colors may require hexadecimal codes, you can use a tool like <a href=\"http://www.colorpicker.com/\" target=\"_new\" rel=\"nofollow\">Color Picker</a> to help you in this sense.\r\n		</p>\r\n		<p class=\"medium-border-color info-message\" style=\"padding:.7em;border-width:1px;border-style:solid;\">If you want to import an external CSS file, you should use the following command:<br/><font face=monospace size=3>@import url(\"http://www.example.com/file.css\");</font></p>\r\n		<style>\r\n			.nabble .item-small { font-size:90%; }\r\n			.nabble .color-box { border:1px solid #000000; }\r\n		</style>\r\n		<table class=\"editor-table\" cellpadding=\"5\" style=\"font-size:90%;\">\r\n			<tr class=\"shaded-bg-color\">\r\n				<td>Item to Change</td>\r\n				<td>Default Value</td>\r\n				<td>How to Change (Example)</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Font</b><div class=\"item-small\">Font family and its size.</div></td>\r\n				<td>Verdana 0.84em</td>\r\n				<td>\r\n					body, input, button, textarea, select {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;font-family: <b>Tahoma</b>;<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;font-size: <b>0.8em</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Background Color</b><div class=\"item-small\">Background of the pages.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#FFFFFF\">&nbsp;&nbsp;&nbsp;</span> FFFFFF (white)</td>\r\n				<td>\r\n					body, .nabble, .nabble .no-bg-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Text Color</b><div class=\"item-small\">Color of texts (paragraphs, etc.).</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#000000\">&nbsp;&nbsp;&nbsp;</span> 000000 (black)</td>\r\n				<td>\r\n					.nabble,<br/>\r\n					.nabble table,<br/>\r\n					.nabble .info-message th,<br/>\r\n					.nabble .message-text, .small,<br/>\r\n					.nabble .editor-table td, p, form,<br/>\r\n					small, ul, table td, .breadcrumbs {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>\r\n					}<br/>\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Link Color</b><div class=\"item-small\">Color of unvisited links.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#0000EE\">&nbsp;&nbsp;&nbsp;</span> 0000EE</td>\r\n				<td>\r\n					.nabble a:link,<br/>\r\n					.nabble a.not-visited-link {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Link Color (Visited)</b><div class=\"item-small\">Color of visited links.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#551A8B\">&nbsp;&nbsp;&nbsp;</span> 551A8B</td>\r\n				<td>\r\n					.nabble a:visited,<br/>\r\n					.nabble a.visited-link {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Header Text Color (H1)</b><div class=\"item-small\">Color of header texts (big titles, etc.).</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#333333\">&nbsp;&nbsp;&nbsp;</span> 333333</td>\r\n				<td>\r\n					.nabble h1 {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Header Text Color (H2)</b><div class=\"item-small\">Color of small header texts.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#000000\">&nbsp;&nbsp;&nbsp;</span> 000000</td>\r\n				<td>\r\n					.nabble h2 {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Important Text</b><div class=\"item-small\">Color of important texts.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#cc0000\">&nbsp;&nbsp;&nbsp;</span> CC0000</td>\r\n				<td>\r\n					.nabble .important {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Form Label Text</b><div class=\"item-small\">Color of labels on forms and other special places.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#666666\">&nbsp;&nbsp;&nbsp;</span> 666666</td>\r\n				<td>\r\n					.nabble th,<br/>\r\n					.nabble .form-label,<br/>\r\n					.nabble .weak-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n				<tr>\r\n				<td><b>Light Background</b><div class=\"item-small\">Color of light backgrounds, which are used in some areas of the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#F5F5F5\">&nbsp;&nbsp;&nbsp;</span> F5F5F5</td>\r\n				<td>\r\n					.nabble .light-bg-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Shaded Background</b><div class=\"item-small\">Color of shaded backgrounds, which are used in some areas of the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#EEEEEE\">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>\r\n				<td>\r\n					.nabble .shaded-bg-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Dark Background</b><div class=\"item-small\">Color of dark backgrounds, which are used in some areas of the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#DDDDDD\">&nbsp;&nbsp;&nbsp;</span> DDDDDD</td>\r\n				<td>\r\n					.nabble .dark-bg-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Error Message</b><div class=\"item-small\">Color of error messages.</div></td>\r\n				<td><span class=\"color-box\" style=\"border-color:#cc3300;background-color:#ffffcc\">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>\r\n				<td>\r\n					.nabble .error-message {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Info Message</b><div class=\"item-small\">Color of info messages.</div></td>\r\n				<td><span class=\"color-box\" style=\"border-color:#ffcc33;background-color:#ffffcc\">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>\r\n				<td>\r\n					.nabble .info-message {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Highlight</b><div class=\"item-small\">Color of highlights, which are used to catch user's attention.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#ffff99\">&nbsp;&nbsp;&nbsp;</span> FFFF66</td>\r\n				<td>\r\n					.nabble .highlight {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Light Border Color</b><div class=\"item-small\">Color of the light border, which is used to separate areas on the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#eeeeee\">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>\r\n				<td>\r\n					.nabble .light-border-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Medium Border Color</b><div class=\"item-small\">Color of the medium border, which is used to separate areas on the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#cccccc\">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>\r\n				<td>\r\n					.nabble .medium-border-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Dark Border Color</b><div class=\"item-small\">Color of the dark border, which is used to separate areas on the screen.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#666666\">&nbsp;&nbsp;&nbsp;</span> 666666</td>\r\n				<td>\r\n					.nabble .dark-border-color {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Dropdown Colors</b><div class=\"item-small\">Colors of the dropdown box.</div></td>\r\n				<td><span class=\"color-box\" style=\"border-color:#cccccc;background-color:#eeeeee\">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>\r\n				<td>\r\n					span.dropdown table {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Dropdown Item Colors</b><div class=\"item-small\">Colors of each dropdown item.</div></td>\r\n				<td>\r\n					<span class=\"color-box\" style=\"background-color:#0000EE\">&nbsp;&nbsp;&nbsp;</span> 0000EE (foreground / normal and hover)<br/><br/>\r\n					<span class=\"color-box\" style=\"background-color:transparent\">&nbsp;&nbsp;&nbsp;</span> Transparent (background normal)<br/><br/>\r\n					<span class=\"color-box\" style=\"background-color:#dddddd\">&nbsp;&nbsp;&nbsp;</span> DDDDDD (background hover)\r\n				</td>\r\n				<td>\r\n					<i>/* Normal */</i><br/>\r\n					span.dropdown-item {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Date Color</b><div class=\"item-small\">Color used to display dates of messages.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#6a6a6a\">&nbsp;&nbsp;&nbsp;</span> 6A6A6A</td>\r\n				<td>\r\n					span.post-date {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Author Color</b><div class=\"item-small\">Color used to display the author name on messages.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#116611\">&nbsp;&nbsp;&nbsp;</span> 116611</td>\r\n				<td>\r\n					span.post-author {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Subject Color</b><div class=\"item-small\">Color used to display subjects of messages.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#111166\">&nbsp;&nbsp;&nbsp;</span> 111166</td>\r\n				<td>\r\n					.post-subject {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n            <tr>\r\n				<td><b>Message Preview Color</b><div class=\"item-small\">Color used to display the message preview line (snippets).</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#909090\">&nbsp;&nbsp;&nbsp;</span> 909090</td>\r\n				<td>\r\n					span.post-snippet {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Post Hover Color</b><div class=\"item-small\">Color used to highlight a post when the user moves the mouse over it.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#eeeeee\">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>\r\n				<td>\r\n					.post-hover {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Post Box</b><div class=\"item-small\">Box where the post is displayed.</div></td>\r\n				<td><span class=\"color-box\" style=\"background-color:#D9D9D9\">&nbsp;&nbsp;&nbsp;</span> D9D9D9</td>\r\n				<td>\r\n					div.post-border {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>\r\n					}<br/>\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td><b>Relationship Lines</b><div style=\"font-size:80%\">Lines that connect parents and children posts. This item requires images for the lines.</div></td>\r\n				<td>N/A</td>\r\n				<td>\r\n					span.connect-line {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url(\"<b>&lt;image-URL&gt;</b>\");<br/>\r\n					}<br/>\r\n					<br/>\r\n					span.connect-end {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url(\"<b>&lt;image-URL&gt;</b>\");<br/>\r\n					}<br/>\r\n					<br/>\r\n					td.connect-end {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url(\"<b>&lt;image-URL&gt;</b>\");<br/>\r\n					}<br/>\r\n					<br/>\r\n					td.connect-node {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url(\"<b>&lt;image-URL&gt;</b>\");<br/>\r\n					}<br/>\r\n					<br/>\r\n					td.connect-node-closed {<br/>\r\n					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url(\"<b>&lt;image-URL&gt;</b>\");<br/>\r\n					}\r\n				</td>\r\n			</tr>\r\n		</table>\r\n	"
;}};
	public static final Help embed_redirect = new Help(
		40, 
		"Is my embedded application also available on Nabble's website?"
){public String answer(){return 
		"\r\n		<p>\r\n		Yes, but you have the option to redirect all visits to your website. In this case,\r\n		when someone tries to access your application or posts, the browser will redirect to\r\n		your website and the desired page will be displayed. This option allows our search\r\n		engine to find messages from your application, but users will be redirected if they try\r\n		to open those messages.\r\n		 </p>\r\n		<p>\r\n		To configure this option, go to the page where your application is embedded in and click\r\n		on <i>\"Options > Embedding options\"</i>:\r\n		</p>\r\n		<p><img src=\"/images/help/help_embed_default.png\" style=\"padding-left:2em\"/></p>\r\n	"
;}};

	private static class Lazy {
		private static final String[] examples = new String[]{
			"<quote>some text</quote>",
			"<quote author='Bob'>some text</quote>",
			"<email>someone@nabble.com</email>",
			"<raw>\nuninterpreted HTML like <a href='#'>link</a>\n</raw>",
		};
		private static final String exampleRows;
		static {
			StringBuilder buf = new StringBuilder();
			for( String example : examples ) {
				buf.append( 
		"\r\n					<tr>\r\n						<td class=\"medium-border-color\">"
		+(HtmlUtils.htmlEncode(example))
		+"</td>\r\n						<td class=\"second medium-border-color\">"
		+(getHtml(example))
		+"</td>\r\n					</tr>\r\n				"
 );
			}
			exampleRows = buf.toString();
		}
	}

	private static String getHtml(String text) {
		try {
			Html html = new Html(text);
			HtmlListNamespace ns = new HtmlListNamespace(html,null, nabble.model.Message.Format.HTML);
			Program program = Program.getInstance(ModuleManager.getGenericModules());
			Template template = program.getTemplate( "process_message_html",
				BasicNamespace.class, HtmlListNamespace.class
			);
			template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(),
				new BasicNamespace(template), ns
			);
			return ns.toString();
		} catch(CompileException e) {
			logger.error("",e);
			throw new RuntimeException(e);
		}
	}

	public static final Help formatting = new Help(
		41, 
		"How are messages formatted?"
){public String answer(){return 
		"\r\n		<p>For formatting, we use standard HTML tags.</p>\r\n\r\n		<p>By default, your message is assumed to be text.  In this case, we will process some HTML tags but we will generally show your text as your entered it.  If you check the \"Message is in HTML Format\" checkbox, then you can enter HTML.</p>\r\n\r\n		<p>We support some special tags which we process. Here is how they are used:</p>\r\n\r\n		<p>\r\n		<style type=\"text/css\">\r\n			table.type-examples {\r\n				border-collapse:collapse;\r\n			}\r\n			table.type-examples td {\r\n				padding: .5em;\r\n				border-bottom-width:1px;\r\n				border-bottom-style: solid;\r\n			}\r\n			table.type-examples td.second {\r\n				border-left-width:1px;\r\n				border-left-style: solid;\r\n			}\r\n		</style>\r\n		<table class=\"type-examples\">\r\n			<tr>\r\n				<td class=\"shaded-bg-color medium-border-color\"><b>You Type</b></td>\r\n				<td class=\"second shaded-bg-color medium-border-color\"><b>We Show</b></td>\r\n			</tr>\r\n			"
		+(Lazy.exampleRows)
		+"\r\n		</table>\r\n		</p>\r\n	"
;}};

	public static final Help anonymous = new Help(
		42, 
		"What are anonymous users?"
){public String answer(){return 
		"\r\n		<p>\r\n			Anonymous users are users that didn't register with Nabble.\r\n			All Nabble requires from them is a name that is displayed together with the message.\r\n			Forums that allow anonymous users tend to have more participation, but they might generate confusion when users provide false or deceiving names.\r\n			As the forum owner, you can always remove those messages from the forum.\r\n		</p>\r\n		<p>If you don't want anonymous users in your forum, you can disable them by accessing <b>Options > Users > Control anonymous users</b>.</p>\r\n	"
;}};

	public static final Help mixed = new Help(
		43, 
		"How can I fix a mixed bulletin board?"
){public String answer(){return 
		"\r\n		<p>\r\n			In traditional forums, a bulleting board only shows subcategories where users are allowed to post messages.\r\n			With Nabble, any forum can be displayed as a bulletin board and this might create a strange board with threads and forums mixed in the same list.\r\n			This situation is not easy to create since Nabble doesn't allow users to post new topics under a board,\r\n			but you could face this problem if you change a regular forum into a bulletin board format or move threads directly to the board.\r\n		</p>\r\n		<p>\r\n			A mixed board generally isn't a good idea and should be fixed in order to avoid confusion.\r\n			Note that Nabble doesn't hide threads in that view because this would increase the confusion among users.\r\n			It is the forum owner's responsibility to keep the forum clean and organized.\r\n		</p>\r\n		<h3>How to fix it?</h3>\r\n		<p>\r\n			If your forum has a mixed bulletin board, do the following:\r\n		</p>\r\n		<ol>\r\n			<li style=\"padding-bottom:.3em\">If you have just a few threads under the board, you can move them one by one to the appropriate sub-forum.</li>\r\n			<li>\r\n				If the number of threads is high and moving one by one is inefficient, you should create a new board and move the current forum as a sub-forum of it.\r\n				You might have to move other sub-forums around in order to rebuild the bulletin board.\r\n			</li>\r\n		</ol>\r\n	"
;}};

	public static final Help subscriptions = new Help(
		45, 
		"Is it possible to post messages through email?"
){public String answer(){return 
		"\r\n		<p>\r\n			Yes. Nabble has email subscriptions that allow you to receive emails for each message\r\n			posted under a forum. If you reply to those emails, your response will be appended to\r\n			the discussion in the forum archive.\r\n		</p>\r\n		<p>\r\n			To subscribe to a forum, open the forum page and click on <i>Options > Subscribe via email</i>.\r\n			You can choose if you want to receive an email for each message posted or just new topics.\r\n		</p>\r\n\r\n		<h2>Detailed Explanation</h2>\r\n\r\n		<p>\r\n		All forums at Nabble have a built-in mailing list that people can use to communicate.\r\n		In other words, users can compose, read and reply to messages via email independently of the forum web interface.\r\n		</p>\r\n\r\n		<p>If you want to subscribe to a mailing list, open the forum interface and click on \"Options > Subscribe via email\" as seen below:</p>\r\n\r\n		<p><img src=\"/images/help/subscribe.png\" alt=\"Subscribe via email\"></p>\r\n\r\n		<p>Here you can see the options when you click on that link:</p>\r\n\r\n		<p><img src=\"/images/help/subscribe2.png\" alt=\"Subscription options\"></p>\r\n\r\n		<p><b>(1) Individual emails</b> - You receive one email for each new post under the forum. If you reply to such emails, your message will be archived as a new reply on the forum.</p>\r\n\r\n		<p><b>(2) Digest</b> - You receive one email with a summary of all posts created in the last 24 hours. You can't reply to this type of email.</p>\r\n\r\n		<p>To manage your subscriptions, click on your profile (top right corner), then click on \"Personal Settings > Email Subscriptions\". From that screen you can change and remove subscriptions.</p>\r\n\r\n		<h2>Posting via Email</h2>\r\n\r\n		<p>To know the email of a given forum, go to the forum and click on \"Options > Post by email...\". To prevent spam, forum addresses are unique for each user. So you can't get a forum address and send it to your friends (they must click on that link).</p>\r\n	"
;}};

	public static final Help embed_js_options = new Help(
		48, 
		"Can I change other behaviors of an embedded forum?"
){public String answer(){return 
		"\r\n		<p>\r\n			Yes. Besides the <a href=\""
		+(Help.embed_redirect.url())
		+"\" rel=\"nofollow\">redirect option</a>, we have a few options that you can use to change other behaviors of your embedded forum.\r\n			These options must be set as javascript variables in your HTML page (place them before the embedding code).\r\n			For example, you can add the following code to your page:\r\n		</p>\r\n		<div style=\"font-family:monospace;margin:1em;\">\r\n			&lt;script type=\"text/javascript\"><br>\r\n			&nbsp;&nbsp;&nbsp;nabble_width = \"500px\";<br>\r\n			&nbsp;&nbsp;&nbsp;nabble_ignore_scroll = true;<br>\r\n			&nbsp;&nbsp;&nbsp;nabble_ignore_title = true;<br>\r\n			&lt;/script><br>\r\n		</div>\r\n		<style type=\"text/css\">\r\n			table.info td {\r\n				padding: .5em;\r\n			}\r\n			tr.header td {\r\n				font-weight:bold;\r\n				padding: .1em .5em;\r\n			}\r\n		</style>\r\n		<table class=\"info\">\r\n			<tr class=\"header\">\r\n				<td class=\"shaded-bg-color\">Variable</td>\r\n				<td class=\"shaded-bg-color\">Description</td>\r\n			</tr>\r\n			<tr>\r\n				<td>nabble_width</td>\r\n				<td>\r\n					Use this variable if you want to have an embedded forum with fixed width.\r\n					The default value is \"100%\" and you can change it according to standard CSS rules\r\n					(e.g., \"50%\", \"10em\", \"500px\").\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td>nabble_ignore_scroll</td>\r\n				<td>\r\n					Set this variable to <b>true</b> if you don't want the embedded forum to\r\n					scroll to specific posts or messages. By default, the embedded forum will\r\n					eventually scroll the page to specific messages depending on the user navigation\r\n					and clicked links.\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td>nabble_scroll_top</td>\r\n				<td>\r\n					Set this variable to <b>true</b> if you want the embedded forum to\r\n					scroll to the top of your HTML page whenever the user navigates through the forum.\r\n					By default, the forum will scroll to its top, which is not necessarily the top of your\r\n					HTML page.\r\n				</td>\r\n			</tr>\r\n			<tr>\r\n				<td>nabble_ignore_title</td>\r\n				<td>\r\n					Set this variable to <b>true</b> if you don't want the embedded forum to\r\n					change the title of your HTML page. By default, the embedded forum will\r\n					set the title of your page with the forum name.\r\n				</td>\r\n			</tr>\r\n		</table>\r\n	"
;}};

	public static final Help online = new Help(
		49, 
		"Is it possible to show which users are online?"
){
		public String getMetaDescription() { return "Nabble applications display who is online when you browse forums, photo galleries, newspapers, blogs and mailing list archives."; }
		public String getMetaKeywords() { return "online users, forum, photo gallery, newspaper, blog, mailing list archive, free forum, free blog, free photo gallery"; }
		public String answer(){return 
		"\r\n		<p>\r\n			Yes, all Nabble applications (e.g., forum, photo gallery, newspaper, blog, etc.) have this feature.\r\n			Online users have a green circle at the bottom right corner of their avatars.\r\n		</p>\r\n	"
;}};

	public static final Help domain_names = new Help(
		51, 
		"Can I access my forum with my own domain name?"
){
		public String answer(){return 
		"\r\n		<p>\r\n			Yes. Nabble allows you to change the domain name configuration of your application (e.g., forum, gallery, blog, news, etc.)\r\n			by clicking on \"Options > Editor > Change domain name\". If you decide to use your own domain name, you will have to change\r\n			its DNS configuration and make it resolve to the Nabble server where your forum is located (you can find instructions on the configuration screen).\r\n		</p>\r\n		<p>\r\n			There are some advantages about custom domain names that you should be aware of. One of them is that you can &ndash; for example &ndash;\r\n			use Google Custom Search to let users search your forum and your website at the same time. Another advantage is that Nabble will allow you\r\n			to run custom JavaScript code in your pages <i>(to be implemented / Templates feature)</i>.\r\n		</p>\r\n	"
;}};

	public static final Help inactivity_deletion = new Help(
		53, 
		"Will Nabble delete my forum, posts or anything I have created?"
){
		public String answer(){return 
		"\r\n		<p>\r\n			Nabble has a garbage collector process that searches for <b>inactive</b> forums, topics or messages\r\n			in the database. If you receive an email with forums scheduled for deletion, you have to first understand\r\n			why they are in that list. The most common cases are:\r\n		</p>\r\n		<p>\r\n			<b>(1) Your forum hasn't been viewed by anyone recently</b>:\r\n			If your forum is not dead, you can just save it from deletion by following the\r\n			instructions on its page.\r\n		</p>\r\n		<p>\r\n			<b>(2) Your post was removed from the forum</b>: the forum owner (or some other user\r\n			that you replied to) might have moved your post (and replies) out of the forum. This is different from\r\n			physical deletion. When a post is removed from a forum, it still exists in Nabble's database and can be found in\r\n			the author's profile page. Such messages are not part of any forum and are probably not read by anyone.\r\n			So you shouldn't care much about those messages.\r\n		</p>\r\n\r\n		<p class=\"shaded-bg-color\" style=\"padding:.5em\">\r\n			In summary, only root nodes are checked for deletion.\r\n			This means that only threads that have been removed or inactive root level forums will be caught by the garbage collector process.\r\n		</p>\r\n\r\n		<h2>Each visit counts</h2>\r\n		<p>Threads inside an active forum will NOT be scheduled for deletion, even if they don't get any visits for a long time\r\n		(although other threads in the same forum must get visits in order to keep the forum active). <b>So each visit adds activity\r\n		points to the whole structure</b>. On the other hand, when a post or any node is removed from the structure,\r\n		it will become a separated structure with its own activity level.</p>\r\n\r\n		<h2>How deletion works</h2>\r\n		<p>If your forum gets deleted, the threads under it are not immediately deleted.\r\n		What happens is that after the forum is deleted, these threads become top level independent nodes and\r\n		then they are subject to the same deletion process after some weeks.  So if a forum owner allows his forum\r\n		to be deleted, thread starters can still save their threads.</p>\r\n\r\n		<p class=\"shaded-bg-color\" style=\"padding:.5em;font-weight:bold\">In any case, you can save your forums, topics and messages from deletion by following the\r\n		instructions on their page. You should also know that you can download the archives of your application\r\n		by clicking on \"Options > Download archives\" (if you are the administrator).\r\n		<a href=\""
		+(Help.export.url())
		+"\">Click here</a> for more information.</p>\r\n	"
;}};

	public static final Help export = new Help(
		54, 
		"Can I export my forum to a standard format?"
){
		public String answer(){return 
		"\r\n		<p>Yes, Nabble can export your forum data, subcategories and messages to the standard XML format.\r\n			You can download these files by clicking on \"Options > Download archives\". You will realize that Nabble\r\n			doesn't have these files ready for you, so first you will have to build them. This process may take some\r\n			minutes or even hours depending on the size of your application. You will receive an email when this process\r\n			has finished.</p>\r\n		<p>To make downloading easier, Nabble groups XML files into zip archives. Each zip archive contains thousands\r\n			of XML files, where each file represents a node in the forum structure (<a href=\""
		+(Jtp.homeContextUrl())
		+"/back-end.html\">learn more</a>).\r\n			Below you can find the description of each field in the XML file, which may help you in creating a parser for this information.</p>\r\n\r\n			<table class=\"editor-table\" cellpadding=\"5\" style=\"font-size:90%;\">\r\n			<tr class=\"shaded-bg-color\">\r\n			<th align=\"left\">Field</th>\r\n			<th align=\"left\">Description</th>\r\n			</tr>\r\n			<tr>\r\n			<td>exportId</td>\r\n			<td>ID of the node represented by the XML file. This ID may be referenced by other XML files as a way to express relationship.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>kind</td>\r\n			<td>Kind of the node (\"APP\" for applications or \"POST\" for messages).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>ownerEmail</td>\r\n			<td>Email of the user who created the node represented by the XML file.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>ownerName</td>\r\n			<td>Name of the user who created the node represented by the XML file.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>ownerAnonymousId</td>\r\n			<td>If the node was created by an anonymous user, this ID will identify this user (anonymous users are not registered and thus have no email information).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>subject</td>\r\n			<td>Title/subject of this node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>message</td>\r\n			<td>Message contents of this node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>msgFmt</td>\r\n			<td>Format of the message (m=mail, h=html or t=text).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>parentId</td>\r\n			<td>ID of the parent node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>whenCreated</td>\r\n			<td>Date/Time when the node was created (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>\r\n			</tr>\r\n			<tr>\r\n			<td>hasReplyAlert</td>\r\n			<td>true/false if user wants to receive new replies by email.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>whenUpdated</td>\r\n			<td>Date/Time when the node was updated (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>\r\n			</tr>\r\n			<tr>\r\n			<td>restriction</td>\r\n			<td>Type of restriction for this node (i.e., indicates who can view and post messages under this node): NONE, REGISTERED, PROTECTED_CHILDREN, REGISTERED_PROTECTED_CHILDREN, PROTECTED, PRIVATE, PROTECTED_READ_ONLY, PRIVATE_READ_ONLY.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>type</td>\r\n			<td>Node/Application type (FORUM, BOARD, CATEGORY, NEWS, GALLERY, BLOG, COMMENT)</td>\r\n			</tr>\r\n			<tr>\r\n			<td>customStyle</td>\r\n			<td>Custom CSS stylesheet created for this node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>pin</td>\r\n			<td>Order of this node in the pinned list of the parent node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>files</td>\r\n			<td>Files attached to this node. Creates one entry for each file. Contents are byte arrays encrypted using Base64 encoding.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>messageID</td>\r\n			<td>\"Message ID\" header of the email sent for this node (only for mailing list archives).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>isGuessedParent</td>\r\n			<td>true/false if Nabble had to guess the parent of this node (only for mailing list archives).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>mlAddress</td>\r\n			<td>Email address of the mailing list archived by this node (only for mailing list archives).</td>\r\n			</tr>\r\n			<tr>\r\n			<td>mlUrl</td>\r\n			<td>Website URL of the mailing list archived by this node.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>mlPlainTextOnly</td>\r\n			<td>true/false if this mailing list accepts only plain-text emails.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>mlIgnoreNoArchive</td>\r\n			<td>true/false if Nabble should ignore the X-No-Archive header in emails sent to this mailing list archive.</td>\r\n			</tr>\r\n			<tr>\r\n			<td>mlServer</td>\r\n			<td>Mailing list server type (e.g., google groups, yahoo groups, mailman, etc.)</td>\r\n			</tr>\r\n			</table>\r\n	"
;}};

	public static final Help pinned_subapps = new Help(
		55, 
		"What is the difference between pinned and unpinned sub-forums?"
){
		public String answer(){return 
		"\r\n			<p>\r\n				Before addressing this question, you have to understand how things work in the background.\r\n				Essentially, Nabble has a node-architecture that resembles a file system, where forums (and other apps)\r\n				are like folders and posts are like files. Forums and posts can be pinned to their parent in order to always\r\n				be displayed on top. Here is an illustration:\r\n			</p>\r\n\r\n			<p><img src=\"/images/help/help_node_structure.png\" style=\"padding-left:2em\"/></p>\r\n\r\n			<p>\r\n				Only forum owners can pin sub-forums and topics. Actually, sub-forums created by owners are automatically\r\n				pinned, and this makes a big difference to the forum structure. Nabble gives more priority to pinned\r\n				sub-forums when it comes to how the forum front page looks. Unpinned sub-forums (also called\r\n				<b>floating sub-forums</b>) are not part of the real forum structure and they float like normal topics.\r\n				Here is a screenshot:\r\n			</p>\r\n\r\n			<p><img src=\"/images/help/help_sub_forums.png\" style=\"padding-left:2em\"/></p>\r\n\r\n			<p>\r\n				As you can see, floating sub-forums aren't much different than normal topics (except they have a folder\r\n				icon close to them). When they receive new posts, they jump to the top just like other topics that receive\r\n				new replies.\r\n			</p>\r\n	"
;}};

	public static final Help mixed_lengths = new Help(
		56, 
		"How can I customize the \"Mixed\" application type?"
){
		public String answer(){return 
		"\r\n		<p>\r\n			If you have an app with the Mixed type and you want to customize the number of topics in the front page, first click on \"Options > Application > Change appearance\".\r\n			In the \"Preferences\" group, there is a field for the number of topics in the mixed style:<br/><br/>\r\n			<img src=\"/images/help/mixed_lengths.png\" alt=\"topics configuration for mixed app type\"/>\r\n			<br/><br/>\r\n			Enter a comma-separated list of values that represent how many topics each section of the mixed view should display.<br>\r\n			<b>1st value</b> = number of topics to be displayed for the current application<br>\r\n			<b>2nd value</b> = number of topics to be displayed for the first subcategory<br>\r\n			<b>3rd value</b> = number of topics to be displayed for the second subcategory<br>\r\n			and so on...<br>\r\n			The <b>last number</b> is used for all other sections.<br>\r\n			<div class=\"important\">(All values must range from 1 to 20)</div>\r\n			<br>Some examples:<br>\r\n			<b>6</b> = All sections will display 6 topics.<br>\r\n			<b>6,3</b> = 6 topics for the current application, 3 topics for all subcategories.<br>\r\n			<b>6,7,6</b> = 6 topics for the current application, 7 topics for the fist subcategory and 6 topics for all other subcategories.<br>\r\n			<b>6,5,5,5,6</b> = 6 topics for the current application, 5 topics for the first three subcategories and 6 topics for all other subcategories.<br>\r\n		</p>\r\n	"
;}};

	public static void index() {
		Lucene.addHelp(map.values());
	}
}