




if (typeof(disqus_iframe_css) == 'undefined') {
	disqus_iframe_css = '';
}
if (typeof(disqus_def_name) == 'undefined') {
	disqus_def_name = '';
}
if (typeof(disqus_def_email) == 'undefined') {
	disqus_def_email = '';
}
if (typeof(disqus_skip_auth) == 'undefined') {
	disqus_skip_auth = false;
}
if (typeof(disqus_default_text) == 'undefined') {
	disqus_default_text = 'Type your comment here.';
}

(function(){
	
	var ie = document.uniqueID
		&& document.compatMode
		&& !window.XMLHttpRequest
		&& document.execCommand ;

	try {
		if(!!ie) {
			document.execCommand("BackgroundImageCache", false, true);
		}
	} catch(e) {};
})();

var Dsq = new function() {
	this.container = document.getElementById('dsq-content');
	this.jsonData = {"reactions": [], "has_more_reactions": false, "users": {"36f9baa8212e2660878057bfbfaf16dd": {"username": "dave marsdin", "tumblr": "", "display_name": "dave marsdin", "url": "http://disqus.com/guest/36f9baa8212e2660878057bfbfaf16dd/", "registered": false, "linkedin": "", "blog": "http://www.endzone1.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "8fc0c49848b42d7c825b1b35600e7eba": {"username": "Chris", "tumblr": "", "display_name": "Chris", "url": "http://disqus.com/guest/8fc0c49848b42d7c825b1b35600e7eba/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "0b9ed2c6a4ed7115d5a0fe8000bd53ea": {"username": "Down1nit", "tumblr": "", "display_name": "Down1nit", "url": "http://disqus.com/guest/0b9ed2c6a4ed7115d5a0fe8000bd53ea/", "registered": false, "linkedin": "", "blog": "http://www.personalized-art.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "998e7f5a12f59d434d2738c4f8f85706": {"username": "Allan", "tumblr": "", "display_name": "Allan", "url": "http://disqus.com/guest/998e7f5a12f59d434d2738c4f8f85706/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "85737b71f04b041d385176b66fa6effc": {"username": "Martez", "tumblr": "", "display_name": "Martez", "url": "http://disqus.com/guest/85737b71f04b041d385176b66fa6effc/", "registered": false, "linkedin": "", "blog": "http://www.netjak.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "cc179c8bcd45ec562b86af4c076c20ac": {"username": "Sean Marean", "tumblr": "", "display_name": "Sean Marean", "url": "http://disqus.com/guest/cc179c8bcd45ec562b86af4c076c20ac/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b87ae816492feeb00790674091888127": {"username": "Amir", "tumblr": "", "display_name": "Amir", "url": "http://disqus.com/guest/b87ae816492feeb00790674091888127/", "registered": false, "linkedin": "", "blog": "http://www.z4um.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "923d10bc97028030e8e67e7db62658d1": {"username": "Chris", "tumblr": "", "display_name": "Chris", "url": "http://disqus.com/guest/923d10bc97028030e8e67e7db62658d1/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "3938cabbfb322d1c410c3cf83459e059": {"username": "hao2lian", "tumblr": "", "display_name": "hao2lian", "url": "http://disqus.com/guest/3938cabbfb322d1c410c3cf83459e059/", "registered": false, "linkedin": "", "blog": "http://hao2lian.blogspot.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "0f496016bd87f14134e73129fbfde735": {"username": "Kim", "tumblr": "", "display_name": "Kim", "url": "http://disqus.com/guest/0f496016bd87f14134e73129fbfde735/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "572b5992fe99a85472aa1f7a07fac842": {"username": "Stein Inge Morisbak", "tumblr": "", "display_name": "Stein Inge Morisbak", "url": "http://disqus.com/guest/572b5992fe99a85472aa1f7a07fac842/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f5d2e04d01a7ddb65a321f3668236148": {"username": "ShadowKnight", "tumblr": "", "display_name": "ShadowKnight", "url": "http://disqus.com/guest/f5d2e04d01a7ddb65a321f3668236148/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "9a511c2a4f2e906cbb31ebaba886948c": {"username": "Bill Creswell", "tumblr": "", "display_name": "Bill Creswell", "url": "http://disqus.com/guest/9a511c2a4f2e906cbb31ebaba886948c/", "registered": false, "linkedin": "", "blog": "http://www.grcomputerworks.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "ad6309c9cbdccb3b0e4f37652251d92f": {"username": "Vladimir Georgiev", "tumblr": "", "display_name": "Vladimir Georgiev", "url": "http://disqus.com/guest/ad6309c9cbdccb3b0e4f37652251d92f/", "registered": false, "linkedin": "", "blog": "http://v.bulport.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c9319a2c7bfdcca52aaf62e2d9c6f180": {"username": "porneL", "tumblr": "", "display_name": "porneL", "url": "http://disqus.com/guest/c9319a2c7bfdcca52aaf62e2d9c6f180/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "85a8858604531b876f5fe40e2bc13fc5": {"username": "SteelCaress", "tumblr": "", "display_name": "SteelCaress", "url": "http://disqus.com/guest/85a8858604531b876f5fe40e2bc13fc5/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c30521e766755f10d99c20acb03df4bf": {"username": "Mike", "tumblr": "", "display_name": "Mike", "url": "http://disqus.com/guest/c30521e766755f10d99c20acb03df4bf/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7e5bd2f4e75d00f0b359c8acfc54e2f5": {"username": "TjL", "tumblr": "", "display_name": "TjL", "url": "http://disqus.com/guest/7e5bd2f4e75d00f0b359c8acfc54e2f5/", "registered": false, "linkedin": "", "blog": "http://tntluoma.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "323fd80fd05dd9a877c21d4418172982": {"username": "Gunnar", "tumblr": "", "display_name": "Gunnar", "url": "http://disqus.com/guest/323fd80fd05dd9a877c21d4418172982/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c2b7a8dd3e72a021dfab90020b9b0b36": {"username": "Dave Whitla", "tumblr": "", "display_name": "Dave Whitla", "url": "http://disqus.com/guest/c2b7a8dd3e72a021dfab90020b9b0b36/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c4b7ce21ad9134c03352686148456c6f": {"username": "Jud", "tumblr": "", "display_name": "Jud", "url": "http://disqus.com/guest/c4b7ce21ad9134c03352686148456c6f/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "0dcdf884778c2578639b72ab51494889": {"username": "TjL", "tumblr": "", "display_name": "TjL", "url": "http://disqus.com/guest/0dcdf884778c2578639b72ab51494889/", "registered": false, "linkedin": "", "blog": "http://tntluoma.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "a24175ceb5aab01c343966116391e1e4": {"username": "Kevin W", "tumblr": "", "display_name": "Kevin W", "url": "http://disqus.com/guest/a24175ceb5aab01c343966116391e1e4/", "registered": false, "linkedin": "", "blog": "http://trats.ozforces.com.au/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7c41a1cb9db7f3a312454a8b0fab1bb5": {"username": "lena", "tumblr": "", "display_name": "lena", "url": "http://disqus.com/guest/7c41a1cb9db7f3a312454a8b0fab1bb5/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "0ff06078878e676db6b2f49b54d1e09d": {"username": "Anonymous", "tumblr": "", "display_name": "Anonymous", "url": "http://disqus.com/guest/0ff06078878e676db6b2f49b54d1e09d/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "3483039ec0a6ca50dfcbd53cff97a749": {"username": "Donein", "tumblr": "", "display_name": "Donein", "url": "http://disqus.com/guest/3483039ec0a6ca50dfcbd53cff97a749/", "registered": false, "linkedin": "", "blog": "http://donein.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f4fee2f90dddbcd6e7f193dfa71b7986": {"username": "Elq", "tumblr": "", "display_name": "Elq", "url": "http://disqus.com/guest/f4fee2f90dddbcd6e7f193dfa71b7986/", "registered": false, "linkedin": "", "blog": "http://www.opera.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "88a4c6cc521917d60efa278a2d7407d6": {"username": "ric_", "tumblr": "", "display_name": "ric_", "url": "http://disqus.com/guest/88a4c6cc521917d60efa278a2d7407d6/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f0523f611478a5536a52fcd35e58be5b": {"username": "Traf", "tumblr": "", "display_name": "Traf", "url": "http://disqus.com/guest/f0523f611478a5536a52fcd35e58be5b/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "2fc4a7dcae4236ef843f19b04fa8e814": {"username": "Skeledra", "tumblr": "", "display_name": "Skeledra", "url": "http://disqus.com/guest/2fc4a7dcae4236ef843f19b04fa8e814/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "eba82ca14acd26db524ad62c3d2c5701": {"username": "Dave Whitla", "tumblr": "", "display_name": "Dave Whitla", "url": "http://disqus.com/guest/eba82ca14acd26db524ad62c3d2c5701/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "82b622901f4a0436e7b826752df61a7e": {"username": "Sard", "tumblr": "", "display_name": "Sard", "url": "http://disqus.com/guest/82b622901f4a0436e7b826752df61a7e/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "79b0e3d322304e6650217fcf96bbe6fa": {"username": "Richard Grevers", "tumblr": "", "display_name": "Richard Grevers", "url": "http://disqus.com/guest/79b0e3d322304e6650217fcf96bbe6fa/", "registered": false, "linkedin": "", "blog": "http://opera.geek.nz/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "cbe20a2f51b51b0a6cd976e6cdae6b67": {"username": "sushubh", "tumblr": "", "display_name": "sushubh", "url": "http://disqus.com/guest/cbe20a2f51b51b0a6cd976e6cdae6b67/", "registered": false, "linkedin": "", "blog": "http://blog.sushubh.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar32.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": false, "name": "TNT Luoma", "streaming_realtime": false, "url": "tntluoma", "allow_anon_post": true, "reactions_enabled": false, "reply_position": 0, "show_avatar": true, "allow_anon_votes": true, "disqus_auth_disabled": false}, "realtime_enabled": false, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 4, "forum": "tntluoma", "is_initial_load": true, "is_authenticated": false, "timestamp": "2009-12-20_07:28:13", "remote_domain": "", "page": 1, "is_moderator": false, "display_username": "", "points": null, "subscribe_on_post": 2, "moderator_can_edit": false, "is_remote": false, "is_verified": false, "missing_perm": "locked"}, "realtime_paused": false, "posts": {"19814785": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Java is not required for nearly everything, in fact I hardly ever encounter a site which requires it.</p><br><p>Java<em>Script</em> is very common, but Java is not.</p><br><p>You said \"That kicks Opera up to about double the download size of Firebird\".  Firebird does not contain Java either.  So what you are basically saying is that Opera WITH Java is larger than Firebird WITHOUT Java?  Well who cares?  If you want Java, you have to download it one way or another.</p><br><p>The size of Java is irrelevant.</p><br><p>You also said, \"Firebird is the superior choice, hands down.\" On what grounds?  I made several comparisons showing how Opera was superior to Firebird, taking specific points from Mozilla's own pro-Firebird information.</p><br><p>It's a fine browser, but Opera beats it on almost all of the features Mozilla brags about.  I still see no evidence that Firebird makes browsing more efficient than Opera.  More efficient than IE, sure, but big deal.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-04_19:10:02", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814786": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>There is dev-menu available from opera forums. User stylesheets are pretty useful too (outlines for objects, showing document structure). There is hotkey to validate page.</p><br><p>I have tweaked opera to have menu-in-a-button (you can attach any menu to any button, so you could make menu as toolbar too).</p><br><p>Opera has unbeatable tabs+sessions. I can stop my surfing anytime with one click and continue later, with one click too. No looking in history etc.<br>Pages open as tabs whenever I want. I can't believe that mozilla still doesnt have some 'tabs-only' mode. Minor change in code, major change for users.</p><br><p>Anyway, both browsers are on the \"good side\". Persuade your frients to cease using IE! I think that 50% market share would be enough for Opera and Mozilla :)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-08_05:23:09", "killed": false, "user_key": "c9319a2c7bfdcca52aaf62e2d9c6f180", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814787": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Opera's \"tabs\" are more than tabs, because the windows do not have to be maximized.  Opera has a Multiple Document Interface (MDI) which is different and better than just plain tabs (read more about it on Day 8 of 30 Days to becoming an Opera7 Lover).</p><br><p>Your final point is the key though: fewer IE users will make the web a better place.  We'll be happy to share with Mozilla.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-08_09:31:08", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814788": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Sorry - I can't live with the ad in opera (uses up valuable real estate) and Firebird is definitely close enough that it is a viable alternative at zero cost.<br>Just my 2 cents,<br>Amir</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-24_08:12:39", "killed": false, "user_key": "b87ae816492feeb00790674091888127", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814789": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Hi.  I'm investigating alternative browsers, Have tried Opera and Mozilla (Not Firebird).  Found your discussion very helpful.  Prefer Opera so far myself despite the advert since I seem to be able to view history off-line more easily.  Biggest Problem I'm Having with both of them though is getting streaming audio to work eg Real player and Launchcast.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-29_04:48:16", "killed": false, "user_key": "998e7f5a12f59d434d2738c4f8f85706", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814790": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>You forgot http pipelining.  Firebird .7 loads my pages faster, therefore I run it.  And with the right theme firebird takes up less pixels for it's controls, especially if you're using free opera.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-05_20:15:14", "killed": false, "user_key": "8fc0c49848b42d7c825b1b35600e7eba", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814791": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Opera has had HTTP pipelining for some time now.  It's nice that Firebird is catching up (checkout this recent thread on opera.tech for more information).</p><br><p>Opera can be run without any of its controls.  Use Control + F8 to get rid of the Addressbar and Control + F11 to get rid the Menu bar.  The only thing that remains is the Window Titlebar.  AND you can still use Opera because it has keyboard controls for everything.  Try that with Firebird.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-06_21:44:39", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814792": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>My biggest bitch with Firebird is the incredibly slow  startup on my machine.  I have an AMD 586 133 MHz machine with 32 Mb RAM, two hard drives - 1.2 Gb main and 513 Mb slave (which holds the swap file and Internet cache), which has been my home PC since November 1996!  I have not been able to upgrade for financial reasons. So this is what I am stuck with for the present. And my case is not  unique. Believe it or not, there are users out there - in fact, many thousands, particularly in country schools, institutions and Third World Countries - who are still using older computers, including 486s, and who, like me, are battling with the bloat and heavy scripting of modern web sites</p><br><p>As IE (I use IE 5.01 SP2, which is best for my machine) had become impossibly slow to load and scroll down pages with dynamic HTML, Firebird was a breath of fresh air - browsing was so fast, I was in heaven. Pages load fast and scrolling down the page is fast (at least relatively fast on my machine) compared to the agony of IE.<br>But the downside is:<br>1) Firebird takes ages to start up - would you believe it takes one-and-a-half minutes to load!!<br>2) The browser menu functions, eg. calling up Options, work at snail's pace on my machine.<br>3) Internet caching and access to the cache is slow.<br>So Firebird is great on the one hand but a serious problem on the other.</p><br><p>So I am thinking of trying out Opera, hoping that it will run faster on my machine. As the Opera Features and Functions page says Opera functions well on systems with limited resources, it looks hopeful. I just wonder if \"systems with limited resources\" includes older computers like 486s and 586s. Anyway, I'll give it a try and let you know how it goes. IE drove me nuts with its slowness, and now Firebird is doing the same, but for different reasons. I hope Opera's startup speed and speed of functions and caching won't disappoint me like Firebird has.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-09_00:32:12", "killed": false, "user_key": "c30521e766755f10d99c20acb03df4bf", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814793": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I like Opera, but bookmarks don?t have Favicons, and you can?t type keywords into the address bar and have it open the first site it finds.  Also close left and right tabs is quite useful in Firebird, as is being able to configure your own quick searches.  Firebird does lack some polish, and configuring it is far from straight forward, however it?s still in beta, just wait till version 1.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-10_13:42:49", "killed": false, "user_key": "82b622901f4a0436e7b826752df61a7e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814794": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Ok it looks like you can define your own quick searches in Opera.  Sorry:)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-10_13:53:05", "killed": false, "user_key": "82b622901f4a0436e7b826752df61a7e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814795": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Favicons for bookmarks?  Never thought of that as being all that important... Then again I hardly use the bookmarks menu, since I rely on nicknames (where Opera lets you assign a nickname to a bookmark and then jump to it by just typing the nickname).</p><br><p>Yeah.  Right now I have 18 search fields down the left side of my browser... Everything from AcronymFinder to IMDB to UPS.  Of course I don't have to have them there, since I can also assign keystrokes for them.  For example:</p><br><p>g opera lover</p><br><p>will search (G)oogle for the words \"opera lover\"</p><br><p>And, if I wanted to (or if you wanted to) I could setup Opera so that Google would go immediately to the first site it finds (using the \"I feel lucky\" feature in Google).  Never needed it, myself, but it's there if I want it.</p><br><p>Close left and right tabs?  Never saw the need.  If I want to close other pages I generally do 'close all but active'.</p><br><p>As far as \"it will get better in the future\"... well, maybe.... but Opera is better now, and in the same potential of \"the future\" Opera will also improve.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-10_18:46:27", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814796": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I want a free browser but I don't like ads. I think I continue using Firebird :)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-12_13:42:50", "killed": false, "user_key": "323fd80fd05dd9a877c21d4418172982", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814797": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Well, being an ardent Opera fan, I have to be here.<br>Opera rocks no doubt.<br>But adding a new search option in the search bar is easier on Mozilla than on Opera. This is what I think is left unsaid...</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-20_13:07:58", "killed": false, "user_key": "cbe20a2f51b51b0a6cd976e6cdae6b67", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814798": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I don't know the process by which it is done in Mozilla, so that may be true.</p><br><p>However, last I knew Opera far outmatched the options as to what Mozilla could offer for searches.  With the multi-search dropdown, you can have 15 at your fingertips, and assign keyboard shortcuts to them all.</p><br><p>Since this is not something that you will likely do often, I'm willing to have Opera's method be a little more involved than Mozilla's in exchange for getting a lot more flexibility out of it.</p><br><p>Really, adding/changing the search options is very easy with the right (free) tool.  This will be discussed more fully on Day 25 of 30 Days to becoming an Opera7 Lover: search.ini (NOTE: That link will work as of November 25th, as the series is currently in process.)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-20_13:15:56", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814799": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>The \"integrated Google search\" is called a Mycroft Plugin.  There are currently 593 working plugins for Mozilla.  Most of those are in english, and some can seem redundent (aka Ebay, Ebay Australia, Ebay Canada, etc).</p><br><p>They can be accessed by clicking on the icon in the search bar.  It'll display a dropdown menu containing all installed plugins as well as a link to install more.</p><br><p>I have no idea how this compares to Opera except that, as far as I know, its impossible to assign a keyboard shortcut to a Mycroft Plugin.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-11-21_13:27:53", "killed": false, "user_key": "2fc4a7dcae4236ef843f19b04fa8e814", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814800": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>opera costs money those people make a living off it, things like mozilla and Internet explorer are completely free and to make money companys have to do something else to sell instead they cant spend all their time on it. For a free program Mozilla and Firebird are the best you could get.</p><br><p>You cant compare programs that cost money and that are free.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-12-09_14:44:27", "killed": false, "user_key": "3483039ec0a6ca50dfcbd53cff97a749", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814801": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I love Opera.  I love it so much.  It is my desktop, my Application launcher (goodbye Start menu, hello \"w\" for winamp, \"i\" for IE, \"c\" for crimson editor, \"f\" for Ws_ftp... etc).  I can't get enough of it recently, i'm just so hooked on it i could scream.</p><br><p>As for paying for a web browser:  I love it.  I love supporting people who do the right thing.  Same with digital music, and e-books.  It feels good to help someone who is devoted to making something you love.</p><br><p>Almost every time i use Opera, i find something else to love about it (who knew you could use gestures in the Pref. window, ex. gesture right expands all bindings in keyboard edit so you can scroll and quickly see any keys that are free to use).</p><br><p>Mozilla is great too, but it seems like a huge investment in time just to seek out code for editing characteristics vs. opera's .ini file setup (usually in plain english i might add... ex. \"Execute program\"). However, the open source is a exciting prospect for future developments... imagine if microsoft picked up the code for it and released IE as a Firebird shell, citing the hard, devoted work of the community.  What a wonderful day that would be.  Impossible though.</p><br><p>The fact that Opera saves form info automatically, enabling users to go back a couple pages to double check something and not risk losing the text in the form (no matter how long it is), was the first feature that got me hooked (read: obsessed) with the browser.  It's keen.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-12-10_20:20:58", "killed": false, "user_key": "0b9ed2c6a4ed7115d5a0fe8000bd53ea", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814802": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>both are good, but i prefer opera too. And they have an important problem to me. They can`t still playe yahoo launchcast radio. so i have to keep using ie.</p><br><p>another option i miss in opera browser is the ability to highlight google search words.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-12-16_13:46:33", "killed": false, "user_key": "88a4c6cc521917d60efa278a2d7407d6", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814803": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I first tried Opera as version 4 hit the web - and it was an incredible leap ahead from IE and the Netscape of the day.<br>7.23 looks great, and the download size is impressive given the functionality and it's customization features are even better than those available in Mozilla. But I'm a Web Application Programmer.  I couldn't give a shit about downloading 3Mb instead of 12Mb or how pretty I can make my toolbars.<br>I expect browsers competing for my usage to implement W3C standards recommendations (it's bad enough that most of the wold uses IE - if every other browser conforms at least I only have two code branches in my API), open-standard image formats and have a minimal memory footprint (Opera 7.23-linux uses ~27Mb of memory versus Mozilla's ~24Mb (Mozilla 1.5-3 NOT Firebird)).<br>Opera is good in these areas - but Mozilla is better (just).<br>That said, I use both myself - and Opera has some cool developer friendly features.  Does it have a JavaScript console equivalent?</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-03_07:44:05", "killed": false, "user_key": "c2b7a8dd3e72a021dfab90020b9b0b36", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814804": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>The truth about what browser has better standards support tends to be determined by what you are trying to do.  If you are looking for generated content, Opera is your only real option.</p><br><p>Generated content is a major missing piece of Mozilla&#8217;s support.  There might be others, but I haven&#8217;t run into them but then again I basically just check my pages in Mozilla and IE once I am done with them.  99% of the time Mozilla has the rendering right, and about 50% of the time IE has it wrong.</p><br><p>I&#8217;m talking about doing the day to day useful things that CSS can do, not the obscure stuff that is useful for &#8220;wow&#8221; factor alone.</p><br><p>I&#8217;d be curious to hear if anyone thinks Opera is missing any portions of CSS which they would like to use on a day to day basis.</p><br><p>Oh, and yes, Opera has a JavaScript console.  In Opera 7.23 it is located at under the menu options for window &gt; &gt; Special &gt; JavaScript console.  There is also an option to popup the console on errors (which is of limited use since so many sites have JS errors that it gets to be annoying.  Regardless, the feature is there under Preferences &gt; Multimedia &gt; JavaScript options (select the button for open console on error).</p><br><p>(Note: on Opera 7.5preview the console is under Tools &gt; Consoles &gt; JavaScript console.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-03_15:24:04", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814805": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>One thing I miss in Opera, comparing it to Mozilla, is that it is lacking support for user profiles. Logging on/off your desktop environment every time you want to change settings, mail accounts, bookmarks etc. between users is to much trouble. Eg. in a household where several people are using the same computer.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-05_10:34:41", "killed": false, "user_key": "572b5992fe99a85472aa1f7a07fac842", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814806": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I found a bypass for my problem concerning profiles. It's not very neat but it surprises me that it actually works without any conflicts on Windows (at least I haven't run into any yet). I installed Opera twice in separate directories and created two separate shortcuts. Later I found the following hack: <a href=\"http://www.philburns.com/op7profile.html\" rel=\"nofollow\"></a><a href=\"http://www.philburns.com/op7profile.html\" rel=\"nofollow\">http://www.philburns.com/op7profile.html</a> which is neater ;-)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-06_08:39:32", "killed": false, "user_key": "572b5992fe99a85472aa1f7a07fac842", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814807": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I'm in the middle of writing a cross browser DHTML GUI API as the presentation layer to a server-side web application framework, and in doing so I have had a number of browsers testing the same code to ensure the best consistency of presentation across rendering platforms.<br>Depending on script complexity (and I've kept it as simple and small as possible) I've experienced that the Mozilla 1.5 (gecko20031107) JavaScript interpreter executes at as much as twice the speed of the Opera 7.23 interpreter.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-06_18:51:41", "killed": false, "user_key": "eba82ca14acd26db524ad62c3d2c5701", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814808": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>OK Please do not compare Opera and Mozilla Firebird and say that you are comparing Opera and Mozilla.  Firebird is still Under Development.  It has not reached a final build yet.  Also right now the development of Firebird is being focused on fixing bugs not adding features.  More features and a \"tighter\" codebase etc. are planned for later releases.</p><br><p>I used to be an Opera user but recently (as in the last week or so) decided to try Mozilla/Mozilla Firebird &amp; Thunderbird and honestly, Mozilla is better.  Why? Read on.  I am getting tired of comparisons between Opera and Mozilla out of the box. Opera has paid coders (as stated earlier) Mozilla does not.  That is why there is such a large development of extensions. There are a couple extensions (mainly Multizilla for Mozilla and TBE for Firebird) that add essential features to the browsers that the volunteer Mozilla coders have not gotten around to yet.  Keep that in mind when you criticize either browser.</p><br><p>Popups:<br>Almost all browsers have popup control (IE will when SP2 hits) so why is it necessary to compare it?  I will give you the thing about ease of changing options for Opera. That\u0019s nice. But ya know what? Mozilla can do it in its own way (Prefs extensions)</p><br><p>Tabs:<br>Same as above. Almost all browsers have this now. (Except IE) Opera has been doing it longer? I assume this is an advantage because they would have \"more experience\" right? Well Mozilla has had less time and has tab browsing that is almost as good as Opera's out-of-the-box and surpasses Opera (arguably) with the use of extensions.</p><br><p>Searches:<br>Ya know what? Mozilla has that too.  Also the thing that I never understood about the Opera searches (and Firebird's) is why there is a separate search box. Why not just use the address bar? And yup you can add your own 2 (ever heard of quick searches? i.e. \"g Mozilla\" searches google for Mozilla and yes that can be used for almost ANY search engine (even on non-major sites. so basically your search engine should work no matter what)</p><br><p>Find as you Type:<br>Some people use it. You might not. I do. It's ok but nothing worth switching over.</p><br><p>Privacy Controls:<br>Yup this is all over the Mozilla forums and I wouldn't be surprised if we saw this Opera feature appear in Mozilla soon</p><br><p>Page Display:<br>In my tests (granted I didn't remove all the bars like you did but used tabs, menus, address bar/buttons on both Opera and Mozilla and seeing as how those things are kinda necessary...) I found Mozilla to display more than Opera (Firebird surpassed Opera too) Although I do like that menu bar hotkey.  But wait? When would I actually WANT to do that by a hotkey? Also full screen does the same thing no? Well close enough.</p><br><p>Configuration:<br>Again that\u0019s Firebird BETA you are looking at.  Mozilla doesn't do that stuff thought. Why? How many times have you actually used all 18 search bars in Opera? Don't see the need to have those mail icons either.  Why not just open up the mail client that comes with Mozilla (yeah I know about M2) that\u0019s an easy one click thing. As for the rest most are buttons that are 1) on by default 2) would never be used 3) redundant the rest, I\u0019ll admit are really useful. (Like the don't display images icon.)</p><br><p>Size:<br>I really could care less how big Mozilla is. While it\u0019s nice to have a smaller download I could just as easily get the web installer and dl only what I want. (Like just the browser for example but then I would be missing out on all the great other stuff IRC, Mail etc.)</p><br><p>Extensions:<br>Again comparing to Firebird. <em>tisk tisk</em> As stated before there are currently more extensions for Mozilla.  The idea of extensions is to make the program more customizable.  (Pick which features you use and which you don't)  Who doesn't like Minesweeper?  I mean just because M$ removed it from XP doesn't mean that we don't have 2 leave it out!  You\u0019re right that should not be an extension.  A lot of the features you mentioned as \"coming with Opera out-of-the-box\" are included in Multizilla.</p><br><p>Skins:<br>Let us not forget that many (but not all) of the skins for Opera are re-issues for new Opera versions/slight color changes etc. but still Opera does have more skins than Firebird or Mozilla. (Not to mention all of the Firebird skins need to be redone for newer versions) but then again I love the default \"Modern\" theme so much that I don't need to change it.</p><br><p>Conclusion:<br>Opera and Mozilla (Firebird doesn't count yet) are built for different people.</p><br><p>If you want to have a nice (good looking with the sexy PixOS skin) simple one click install browser that has a lot of the standard alternative browser features and new features of its own that should be able to do almost all of what you want get Opera.</p><br><p>If you want a nice (good looking with the sexy Modern skin) browser that has a lot of the standard features out-of-the-box and almost all of the ones you could want with the use of extensions (some of which are MUST HAVES) that you can (and should) play around with a little to suit your needs get Mozilla.</p><br><p>If you want to test out some new ideas from the creators of Mozilla get Firebird/Thunderbird</p><br><p>At the end of the day, Mozilla and Opera are both great browsers. They are both operating on an entirely different level than Internet Explorer. On a scale of 0 to 10 (where Internet Explorer is clearly a zero), I\u0019d give Opera a \"7\" (ooo matches the version number) and Mozilla a \"9\".</p><br><p>Biggest complaints about Opera:</p><br><p>1) Has a \"Websites need to fix themselves to work with our browser\" attitude instead of a \"lets work to make this thing compatible\" attitude<br>2) I find some of the features unnecessary<br>3) Not customizable enough<br>4) No extensions (setups are on the right track I think)<br>5) No nightly builds : (</p><br><p>Biggest complaints about Mozilla 1.7a:</p><br><p>1) Download manager doesn't pause over different sessions like Opera's does<br>2) Needs more customizable menus<br>3) Some extension features should be built in<br>4) Star Downloader doesn't integrate as well as I want it to (Has nothing to do with Mozilla.  Opera is the same way)</p><br><p>As they say the choice is up to you.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-13_20:57:45", "killed": false, "user_key": "0ff06078878e676db6b2f49b54d1e09d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814809": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>OK Please do not compare Opera and Mozilla Firebird and say that you are    comparing Opera and Mozilla.  Firebird is still Under Development.  It    has not reached a final build yet.        Mozilla is comparing Firebird to Opera.  So let&#8217;s have at it. Every browser is always under development.  If they aren't ready to be compared with Opera, then stop comparing themselves to Opera.  If they want to hide behind being a &#8220;preview&#8221; then they shouldn&#8217;t compare themselves to a finished product.      I am getting tired of comparisons    between Opera and Mozilla out of the box. Opera has paid coders (as    stated earlier) Mozilla does not.  That is why there is such a large    development of extensions. There are a couple extensions (mainly    Multizilla for Mozilla and TBE for Firebird) that add essential features    to the browsers that the volunteer Mozilla coders have not gotten around    to yet.  Keep that in mind when you criticize either browser.    Many of these extensions break between builds and conflict with each other.  This is why being built-in is often better.      Almost all browsers have popup control (IE will when SP2 hits) so why is    it necessary to compare it?  I will give you the thing about ease of    changing options for Opera. That&#8217;s nice. But ya know what? Mozilla can    do it in its own way (Prefs extensions)      Site-specific settings are an advantage of Mozilla (the bloated 10+mb version, not sure about the \"lighter\" Firebird)      Tabs:   Same as above. Almost all browsers have this now. (Except IE) Opera has    been doing it longer? I assume this is an advantage because they would    have \"more experience\" right? Well Mozilla has had less time and has tab    browsing that is almost as good as Opera's out-of-the-box and surpasses    Opera (arguably) with the use of extensions.     Repeat after me: Opera has more than tabs.  Opera has a turn Multi Document Interface, meaning that you can tile windows, or show two together side by side or 6.   Mozilla having tabs does not equal what Opera has to offer.      Searches:   Ya know what? Mozilla has that too.  Also the thing that I never    understood about the Opera searches (and Firebird's) is why there is a    separate search box. Why not just use the address bar? And yup you can    add your own 2 (ever heard of quick searches? i.e. \"g Mozilla\" searches    google for Mozilla and yes that can be used for almost ANY search engine    (even on non-major sites. so basically your search engine should work no    matter what)     I think the separate search box is for new users to understand they can put in their own.  Mozilla can customize searches?  How many?      Find as you Type:   Some people use it. You might not. I do. It's ok but nothing worth    switching over.    Opera has this two, both finding any text and just links.      Page Display:   In my tests (granted I didn't remove all the bars like you did but used    tabs, menus, address bar/buttons on both Opera and Mozilla and seeing as    how those things are kinda necessary...) I found Mozilla to display more    than Opera (Firebird surpassed Opera too) Although I do like that menu    bar hotkey.  But wait? When would I actually WANT to do that by a    hotkey? Also full screen does the same thing no? Well close enough.     So wait, you are admitting that you didn&#8217;t do the testing that I did, which showed that the Mozilla folks lied about showing more than Opera (again, you made it clear you were not talking about out of the box comparisons).  Opera also has a vastly superior set of zoom<br>options that will let you squeeze more in the page if you want, plus you can change your default zoom.  Opera can show more on the screen than Mozilla, if we are not talking about out of the box configurations (Opera 7.5 is designed to show much more by default).       Configuration:   Again that&#8217;s Firebird BETA you are looking at.  Mozilla doesn't do that    stuff thought. Why? How many times have you actually used all 18 search    bars in Opera?      All the time, because I customized them.  I use one or directions, one for Google, one for IMDB, one for MRQE, one for images, one for AcronymFinder, one for the Bible, one for the dictionary, one for <a href=\"http://Amazon.com\" rel=\"nofollow\">Amazon.com</a>, one or Opera support      Extensions:   Again comparing to Firebird. <em>tisk tisk</em> As stated before there are    currently more extensions for Mozilla.  The idea of extensions is to    make the program more customizable.  (Pick which features you use and    which you don't)  Who doesn't like Minesweeper?  I mean just because    M$ removed it from XP doesn't mean that we don't have 2 leave it out!     You&#8217;re right that should not be an extension.  A lot of the features you    mentioned as \"coming with Opera out-of-the-box\" are included in    Multizilla.     However there is no guarantee that one won't conflict with another, or break between builds.  And why on earth should my browser be able to play MineSweeper?  That's totally ridiculous.      Opera and Mozilla (Firebird doesn't count yet) are built for different    people.     If Firebird doesn't count yet, then they need to stop comparing it to Opera on their website.  They can't have it both ways: either it is in competition with Opera, or it isn't.  If Firebird is in competition with Opera, it loses on about every front, including several bogus claims about being better than Opera.      At the end of the day, Mozilla and Opera are both great browsers. They    are both operating on an entirely different level than Internet    Explorer. On a scale of 0 to 10 (where Internet Explorer is clearly a    zero), I&#8217;d give Opera a \"7\" (ooo matches the version number) and Mozilla    a \"9\".    I'd give Firebird a 6 and Opera an 8.     1) Has a \"Websites need to fix themselves to work with our browser\"    attitude instead of a \"lets work to make this thing compatible\" attitude    It's too bad the web became to accomodating, or we would have much better websites.        2) I find some of the features unnecessary       So what?  Is that not true about any piece of software?  I find many of Mozilla&#8217;s features unnecessary and bloated.  Opera is like 1/3rd of the size.     3) Not customizable enough     That's totally bogus.  What do you want to customize that you can't?  Keystrokes which trigger commands?  Search engines?  Toolbar locations?  What controls are on each toolbar?  What is and isn't shown?     4) No extensions (setups are on the right track I think)     Bogus.  It doesn't NEED extensions. (Or you give no reason for what it is missing).       5) No nightly builds : (     Yeah, all we get are actual releases that are ready for usage, rather than claiming that it's not yet ready.  (Mozilla made the same claims pre 1.0)     As they say the choice is up to you.    Indeed.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-14_01:12:40", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814810": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>What I really miss in Opera are<br>a \"block images from this server\" option,<br>a \"click flash to play\" option,<br>a \"open text link in new page\" option, and<br>a \"undo close page\" function (a \"recently closed pages\" menu is nice too, but not as essential for me)<br>(these are all in Firebird with extensions). I only noticed how accustomed I was at the imageblocker and click flash to play option now that I try opera and see the huge amount of junk (mostly ads) on pages I visit regularly.</p><br><p>I also find Mozilla (or Firebird with extension)'s cookie manager way superior over Opera's, unfortunately. I really miss the simple 'block cookies from this page' and 'unblock cookies from this page' (in case I just blocked them, or in case of a standard cookie block, and then found out that the site does not work without cookies.)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-17_07:03:40", "killed": false, "user_key": "7c41a1cb9db7f3a312454a8b0fab1bb5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814811": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>MDI: It is a reason why everybody else (okey, not adobe) moves away form this antique form of app. It is much more flexible with both SDI and tabs like firebird. It's more memory friendly too.</p><br><p>Search: Opera provides 15 search engines! Okey, it's more than googlebar, but firebird has 806 search engines ready for download, and as many as you want if you know how to write a plugin. Who won that race?</p><br><p>Costumizable: Firebird is written in XUL, a special variant of XML. You can fix anything regarding the UI tweeking those files.</p><br><p>Speed: Firebird IS faster than Opera (check whatever benchmark you want).</p><br><p>A note to remember: Opera is at version 7, firebird is at 0.7.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-20_09:12:51", "killed": false, "user_key": "f0523f611478a5536a52fcd35e58be5b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814812": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Search engines: do you need more than 15?  Does Firebird let you search them using keyboard?  Opera won that race by making them be built in, easily customizable, and keyboard enabled.</p><br><p>Customizable: I don't want to have to learn a new language to customize things, I want the app to help me.  Opera does this.</p><br><p>It sounds like you think MDI is bad but you're not really clear on why.  As far as flexible, you can have SDI and MDI mixed in Opera as well, and Opera's MDI lets you do things like compare two windows side by side, which is impossible in Firebird.</p><br><p>You say Firebird is faster, so I'm supposed to believe you?  Unless it is with JavaScript-laden pages, I'd have to see some independent numbers first.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-20_09:27:51", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814813": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I tend to prefer FB to Opera for some reason... perhaps because it is free.</p><br><p>Regarding Opera's functionality as compared to FB... the only thing I would like to see in FB is the ability to link windows -- well, maybe one of the things. Opera does seem to have a rich set of features. Opera's integrated search sounds nice, although FB \"Quick Searches\" is sufficient (and of course the mycroft extensions).  I suppose more configuration options will be available as FB continues to be developed. If I hadn't invested in a 3rd party solution to web filtering and privacy I might have given Opera a second thought... it's likely I will give it a second thought when v7.5 enters the market come to think of it. Anyway, a great Web site here -- very helpful.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-28_12:33:46", "killed": false, "user_key": "cc179c8bcd45ec562b86af4c076c20ac", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814814": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Right on, the best browser without a doubt is Opera!</p><br><p><a href=\"http://www.opera.com\" rel=\"nofollow\"></a><a href=\"http://www.opera.com\" rel=\"nofollow\">http://www.opera.com</a></p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-28_21:32:17", "killed": false, "user_key": "f4fee2f90dddbcd6e7f193dfa71b7986", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814815": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Personally, about all I can say about Firebird (that hasn't been said here) is this:</p><br><p>I can open things up and modify the code in Firebird.  I don't have to figure out which .dll I can modify (and which windows API that will conflict with).  That was my biggest complaint about Mozilla in its current state.</p><br><p>Plus it opens fast and renders faster than Opera or Mozilla on my 1.33 GHz machine.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_13:17:07", "killed": false, "user_key": "85a8858604531b876f5fe40e2bc13fc5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814816": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>I think Opera is a very decent browser. I just want to point out some things.<br>\"Yup, Opera can do that, and Opera makes it much easier to turn popups on and off. Just press F12 (which also gets you to a lot of other options as well).\"<br>There's now an extension for this. I like it more as an extension since I don't visit many sites with popups and I rarely ever want to see them, especially since most browsers like Firebird and Opera are \"smart\" enough to recognize legit popups.</p><br><p>\"Yeah, Opera can do that, and could do it long before anyone else. Opera also makes it easy to make sure that all of your pages show up in a single window.\"<br>From what I've seen, Firebird's tabbed browsing is the same as Opera's MDI, especially with the addition of Tabbrowser Extensions (lots of goodies, too).</p><br><p>\"Opera beats every other browser in the world on integrated searching. We&#8217;ve got Google, <a href=\"http://Amazon.com\" rel=\"nofollow\">Amazon.com</a>, Google Groups, eBay, Lycos, AllTheWeb, <a href=\"http://Download.com\" rel=\"nofollow\">Download.com</a>, SearchBoss, Images, Videos, MP3s, News, and Opera Support... and you can add your own if you want to.\"<br>As someone said above, <a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\">http://mycroft.mozdev.org/</a> . Keyboard shortcuts can be assigned via Bookmark Manager (you'll have to create seperate bookmarks though, which can be a hassle).</p><br><p>\"Find As You Type sounds like a useful feature, except that I don&#8217;t often know what letters or words will be linked and which won&#8217;t be\"<br>I like setting Find as You Type to all words. Magic. I never have to use Find again. Opera has the same, but you have to type \"/\" first. You might be able to modify that behavior.</p><br><p>\"More effectively than Internet Explorer, yes. More effectively than Opera? No. Mozilla&#8217;s privacy controls include History, Saved Form Information, Saved Passwords, Download Manager History, Cookies, and Cache. Opera can do all that, and will let you delete any or all from one screen, like this:\"<br>Firebird does most of that with one click too, it's just not seperated that much. Of course, some of the things might be considered too excessive (bookmark visited time?), but that's just me. =)</p><br><p>\"Plus Opera gives you a great deal of control over what information is given away in the first place, including referrer logging and automatic redirection.\"<br>You can change that via about:config. True, not as user friendly.</p><br><p>\"You can see that Opera shows every bit (no pun intended) as much as Mozilla, and actually a little more (compare the bottom right of each screenshot). And in Opera you can press Control + F11 and make even the main menu (file/edit/view/etc) disappear.\"<br>Just a menu bar is unusable for me. I need, at least, the drop down back history and the URL bar. Firebird lets me put those on the menu bar and the Compact Extension (all menu labels -&gt; one). I can achieve the same thing using one of Opera's button thingys and hiding the menu bar. So they're the same.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_20:39:05", "killed": false, "user_key": "3938cabbfb322d1c410c3cf83459e059", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814817": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"If I have counted correctly (there are so many I may have lost count!) there are 18 search options and 11 general options on the first screen, and 48 options on the second screen. Opera actually has another panel of options, large icons, which I didn&#8217;t even bother to show because they are mostly the same as the small ones... However, this shows clearly that Opera gives you more options than Mozilla.\"<br>General options and the second screen sometimes repeats themselves. Some, as somebody pointed out, are for the mail client (there's another customizing menu in Thunderbird that you should've counted). I definitely don't need all those search fields (bookmark keywords for me). Back, Forward, and URL bar. =)</p><br><p>\"Still not convinced? Don&#8217;t forget that in addition to what I have already mentioned, every toolbar in Opera is completely customizable (using drag and drop), meaning that you can take any of those fields onto any of the toolbars. Opera will also let you edit menus, keyboard commands, and mouse settings by editing plain text files.\"<br>You can acheive the same effect by dragging icons, and hiding toolbars. Yep, not as user-friendly. The devs are going to add it though soon. They haven't done it so far, because it's hard to do with XUL.</p><br><p>\"Currently there are 99 extensions for Mozilla Firebird. The claim is that these extensions \"allow Mozilla Firebird to stay small and unbloated\". Compared to Internet Explorer, Mozilla Firebird is small and unbloated. However, just so we are clear, Mozilla Firebird 0.6.1 is 6.8 megabytes for Windows (9.2 megabytes for Linux, and 11 megabytes for Mac).\"<br>Size doesn't dictate features. Opera has a lot more features than Firebird (some would consider them bloat, I don't =) ), but it is smaller because it is packed. If you pack Firebird into a .7zip file, it turns to 4.6 MB. Considering it's based on XUL (try making Opera in XUL), that's pretty good. Still, Opera has Firebird beat on file size. But not bloat. Bloat is purely subjective and highly volatile (\"hey, isn't an IRC client bloat?\" // \"bite me!\").</p><br><p>\"I haven&#8217;t examined all of the extensions, and many of them look very cool, but several of them duplicate functionality which Opera has built-in, including Mouse Gestures, which Opera had long before any other web browser. There&#8217;s also Close Other Tabs, Kiosk Mode, Alternate Stylesheet Switcher, User Agent Switcher, and several others to add the same functionality you get from Opera out of the box on a much smaller download.\"<br>Those extensions are only one to ten kilobytes, to be fair. I like the extensions philosophy better because I don't use many of the features in Opera, like user stylesheets, but I know this is purely opinion.</p><br><p>\"Like I said, a lot of them look cool, but many of them are either trivial, or aren&#8217;t likely to be used by many people, or have nothing to do with web browsing (such as MineSweeper).\"<br>That's why they're extensions. =)</p><br><p>\"As for themes, Opera has plenty of those too. In fact there are currently 177 Opera Skins available. Opera7 has a new one-click download &amp; install feature for skins as well, so you can quickly change the skin you&#8217;re in (we&#8217;ll talk about that more another day).\"<br>Firebird has one click install too. Just press OK one or two times (security reasons) and magic. The true test of skinning is not how many skins there are, but how many good skins there are. Firebird also has a lot of non-documented gems. Blame it on unorganization. =) However, I do like Opera's themes better than Firebird's themes as a rule of thumb. Who knows why?</p><br><p>\"3.3MB for Opera, 6+ for Firebird, 15 for Mozilla, and up to 76 for Internet Explorer... Clearly Opera has the tightest codebase.\"<br>Again, file size != tighter codebase.</p><br><p>\"How do they do that? They have a team of coders working on it, and working together to make tight code.\"<br>I agree. The devs over at Mozilla are beginning to do some work on it, though.</p><br><p>\"Can you get tech support from Mozilla?\"<br>Oh, definitely. There's <em>loads</em> of documentation sites. True, not first-party support, but there are some damn good quality stuff (<a href=\"http://mozdev.org\" rel=\"nofollow\">mozdev.org</a>, personal sites, <a href=\"http://texturizer.net/firebird/).\" rel=\"nofollow\"></a><a href=\"http://texturizer.net/firebird/).\" rel=\"nofollow\">http://texturizer.net/firebird/).</a> The forums are really great too (just like Opera's, although a little bit less snappy at Firebird users =) ).</p><br><p>\"Spread that cost out over a year and it is $0.08 per day or $2.43 a month to use a faster browser with a better UI. And you get 6 months of Operamail and personal email tech support.\"<br>Some geeks don't have money because they're minors, like me, and, since we're geeks, we don't really need personal tech support. =) But I can see where personal tech support would be nice. I really wouldn't mind paying, if I only had money.</p><br><p>\"MOUSE GESTURES!\"<br>Firebird has two different mouse gestures extensions. Take your pick. =) I do like Opera's UI for mouse gestures though.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_20:54:09", "killed": false, "user_key": "3938cabbfb322d1c410c3cf83459e059", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814818": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"So let's compare the entire folder where the apps get installed.\"<br>Firebird uses light zip compression. Try 7zip. -&gt; 4.6 MBish. Not as good, but it sure is usable.</p><br><p>\"There is dev-menu available from opera forums. User stylesheets are pretty useful too (outlines for objects, showing document structure). There is hotkey to validate page.\"<br>Dev-menu? If you mean dev extensions, Firebird has a bit of those. Firebird also has userContent.css. Not as good, I'll admit. The devs are planning to add user style sheets, though, so they're catching up. =) There's an extension that adds a button or a context menu item to validate a page. Not as fast as a hotkey, though, although I have enough hotkeys to memorize, as is. =)</p><br><p>\"Opera has unbeatable tabs+sessions. I can stop my surfing anytime with one click and continue later, with one click too. No looking in history etc. Pages open as tabs whenever I want. I can't believe that mozilla still doesnt have some 'tabs-only' mode. Minor change in code, major change for users.\"<br>Get TBE. It has everything you mentioned. What devs can't do, extensions can, is the motto. =) I don't use tab sessions, though, so all well. Firebird/Mozilla do need to add some more tab functionality (and they plan to do so), though.</p><br><p>\"Opera has a Multiple Document Interface (MDI) which is different and better than just plain tabs (read more about it on Day 8 of 30 Days to becoming an Opera7 Lover).\"<br>I really do not think Opera's MDI and Firebird's tabbed browsing (plus TBE) are any different. They're the same, and that's good enough for me. Unless you happen to feel the urge to cascade all your windows. =)</p><br><p>\"Problem I'm Having with both of them though is getting streaming audio to work eg Real player and Launchcast.\"<br>For Firebird: <a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\">http://plugindoc.mozdev.org/</a><br>The joys of being a non-IE browser and having no plugin companies supporting you.</p><br><p>\"AND you can still use Opera because it has keyboard controls for everything\"<br>Yep, Firebird's lacking in the keyboard customizations dept. Darn XML/Javascript interface.</p><br><p>\"My biggest bitch with Firebird is the incredibly slow startup on my machine\"<br>Firebird and Opera starts up the same on my machine: 3-5 seconds. Win98, PIII, 433Mhz, 312 MB RAM.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_21:03:14", "killed": false, "user_key": "3938cabbfb322d1c410c3cf83459e059", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814819": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"As IE (I use IE 5.01 SP2, which is best for my machine) had become impossibly slow to load\"</p><br><p>IE has always been super speedy on my machine. Never crashing, always perfectly horrible.</p><br><p>\"Close left and right tabs? Never saw the need. If I want to close other pages I generally do 'close all but active'.\"</p><br><p>This is where a XUL interface comes into play. If you don't have a feature you want, it's not hard to change it. This is basically what makes Firebird + TBE slightly better than Opera's MDI.</p><br><p>\"However, last I knew Opera far outmatched the options as to what Mozilla could offer for searches. With the multi-search dropdown, you can have 15 at your fingertips, and assign keyboard shortcuts to them all.\"</p><br><p><a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\">http://mycroft.mozdev.org/</a></p><br><p>For hotkeys, you'll have to manually create bookmarks and assign them. I know, tedious.</p><br><p>\"Mozilla is great too, but it seems like a huge investment in time just to seek out code for editing characteristics vs. opera's .ini file setup (usually in plain english i might add... ex. \"Execute program\").\"</p><br><p>CSS is very English-friendly, which is basically all you do to modify the look. For prefs, there's this wonderful thing where you go to about:config. Magical, really, especially with the filter feature.</p><br><p>\"The fact that Opera saves form info automatically, enabling users to go back a couple pages to double check something and not risk losing the text in the form (no matter how long it is), was the first feature that got me hooked (read: obsessed) with the browser.\"</p><br><p>Firebird does that too. In fact, Opera doesn't do that for me on BlogThis, which kind of surprised me for a minute. I might just be hallucinating.</p><br><p>\"They can`t still playe yahoo launchcast radio\"</p><br><p><a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\">http://plugindoc.mozdev.org/</a></p><br><p>\" If you are looking for generated content, Opera is your only real option.\"</p><br><p>Which is about 5 people. =) The only reason Mozilla doesn't do that yet is because CSS3 is not a Working Recommendation yet. :after and :before are quite enough for me. =)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_21:11:25", "killed": false, "user_key": "3938cabbfb322d1c410c3cf83459e059", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814820": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Oh, and yes, Opera has a JavaScript console. In Opera 7.23 it is located at under the menu options for window &gt; &gt; Special &gt; JavaScript console. There is also an option to popup the console on errors (which is of limited use since so many sites have JS errors that it gets to be annoying. Regardless, the feature is there under Preferences &gt; Multimedia &gt; JavaScript options (select the button for open console on error).</p><br><p>Hmm, it seems lacking. Are there hidden buttons for stuff like Clearing, Errors Only, Messages Only, Warning Only? Is there syntax highlighting?</p><br><p>I&#8217;m talking about doing the day to day useful things that CSS can do, not the obscure stuff that is useful for &#8220;wow&#8221; factor alone.<br>Isn't generated content obscure and \"wow\" factor? I've needed to use <em>any</em> of the CSS3 generated content module properties/selectors.</p><br><p>I&#8217;d be curious to hear if anyone thinks Opera is missing any portions of CSS which they would like to use on a day to day basis.<br>Opera isn't missing anything crucial. Neither is Gecko. They're both the same, to me, standards-support wise. Can't we all just get along? =)</p><br><p>1) Download manager doesn't pause over different sessions like Opera's does<br>Firebird does that for me, now. As long as the cache doesn't get overwritten, you can resume. But I use Getright, anyways.</p><br><p>4) Star Downloader doesn't integrate as well as I want it to<br>You haven't looked hard enough. =)</p><br><p><a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://plugindoc.mozdev.org/\" rel=\"nofollow\">http://plugindoc.mozdev.org/</a></p><br><p>Opera has a turn Multi Document Interface, meaning that you can tile windows, or show two together side by side or 6.<br>Repeat after me: I never will or need to use those features. I have an 800x600 screen. =)</p><br><p>Mozilla can customize searches? How many?<br>Infinity using bookmark keywords. 500-1000 using <a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\">http://mycroft.mozdev.org/</a> .</p><br><p>So wait, you are admitting that you didn&#8217;t do the testing that I did, which showed that the Mozilla folks lied about showing more than Opera (again, you made it clear you were not talking about out of the box comparisons).<br>Out of box: Mozilla has more screenspace, because of the lack of Hotlist. But, again, this varies so much, you really can't compare.</p><br><p>Opera also has a vastly superior set of zoom options that will let you squeeze more in the page if you want, plus you can change your default zoom.<br>There's an extension for this. However, images can't zoom and I don't need to use it. But it is useful for visually impaired people.</p><br><p>(Opera 7.5 is designed to show much more by default).<br>Isn't Hotlist open by default? If so, Opera doesn't show more than Mozilla.</p><br><p>All the time, because I customized them. I use one or directions, one for Google, one for IMDB, one for MRQE, one for images, one for AcronymFinder, one for the Bible, one for the dictionary, one for <a href=\"http://Amazon.com\" rel=\"nofollow\">Amazon.com</a>, one or Opera support<br>I think I can get all those via <a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\"></a><a href=\"http://mycroft.mozdev.org/\" rel=\"nofollow\">http://mycroft.mozdev.org/</a> . But I use bookmark keywords.</p><br><p>However there is no guarantee that one won't conflict with another, or break between builds.<br>I've never had that happen. Not many extensions do that. If you see two extensions that do the same things, then obviously, they're going to conflict.</p><br><p>If Firebird doesn't count yet, then they need to stop comparing it to Opera on their website. They can't have it both ways: either it is in competition with Opera, or it isn't. If Firebird is in competition with Opera, it loses on about every front, including several bogus claims about being better than Opera.<br>Where does the Firebird site say Opera? It used too (comparison table), but that was a boo-boo that was quickly removed.</p><br><p>So what? Is that not true about any piece of software? I find many of Mozilla&#8217;s features unnecessary and bloated. Opera is like 1/3rd of the size.<br>I find Firebird, out of the box, to be lacking features. But I like that, especially w/ extensions. =)</p><br><p>Bogus. It doesn't NEED extensions. (Or you give no reason for what it is missing).<br>I agree, except I need some extra tab functionality. But that's about it.</p><br><p>I really miss the simple 'block cookies from this page' and 'unblock cookies from this page' (in case I just blocked them, or in case of a standard cookie block, and then found out that the site does not work without cookies.)<br><a href=\"http://basic.mozillanews.org/\" rel=\"nofollow\"></a><a href=\"http://basic.mozillanews.org/\" rel=\"nofollow\">http://basic.mozillanews.org/</a></p><br><p>I haven't gotten the icon to work yet, though, but it should be neat once it's finished.</p><br><p>It is much more flexible with both SDI and tabs like firebird. It's more memory friendly too.<br>Firebird and Opera are about as fast for me. I don't care about the memory they use, but how fast I perceive it, whether it be hallucinated or not. =)</p><br><p>Opera is at version 7, firebird is at 0.7.<br>That's actually not arguable since Opera uses a different versioning system than Firebird (more liberal).</p><br><p>You say Firebird is faster, so I'm supposed to believe you? Unless it is with JavaScript-laden pages, I'd have to see some independent numbers first.<br>Both the same for me.</p><br><p>I can open things up and modify the code in Firebird. I don't have to figure out which .dll I can modify (and which windows API that will conflict with). That was my biggest complaint about Mozilla in its current state.<br>Yep, I like open-source better. You can build your own builds, look at the code, develop extensions easily, Bugzilla (bug tracking system), Tinderbox (look at the checkins), talk/complain with the devs freely about the code, CVS, etc.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-01-29_21:33:34", "killed": false, "user_key": "3938cabbfb322d1c410c3cf83459e059", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814821": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"A note to remember: Opera is at version 7, firebird is at 0.7\".</p><br><p>You can't compare versions that way. Firebird is basically just a window and a toolbar with the browser engine that was made for Mozilla, based on code donated and supported by Netscape!</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-02-03_18:34:28", "killed": false, "user_key": "0f496016bd87f14134e73129fbfde735", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814822": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Yup, Opera can do that, and Opera makes it much easier to turn popups on and off. Just press F12 (which also gets you to a lot of other options as well).</p><br><p>:: It's much easier to turn popup blocking on and off with Opera - but then again, that's because Opera doesn't give you the option of telling it which sites that you want popups to open on. Firefox does. Enter the URL of the site you want to whitelist, and voila! No turning popup blocking on and off constantly when you surf from site to site. ::</p><br><p>Yeah, Opera can do that, and could do it long before anyone else. Opera also makes it easy to make sure that all of your pages show up in a single window.</p><br><p>:: While Opera offers tabbed browsing, Firefox offers tabbed browsing AND Tabbrowser Extensions. For an extra 300kB (less than a minute to download even on dial-up, folks), Firefox suddenly gains the ability to do all sorts of neat tricks with its tabs - automatic DDE support, open in new window / tab by click type, progress meters in tabs, resizing tabs, automatic focus shift, a customizable right-click context menu - you name it. Firefox's functions to save and recall tabgroups is less messy than Opera's as well. Opera doesn't even come close. ::</p><br><p>Opera beats every other browser in the world on integrated searching. Weve got Google, <a href=\"http://Amazon.com\" rel=\"nofollow\">Amazon.com</a>, Google Groups, eBay, Lycos, AllTheWeb, <a href=\"http://Download.com\" rel=\"nofollow\">Download.com</a>, SearchBoss, Images, Videos, MP3s, News, and Opera Support... and you can add your own if you want to.</p><br><p>:: Same here with Firefox - at least the part about users adding in their own searches. Extensions and plugins are being developed by fans that enable Firefox to perform a wide variety of searches from its main window as well. They're not much right now, but heck, Opera's been around a whole lot longer than Firefox has. Give it time. ;) ::</p><br><p>Is this true? Well again, if they are comparing against Internet Explorer, then yes. But they are comparing themselves against any other browser and I think they are wrong. But Ill let you be the judge. Here are two screenshots, one of Mozilla and one of Opera. Both are viewing the same page. Both are 640 by 480 pixels with the minimum number of toolbars visible, with the default settings for font sizes, etc.</p><br><p>:: Now that's just not right. Generally speaking, I'm an average Joe Schmoe. I don't disable every visual element and shortcut in my browser window when I surf, and I assume no ordinary person does either. I'll want my toolbars, my menus, my links, and perhaps a few shortcuts here and there. I'll want to see tabs when browsing. And, in general day-to-day usage, Opera is beat in the display size department. Among others, there's that damnable ad in Opera that won't go away unless you pay, which hogs valuable screen space even if I set the toolbar size to as small as possible. Technically, Opera and Firefox are equal in the display size department, as you've pointed out - but in practice, that's simply not the case. ::</p><br><p>If I have counted correctly (there are so many I may have lost count!) there are 18 search options and 11 general options on the first screen, and 48 options on the second screen. Opera actually has another panel of options, large icons, which I didnt even bother to show because they are mostly the same as the small ones... However, this shows clearly that Opera gives you more options than Mozilla.</p><br><p>:: Score a point for Opera here. This isn't a big issue for me, though, seeing as how I'd rather use the keyboard shortcuts rather than the toolbar at times. To be fair, a large number of the toolbar options in Opera are related to its mail client (which Firefox does not have by default), so I'd say it's a rather moot point. ::</p><br><p>Opera 7.2 is 3.3 megabytes. That is less than half the size of Mozilla Firebird  and Opera also includes a top-notch mail program. (If you want a mail/news program from Mozilla, prepare for another 8.9 megabytes for Windows, 9.2 for Linux, and 10.6 for Mac.)</p><br><p>:: Point 2 for Opera. ^^ Still, frankly speaking - download size isn't much of a concern to be, seeing as how it's not likely to affect my daily browsing once I get the program downloaded. If Firefox suffers from slower speed due to its file size, I guess I'd sit up and take notice - but as it is, that's hardly the case, and the extra megabytes is well worth the extra functionality I get in Firefox. ::</p><br><p>So why Firefox over Opera? Simple, really - Firefox is superior in functionality in almost every aspect, and I can't say I'm too much into the \"let's-demand-webmasters-to-comply-to-our-browser-instead-of-the-other-way-round\" way of thinking. There have been sites which work incorrectly in Opera but not in Firefox (Yahoo! Mail, for one), but I've yet to see a site that works in Opera but not in Firefox. Extensions are cool - there's Adblock, for one. It doesn't get any cooler than being able to automatically nuke any graphic element on the page, Flash ads included. ;)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-02-11_07:27:11", "killed": false, "user_key": "f5d2e04d01a7ddb65a321f3668236148", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814823": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Ok, before I close comments here (we're not covering any new ground), I'll say this:</p><br><p>1) Opera 7.5 is going to have a much smaller ad bar.</p><br><p>2) Let's not kid ourselves, if websites coded to the standards, it would be easier for everyone</p><br><p>3) As long as Mozilla group keeps comparing themselves to Opera's standard setup, you can't talk about extensions as being a feature.</p><br><p>4) Opera's options even without the mail ones, are still more than Firefox's -- and the claim was that Firefox is more customizable.  So you want us to ignore the mail customizations when Opera includes a mail client, but you want to include Extensions for Firefox?  I don't think so.</p><br><p>5) Firefox claims to have more space for the content of the window.  Well, are you talking about default configuration?  If so that means no Extensions here, we're going to compare apples to apples.  If we are going to let someone configure their client, well, Opera will let them put everything they want on one toolbar (without needing an Extension, or having to learn XUL).  And if they want to maximize space, F11 is always there.</p><br><p>Now, if you want to say that this is a ridiculous claim that doesn't have anything to do with reality, I'll agree with you, but Firefox is making claims that aren't true -- or only true if you do things the want they want you to do it (i.e. \"When we talk about Feature A we are talking about default configurations, but when we talk about Feature B we want to include Extensions.\"  That's not legit.</p><br><p>Extensions may be cool, but they may also break and conflict with one another.</p><br><p>Oh, and any site that relies on generated content will work in Opera and nore Firefox.</p><br><p>6) If you want to use the keyboard shortcuts rather than the toolbar, you're in luck.  Opera will let you change the keyboard commands through the UI, and will let you define your own for search engines as well.</p><br><p>Ok, well, we've had 6 months to each say our peace, so comments will be closed today.  Thanks to all who participated.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2004-02-11_09:32:01", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "5 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814769": {"up_voted": false, "ip": "", "has_replies": false, "message": "<blockquote><br></blockquote><blockquote><br><p>comprehensive popup controls to keep<br>    unwanted advertising off your desktop</p><br></blockquote><br><p>Yup, Opera can do that, and Opera makes<br>  it much easier to turn popups on and off.<br>  Just press F12 (which also gets you to<br>  a lot of other options as well).</p><br><br><p>This is not exactly true. Mozilla (or at least Firebird) can block pop-up by per-site filtering. This is much more flexible ability. Though it can be debatable if that's really needed in the browser. I guess more complicated filtering should be done by a proxy.</p><br><blockquote><br><p>If I have counted correctly (there are<br>  so many I may have lost count!) there<br>  are 18 search options and 11 general<br>  options on the first screen, and<br>  48 options on the second screen. Opera<br>  actually has another panel of options,<br>  large icons, which I didn?t even bother<br>  to show because they are mostly the same<br>  as the small ones... However, this shows<br>  clearly that Opera gives you more options<br>  than Mozilla.</p><br></blockquote><br><p>:-))) And 21 of the small buttons in Opera are M2 related and do not have anything to do with the browser. So you get 27 browser buttons in Opera versus 10 Mozilla's buttons. It is still not bad though :-)</p><br><blockquote><br><p>Don?t forget that in addition to what<br>  I have already mentioned, every toolbar<br>  in Opera is completely customizable (using<br>  drag and drop), meaning that you can take<br>  any of those fields onto any of the toolbars.</p><br></blockquote><br><p>This is not exactly true. You cannot d-n-d some buttons to some toolbars (try with different fields and buttons). Fields on different toolbars may also behave inconsistently.</p><br><p>Eg., if you have Edit/Inline search enabled, and Multiple search field on the main bar, that filed would be automatically focused on Ctrl+F. If the same field is on the status bar instead, it won't get focused.</p><br><p>Nevertheless, these cases are usualy minor issue and have a good reason to exist (though not always, as in the example above).</p><br><p>In fact, Opera is so much configurable that, if something cannot be done in one manner, it most probably can be done in another manner.</p><br><p>There is something in Firebird I definetely regret that is not present in Opera: The menu can be used as toolbar. I would immediately move my status field there. Saving precious space.</p><br><p>Opera seems to miss a feature Firebird has: Load images from the originated server only. Though I cannot estiomate if this feature is of good worth.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-08-27_11:45:30", "killed": false, "user_key": "ad6309c9cbdccb3b0e4f37652251d92f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814770": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Load images from originating server only is a good concept (blocking ads from other servers) but so many sites are starting to distribute the load that you would often miss legit images as well.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-08-27_12:17:44", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814771": {"up_voted": false, "ip": "", "has_replies": false, "message": "<blockquote><br><p>Eg., if you have Edit/Inline search enabled,<br>  and Multiple search field on the main bar,<br>  that filed would be automatically focused<br>  on Ctrl+F. If the same field is on the<br>  status bar instead, it won't get focused.</p><br></blockquote><br><p>This was actually corrected in 7.2 beta 7 :-)<br>Now the field will get focussed no matter which toolbar you have placed it on.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-02_12:55:08", "killed": false, "user_key": "ad6309c9cbdccb3b0e4f37652251d92f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814772": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>-Streamlined browser? Not on my Free version. Big Ad.</p><br><p>-99 Extensions include some nice developer bars. Are there some for Opera?</p><br><p>-Smaller, - certainly, and includes M2. How do they do that?</p><br><p>-Like the news bar a lot.</p><br><p>It is still hard to spend $40 for something that I find equivalent to what is available free. The 7.0  and beyond releases are terrific, and \"industry leading\" in my opinion. But not by much.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-09_08:29:13", "killed": false, "user_key": "9a511c2a4f2e906cbb31ebaba886948c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814773": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Now come on, you know as well as I do that the streamlined browser has nothing to do with the ad.  The ad is part of the UA.  The browser itself is clearly streamlined compared to the bloat in IE and Mozilla.</p><br><p>3.3MB for Opera, 6+ for Firebird, 15 for Mozilla, and up to 76 for Internet Explorer... Clearly Opera has the tightest codebase.</p><br><p>How do they do that?  They have a team of coders working on it, and working together to make tight code.</p><br><p>As far as the \"developer bars\" I'm not sure what kind of development you mean, since I don't use Mozilla.</p><br><p>$40 gets you that tighter code base plus a vastly superior overall UI.  And right now you can get it for $29.25 as part of the 'Happy Hour' program.</p><br><p>Spread that cost out over a year and it is $0.08 per day or $2.43 a month to use a faster browser with a better UI.  And you get 6 months of Operamail and personal email tech support.  Can you get tech support from Mozilla?</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-09_12:05:00", "killed": false, "user_key": "0dcdf884778c2578639b72ab51494889", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814775": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>---and you are not even emphasizing that Firebird is without an email client at 6.6 mb.----</p><br><p>Almost thou persuadest me.... but as a cheapskate I can't get past the size of the ad, or the spending of $49+  (I have Win and Linux at home,WinXP at Work, and Win or Lin on my laptop - that's a lot of licenses).<br>So I keep the ad version available for testing, and reading the news feeds I have setup, and keep looking for the \"killer reason\" that I need Opera.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-09_14:13:19", "killed": false, "user_key": "9a511c2a4f2e906cbb31ebaba886948c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814776": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"There is something in Firebird I definetely regret that is not present in Opera: The menu can be used as toolbar. I would immediately move my status field there.\"</p><br><p>I have my status field in my address bar and my address field in my main bar.  And set Preferences &gt; Toolbars and menus &gt; Progress bar inside address bar.    And I've removed my menu bar.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-17_05:07:50", "killed": false, "user_key": "a24175ceb5aab01c343966116391e1e4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814777": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Control + F11 will remove the Menu Bar in Opera 7.2</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-17_10:06:27", "killed": false, "user_key": "0dcdf884778c2578639b72ab51494889", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814778": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>One thing I will Say that makes Opera the killer browser for me... (including all the usual advantages it has)...</p><br><p>MOUSE GESTURES!</p><br><p>I cant live without them... mind you, im also sick of swearing at my computer when mouse gestures dont work in explorer, IE (which i use for windows update and nothing else), and everything else on my system....</p><br><p>i sit there frantically holding the right mouse button while clicking left and nothing happens... Doh!</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-24_20:33:11", "killed": false, "user_key": "36f9baa8212e2660878057bfbfaf16dd", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814779": {"up_voted": false, "ip": "", "has_replies": false, "message": "<blockquote><br><p>.3MB for Opera, 6+ for Firebird, 15 for Mozilla,<br>  and up to 76 for Internet Explorer... Clearly<br>  Opera has the tightest codebase.</p><br></blockquote><br><p>Negative.  Opera compresses their exe's and dll's using a 3rd party tool (ASPack) to leave a smaller footprint. This has nothing to do with a \"tighter codebase\". If you were to compress Firebird's exe you will find that it comes out to about the same size.</p><br><p>[Ed. - While I believe these claims to be untrue (see below) I have left the post here.  Please continue to read the comments below which give data which contradicts the claims which Chris (no name or email given) has presented]</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-28_19:01:57", "killed": false, "user_key": "923d10bc97028030e8e67e7db62658d1", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814780": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>Twaddle, Chris. Prior to ASPacking Opera.exe in the install file, it was less than 500kb larger than the packed version. Which still leaves Opera 45% smaller than Firebird, and 80% smaller than the package with equivalent functionality (Firebird + Thunderbird)</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-28_19:26:21", "killed": false, "user_key": "79b0e3d322304e6650217fcf96bbe6fa", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814781": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>That is absolutely false.</p><br><p>I just unpacked Firebird and Opera 7.2</p><br><p>MozillaFirebird.exe is 7631 KB as reported by Windows Explorer.</p><br><p>Opera.exe is 1367.</p><br><p>Of course some may say that the size of the EXE alone tells us very little (well, it does tell us that Firebird's EXE is 5 times the size of Opera's EXE).</p><br><p>So let's compare the entire folder where the apps get installed.</p><br><p>The entire Opera folder (single user install, which puts all the ini files in one folder) is 4.6MB (4.83 size on disk).</p><br><p>The Mozilla Firebird folder is 17.5MB (18.3MB size on disk), and that does not include files put into the Documents and Settings folder.</p><br><p>Also, I used the regular old Windows XP method of compressing the Opera7 folder again, and got 3.26mb.  I did the same to Firebird and got 6.81MB</p><br><p>Again, that may not include all of the Mozilla Firebird files, as I know some of them go into Documents and Settings (whereas I know in this case Opera did NOT put any files into documents and settings.</p><br><p>Mozilla Firebird is TWICE the size of Opera when compressed and nearly FOUR TIMES the size when unpacked.</p><br><p>Please, folks, I don't mind if you want to advocate for Mozilla, but it really looks bad when you are either lying or completely misinformed.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-28_19:27:14", "killed": false, "user_key": "7e5bd2f4e75d00f0b359c8acfc54e2f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814782": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>\"Almost thou persuadest me.... but as a cheapskate I can't get past the size of the ad, or the spending of $49+ (I have Win and Linux at home,WinXP at Work, and Win or Lin on my laptop - that's a lot of licenses)\"</p><br><p>One license for Win, and $15 more for Lin (with Happy Hour, about $45 total) - so long as you are not in two places at once, I believe a single license permits you to use Opera on one computer at a time.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-09-28_20:53:18", "killed": false, "user_key": "c4b7ce21ad9134c03352686148456c6f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "19814783": {"up_voted": false, "ip": "", "has_replies": false, "message": "<p>You're leaving out that with Java, Opera is a 12.6MB download. And since Java is pretty important to....oh, pretty much everything on the web, you definitely want it. That kicks Opera up to about double the download size of Firebird. And let's not even mention that Firebird has more themes, better css support, better iexplore specific js support (while adhering to HTML4 standards), ect, because we all know none of that really matters, right? It's all about how customizable your toolbar is.</p><br><p>Firebird is the superior choice, hands down.</p>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2003-10-04_18:48:11", "killed": false, "user_key": "85737b71f04b041d385176b66fa6effc", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}}, "integration": {"receiver_url": null, "theme": 4, "reply_position": false, "disqus_logo": false}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "38951185", "user_id": "anonymous", "forum_id": "203962", "hash": -7625386712611007175}, "thread": {"total_posts": 0, "paginate": false, "per_page": 0, "slug": "opera_vs_mozilla", "num_pages": 1, "days_alive": 0, "realtime_paused": true, "id": 38951185, "num_posts": 53, "closed": true, "queued": false, "killed": false}, "reactions_limit": 10, "context": {"show_reply": false, "use_fb_connect": true, "forum_facebook_key": "e190d0ebafc4c90349f9c58ba9b3b298", "use_yahoo": true, "subscribed": false, "use_twitter_signin": true, "use_openid": true, "realtime_speed": 5000}, "reactions_start": 0, "settings": {"debug": false, "disqus_url": "http://disqus.com", "media_url": "http://media.disqus.com"}, "media_url": "http://media.disqus.com"};
	/* */ this.jsonData.cookie_messages = {"user_created": null, "post_has_profile": null, "post_twitter": null, "post_not_approved": null}; this.jsonData.session = {"url": null, "name": null, "email": null}; /* */

	
	this.curPageId = 'dsq-comments';

	this.frames = {};
};

var disqus_popup_reference = null;

if(typeof DsqLocal == 'undefined') {
	DsqLocal = {};
}



/**
 * Dsq.Strings: UI strings
 */
Dsq.Strings = new function() {
	this.ADD_NEW_COMMENT = "Add New Comment";
	this.LOG_INTO_DISQUS = "Log into DISQUS";
	this.USE_MEDIA = "Use Media";
	this.LOGOUT = "Logout";
	this.SHARING_OPTIONS = "Sharing options";
	this.SHARE_ON = "Share on";
	this.TWEET_THIS_COMMENT = "Tweet this comment";
	this.SHARE_ON_NEWSFEED = "Share on news feed";
	this.SEND_UPDATE_TO_YAHOO = "Send update to Yahoo!";
	this.REBLOG_ON = "Reblog on";
	this.CONFIGURE_OPTIONS = "Configure options";
	this.POST_AS = "Post as";
	this.SORT_BY = "Sort by";
	this.SUBSCRIBE_BY_EMAIL = "Subscribe by email";
	this.SUBSCRIBE_BY_RSS = "Subscribe by RSS";
	this.POPULAR_NOW = "Popular now";
	this.BEST_RATING = "Best Rating";
	this.NEWEST_FIRST = "Newest first";
	this.OLDEST_FIRST = "Oldest first";
	this.HIGHLIGHTED = "Highlighted";
	this.UNSUBSCRIBE = "Unsubscribe";
	this.REQUIRED = "Required";
	this.OPTIONAL = "Optional";
	this.YOU_ARE_COMMENTING_AS_A = "You are commenting as a";
	this.LOGIN_BELOW = "Login below";
	this.PLEASE_LOGIN_BELOW_TO_COMMENT = "Please login below to comment.";
	this.SUBSCRIBE_TO_ALL_COMMENTS_BY_EMAIL = "Subscribe to all comments by email";
	this.DO_NOT_SUBSCRIBE_TO_COMMENTS = "Do not subscribe to comments";
	this.REALTIME_UPDATING_IS = "Real-time updating is";
	this.ENABLED = "enabled";
	this.PAUSED = "paused";
	this.PAUSE = "Pause";
	this.RESUME = "Resume";
	this.SHOW = "Show";
	this.JUST_NOW = "Just now";
	this.REPLY = "Reply";
	this.EDIT = "Edit";
	this.FLAG = "Flag";
	this.MODERATE = "Moderate";
	this.CANCEL = "Cancel";
	this.REPLYING_TO = "Replying to";
	this.REPORT_MISSING_REACTIONS = "Report missing reactions";
	this.POST_A_COMMENT = "Post a comment";
	this.FLAG_INAPPROPRIATE_COMMENT = "Flag inappropriate comment";
	this.FLAGGED = "Flagged";
	this.NO = "No";
	this.YES = "Yes";
	this.NEVER_MIND = "Never mind";
	this.ARE_YOU_SURE_YOU_WOULD_LIKE_TO_REPORT_THIS_COMMENT_TO_A_MODERATOR = "Are you sure you would like to report this comment to a moderator";
	this.THIS_WILL_FLAG_COMMENTS_FOR_MODERATORS_TO_TAKE_ACTION = "This will flag comments for moderators to take action";
	this.TO_RATE_PLEASE_LOG_IN = "To rate, please log in";
	this.JUST_A_MOMENT = "Just a moment...";
	this.GUEST = "Guest";
	this.NAME = "Name";
	this.EMAIL = "Email";
  this.WEBSITE = "Website";
  this.SETTINGS = "Settings";
  this.MODERATOR_OPTIONS = "Moderator options: ";
  this.MODERATE_OPTIONS = "Moderate Options";

  // Thread moderator actions
  this.CLOSE_THREAD = "Close thread";
  this.OPEN_THREAD = "Open thread";
  this.REMOVE_THREAD = "Remove thread";
  this.RESTORE_THREAD = "Restore thread";
  this.ACTIONS = "Actions";
};
// Dsq.Strings

/**
 * Dsq.FmtStrings: functions that return interpolated UI strings
 */
Dsq.FmtStrings = new function() {
	// Seems we have to use named interpolation for Django to translate. Investigate more.
	this.LOGGED_IN_AS = function(username) {
		return Dsq.Utils.interpolate('Logged in as %(username)s', {username:username});
	};

	this.LOGOUT_FROM = function(disqus) {
		return Dsq.Utils.interpolate('Logout from %(disqus)s', {disqus:disqus});
	};

	this.SHOWING_COMMENTS_FULL = function(total, num) {
		if (num === 1) {
			return Dsq.Utils.interpolate("Showing <span id='dsq-num-posts'>%(num)s</span> of <span id='dsq-total-posts'>%(total)s</span> comment", {num:num, total:total});
		} else {
			return Dsq.Utils.interpolate("Showing <span id='dsq-num-posts'>%(num)s</span> of <span id='dsq-total-posts'>%(total)s</span> comments", {num:num, total:total});
		}
	};

	this.SHOWING_COMMENTS_WITHOUT_PAGINATION = function(num) {
		if (num === 1) {
			return Dsq.Utils.interpolate("Showing <span id='dsq-num-posts'>%(num)s</span> comment", {num:num});
		} else {
			return Dsq.Utils.interpolate("Showing <span id='dsq-num-posts'>%(num)s</span> comments", {num:num});
		}
	};

	this.NUMBER_OF_COMMENTS = function(num) {
		return Dsq.Utils.interpolate(
			(num == 1
				? '%(num)s comment'
				: '%(num)s comments'
			), {num:num});
	};

	this.NUMBER_OF_LIKES = function(num) {
		return Dsq.Utils.interpolate(
			(num == 1
				? '%(num)s like'
				: '%(num)s likes'
			), {num:num});
	};

	this.NUMBER_OF_POINTS = function(num) {
		return Dsq.Utils.interpolate(
			(num == 1
				? '%(num)s point'
				: '%(num)s points'
			), {num:num});
	};
};
// Dsq.FmtStrings





Dsq.CSRF_TOKEN = 'a2d140c59df8cd4ce27a20e0829cacd8';
Dsq.COMMENTS_RE = /(<li.*?id="?dsq-comment-(\d+)"?.*?>)((?:.|\s)*?)(<\/li>)/gim;
Dsq.POST_RE = /(<div.*?id="?dsq-comment-header-(\d+)"?.*?>)((?:.|\s)*?)(<\/div>)\s*(<div.*?class="?dsq-comment-body"?.*?>)((?:.|\s)*)(<\/div>)/gim;
Dsq.POST_BODY_RE = /\s*(<div.*?id="?dsq-comment-message-(\d+)"?.*?>)((?:.|\s)*)(<\/div>)/gim;
// HACK: Safari ends with "-->" while other browsers end with "--&gt;" as expected.
Dsq.MEDIA_POST_RE = /&lt;!--\[(.*?)\]--(?:>|&gt;)/gim;



var FragmentPacket = function(reader, writer, writer_url, is_child, receiveCallback) {
	var that = this;
	this.reader = reader;
	this.writer = writer;
	this.writer_url = writer_url;

	this.is_child = is_child || false;
	this.receiveCallback = receiveCallback;

	this._lastHash = null;

	this._accumMsg = '';

	this._lastSeqno = 0;

	this.MAX_DATA_LEN	= 1024;

	this.WAIT_TIME		= 10;

	this.READY		= 0x1;
	this.WRITING	= 0x2;
	this.FIN		= 0x4;
	this.ACK		= 0x8;

};

FragmentPacket.prototype.createListener = function() {
	var that = this;
	var listener = function() {
		that.recv();
	};
	return window.setInterval(listener, 10);
};

FragmentPacket.prototype.log = function(msg) {



};

FragmentPacket.prototype.recv = function() {
	var hash;
	if (/MSIE/.test(navigator.userAgent)) {

		hash = this.reader.name;
	} else {

		var hashIndex = this.reader.location.href.indexOf('#');
		if (hashIndex == -1) {
			return;
		}
		hash = this.reader.location.href.substring(hashIndex+1);
	}
	var flags = parseInt(hash.substring(0, 4), 10);
	var seqno = parseInt(hash.substring(4, 24), 10);
	var data  = hash.substring(24);

	if (this._lastHash !== hash) {
		this._lastHash = hash;
		this.log('recv: ' + hash);

		this.log(' flags: ' + flags);
		this.log(' seqno: ' + seqno + ' len: ' + hash.substring(4, 24).length + ' (' + hash.substring(4, 24) + ')');
		this.log(' data: ' + data + ' len: ' + data.length);

		this._lastSeqno = seqno;

		if (flags & this.WRITING) {
			this._accumMsg += data;
			this.sendFlag(this.ACK, seqno);
			if (flags & this.FIN) {
				this.log('recv finished: ' + decodeURIComponent(this._accumMsg));
				this.receiveCallback(decodeURIComponent(this._accumMsg));

				this._accumMsg = '';

				this.sendFlag(this.READY | this.ACK, this._lastSeqno);
			}
		}
	}

	return {
		flags: flags,
		seqno: seqno,
		data: data
	};
};

FragmentPacket.prototype.sendRawPacket = function(packet) {
	if (/MSIE/.test(navigator.userAgent)) {
		this.writer.name = packet;
	} else {

		this.writer.location.href = this.writer_url + '#' + packet;
	}

};

FragmentPacket.prototype.sendFlag = function(flag, seqno) {
	this.sendRawPacket(this._zerofill(flag, 4) + this._zerofill(seqno, 20));
};

FragmentPacket.prototype.send = function(msg) {
	this._send(0, encodeURIComponent(msg));
};

FragmentPacket.prototype._send = function(packetNum, msg) {
	var that = this;
	var recvBuf = this.recv();

	if (packetNum === 0) {

		if (!(recvBuf.flags & this.READY)) {
			this.log('client is not ready, waiting...');
			window.setTimeout(function() { that._send(packetNum, msg); }, this.WAIT_TIME);
			return;
		}
	} else {

		if (!( (recvBuf.flags & this.ACK) && (recvBuf.seqno === this._lastSeqno) )) {
			this.log('waiting for ack from client...');
			window.setTimeout(function() { that._send(packetNum, msg); }, this.WAIT_TIME);
			return;
		} else {
			this.log('received ack: ' + this._lastSeqno + ' ' + recvBuf.seqno);
		}
	}

	var flags = this.WRITING;
	var num_packets = Math.ceil(msg.length / this.MAX_DATA_LEN);
	this.log('num_packets: ' + num_packets);

	if (num_packets === packetNum) {

		this.log('message successfully sent!');
		this.sendFlag(this.READY | this.ACK, this._lastSeqno);
		return true;
	}

	this._lastSeqno++;

	if (packetNum == num_packets-1) {
		flags |= this.FIN;
	}

	var data = msg.substring(packetNum * this.MAX_DATA_LEN, (packetNum+1) * this.MAX_DATA_LEN);
	var packet = this._zerofill(flags, 4) + this._zerofill(this._lastSeqno, 20) + data;

	this.log('sending raw packet: ' + packet);
	this.sendRawPacket(packet);

	return this._send(packetNum + 1, msg);
};

FragmentPacket.prototype._zerofill = function(num, width) {
	var retval = num.toString();
	var retval_len = retval.length;
	for (var i = 0; i < width - retval_len; i++) {
		retval = '0' + retval;
	}
	return retval;
};

var PostMessagePacket = function(receiver, receiveCallback, id, receiverId) {
	var that = this;
	this.receiver = receiver;
	this.receiveCallback = receiveCallback;
	this.id = id;


	this.receiverId = receiverId;
};

PostMessagePacket.prototype.createListener = function() {
	var that = this;

	var listener = function(e) {

		if (!that.id) {
			that.id = e.data;
			return;
		}


		var id = e.data.split(';')[0];
		if (id !== that.id) {
			return;
		}
		var data = e.data.substring(e.data.indexOf(';') + 1);

		that.receiveCallback(data);
	};

	if (typeof window.attachEvent == 'function') {
		window.attachEvent('onmessage', listener);
	} else if (typeof window.addEventListener == 'function') {
		window.addEventListener('message', listener, false);
	} else {
		throw new Error('No method found to create event listener for PostMessagePacket.');
	}
};

PostMessagePacket.prototype.send = function(msg) {



	var needs_reget = false;
	try {
		if (typeof this.receiver.id == 'undefined' || typeof this.receiver.postMessage == 'undefined') {
			needs_reget = true;
		}
	} catch(e) {


	}
	if (needs_reget && typeof this.receiverId != 'undefined') {
		this.receiver = document.getElementById(this.receiverId).contentWindow;
	}

	var packet;
	if (!msg) {

		packet = this.id;
	} else {
		packet = this.id + ';' + msg;
	}
	this.receiver.postMessage(packet, '*');
};

PostMessagePacket._last_unique_id = null;
PostMessagePacket._get_unique_id = function() {
	var id = (new Date()).getTime();
	if (id == PostMessagePacket._last_unique_id) {
		id++;
	}
	PostMessagePacket._last_unique_id = id;
	return id.toString();
};

var JsonRpc = function() {

	this.ids = {};

	this.objectToJSON = function(obj) {
		var json = '';
		var results = [];

		if (obj === undefined || obj === null) {
			return 'null';
		}

		switch (obj.constructor) {
			case Object:
				for (var property in obj) {
					if (obj.hasOwnProperty(property)) {
						results.push(this.objectToJSON(property) + ': ' + this.objectToJSON(obj[property]));
					}
				}
				json = '{' + results.join(', ') + '}';
				break;
			case Array:
				for (var i = 0; i < obj.length; i++) {
					results.push(this.objectToJSON(obj[i]));
				}
				json = '[' + results.join(', ') + ']';
				break;
			case Number:
			case Boolean:
				json = obj.toString();
				break;
			case String:

				var specialChars = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\\': '\\\\'};

				json = obj.replace(/[\x00-\x1f\\]/g, function(match) {
					var ch = specialChars[match];
					return ch ? ch : '\\u00' + match.charCodeAt().toPaddedString(2, 16);
				});

				json = '"' + json.replace(/"/g, '\\"') + '"';
				break;
			default:

				json = 'null';
				break;
		}

		return json;
	};

	this.createHandler = function(send_func, registered_funcs) {
		var that = this;
		var handler = function(message) {

			try {
				var rpc = eval('(' + message + ')');
			} catch(e) {
				alert('bad JSON: ' + message);
				return;
			}
			if (rpc.method) {

				if (!registered_funcs[rpc.method]) {
					return;
				}

				var retval = registered_funcs[rpc.method].apply(null, rpc.params);
				if (rpc.id) {
					var response = {
						result: retval,
						error: null,	// TODO
						id: rpc.id
					};
					send_func(that.objectToJSON(response));
				}
			} else if(rpc.result) {

				if (!that.ids[rpc.id]) {
					return;
				}

				that.ids[rpc.id](rpc.result);
				delete that.ids[rpc.id];
			}
		};
		return handler;
	};

	this.execute = function(send_func, method, params, response_callback) {
		response_callback = response_callback || null;
		var id = (response_callback) ? (new Date()).getTime() : null;

		var request = {
			method: method,
			params: params,
			id: id
		};

		send_func(this.objectToJSON(request));

		if (id) {
			this.ids[id] = response_callback;
		}
	};
};
JsonRpc = new JsonRpc();

var ParentMessenger = function(childUrl, receiverUrl, container, receiveCallback) {


	if (navigator.userAgent.indexOf('Safari') >= 0 && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf('Version/') + 8), 10) == 3) {
		throw new Error("unsupported.");
	} else if (window.opera) {
		throw new Error("unsupported.");
	}



	if (!receiverUrl &&
		navigator.userAgent.indexOf('Gecko') >= 0 &&
		parseFloat(navigator.userAgent.slice(navigator.userAgent.indexOf('rv:') + 3, navigator.userAgent.indexOf('rv:') + 6)) < 1.9) {
		throw new Error("unsupported.");
	}


	if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) {


		if (document.domain == window.location.hostname) {
			receiverUrl = '';
		}
	}

	var that = this;
	this.childUrl = childUrl;
	this.receiverUrl = receiverUrl;
	this.container = container || document.body;

	this.packetHandler = null;


	this._ready = false;
	this._error = false;


	var _createReceiverForFragmentPacket = function() {

		that.receiver = document.createElement('iframe');
		that.receiver.src = receiverUrl;
		that.receiver.id = 'receiver_' + (new Date()).getTime();
		that.receiver.name = that.receiver.id;

		that.receiver.frameBorder = '0';
		that.receiver.frameSpacing = '0';
		that.receiver.style.borderStyle = 'none';

		var receiver_onload = function() {
			var receiver = document.getElementById(that.receiver.id).contentWindow;

			try {
				receiver.document.body.innerHTML = '';
			} catch(e) {

				that._error = true;
			}
			receiver.document.body.style.padding = '0px';
			receiver.document.body.style.margin = '0px';

			var child = receiver.document.createElement('iframe');
			child.id = 'child';
			child.name = 'child';
			child.src = that.childUrl;

			child.frameBorder = '0';
			child.frameSpacing = '0';
			child.style.borderStyle = 'none';
			child.style.width = '100%';
			child.style.height = '100%';
			receiver.document.body.appendChild(child);

			that.child = receiver.document.getElementById('child').contentWindow;
			that.receiver = receiver;

			that.packetHandler = new FragmentPacket(that.receiver, that.child, that.childUrl, false, receiveCallback);

			that._listener = that.packetHandler.createListener();

			that.packetHandler.sendFlag(that.packetHandler.READY, 0);

			that._ready = true;
		};

		that.receiver.onreadystatechange = function() {
			if (this.readyState == 'complete') {
				receiver_onload();
			}
		};

		that.receiver.onload = receiver_onload;







		if (Dsq.Utils.ie) {
			if (that.container.clientWidth === 0) {

				var _waitForWidth = function() {
					if (that.container.clientWidth > 0) {
						Dsq.Utils.fixIframesIE(that.container.id);
					} else {
						window.setTimeout(_waitForWidth, 100);
					}
				};
				_waitForWidth();

				that._once = false;
				that.receiver.onresize = function() {
					if (!that._once) {
						Dsq.Utils.fixIframesIE(that.container.id);
					}
					that._once = true;
				};
			}
		}

		that.container.appendChild(that.receiver);
	};


	var _createReceiverForPostMessage = function() {

		var receiver_onload = function() {

			that.packetHandler.send();
			that._ready = true;
		};

		var id = PostMessagePacket._get_unique_id();
		var receiverId = 'child_' + id;


		ParentMessenger['_receiver_onload_' + receiverId] = receiver_onload;

		that.container.innerHTML += '<iframe ' +
			'src="' + childUrl + '" ' +
			'id="' + receiverId + '" ' +
			'name="' + receiverId + '" ' +
			'onload="ParentMessenger._receiver_onload_' + receiverId +'();" ' +
			'></iframe>';

		that.receiver = document.getElementById(receiverId).contentWindow;
		that.packetHandler = new PostMessagePacket(that.receiver, receiveCallback, id, receiverId);
		that._listener = that.packetHandler.createListener();
	};

	if (typeof window.postMessage == 'function') {
		_createReceiverForPostMessage();
	} else {
		_createReceiverForFragmentPacket();
	}

};

ParentMessenger.prototype.sendMessage = function(message) {
	var that = this;
	if (!this._ready) {

		window.setTimeout(function() { that.sendMessage(message); }, 10);
		return;
	}
	this.packetHandler.send(message);
	return true;
};

Dsq.NewFrames = function(url) {
	this.url = url;
};

Dsq.NewFrames.prototype.init = function(onFailure) {
	var that = this;

	try {
		this.messenger = new ParentMessenger(this.url, Dsq.jsonData.integration.receiver_url, this.container, this.receive_callback);
	} catch(e) {
		if (typeof onFailure == 'function') {
			onFailure();
		}
	}

	if (typeof onFailure == 'function') {
		var iId = window.setInterval(function() {
			if (typeof that.messenger == 'undefined') {
				window.clearInterval(iId);
				return;
			}
			if (that.messenger._ready) {
				window.clearInterval(iId);
			} else if (that.messenger._error) {
				window.clearInterval(iId);
				onFailure();
			}
		}, 10);
	}
};

Dsq.NewFrames.prototype._execute = function(method, args, callback) {
	var that = this;
	if (typeof that.messenger == 'undefined') {
		return false;
	}
	JsonRpc.execute(
		function(msg) { that.messenger.sendMessage(msg); },
		method,
		args || [],
		callback);
	return true;
};

Dsq.ReplyFrame = function(container, parent_post_id) {
	var that = this;
	this.container = container;
	this.parent_post_id = parent_post_id;

	var sendFunc = function(msg) {

		Dsq.Debug.log('Dsq.ReplyFrame.sendFunc');
		that.messenger.sendMessage(msg);
	};


	var postComment_onSuccess = function(response) {
		Dsq.jsonData.posts[response.message.id] = response.message.post_meta;
		if (!Dsq.jsonData.users[response.message.post_meta.user_key]) {
			Dsq.jsonData.users[response.message.post_meta.user_key] = response.message.user_meta;
		}


		var reply_position = (typeof(disqus_insert_wrt_sort) == 'undefined' 
			? (Dsq.jsonData.forum.reply_position ? -1 : null) 
			: (Dsq.jsonData.request.sort == 2 ? null : -1));
		
		if (response.message.post_meta.approved) {
			Dsq.Post.insert(response.message.post_meta.parent_post_id || reply_position, response.message.id, response.message.post_meta.message);
		}

		Dsq.Templates.postComment_onSuccess(response, parent_post_id, response.message.id);
	};

	var postComment_onFailure = function(response) {
		Dsq.Popup.popModal(response.message, 'Error');
		Dsq.Templates.postComment_onFailure(response, parent_post_id, response.message.id);
	};

	var editComment_onSuccess = function(response) {
		var post_id = parent_post_id;
		var message = Dsq.$('dsq-comment-message-' + post_id);
		
		message.innerHTML = response.message;
		Dsq.Templates.toggleEdit(post_id);
		Dsq.Templates.setLoadingButton(false);
	};
	
	var editComment_onFailure = function(response) {
		var post_id = parent_post_id;
		
		Dsq.Popup.popModal('Sorry, there was an error editing this comment.', 'Edit Error');
		Dsq.Templates.toggleEdit(post_id);
		Dsq.Templates.setLoadingButton(false);
	};

	var getUserByEmail_onSuccess = function(response) {
		var msg = response.message;
		var fields = Dsq.Templates.getFormFields(parent_post_id);

		if (msg.username) {

			Dsq.Templates.lightboxAuthenticate(parent_post_id, 'login', {
				'username': msg.username,
				'display_name': msg.display_name,
				'avatar_url': msg.avatar_url,
				'verified': msg.verified,
				'email': fields.email.value
			});
		} else {

			Dsq.Templates.lightboxAuthenticate(parent_post_id, 'register');
		}
	};

	var validateAuth_onSuccess = function(response, auth_choice) {
		Dsq.Templates.postComment(parent_post_id, null, true, auth_choice);
	};

	var validateAuth_onFailure = function(response, auth_choice) {
		var pid = parent_post_id ? '-' + parent_post_id : '';
		var msg = response.message;

		if (auth_choice == 'register') {
			var fields = ['email', 'username', 'password'];

			for (var i = 0; i < fields.length; i++) {
				var field = fields[i];
				var errorDiv = Dsq.$('dsq-' + field + '-errors' + pid);

				if (msg[field]) {
					errorDiv.innerHTML = msg[field];
				} else {
					errorDiv.innerHTML = '';
				}
			}
		} else if (auth_choice == 'login') {
			Dsq.$('dsq-lightbox-errors' + pid).innerHTML = '<p>We couldn\'t log you in. Please verify your login.</p>';
		}
		
		Dsq.Templates.setLoadingButton(false);
	};

	this.receive_callback = JsonRpc.createHandler(sendFunc, {
		'postComment.onSuccess': postComment_onSuccess,
		'postComment.onFailure': postComment_onFailure,
		'editComment.onSuccess': editComment_onSuccess,
		'editComment.onFailure': editComment_onFailure,		
		'getUserByEmail.onSuccess': getUserByEmail_onSuccess,
		'validateAuth.onSuccess': validateAuth_onSuccess,
		'validateAuth.onFailure': validateAuth_onFailure,
		'reload': function() { window.location.reload(); }
	});

	this.url = Dsq.Urls.REPLY +
		'?' + (new Date()).getTime() +
		'&f=tntluoma' +
		'&t=opera_vs_mozilla' +
		'&ff=' + Dsq.Thread.ff +
		'&default_text=' + encodeURIComponent(disqus_default_text) +
		'&ifrs=' + encodeURIComponent(disqus_iframe_css);
	if (this.parent_post_id) {
		this.url += '&parent_post=' + this.parent_post_id;
	}
};

Dsq.ReplyFrame.prototype = new Dsq.NewFrames(Dsq.ReplyFrame.url);

Dsq.ReplyFrame.prototype.post = function(author_name, author_email, author_url, authenticate, sharing_services, subscribe) {
	this._execute('postComment', [author_name, author_email, author_url, authenticate, sharing_services, subscribe]);
};

Dsq.ReplyFrame.prototype.edit = function(post_id, message) {
	this._execute('editComment', [post_id, message]);
};

Dsq.ReplyFrame.prototype.setState = function(parent_post_id, depth) {
	this._execute('setState', [parent_post_id, depth]);
};

Dsq.ReplyFrame.prototype.getUserByEmail = function(email) {
	this._execute('getUserByEmail', [email]);
};

Dsq.ReplyFrame.prototype.validateAuth = function(auth_choice, email, username, password) {
	this._execute('validateAuth', [auth_choice, email, username, password]);
};

Dsq.ReplyFrame.prototype.authenticateFacebook = function(session, forum_url) {
	this._execute('authenticateFacebook', [session, forum_url]);
};

	Dsq.Facebook = function() {
	var that = this;

	var handleSessionData = function(session) {

		var forum_url = Dsq.jsonData.forum.url;




		if (typeof disqus_facebook_forum != 'undefined') {
			forum_url = disqus_facebook_forum;
		}
		Dsq.frames.reply_0.authenticateFacebook(session, forum_url);
	};

	var onLogin = function() {
		FB.Connect.getSignedPublicSessionData(handleSessionData);
	};

	this.login = function() {
		FB.Connect.requireSession(onLogin, true);
	};
};
Dsq.Facebook = new Dsq.Facebook();


	






Dsq.Themes = {};

Dsq.Themes.narcissus = new function() {
	this.addPostContainer = 'dsq-form-area';
	this.textareaContainer = 'dsq-textarea-wrapper';



	
	this.header = function() {
		var comments_count, total_posts, num_posts;
		var html = '';
		var missing_perm_tmpl;

		if (Dsq.jsonData.request.missing_perm) {
			missing_perm_tmpl = Dsq.Templates.missingPermissions();
			if (missing_perm_tmpl) {
				html += '<div class="dsq-missing-permissions">' + missing_perm_tmpl + '</div>';
			}
		}

		total_posts = Dsq.jsonData.thread.total_posts;
		num_posts = Dsq.jsonData.thread.num_posts;

		if (total_posts) {
			comments_count = Dsq.FmtStrings.SHOWING_COMMENTS_FULL(total_posts, num_posts);
		} else {
			comments_count = Dsq.FmtStrings.SHOWING_COMMENTS_WITHOUT_PAGINATION(num_posts);
		}

		html += ' \
		<div id="dsq-comments-title"> \
			<h3>' + comments_count + '</h3> \
		</div> \
		';

		html += ' \
		<div class="dsq-options"> \
			<span class="dsq-item-sort">'
				+ Dsq.Strings.SORT_BY + ' \
				<select id="dsq-sort-select" onchange="Dsq.Thread.sortBy(this.value);"> \
					<option value="hot" ' + (Dsq.jsonData.request.sort == 4 ? 'selected="selected"' : '') + '>' + Dsq.Strings.POPULAR_NOW + '</option> \
					<option value="best" ' + (Dsq.jsonData.request.sort == 3 ? 'selected="selected"' : '') + '>' + Dsq.Strings.BEST_RATING + '</option> \
					<option value="newest" ' + (Dsq.jsonData.request.sort == 2 ? 'selected="selected"' : '') + '>' + Dsq.Strings.NEWEST_FIRST + '</option> \
					<option value="oldest" ' + (Dsq.jsonData.request.sort == 1 ? 'selected="selected"' : '') + '>' + Dsq.Strings.OLDEST_FIRST + '</option> \
				</select> \
				&nbsp; \
			</span> \
			<span class="dsq-subscribe-email"> \
				<img src="http://media.disqus.com/images/embed/email.png" style="width:12px;height:12px;vertical-align:middle"> \
				<span id="dsq-subscribe">'
					+ (Dsq.jsonData.context.subscribed
						? '<a href="#" onclick="Dsq.Thread.subscribe(0); return false">' + Dsq.Strings.UNSUBSCRIBE + '</a>'
						: '<a href="#" onclick="Dsq.Thread.subscribe(1); return false">' + Dsq.Strings.SUBSCRIBE_BY_EMAIL + '</a>')
				+ '</span> \
			</span> \
			<span class="dsq-subscribe-rss" style="width:12px;height:12px;vertical-align:middle"> \
				<img src="http://media.disqus.com/images/embed/bullet-feed.png" alt="" /> \
				<a href="http://tntluoma.disqus.com/opera_vs_mozilla/latest.rss">' + Dsq.Strings.SUBSCRIBE_BY_RSS + '</a> \
			</span> \
		</div> \
		';

		
		
			html += Dsq.Templates.realtime();
			html += Dsq.Templates.showThreadSettings();
			html = Dsq.Templates.postBox() + html;

		
		

		return html;

	};
	
	this.footer = function() {
		var html = '';

		html += Dsq.Templates.pagination();


		html += Dsq.Templates.reactions();

		


		if (Dsq.jsonData.request.is_global_moderator) {
 			html += ' \
				<div class="dsq-global-moderator-extras">'
					+ '<strong>shortname:</strong> ' + Dsq.jsonData.forum.url
					+ '<strong>thread id:</strong> ' + Dsq.jsonData.thread.id
					+ '<strong>thread slug:</strong> ' + Dsq.jsonData.thread.slug
				+ '</div> \
			';
		}

		return html;
	};
	
	this.realtime = function() {
		var html = '';
		
		if (Dsq.jsonData.realtime_enabled) {
			html += '<div id="dsq-realtime-options" class="dsq-options">'
					 + Dsq.Strings.REALTIME_UPDATING_IS + ' <strong id="dsq-realtime-status" style="text-transform: lowercase">' + Dsq.Strings.ENABLED + '</strong>. \
					 <a href="#" id="dsq-realtime-toggle" style="text-transform: capitalize"></a> \
					</div>';
		}

		if (!Dsq.jsonData.forum.streaming_realtime) {
			html += ' \
				<div style="display: none" id="dsq-realtime-alert" class="dsq-realtime-alert"><span id="dsq-realtime-queued"></span> <a href="#" id="dsq-realtime-show"></a></div> \
			';
		}
		
		return html;
	};

	this.showThreadSettings = function() {
		if (!Dsq.jsonData.request.is_moderator) {
			return '';
		}

		html = '<div id="dsq-thread-settings" class="dsq-thread-settings">' + Dsq.Strings.MODERATOR_OPTIONS;
		html += '<a href="#" onclick="Dsq.Thread.showSettings(); return false;">' + Dsq.Strings.SETTINGS + '</a>';
		html += '<a href="#" onclick="Dsq.Thread.showModeratorActions(); return false;">' + Dsq.Strings.MODERATE + '</a>';
		if (Dsq.jsonData.forum.reactions_enabled && Dsq.jsonData.reactions.length === 0) {
			html += '<a href="#" onclick="Dsq.Reaction.reportMissingReactions(); return false;">'
						+ Dsq.Strings.REPORT_MISSING_REACTIONS
						+ '</a>';
		}
		html +='</div>';

		return html;
	};

	this.postBox = function(post_id, use_fallback_iframe) {


		var html;
		var display_sharing_options = Dsq.jsonData.request.is_authenticated;

		if (!Dsq.jsonData.request.is_authenticated && Dsq.jsonData.forum.disqus_auth_disabled && !Dsq.jsonData.forum.allow_anon_post) {
			return '';
		}
		
		if (Dsq.jsonData.request.is_remote) {


			if (!Dsq.jsonData.request.sharing.hasOwnProperty(Dsq.jsonData.request.remote_domain)) {
				display_sharing_options = false;
			}
		}
		
		if (post_id) {
			var _meta = Dsq.jsonData.posts[post_id];
			var userData = Dsq.jsonData['users'][_meta.user_key];				
		}
		
		var pid = post_id ? '-' + post_id : '';

		var _requestUserInfo = function() {
			var html;



			var user_has_email = false;

			html = '<div class="dsq-request-user-info"> <!-- // If authenticated --> \
				<a href="' + Dsq.jsonData.settings.disqus_url + Dsq.Urls.LOGOUT + '?ctkn=' + Dsq.CSRF_TOKEN + '" class="dsq-request-user-logout">' + Dsq.Strings.LOGOUT + '</a> \
				<table> \
					<tr> \
						<td rowspan="2">'
							+ (!Dsq.jsonData.forum.disqus_auth_disabled ? '<a href="' + Dsq.jsonData.settings.disqus_url + Dsq.Urls.REQUEST_USER_PROFILE + '">' : '')
								+ '<img src="' + Dsq.Urls.REQUEST_USER_AVATAR + '" width="48" height="48" class="dsq-request-user-avatar">'
							+ (!Dsq.jsonData.forum.disqus_auth_disabled ? '</a>' : '')
						+ '</td> \
						<td class="dsq-request-user-name">'
								+ (Dsq.jsonData.request.is_remote
									 ? '<span class="dsq-badge-small dsq-badge-' + Dsq.jsonData.request.remote_domain + '">' + Dsq.jsonData.request.remote_domain + '</span>'
									 : (Dsq.jsonData.request.is_verified
											? '<span class="dsq-badge-small dsq-badge-verified">Verified</span>'
											: '<span class="dsq-badge-small dsq-badge-registered">Registered</span>'))
							+ (!Dsq.jsonData.forum.disqus_auth_disabled ? ' <a href="' + Dsq.jsonData.settings.disqus_url + Dsq.Urls.REQUEST_USER_PROFILE + '">' : '') 
								+ Dsq.jsonData.request.display_username 
							+ (!Dsq.jsonData.forum.disqus_auth_disabled ? '</a>' : '')
							+  (Dsq.jsonData.request.is_remote && user_has_email ? ' <small>(<a href="#" onclick="Dsq.Popup.remoteAccountSettings(); return false;">change settings</a>)</small>' : '')
							+  (!Dsq.jsonData.request.is_remote && !Dsq.jsonData.forum.disqus_auth_disabled ? ' <small>(<a href="' + Dsq.jsonData.settings.disqus_url + '/profile/info/" target="_blank">change name</a> or <a href="' + Dsq.jsonData.settings.disqus_url + '/profile/avatar/" target="_blank">picture</a>)</small>' : '')
						+ '</td> \
					</tr> \
					<tr> \
						<td class="dsq-request-user-stats"> \
							<span><big>' + Dsq.jsonData.request.comments_count + '</big> ' + (Dsq.jsonData.request.comments_count == 1 ? 'comment' : 'comments') + '</span> \
							<span><big>' + Dsq.jsonData.request.likes_count + '</big> ' + (Dsq.jsonData.request.likes_count == 1 ? 'like' : 'likes') + '</span> \
							<span><big>' + Dsq.jsonData.request.points + '</big> ' + (Dsq.jsonData.request.points == 1 ? 'point' : 'points') + '</span> \
						</td> \
					</tr> \
				</table> \
			</div> \
			';
			return html;
		};

		var _loginOptions = function() {
			var html;
			html = ' \
			<div class="dsq-authenticate"> \
				<p class="dsq-autheneticate-copy">'
				+ (Dsq.jsonData.forum.allow_anon_post
					? Dsq.Strings.YOU_ARE_COMMENTING_AS_A + ' <a class="dsq-help" title="Click for more information" href="#" onclick="Dsq.Popup.helpBadges(); return false">Guest</a>. ' + Dsq.Strings.OPTIONAL + ': ' + Dsq.Strings.LOGIN_BELOW + '.'
					: Dsq.Strings.REQUIRED + ': ' + Dsq.Strings.PLEASE_LOGIN_BELOW_TO_COMMENT + '.')
				+ '</p> \
				<ul class="dsq-login-buttons">'
					+ (!Dsq.jsonData.forum.disqus_auth_disabled ? '<li class="dsq-login-button"><a href="#" onclick="Dsq.Popup.login(); return false"><img src="http://media.disqus.com/images/themes/narcissus/login-disqus.gif" /></a></li>' : '')
					+ (Dsq.jsonData.context.use_fb_connect ? '<li class="dsq-login-button"><a href="#" onclick="Dsq.Facebook.login(); return false;"><img src="http://media.disqus.com/images/themes/narcissus/login-facebook.gif" /></a></li>' : '')
					+ (Dsq.jsonData.context.use_twitter_signin ? '<li class="dsq-login-button"><a href="#" onclick="Dsq.Twitter.startTwitterConnect(); return false"><img src="http://media.disqus.com/images/themes/narcissus/login-twitter.gif" /></a></li>' : '')
					+ (Dsq.jsonData.context.use_openid ? '<li class="dsq-login-button"><a href="#" onclick="Dsq.OpenID.requestURL(); return false" ><img src="http://media.disqus.com/images/themes/narcissus/login-openid.gif" /></a></li>' : '')
					+ (Dsq.jsonData.context.use_yahoo ? '<li class="dsq-login-button"><a href="#" onclick="Dsq.Yahoo.startYahooConnect(); return false"><img src="http://media.disqus.com/images/themes/narcissus/login-yahoo.gif" /></a></li>' : '')
				+ '</ul> \
			</div> \
			';
			return html;
		};

		if (!Dsq.jsonData.context.show_reply) {


			if (!Dsq.jsonData.request.is_authenticated) {



				return '<div id="dsq-form-area" style="display:none"><div id="dsq-textarea-wrapper"></div></div>' + _loginOptions();
			} else {
				return '';
			}
		}

		html = ' \
		<div id="' + (post_id 
			? 'dsq-reply-post-' + post_id
			: 'dsq-new-post')
		 	+ '" class="dsq-post-area"> \
			<div class="dsq-dc-logo"> \
				<a href="http://disqus.com/comments" target="_blank"><img src="http://media.disqus.com/images/themes/narcissus/disqus-logo.png"></a> \
			</div>'
			+ (post_id 
				? '<h3>' + Dsq.Strings.REPLYING_TO + ' ' + userData.display_name + '</h3>'
				: '<h3>' + Dsq.Strings.ADD_NEW_COMMENT + '</h3>')
			+ (Dsq.jsonData.request.is_authenticated 
				? _requestUserInfo()
				: _loginOptions() )
			+ '<div id="dsq-form-area' + pid + '">'
			+ '<div class="dsq-textarea"> \
				<div class="dsq-textarea-wrapper" id="dsq-textarea-wrapper' + pid + '"></div> \
			</div>'
			+ (!Dsq.jsonData.request.is_authenticated
			? ' \
			<div class="dsq-post-fields"> \
				<table> \
					<tr> \
						<td class="dsq-post-fields-left"><div class="dsq-input-wrapper"><input id="dsq-field-name' + pid + '" type="text" value="' + (disqus_def_name ? disqus_def_name : (Dsq.jsonData.session.name ? Dsq.jsonData.session.name : Dsq.Strings.NAME + '" class="dsq-placeholder')) + '" onfocus="Dsq.Templates.handlePlaceholder(event, this, \'name\')" onblur="Dsq.Templates.handlePlaceholder(event, this, \'name\')" /></div></td> \
						<td class="dsq-post-fields-right"><div class="dsq-input-wrapper"><input id="dsq-field-website' + pid + '" type="text" value="' + (Dsq.jsonData.session.url ? Dsq.jsonData.session.url : Dsq.Strings.WEBSITE + ' (' + Dsq.Strings.OPTIONAL.toLowerCase() + ')" class="dsq-placeholder') + '" onfocus="Dsq.Templates.handlePlaceholder(event, this, \'website\')" onblur="Dsq.Templates.handlePlaceholder(event, this, \'website\')" /></div></td> \
					</tr> \
					<tr> \
						<td class="dsq-post-fields-left"><div class="dsq-input-wrapper"><input id="dsq-field-email' + pid + '" type="text" value="' + (disqus_def_email ? disqus_def_email : (Dsq.jsonData.session.email ? Dsq.jsonData.session.email : Dsq.Strings.EMAIL + '" class="dsq-placeholder')) + '" onfocus="Dsq.Templates.handlePlaceholder(event, this, \'email\')" onblur="Dsq.Templates.handlePlaceholder(event, this, \'email\')" /></div></td> \
						<td class="dsq-post-fields-right"> \
							<div class="dsq-subscribe"> \
								<a href="#" onclick="Dsq.Templates.chooseSubscribe(' + post_id + '); return false" class="dsq-subscribe-menu"><span id="dsq-subscribe-select' + pid + '">' + (Dsq.jsonData.request.subscribe_on_post ? Dsq.Strings.SUBSCRIBE_TO_ALL_COMMENTS_BY_EMAIL : Dsq.Strings.DO_NOT_SUBSCRIBE_TO_COMMENTS) + '</span> <small>&#9660;</small></a> \
								<ul class="dsq-panel" id="dsq-subscribe-menu' + pid + '"> \
									<li><a href="#" onclick="Dsq.Templates.setSubscribe(2, this, ' + post_id + '); return false">' + Dsq.Strings.SUBSCRIBE_TO_ALL_COMMENTS_BY_EMAIL + '</a></li> \
									<li><a href="#" onclick="Dsq.Templates.setSubscribe(0, this, ' + post_id + '); return false">' + Dsq.Strings.DO_NOT_SUBSCRIBE_TO_COMMENTS + '</a></li> \
								</ul> \
								<input id="dsq-subscribe-on-post' + pid + '" type="hidden" value="' + Dsq.jsonData.request.subscribe_on_post + '" /> \
							</div> \
						</td> \
					</tr> \
				</table> \
			</div>'
			: '')
			+ '<div class="dsq-post-footer"> \
				<div class="dsq-sharing-options" ' + (!display_sharing_options ? 'style="display:none;"' : '') + '> \
					<button type="button" class="dsq-button-small" onfocus="document.getElementById(\'dsq-post-button' + pid + '\').focus();"><span>' + Dsq.Strings.SHARING_OPTIONS + ' <small>&#9660;</small></span></button> \
					<div class="dsq-panel"> '
						+ (Dsq.jsonData.request.sharing.twitter !== undefined
								&& Dsq.jsonData.request.sharing.twitter.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-twitter' + pid + '"'
								  + (Dsq.jsonData.request.sharing.twitter.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-twitter' + pid + '">' + Dsq.Strings.SHARE_ON + ' Twitter</label> \
								 </div>'
							: '')
						+ (Dsq.jsonData.request.sharing.facebook
								&& (Dsq.jsonData.request.sharing.facebook.enabled === true ||
										(Dsq.jsonData.request.is_remote && Dsq.jsonData.request.remote_domain == 'facebook'))
							? '<div><input type="checkbox" id="dsq-sharing-facebook' + pid + '"'
									+ (Dsq.jsonData.request.sharing.facebook.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-facebook' + pid + '">' + Dsq.Strings.SHARE_ON + ' Facebook</label> \
								 </div>'
							: '')
						+ (Dsq.jsonData.request.sharing.yahoo !== undefined
								&& Dsq.jsonData.request.sharing.yahoo.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-yahoo' + pid + '"'
									+ (Dsq.jsonData.request.sharing.yahoo.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-yahoo' + pid + '">' + Dsq.Strings.SHARE_ON + ' Yahoo!</label> \
								</div>'
							: '')
						+ (Dsq.jsonData.request.sharing.tumblr !== undefined
								&& Dsq.jsonData.request.sharing.tumblr.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-tumblr' + pid + '"'
									+ (Dsq.jsonData.request.sharing.tumblr.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-tumblr' + pid + '">' + Dsq.Strings.SHARE_ON + ' Tumblr</label> \
								 </div>'
							: '')
						+ (Dsq.jsonData.request.sharing.wordpress !== undefined
								&& Dsq.jsonData.request.sharing.wordpress.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-wordpress' + pid + '"'
									+ (Dsq.jsonData.request.sharing.wordpress.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-wordpress' + pid + '">' + Dsq.Strings.SHARE_ON + ' Wordpress</label> \
								 </div>'
							: '')
						+ (Dsq.jsonData.request.sharing.movabletype !== undefined
							  && Dsq.jsonData.request.sharing.movabletype.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-movabletype' + pid + '"'
									+ (Dsq.jsonData.request.sharing.movabletype.auto === true ? 'checked=true' : '') + '/> \
									<label for="dsq-sharing-movabletype' + pid + '">' + Dsq.Strings.SHARE_ON + ' Movable Type</label> \
							   </div>'
							: '')
						+ (Dsq.jsonData.request.sharing.typepad !== undefined
							  && Dsq.jsonData.request.sharing.typepad.enabled === true
							? '<div><input type="checkbox" id="dsq-sharing-typepad' + pid + '"'
									+ (Dsq.jsonData.request.sharing.typepad.auto === true ? 'checked=true' : '') + '/> \
								  <label for="dsq-sharing-typepad' + pid + '">' + Dsq.Strings.SHARE_ON + ' TypePad</label> \
							   </div>'
							: '')
						+ '<div><a href="' + Dsq.jsonData.settings.disqus_url + '/profile/connections/" target="_blank" class="dsq-configure-options">' + Dsq.Strings.CONFIGURE_OPTIONS + '</a></div>'
					+ '</div> \
				</div>'
				+ '<button type="button" class="dsq-button" id="dsq-post-button' + pid + '" onclick="Dsq.Templates.postComment(' + post_id + ', this, false)"><span>' + Dsq.Strings.POST_AS + ' '
				+ (Dsq.jsonData.request.display_username
					? Dsq.jsonData.request.display_username
					: Dsq.Strings.GUEST)
				+ '</span></button>'
				+ (post_id
					? '<button type="button" class="dsq-button" id="dsq-cancel-button' + pid + '" onclick="Dsq.Post.toggleReply(' + post_id +', this)"><span>' + Dsq.Strings.CANCEL + '</span></button>'
					: '')
			+ '</div>'
			+ '</div>' // end dsq-form-area
		+ '</div> \
		';
		
		return html;
	};




	this.appendPost = function(post_id) {
		var html = '<div id="dsq-append-post-' + post_id + '"></div>';
		return html;
	};

	this.postPrependHeader = function(post_id) {
		var html;
		var _meta = Dsq.jsonData.posts[post_id];
		var userData = Dsq.jsonData['users'][_meta.user_key];
		
		html = ' \
		<table> \
			<tr> \
				<td id="dsq-header-avatar-' + post_id + '" class="dsq-header-avatar" onmouseover="Dsq.Post.dropProfile(' + post_id + ')"> \
					<a id="dsq-avatar-' + post_id + '" class="dsq-avatar" href="' + userData.url + '" onclick="Dsq.Popup.popProfile(' + post_id + '); return false;">'
					+ (Dsq.jsonData.forum.show_avatar
					? '<img src="' + Dsq.jsonData.users[_meta.user_key].avatar + '" alt="" />'
					: '')
				+ '</a> \
				</td> \
				<td class="dsq-comment-header-meta"> \
		';

		
		return html;
	};
	
	this.postAppendHeader = function(post_id) {
		var _meta = Dsq.jsonData.posts[post_id];
		var html;
		var parent_display_name = '';
		
		if(_meta.parent_post_id) {

			var _parent_meta = Dsq.jsonData.posts[_meta.parent_post_id];

			if (_parent_meta) {
				var parentUserData = Dsq.jsonData['users'][_parent_meta.user_key];
				parent_display_name = parentUserData.display_name;
			}
		}

		html = ' \
		<img src="http://media.disqus.com/images/themes/narcissus/moderator.png" class="dsq-moderator-star" title="Moderator" /> \
		<span class="dsq-comment-header-time"><a href="#comment-' + post_id + '" onclick="Dsq.Popup.permalink(' + post_id + ')" title="Permalink">' + (_meta.is_realtime ? Dsq.Strings.JUST_NOW : _meta.date) + '</a></span> '
		+ (_meta.parent_post_id && parent_display_name
			? '<a href="#comment-' + _meta.parent_post_id + '" title="Jump to comment">in reply to ' + parent_display_name + '</a>'
			: '')
		+ '</td> \
		<td id="dsq-like-pts-' + post_id + '" class="dsq-comment-header-likes">'
		+ (_meta.points
			? _meta.points + Dsq.Utils.pluralize(_meta.points, ' person', ' people') + ' liked this.'
			: '')
		+ '</td> \
		</tr> \
		</table> \
		';
		return html;
	};

	this.preBody = function(post_id) {
		var html = '';
		return html;
	};

	this.postFooter = function(post_id) {
		var html;
		var _meta = Dsq.jsonData.posts[post_id];
		if(_meta.killed || !_meta.approved) { return ''; }
		
		html = ' \
		<div class="dsq-comment-footer" id="dsq-comment-footer-' + post_id + '"> \
			<div class="dsq-comment-footer-left">'
				+ (Dsq.jsonData.request.is_moderator || Dsq.jsonData.request.is_global_moderator
					? '<a href="#" onclick="Dsq.Templates.moderateOptions(' + post_id+ '); return false">' + Dsq.Strings.MODERATE + '</a>'
					: '')
				+ '<a href="#" id="dsq-post-report-' + post_id + '" class="dsq-post-report" onclick="Dsq.Post.report(' + post_id + ', false); return false;">' + Dsq.Strings.FLAG + '</a> \
			</div> \
			<div class="dsq-comment-footer-right">'
				+ (_meta.votable 
					? '<span id="dsq-like-' + post_id + '" class="dsq-like">'
					+ (!_meta.up_voted
						? '<button type="button" class="dsq-button-small" onclick="Dsq.Post.rate(this, ' + post_id + ', 1)" >Like</button>'
						: 'You liked this.&nbsp;&nbsp;')
					+ '</span>'
					: '')
				+ (_meta.can_reply && !_meta.has_replies && _meta.from_request_user
					? '<button type="button" class="dsq-button-small dsq-post-edit" onclick="Dsq.Post.edit(this, ' + post_id + ')" >' + Dsq.Strings.EDIT + '</button>'
					: '')
				+ (_meta.can_reply
					? '<span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-' + post_id + '" onclick="Dsq.Post.toggleReply(' + post_id +', this)"> \
						<button type="button" class="dsq-button-small">' + Dsq.Strings.REPLY + '</button> \
						<button type="button" class="dsq-comment-footer-reply-tab">' + Dsq.Strings.REPLY + '</button><span></span> \
					</span>'
					: '')
			+ '</div> \
		</div> \
		';
		
		return html;
	};



	
	this.showRetweets = function(id, limit, element_id /* Optional */) {
		var source, html = '';

		for (var i = 0, reaction; reaction = Dsq.jsonData.reactions[i]; i++) {
			if (reaction.id === id) {
				source = reaction.retweets;
			}
		}

		if (source) {
			if (limit === 0) {
				limit = source.length;
			}

			for (var j = 0; j < limit; j++) {
				var rt = source[j];
				html += '<a href="' + rt.url + '">' + rt.author_name + '</a>'	+ ((j === (limit - 1)) ? '.' : ', ');
			}
		}

		if (element_id === undefined) {
			return html;
		}

		var element = document.getElementById(element_id);
		element.innerHTML = html;
		return element;
	};

	this.showMoreReactions = function(reactions, has_more, start, limit) {
		var link = document.getElementById('dsq-show-more-reactions');
		var container = link.parentNode;
		container.removeChild(link);

		for (var i = 0, reaction; reaction = reactions[i]; i++) {
			var el = Dsq.Templates.generateReactionHTML(reaction);
			if (el) {
				container.innerHTML += el;
			}
		}

		if (has_more) {
			var d = Dsq.jsonData.settings.disqus_url;
			var f = Dsq.jsonData.forum.url;
			var t = Dsq.jsonData.thread.id;
			var s = start;
			var l = limit;

			var handler = 'Dsq.Utils.execScript(\'' + d + '/forums/' + f + '/more_reactions.js?t=' + t + '&s=' + s + '&l=' + l + '\', true); return false;';
			container.innerHTML += '<li id="dsq-show-more-reactions" class="dsq-show-more-reactions"><button type="button" class="dsq-button-small" onclick="' + handler + '">Show more reactions</button></li>';
		}
	};

	this.generateReactionHTML = function(reaction) {
		if (reaction.body === null || reaction.body == '') {
			return;
		}

		if (reaction.author_name === '') {
			reaction.author_name = '&nbsp;';
		}

		if (reaction.url === '') {
			reaction.url = reaction.get_service_url;
		}

		var item = '<li class="dsq-comment dsq-reaction" id="dsq-reaction-' + reaction.id + '">'
			+ '<div class="dsq-comment-header"> \
			<table> \
			<tr> \
			<td class="dsq-header-avatar"> \
			';

		if (reaction.author_url && reaction.author_url !== '') {
			item += '<a target="_blank" href="' + reaction.author_url +'" class="dsq-avatar">';
		}

		if (reaction.avatar_url && reaction.avatar_url !== '') {
			item += '<img src="' + reaction.avatar_url + '"/>';
		} else {

			item += '<img src="' + Dsq.jsonData.media_url + '/images/noavatar92.png"/>';
		}

		var service_icon = (reaction.get_service_name == 'trackback' || reaction.get_service_name == 'pingback' ? 'rss' : reaction.get_service_name.replace(' ', ''));
		item += (reaction.author_url && reaction.author_url !== ''
				? '</a>'
				: '')
			+ '</td>'
			+ '<td><cite class="dsq-comment-cite">' + reaction.author_name + '</cite> <span class="dsq-comment-header-time">' + reaction.date_created + '</span></td>'
			+ '<td class="dsq-comment-header-likes"></td>'
			+ '</tr></table></div>' // end dsq-comment-header
			+ '<div class="dsq-reaction-header" \
				<table> \
					<tr> \
						<td class="dsq-reaction-header-left">'
							+ '<img class="dsq-service-icon" src="' + Dsq.jsonData.media_url + '/images/reactions/services/' + service_icon + '.png" />'
							+ ' From <a class="dsq-service-name" target="_blank" href="' + reaction.url + '">' + reaction.get_service_name + '</a> '
							+ 'via <a href="' + reaction.source_url + '">' + (reaction.source == 'backtype' ? 'BackType' : 'UberVU') + '</a>'
						+ '</td>'
						+ '<td class="dsq-reaction-header-right">';

			if(reaction.retweets) {
				var num_retweets = reaction.retweets.length;
				if (num_retweets > 0) {
					if (num_retweets == 1) {
						item += 'One more retweet from <a href="' + reaction.retweets[0].url + '">'  + reaction.retweets[0].author_name + '</a>';
					} else {
						item += (num_retweets + ' more retweets from ');
						item += '<span id="dsq-reaction-retweets-' + reaction.id + '">';
						var n_tweets = (num_retweets > 3) ? 3 : num_retweets;
						item += Dsq.Templates.showRetweets(reaction.id, n_tweets);
						if (n_tweets != num_retweets) {
							item += '</span> <a onclick="Dsq.Templates.showRetweets(' + reaction.id + ', 0, \'dsq-reaction-retweets-' + reaction.id + '\');'
								+ 'this.parentNode.removeChild(this); return false;" href="#">Show all</a>';
						}
					}
				}
			}	
			item += '</td></tr> \
			</table> \
			</div>' // end dsq-reaction-header
			+ '<div class="dsq-comment-body"> \
				<div class="dsq-comment-message">' + reaction.body + '</div>'
			+ '</div> \
			<div class="dsq-comment-footer"> \
				<div class="dsq-comment-footer-left"> \
				</div>'
				+ (Dsq.jsonData.request.is_moderator || Dsq.jsonData.request.is_global_moderator 
					? ' \
					<div class="dsq-comment-footer-right"> \
						<button type="button" class="dsq-button-small dsq-hide-reaction" onclick="Dsq.Reaction.hide(' + reaction.id + ')">Hide</button> \
					</div>'
					: '')
			+ '</div>'
		item += '</li>'; /* Reaction HTML ends */
		return item;
	};

	this.reactions = function() {
		var html, reaction;

		if (Dsq.jsonData.reactions === undefined || Dsq.jsonData.reactions.length === 0) {
			return '';
		}

		html = '';
		for (var i = 0; reaction = Dsq.jsonData.reactions[i]; i++) {
			var item = Dsq.Templates.generateReactionHTML(reaction);
			if (item) {
				html += item;
			}
		}

		if (Dsq.jsonData.has_more_reactions) {
			var d = Dsq.jsonData.settings.disqus_url;
			var f = Dsq.jsonData.forum.url;
			var t = Dsq.jsonData.thread.id;
			var s = Dsq.jsonData.reactions_start;
			var l = Dsq.jsonData.reactions_limit;

			var handler = 'Dsq.Utils.execScript(\'' + d + '/forums/' + f + '/more_reactions.js?t=' + t + '&s=' + s + '&l=' + l + '\', true); return false;';
			html += '<li id="dsq-show-more-reactions" class="dsq-show-more-reactions"><button type="button" class="dsq-button-small" onclick="' + handler + '">Show more reactions</button></li>';
		}

		return '<h3 id="dsq-reactions-title" class="dsq-h3-reactions">Reactions</h3><ul id="dsq-reactions" class="dsq-reactions">' + html + '</ul>';
	};
	
	this._popupGeneric = function(content) {
		return ' \
		<div class="dsq-popup-container"> \
			<table> \
				<tbody> \
					<tr> \
						<td class="dsq-popup-tl"></td><td class="dsq-popup-b"></td><td class="dsq-popup-tr"></td> \
					</tr> \
					<tr> \
						<td class="dsq-popup-b"></td> \
						<td class="dsq-popup-body"> \
							<div class="dsq-popup-content"> \
								<div class="dsq-popup-title"> \
									<button type="button" class="dsq-button-small" style="float:right" onclick="Dsq.Popup._closePopup(null, true)">Close</button>'
									+ content['header'] 
								+ '</div>'
								+ content['body']
							+ '</div> \
							<div class="powered-by"><a href="http://disqus.com/comments/">Powered by <img src="http://media.disqus.com/images/embed/disqus-logo.png" alt="Disqus Comments" style="margin-bottom:-5px" /></a></div> \
						</td> \
						<td class="dsq-popup-b"></td> \
					</tr> \
					<tr> \
						<td class="dsq-popup-bl"></td><td class="dsq-popup-b"></td><td class="dsq-popup-br"></td> \
					</tr> \
				</tbody> \
			</table> \
		</div> \
		';
	};



	
	this.chooseSubscribe = function(post_id) {

		var pid = post_id ? '-' + post_id : '';
		var menu = Dsq.$('dsq-subscribe-menu' + pid);
		
		menu.style.display = menu.style.display == 'block' ? 'none' : 'block';
		
	};
	
	this.setSubscribe = function(value, el, post_id) {

		var pid = post_id ? '-' + post_id : '';
		var input = Dsq.$('dsq-subscribe-on-post' + pid);
		var select = Dsq.$('dsq-subscribe-select' + pid);
		var menu = Dsq.$('dsq-subscribe-menu' + pid);
		
		select.innerHTML = el.innerHTML;
		input.value = value;
		this.chooseSubscribe(post_id);
	};
	
	this.getFormFields = function(post_id) {

		var fields = {};
		var pid = post_id ? '-' + post_id : '';
		var name = Dsq.$('dsq-field-name' + pid);
		var email = Dsq.$('dsq-field-email' + pid);
		var website = Dsq.$('dsq-field-website' + pid);
		var username = Dsq.$('dsq-field-username' + pid);
		var password = Dsq.$('dsq-field-password' + pid);

		fields = {
			'name': name,
			'email': email,
			'website': website,
			'username': username,
			'password': password
		}
		
		return fields;
	}
	
	this.validateFields = function(post_id) {
		
		if(Dsq.jsonData.request.is_authenticated) { return true; }
		
		var fields = Dsq.Templates.getFormFields(post_id);
		
		var nameField = fields.name;
		var websiteField = fields.website;
		var emailField = fields.email;
		
		websiteField.value = (websiteField.value == Dsq.Templates.placeholder['website']) ? '' : websiteField.value;
		
		var v = [{

			validator: Dsq.Validators.name,
			value: nameField.value
		}, {

			validator: Dsq.Validators.email,
			value: emailField.value
		}, {

			validator: Dsq.Validators.url,
			value: websiteField.value
		}];
		
		return Dsq.Validators.validate(v, function(e) { Dsq.Popup.popModal(e, 'Oops...') } );
	};
	
	this.checkExistingUser = function(post_id) {
		var fields = Dsq.Templates.getFormFields(post_id);		
		Dsq.Popup.loading(post_id);
		
		if (post_id) {
			Dsq.frames['reply_' + post_id].getUserByEmail(fields.email.value);
		} else {
			Dsq.frames['reply_0'].getUserByEmail(fields.email.value);
		}
	};

	this.validateAuth = function(el_clicked, post_id, auth_choice) {
		var fields = Dsq.Templates.getFormFields(post_id);
		var email = fields.email ? fields.email.value : '';
		var username = fields.username ? fields.username.value : '';
		var password = fields.password ? fields.password.value : '';
		
		Dsq.Templates.setLoadingButton(el_clicked, post_id);
		
		if (post_id) {
			Dsq.frames['reply_' + post_id].validateAuth(auth_choice, email, username, password);
		} else {
			Dsq.frames['reply_0'].validateAuth(auth_choice, email, username, password);
		}
	};

	this.lightboxUpdateEmail = function(post_id, new_email) {
		var fields = Dsq.Templates.getFormFields(post_id);
		fields.email.value = new_email;
	};

	this.lightboxAuthenticate = function(post_id, auth_choice, auth_data) {
		var title, body;
		var pid = post_id ? '-' + post_id : '';

		if(typeof(auth_data) == 'undefined') {
			var auth_data = Dsq.Templates.getFormFields(post_id);
		}

		d = auth_data;

		switch(auth_choice) {
			case 'register':
				var suggestedUsername = d.name.value.replace(/[^a-zA-Z0-9-]/g,'').toLowerCase();
			
				title = Dsq.jsonData.forum.allow_anon_post ? 'Optional:' : 'Required:';
				title += ' Register a <img src="http://media.disqus.com/images/embed/disqus-profile.png" alt=Disqus Profile" />';

				body = ' \
				<ul class="dsq-lightbox-register-reasons"> \
				<li>Verify your comments</li> \
				<li>Edit and delete comments</li> \
				<li>Manage comments and replies</li> \
				</ul> \
				';

				body += ' \
				<div class="dsq-lightbox-auth-fields"> \
					<table> \
						<tr> \
							<td>Email</td> \
							<td><input type="text" value="' + d.email.value + '" onchange="Dsq.Templates.lightboxUpdateEmail(' + post_id + ', this.value)" /><div id="dsq-email-errors' + pid + '"></div></td> \
						</tr> \
						<tr> \
							<td>Username</td> \
							<td><input id="dsq-field-username' + pid + '" type="text" value="' + suggestedUsername + '"/><div id="dsq-username-errors' + pid + '"></div></td> \
						</tr> \
						<tr> \
							<td>Password</td> \
							<td><input id="dsq-field-password' + pid + '" type="password" /><div id="dsq-password-errors' + pid + '"></div></td> \
						</tr> \
					</table> \
					<div class="dsq-lightbox-switch-auth"><a href="#" onclick="Dsq.Templates.lightboxAuthenticate(' + post_id + ',\'login\'); return false">Login instead</a></div> \
				</div> \
				<div id="dsq-lightbox-errors' + pid + '" class="dsq-lightbox-errors"></div> \
				<div class="dsq-lightbox-submit"> \
					<div class="dsq-lightbox-auth-post"><button type="button" class="dsq-button" onclick="Dsq.Templates.validateAuth(this, ' + post_id + ',\'' + auth_choice + '\')">Register and Post comment</button></div>'
					+ (Dsq.jsonData.forum.allow_anon_post
						? '<div class="dsq-lightbox-auth-skip"><button type="button" class="dsq-button-small" onclick="Dsq.Templates.postComment(' + post_id + ', this, true)">Just post as a Guest</button></div>'
						: '')
				+ '</div> \
				';
				break;
			case 'login':
				title = Dsq.jsonData.forum.allow_anon_post ? 'Optional:' : 'Required:';
				title += ' Login to your <img src="http://media.disqus.com/images/embed/disqus-profile.png" alt=Disqus Profile" />';
				body = '';
				
				if(d.avatar_url) {
					body += '<div class="dsq-lightbox-recognized"><table><tr>';
					body += '<td><img src="' + d.avatar_url + '" alt="" /></td>';
					body += '<td><span class="dsq-badge ' + (d.verified ? 'dsq-badge-verified' : 'dsq-badge-registered') + '">' + (d.verified ? 'Verified' : 'Registered') + '</span></td>';
					body += '<td>Hey <strong>' + d.display_name + '</strong>, is that you? Login below to claim this comment.';
					body += '</tr></table></div>';
				}

				body += ' \
				<div class="dsq-lightbox-auth-fields"> \
					<table> \
						<tr> \
							<td>Username or Email</td> \
							<td><input id="dsq-field-username' + pid + '" type="text" value="' + (d.avatar_url ? d.username : '') + '" /></td> \
						</tr> \
						<tr> \
							<td>Password <a href="http://disqus.com/forgot" target="_blank">(cannot log in?)</a></td> \
							<td><input id="dsq-field-password' + pid + '" type="password" /></td> \
						</tr> \
					</table> \
					<div class="dsq-lightbox-switch-auth"><a href="#" onclick="Dsq.Templates.lightboxAuthenticate(' + post_id + ',\'register\'); return false">Register instead</a></div> \
				</div> \
				<div id="dsq-lightbox-errors' + pid + '" class="dsq-lightbox-errors"></div> \
				<div class="dsq-lightbox-submit"> \
					<div class="dsq-lightbox-auth-post"><button type="button" class="dsq-button" onclick="Dsq.Templates.validateAuth(this, ' + post_id + ',\'' + auth_choice + '\')">Login and Post comment</button></div>'
					+ (Dsq.jsonData.forum.allow_anon_post
						? '<div class="dsq-lightbox-auth-skip"><button type="button" class="dsq-button-small" onclick="Dsq.Templates.postComment(' + post_id + ', this, true)">Just post as a Guest</button></div>'
						: '')
				+ '</div> \
				';
				break;
			default:
				break;
		}
		Dsq.Popup.lightbox(body, title, post_id);
		Dsq.$('dsq-field-username' + pid).focus();
	};
	
	this.buttonsToRestore = [];
	this.setLoadingButton = function(btn, post_id) {
		var pid = post_id ? '-' + post_id : '';
		if (btn) {

			var loadingBtn = document.createElement('button');
			loadingBtn.id = btn.id + '-loading';
			loadingBtn.innerHTML = '<img src="http://media.disqus.com/images/loading-lite.gif" alt="" /> ' + Dsq.Strings.JUST_A_MOMENT;
			loadingBtn.className = btn.className + ' dsq-post-loading';
			btn.parentNode.appendChild(loadingBtn);
			btn.style.display = 'none';
			var cancelBtn = Dsq.$('dsq-cancel-button' + pid);
			if(cancelBtn) { cancelBtn.style.display = 'none'; this.buttonsToRestore.push(cancelBtn); }
			this.buttonsToRestore.push(btn);
		} else {

			var buttons = this.buttonsToRestore;
			for(var i = 0; i < buttons.length; i++) {
				buttons[i].style.display = 'inline';
				Dsq.Utils.deleteNode(Dsq.$(buttons[i].id + '-loading'));
			}
		}
		
	};

	this.postComment = function(post_id, el_clicked, force, auth_choice) {
		var append_id = post_id ? '-' + post_id : '';
		var fields = Dsq.Templates.getFormFields(post_id);

		if (Dsq.Templates.validateFields(post_id)) {

			if (!Dsq.jsonData.request.is_authenticated && !force &&
				((!Dsq.Utils.readCookie('skipped_auth') && !disqus_skip_auth && !Dsq.jsonData.forum.disqus_auth_disabled) || !Dsq.jsonData.forum.allow_anon_post)) {
				Dsq.Templates.checkExistingUser(post_id);
				return false;
			}
			var params = [];
			if (!Dsq.jsonData.request.is_authenticated) {
				params.push(fields.name.value,
					fields.email.value,
					fields.website.value);

				if (auth_choice == 'login' || auth_choice == 'register') {
					params.push({
						auth_choice: auth_choice,
						username: fields.username.value,
						password: fields.password.value,
						email: fields.email.value
					});
				} else {
					params.push(null);
				}

				params.push(null /* sharing options */, Dsq.$('dsq-subscribe-on-post' + append_id).value);
			} else {
				var service_checked = function(name) {
					var el = Dsq.$('dsq-sharing-' + name + append_id);
					return (el !== null && el.checked === true) ? '1' : '0';
				};
				params.push(null, null, null, null, {
					tw: service_checked('twitter'),
					fb: service_checked('facebook'),
					tr: service_checked('tumblr'),
					wp: service_checked('wordpress'),
					mt: service_checked('movabletype'),
					tp: service_checked('typepad'),
					yh: service_checked('yahoo')
				});
			}

			var frame = Dsq.frames['reply_' + (post_id ? post_id : 0)];
			frame.post.apply(frame, params);

			if (el_clicked) {
				Dsq.Templates.setLoadingButton(el_clicked, post_id);
			}
			
			if (force) {
				Dsq.Utils.createCookie('skipped_auth', true);	
			}
			
		} else {
			return false;
		}
	};

	this.editComment = function(el_clicked, post_id) {
		var edited_message = Dsq.$('dsq-edit-textarea-' + post_id).value;

		Dsq.Templates.setLoadingButton(el_clicked, post_id);
		Dsq.frames['edit_' + post_id].edit(post_id, edited_message);
	};

	this.toggleEdit = function(post_id) {
		var body = Dsq.$('dsq-comment-body-' + post_id);
		var message = Dsq.$('dsq-comment-message-' + post_id);

		if (!Dsq.Post.stateEditToggled[post_id]) {


			message.style.display = 'none';
			if (Dsq.$('dsq-edit-' + post_id)) {
				Dsq.$('dsq-edit-' + post_id).style.display = 'block';
			} else {

				var edit_area = document.createElement('div');
				edit_area.id = 'dsq-edit-' + post_id;
				edit_area.className = 'dsq-edit dsq-textarea';
				edit_area.innerHTML = ' \
				<div class="dsq-textarea-wrapper"> \
					<textarea class="dsq-edit-textarea" id="dsq-edit-textarea-' + post_id + '">' + message.innerHTML + '</textarea> \
				</div> \
				<div class="dsq-save-edit"> \
					<button type="button" onclick="Dsq.Templates.editComment(this, ' + post_id + ')" class="dsq-button-small">Save Edit</button> \
				</div> \
				<div id="dsq-edit-iframe-' + post_id + '" style="display: none"></div> \
				';

				body.appendChild(edit_area);

				if (!Dsq.frames['edit_' + post_id]) {
					var _meta = Dsq.jsonData.posts[post_id];
					Dsq.frames['edit_' + post_id] = new Dsq.ReplyFrame(Dsq.$('dsq-edit-iframe-' + post_id), post_id);
					Dsq.frames['edit_' + post_id].init();
					Dsq.frames['edit_' + post_id].setState(post_id, _meta.depth);
				}
			}
		} else {

			message.style.display = 'block';
			Dsq.$('dsq-edit-' + post_id).style.display = 'none';
		}
		
		Dsq.Post.stateEditToggled[post_id] = !Dsq.Post.stateEditToggled[post_id];
	};
	
	this.edit = function(el, post_id) {

		Dsq.Templates.toggleEdit(post_id);
	};

	this.toggleReply = function(post_id, button) {
		
		if(!this.stateReplyToggled[post_id]) {

			if (Dsq.$('dsq-reply-post-' + post_id)) {
				Dsq.$('dsq-append-post-' + post_id).style.display = 'block';
			} else {
				Dsq.$('dsq-append-post-' + post_id).innerHTML = Dsq.Templates.postBox(post_id);
				var container = Dsq.$('dsq-textarea-wrapper-' + post_id);
				if (!Dsq.frames['reply_' + post_id] && container) {
					var _meta = Dsq.jsonData.posts[post_id];
					Dsq.frames['reply_' + post_id] = new Dsq.ReplyFrame(container, post_id);
					Dsq.frames['reply_' + post_id].init(function() {

						Dsq.$('dsq-append-post-' + post_id).innerHTML = Dsq.Templates.postBox(post_id, true);
						Dsq.$('dsq-form-area-' + post_id).innerHTML = '';

						var theme = (typeof disqus_frame_theme == 'undefined') ? 'default' : disqus_frame_theme;
						Dsq.Iframes.showReplyIframeInContainer(Dsq.$('dsq-form-area-' + post_id), post_id, {theme: theme});

					});
					Dsq.frames['reply_' + post_id].setState(post_id, _meta.depth);
				}
			}
			Dsq.$('dsq-append-post-' + post_id).className = 'dsq-append-post';
			Dsq.$('dsq-comment-footer-reply-' + post_id).className = 'dsq-comment-footer-reply-active';
			
		} else {

			Dsq.$('dsq-append-post-' + post_id).style.display = 'none';
			Dsq.$('dsq-append-post-' + post_id).className = '';
			Dsq.$('dsq-comment-footer-reply-' + post_id).className = 'dsq-comment-footer-reply';
		}
		
		this.stateReplyToggled[post_id] = !this.stateReplyToggled[post_id];

		if(Dsq.Utils.ie && this.stateReplyToggled[post_id]) {

		}

		Dsq.Events.fire(Dsq.Events.REPLY_IFRAME_TOGGLED, {
			postId: post_id,
			opened: this.stateReplyToggled[post_id]
		});
	};
	
	this.moderateOptions = function(post_id) {
		var _meta = Dsq.jsonData.posts[post_id];
		var userData = Dsq.jsonData['users'][_meta.user_key];
		
		if(!Dsq.jsonData.request.is_moderator && !Dsq.jsonData.request.is_global_moderator) { return false; }

		var html;
		
		html = ' \
		<div class="dsq-moderate-options"> \
		<table>'
		+ (_meta.email ? '<tr><td>Email</td><td>' + _meta.email + '</td></tr>' : '')
		+ (_meta.ip ? '<tr><td>IP address</td><td>' + _meta.ip + '</td></tr>' : '')
		+ '<tr> \
			<td>Actions</td> \
			<td><ul>'
			+ (Dsq.jsonData.request.moderator_can_edit
				? '<li><a href="#" onclick="Dsq.Post.edit(this, ' + post_id + '); Dsq.Popup._closePopup(null, true); return false;">Edit Comment</a></li>'
				: '')
			+ '<li><a href="#" onclick="Dsq.Post.removePost(' + post_id + ', 1); Dsq.Popup._closePopup(null, true); return false;">Delete Comment</a></li> \
			<li><a href="#" onclick="Dsq.Post.reportSpam(' + post_id + '); Dsq.Popup._closePopup(null, true); return false;">Mark Spam</a></li> \
			<li><a href="#" onclick="Dsq.Popup.blacklist(' + post_id + '); return false">Block User</a></li> \
			</ul></td> \
			</table> \
		</div> \
		';
		
		html += '<p>Go to the full <a href="http://disqus.com/comments/moderate/" target="_blank">moderate panel</a> for more options.</p>';
		
		return Dsq.Popup.popModal(html, 'Moderate Options', post_id);
	};
	
	this.placeholder = {
		'class': 'dsq-placeholder',
		'name': Dsq.Strings.NAME,
		'email': Dsq.Strings.EMAIL,
		'website': Dsq.Strings.WEBSITE + ' (' + Dsq.Strings.OPTIONAL.toLowerCase() + ')'
	};
	
	this.handlePlaceholder = function(evt, el, key) {
		var placeholder = Dsq.Templates.placeholder[key];
		var className = Dsq.Templates.placeholder['class'];
		
		switch(evt.type) {
			case 'focus':
				if(el.value == placeholder) {
					el.value = '';
					el.className = '';
				}
				break;

			case 'blur':
				if(el.value == '') {
					el.value = placeholder;
					el.className = className;
				}
				break;
			default:
				break;
		}
	};
	
	this.paginate = function(page, el_clicked) {

		var extra_params = '';

		if(typeof disqus_per_page != 'undefined') {
			extra_params += '&per_page=' + disqus_per_page;
		}
		if(typeof disqus_sort != 'undefined') {
			extra_params += '&sort=' + disqus_sort;
		}

		Dsq.$('dsq-pagination').innerHTML += '<img src="http://media.disqus.com/images/loading-small.gif">';
		
		if(el_clicked) {
			Dsq.Templates.setLoadingButton(el_clicked);
		}
		
		Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/thread.js'
			+ '?slug='	+ 'opera_vs_mozilla'
			+ '&p='		+ page
			+ extra_params);
	};
	
	
	this.rate = function(el, id, vote) {


		if(Dsq.jsonData.request.is_authenticated || Dsq.jsonData.forum.allow_anon_votes) {
			if(vote == 1) {
				Dsq.$('dsq-like-' + id).innerHTML = '<img src="http://media.disqus.com/images/loading-small.gif">';
			}
			Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/vote.js'
				+ '?post_id='    + id
				+ '&vote='        + vote);
		} else {
			Dsq.Popup.login('To rate, please log in');
		}
	};

	this.voted = function(post_id, points, vote) {

		Dsq.$('dsq-like-pts-' + post_id).innerHTML = points + Dsq.Utils.pluralize(points, ' person', ' people') + ' liked this.';

		if(vote) {
			Dsq.$('dsq-like-' + post_id).innerHTML = 'You liked this.&nbsp;&nbsp;';
		}
	};




	this.postComment_onSuccess = function(response, parent_post_id, post_id) {
		var approved = response.message.post_meta.approved;

		if (parent_post_id) {
			Dsq.Post.toggleReply(parent_post_id);
		}

		Dsq.Popup._closePopup(null, true);
		
		if (approved) {
			Dsq.Post.incrementPostCount();
			Dsq.Post.outlineComment(post_id);
		} else {			
			var unapproved_msg = 'Thanks for posting!\
	 Your comment must be approved by a moderator before appearing here.\
			';
			Dsq.Popup.popModal(unapproved_msg, 'Comment awaiting approval', post_id);
		}

		var sharing_results = response.message.sharing_results;
		var sharing_errors = '';
		for (var service in sharing_results) {
			if (sharing_results.hasOwnProperty(service) === true) {
				if (sharing_results[service].error === true) {
					sharing_errors += service + ', ';
				}
			}
		}

		if (sharing_results.facebook && sharing_results.facebook.callback) {
			FB.ensureInit(function() {
				FB.Connect.streamPublish('', sharing_results.facebook.attachment);
			});
		}

		if (sharing_errors !== '') {
			var message = 'Your comment was posted, but there were errors sharing with the following connections: ';
			message += sharing_errors.replace(/,\s$/, '');
			message += '<p><a href="' + Dsq.jsonData.settings.disqus_url + '/profile/connections" target="_blank">Configure your connections here</a></p>'
			Dsq.Popup.popModal(message, 'Sharing options');
		}

		Dsq.Templates.setLoadingButton(false);
	};

	this.postComment_onFailure = function(response, parent_post_id, post_id) {

		Dsq.Templates.setLoadingButton(false);
	};
};




// TODO: It might be faster to use string methods to find all <li (...) </li> blocks and pass to Dsq.PostHandler manually.
Dsq.CommentsHandler = function(str, head, post_id, content, tail, offset, s) {
	var prepend_post = Dsq.Templates.prependPost(post_id);
	var append_post = Dsq.Templates.appendPost(post_id);

	content = content.replace(Dsq.POST_RE, Dsq.PostHandler);
	Dsq.Templates.postLoopCounter++;
	head = Dsq.Templates.Filters.commentContainer(post_id, head);
	return prepend_post + head + content + tail + append_post;
};

Dsq.PostHandler = function(str, h_head, post_id, h_content, h_tail, b_head, b_content, b_tail, offset, s) {
	var prepend_header = Dsq.Templates.postPrependHeader(post_id);
	var append_header = Dsq.Templates.postAppendHeader(post_id);
	var prepend_body = Dsq.Templates.preBody(post_id);
	var append_body = Dsq.Templates.postBody(post_id);
	var append_footer = Dsq.Templates.postFooter(post_id);

	b_content = b_content.replace(Dsq.POST_BODY_RE, Dsq.PostBodyHandler);
	return h_head + prepend_header + h_content + append_header + h_tail + b_head + prepend_body + b_content + append_body + b_tail + append_footer;
};

Dsq.PostBodyHandler = function(str, head, post_id, content, tail, offset, s) {
	content = Dsq.Templates.Filters.commentContent(post_id, content);
	return head + content + tail;
};

Dsq.MediaPostHandler = function(str, args, offset, s) {
	args = args.split(' ');
	if(args[0] == 'seesmic') {
		return '<br />' + Dsq.Templates.mediaSeesmic(args[1], args[2]);
	}
	return '';
};


/**
 * Shorcuts
 */
Dsq.$ = function(element) { return document.getElementById(element); };
Dsq.$b = document.body || document.getElementsByTagName('body')[0];


/**
 * Dsq.Debug: Logging functions.
 */

Dsq.Debug = new function() {this.log=function(s){};this.profile=function(f){if(typeof f == 'function')return f();else return eval(f);};};


/**
 * Dsq.Urls: URL paths
 */
Dsq.Urls = new function() {
	this.LOGIN = '/profile/login/';
	this.LOGOUT = '/logout/';
	this.REPLY = 'http://tntluoma.disqus.com/opera_vs_mozilla/reply.html';
	this.REQUEST_USER_PROFILE = '/AnonymousUser/';
	this.REQUEST_USER_AVATAR = 'http://media.disqus.com/images/noavatar92.png';
};
// Dsq.Urls

/**
 * Dsq.Validators: Validation for form fields
 */
Dsq.Validators = new function() {
	this.VALID_EMAIL_RE = /^[a-z0-9\-\_\+]+(\.[a-z0-9\-\_\+]+)*\@(([a-z0-9\-\_\+]+(\.[a-z0-9\-\_\+]+)*)+\.[a-z]{2,}|([0-9]+\.){3}[0-9]+)$/i;
	this.name = function(name) {
		var error = false;

		if(typeof Dsq.Templates.placeholder !== 'undefined' &&
		   name == Dsq.Templates.placeholder.name) {
			error = true;
		}
		if(name.length <= 1) {
			error = true;
		}

		if(error) {
			return "Please enter a name to comment.";
		} else {
			return true;
		}
	};
	this.email = function(addr) {
		if(Dsq.Validators.VALID_EMAIL_RE.test(addr)) {
			return true;
		} else {
			return "Please enter a valid email to comment.";
		}
	};
	this.url = function(addr) {
		if(!addr || addr.indexOf('.') != -1) {
			return true;
		} else {
			return "Please check your website URL (this field is optional).";
		}
	};

	this.validate = function(bulk_validation, failure_callback) {
		failure_callback = failure_callback || function(e){ alert(e); };

		for(var i = 0; i < bulk_validation.length; i++) {
			v = bulk_validation[i];
			ret = v.validator(v.value);
			if(ret !== true) {
				failure_callback(ret);
				return false;
			}
		}
		return true;
	};
};

/**
 * Dsq.Utils: Generic utility functions.
 */
Dsq.Utils = new function() {
	this.ie = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
	this.ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;
	this.ie6 = (!window.XMLHttpRequest) ? true: false;
	this.webkit = navigator.userAgent.indexOf('AppleWebKit/') >= 0;
	this.gebiFromElementCollectionCache = {};
	this._styleSheet = null;

	this.gebiFromElement = function(el, id, tag) {
		// This only method only helps IE.
		if(!this.ie) {
			return Dsq.$(id);
		} else {
			var cacheKey = el.id + '-' + tag;
			tag = tag || 'div';
			if(typeof this.gebiFromElementCollectionCache[cacheKey] != 'undefined') {
				collection = this.gebiFromElementCollectionCache[cacheKey];
			} else {
				collection = el.getElementsByTagName(tag);
				this.gebiFromElementCollectionCache[cacheKey] = collection;
			}

			for(var i = 0; i < collection.length; i++) {
				if(collection[i].id == id) {
					return collection[i];
				}
			}
			return null;
		}
	};

	this.execOnReady = function(func) {
		var node = document.createElement('document:ready');
		try {
			node.doScroll('left');
			func();
			node = null;
		} catch(err) {
			setTimeout(function() { Dsq.Utils.execOnReady(func); }, 10);
		}
	};


	// Courtesy of http://www.quirksmode.org/js/cookies.html
	this.createCookie = function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	};

	this.readCookie = function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	};

	this.eraseCookie = function(name) {
		Dsq.Utils.createCookie(name,"",-1);
	};

	this.deleteNode = function(node) {
		if(node) {
			this.deleteChildren(node);
			if(typeof node.outerHTML != 'undefined') { node.outerHTML = ''; }
			else if(node.parentNode) { node.parentNode.removeChild(node); }
			delete node;
		}
	};

	this.deleteChildren = function(node) {
		if(node) {
			for(var x = node.childNodes.length-1; x >= 0; x--) {
				var childNode = node.childNodes[x];
				if(childNode.hasChildNodes()) { this.deleteChildren(childNode); }
				if(typeof childNode.outerHTML != 'undefined') { childNode.outerHTML = ''; }
				else node.removeChild(childNode);
				delete childNode;
			}
		}
	};

	this.findPos = function(obj) {
		var curleft = 0;
		var curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	};

	this.getWindowSize = function() {
		var windowWidth = -1;
		var windowHeight = -1;

		if(typeof(window.innerWidth) == 'number') { //Non-IE
			windowWidth = window.innerWidth;
			windowHeight = window.innerHeight;
		} else if(document.documentElement) { // IE 6+ in 'standards compliant mode'
			windowWidth = document.documentElement.clientWidth || document.body.clientWidth;
			windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
		}

		return [windowWidth, windowHeight];
	}

	this.getScrollPos = function() {
		var scrollWidth, scrollTop;

		if(document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollWidth)) {
			scrollWidth = document.documentElement.scrollWidth;
			// IE is weird here.  If no doctype is provided, document.body.scrollTop is 0,
			// otherwise document.documentElement.scrollTop is 0.
			scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
		} else if(document.body.scrollTop && document.body.scrollWidth) {
			scrollWidth = document.body.scrollWidth;
			scrollTop = document.body.scrollTop;
		}

		return [scrollWidth, scrollTop];
	}

	this.addEventListener = function(instance, eventName, listener) {
		var listenerFn = listener;
		if (instance.addEventListener) {
			instance.addEventListener(eventName, listenerFn, false);
		} else if (instance.attachEvent) {
			listenerFn = function() {
				listener(window.event);
			};
			instance.attachEvent("on" + eventName, listenerFn);
		} else {
			throw new Error("Event registration not supported");
		}
		return {
			instance: instance,
			name: eventName,
			listener: listenerFn
		};
	};

	this.removeEventListener = function(event) {
		var instance = event.instance;
		if (instance.removeEventListener) {
			instance.removeEventListener(event.name, event.listener, false);
		} else if (instance.detachEvent) {
			instance.detachEvent("on" + event.name, event.listener);
		}
	};

	this.fixIframesIE = function(id) {
		var disqusThread = Dsq.$(disqus_container_id);
		var iframes = disqusThread.getElementsByTagName('iframe');

		if(id) {
			var container = Dsq.$(id);
		} else {
			var container = Dsq.$('dsq-content');
		}

		for(i = 0; i < iframes.length; i++) {
			if (container) {
				iframes[i].style.width = container.offsetWidth;
			}
		}
	};

	this.getElementsByClassName = function(oElm, strTagName, strClassName) {
	/* Credit: Jonathan Snook [http://www.snook.ca/jonathan], Robert Nyman [http://www.robertnyman.com] */
		var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		strClassName = strClassName.replace(/\-/g, "\\-");
		var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
		var oElement;
		for(var i = 0; i < arrElements.length; i++) {
			oElement = arrElements[i];
			if(oRegExp.test(oElement.className)) {
				arrReturnElements.push(oElement);
			}
		}
		return (arrReturnElements);
	};

	this.postToUrl = function(url, post_data, opt_redirect) {
		var form = document.createElement('form');
		var iframe_container = document.createElement('div');
		var id = 'dsq-temp-iframe-' + (new Date()).getTime();

		form.method = 'POST';
		form.action = url;
		if (!opt_redirect) {
			form.target = id;
		}
		iframe_container.innerHTML = '<iframe style="display:none" name="' + id + '" id="' + id + '"></iframe>';

		for(var key in post_data) {
			if(post_data.hasOwnProperty(key)) {
				var input = document.createElement('input');
				input.name = key;
				input.type = 'hidden';
				input.value = post_data[key];

				form.appendChild(input);
			}
		}

		Dsq.$b.appendChild(iframe_container);
		Dsq.$b.appendChild(form);
		form.submit();
	};

	// Strips integer id from id of element in the form ('some-id-###')
	this.extractId = function(e) {
		var chunks = e.id.split('-');
		if(chunks.length <= 1) {
			return 0;
		} else {
			var retval = parseInt(chunks[chunks.length-1]);
			return !isNaN(retval) ? retval : null;
		}
	};

	this.getStyle = function(el, styleProp) {
		if(el.currentStyle) {
			var y = el.currentStyle[styleProp];
		} else if(window.getComputedStyle) {
			var y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
		}

		if(y == 'transparent' || y == '') {
			this.getStyle(el.parentNode, styleProp);
		} else {
			return y;
		}
	};

	this.execScript = function(url, append_qs, container) {
		var script = document.createElement('script');
		append_qs = typeof append_qs == 'undefined' ? true : append_qs;
		container = container || Dsq.container;

		if(append_qs) {
			var j = (url.indexOf('?') >= 0) ? '&' : '?';
			url += j + (new Date()).getTime();
		}
		script.type = 'text/javascript';
		script.charset = 'UTF-8';
		script.src = url;
		container.appendChild(script);
		return script;
	};

	this.pluralize = function(num, singular, plural) {
		return (num != 1) ? plural || 's' : singular || '';
	};

	this.getRequestParams = function(queryString /* optional */) {
		var pairs, tuple;
		var params = {};

		queryString = queryString || window.location.search.substring(1);
		pairs = queryString.split('&');

		for (var i = 0, pair; pair = pairs[i]; i++) {
			tuple = pair.split('=');
			params[tuple[0]] = (tuple[1] || true);
		}

		return params;
	};

	this.addCssRule = function(selector, styleText, index) {
		var stylesheet;
		index = index || 0;

		if(!this._styleSheet) {
			var styleEl = document.createElement('style');
			document.getElementsByTagName('head')[0].appendChild(styleEl);
			this._styleSheet = styleEl.sheet;
			if(!this._styleSheet) {
				// IE does not like our newly created stylesheet.
				this._styleSheet = document.styleSheets[document.styleSheets.length-1];
			}
		}
		stylesheet = this._styleSheet;

		if(stylesheet.insertRule) {
			var ruleText = selector + ' { ' + styleText + ' }';
			if(index == -1) {
				index = stylesheet.cssRules.length;
			}
			stylesheet.insertRule(ruleText, index);
		} else if(stylesheet.addRule) {
			stylesheet.addRule(selector, styleText, index);
		}
	};

	this.forEachIn = function(obj, callback) {
		for(var key in obj) {
			if(obj.hasOwnProperty(key)) {
				callback(key, obj[key]);
			}
		}
	};

	this._interpolateGlobalContext = {
		// values that get used a lot and are global to the request
		'profile_url': Dsq.Urls.REQUEST_USER_PROFILE,

		'disqus_url': Dsq.jsonData.settings.disqus_url,
		'media_url': Dsq.jsonData.settings.media_url,
		'request_username': Dsq.jsonData.request.username,
		'request_display_username': Dsq.jsonData.request.display_username,
		'forum_name': Dsq.jsonData.forum.name
	};

	this.renderFromContextStack = function(key, contexts) {
		// Returns the first instance of `key` in the array of objects `contexts` or else ''
		for (var i=0; i<contexts.length; i++) {
			if (contexts[i][key] !== undefined) {
				return String(contexts[i][key]);
			}
		}
		throw new Error('key ' + key + ' not found in context');
	};

	var that = this;
	this.interpolate = function(fmt, opt_localContext) {
		// Interpolate `fmt` named-format string with an assumed global context.
		// Based on `interpolate` in django.views.i18n
		var contextStack = [opt_localContext || {}, that._interpolateGlobalContext];
		return fmt.replace(/%\(\w+\)s/g, function(match){
			return that.renderFromContextStack(match.slice(2,-2), contextStack);
		});
	};

	this.stripTags = function(s) {
		// Removes HTML tags from `s`
		return s.replace(/(<([^>]+)>)/g,"");

	};

	this.assert = function(b) {
		if (!b) {
			throw new Error('Assertion error.');
		}
	};

};
// Dsq.Utils

/**
 * Dsq.Popup: Popup helper functions.
 */
Dsq.Popup = new function() {
	this.timeHide = new Array();
	this.timeShow = new Array();
	this.activePopup = {};
	this.profileCache = {};
	this.statusCache = {};

	this.showTimer = function(post_id) {
		// clear the hide timer
		clearTimeout(this.timeHide[post_id]);

		// start the timer
		if(!Dsq.Popup.profileIsOn && !Dsq.Thread.adminIsOn) {
			this.timeShow[post_id] = setTimeout("Dsq.Popup.popProfile(\"" + post_id + "\")", 400);
		}
	};

	this.hideTimer = function(post_id) {
		// clear the show timer
		clearTimeout(this.timeShow[post_id]);
	};

	this.updateProfile = function(username) {
		// Callback from /embed/profile.js
		if (this.statusCache[username]) {
			var statusEl = Dsq.$('dsq-profile-status-' + username);
			statusEl.innerHTML = this.statusCache[username];
			statusEl.style.display = 'block';
		}

		if (this.profileCache[username]) {
			var _cache = this.profileCache[username];

			var _genhtml = function(text) { return '<span><big>' + text + '</big></span>'; };
			var _no_comments = _genhtml(Dsq.FmtStrings.NUMBER_OF_COMMENTS(_cache.comments_count));
			var _no_likes = _genhtml(Dsq.FmtStrings.NUMBER_OF_LIKES(_cache.likes_count));
			var _no_points = _genhtml(Dsq.FmtStrings.NUMBER_OF_POINTS(_cache.points));

			var statsEl = Dsq.$('dsq-popup-profile-user-stats-' + username);
			statsEl.innerHTML = '';

			if (Dsq.jsonData.users[username].registered) {
				statsEl.innerHTML = _no_comments + _no_likes;
			}
			statsEl.innerHTML += _no_points;

			var activeSites = '';
			for (var i = 0; i < _cache.active_sites.length; i++) {
				var site = _cache.active_sites[i];
				activeSites += '<li><a href="' + site.url + '"> \
					<img src="' + site.favicon + '"/ width="16" height="16"/></a>\
					<a href="' + site.url + '">' + site.name + '</a></li>';
			}
			if (activeSites !== '') {
				Dsq.$('dsq-popup-profile-active-sites-' + username).innerHTML = activeSites;
			} else {
				Dsq.$('dsq-popup-profile-active-sites-' + username).innerHTML = 'This site.';
			}

			var moderatedSites = '';
			for (var i = 0; i < _cache.moderated_sites.length; i++) {
				var site = _cache.moderated_sites[i];
				moderatedSites += '<li><a href="' + site.url + '"> \
					<img src="' + site.favicon + '"/ width="16" height="16"/></a>\
					<a href="' + site.url + '">' + site.name + '</a></li>';
			}
			if (moderatedSites !== '') {
				Dsq.$('dsq-popup-profile-moderated-' + username).innerHTML = moderatedSites;
			} else {
				Dsq.$('dsq-popup-profile-moderated-wrapper-' + username).innerHTML = '';
			}
		}

		// Reposition popup after full HTML is rendered
		if(Dsq.Popup.activePopup && Dsq.Popup.activePopup.el) {
			Dsq.Popup.initPopup(Dsq.Popup.activePopup.el, Dsq.Popup.activePopup.id, Dsq.Popup.activePopup.type);
		}

	};

	this.showCookieMsgs = function() {
		var title = '';
		var message = '';
		var numAlerts = 0;

		Dsq.Utils.forEachIn(Dsq.jsonData.cookie_messages, function(k, v) {
			if (!v) return;

			switch(k) {
				// Cookie: Twitter
				case 'post_twitter':
					if (v === 'error') {
						title = 'Twitter Error!';
						message += '<li id="dsq-msg-twitter-error">Oops, we couldn\'t tweet this comment. Please check your <a href="http://disqus.com/account/services">account settings</a>.</li>';
					} else {
						var _msg = v.split(':');
						title = 'Tweeted!';
						message += '<li id="dsq-msg-twitter-success">Your comment was successfully tweeted. <a href="http://twitter.com/' + _msg[0] + '/status/' + _msg[1] + '">Click here to view the tweet</a>.</li>';
					}
					break;
				// Cookie: Unapproved Post
				case 'post_not_approved':
					title = 'Comment awaiting approval by a moderator';
					message += '<li id="dsq-msg-post-not-approved">Your comment must be approved by a moderator before appearing here.</li>';
					break;
				// Cookie: Profile Found
				case 'post_has_profile':
					title = 'Use your existing commenter profile';
					message += '<li id="dsq-msg-post-has-profile">You have just posted your commment as a <span class="dsq-badge-guest">Guest</span>, but you may already have a <span class="logo-disqus">Disqus</span> Profile.<br /><br /><a href="http://disqus.com/claim">Log in and claim this comment!</a></li>';
					break;
				case 'user_created':
					var _data = v.split(':');
					title = 'Profile created!';
					message += '<li id="dsq-msg-user-created">You have just created a <span class="logo-disqus">Disqus</span> Profile, the best way to claim, manage, and track your comments all over the web. \
					<br /><br />A confirmation is being sent to <strong>' + _data[1] + '</strong>. Please check for this email in order to verify your profile. \
					<ul class="dsq-list-tick"> \
						<li>Your username is <strong>' + _data[0] +'</strong>. <a href="http://disqus.com/people/' + _data[0] + '/" target="_blank">Click here to view your public profile</a>.</li> \
						<li>Be sure to set your profile picture, as well as connect your <span class="dsq-badge-facebook">Facebook</span> and <span class="dsq-badge-twitter">Twitter</span> accounts. <a href="http://disqus.com/account/" target="_blank">Click here for account settings</a>.</li> \
					</ul> \
					</li>'
					break;
				default:
					break;
			}
			numAlerts++;
		});

		if(numAlerts > 1) {
			message = '<ul class="dsq-list-bluebullet">' + message;
			message += '</ul>';
			title = 'Thanks for posting!';
		}
		if(numAlerts > 0) {
			if(typeof(disqus_cookie_msgs) == 'function') {
				disqus_cookie_msgs(message, title);
			} else {
				Dsq.Popup.popModal(message, title);
			}
		}
	};

	this.helpBadges = function(post_id) {
		var html = ' \
			<ul class="dsq-popup-help"> \
				<li><span class="dsq-badge dsq-badge-verified">Verified</span> has a <span class="logo-disqus">Disqus</span> Profile with a confirmed email address.</li> \
				<li><span class="dsq-badge dsq-badge-registered">Registered</span> has a <span class="logo-disqus">Disqus</span> Profile, but has not yet confirmed his or her email address.</li> \
				<li><span class="dsq-badge dsq-badge-guest">Guest</span> is not logged in with any account and has not claimed his or her comments.</li> \
				<li class="dsq-help-otheraccts">Other accounts</li> \
				<li><span class="dsq-badge dsq-badge-facebook">Facebook</span> is using his or her Facebook profile via Facebook Connect.</li> \
				<li><span class="dsq-badge dsq-badge-twitter">Twitter</span> is using his or her Twitter profile via Twitter Sign-in.</li> \
				<li><span class="dsq-badge dsq-badge-openid">OpenID</span> is using his or her OpenID.</li> \
			</ul> \
		';

		this.popModal(html, 'Help: Types of Commenters', post_id);
		return;
	};

	this.permalink = function(post_id) {
		var header = 'Link to this comment';
		var body = '<strong>You are anchored to</strong>:<br />' + document.location.protocol + '//' + document.location.host + document.location.pathname + document.location.search + '#comment-' + post_id;

		this.popModal(body, header, post_id);
	};

	this.login = function(header, body) {
		var h = header || 'Login or Register';
		var b = body || '';
		b += Dsq.Templates.frameLogin({id: 'dsq-popup-login'});
		b += '</iframe>'; // HACK: Sometimes there is something funky with the IFRAME SRC that causes no end tag
		this.popModal(b, h, null, true, 'dsq-popup-login');
	};

	this.blacklist = function(id) {
		var _meta = Dsq.jsonData.posts[id];
		var userData = Dsq.jsonData['users'][_meta.user_key];
		var title = 'Add to Blacklist';
		var message = ' \
		Adding this person to the blacklist will block him or her from commenting on this site. Check the following types that you would like to add to the blacklist:'
		+ (userData['registered'] ?
			'<div class="dsq-blacklist-option"> \
				<input id="dsq-blacklist-username" type="checkbox" checked> \
				<label for="dsq-blacklist-username"><strong>Username</strong>: ' + userData['username'] + '</label> \
			</div>'
			: '')
		+ (_meta.email ?
			'<div class="dsq-blacklist-option"> \
				<input id="dsq-blacklist-email" type="checkbox" checked> \
				<label for="dsq-blacklist-email"><strong>Email address</strong>: ' + _meta.email + '</label> \
			</div>'
			: '')
		+ '<div class="dsq-blacklist-option"> \
			<input id="dsq-blacklist-ip" type="checkbox" onclick="Dsq.$(\'dsq-blacklist-ip-warning\').style.display=\'block\'"> \
			<label for="dsq-blacklist-ip"><strong>IP address</strong>: ' + _meta.ip + '</label> \
		</div> \
		';

		message += ' \
			<p id="dsq-blacklist-ip-warning" style="display:none">	\
				Note: Blocking this person\'s IP address may also unintentionally prevent others, who share his/her IP address, from commenting on this site. \
				This may include people who are sharing the same computer, living in the same house, or using the same Internet provider. Only block an IP address as a last resort. \
			</p> \
		';

		message += ' \
			<p style="text-align:center"><button type="button" onclick="Dsq.Post.blockUser(' + id + '); this.disabled=true; this.innerHTML=\'Just one moment...\'">Add to Blacklist</button></p> \
		';

		Dsq.Popup.popModal(message, title);
	};

	this.remoteAccountSettings = function() {
		var body = '';
		// Set up IFrame.
		var params = {};
		var base_url = 'http://disqus.com/forums/tntluoma/_auth/embed/remote_settings/';
		var attributes = {id: 'dsq-popup-account-settings'};
		if (typeof disqus_frame_theme != 'undefined') {
			params['theme'] = disqus_frame_theme;
		}

		body = Dsq.Templates._frameGeneric(base_url, params, attributes);
		this.popModal(body, 'Account Settings', null, true, 'dsq-popup-account-settings');
	};

	this.popModal = function(message, title, post_id, use_listener, extra_classes) {
		var container = document.createElement('div');
		var header, body;

		Dsq.Popup._closePopup(null, true);

		if(typeof(title) == 'undefined') { title = ''; }
		if(typeof(use_listener) == 'undefined') { use_listener = true; }

		if(post_id) {
			container.id = 'dsq-popup-message-' + post_id;
		} else {
			container.id = 'dsq-popup-message';
		}

		header = title;
		body = message;

		container.innerHTML = Dsq.Templates.popupModal(header, body);
		Dsq.Popup.initPopup(container, post_id, 'message', extra_classes);
		if(use_listener) {
			Dsq.Popup.popupListener = Dsq.Utils.addEventListener(document, 'mouseup', Dsq.Popup._closePopup);
		}
	};

	this.popAlert = this.popModal;

	this.loading = function(post_id) {
		var title = Dsq.Strings.JUST_A_MOMENT;
		var body = '<div style="text-align:center; padding: 5px 0 10px 0"><img src="http://media.disqus.com/images/loading.gif" alt="" /></div>'
		Dsq.Popup.lightbox(body, title, post_id);
	};

	this.lightbox = function(message, title, post_id) {
		// Wraps Dsq.Popup.popModal

		var overlay = document.createElement('div');
		overlay.id = 'dsq-overlay';
		overlay.className = 'dsq-overlay';
		Dsq.$b.appendChild(overlay);
		
		Dsq.Popup.popModal(message, title, post_id, false, 'dsq-lightbox');
	};

	this.popProfile = function(post_id, userKey) {
		var post = Dsq.jsonData['posts'][post_id];
		if (post && post.has_been_anonymized) {
			Dsq.Popup.popModal('This message was anonymized by its previous owner.', 'Anonymized', post_id);
			return;
		}

		if(post_id) {
			userKey = Dsq.jsonData['posts'][post_id].user_key;	
		}
		var userData = Dsq.jsonData['users'][userKey];
		var elId = 'dsq-popup-profile-' + userKey;
		var container = document.createElement('div');

		if(this.activePopup.el) {
			this._closePopup(null, true);
			if(this.activePopup.linkClicked) {
				this.activePopup.linkClicked = false;
				return;
			}
		}

		container.id = elId;
		container.innerHTML = Dsq.Templates.popupProfile(userKey);

		this.initPopup(container, post_id, 'profile');
		this.popupListener = Dsq.Utils.addEventListener(document, 'mouseup', this._closePopup);

		if(!this.profileCache[userKey]) {
			Dsq.Utils.execScript('http://disqus.com/embed/profile.js'
				+ '?username=' + userKey
				+ '&anon=' + (userData['registered'] ? 0 : 1)
				+ '&f=' + Dsq.jsonData['request'].forum);
		} else {
			this.updateProfile(userKey);
		}
	};

	this._closePopup = function(e, force) {
		var activePopup = Dsq.Popup.activePopup.el;
		var id = Dsq.Popup.activePopup.id;
		var link = 'dsq-avatar-' + id; // HACK: Specific to profile toggle target

		// HACK: This event should be gone if there is no active popup.
		if(!activePopup) {
			return;
		}
		if(force || !Dsq.Popup.isClicked(e, activePopup.id)) {
			// TODO: This is breaking iE?
			if(Dsq.Popup.popupListener) {
				Dsq.Utils.removeEventListener(Dsq.Popup.popupListener);
			}
			
			// Kill overlay
			var overlay = Dsq.$('dsq-overlay');
			if(overlay) { Dsq.Utils.deleteNode(overlay); }
			
			try {
				Dsq.Utils.deleteNode(activePopup);
			} catch(e) {
				// HACK: IE6 throws an error when using deleteNode() with a node containing a <table> in the html.
				activePopup.parentNode.removeChild(activePopup);
			}
			Dsq.Popup.activePopup = {};
		}

		if(!force && Dsq.Popup.isClicked(e, link)) {
 			Dsq.Popup.activePopup.linkClicked = true;
		}

	};

	this.initPopup = function(popup, post_id, type, extra_classes) {
		popup.className = 'dsq-popup dsq-popup-' + type + ' ' + (extra_classes ? extra_classes : '');
		if(Dsq.Utils.ie6 || Dsq.Utils.ie7) {
			// HACK: We can't modify the body before it's ready, so we need
			//       to use an IE-safe "DOMReady" workaround before loading
			//       our popup.
			Dsq.Utils.execOnReady(function() {Dsq.$b.appendChild(popup); });
		} else {
			Dsq.$b.appendChild(popup);
		}

		popup.style.display = 'block';

		var xPos = (Dsq.Utils.getWindowSize()[0] - popup.offsetWidth) / 2;
		var yPos = (Dsq.Utils.getWindowSize()[1] - popup.offsetHeight) / 2;

		if(Dsq.Utils.ie6) {
			yPos += Dsq.Utils.getScrollPos()[1];
		}

		popup.style.left = xPos + 'px';
		popup.style.top = yPos + 'px';

		Dsq.Popup.activePopup = {
			'el' : popup,
			'id' : post_id,
			'type': type,
			'linkClicked' : false
		};
	};

	this.isClicked = function(e, id) {
		var t = e.target || e.srcElement;
		while(t && t.parentNode) {
			if(t.id == id) {
				return true;
			}

			t = t.parentNode;
		}
		return false;
	};
};
// Dsq.Popup

/**
 * Dsq.Templates
 */
Dsq.Templates = new function() {
	/*
	 * Counter keeping track of the number of posts iterated over.
	 */
	this.postLoopCounter = 0;
	this.filters = {};
	this.addPostContainer = 'dsq-post-add';
	this.textareaContainer = 'dsq-post-add';

	this.registerTemplate = function(name, func) {
		this['$$_' + name] = func;

		if(typeof DsqLocal.Filters != 'undefined'
		&& typeof DsqLocal.Filters[name] == 'function') {
			// Push filters to this.filters to unify code.
			this.filters[name] = this.filters[name] || [];
			this.filters[name].push(DsqLocal.Filters[name]);
		}

		this[name] = function() {
			var ret;

			if(typeof DsqLocal.Templates != 'undefined'
			&& typeof DsqLocal.Templates[name] == 'function') {
				ret = DsqLocal.Templates[name].apply(this, arguments);
			}

			if(ret === undefined) {
				ret = this['$$_' + name].apply(this, arguments);
			}

			if(this.filters[name]) {
				var args = [ret];

				args.push.apply(args, arguments);
				for(var i = 0; i < this.filters[name].length; i++) {
					ret = this.filters[name][i].apply(this, args);
				}
			}

			return ret;
		};
	};

	this.registerFilter = function(name, func) {
		this.filters[name] = this.filters[name] || [];
		this.filters[name].push(func);
	};

	/**
	 * Dsq.Templates.Filters
	 */
	this.Filters = new function() {
		this.commentContainer = function(post_id, s) {
			var _meta = Dsq.jsonData.posts[post_id];
			var classes = [];
			if(Dsq.jsonData.request.page > 1) {
				classes.push('dsq-append');
			}

			//
			// Extra classes used for custom themes
			//

			if(_meta.depth) {
				classes.push('dsq-comment-child', 'dsq-depth-' + _meta.depth, 'dsq-parent-is-' + _meta.parent_post_id);
			}


			//

			if(_meta.author_is_creator) {
				// TODO: We need to deprecate the "special" class since it is not properly prefixed.
				classes.push('special', 'dsq-special');
			}
			if(_meta.author_is_moderator) {
				classes.push('dsq-moderator');
			}
			classes.push(['dsq-odd', 'dsq-even'][Dsq.Templates.postLoopCounter % 2]);

			s = s.substring(0, s.lastIndexOf('>'));
			return s + ' class="dsq-comment ' + classes.join(' ') + '" style="margin-left:' + _meta.depth*30 + 'px">';
		};

		this.commentContent = function(post_id, s) {
			var _meta = Dsq.jsonData.posts[post_id];
			if (_meta.killed) {
				return '<em>Comment removed.</em>';
			} else if (!_meta.approved) {
				return '<em>This comment was flagged for review.</em>';
			}

			s = s.replace(Dsq.MEDIA_POST_RE, Dsq.MediaPostHandler);
			return s;
		};
	};

	//
	// Thread
	//
	// TODO: These need to be stripped of all Django template tags.

	this.authPost = function() {
		if (!Dsq.jsonData.context.show_reply) {
			return '';
		}
		var result = [];
		result = result.concat([
				'<div id="dsq-auth"',
						Dsq.jsonData.integration.reply_position ? 'class="dsq-auth-bottom"' : '',
						'>',
					'<div class="dsq-by">',
						'<a href="http://disqus.com" target="_blank">',
							(Dsq.jsonData.integration.disqus_logo ?
								Dsq.Utils.interpolate('<img src="%(media_url)s/images/embed/by-disqus.png" alt="discussion by DISQUS">') :
								Dsq.Utils.interpolate('<img src="%(media_url)s/images/embed/dsq-button-120x19.png" alt="discussion by DISQUS">')
							),
						'</a>',
					'</div>',
					'<div class="dsq-auth-header">',
						'<h3 id="dsq-add-new-comment" class="dsq-h3-addcomment">',
								Dsq.Strings.ADD_NEW_COMMENT,
						'</h3>',
						'<div id="dsq-login">',
						(!Dsq.jsonData.request.is_authenticated && Dsq.jsonData.forum.allow_anon_post
								? '<p class="dsq-login-message" id="dsq-login-message">You are commenting as a <a class="dsq-help" title="Click for more information" href="#" onclick="Dsq.Popup.helpBadges(); return false">Guest</a>. You may select one to log into:</p>'
								: '')
		]);
		if (!Dsq.jsonData.request.is_authenticated) {
			result = result.concat([
							Dsq.Utils.interpolate(
								'<a id="dsq-login-toggle" href="%(disqus_url)s%(login_url)s?next=article:%(thread_id)s" onclick="Dsq.Popup.login(); return false"><img class="dsq-login-icon" src="%(media_url)s/images/dsq-profile-btn.png" title="%(log_into)s" alt="%(log_into)s"/></a>',
								{login_url: Dsq.Urls.LOGIN, thread_id: Dsq.jsonData.thread.id, log_into: Dsq.Strings.LOG_INTO_DISQUS}
								),
							'&nbsp; ',
							(Dsq.jsonData.context.use_fb_connect ?
								'<div id="dsq-fbc-login" onlogin="DisqusFbcParentController.onLogin()" size="medium" background="light" length="short" style="display:inline; margin-right:7px"></div>' :
								''
							),
							(Dsq.jsonData.context.use_twitter_signin ?
								Dsq.Utils.interpolate(
									'<div id="dsq-twitter-login" class="dsq-twitter-login" onclick="Dsq.Twitter.startTwitterConnect();" style="display:inline; cursor: pointer"><img src="%(media_url)s/images/twitter-signin-short.png" style="margin-right:7px" /></div>', {}) : ''),
							(Dsq.jsonData.context.use_openid ?
								Dsq.Utils.interpolate(
									'<div id="dsq-openid-login" class="dsq-openid-login" onclick="Dsq.OpenID.requestURL();" style="display:inline; cursor:pointer;"><img src="%(media_url)s/images/openid-login-button.png"/></div>', {}
								) : '')
			]);
		}
		result = result.concat([
						'</div>', // dsq-login
					'</div>', // dsq-auth-header
					'<div id="dsq-authenticated" class="dsq-authenticated" ',
						Dsq.jsonData.request.is_authenticated ? 'style="display:block"' : '',
						'>',
						'<div class="dsq-authenticated-pic">',
								Dsq.Utils.interpolate('<a href="%(url)s" title="%(request_display_username)s">' +
																			'<img class="dsq-post-avatar" src="%(avatar_url)s" alt="" /></a>',
																			{avatar_url: Dsq.Urls.REQUEST_USER_AVATAR,
																			url: (Dsq.jsonData.request.is_remote
																					 ? Dsq.jsonData.request.url
																					 : Dsq.jsonData.settings.disqus_url + Dsq.Urls.REQUEST_USER_PROFILE) }),
						'</div>',
						'<div class="dsq-authenticated-info">',
							'<ul>',
								'<li>',
									(Dsq.jsonData.request.is_remote
										? Dsq.FmtStrings.LOGGED_IN_AS(
												Dsq.Utils.interpolate('<a href="%(url)s" title="%(request_display_username)s">%(request_display_username)s</a>', {url:Dsq.jsonData.request.url})
										  )
										: Dsq.FmtStrings.LOGGED_IN_AS(
												Dsq.Utils.interpolate('<a href="%(disqus_url)s%(profile_url)s" title="%(request_display_username)s">%(request_display_username)s</a>')
											)
									),
								'</li>',
								'<li class="logout">',
									(!Dsq.jsonData.request.is_remote
										? Dsq.Utils.interpolate('<img class="dsq-login-icon" src="%(media_url)s/images/dsqicon12.png" alt="%(logged_in_as)s"/>&nbsp',
											{logged_in_as: Dsq.FmtStrings.LOGGED_IN_AS(Dsq.jsonData.request.display_username)})
										: ''),

									(!Dsq.jsonData.request.is_remote
										? Dsq.Utils.interpolate('<a href="%(disqus_url)s%(logout_url)s?ctkn=%(csrf_token)s" title="%(logout_from_disqus)s">',
											{logout_url: Dsq.Urls.LOGOUT, csrf_token: Dsq.CSRF_TOKEN, logout_from_disqus: Dsq.FmtStrings.LOGOUT_FROM('DISQUS')})
										: ((Dsq.jsonData.request.remote_domain == 'twitter')
												? Dsq.Utils.interpolate('using Twitter (<a href="%(disqus_url)s%(logout_url)s?ctkn=%(csrf_token)s" title="Logout">Logout</a>)',
												 {logout_url: Dsq.Urls.LOGOUT, csrf_token: Dsq.CSRF_TOKEN})
												: ((Dsq.jsonData.request.remote_domain == 'openid')
													 ? Dsq.Utils.interpolate('using OpenID (<a href="%(disqus_url)s%(logout_url)s?ctkn=%(csrf_token)s" title="Logout">Logout</a>)',
													 {logout_url: Dsq.Urls.LOGOUT, csrf_token: Dsq.CSRF_TOKEN})
													 : ''
													)
											)
									),

									(!Dsq.jsonData.request.is_remote ? Dsq.FmtStrings.LOGOUT_FROM('<span class="logo-disqus">DISQUS</span>') : ''),
									'</a>',
								'</li>',
							'</ul>',
						'</div>',
					'</div>'
		]);
		if (Dsq.jsonData.context.use_fb_connect) {
			result = result.concat([
					'<div id="dsq-fbc-authenticated" class="dsq-authenticated">',
						'<div id="dsq-fbc-profilepic" class="dsq-authenticated-pic" uid="loggedinuser" type="FB.XFBML.ProfilePic" size="square" facebook-logo="true"></div>',
						'<div class="dsq-authenticated-info">',
							'<ul>',
								'<li>',
									'Logged in as <span id="dsq-fbc-name" uid="loggedinuser" type="FB.XFBML.Name" linked="true" useyou="false"></span>',
								'</li>',
								'<li class="logout">using Facebook Connect <a href="#" onclick="javascript:DisqusFbcParentController.logout();return false;">(Logout)</a></li>',
							'</ul>',
						'</div>',
					'</div>'
			]);
		}
		result = result.concat([
				'</div>', // dsq-auth
				'<div id="dsq-toolbar-items">',
				'</div>'
		]);
		result = result.concat([
					//
					//
					//
				((!Dsq.jsonData.forum.allow_anon_post && !Dsq.jsonData.request.is_authenticated) ?
					// Needs to be translated:
					('<p id="dsq-no-anon-msg">Required: Please log into <span class="logo-disqus">Disqus</span> ' +
					(Dsq.jsonData.context.use_fb_connect ? 'or connect with Facebook ' : '') +
					(Dsq.jsonData.context.use_twitter_signin ? 'or sign in with Twitter ' : '') +
					(Dsq.jsonData.context.use_openid ? 'or sign in using OpenID ' : '') +
					Dsq.Utils.interpolate('to comment on <strong>%(forum_name)s</strong>.</p>')) :
					''
				),
				'<div id="dsq-post-add"></div>',
				'<div style="margin:10px 0">',
				((Dsq.jsonData.forum.use_media) ?
						'<a href="#" id="dsq-media-link" onclick="Dsq.Post.showMenu(this, false, \'media\'); return false">' + Dsq.Strings.USE_MEDIA + ' <small>&#9660;</small></a>' :
						''),
				'</div>'
		]);
		return result.join('');
	};


	this.header = function() {

		var html = '\<h3 id="dsq-comments-count" class="dsq-h3-commentcount">\
	 <span id="dsq-num-posts">53</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://tntluoma.disqus.com/opera_vs_mozilla/latest.rss"><img src="http://media.disqus.com/images/embed/bullet-feed.png"></a>\
	 </span>\
	 </h3>\
	 <div id="dsq-options" style="margin:15px 0">\
	 <span class="dsq-item-sort">\
	 Sort by\
	 <select id="dsq-sort-select" onchange="Dsq.Thread.sortBy(this.value);">\
	 <option value="hot" selected="selected">Popular now</option>\
	 <option value="best" >Best Rating</option>\
	 <option value="newest" >Newest first</option>\
	 <option value="oldest" >Oldest first</option>\
	 </select>\
	 &nbsp;\
	 </span>\
	 <span class="dsq-item-cp"><a href="http://tntluoma.disqus.com/opera_vs_mozilla/">Community Page</a>&nbsp;&nbsp;&nbsp;</span>\
	 <span class="dsq-item-subscribe">\
	 <img src="http://media.disqus.com/images/embed/email.png" style="width:12px;height:12px;vertical-align:middle">\
	 <span id="dsq-subscribe">\
	 <a href="#" onclick="Dsq.Thread.subscribe(1); return false">Subscribe by email</a>\
	 </span>\
	 </span>\
	 </div>\
	 <div id="dsq-alerts">\
	 <p>Comments for this page are closed.</p>\
	 </div>\
		';

		
			html = Dsq.Templates.authPost() + html;
		

		
		if (Dsq.jsonData.request.is_moderator) { 
			html = ' \
			<div class="dsq-alert-message dsq-upgrade-message"> \
				<strong>Disqus upgrade available.</strong> Hi ' + Dsq.jsonData.request.display_username + ', this message is being displayed to you because you are a moderator of this site. <a href="#" onclick="Dsq.$(\'dsq-upgrade-message\').style.display=\'block\';this.style.display=\'none\';return false">Click here for details.</a> \
				<div style="display:none; margin-top:10px;" id="dsq-upgrade-message"> \
					A new theme is available with added features. <a href="http://disqus.com/comments/settings/' + Dsq.jsonData.forum.url + '/?p=customize">To change your theme, click here</a> and choose the theme Narcissus. \
					If you do not upgrade, you are missing out on features such as: real-time commenting, new sign-in integrations, and an upgrade interface. \
					<strong>This message will automatically go away in one week.</strong> \
				</div> \
			</div> \
			' + html; 
		}
		return html;
	};

	this.footer = function() {
		var html = Dsq.Templates.pagination();

		

		html += Dsq.Templates.reactions();

		

		return html;
	};

	this.pagination = function() {
		var html = '';
		
		if (Dsq.$('dsq-pagination')) { Dsq.$('dsq-pagination').innerHTML = ''; }
		if (!Dsq.jsonData.thread.paginate) { return ''; }

		//
		// TODO: num_paginator still uses the template tag for pagination, 
		// 		while append_paginator does it all in JavaScript.
		//		This should all be in JavaScript.
		//

		if (Dsq.jsonData.thread.num_pages > 1 && Dsq.jsonData.request.page < Dsq.jsonData.thread.num_pages) {
			html = ' \<a class="dsq-paginate-append-text" href="#" onclick="Dsq.Thread.paginate(Dsq.jsonData.request.page + 1, this); return false">Show more comments...</a>\
	 <button type="button" class="dsq-button-small dsq-paginate-append-button" onclick="Dsq.Thread.paginate(Dsq.jsonData.request.page + 1, this);">Load more comments</button>\
			';
		}
		
		if (Dsq.$('dsq-pagination')) {
			Dsq.$('dsq-pagination').innerHTML = html;
			return '';
		} else {
			return '<div id="dsq-pagination" class="dsq-pagination">' + html + '</div>';
		}
	};

	this.trackbacks = function() {
		var html = '';

		if(typeof DsqLocal != 'undefined' && DsqLocal.trackback_url && DsqLocal.trackbacks) {
			var trackbacks = DsqLocal.trackbacks;
			var trackback_url = DsqLocal.trackback_url;
		} else {
			var trackbacks = [
			
			
			];
			var trackback_url = 'http://tntluoma.disqus.com/opera_vs_mozilla/trackback/';
		}

		html += '<div class="dsq-item-trackback">Trackback URL&nbsp;&nbsp;<input class="dsq-trackback-url" onclick="this.select()" readonly="true" value="' + trackback_url + '"></div>';

		if(trackbacks.length) {
			html += '<ul id="dsq-references">'
			for(var i = 0; i < trackbacks.length; i++) {
				var trackback = trackbacks[i];
				html += '<li><cite><a href="' + trackback.author_url + '" rel="nofollow">' + trackback.author_name + '</a></cite> \
						<p class="dsq-meta">' + trackback.date + '</p> \
						<p class="dsq-content">' + trackback.excerpt + '</p></li>';
			}
			html += '</ul>';
			html = '<h3 class="dsq-h3-trackbacks">Trackbacks</h3>' + html;
		}

		return html;
	}

	this.showRetweets = function(id, limit, element_id /* Optional */) {
		var source, html = '';

		for (var i = 0, reaction; reaction = Dsq.jsonData.reactions[i]; i++) {
			if (reaction.id === id) {
				source = reaction.retweets;
			}
		}

		if (source) {
			if (limit === 0) {
				limit = source.length;
			}

			for (var j = 0; j < limit; j++) {
				var rt = source[j];
				html += '<a href="' + rt.url + '">' + rt.author_name + '</a>'	+ ((j === (limit - 1)) ? '.' : ', ');
			}
		}

		if (element_id === undefined) {
			return html;
		}

		var element = document.getElementById(element_id);
		element.innerHTML = html;
		return element;
	};

	this.showMoreReactions = function(reactions, has_more, start, limit) {
		var link = document.getElementById('dsq-show-more-reactions');
		var container = link.parentNode;
		container.removeChild(link);

		for (var i = 0, reaction; reaction = reactions[i]; i++) {
			var el = Dsq.Templates.generateReactionHTML(reaction);
			if (el) {
				container.innerHTML += el;
			}
		}

		if (has_more) {
			var d = Dsq.jsonData.settings.disqus_url;
			var f = Dsq.jsonData.forum.url;
			var t = Dsq.jsonData.thread.id;
			var s = start;
			var l = limit;

			var handler = 'Dsq.Utils.execScript(\'' + d + '/forums/' + f + '/more_reactions.js?t=' + t + '&s=' + s + '&l=' + l + '\', true); return false;';
			container.innerHTML += '<li id="dsq-show-more-reactions"><a href="#" onclick="' + handler + '">Show more reactions</a></li>';
		}
	};

	this.generateReactionHTML = function(reaction) {
		if (reaction.body === null || reaction.body == '') {
			return;
		}

		if (reaction.author_name === '') {
			reaction.author_name = '&nbsp;';
		}

		if (reaction.url === '') {
			reaction.url = reaction.get_service_url;
		}

		/* Reaction HTML begins */
		var item = '<li class="dsq-reaction" id="dsq-reaction-' + reaction.id + '">'
			+ '<div class="dsq-reaction-header">'
			+ '<div class="dsq-header-avatar">';

		if (reaction.author_url && reaction.author_url !== '') {
			item += '<a target="_blank" href="' + reaction.author_url +'">';
		} else {
			item += '<a target="_blank" href="#" onclick="return false;">';
		}

		if (reaction.avatar_url && reaction.avatar_url !== '') {
			item += '<img src="' + reaction.avatar_url + '"/>';
		} else {
			item += '<img src="' + Dsq.jsonData.media_url + '/images/noavatar32.png"/>';
		}

		var service_icon = (reaction.get_service_name == 'trackback' || reaction.get_service_name == 'pingback' ? 'rss' : reaction.get_service_name.replace(' ', ''));
		item += '<img class="dsq-service-icon" src="' + Dsq.jsonData.media_url + '/images/reactions/services/' + service_icon + '.png"/>'
			+ '</a></div>'
			+ '<cite><span>' + reaction.author_name + '</span></cite>'
			+ '<span class="dsq-header-meta"><a class="dsq-header-time">' + reaction.date_created + '</a></span>'
			+ '</div><div class="dsq-reaction-body">'
			+ '<div class="dsq-reaction-message">' + reaction.body + '</div>'
			+ '<div class="dsq-reaction-footer">From <a class="dsq-service-name" target="_blank" href="' + reaction.url + '">' + reaction.get_service_name + '</a> '
			+ 'via <a href="' + reaction.source_url + '">' + (reaction.source == 'backtype' ? 'BackType' : 'UberVU') + '</a>'
			+ (Dsq.jsonData.request.is_moderator || Dsq.jsonData.request.is_global_moderator ? '&nbsp;&bull;&nbsp;<a class="dsq-hide-reaction" href="#" onclick="Dsq.Reaction.hide(' + reaction.id + '); return false;">Hide</a>' : '') + '</div></div>';

		if(reaction.retweets) {
			var num_retweets = reaction.retweets.length;
			if (num_retweets > 0) {
				item += '<div class="dsq-reaction-retweets">';
				if (num_retweets == 1) {
					item += 'One more retweet from <a href="' + reaction.retweets[0].url + '">'  + reaction.retweets[0].author_name + '</a>';
				} else {
					item += (num_retweets + ' more retweets from ');

					item += '<span id="dsq-reaction-retweets-' + reaction.id + '">';
					var n_tweets = (num_retweets > 15) ? 15 : num_retweets;
					item += Dsq.Templates.showRetweets(reaction.id, n_tweets);

					if (n_tweets != num_retweets) {
						item += '</span> <a onclick="Dsq.Templates.showRetweets(' + reaction.id + ', 0, \'dsq-reaction-retweets-' + reaction.id + '\');'
							+ 'this.parentNode.removeChild(this); return false;" href="#">Show all</a>';
					}
				}
				item += '</div>';
			}
		}

		item += '</li>'; /* Reaction HTML ends */
		return item;
	};

	this.reactions = function() {
		var html, reaction;

		if (Dsq.jsonData.reactions === undefined || Dsq.jsonData.reactions.length === 0) {
			return '';
		}

		html = '';
		for (var i = 0; reaction = Dsq.jsonData.reactions[i]; i++) {
			var item = Dsq.Templates.generateReactionHTML(reaction);
			if (item) {
				html += item;
			}
		}

		if (Dsq.jsonData.has_more_reactions) {
			var d = Dsq.jsonData.settings.disqus_url;
			var f = Dsq.jsonData.forum.url;
			var t = Dsq.jsonData.thread.id;
			var s = Dsq.jsonData.reactions_start;
			var l = Dsq.jsonData.reactions_limit;

			var handler = 'Dsq.Utils.execScript(\'' + d + '/forums/' + f + '/more_reactions.js?t=' + t + '&s=' + s + '&l=' + l + '\', true); return false;';
			html += '<li id="dsq-show-more-reactions"><a href="#" onclick="' + handler + '">Show more reactions</a></li>';
		}

		return '<h3 class="dsq-h3-reactions">Reactions</h3><ul id="dsq-reactions" class="dsq-reactions">' + html + '</ul>';
	};
	
	this.missingPermissions = function() {
		return '	<p>Comments for this page are closed.</p>\n';
	};

	//
	// Post
	//

	this.prependPost = function(post_id) {
		var html = '<div id="comment-' + post_id + '"></div>';
		return html;
	};

	this.appendPost = function(post_id) {
		var html = '<div id="dsq-comment-reply-' + post_id + '"></div>';
		return html;
	};

	this.postPrependHeader = function(post_id) {
		var _meta = Dsq.jsonData.posts[post_id];
		var userData = Dsq.jsonData['users'][_meta.user_key];

		var _includeServices = function() {
			var userServices = Dsq.Post.getUserServices(null, post_id);
			var html = '';
			var hiddenThreshold = 3; // Define # of services to show before stuffing them in hidden div

			for(var i = 0; i < userServices.length; i++) {
				html +=
				(i == hiddenThreshold
					? '<li id="dsq-drop-hidden-' + post_id +'" class="dsq-drop-hidden"><ul>'
					: '')
				+ '<li class="dsq-drop-services"> \
					<a class="dsq-service-' + userServices[i].name.toLowerCase() + '" href="' + userServices[i].url + '" target="_blank"> \
						<img src="' + Dsq.jsonData.media_url + '/images/embed/services/' + userServices[i].name.toLowerCase() + '.png" alt="' + userServices[i].name.toLowerCase() + '">'
					+ userServices[i].name
					+ '</a> \
				</li>';
			}

			if(i >= hiddenThreshold) {
				html += '</ul></li> \
				<li id="dsq-drop-more-' + post_id + '" class="dsq-drop-more"><a href="#" onclick="Dsq.Post.dropProfileMore(this, '+ post_id + '); return false"><small>&#9660;</small></a></li> \
				';
			}
			return html;
		};

		return ' \
			<div class="dsq-header-avatar" id="dsq-header-avatar-' + post_id + '" onmouseover="Dsq.Post.dropProfile(' + post_id + ')"> \
				<a id="dsq-avatar-' + post_id + '" class="dsq-avatar" href="' + userData.url + '" onclick="Dsq.Popup.popProfile(' + post_id + '); return false;">'
			+ (Dsq.jsonData.forum.show_avatar
				? '<img src="' + Dsq.jsonData.users[_meta.user_key].avatar + '" alt="" />'
				: '')
			+ '</a>'
			+ '</div> \
		';
	};

	this.postAppendHeader = function(post_id) {
		var _meta = Dsq.jsonData.posts[post_id];

		return ''
			+ (_meta.author_is_moderator
				? '<img class="dsq-mod-star" src="http://media.disqus.com/images/bullet-star.png" title="Moderator" alt="" />'
				: '')
			+ '<span class="dsq-header-meta"> \
				<a id="dsq-time-' + post_id + '" class="dsq-header-time" href="#comment-' + post_id + '" title="Permalink">' + _meta.date + '</a> \
			</span>';
	};

	this.preBody = function(post_id) {
		return '';
	}

	this.postBody = function(post_id) {
		// TODO: Deprecate flagging conditional
		var _meta = Dsq.jsonData.posts[post_id];
		return ''
			+ (_meta.edited
				? '<p class="dsq-editedtxt">(Edited by a moderator)</p>'
				: '')
			;
	};

	this.postFooter = function(post_id) {
		// TODO: Use media should be conditional
		var _meta = Dsq.jsonData.posts[post_id];
		if(_meta.killed) { return ''; }

		return ' \
			<div class="dsq-comment-footer" id="dsq-comment-footer-' + post_id + '"> \
				<div id="dsq-points-' + post_id + '" class="dsq-likedtxt">'
				+ (_meta.points
					? _meta.points + Dsq.Utils.pluralize(_meta.points, ' person', ' people') + ' liked this comment.'
					: '')
				+ '</div>'
				+ '<ul class="dsq-comment-options dsq-list-style">'
				+ (_meta.votable
					? '<li class="dsq-list-first dsq-rate" id="dsq-rate-cont-' + post_id + '">'
					+ (!_meta.up_voted
						? '<a href="#" onclick="Dsq.Post.rate(this, ' + post_id + ', 1); return false;">Like</a>'
						: 'You liked this.') + '</li>'
					: '')
				+ '<li class="dsq-report' + (!_meta.votable ? ' dsq-list-first' : '') + '" id="dsq-post-report-' + post_id + '"><a href="#" class="dsq-post-report" onclick="Dsq.Post.report(' + post_id + ', false); return false;">Report</a></li> \
				</ul> \
				<ul class="dsq-list-style">'
				+ (_meta.can_reply
					? '<li class="dsq-list-first"><a href="#" id="dsq-reply-link-' + post_id +'" onclick="Dsq.Post.toggleReply(this, ' + post_id +'); return false;">Reply</a></li>'
					: '')
				+ (_meta.can_reply && !_meta.has_replies && _meta.from_request_user
					? '<li id="dsq-edit-el-' + post_id + '"><a id="dsq-edit-link-' + post_id + '" href="#" onclick="Dsq.Post.edit(this, ' + post_id + '); return false;">Edit</a></li>'
					: '')
				+ '<li class="' + (!_meta.can_reply ? 'dsq-list-first' : '') + '" id="dsq-more-el-' + post_id + '"><a id="dsq-more-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'more\'); return false">More <small>&#9660;</small></a></li>'
				+ (Dsq.jsonData.forum.use_media
					? '<li id="dsq-media-el-' + post_id +'" style="display:none"><a id="dsq-media-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'media\'); return false">Use Media <small>&#9660;</small></a></li>'
					: '')
				+ '</ul>'
				+ '<div id="dsq-reply-bar-' + post_id + '" class="dsq-reply-bar" style="display:none"> \
						<div id="dsq-reply-bar-items-' + post_id + '" class="dsq-reply-bar-items"> \
						</div> \
						<div id="dsq-reply-bar-auth-' + post_id + '" class="dsq-reply-bar-auth"> \
							 \
								 \
								 	<a href="#" class="dsq-help dsq-reply-req-opt" title="You are commenting as a Guest. You may choose to log into an existing DISQUS Profile, your Facebook, Twitter or OpenID account to comment on TNT Luoma" onclick="Dsq.Popup.helpBadges(); return false">Optional:</a> \
								 \
								<img class="dsq-login-icon" src="http://media.disqus.com/images/dsq-favicon-16x16.png" alt="" /> \
								<a id="dsq-reply-login-' + post_id + '" href="http://disqus.com/profile/login/?next=article:38951185" onclick="Dsq.Popup.login(); return false">Login</a> \
								 \
									&nbsp;or&nbsp; \
									<img class="fb_login_image" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_small_short.gif" alt="Facebook Connect"/> \
									<a href="#" onclick="FB.Connect.requireSession(DisqusFbcParentController.onLogin); return false;">Connect</a> \
								 \
								&nbsp;or&nbsp; \
									<img src="http://media.disqus.com/images/twitter-signin-icon.png" alt="" /> \
									<a href="#" onclick="Dsq.Twitter.startTwitterConnect(); return false">Sign-in</a> \
								 \
								&nbsp;or&nbsp; \
									 <img src="http://media.disqus.com/images/openid-login-icon.png" alt="" /> \
									 <a href="#" onclick="Dsq.OpenID.requestURL(); return false">OpenID</a> \
								 \
							 \
						</div> \
					</div> \
					<div id="dsq-reply-' + post_id + '"></div> \
			</div> \
		';
	};

	//
	// Iframes
	//

	this._makeAttributes = function(attributes) {
		// Makes a tag attributes string out of an object.
		// Caller is responsible for making sure nothing needs to be escaped.
		var result = [];
		for (key in attributes) {
			result.push(' ' + key + '="' + attributes[key] + '"');
		}
		result = result.join('');
		return result;
	};

	this._frameGeneric = function(base_url, params, attributes) {
		if(typeof(disqus_callback_params) == 'undefined') {
			disqus_callback_params = '';
		}

		var default_params = {
			// TODO: These should be moved to Dsq.jsonData.
			'f'				: 'tntluoma',
			't'				: 'opera_vs_mozilla',
			// Do we need encodeURIComponent here?
			'ifrs'			: encodeURIComponent(disqus_iframe_css),
			'to_redirect'	: encodeURIComponent(window.location),
			'cbp'			: disqus_callback_params,
			'ff'			: Dsq.Thread.ff,
			'fc'			: Dsq.Thread.fc,
			'ac'			: Dsq.Thread.ac,
			'default_text'	: disqus_default_text
		};

		base_url += '?' + (new Date()).getTime();
		// Add params to default_params.
		if(params) {
			for(var key in params) {
				if(params.hasOwnProperty(key)) {
					default_params[key] = encodeURIComponent(params[key]);
				}
			}
		}
		// Build querystring.
		for(var key in default_params) {
			if(default_params[key] && default_params.hasOwnProperty(key)) {
				base_url += '&' + key + '=' + default_params[key];
			}
		}

		return [
			'<iframe marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0"',
			(' allowtransparency="true" src="' + base_url + '"'),
			this._makeAttributes(attributes),
			'</iframe>'].join('');
	};

	this.frameLogin = function(opt_attributes) {
		var params = {};
		var base_url = 'http://disqus.com/embed/login.html';
		var attributes = opt_attributes || {};
		attributes['class'] = 'dsq-post-login';

		if(typeof disqus_frame_theme != 'undefined') {
			params['theme'] = disqus_frame_theme;
		}
		return this._frameGeneric(base_url, params, attributes);
	};

	this.frameReply = function(post_id, extra_params, attributes) {
		// Returns the HTML for a reply iframe. Called by Dsq.Iframes.setReplyIframeToContainer
		var _meta = (typeof post_id != 'undefined') ? Dsq.jsonData.posts[post_id] : false;
		var base_url = Dsq.Urls.REPLY;
		var params = {
			'def_email'		: disqus_def_email,
			'def_name'		: disqus_def_name
		};
		if(extra_params) {
			for(var key in extra_params) {
				if(extra_params.hasOwnProperty(key)) {
					params[key] = extra_params[key];
				}
			}
		}
		if(_meta) {
			params['parent_post'] = post_id;
		}
		if(typeof disqus_per_page != 'undefined') {
			params['per_page'] = disqus_per_page;
		}
		if(typeof disqus_frame_theme != 'undefined') {
			params['theme'] = disqus_frame_theme;
		}
		if(Dsq.jsonData.request.is_authenticated) {
			attributes['class'] += '-authenticated';
		}
		return this._frameGeneric(base_url, params, attributes);
	};

	this.frameEdit = function(post_id) {
		var _meta = (typeof post_id != 'undefined') ? Dsq.jsonData.posts[post_id] : false;
		var base_url = 'http://disqus.com/embed/edit.html';
		var params = {
			'p' : post_id
		};
		return this._frameGeneric(base_url, params, {'class': 'dsq-post-edit', 'name': 'dsq-edit_' + post_id + '-frame'});
	};

	//
	// Menus
	//

	this.menuMore = function(post_id) {
		// TODO: "Remove post" button should hide menu.
		var _meta = Dsq.jsonData.posts[post_id];
		var userData = Dsq.jsonData['users'][_meta.user_key];
		return ' \
			<li><a href="#comment-' + post_id + '" onclick="Dsq.Popup.permalink(' + post_id + ')">Link</a></li> \
			<li><a href="#" onclick="Dsq.Popup.popProfile(' + post_id + '); return false;">Profile</a></li>'
	+ (Dsq.jsonData.request.is_moderator || Dsq.jsonData.request.is_global_moderator
		? '	<li class="dsq-menu-sep"></li>' + (_meta.email ? '<li class="dsq-admin-email">' + _meta.email + '</li>' : '')
		+ '	<li class="dsq-admin-ip">' + _meta.ip + '</li> \
			<li class="dsq-menu-sep"></li>'
		+ (Dsq.jsonData.request.moderator_can_edit
			? ' <li class="dsq-admin-edit"><a href="#" onclick="Dsq.Post.edit(this, ' + post_id + '); return false;">Edit Comment</a></li>'
			: '')
		+ ' <li class="dsq-remove"><a href="#" onclick="Dsq.Post.removePost(' + post_id + ', 1); return false;">Remove Comment</a></li> \
			<li class="dsq-report-spam"><a href="#" onclick="Dsq.Post.reportSpam(' + post_id + '); return false;">Mark Spam</a></li> \
			<li class="dsq-block-user"><a href="#" onclick="Dsq.Popup.blacklist(' + post_id + '); return false">Block User</a></li>'
		: '');
	};

	this.menuMedia = function(post_id) {
		return ' \
			<li><a href="#" onclick="Dsq.Post.toggleMediaReply(this, ' + post_id + ', \'seesmic\'); return false;">Record video</a></li> \
		';
	};

	this.dropProfile = function(post_id) {
		var _meta = Dsq.jsonData.posts[post_id];
		var userData = Dsq.jsonData['users'][_meta.user_key];

		var _includeServices = function() {
			var userServices = Dsq.Post.getUserServices(null, post_id);
			var html = '';
			var hiddenThreshold = 3; // Define # of services to show before stuffing them in hidden div

			for(var i = 0; i < userServices.length; i++) {
				html +=
				(i == hiddenThreshold
					? '<li id="dsq-drop-hidden-' + post_id +'" class="dsq-drop-hidden"><ul>'
					: '')
				+ '<li class="dsq-drop-services"> \
					<a class="dsq-service-' + userServices[i].name.toLowerCase() + '" href="' + userServices[i].url + '" target="_blank"> \
						<img src="' + Dsq.jsonData.media_url + '/images/embed/services/' + userServices[i].name.toLowerCase() + '.png" alt="' + userServices[i].name.toLowerCase() + '">'
					+ userServices[i].name
					+ '</a> \
				</li>';
			}

			if(i >= hiddenThreshold) {
				html += '</ul></li> \
				<li id="dsq-drop-more-' + post_id + '" class="dsq-drop-more"><a href="#" onclick="Dsq.Post.dropProfileMore(this, '+ post_id + '); return false"><small>&#9660;</small></a></li> \
				';
			}
			return html;
		};


		var menu = '<li class="dsq-drop-showlnk"><a href="#" onclick="Dsq.Popup.popProfile(' + post_id + '); return false;">Expand &#8663;</a></li>';
		var pointsMessage = '';
		if (userData['registered']) {
			pointsMessage = 'with ' + userData['points'] + ' points (more points are better).';
		}

		if (userData['is_remote']) {
			var domain = userData['remote_domain_name'];
			menu += '<li class="dsq-drop-badge" title="' + userData['display_name'] + ' is a ' + domain + ' user ' + pointsMessage + '" onclick="Dsq.Popup.helpBadges()">';
			menu += '<span class="dsq-badge-' + domain.toLowerCase() + '">' + domain + '</span></li>';
		} else if (userData['registered']) {
			if (userData['verified']) {
				menu += '<li class="dsq-drop-badge" title="' + userData['display_name'] + ' has a verified commenter profile ' + pointsMessage + '" onclick="Dsq.Popup.helpBadges()">';
				menu += '<span class="dsq-badge-verified">Verified</span></li>';
			} else {
				menu += '<li class="dsq-drop-badge" title="' + userData['display_name'] + ' has a registered, but unverified, commenter profile ' + pointsMessage + '" onclick="Dsq.Popup.helpBadges()">';
				menu += '<span class="dsq-badge-registered">Registered</span></li>';
			}
		} else {
			menu += '<li class="dsq-drop-badge" title="' + userData['display_name'] + ' has not claimed this commenter profile." onclick="Dsq.Popup.helpBadges()"><span class="dsq-badge-guest">Guest</span></li>';
		}

		menu += _includeServices();
		return menu;
	};

	//
	// Popups
	//

	this._popupGeneric = function(content) {
		return ' \
		<div class="dsq-popup-content"> \
			<div class="dsq-popup-top"></div> \
			<div class="dsq-popup-body" class="clearfix"> \
				<div class="dsq-popup-body-padding"> \
					<div class="dsq-popup-header"> \
						<a class="dsq-close-link" href="#" onclick="Dsq.Popup._closePopup(null, true); return false"><img src="http://media.disqus.com/images/modal-close.png" alt="" /></a>'
						+ content['header']
					+ '</div>'
					+ content['body']
					+ '<div class="powered-by"><a href="http://disqus.com/comments/">Powered by <img src="http://media.disqus.com/images/embed/disqus-logo.png" alt="Disqus Comments" style="margin-bottom:-5px" /></a></div> \
				</div> <!-- padding --> \
			</div> <!-- body --> \
			<div class="dsq-popup-bottom"></div> \
		</div> \
		';
	};

	this.popupProfile = function(user_key) {
		var userServices = Dsq.Post.getUserServices(user_key, null);
		var userData = Dsq.jsonData['users'][user_key];
		var headerHtml = '';
		var bodyHtml = '';
		var content = {};

		var _includeServices = function() {
			var html = '';
			for(var i = 0; i < userServices.length; i++) {
				html +=
				(i == 0
					? '<h4>Connections</h4><ul>'
					: '')
				+ '<li> \
					<img src="' + Dsq.jsonData.media_url + '/images/embed/services/' + userServices[i].name.toLowerCase() + '.png" alt="' + userServices[i].name.toLowerCase() + '" title="' + userServices[i].name.toLowerCase() + '" /> \
					<a class="dsq-service-' + userServices[i].name.toLowerCase() + '" href="' + userServices[i].url + '" target="_blank">'
					+ userServices[i].name
					+ '</a> \
				</li>'
				+ (i+1 == userServices.length ? '</ul>' : '');
			}
			return html;
		};

		headerHtml = ' \
			<table> \
				<tr> \
					<td> \
						<a class="dsq-profile-userurl" href="' + userData.url + '"><img class="dsq-popup-profile-avatar" src="' + userData['avatar'] + '" alt="" /></a> \
					</td> \
					<td> \
						<div class="dsq-popup-profile-user"> \
							<h3>' + userData['display_name'] + '</h3> \
							<div class="dsq-popup-profile-user-stats" id="dsq-popup-profile-user-stats-' + user_key + '">Loading...</div> \
						</div> \
					</td> \
				</tr> \
			</table> \
		';

		bodyHtml = ' \
			<div class="dsq-popup-profile-state"> \
				This is a&nbsp;<span class="'
					+ (userData['registered']
						? (userData['verified']
							? ' dsq-badge-verified'
							: (userData['is_remote']
								? ' dsq-badge-' + userData['remote_domain_name'].toLowerCase()
								: ' dsq-badge-registered')
							)
							: ' dsq-badge-guest') + '">'
			+ (userData['registered']
				? (userData['verified']
					? 'Verified'
					: (userData['is_remote']
						 ? userData['remote_domain_name']
						 : 'Registered')
					)
				: 'Guest')
			+ '</span>&nbsp;commenter profile.'
			+ '&nbsp;<a class="dsq-profile-userurl" href="' + userData.url + '"><strong>View more comments </strong></a>'
			+ (!userData['points']
				? '<p class="dsq-popup-notice">If this is you, <a href="http://disqus.com/profile" target="_blank">claim it now</a> to manage your comments.</p>'
				: '')
			+ ((userData['registered'] && !userData['verified'] && (Dsq.jsonData.request.username && (Dsq.jsonData.request.username == userData['username'])) && !userData['is_remote'])
				? '<p class="dsq-popup-notice"><strong>Alert</strong>: You have not verified this account. <a href="http://disqus.com/verify">Verify it now.</a></p>'
				: '')
			+ '</div> \
			<div id="dsq-profile-status-' + user_key + '" class="dsq-popup-profile-status" style="display:none"></div> \
			<div class="dsq-popup-profile-snapshot"> \
				<table> \
					<tr> \
						<td> \
							<div id="dsq-popup-profile-active-sites-wrapper-' + user_key + '"> \
								<h4>Most active sites</h4> \
								<ul id="dsq-popup-profile-active-sites-' + user_key + '"> \
									<li>Loading...</li> \
								</ul> \
							</div> \
						</td> \
						<td>'
							+ _includeServices()
							+ '<div id="dsq-popup-profile-moderated-wrapper-' + user_key + '"> \
								<h4>Moderator of</h4> \
								<ul id="dsq-popup-profile-moderated-' + user_key + '"> \
									<li>Loading...</li> \
								</ul> \
							</div> \
						</td> \
					</tr> \
				</table> \
			</div> \
			';

		content = {
			'header': headerHtml,
			'body': bodyHtml
		};

		return this._popupGeneric(content);
	};

	this.popupReblog = function() {
		var headerHtml = '';
		var bodyHtml = '';
		var content = {};

		headerHtml = ' \
			<cite><span>Reblog this comment</span></cite> \
		';

		bodyHtml = ' \
			<div id="dsq-reblog-form" class="dsq-reblog-form"> \
			</div> \
		';

		content = {
			'header': headerHtml,
			'body': bodyHtml
		};

		return this._popupGeneric(content);
	};

	this.popupModal = function(title, message) {
		var headerHtml = '';
		var bodyHtml = '';
		var content = {};

		headerHtml = ' \
			<h3>' + title + '</h3> \
		';

		bodyHtml = message;

		content = {
			'header': headerHtml,
			'body': bodyHtml
		};

		return this._popupGeneric(content);
	};

	this.alertContent = function(name, post_id) {
		var alert = {
			'post_not_approved': {
				'title': 'Comment awaiting approval by a moderator',
				'message': 'Thanks for posting. Your comment must be approved by a moderator before appearing here.'
			},
			'post_has_profile': {
				'title': 'Use your existing commenter profile',
				'message': 'You have just posted your commment as a <span class="dsq-badge dsq-badge-guest">Guest</span>, but you may already have a <span class="dsq-badge dsq-badge-registered">Registered</span> commenter profile.<br /><br /><a href="http://disqus.com/claim">Log in and claim this comment!</a>'
			}
		};
		return alert[name] || false;
	};

	//
	// Actions
	//

	this.voted = function(post_id, points, vote) {
		// Update number of points
		Dsq.$('dsq-points-' + post_id).innerHTML = points + Dsq.Utils.pluralize(points, ' person', ' people') + ' liked this comment.';

		// Update link text
		if(vote) {
			Dsq.$('dsq-rate-cont-' + post_id).innerHTML = 'You liked this.';
		}
	};

	this.subscribed = function(status) {
		var title, message;

		if(status) {
			title = 'Subscribed!';
			message = 'You have subscribed to this comment thread. New comments will be sent directly to your email inbox, where you may read and respond by email.';
			Dsq.$('dsq-subscribe').innerHTML = ' \
				<a href="#" onclick="Dsq.Thread.subscribe(0); return false">Unsubscribe</a> \
			';
		} else {
			title = 'Unsubscribed';
			message = 'You have unsubscribed to this comment thread. New comments will no longer be sent to your email inbox.';
			Dsq.$('dsq-subscribe').innerHTML = ' \
				<a href="#" onclick="Dsq.Thread.subscribe(1); return false">Subscribe by email</a> \
			';
		}

		Dsq.Popup.popModal(message, title);

	};
	
	this.highlighted = function() {
		Dsq.Popup.popModal('This comment has been highlighted.', 'Highlighted comment');
	};

	//
	// Media
	//

	this.mediaSeesmic = function(id, thumb) {
		return ' \
			<div id="dsq-seesmic-' + id + '_preview" class="dsq-seesmic-preview"><a href="http://www.seesmic.com/video/' + id + '" target="_blank" class="see_link">&nbsp;</a> \
				<div style="display:block;width:160px; height:120px; border:none; background-image:url(http://t.seesmic.com/thumbnail/' + thumb + ')"> \
					<div id="dsq-seesmic-' + id + '_hide" class="seePlayOverlay" style="display:none;"><img onclick="see_play_video(\'' + id + '\',false)" src="http://media.disqus.com/images/seesmic/stopOverlay.png" width="50" height="50" style="cursor:pointer; cursor:hand; padding-top: 30px; padding-left: 50px" alt="" /></div> \
					<div id="dsq-seesmic-' + id + '_show" class="seePlayOverlay"><img onclick="see_play_video(\'' + id + '\',true)" src="http://media.disqus.com/images/seesmic/playOverlay.png" width="50" height="50" style="cursor:pointer; cursor:hand; border:none; padding-top: 30px; padding-left: 50px" alt="" /></div> \
				</div> \
			</div> \
			<div id="' + id + '_content" style="display:block; width:100%; padding-top:5px"></div> \
		';
	};

	//
	// Callbacks
	//

	this.postComment_onSuccess = function(parent_post_id) {
		// Increment post count
		var num_posts = Dsq.$('dsq-num-posts');
		var total_posts = Dsq.$('dsq-total-posts');
		
		if (num_posts) { 
			num_posts.innerHTML = parseInt(num_posts.innerHTML) + 1;
		}
		if (total_posts) { 
			total_posts.innerHTML = parseInt(total_posts.innerHTML) + 1;
		}
	};
};
// Dsq.Templates


/**
 * Dsq.Post
 */
Dsq.Post = new function() {
	this.openedMenu = {};
	this.menuEventListener = null;
	this.stateReplyToggled = {};
	this.stateEditToggled = {};
	this.stateRecordLink = {};

	/**
	 * Inserts a new post into the document.
	 *
	 * @param after_id {Number}	Insert a post before specified id.  If after_id
	 *							evaluates to false, then post in the front.  If
	 *							after_id is -1, post at the end.
	 */
	this.insert = function(after_id, id, message, author) {
		// Skeleton template from thread_posts.html.
		var skeleton = ' \
			<li id="dsq-comment-%(id)s"> \
				<div id="dsq-comment-header-%(id)s" class="dsq-comment-header"> \
					<cite id="dsq-cite-%(id)s" class="dsq-comment-cite"> \
						<a id="dsq-author-user-%(id)s" href="%(author_url)s" target="_blank" rel="nofollow">%(author_name)s</a> \
					</cite> \
				</div> \
				<div id="dsq-comment-body-%(id)s" class="dsq-comment-body"> \
					<div id="dsq-comment-message-%(id)s" class="dsq-comment-message">%(message)s</div> \
				</div> \
			</li> \
		';
		var _meta = Dsq.jsonData.posts[id];
		var _user_meta = Dsq.jsonData.users[_meta.user_key];
		var markup = Dsq.Utils.interpolate(skeleton, {
			id: id,
			message: message,
			author_url: _user_meta.blog,
			author_name: _user_meta.display_name
		});
		var div = document.createElement('div');
		markup = markup.replace(Dsq.COMMENTS_RE, Dsq.CommentsHandler);
		div.innerHTML = markup;

		if (after_id === -1) {
			Dsq.$('dsq-comments').appendChild(div);
		} else if (!after_id) {
			Dsq.$('dsq-comments').insertBefore(div, Dsq.$('dsq-comments').firstChild);
		} else if (Dsq.$('dsq-comment-' + after_id)) {
			// Get next node after "after_id", so we can insert before it.
			// If "after_id" is the last comment, the target node is the
			// last node.
			
			// var append_post_id = Dsq.Templates.appendPost(after_id).replace('<div id="','').replace('"></div>', '');
			var append_post_id = 'dsq-append-post-' + after_id;
			var node = Dsq.$(append_post_id);
			while (node = node.nextSibling) {
				if (!node || node.nodeType == 1) { // 1 == Node.ELEMENT_NODE
					break;
				}
			}
			if (!node) {
				node = Dsq.$(append_post_id);
			}
			node.parentNode.insertBefore(div, node);
		}
	};

	this.incrementPostCount = function() {
		
		var num_posts = Dsq.$('dsq-num-posts');
		var total_posts = Dsq.$('dsq-total-posts');

		if (num_posts) {
			num_posts.innerHTML = parseInt(num_posts.innerHTML, 10) + 1;
		}
		if (total_posts) {
			total_posts.innerHTML = parseInt(total_posts.innerHTML, 10) + 1;
		}
	}
	
	this.outlineComment = function(post_id) {
		Dsq.$('dsq-comment-' + post_id).className += ' dsq-comment-outline';
		setTimeout("(function () { Dsq.Post.clearOutlineComment(" + post_id + ") })()", 3000);
	};
	
	this.clearOutlineComment = function(post_id) {
		Dsq.$('dsq-comment-' + post_id).className = Dsq.$('dsq-comment-' + post_id).className.replace('dsq-comment-outline', '');
	};

	this.showMenu = function(el, id, name) {
		var anchorPos = Dsq.Utils.findPos(el);
		var menu = document.createElement('ul');

		if(this.openedMenu) {
			if(this.openedMenu.linkClicked) {
				this.openedMenu.linkClicked = false;
				return;
			}
		}

		switch(name) {
			case 'more':
				menu.innerHTML = Dsq.Templates.menuMore(id);
				break;
			case 'media':
				menu.innerHTML = Dsq.Templates.menuMedia(id);
				break;
			default:
				break;
		}

		// Add menu to document body
		menu.id = 'dsq-menu-' + id;
		menu.className = 'dsq-menu';
		Dsq.$b.appendChild(menu);

		// Position and show
		anchorPos[1] += 15;
		menu.style.left = anchorPos[0] + 'px';
		menu.style.top = anchorPos[1] + 'px';
		menu.style.display = 'block';

		// Set global reference
		this.openedMenu = {
			'el' : menu,
			'id' : id,
			'name' : name,
			'linkClicked' : false
		};

		// Set listener
		this.menuEventListener = Dsq.Utils.addEventListener(document, 'mouseup', this._hideMenu);
	};

	this._hideMenu = function(e) {
		var el = e.target || e.srcElement;
		var openedMenu = Dsq.Post.openedMenu.el;
		var id = Dsq.Post.openedMenu.id;

		if(!id) {
			var link = 'dsq-' + Dsq.Post.openedMenu.name + '-link';
		} else {
			var link = 'dsq-' + Dsq.Post.openedMenu.name + '-link-' + id;
		}

		if(!openedMenu) {
			return;
		}

		if(!Dsq.Popup.isClicked(e, openedMenu.id)) {
			openedMenu.style.display = 'none';
			Dsq.Utils.removeEventListener(Dsq.Post.menuEventListener);
			Dsq.Utils.deleteNode(openedMenu);

		} else {
			// Hide the menu if a link was clicked inside the menu.  We can't
			// completely remove the menu until the onclick event on the link
			// fires, but the menuEventListener will prevent multiple menus
			// from polluting the DOM.
			if(el && typeof el.href != 'undefined') {
				openedMenu.style.display = 'none';
				Dsq.Post.openedMenu.el = null;
			}
		}

		if(Dsq.Popup.isClicked(e, link)) {
 			Dsq.Post.openedMenu.linkClicked = true;
		}
	};


	this.getUserServices = function(user_key, id) {
		if(!user_key && id) {
			var _meta = Dsq.jsonData.posts[id];
			user_key = _meta.user_key;
		}
		var userData = Dsq.jsonData['users'][user_key];
		var userServices = [];

		// Keep a full list of supported services. This is the order they will display in the drop-profile.
		// Each service must have a corresponding case in _buildServiceUrl()
		var supportedServices = ['blog', 'twitter', 'facebook', 'tumblr'];

		function _buildServiceUrl(serviceName) {
			var data = userData[serviceName];
			var services = {
				blog:		function(d) { return d; },
				twitter:	function(d) { return d; },
				facebook:	function(d) { return d; },
				tumblr:		function(d) { return 'http://' + d + '.tumblr.com'; }
			};
			return services[serviceName](data);
		}

		for(var i = 0; i < supportedServices.length; i++) {
			if(userData[supportedServices[i]]) {
				var serviceUrl = _buildServiceUrl(supportedServices[i]);
				userServices.push({'name' : supportedServices[i], 'url' : serviceUrl});
			}
		}
		return userServices;
	}

	this.dropProfile = function(id) {
		var dp = Dsq.$('dsq-drop-profile-' + id);

		// IE6 needs JS to display/hide. All other browsers use CSS.
		if(dp) {
			if(Dsq.Utils.ie6) dp.style.display = (dp.style.display == 'inline') ? 'none' : 'inline';
			return false;
		} else {
			dp = document.createElement('ul');
		}

		dp.id = 'dsq-drop-profile-' + id;
		dp.className = 'dsq-drop-profile';

		if(Dsq.Utils.ie6) { dp.style.display = 'inline'; }

		var container = Dsq.$('dsq-header-avatar-' + id);
		dp.innerHTML = Dsq.Templates.dropProfile(id);
		container.appendChild(dp);
	};

	this.dropProfileMore = function(el, id) {
		var hiddenItems = Dsq.$('dsq-drop-hidden-' + id);

		hiddenItems.style.display = 'inline';
		el.parentNode.style.display = 'none';
	};

	this._updateReplyLinks = function(el, id) {
		// Update "reply / cancel" links based on state.
		var displayDict = {};

		if(id) {
			if(this.stateReplyToggled[id]) {
				el.innerHTML = 'Cancel';
				displayDict['media'] = 'inline';
				displayDict['edit'] = 'none';
			} else {
				el.innerHTML = 'Reply';
				displayDict['media'] = 'none';
				displayDict['edit'] = 'inline';
			}
		}

		for(var key in displayDict) {
			if(displayDict.hasOwnProperty(key)) {
				var	linkEl = Dsq.$('dsq-' + key + '-el-' + id),
					spacer = Dsq.$('dsq-' + key + '-spacer-' + id);

				if(linkEl) {
					linkEl.style.display = displayDict[key];
					if(spacer) spacer.style.display = displayDict[key];
				}
			}
		}
	};

	this._updateMediaLinks = function(el, id) {
		// Update "use media / cancel" links based on state.
		var appendId = (id) ? ('-' + id) : '';
		var link = Dsq.$('dsq-media-link' + appendId);

		if(this.stateRecordLink[id]) {
			link.innerHTML = 'Cancel Media';
			link.onclick = function() { Dsq.Post.toggleMediaReply(link, id); return false; };
		} else {
			link.innerHTML = 'Use Media <small>&#9660;</small>';
			link.onclick = function() { Dsq.Post.showMenu(link, id, 'media'); return false; };
		}
	};

	this.toggleReply = function(el, id) {
		// Create reply IFrame
		if (window.disqus_use_postmessage) {
			if (!this.stateReplyToggled[id]) {
				Dsq.$('dsq-reply-' + id).style.display = 'block';
				Dsq.$('dsq-reply-bar-' + id).style.display = 'block';
				// Create IFrame if it doesn't exist.
				if (!Dsq.frames['reply_' + id]) {
					var _meta = Dsq.jsonData.posts[id];
					Dsq.frames['reply_' + id] = new Dsq.ReplyFrame(Dsq.$('dsq-reply-frame-' + id), id);
					Dsq.frames['reply_' + id].init();
					Dsq.frames['reply_' + id].setState(id, _meta.depth);
				}
			} else {
				Dsq.$('dsq-reply-' + id).style.display = 'none';
				Dsq.$('dsq-reply-bar-' + id).style.display = 'none';
			}
		} else {
			// DEPRECATED
			if(!this.stateReplyToggled[id]) {
				// Reply toolbar
				Dsq.$('dsq-reply-bar-' + id).style.display = 'block';
				Dsq.Iframes.showReplyIframeInContainerIfAllowed(Dsq.$('dsq-reply-' + id), id);
			} else {
				Dsq.$('dsq-reply-bar-' + id).style.display = 'none';
				Dsq.Iframes.hideAllInContainer(Dsq.$('dsq-reply-' + id));
				if(this.stateRecordLink[id]) {
					// HACK: Cancel media before canceling self.
					this.toggleMediaReply(Dsq.$('dsq-media-link-' + id), id);
				}
			}
		}

		this.stateReplyToggled[id] = !this.stateReplyToggled[id];
		this._updateReplyLinks(el, id);

		if(Dsq.Utils.ie) { Dsq.Utils.fixIframesIE('dsq-reply-' + id); }

		Dsq.Events.fire(Dsq.Events.REPLY_IFRAME_TOGGLED, {
			postId: id,
			opened: this.stateReplyToggled[id]
		});
	};

	this.toggleMediaReply = function(el, id, xtype) {
		id = id || 0;
		if(id) {
			var container = Dsq.$('dsq-reply-' + id);
		} else {
			var container = Dsq.$('dsq-post-add');
		}

		if(!this.stateRecordLink[id]) {
			Dsq.Iframes.showReplyIframeInContainer(container, id, {xtype:xtype}, 'dsq-post-video');
		} else {
			Dsq.Iframes.showReplyIframeInContainer(container, id);
		}
		this.stateRecordLink[id] = !this.stateRecordLink[id];
		this._updateMediaLinks(el, id);

		if(Dsq.Utils.ie) { Dsq.Utils.fixIframesIE(); }
	};

	this.edit = function(el, id) {
		Dsq.$('dsq-comment-message-' + id).innerHTML = Dsq.Templates.frameEdit(id);
		el.parentNode.style.display = 'none';
		if(Dsq.Utils.ie) { Dsq.Utils.fixIframesIE('dsq-comment-message-' + id); }
	};

    this.rate = function(el, id, vote) {
		if(Dsq.jsonData.request.is_authenticated || Dsq.jsonData.forum.allow_anon_votes) {
			if(vote == 1) {
                Dsq.$('dsq-rate-cont-' + id).innerHTML = '<img src="http://media.disqus.com/images/loading-small.gif">';
            }

            Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/vote.js'
                + '?post_id='    + id
                + '&vote='        + vote);

		} else {
			Dsq.Popup.login(Dsq.Strings.TO_RATE_PLEASE_LOG_IN);
		}
    };

	this.report = function(id, confirmed) {
		if(confirmed) {
			Dsq.Utils.postToUrl('http://disqus.com/forums/tntluoma/opera_vs_mozilla/post_report/', {'post_id': id});
			Dsq.Popup.popModal('Thank you. This comment has been flagged for moderator attention.', 'Successfully flagged');
			Dsq.Utils.deleteNode(Dsq.$('dsq-post-report-' + id));
		} else {
			var title = Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT;
			var message = Dsq.Strings.ARE_YOU_SURE_YOU_WOULD_LIKE_TO_REPORT_THIS_COMMENT_TO_A_MODERATOR + '? \
			<br /><br /> \
			<button type="button" onclick="Dsq.Popup._closePopup(null, true)"><strong>' + Dsq.Strings.NO + '</strong>, ' + Dsq.Strings.NEVER_MIND + '</button>&nbsp;&nbsp;&nbsp;<button type="button" onclick="Dsq.Post.report(' + id + ', true);"><strong>' + Dsq.Strings.YES + '</strong>, ' + Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT + '</button><br /><br />'
			+ Dsq.Strings.THIS_WILL_FLAG_COMMENTS_FOR_MODERATORS_TO_TAKE_ACTION + '. \
			';

			Dsq.Popup.popModal(message, title, id);
		}
	};



	this.showAlert = function(id, msg) {
		var msgEl = Dsq.$('dsq-comment-message-' + id);
		var alert = '<div class="dsq-comment-alert">' + msg + '</div>';

		msgEl.innerHTML = alert + msgEl.innerHTML;
	};

};
// Dsq.Post


/**
 * Dsq.Thread
 */
Dsq.Thread = new function() {
	this.fc = null;
	this.ff = null;
	this.ac = null;

	
	this.adminIsOn = false;

	
	
	

	this.hlComment = null;
	this.hlCommentClass = null;

	this.getNextComment = function(el) {
		var start_id = el.id;
		while(el = el.nextSibling) {
			if(el.id && el.id.indexOf('dsq-comment-') != -1 && el.id != start_id) {
				return el;
			}
		}
		return null;
	};

	this.getActiveCommentId = function() {
		if (document.URL.indexOf('#comment-') >= 0) {
			var anchor = document.URL.slice(document.URL.indexOf('#') + 1);
			return anchor.replace('comment-', '');
		}
		return null;
	};

	this.highlightAnchor = function() {
		var i = this.getActiveCommentId();
		if (i == null) return false;
		var id = 'dsq-comment-' + i;
		var hash = window.location.hash;

		// Toggle the hash incase the comment isn't available when the page loads
		// for WebKit-based browsers.
		if (Dsq.Utils.webkit) {
			window.location.hash = '';
			window.location.hash = hash;
		}

		this.hlComment = Dsq.$(id);
		// Adding this conditional guard pending #289
		if (!this.hlComment) {
			return;
		}
		this.hlCommentClass = this.hlComment.className;
		this.hlComment.className += ' dsq-hl-anchor';

		setTimeout("Dsq.Thread.highlightClear()", 3000);
	};

	this.highlightClear = function() {
		if (!this.hlComment) {
			return;
		}
		this.hlComment.className = this.hlCommentClass;
	};

	this.login = function(toggle) {
		// toggle id is #dsq-reply-login-[id]
		var postId;
		if(toggle.id.indexOf('dsq-reply-login') != -1) {
			postId = toggle.id.slice(16);
			var container = Dsq.$('dsq-reply-' + postId);
		} else {
			var container = Dsq.$('dsq-post-add');
		}

		if(toggle) {
			if(toggle.className == 'dsq-login-active') {
				Dsq.Iframes.showReplyIframeInContainerIfAllowed(container, postId);
				toggle.className = '';
			} else {
				Dsq.Iframes.showLoginIframeInContainer(container, postId);
				toggle.className = 'dsq-login-active';
			}
		} else {
			Dsq.Iframes.showLoginIframeInContainer(container, postId);
		}

		if(Dsq.Utils.ie) { Dsq.Utils.fixIframesIE(); }
	};


	this.paginate = function(page, el_clicked, per_page) {
		// Use extra_params to pass any override parameters that we need to persist.
		var extra_params = '';

		// "Per page" can either be overriden by providing it as an argument
		// (per-call) or setting the disqus_per_page override variable (global).
		if(typeof per_page == 'undefined') {
			per_page = null;
		}
		if(typeof disqus_per_page != 'undefined' && per_page === null) {
			per_page = disqus_per_page;
		}

		if(typeof disqus_sort != 'undefined') {
			extra_params += '&sort=' + disqus_sort;
		}
		if(per_page !== null) {
			extra_params += '&per_page=' + per_page;
		}

		Dsq.$('dsq-pagination').innerHTML += '<img src="http://media.disqus.com/images/loading-small.gif">';
		
		if(el_clicked) {
			el_clicked.style.display = 'none';
		}
		
		Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/thread.js'
			+ '?slug='	+ 'opera_vs_mozilla'
			+ '&p='		+ page
			+ extra_params);
	};

	this.sortBy = function(sort) {
		var disqus_script = document.createElement('script');
		var disqus_date = new Date();

		if (location.hash != '') {
			location.hash = '#disqus_thread';
		}

		if(typeof(disqus_url) == 'undefined') {
			disqus_url = disqus_href;
		}
		disqus_script.type = 'text/javascript';
		disqus_script.src = 'http://disqus.com/forums/tntluoma/thread.js'
			+ '?slug='	+ 'opera_vs_mozilla'
			+ '&sort='	+ sort
			+ '&title='
			+ '&'		+ disqus_date.getTime();

		Dsq.$('dsq-comments').innerHTML = '<img src="http://media.disqus.com/images/loading.gif">';
		Dsq.container.appendChild(disqus_script);
	};

	this.subscribe = function(status, email) {
		// `status` is an int -- 1 to subscribe, 0 to unsubscribe
		if(Dsq.jsonData.request.is_authenticated || email) {
			// If authenticated user OR anonymous email provided

			if(email) {
				Dsq.Popup._closePopup(null, true);
			}

			Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/subscribe.js'
				+'?status=' 	+ status
				+ '&slug='		+ 'opera_vs_mozilla'
				+ '&email=' 	+ encodeURIComponent(email));

		} else if(!email) {
			// If anonymous user and no email has been provided yet, prompt for email

			var title = 'Subscribe to this comment thread';
			var message = ' \
				New comments will be sent directly to your email inbox! \
				<div class="dsq-subscribe-submit"> \
					<p><strong>Enter your email address below.</strong></p> \
					<input type="text" id="dsq-subscribe-email"> \
					<button type="button" onclick="Dsq.Thread.subscribe(1, Dsq.$(\'dsq-subscribe-email\').value)">Subscribe</button> \
				</div> \
			';

			Dsq.Popup.popModal(message, title);
		}
	};

	this.showSettings = function() {
		if (!Dsq.jsonData.request.is_moderator) {
			return;
		}

		/* The form has to be re-designed when more options will come out. */
		var html = 'Automatically close comments after <input size="3" id="dsq-thread-days-alive" value="' + Dsq.jsonData.thread.days_alive + '" type="text" /> days. Existing comments will still be displayed.<br /><br />(Using 0 days will disable this feature)<br /><br />'
								 + '<button type="button" onclick="Dsq.Thread.updateDaysAlive();" class="dsq-button-small"><span>Save</span></button>'
								 + '<span id="dsq-thread-settings-status" class="dsq-options-status"></span>';

		Dsq.Popup.popModal(html, 'Settings');
	};

  this.showModeratorActions = function() {
      if (!Dsq.jsonData.request.is_moderator) {
          return;
      }

      var html = '<div class="dsq-moderate-options"><table><tr>' +
                 '<td>' + Dsq.Strings.ACTIONS + '</td><td><ul>';
      html += '<li><a href="#" onclick="Dsq.Thread.toggleClosed(); return false;">' +
              (Dsq.jsonData.thread.closed ? Dsq.Strings.OPEN_THREAD : Dsq.Strings.CLOSE_THREAD) +
              '</a></li>';
      html += '<li><a href="#" onclick="Dsq.Thread.toggleKilled(); return false;">' +
              (Dsq.jsonData.thread.killed ? Dsq.Strings.RESTORE_THREAD : Dsq.Strings.REMOVE_THREAD) +
              '</a></li>';
      html += '</ul></td></tr></table></div>' +
              '<p>Go to the full <a href="http://disqus.com/comments/moderate-threads/" target="_blank">moderate panel</a> for more options.</p>';
      Dsq.Popup.popModal(html, Dsq.Strings.MODERATE_OPTIONS);
  };

	this.updateDaysAlive = function() {
		  var days = Dsq.$('dsq-thread-days-alive').value;
		  var status = Dsq.$('dsq-thread-settings-status');
		  Dsq.Utils.postToUrl('http://disqus.com/forums/tntluoma/update_days_alive.js', {days:days,thread:Dsq.jsonData.thread.id});
		  status.innerHTML = 'Saved!';
		  window.setTimeout(function() { status.innerHTML = ''; }, 1000);
	};

  this.toggleClosed = function() {
      Dsq.Utils.postToUrl('http://disqus.com/forums/tntluoma/toggle_thread_closed.js', {thread:Dsq.jsonData.thread.id});
      window.setTimeout(function() { window.location.reload(); }, 500);
  };

  this.toggleKilled = function() {
      Dsq.Utils.postToUrl('http://disqus.com/forums/tntluoma/toggle_thread_killed.js', {thread:Dsq.jsonData.thread.id});
      window.setTimeout(function() { window.location.reload(); }, 500);
  };
};
// Dsq.Thread

Dsq.Events = function() {
	var obj = {};

	// Private
	var handlers = {};
	var getHandlers = function(event) {
		if (handlers[event] === undefined) {
			handlers[event] = [];
		}
		return handlers[event];
	};

	// Public
	// Value keys : postId, node, xtype
	obj.REPLY_IFRAME_CREATED = 1;
	// Value keys : postId, opened
	obj.REPLY_IFRAME_TOGGLED = 2;
	obj.fire = function(event, opt_value) {
		if (!event) {
			throw new Error('Unknown event');
		}
		var value = opt_value || {};
		for (var i=0; i<getHandlers(event).length; i++) {
			getHandlers(event)[i](value);
		}
	};
	obj.addHandler = function(event, callback) {
		getHandlers(event).push(callback);
	};

	return obj;
}();

/**
 * Dsq.Realtime
 */
Dsq.Realtime = new function() {
	var initialized = false;
	var interval = null;
	var last_checked = Dsq.jsonData.request.timestamp;
	var new_posts = [];
	var ongoing_request = false;
	var prev_script = null;

	function updateNewPostCount() {
		Dsq.$('dsq-realtime-alert').style.display = new_posts.length ? 'block' : 'none';

		Dsq.$('dsq-realtime-queued').innerHTML = new_posts.length
		+ ' new '
		+ Dsq.Utils.pluralize(new_posts.length, 'comment', 'comments')
		+ Dsq.Utils.pluralize(new_posts.length, ' was', ' were')
		+ ' just posted.';

		Dsq.$('dsq-realtime-show').innerHTML = '(' + Dsq.Strings.SHOW + ')';
	}

	function insertNewPosts() {
		var post_id = null;
		var after_id = Dsq.$('dsq-sort-select').value === 'oldest' ? -1 : null;

		for (var i=0; i<new_posts.length; i++) {
			post_id = new_posts[i];
			Dsq.Post.insert(after_id, post_id, Dsq.jsonData.posts[post_id].message);
			Dsq.Post.incrementPostCount();
			Dsq.Post.outlineComment(post_id);
		}
		new_posts = [];
	}

	this.enableInterval = function() {
		interval = setInterval(Dsq.Realtime.check, Dsq.jsonData.context.realtime_speed);
		Dsq.$('dsq-realtime-status').innerHTML = Dsq.Strings.ENABLED;
		Dsq.$('dsq-realtime-toggle').innerHTML = '(' + Dsq.Strings.PAUSE + ')';
	}

	this.disableInterval = function() {
		if (interval) {
			clearInterval(interval);
			interval = null;
		}
		Dsq.$('dsq-realtime-status').innerHTML = Dsq.Strings.PAUSED;
		Dsq.$('dsq-realtime-toggle').innerHTML = '(' + Dsq.Strings.RESUME + ')';
	}

	this.toggleInterval = function() {
		if (!interval) {
			Dsq.Realtime.enableInterval();
		} else {
			Dsq.Realtime.disableInterval();
		}
		return false;
	}

	this.initialize = function() {
		if (!initialized) {
			initialized = true;
			Dsq.$('dsq-realtime-toggle').onclick = this.toggleInterval;
			if (!Dsq.jsonData.forum.streaming_realtime) {
				Dsq.$('dsq-realtime-show').onclick = this.show;
				updateNewPostCount();
			}
			if (Dsq.jsonData.thread.realtime_paused) {
				Dsq.Realtime.disableInterval();
			} else {
				Dsq.Realtime.enableInterval();
			}
		}
	}

	this.show = function() {
		insertNewPosts();
		updateNewPostCount();
		return false;
	}

	this.check = function() {
		if (!ongoing_request && Dsq.jsonData.realtime_enabled) {
			if (prev_script) {
				prev_script.parentNode.removeChild(prev_script);
			}
			ongoing_request = true;
			prev_script = Dsq.Utils.execScript('http://disqus.com/forums/38951185/realtime.js?timestamp=' + last_checked);
		}
	};

	this.update = function(timestamp, posts, users) {
		ongoing_request = false;
		last_checked = timestamp;

		if (users) {
			for (var user_id in users) {
				if (users.hasOwnProperty(user_id)) {
					if (!Dsq.jsonData.users[user_id]) {
						Dsq.jsonData.users[user_id] = users[user_id];
					}
				}
			}
		}

		if (posts) {
			for (var post_id in posts) {
				if (posts.hasOwnProperty(post_id)) {
					if (!Dsq.jsonData.posts[post_id]) {
						Dsq.jsonData.posts[post_id] = posts[post_id];
						new_posts.push(post_id);
					}
				}
			}

			if (Dsq.jsonData.forum.streaming_realtime) {
				insertNewPosts();
			} else {
				updateNewPostCount();
			}
		}
	};

}();

// DEPRECATED
Dsq.Iframes = function() {
	// Different style of object from the above. Hoping to switch to this for some reason.
	var obj = {};

	// Private
	var showIframeInContainer = function(container, id, markup) {
		// Look through container for iframes, hiding them, except show one that matches id
		// If none of them matched id, create a new iframe using markup and insert it.
		// Returns the iframe node if and only if it was newly created.
		var found = false;
		for (var i=0; i<container.childNodes.length; i++) {
			var child = container.childNodes[i];
			if (child.nodeName == 'IFRAME') {
				if (child.id == id) {
					child.style.display = 'block';
					found = true;
				} else {
					child.style.display = 'none';
				}
			}
		}
		if (found) {
			return;
		}
		// The iframe wasn't found, so construct it and add it to the container.
		// Don't use innerHTML because it might reload iframes
		var div = document.createElement('div');
		div.innerHTML = markup;
		var iframe = div.childNodes[0];
		div.removeChild(iframe);
		container.appendChild(iframe);
		return iframe;
	};

	// Public
	obj.makeReplyIframeId = function(opt_postId, opt_xtype) {
		var id = 'dsq-post-add-iframe';
		if (opt_xtype) {
			id += '-' + opt_xtype;
		}
		if (opt_postId) {
			id += '-' + opt_postId;
		}
		return id;
	};
	obj.makeLoginIframeId = function(opt_postId) {
		if (!opt_postId) {
			return 'dsq-login-iframe';
		}
		return 'dsq-login-iframe-' + opt_postId;
	};
	obj.makeReplyIframeName = function(opt_postId, opt_xtype) {
		var name = 'dsq-reply-frame';
		if (opt_xtype) {
			name += '-' + opt_xtype;
		}
		if (opt_postId) {
			name += '-' + opt_postId;
		}
		return name;
	};
	obj.showReplyIframeInContainer = function(container, opt_postId, opt_extraParams, opt_className) {
		// Construct the id so we can check if it's already present.
		// Hide any other iframes we find, and show this one if it's found.
		var params = opt_extraParams || {};
		// use xtype in the id and name so we can distinguish media replies from text replies:
		var id = Dsq.Iframes.makeReplyIframeId(opt_postId, params.xtype);
		var name = Dsq.Iframes.makeReplyIframeName(opt_postId, params.xtype);
		var attributes = {
			'id': id,
			'name': name,
			'class': opt_className || 'dsq-post-reply'
			};
		var markup = Dsq.Templates.frameReply(opt_postId, opt_extraParams, attributes);
		var iframe = showIframeInContainer(container, id, markup);
		// It was newly created
		if (iframe) {
			Dsq.Events.fire(Dsq.Events.REPLY_IFRAME_CREATED, {
				postId: opt_postId,
				node: iframe,
				xtype: params.xtype
			});
		}
	};
	obj.showLoginIframeInContainer = function(container, opt_postId) {
		var id = Dsq.Iframes.makeLoginIframeId(opt_postId);
		var markup = Dsq.Templates.frameLogin({id: id});
		showIframeInContainer(container, id, markup);
	};
	obj.showReplyIframeInContainerIfAllowed = function(container, opt_postId) {
		if (Dsq.jsonData.context.show_reply) {
			obj.showReplyIframeInContainer(container, opt_postId);
		} else {
			obj.hideAllInContainer(container);
		}
	};
	obj.hideAllInContainer = function(container) {
		for (var i=0; i<container.childNodes.length; i++) {
			var child = container.childNodes[i];
			if (child.nodeName == 'IFRAME') {
				child.style.display = 'none';
			}
		}
	};

	return obj;
}();

Dsq.Twitter = new function() {
	var that = this;

	this.startTwitterConnect = function() {
		var popupParams = 'location=0,status=0,width=800,height=400';
		that._twitterWindow = window.open(Dsq.jsonData.settings.disqus_url + '/_ax/twitter/begin/', 'twitterWindow', popupParams);
		that._twitterInterval = window.setInterval(that.completeTwitterConnect, 1000);
	};

	this.completeTwitterConnect = function() {
		if (that._twitterWindow.closed) {
			window.clearInterval(that._twitterInterval);
			window.location.reload();
		}
	};
};

Dsq.Yahoo = new function() {
	var that = this;

	this.startYahooConnect = function() {
		var popupParams = 'location=0,status=0,width=800,height=400';
		that._yahooWindow = window.open(Dsq.jsonData.settings.disqus_url + '/_ax/yahoo/begin/', 'yahooWindow', popupParams);
		that._yahooInterval = window.setInterval(that.completeYahooConnect, 1000);
	};

	this.completeYahooConnect = function() {
		if (that._yahooWindow.closed) {
			window.clearInterval(that._yahooInterval);
			window.location.reload();
		}
	};
};

Dsq.OpenID = new function() {
	var that = this;

	this.requestURL = function() {
		var message = '<table class="dsq-openid-form"><tr><td style="vertical-align:top;" rowspan="2"><img src="' + Dsq.jsonData.settings.media_url + '/images/openid-icon-100x100.png" /></td>';
		message += '<td><label for="dsq-openid-url">OpenID URL:</label></td><td><input type="text" id="dsq-openid-url" /></td></tr>';
		message += '<tr><td><label for="dsq-openid-username">Display name:</label></td><td><input type="text" id="dsq-openid-username" /></td></tr>';
		message += '<tr><td class="dsq-openid-submit" colspan="3"><input type="button" value="Sign in" onclick="Dsq.OpenID.startConnect();" /></td></tr>';
		message += "</table>";

		Dsq.Popup.popModal(message, 'Sign in using OpenID');
	};

	this.startConnect = function() {
		var isblank = function(str) {
			return /^\s*$/.test(str);
		};

		var openid_url = Dsq.$('dsq-openid-url').value;
		var username = Dsq.$('dsq-openid-username').value;

		if (isblank(openid_url)) {
			return;
		}

		var popupParams = 'location=0,status=0,width=800,height=500';
		var url = Dsq.jsonData.settings.disqus_url + '/_ax/openid/begin/' + '?url=' + encodeURIComponent(openid_url) + '&username=' + encodeURIComponent(username);
		that._openidWindow = window.open(url, 'openidWindow', popupParams);
		that._openidInterval = window.setInterval(that.completeConnect, 1000);
	};

	this.completeConnect = function() {
		if (that._openidWindow.closed) {
			window.clearInterval(that._openidInterval);
			window.location.reload();
		}
	};
};

Dsq.Reaction = new function() {
	var that = this;

	this.hide = function(id) {
		Dsq.Utils.execScript('http://disqus.com/forums/tntluoma/hidereaction.js?' + 'reaction_id=' + id);
	};

	this.reportMissingReactions = function() {
		if (!Dsq.jsonData.request.is_moderator || !Dsq.jsonData.forum.reactions_enabled) {
			return;
		}

		if (Dsq.jsonData.thread.queued) {
			Dsq.Popup.popModal('Your report has been received. The system will automatically search for new reactions; if any are found, they will be displayed on this comment thread.<br/><br/>Thank&nbsp;you.',
												 'Reported missing reactions');
			return;
		}

		Dsq.Utils.execScript(Dsq.jsonData.settings.disqus_url + '/forums/tntluoma/queueurl.js');
	};
};

Dsq.CNN = function() {
	var obj = {};

	obj.authenticate = function() {
		var url = Dsq.jsonData.settings.disqus_url + "/saml/cnn/try/";
		Dsq.Utils.postToUrl(url, {'target': document.location}, true);
	};

	return obj;
}();


if(Dsq.Utils.ie6) {
	(function() {
		DSQ_HEADER_AVATAR_RE = /<div class="dsq-header-avatar"(.*?)>/gim;
		Dsq.Templates.registerFilter('postPrependHeader', function(html, post_id) {
			// Add "onmouseout" for dsq-header-avatar for dropProfile
			// functionality since IE6 cannot use :hover.
			function _headerAvatarReplace(content, inner, _unused, html) {
				return '<div class="dsq-header-avatar" '
					+ inner
					+ ' onmouseout="Dsq.Post.dropProfile(' + post_id + ')">';
			}
			html = html.replace(DSQ_HEADER_AVATAR_RE, _headerAvatarReplace);
			return html;
		});
	})();
}









(function() {
	//
	// Load theme.  This overrides the base templates with template functions
	// from the respective themes.
	//
	if (Dsq.jsonData.integration.theme == 4) {
		var theme = 'narcissus';
		// HACK: Set variable on window to use post message.
		window.disqus_use_postmessage = true;

		
		for(var prop in Dsq.Themes[theme]) {
			if(Dsq.Themes[theme] && Dsq.Themes[theme].hasOwnProperty(prop)) {
				Dsq.Templates[prop] = Dsq.Themes[theme][prop];
			}
		}
		
		for(var prop in Dsq.Post) {
			if(Dsq.Themes[theme] && Dsq.Themes[theme].hasOwnProperty(prop)) {
				Dsq.Post[prop] = Dsq.Themes[theme][prop];
			}
		}
	}

	//
	// Register templates.  This must be done after all themes are loaded.
	//
	Dsq.Templates.registerTemplate('authPost', Dsq.Templates.authPost);
	Dsq.Templates.registerTemplate('header', Dsq.Templates.header);
	Dsq.Templates.registerTemplate('footer', Dsq.Templates.footer);
	Dsq.Templates.registerTemplate('trackbacks', Dsq.Templates.trackbacks);
	Dsq.Templates.registerTemplate('reactions', Dsq.Templates.reactions);
	Dsq.Templates.registerTemplate('prependPost', Dsq.Templates.prependPost);
	Dsq.Templates.registerTemplate('appendPost', Dsq.Templates.appendPost);
	Dsq.Templates.registerTemplate('postPrependHeader', Dsq.Templates.postPrependHeader);
	Dsq.Templates.registerTemplate('postAppendHeader', Dsq.Templates.postAppendHeader);
	Dsq.Templates.registerTemplate('preBody', Dsq.Templates.preBody);
	Dsq.Templates.registerTemplate('postBody', Dsq.Templates.postBody);
	Dsq.Templates.registerTemplate('postFooter', Dsq.Templates.postFooter);
	Dsq.Templates.registerTemplate('_popupGeneric', Dsq.Templates._popupGeneric);
	Dsq.Templates.registerTemplate('voted', Dsq.Templates.voted);
	Dsq.Templates.registerTemplate('popupProfile', Dsq.Templates.popupProfile);
	Dsq.Templates.registerTemplate('postBox', Dsq.Templates.postBox);
	Dsq.Templates.registerTemplate('pagination', Dsq.Templates.pagination);
	Dsq.Templates.registerTemplate('postComment_onSuccess', Dsq.Templates.postComment_onSuccess);

})();

Dsq.container.className = "clearfix";
Dsq.container.innerHTML = ' \
<ul id="dsq-comments">\
	 <li id="dsq-comment-19814769">\
	 <div id="dsq-comment-header-19814769" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814769" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814769" href="http://v.bulport.com/" target="_blank" rel="nofollow">Vladimir Georgiev</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814769" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814769" class="dsq-comment-message"><blockquote><br></blockquote><blockquote><br><p>comprehensive popup controls to keep<br>    unwanted advertising off your desktop</p><br></blockquote><br><p>Yup, Opera can do that, and Opera makes<br>  it much easier to turn popups on and off.<br>  Just press F12 (which also gets you to<br>  a lot of other options as well).</p><br><br><p>This is not exactly true. Mozilla (or at least Firebird) can block pop-up by per-site filtering. This is much more flexible ability. Though it can be debatable if that\'s really needed in the browser. I guess more complicated filtering should be done by a proxy.</p><br><blockquote><br><p>If I have counted correctly (there are<br>  so many I may have lost count!) there<br>  are 18 search options and 11 general<br>  options on the first screen, and<br>  48 options on the second screen. Opera<br>  actually has another panel of options,<br>  large icons, which I didn?t even bother<br>  to show because they are mostly the same<br>  as the small ones... However, this shows<br>  clearly that Opera gives you more options<br>  than Mozilla.</p><br></blockquote><br><p>:-))) And 21 of the small buttons in Opera are M2 related and do not have anything to do with the browser. So you get 27 browser buttons in Opera versus 10 Mozilla\'s buttons. It is still not bad though :-)</p><br><blockquote><br><p>Don?t forget that in addition to what<br>  I have already mentioned, every toolbar<br>  in Opera is completely customizable (using<br>  drag and drop), meaning that you can take<br>  any of those fields onto any of the toolbars.</p><br></blockquote><br><p>This is not exactly true. You cannot d-n-d some buttons to some toolbars (try with different fields and buttons). Fields on different toolbars may also behave inconsistently.</p><br><p>Eg., if you have Edit/Inline search enabled, and Multiple search field on the main bar, that filed would be automatically focused on Ctrl+F. If the same field is on the status bar instead, it won\'t get focused.</p><br><p>Nevertheless, these cases are usualy minor issue and have a good reason to exist (though not always, as in the example above).</p><br><p>In fact, Opera is so much configurable that, if something cannot be done in one manner, it most probably can be done in another manner.</p><br><p>There is something in Firebird I definetely regret that is not present in Opera: The menu can be used as toolbar. I would immediately move my status field there. Saving precious space.</p><br><p>Opera seems to miss a feature Firebird has: Load images from the originated server only. Though I cannot estiomate if this feature is of good worth.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814770">\
	 <div id="dsq-comment-header-19814770" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814770" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814770" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814770" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814770" class="dsq-comment-message"><p>Load images from originating server only is a good concept (blocking ads from other servers) but so many sites are starting to distribute the load that you would often miss legit images as well.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814771">\
	 <div id="dsq-comment-header-19814771" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814771" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814771" href="http://v.bulport.com/" target="_blank" rel="nofollow">Vladimir Georgiev</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814771" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814771" class="dsq-comment-message"><blockquote><br><p>Eg., if you have Edit/Inline search enabled,<br>  and Multiple search field on the main bar,<br>  that filed would be automatically focused<br>  on Ctrl+F. If the same field is on the<br>  status bar instead, it won\'t get focused.</p><br></blockquote><br><p>This was actually corrected in 7.2 beta 7 :-)<br>Now the field will get focussed no matter which toolbar you have placed it on.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814772">\
	 <div id="dsq-comment-header-19814772" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814772" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814772" href="http://www.grcomputerworks.com/" target="_blank" rel="nofollow">Bill Creswell</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814772" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814772" class="dsq-comment-message"><p>-Streamlined browser? Not on my Free version. Big Ad.</p><br><p>-99 Extensions include some nice developer bars. Are there some for Opera?</p><br><p>-Smaller, - certainly, and includes M2. How do they do that?</p><br><p>-Like the news bar a lot.</p><br><p>It is still hard to spend $40 for something that I find equivalent to what is available free. The 7.0  and beyond releases are terrific, and "industry leading" in my opinion. But not by much.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814773">\
	 <div id="dsq-comment-header-19814773" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814773" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814773" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814773" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814773" class="dsq-comment-message"><p>Now come on, you know as well as I do that the streamlined browser has nothing to do with the ad.  The ad is part of the UA.  The browser itself is clearly streamlined compared to the bloat in IE and Mozilla.</p><br><p>3.3MB for Opera, 6+ for Firebird, 15 for Mozilla, and up to 76 for Internet Explorer... Clearly Opera has the tightest codebase.</p><br><p>How do they do that?  They have a team of coders working on it, and working together to make tight code.</p><br><p>As far as the "developer bars" I\'m not sure what kind of development you mean, since I don\'t use Mozilla.</p><br><p>$40 gets you that tighter code base plus a vastly superior overall UI.  And right now you can get it for $29.25 as part of the \'Happy Hour\' program.</p><br><p>Spread that cost out over a year and it is $0.08 per day or $2.43 a month to use a faster browser with a better UI.  And you get 6 months of Operamail and personal email tech support.  Can you get tech support from Mozilla?</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814775">\
	 <div id="dsq-comment-header-19814775" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814775" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814775" href="http://www.grcomputerworks.com/" target="_blank" rel="nofollow">Bill Creswell</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814775" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814775" class="dsq-comment-message"><p>---and you are not even emphasizing that Firebird is without an email client at 6.6 mb.----</p><br><p>Almost thou persuadest me.... but as a cheapskate I can\'t get past the size of the ad, or the spending of $49+  (I have Win and Linux at home,WinXP at Work, and Win or Lin on my laptop - that\'s a lot of licenses).<br>So I keep the ad version available for testing, and reading the news feeds I have setup, and keep looking for the "killer reason" that I need Opera.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814776">\
	 <div id="dsq-comment-header-19814776" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814776" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814776" href="http://trats.ozforces.com.au/" target="_blank" rel="nofollow">Kevin W</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814776" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814776" class="dsq-comment-message"><p>"There is something in Firebird I definetely regret that is not present in Opera: The menu can be used as toolbar. I would immediately move my status field there."</p><br><p>I have my status field in my address bar and my address field in my main bar.  And set Preferences &gt; Toolbars and menus &gt; Progress bar inside address bar.    And I\'ve removed my menu bar.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814777">\
	 <div id="dsq-comment-header-19814777" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814777" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814777" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814777" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814777" class="dsq-comment-message"><p>Control + F11 will remove the Menu Bar in Opera 7.2</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814778">\
	 <div id="dsq-comment-header-19814778" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814778" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814778" href="http://www.endzone1.com/" target="_blank" rel="nofollow">dave marsdin</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814778" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814778" class="dsq-comment-message"><p>One thing I will Say that makes Opera the killer browser for me... (including all the usual advantages it has)...</p><br><p>MOUSE GESTURES!</p><br><p>I cant live without them... mind you, im also sick of swearing at my computer when mouse gestures dont work in explorer, IE (which i use for windows update and nothing else), and everything else on my system....</p><br><p>i sit there frantically holding the right mouse button while clicking left and nothing happens... Doh!</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814779">\
	 <div id="dsq-comment-header-19814779" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814779" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814779">Chris</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814779" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814779" class="dsq-comment-message"><blockquote><br><p>.3MB for Opera, 6+ for Firebird, 15 for Mozilla,<br>  and up to 76 for Internet Explorer... Clearly<br>  Opera has the tightest codebase.</p><br></blockquote><br><p>Negative.  Opera compresses their exe\'s and dll\'s using a 3rd party tool (ASPack) to leave a smaller footprint. This has nothing to do with a "tighter codebase". If you were to compress Firebird\'s exe you will find that it comes out to about the same size.</p><br><p>[Ed. - While I believe these claims to be untrue (see below) I have left the post here.  Please continue to read the comments below which give data which contradicts the claims which Chris (no name or email given) has presented]</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814780">\
	 <div id="dsq-comment-header-19814780" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814780" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814780" href="http://opera.geek.nz/" target="_blank" rel="nofollow">Richard Grevers</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814780" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814780" class="dsq-comment-message"><p>Twaddle, Chris. Prior to ASPacking Opera.exe in the install file, it was less than 500kb larger than the packed version. Which still leaves Opera 45% smaller than Firebird, and 80% smaller than the package with equivalent functionality (Firebird + Thunderbird)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814781">\
	 <div id="dsq-comment-header-19814781" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814781" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814781" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814781" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814781" class="dsq-comment-message"><p>That is absolutely false.</p><br><p>I just unpacked Firebird and Opera 7.2</p><br><p>MozillaFirebird.exe is 7631 KB as reported by Windows Explorer.</p><br><p>Opera.exe is 1367.</p><br><p>Of course some may say that the size of the EXE alone tells us very little (well, it does tell us that Firebird\'s EXE is 5 times the size of Opera\'s EXE).</p><br><p>So let\'s compare the entire folder where the apps get installed.</p><br><p>The entire Opera folder (single user install, which puts all the ini files in one folder) is 4.6MB (4.83 size on disk).</p><br><p>The Mozilla Firebird folder is 17.5MB (18.3MB size on disk), and that does not include files put into the Documents and Settings folder.</p><br><p>Also, I used the regular old Windows XP method of compressing the Opera7 folder again, and got 3.26mb.  I did the same to Firebird and got 6.81MB</p><br><p>Again, that may not include all of the Mozilla Firebird files, as I know some of them go into Documents and Settings (whereas I know in this case Opera did NOT put any files into documents and settings.</p><br><p>Mozilla Firebird is TWICE the size of Opera when compressed and nearly FOUR TIMES the size when unpacked.</p><br><p>Please, folks, I don\'t mind if you want to advocate for Mozilla, but it really looks bad when you are either lying or completely misinformed.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814782">\
	 <div id="dsq-comment-header-19814782" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814782" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814782">Jud</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814782" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814782" class="dsq-comment-message"><p>"Almost thou persuadest me.... but as a cheapskate I can\'t get past the size of the ad, or the spending of $49+ (I have Win and Linux at home,WinXP at Work, and Win or Lin on my laptop - that\'s a lot of licenses)"</p><br><p>One license for Win, and $15 more for Lin (with Happy Hour, about $45 total) - so long as you are not in two places at once, I believe a single license permits you to use Opera on one computer at a time.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814783">\
	 <div id="dsq-comment-header-19814783" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814783" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814783" href="http://www.netjak.com/" target="_blank" rel="nofollow">Martez</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814783" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814783" class="dsq-comment-message"><p>You\'re leaving out that with Java, Opera is a 12.6MB download. And since Java is pretty important to....oh, pretty much everything on the web, you definitely want it. That kicks Opera up to about double the download size of Firebird. And let\'s not even mention that Firebird has more themes, better css support, better iexplore specific js support (while adhering to HTML4 standards), ect, because we all know none of that really matters, right? It\'s all about how customizable your toolbar is.</p><br><p>Firebird is the superior choice, hands down.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814785">\
	 <div id="dsq-comment-header-19814785" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814785" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814785" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814785" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814785" class="dsq-comment-message"><p>Java is not required for nearly everything, in fact I hardly ever encounter a site which requires it.</p><br><p>Java<em>Script</em> is very common, but Java is not.</p><br><p>You said "That kicks Opera up to about double the download size of Firebird".  Firebird does not contain Java either.  So what you are basically saying is that Opera WITH Java is larger than Firebird WITHOUT Java?  Well who cares?  If you want Java, you have to download it one way or another.</p><br><p>The size of Java is irrelevant.</p><br><p>You also said, "Firebird is the superior choice, hands down." On what grounds?  I made several comparisons showing how Opera was superior to Firebird, taking specific points from Mozilla\'s own pro-Firebird information.</p><br><p>It\'s a fine browser, but Opera beats it on almost all of the features Mozilla brags about.  I still see no evidence that Firebird makes browsing more efficient than Opera.  More efficient than IE, sure, but big deal.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814786">\
	 <div id="dsq-comment-header-19814786" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814786" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814786">porneL</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814786" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814786" class="dsq-comment-message"><p>There is dev-menu available from opera forums. User stylesheets are pretty useful too (outlines for objects, showing document structure). There is hotkey to validate page.</p><br><p>I have tweaked opera to have menu-in-a-button (you can attach any menu to any button, so you could make menu as toolbar too).</p><br><p>Opera has unbeatable tabs+sessions. I can stop my surfing anytime with one click and continue later, with one click too. No looking in history etc.<br>Pages open as tabs whenever I want. I can\'t believe that mozilla still doesnt have some \'tabs-only\' mode. Minor change in code, major change for users.</p><br><p>Anyway, both browsers are on the "good side". Persuade your frients to cease using IE! I think that 50% market share would be enough for Opera and Mozilla :)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814787">\
	 <div id="dsq-comment-header-19814787" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814787" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814787" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814787" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814787" class="dsq-comment-message"><p>Opera\'s "tabs" are more than tabs, because the windows do not have to be maximized.  Opera has a Multiple Document Interface (MDI) which is different and better than just plain tabs (read more about it on Day 8 of 30 Days to becoming an Opera7 Lover).</p><br><p>Your final point is the key though: fewer IE users will make the web a better place.  We\'ll be happy to share with Mozilla.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814788">\
	 <div id="dsq-comment-header-19814788" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814788" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814788" href="http://www.z4um.com/" target="_blank" rel="nofollow">Amir</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814788" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814788" class="dsq-comment-message"><p>Sorry - I can\'t live with the ad in opera (uses up valuable real estate) and Firebird is definitely close enough that it is a viable alternative at zero cost.<br>Just my 2 cents,<br>Amir</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814789">\
	 <div id="dsq-comment-header-19814789" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814789" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814789">Allan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814789" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814789" class="dsq-comment-message"><p>Hi.  I\'m investigating alternative browsers, Have tried Opera and Mozilla (Not Firebird).  Found your discussion very helpful.  Prefer Opera so far myself despite the advert since I seem to be able to view history off-line more easily.  Biggest Problem I\'m Having with both of them though is getting streaming audio to work eg Real player and Launchcast.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814790">\
	 <div id="dsq-comment-header-19814790" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814790" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814790">Chris</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814790" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814790" class="dsq-comment-message"><p>You forgot http pipelining.  Firebird .7 loads my pages faster, therefore I run it.  And with the right theme firebird takes up less pixels for it\'s controls, especially if you\'re using free opera.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814791">\
	 <div id="dsq-comment-header-19814791" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814791" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814791" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814791" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814791" class="dsq-comment-message"><p>Opera has had HTTP pipelining for some time now.  It\'s nice that Firebird is catching up (checkout this recent thread on opera.tech for more information).</p><br><p>Opera can be run without any of its controls.  Use Control + F8 to get rid of the Addressbar and Control + F11 to get rid the Menu bar.  The only thing that remains is the Window Titlebar.  AND you can still use Opera because it has keyboard controls for everything.  Try that with Firebird.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814792">\
	 <div id="dsq-comment-header-19814792" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814792" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814792">Mike</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814792" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814792" class="dsq-comment-message"><p>My biggest bitch with Firebird is the incredibly slow  startup on my machine.  I have an AMD 586 133 MHz machine with 32 Mb RAM, two hard drives - 1.2 Gb main and 513 Mb slave (which holds the swap file and Internet cache), which has been my home PC since November 1996!  I have not been able to upgrade for financial reasons. So this is what I am stuck with for the present. And my case is not  unique. Believe it or not, there are users out there - in fact, many thousands, particularly in country schools, institutions and Third World Countries - who are still using older computers, including 486s, and who, like me, are battling with the bloat and heavy scripting of modern web sites</p><br><p>As IE (I use IE 5.01 SP2, which is best for my machine) had become impossibly slow to load and scroll down pages with dynamic HTML, Firebird was a breath of fresh air - browsing was so fast, I was in heaven. Pages load fast and scrolling down the page is fast (at least relatively fast on my machine) compared to the agony of IE.<br>But the downside is:<br>1) Firebird takes ages to start up - would you believe it takes one-and-a-half minutes to load!!<br>2) The browser menu functions, eg. calling up Options, work at snail\'s pace on my machine.<br>3) Internet caching and access to the cache is slow.<br>So Firebird is great on the one hand but a serious problem on the other.</p><br><p>So I am thinking of trying out Opera, hoping that it will run faster on my machine. As the Opera Features and Functions page says Opera functions well on systems with limited resources, it looks hopeful. I just wonder if "systems with limited resources" includes older computers like 486s and 586s. Anyway, I\'ll give it a try and let you know how it goes. IE drove me nuts with its slowness, and now Firebird is doing the same, but for different reasons. I hope Opera\'s startup speed and speed of functions and caching won\'t disappoint me like Firebird has.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814793">\
	 <div id="dsq-comment-header-19814793" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814793" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814793">Sard</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814793" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814793" class="dsq-comment-message"><p>I like Opera, but bookmarks don?t have Favicons, and you can?t type keywords into the address bar and have it open the first site it finds.  Also close left and right tabs is quite useful in Firebird, as is being able to configure your own quick searches.  Firebird does lack some polish, and configuring it is far from straight forward, however it?s still in beta, just wait till version 1.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814794">\
	 <div id="dsq-comment-header-19814794" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814794" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814794">Sard</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814794" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814794" class="dsq-comment-message"><p>Ok it looks like you can define your own quick searches in Opera.  Sorry:)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814795">\
	 <div id="dsq-comment-header-19814795" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814795" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814795" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814795" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814795" class="dsq-comment-message"><p>Favicons for bookmarks?  Never thought of that as being all that important... Then again I hardly use the bookmarks menu, since I rely on nicknames (where Opera lets you assign a nickname to a bookmark and then jump to it by just typing the nickname).</p><br><p>Yeah.  Right now I have 18 search fields down the left side of my browser... Everything from AcronymFinder to IMDB to UPS.  Of course I don\'t have to have them there, since I can also assign keystrokes for them.  For example:</p><br><p>g opera lover</p><br><p>will search (G)oogle for the words "opera lover"</p><br><p>And, if I wanted to (or if you wanted to) I could setup Opera so that Google would go immediately to the first site it finds (using the "I feel lucky" feature in Google).  Never needed it, myself, but it\'s there if I want it.</p><br><p>Close left and right tabs?  Never saw the need.  If I want to close other pages I generally do \'close all but active\'.</p><br><p>As far as "it will get better in the future"... well, maybe.... but Opera is better now, and in the same potential of "the future" Opera will also improve.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814796">\
	 <div id="dsq-comment-header-19814796" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814796" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814796">Gunnar</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814796" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814796" class="dsq-comment-message"><p>I want a free browser but I don\'t like ads. I think I continue using Firebird :)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814797">\
	 <div id="dsq-comment-header-19814797" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814797" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814797" href="http://blog.sushubh.com/" target="_blank" rel="nofollow">sushubh</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814797" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814797" class="dsq-comment-message"><p>Well, being an ardent Opera fan, I have to be here.<br>Opera rocks no doubt.<br>But adding a new search option in the search bar is easier on Mozilla than on Opera. This is what I think is left unsaid...</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814798">\
	 <div id="dsq-comment-header-19814798" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814798" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814798" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814798" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814798" class="dsq-comment-message"><p>I don\'t know the process by which it is done in Mozilla, so that may be true.</p><br><p>However, last I knew Opera far outmatched the options as to what Mozilla could offer for searches.  With the multi-search dropdown, you can have 15 at your fingertips, and assign keyboard shortcuts to them all.</p><br><p>Since this is not something that you will likely do often, I\'m willing to have Opera\'s method be a little more involved than Mozilla\'s in exchange for getting a lot more flexibility out of it.</p><br><p>Really, adding/changing the search options is very easy with the right (free) tool.  This will be discussed more fully on Day 25 of 30 Days to becoming an Opera7 Lover: search.ini (NOTE: That link will work as of November 25th, as the series is currently in process.)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814799">\
	 <div id="dsq-comment-header-19814799" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814799" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814799">Skeledra</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814799" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814799" class="dsq-comment-message"><p>The "integrated Google search" is called a Mycroft Plugin.  There are currently 593 working plugins for Mozilla.  Most of those are in english, and some can seem redundent (aka Ebay, Ebay Australia, Ebay Canada, etc).</p><br><p>They can be accessed by clicking on the icon in the search bar.  It\'ll display a dropdown menu containing all installed plugins as well as a link to install more.</p><br><p>I have no idea how this compares to Opera except that, as far as I know, its impossible to assign a keyboard shortcut to a Mycroft Plugin.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814800">\
	 <div id="dsq-comment-header-19814800" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814800" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814800" href="http://donein.com/" target="_blank" rel="nofollow">Donein</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814800" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814800" class="dsq-comment-message"><p>opera costs money those people make a living off it, things like mozilla and Internet explorer are completely free and to make money companys have to do something else to sell instead they cant spend all their time on it. For a free program Mozilla and Firebird are the best you could get.</p><br><p>You cant compare programs that cost money and that are free.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814801">\
	 <div id="dsq-comment-header-19814801" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814801" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814801" href="http://www.personalized-art.com/" target="_blank" rel="nofollow">Down1nit</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814801" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814801" class="dsq-comment-message"><p>I love Opera.  I love it so much.  It is my desktop, my Application launcher (goodbye Start menu, hello "w" for winamp, "i" for IE, "c" for crimson editor, "f" for Ws_ftp... etc).  I can\'t get enough of it recently, i\'m just so hooked on it i could scream.</p><br><p>As for paying for a web browser:  I love it.  I love supporting people who do the right thing.  Same with digital music, and e-books.  It feels good to help someone who is devoted to making something you love.</p><br><p>Almost every time i use Opera, i find something else to love about it (who knew you could use gestures in the Pref. window, ex. gesture right expands all bindings in keyboard edit so you can scroll and quickly see any keys that are free to use).</p><br><p>Mozilla is great too, but it seems like a huge investment in time just to seek out code for editing characteristics vs. opera\'s .ini file setup (usually in plain english i might add... ex. "Execute program"). However, the open source is a exciting prospect for future developments... imagine if microsoft picked up the code for it and released IE as a Firebird shell, citing the hard, devoted work of the community.  What a wonderful day that would be.  Impossible though.</p><br><p>The fact that Opera saves form info automatically, enabling users to go back a couple pages to double check something and not risk losing the text in the form (no matter how long it is), was the first feature that got me hooked (read: obsessed) with the browser.  It\'s keen.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814802">\
	 <div id="dsq-comment-header-19814802" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814802" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814802">ric_</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814802" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814802" class="dsq-comment-message"><p>both are good, but i prefer opera too. And they have an important problem to me. They can`t still playe yahoo launchcast radio. so i have to keep using ie.</p><br><p>another option i miss in opera browser is the ability to highlight google search words.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814803">\
	 <div id="dsq-comment-header-19814803" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814803" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814803">Dave Whitla</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814803" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814803" class="dsq-comment-message"><p>I first tried Opera as version 4 hit the web - and it was an incredible leap ahead from IE and the Netscape of the day.<br>7.23 looks great, and the download size is impressive given the functionality and it\'s customization features are even better than those available in Mozilla. But I\'m a Web Application Programmer.  I couldn\'t give a shit about downloading 3Mb instead of 12Mb or how pretty I can make my toolbars.<br>I expect browsers competing for my usage to implement W3C standards recommendations (it\'s bad enough that most of the wold uses IE - if every other browser conforms at least I only have two code branches in my API), open-standard image formats and have a minimal memory footprint (Opera 7.23-linux uses ~27Mb of memory versus Mozilla\'s ~24Mb (Mozilla 1.5-3 NOT Firebird)).<br>Opera is good in these areas - but Mozilla is better (just).<br>That said, I use both myself - and Opera has some cool developer friendly features.  Does it have a JavaScript console equivalent?</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814804">\
	 <div id="dsq-comment-header-19814804" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814804" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814804" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814804" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814804" class="dsq-comment-message"><p>The truth about what browser has better standards support tends to be determined by what you are trying to do.  If you are looking for generated content, Opera is your only real option.</p><br><p>Generated content is a major missing piece of Mozilla&#8217;s support.  There might be others, but I haven&#8217;t run into them but then again I basically just check my pages in Mozilla and IE once I am done with them.  99% of the time Mozilla has the rendering right, and about 50% of the time IE has it wrong.</p><br><p>I&#8217;m talking about doing the day to day useful things that CSS can do, not the obscure stuff that is useful for &#8220;wow&#8221; factor alone.</p><br><p>I&#8217;d be curious to hear if anyone thinks Opera is missing any portions of CSS which they would like to use on a day to day basis.</p><br><p>Oh, and yes, Opera has a JavaScript console.  In Opera 7.23 it is located at under the menu options for window &gt; &gt; Special &gt; JavaScript console.  There is also an option to popup the console on errors (which is of limited use since so many sites have JS errors that it gets to be annoying.  Regardless, the feature is there under Preferences &gt; Multimedia &gt; JavaScript options (select the button for open console on error).</p><br><p>(Note: on Opera 7.5preview the console is under Tools &gt; Consoles &gt; JavaScript console.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814805">\
	 <div id="dsq-comment-header-19814805" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814805" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814805">Stein Inge Morisbak</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814805" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814805" class="dsq-comment-message"><p>One thing I miss in Opera, comparing it to Mozilla, is that it is lacking support for user profiles. Logging on/off your desktop environment every time you want to change settings, mail accounts, bookmarks etc. between users is to much trouble. Eg. in a household where several people are using the same computer.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814806">\
	 <div id="dsq-comment-header-19814806" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814806" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814806">Stein Inge Morisbak</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814806" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814806" class="dsq-comment-message"><p>I found a bypass for my problem concerning profiles. It\'s not very neat but it surprises me that it actually works without any conflicts on Windows (at least I haven\'t run into any yet). I installed Opera twice in separate directories and created two separate shortcuts. Later I found the following hack: <a href="http://www.philburns.com/op7profile.html" rel="nofollow"></a><a href="http://www.philburns.com/op7profile.html" rel="nofollow">http://www.philburns.com/op7profile.html</a> which is neater ;-)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814807">\
	 <div id="dsq-comment-header-19814807" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814807" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814807">Dave Whitla</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814807" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814807" class="dsq-comment-message"><p>I\'m in the middle of writing a cross browser DHTML GUI API as the presentation layer to a server-side web application framework, and in doing so I have had a number of browsers testing the same code to ensure the best consistency of presentation across rendering platforms.<br>Depending on script complexity (and I\'ve kept it as simple and small as possible) I\'ve experienced that the Mozilla 1.5 (gecko20031107) JavaScript interpreter executes at as much as twice the speed of the Opera 7.23 interpreter.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814808">\
	 <div id="dsq-comment-header-19814808" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814808" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814808">Anonymous</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814808" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814808" class="dsq-comment-message"><p>OK Please do not compare Opera and Mozilla Firebird and say that you are comparing Opera and Mozilla.  Firebird is still Under Development.  It has not reached a final build yet.  Also right now the development of Firebird is being focused on fixing bugs not adding features.  More features and a "tighter" codebase etc. are planned for later releases.</p><br><p>I used to be an Opera user but recently (as in the last week or so) decided to try Mozilla/Mozilla Firebird &amp; Thunderbird and honestly, Mozilla is better.  Why? Read on.  I am getting tired of comparisons between Opera and Mozilla out of the box. Opera has paid coders (as stated earlier) Mozilla does not.  That is why there is such a large development of extensions. There are a couple extensions (mainly Multizilla for Mozilla and TBE for Firebird) that add essential features to the browsers that the volunteer Mozilla coders have not gotten around to yet.  Keep that in mind when you criticize either browser.</p><br><p>Popups:<br>Almost all browsers have popup control (IE will when SP2 hits) so why is it necessary to compare it?  I will give you the thing about ease of changing options for Opera. Thats nice. But ya know what? Mozilla can do it in its own way (Prefs extensions)</p><br><p>Tabs:<br>Same as above. Almost all browsers have this now. (Except IE) Opera has been doing it longer? I assume this is an advantage because they would have "more experience" right? Well Mozilla has had less time and has tab browsing that is almost as good as Opera\'s out-of-the-box and surpasses Opera (arguably) with the use of extensions.</p><br><p>Searches:<br>Ya know what? Mozilla has that too.  Also the thing that I never understood about the Opera searches (and Firebird\'s) is why there is a separate search box. Why not just use the address bar? And yup you can add your own 2 (ever heard of quick searches? i.e. "g Mozilla" searches google for Mozilla and yes that can be used for almost ANY search engine (even on non-major sites. so basically your search engine should work no matter what)</p><br><p>Find as you Type:<br>Some people use it. You might not. I do. It\'s ok but nothing worth switching over.</p><br><p>Privacy Controls:<br>Yup this is all over the Mozilla forums and I wouldn\'t be surprised if we saw this Opera feature appear in Mozilla soon</p><br><p>Page Display:<br>In my tests (granted I didn\'t remove all the bars like you did but used tabs, menus, address bar/buttons on both Opera and Mozilla and seeing as how those things are kinda necessary...) I found Mozilla to display more than Opera (Firebird surpassed Opera too) Although I do like that menu bar hotkey.  But wait? When would I actually WANT to do that by a hotkey? Also full screen does the same thing no? Well close enough.</p><br><p>Configuration:<br>Again thats Firebird BETA you are looking at.  Mozilla doesn\'t do that stuff thought. Why? How many times have you actually used all 18 search bars in Opera? Don\'t see the need to have those mail icons either.  Why not just open up the mail client that comes with Mozilla (yeah I know about M2) thats an easy one click thing. As for the rest most are buttons that are 1) on by default 2) would never be used 3) redundant the rest, Ill admit are really useful. (Like the don\'t display images icon.)</p><br><p>Size:<br>I really could care less how big Mozilla is. While its nice to have a smaller download I could just as easily get the web installer and dl only what I want. (Like just the browser for example but then I would be missing out on all the great other stuff IRC, Mail etc.)</p><br><p>Extensions:<br>Again comparing to Firebird. <em>tisk tisk</em> As stated before there are currently more extensions for Mozilla.  The idea of extensions is to make the program more customizable.  (Pick which features you use and which you don\'t)  Who doesn\'t like Minesweeper?  I mean just because M$ removed it from XP doesn\'t mean that we don\'t have 2 leave it out!  Youre right that should not be an extension.  A lot of the features you mentioned as "coming with Opera out-of-the-box" are included in Multizilla.</p><br><p>Skins:<br>Let us not forget that many (but not all) of the skins for Opera are re-issues for new Opera versions/slight color changes etc. but still Opera does have more skins than Firebird or Mozilla. (Not to mention all of the Firebird skins need to be redone for newer versions) but then again I love the default "Modern" theme so much that I don\'t need to change it.</p><br><p>Conclusion:<br>Opera and Mozilla (Firebird doesn\'t count yet) are built for different people.</p><br><p>If you want to have a nice (good looking with the sexy PixOS skin) simple one click install browser that has a lot of the standard alternative browser features and new features of its own that should be able to do almost all of what you want get Opera.</p><br><p>If you want a nice (good looking with the sexy Modern skin) browser that has a lot of the standard features out-of-the-box and almost all of the ones you could want with the use of extensions (some of which are MUST HAVES) that you can (and should) play around with a little to suit your needs get Mozilla.</p><br><p>If you want to test out some new ideas from the creators of Mozilla get Firebird/Thunderbird</p><br><p>At the end of the day, Mozilla and Opera are both great browsers. They are both operating on an entirely different level than Internet Explorer. On a scale of 0 to 10 (where Internet Explorer is clearly a zero), Id give Opera a "7" (ooo matches the version number) and Mozilla a "9".</p><br><p>Biggest complaints about Opera:</p><br><p>1) Has a "Websites need to fix themselves to work with our browser" attitude instead of a "lets work to make this thing compatible" attitude<br>2) I find some of the features unnecessary<br>3) Not customizable enough<br>4) No extensions (setups are on the right track I think)<br>5) No nightly builds : (</p><br><p>Biggest complaints about Mozilla 1.7a:</p><br><p>1) Download manager doesn\'t pause over different sessions like Opera\'s does<br>2) Needs more customizable menus<br>3) Some extension features should be built in<br>4) Star Downloader doesn\'t integrate as well as I want it to (Has nothing to do with Mozilla.  Opera is the same way)</p><br><p>As they say the choice is up to you.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814809">\
	 <div id="dsq-comment-header-19814809" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814809" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814809" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814809" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814809" class="dsq-comment-message"><p>OK Please do not compare Opera and Mozilla Firebird and say that you are    comparing Opera and Mozilla.  Firebird is still Under Development.  It    has not reached a final build yet.        Mozilla is comparing Firebird to Opera.  So let&#8217;s have at it. Every browser is always under development.  If they aren\'t ready to be compared with Opera, then stop comparing themselves to Opera.  If they want to hide behind being a &#8220;preview&#8221; then they shouldn&#8217;t compare themselves to a finished product.      I am getting tired of comparisons    between Opera and Mozilla out of the box. Opera has paid coders (as    stated earlier) Mozilla does not.  That is why there is such a large    development of extensions. There are a couple extensions (mainly    Multizilla for Mozilla and TBE for Firebird) that add essential features    to the browsers that the volunteer Mozilla coders have not gotten around    to yet.  Keep that in mind when you criticize either browser.    Many of these extensions break between builds and conflict with each other.  This is why being built-in is often better.      Almost all browsers have popup control (IE will when SP2 hits) so why is    it necessary to compare it?  I will give you the thing about ease of    changing options for Opera. That&#8217;s nice. But ya know what? Mozilla can    do it in its own way (Prefs extensions)      Site-specific settings are an advantage of Mozilla (the bloated 10+mb version, not sure about the "lighter" Firebird)      Tabs:   Same as above. Almost all browsers have this now. (Except IE) Opera has    been doing it longer? I assume this is an advantage because they would    have "more experience" right? Well Mozilla has had less time and has tab    browsing that is almost as good as Opera\'s out-of-the-box and surpasses    Opera (arguably) with the use of extensions.     Repeat after me: Opera has more than tabs.  Opera has a turn Multi Document Interface, meaning that you can tile windows, or show two together side by side or 6.   Mozilla having tabs does not equal what Opera has to offer.      Searches:   Ya know what? Mozilla has that too.  Also the thing that I never    understood about the Opera searches (and Firebird\'s) is why there is a    separate search box. Why not just use the address bar? And yup you can    add your own 2 (ever heard of quick searches? i.e. "g Mozilla" searches    google for Mozilla and yes that can be used for almost ANY search engine    (even on non-major sites. so basically your search engine should work no    matter what)     I think the separate search box is for new users to understand they can put in their own.  Mozilla can customize searches?  How many?      Find as you Type:   Some people use it. You might not. I do. It\'s ok but nothing worth    switching over.    Opera has this two, both finding any text and just links.      Page Display:   In my tests (granted I didn\'t remove all the bars like you did but used    tabs, menus, address bar/buttons on both Opera and Mozilla and seeing as    how those things are kinda necessary...) I found Mozilla to display more    than Opera (Firebird surpassed Opera too) Although I do like that menu    bar hotkey.  But wait? When would I actually WANT to do that by a    hotkey? Also full screen does the same thing no? Well close enough.     So wait, you are admitting that you didn&#8217;t do the testing that I did, which showed that the Mozilla folks lied about showing more than Opera (again, you made it clear you were not talking about out of the box comparisons).  Opera also has a vastly superior set of zoom<br>options that will let you squeeze more in the page if you want, plus you can change your default zoom.  Opera can show more on the screen than Mozilla, if we are not talking about out of the box configurations (Opera 7.5 is designed to show much more by default).       Configuration:   Again that&#8217;s Firebird BETA you are looking at.  Mozilla doesn\'t do that    stuff thought. Why? How many times have you actually used all 18 search    bars in Opera?      All the time, because I customized them.  I use one or directions, one for Google, one for IMDB, one for MRQE, one for images, one for AcronymFinder, one for the Bible, one for the dictionary, one for <a href="http://Amazon.com" rel="nofollow">Amazon.com</a>, one or Opera support      Extensions:   Again comparing to Firebird. <em>tisk tisk</em> As stated before there are    currently more extensions for Mozilla.  The idea of extensions is to    make the program more customizable.  (Pick which features you use and    which you don\'t)  Who doesn\'t like Minesweeper?  I mean just because    M$ removed it from XP doesn\'t mean that we don\'t have 2 leave it out!     You&#8217;re right that should not be an extension.  A lot of the features you    mentioned as "coming with Opera out-of-the-box" are included in    Multizilla.     However there is no guarantee that one won\'t conflict with another, or break between builds.  And why on earth should my browser be able to play MineSweeper?  That\'s totally ridiculous.      Opera and Mozilla (Firebird doesn\'t count yet) are built for different    people.     If Firebird doesn\'t count yet, then they need to stop comparing it to Opera on their website.  They can\'t have it both ways: either it is in competition with Opera, or it isn\'t.  If Firebird is in competition with Opera, it loses on about every front, including several bogus claims about being better than Opera.      At the end of the day, Mozilla and Opera are both great browsers. They    are both operating on an entirely different level than Internet    Explorer. On a scale of 0 to 10 (where Internet Explorer is clearly a    zero), I&#8217;d give Opera a "7" (ooo matches the version number) and Mozilla    a "9".    I\'d give Firebird a 6 and Opera an 8.     1) Has a "Websites need to fix themselves to work with our browser"    attitude instead of a "lets work to make this thing compatible" attitude    It\'s too bad the web became to accomodating, or we would have much better websites.        2) I find some of the features unnecessary       So what?  Is that not true about any piece of software?  I find many of Mozilla&#8217;s features unnecessary and bloated.  Opera is like 1/3rd of the size.     3) Not customizable enough     That\'s totally bogus.  What do you want to customize that you can\'t?  Keystrokes which trigger commands?  Search engines?  Toolbar locations?  What controls are on each toolbar?  What is and isn\'t shown?     4) No extensions (setups are on the right track I think)     Bogus.  It doesn\'t NEED extensions. (Or you give no reason for what it is missing).       5) No nightly builds : (     Yeah, all we get are actual releases that are ready for usage, rather than claiming that it\'s not yet ready.  (Mozilla made the same claims pre 1.0)     As they say the choice is up to you.    Indeed.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814810">\
	 <div id="dsq-comment-header-19814810" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814810" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814810">lena</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814810" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814810" class="dsq-comment-message"><p>What I really miss in Opera are<br>a "block images from this server" option,<br>a "click flash to play" option,<br>a "open text link in new page" option, and<br>a "undo close page" function (a "recently closed pages" menu is nice too, but not as essential for me)<br>(these are all in Firebird with extensions). I only noticed how accustomed I was at the imageblocker and click flash to play option now that I try opera and see the huge amount of junk (mostly ads) on pages I visit regularly.</p><br><p>I also find Mozilla (or Firebird with extension)\'s cookie manager way superior over Opera\'s, unfortunately. I really miss the simple \'block cookies from this page\' and \'unblock cookies from this page\' (in case I just blocked them, or in case of a standard cookie block, and then found out that the site does not work without cookies.)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814811">\
	 <div id="dsq-comment-header-19814811" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814811" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814811">Traf</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814811" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814811" class="dsq-comment-message"><p>MDI: It is a reason why everybody else (okey, not adobe) moves away form this antique form of app. It is much more flexible with both SDI and tabs like firebird. It\'s more memory friendly too.</p><br><p>Search: Opera provides 15 search engines! Okey, it\'s more than googlebar, but firebird has 806 search engines ready for download, and as many as you want if you know how to write a plugin. Who won that race?</p><br><p>Costumizable: Firebird is written in XUL, a special variant of XML. You can fix anything regarding the UI tweeking those files.</p><br><p>Speed: Firebird IS faster than Opera (check whatever benchmark you want).</p><br><p>A note to remember: Opera is at version 7, firebird is at 0.7.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814812">\
	 <div id="dsq-comment-header-19814812" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814812" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814812" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814812" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814812" class="dsq-comment-message"><p>Search engines: do you need more than 15?  Does Firebird let you search them using keyboard?  Opera won that race by making them be built in, easily customizable, and keyboard enabled.</p><br><p>Customizable: I don\'t want to have to learn a new language to customize things, I want the app to help me.  Opera does this.</p><br><p>It sounds like you think MDI is bad but you\'re not really clear on why.  As far as flexible, you can have SDI and MDI mixed in Opera as well, and Opera\'s MDI lets you do things like compare two windows side by side, which is impossible in Firebird.</p><br><p>You say Firebird is faster, so I\'m supposed to believe you?  Unless it is with JavaScript-laden pages, I\'d have to see some independent numbers first.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814813">\
	 <div id="dsq-comment-header-19814813" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814813" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814813">Sean Marean</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814813" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814813" class="dsq-comment-message"><p>I tend to prefer FB to Opera for some reason... perhaps because it is free.</p><br><p>Regarding Opera\'s functionality as compared to FB... the only thing I would like to see in FB is the ability to link windows -- well, maybe one of the things. Opera does seem to have a rich set of features. Opera\'s integrated search sounds nice, although FB "Quick Searches" is sufficient (and of course the mycroft extensions).  I suppose more configuration options will be available as FB continues to be developed. If I hadn\'t invested in a 3rd party solution to web filtering and privacy I might have given Opera a second thought... it\'s likely I will give it a second thought when v7.5 enters the market come to think of it. Anyway, a great Web site here -- very helpful.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814814">\
	 <div id="dsq-comment-header-19814814" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814814" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814814" href="http://www.opera.com/" target="_blank" rel="nofollow">Elq</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814814" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814814" class="dsq-comment-message"><p>Right on, the best browser without a doubt is Opera!</p><br><p><a href="http://www.opera.com" rel="nofollow"></a><a href="http://www.opera.com" rel="nofollow">http://www.opera.com</a></p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814815">\
	 <div id="dsq-comment-header-19814815" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814815" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814815">SteelCaress</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814815" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814815" class="dsq-comment-message"><p>Personally, about all I can say about Firebird (that hasn\'t been said here) is this:</p><br><p>I can open things up and modify the code in Firebird.  I don\'t have to figure out which .dll I can modify (and which windows API that will conflict with).  That was my biggest complaint about Mozilla in its current state.</p><br><p>Plus it opens fast and renders faster than Opera or Mozilla on my 1.33 GHz machine.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814816">\
	 <div id="dsq-comment-header-19814816" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814816" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814816" href="http://hao2lian.blogspot.com/" target="_blank" rel="nofollow">hao2lian</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814816" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814816" class="dsq-comment-message"><p>I think Opera is a very decent browser. I just want to point out some things.<br>"Yup, Opera can do that, and Opera makes it much easier to turn popups on and off. Just press F12 (which also gets you to a lot of other options as well)."<br>There\'s now an extension for this. I like it more as an extension since I don\'t visit many sites with popups and I rarely ever want to see them, especially since most browsers like Firebird and Opera are "smart" enough to recognize legit popups.</p><br><p>"Yeah, Opera can do that, and could do it long before anyone else. Opera also makes it easy to make sure that all of your pages show up in a single window."<br>From what I\'ve seen, Firebird\'s tabbed browsing is the same as Opera\'s MDI, especially with the addition of Tabbrowser Extensions (lots of goodies, too).</p><br><p>"Opera beats every other browser in the world on integrated searching. We&#8217;ve got Google, <a href="http://Amazon.com" rel="nofollow">Amazon.com</a>, Google Groups, eBay, Lycos, AllTheWeb, <a href="http://Download.com" rel="nofollow">Download.com</a>, SearchBoss, Images, Videos, MP3s, News, and Opera Support... and you can add your own if you want to."<br>As someone said above, <a href="http://mycroft.mozdev.org/" rel="nofollow"></a><a href="http://mycroft.mozdev.org/" rel="nofollow">http://mycroft.mozdev.org/</a> . Keyboard shortcuts can be assigned via Bookmark Manager (you\'ll have to create seperate bookmarks though, which can be a hassle).</p><br><p>"Find As You Type sounds like a useful feature, except that I don&#8217;t often know what letters or words will be linked and which won&#8217;t be"<br>I like setting Find as You Type to all words. Magic. I never have to use Find again. Opera has the same, but you have to type "/" first. You might be able to modify that behavior.</p><br><p>"More effectively than Internet Explorer, yes. More effectively than Opera? No. Mozilla&#8217;s privacy controls include History, Saved Form Information, Saved Passwords, Download Manager History, Cookies, and Cache. Opera can do all that, and will let you delete any or all from one screen, like this:"<br>Firebird does most of that with one click too, it\'s just not seperated that much. Of course, some of the things might be considered too excessive (bookmark visited time?), but that\'s just me. =)</p><br><p>"Plus Opera gives you a great deal of control over what information is given away in the first place, including referrer logging and automatic redirection."<br>You can change that via about:config. True, not as user friendly.</p><br><p>"You can see that Opera shows every bit (no pun intended) as much as Mozilla, and actually a little more (compare the bottom right of each screenshot). And in Opera you can press Control + F11 and make even the main menu (file/edit/view/etc) disappear."<br>Just a menu bar is unusable for me. I need, at least, the drop down back history and the URL bar. Firebird lets me put those on the menu bar and the Compact Extension (all menu labels -&gt; one). I can achieve the same thing using one of Opera\'s button thingys and hiding the menu bar. So they\'re the same.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814817">\
	 <div id="dsq-comment-header-19814817" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814817" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814817" href="http://hao2lian.blogspot.com/" target="_blank" rel="nofollow">hao2lian</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814817" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814817" class="dsq-comment-message"><p>"If I have counted correctly (there are so many I may have lost count!) there are 18 search options and 11 general options on the first screen, and 48 options on the second screen. Opera actually has another panel of options, large icons, which I didn&#8217;t even bother to show because they are mostly the same as the small ones... However, this shows clearly that Opera gives you more options than Mozilla."<br>General options and the second screen sometimes repeats themselves. Some, as somebody pointed out, are for the mail client (there\'s another customizing menu in Thunderbird that you should\'ve counted). I definitely don\'t need all those search fields (bookmark keywords for me). Back, Forward, and URL bar. =)</p><br><p>"Still not convinced? Don&#8217;t forget that in addition to what I have already mentioned, every toolbar in Opera is completely customizable (using drag and drop), meaning that you can take any of those fields onto any of the toolbars. Opera will also let you edit menus, keyboard commands, and mouse settings by editing plain text files."<br>You can acheive the same effect by dragging icons, and hiding toolbars. Yep, not as user-friendly. The devs are going to add it though soon. They haven\'t done it so far, because it\'s hard to do with XUL.</p><br><p>"Currently there are 99 extensions for Mozilla Firebird. The claim is that these extensions "allow Mozilla Firebird to stay small and unbloated". Compared to Internet Explorer, Mozilla Firebird is small and unbloated. However, just so we are clear, Mozilla Firebird 0.6.1 is 6.8 megabytes for Windows (9.2 megabytes for Linux, and 11 megabytes for Mac)."<br>Size doesn\'t dictate features. Opera has a lot more features than Firebird (some would consider them bloat, I don\'t =) ), but it is smaller because it is packed. If you pack Firebird into a .7zip file, it turns to 4.6 MB. Considering it\'s based on XUL (try making Opera in XUL), that\'s pretty good. Still, Opera has Firebird beat on file size. But not bloat. Bloat is purely subjective and highly volatile ("hey, isn\'t an IRC client bloat?" // "bite me!").</p><br><p>"I haven&#8217;t examined all of the extensions, and many of them look very cool, but several of them duplicate functionality which Opera has built-in, including Mouse Gestures, which Opera had long before any other web browser. There&#8217;s also Close Other Tabs, Kiosk Mode, Alternate Stylesheet Switcher, User Agent Switcher, and several others to add the same functionality you get from Opera out of the box on a much smaller download."<br>Those extensions are only one to ten kilobytes, to be fair. I like the extensions philosophy better because I don\'t use many of the features in Opera, like user stylesheets, but I know this is purely opinion.</p><br><p>"Like I said, a lot of them look cool, but many of them are either trivial, or aren&#8217;t likely to be used by many people, or have nothing to do with web browsing (such as MineSweeper)."<br>That\'s why they\'re extensions. =)</p><br><p>"As for themes, Opera has plenty of those too. In fact there are currently 177 Opera Skins available. Opera7 has a new one-click download &amp; install feature for skins as well, so you can quickly change the skin you&#8217;re in (we&#8217;ll talk about that more another day)."<br>Firebird has one click install too. Just press OK one or two times (security reasons) and magic. The true test of skinning is not how many skins there are, but how many good skins there are. Firebird also has a lot of non-documented gems. Blame it on unorganization. =) However, I do like Opera\'s themes better than Firebird\'s themes as a rule of thumb. Who knows why?</p><br><p>"3.3MB for Opera, 6+ for Firebird, 15 for Mozilla, and up to 76 for Internet Explorer... Clearly Opera has the tightest codebase."<br>Again, file size != tighter codebase.</p><br><p>"How do they do that? They have a team of coders working on it, and working together to make tight code."<br>I agree. The devs over at Mozilla are beginning to do some work on it, though.</p><br><p>"Can you get tech support from Mozilla?"<br>Oh, definitely. There\'s <em>loads</em> of documentation sites. True, not first-party support, but there are some damn good quality stuff (<a href="http://mozdev.org" rel="nofollow">mozdev.org</a>, personal sites, <a href="http://texturizer.net/firebird/)." rel="nofollow"></a><a href="http://texturizer.net/firebird/)." rel="nofollow">http://texturizer.net/firebird/).</a> The forums are really great too (just like Opera\'s, although a little bit less snappy at Firebird users =) ).</p><br><p>"Spread that cost out over a year and it is $0.08 per day or $2.43 a month to use a faster browser with a better UI. And you get 6 months of Operamail and personal email tech support."<br>Some geeks don\'t have money because they\'re minors, like me, and, since we\'re geeks, we don\'t really need personal tech support. =) But I can see where personal tech support would be nice. I really wouldn\'t mind paying, if I only had money.</p><br><p>"MOUSE GESTURES!"<br>Firebird has two different mouse gestures extensions. Take your pick. =) I do like Opera\'s UI for mouse gestures though.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814818">\
	 <div id="dsq-comment-header-19814818" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814818" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814818" href="http://hao2lian.blogspot.com/" target="_blank" rel="nofollow">hao2lian</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814818" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814818" class="dsq-comment-message"><p>"So let\'s compare the entire folder where the apps get installed."<br>Firebird uses light zip compression. Try 7zip. -&gt; 4.6 MBish. Not as good, but it sure is usable.</p><br><p>"There is dev-menu available from opera forums. User stylesheets are pretty useful too (outlines for objects, showing document structure). There is hotkey to validate page."<br>Dev-menu? If you mean dev extensions, Firebird has a bit of those. Firebird also has userContent.css. Not as good, I\'ll admit. The devs are planning to add user style sheets, though, so they\'re catching up. =) There\'s an extension that adds a button or a context menu item to validate a page. Not as fast as a hotkey, though, although I have enough hotkeys to memorize, as is. =)</p><br><p>"Opera has unbeatable tabs+sessions. I can stop my surfing anytime with one click and continue later, with one click too. No looking in history etc. Pages open as tabs whenever I want. I can\'t believe that mozilla still doesnt have some \'tabs-only\' mode. Minor change in code, major change for users."<br>Get TBE. It has everything you mentioned. What devs can\'t do, extensions can, is the motto. =) I don\'t use tab sessions, though, so all well. Firebird/Mozilla do need to add some more tab functionality (and they plan to do so), though.</p><br><p>"Opera has a Multiple Document Interface (MDI) which is different and better than just plain tabs (read more about it on Day 8 of 30 Days to becoming an Opera7 Lover)."<br>I really do not think Opera\'s MDI and Firebird\'s tabbed browsing (plus TBE) are any different. They\'re the same, and that\'s good enough for me. Unless you happen to feel the urge to cascade all your windows. =)</p><br><p>"Problem I\'m Having with both of them though is getting streaming audio to work eg Real player and Launchcast."<br>For Firebird: <a href="http://plugindoc.mozdev.org/" rel="nofollow"></a><a href="http://plugindoc.mozdev.org/" rel="nofollow">http://plugindoc.mozdev.org/</a><br>The joys of being a non-IE browser and having no plugin companies supporting you.</p><br><p>"AND you can still use Opera because it has keyboard controls for everything"<br>Yep, Firebird\'s lacking in the keyboard customizations dept. Darn XML/Javascript interface.</p><br><p>"My biggest bitch with Firebird is the incredibly slow startup on my machine"<br>Firebird and Opera starts up the same on my machine: 3-5 seconds. Win98, PIII, 433Mhz, 312 MB RAM.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814819">\
	 <div id="dsq-comment-header-19814819" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814819" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814819" href="http://hao2lian.blogspot.com/" target="_blank" rel="nofollow">hao2lian</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814819" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814819" class="dsq-comment-message"><p>"As IE (I use IE 5.01 SP2, which is best for my machine) had become impossibly slow to load"</p><br><p>IE has always been super speedy on my machine. Never crashing, always perfectly horrible.</p><br><p>"Close left and right tabs? Never saw the need. If I want to close other pages I generally do \'close all but active\'."</p><br><p>This is where a XUL interface comes into play. If you don\'t have a feature you want, it\'s not hard to change it. This is basically what makes Firebird + TBE slightly better than Opera\'s MDI.</p><br><p>"However, last I knew Opera far outmatched the options as to what Mozilla could offer for searches. With the multi-search dropdown, you can have 15 at your fingertips, and assign keyboard shortcuts to them all."</p><br><p><a href="http://mycroft.mozdev.org/" rel="nofollow"></a><a href="http://mycroft.mozdev.org/" rel="nofollow">http://mycroft.mozdev.org/</a></p><br><p>For hotkeys, you\'ll have to manually create bookmarks and assign them. I know, tedious.</p><br><p>"Mozilla is great too, but it seems like a huge investment in time just to seek out code for editing characteristics vs. opera\'s .ini file setup (usually in plain english i might add... ex. "Execute program")."</p><br><p>CSS is very English-friendly, which is basically all you do to modify the look. For prefs, there\'s this wonderful thing where you go to about:config. Magical, really, especially with the filter feature.</p><br><p>"The fact that Opera saves form info automatically, enabling users to go back a couple pages to double check something and not risk losing the text in the form (no matter how long it is), was the first feature that got me hooked (read: obsessed) with the browser."</p><br><p>Firebird does that too. In fact, Opera doesn\'t do that for me on BlogThis, which kind of surprised me for a minute. I might just be hallucinating.</p><br><p>"They can`t still playe yahoo launchcast radio"</p><br><p><a href="http://plugindoc.mozdev.org/" rel="nofollow"></a><a href="http://plugindoc.mozdev.org/" rel="nofollow">http://plugindoc.mozdev.org/</a></p><br><p>" If you are looking for generated content, Opera is your only real option."</p><br><p>Which is about 5 people. =) The only reason Mozilla doesn\'t do that yet is because CSS3 is not a Working Recommendation yet. :after and :before are quite enough for me. =)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814820">\
	 <div id="dsq-comment-header-19814820" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814820" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814820" href="http://hao2lian.blogspot.com/" target="_blank" rel="nofollow">hao2lian</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814820" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814820" class="dsq-comment-message"><p>Oh, and yes, Opera has a JavaScript console. In Opera 7.23 it is located at under the menu options for window &gt; &gt; Special &gt; JavaScript console. There is also an option to popup the console on errors (which is of limited use since so many sites have JS errors that it gets to be annoying. Regardless, the feature is there under Preferences &gt; Multimedia &gt; JavaScript options (select the button for open console on error).</p><br><p>Hmm, it seems lacking. Are there hidden buttons for stuff like Clearing, Errors Only, Messages Only, Warning Only? Is there syntax highlighting?</p><br><p>I&#8217;m talking about doing the day to day useful things that CSS can do, not the obscure stuff that is useful for &#8220;wow&#8221; factor alone.<br>Isn\'t generated content obscure and "wow" factor? I\'ve needed to use <em>any</em> of the CSS3 generated content module properties/selectors.</p><br><p>I&#8217;d be curious to hear if anyone thinks Opera is missing any portions of CSS which they would like to use on a day to day basis.<br>Opera isn\'t missing anything crucial. Neither is Gecko. They\'re both the same, to me, standards-support wise. Can\'t we all just get along? =)</p><br><p>1) Download manager doesn\'t pause over different sessions like Opera\'s does<br>Firebird does that for me, now. As long as the cache doesn\'t get overwritten, you can resume. But I use Getright, anyways.</p><br><p>4) Star Downloader doesn\'t integrate as well as I want it to<br>You haven\'t looked hard enough. =)</p><br><p><a href="http://plugindoc.mozdev.org/" rel="nofollow"></a><a href="http://plugindoc.mozdev.org/" rel="nofollow">http://plugindoc.mozdev.org/</a></p><br><p>Opera has a turn Multi Document Interface, meaning that you can tile windows, or show two together side by side or 6.<br>Repeat after me: I never will or need to use those features. I have an 800x600 screen. =)</p><br><p>Mozilla can customize searches? How many?<br>Infinity using bookmark keywords. 500-1000 using <a href="http://mycroft.mozdev.org/" rel="nofollow"></a><a href="http://mycroft.mozdev.org/" rel="nofollow">http://mycroft.mozdev.org/</a> .</p><br><p>So wait, you are admitting that you didn&#8217;t do the testing that I did, which showed that the Mozilla folks lied about showing more than Opera (again, you made it clear you were not talking about out of the box comparisons).<br>Out of box: Mozilla has more screenspace, because of the lack of Hotlist. But, again, this varies so much, you really can\'t compare.</p><br><p>Opera also has a vastly superior set of zoom options that will let you squeeze more in the page if you want, plus you can change your default zoom.<br>There\'s an extension for this. However, images can\'t zoom and I don\'t need to use it. But it is useful for visually impaired people.</p><br><p>(Opera 7.5 is designed to show much more by default).<br>Isn\'t Hotlist open by default? If so, Opera doesn\'t show more than Mozilla.</p><br><p>All the time, because I customized them. I use one or directions, one for Google, one for IMDB, one for MRQE, one for images, one for AcronymFinder, one for the Bible, one for the dictionary, one for <a href="http://Amazon.com" rel="nofollow">Amazon.com</a>, one or Opera support<br>I think I can get all those via <a href="http://mycroft.mozdev.org/" rel="nofollow"></a><a href="http://mycroft.mozdev.org/" rel="nofollow">http://mycroft.mozdev.org/</a> . But I use bookmark keywords.</p><br><p>However there is no guarantee that one won\'t conflict with another, or break between builds.<br>I\'ve never had that happen. Not many extensions do that. If you see two extensions that do the same things, then obviously, they\'re going to conflict.</p><br><p>If Firebird doesn\'t count yet, then they need to stop comparing it to Opera on their website. They can\'t have it both ways: either it is in competition with Opera, or it isn\'t. If Firebird is in competition with Opera, it loses on about every front, including several bogus claims about being better than Opera.<br>Where does the Firebird site say Opera? It used too (comparison table), but that was a boo-boo that was quickly removed.</p><br><p>So what? Is that not true about any piece of software? I find many of Mozilla&#8217;s features unnecessary and bloated. Opera is like 1/3rd of the size.<br>I find Firebird, out of the box, to be lacking features. But I like that, especially w/ extensions. =)</p><br><p>Bogus. It doesn\'t NEED extensions. (Or you give no reason for what it is missing).<br>I agree, except I need some extra tab functionality. But that\'s about it.</p><br><p>I really miss the simple \'block cookies from this page\' and \'unblock cookies from this page\' (in case I just blocked them, or in case of a standard cookie block, and then found out that the site does not work without cookies.)<br><a href="http://basic.mozillanews.org/" rel="nofollow"></a><a href="http://basic.mozillanews.org/" rel="nofollow">http://basic.mozillanews.org/</a></p><br><p>I haven\'t gotten the icon to work yet, though, but it should be neat once it\'s finished.</p><br><p>It is much more flexible with both SDI and tabs like firebird. It\'s more memory friendly too.<br>Firebird and Opera are about as fast for me. I don\'t care about the memory they use, but how fast I perceive it, whether it be hallucinated or not. =)</p><br><p>Opera is at version 7, firebird is at 0.7.<br>That\'s actually not arguable since Opera uses a different versioning system than Firebird (more liberal).</p><br><p>You say Firebird is faster, so I\'m supposed to believe you? Unless it is with JavaScript-laden pages, I\'d have to see some independent numbers first.<br>Both the same for me.</p><br><p>I can open things up and modify the code in Firebird. I don\'t have to figure out which .dll I can modify (and which windows API that will conflict with). That was my biggest complaint about Mozilla in its current state.<br>Yep, I like open-source better. You can build your own builds, look at the code, develop extensions easily, Bugzilla (bug tracking system), Tinderbox (look at the checkins), talk/complain with the devs freely about the code, CVS, etc.</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814821">\
	 <div id="dsq-comment-header-19814821" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814821" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814821">Kim</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814821" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814821" class="dsq-comment-message"><p>"A note to remember: Opera is at version 7, firebird is at 0.7".</p><br><p>You can\'t compare versions that way. Firebird is basically just a window and a toolbar with the browser engine that was made for Mozilla, based on code donated and supported by Netscape!</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814822">\
	 <div id="dsq-comment-header-19814822" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814822" class="dsq-comment-cite">\
	 <span id="dsq-author-user-19814822">ShadowKnight</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814822" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814822" class="dsq-comment-message"><p>Yup, Opera can do that, and Opera makes it much easier to turn popups on and off. Just press F12 (which also gets you to a lot of other options as well).</p><br><p>:: It\'s much easier to turn popup blocking on and off with Opera - but then again, that\'s because Opera doesn\'t give you the option of telling it which sites that you want popups to open on. Firefox does. Enter the URL of the site you want to whitelist, and voila! No turning popup blocking on and off constantly when you surf from site to site. ::</p><br><p>Yeah, Opera can do that, and could do it long before anyone else. Opera also makes it easy to make sure that all of your pages show up in a single window.</p><br><p>:: While Opera offers tabbed browsing, Firefox offers tabbed browsing AND Tabbrowser Extensions. For an extra 300kB (less than a minute to download even on dial-up, folks), Firefox suddenly gains the ability to do all sorts of neat tricks with its tabs - automatic DDE support, open in new window / tab by click type, progress meters in tabs, resizing tabs, automatic focus shift, a customizable right-click context menu - you name it. Firefox\'s functions to save and recall tabgroups is less messy than Opera\'s as well. Opera doesn\'t even come close. ::</p><br><p>Opera beats every other browser in the world on integrated searching. Weve got Google, <a href="http://Amazon.com" rel="nofollow">Amazon.com</a>, Google Groups, eBay, Lycos, AllTheWeb, <a href="http://Download.com" rel="nofollow">Download.com</a>, SearchBoss, Images, Videos, MP3s, News, and Opera Support... and you can add your own if you want to.</p><br><p>:: Same here with Firefox - at least the part about users adding in their own searches. Extensions and plugins are being developed by fans that enable Firefox to perform a wide variety of searches from its main window as well. They\'re not much right now, but heck, Opera\'s been around a whole lot longer than Firefox has. Give it time. ;) ::</p><br><p>Is this true? Well again, if they are comparing against Internet Explorer, then yes. But they are comparing themselves against any other browser and I think they are wrong. But Ill let you be the judge. Here are two screenshots, one of Mozilla and one of Opera. Both are viewing the same page. Both are 640 by 480 pixels with the minimum number of toolbars visible, with the default settings for font sizes, etc.</p><br><p>:: Now that\'s just not right. Generally speaking, I\'m an average Joe Schmoe. I don\'t disable every visual element and shortcut in my browser window when I surf, and I assume no ordinary person does either. I\'ll want my toolbars, my menus, my links, and perhaps a few shortcuts here and there. I\'ll want to see tabs when browsing. And, in general day-to-day usage, Opera is beat in the display size department. Among others, there\'s that damnable ad in Opera that won\'t go away unless you pay, which hogs valuable screen space even if I set the toolbar size to as small as possible. Technically, Opera and Firefox are equal in the display size department, as you\'ve pointed out - but in practice, that\'s simply not the case. ::</p><br><p>If I have counted correctly (there are so many I may have lost count!) there are 18 search options and 11 general options on the first screen, and 48 options on the second screen. Opera actually has another panel of options, large icons, which I didnt even bother to show because they are mostly the same as the small ones... However, this shows clearly that Opera gives you more options than Mozilla.</p><br><p>:: Score a point for Opera here. This isn\'t a big issue for me, though, seeing as how I\'d rather use the keyboard shortcuts rather than the toolbar at times. To be fair, a large number of the toolbar options in Opera are related to its mail client (which Firefox does not have by default), so I\'d say it\'s a rather moot point. ::</p><br><p>Opera 7.2 is 3.3 megabytes. That is less than half the size of Mozilla Firebird  and Opera also includes a top-notch mail program. (If you want a mail/news program from Mozilla, prepare for another 8.9 megabytes for Windows, 9.2 for Linux, and 10.6 for Mac.)</p><br><p>:: Point 2 for Opera. ^^ Still, frankly speaking - download size isn\'t much of a concern to be, seeing as how it\'s not likely to affect my daily browsing once I get the program downloaded. If Firefox suffers from slower speed due to its file size, I guess I\'d sit up and take notice - but as it is, that\'s hardly the case, and the extra megabytes is well worth the extra functionality I get in Firefox. ::</p><br><p>So why Firefox over Opera? Simple, really - Firefox is superior in functionality in almost every aspect, and I can\'t say I\'m too much into the "let\'s-demand-webmasters-to-comply-to-our-browser-instead-of-the-other-way-round" way of thinking. There have been sites which work incorrectly in Opera but not in Firefox (Yahoo! Mail, for one), but I\'ve yet to see a site that works in Opera but not in Firefox. Extensions are cool - there\'s Adblock, for one. It doesn\'t get any cooler than being able to automatically nuke any graphic element on the page, Flash ads included. ;)</p></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-19814823">\
	 <div id="dsq-comment-header-19814823" class="dsq-comment-header">\
	 <cite id="dsq-cite-19814823" class="dsq-comment-cite">\
	 <a id="dsq-author-user-19814823" href="http://tntluoma.com/" target="_blank" rel="nofollow">TjL</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-19814823" class="dsq-comment-body">\
	 <div id="dsq-comment-message-19814823" class="dsq-comment-message"><p>Ok, before I close comments here (we\'re not covering any new ground), I\'ll say this:</p><br><p>1) Opera 7.5 is going to have a much smaller ad bar.</p><br><p>2) Let\'s not kid ourselves, if websites coded to the standards, it would be easier for everyone</p><br><p>3) As long as Mozilla group keeps comparing themselves to Opera\'s standard setup, you can\'t talk about extensions as being a feature.</p><br><p>4) Opera\'s options even without the mail ones, are still more than Firefox\'s -- and the claim was that Firefox is more customizable.  So you want us to ignore the mail customizations when Opera includes a mail client, but you want to include Extensions for Firefox?  I don\'t think so.</p><br><p>5) Firefox claims to have more space for the content of the window.  Well, are you talking about default configuration?  If so that means no Extensions here, we\'re going to compare apples to apples.  If we are going to let someone configure their client, well, Opera will let them put everything they want on one toolbar (without needing an Extension, or having to learn XUL).  And if they want to maximize space, F11 is always there.</p><br><p>Now, if you want to say that this is a ridiculous claim that doesn\'t have anything to do with reality, I\'ll agree with you, but Firefox is making claims that aren\'t true -- or only true if you do things the want they want you to do it (i.e. "When we talk about Feature A we are talking about default configurations, but when we talk about Feature B we want to include Extensions."  That\'s not legit.</p><br><p>Extensions may be cool, but they may also break and conflict with one another.</p><br><p>Oh, and any site that relies on generated content will work in Opera and nore Firefox.</p><br><p>6) If you want to use the keyboard shortcuts rather than the toolbar, you\'re in luck.  Opera will let you change the keyboard commands through the UI, and will let you define your own for search engines as well.</p><br><p>Ok, well, we\'ve had 6 months to each say our peace, so comments will be closed today.  Thanks to all who participated.</p></div>\
	 </div>\
	 </li>\
	 </ul>\
';

(function() {
	
	





Dsq.Debug.profile(function() {
	if(Dsq.jsonData.request.page == 1 && Dsq.jsonData.request.is_initial_load) {
		Dsq.container.innerHTML = Dsq.Templates.header() + Dsq.container.innerHTML + Dsq.Templates.footer();
	}
	Dsq.$(Dsq.curPageId).innerHTML = Dsq.$(Dsq.curPageId).innerHTML.replace(Dsq.COMMENTS_RE, Dsq.CommentsHandler);
}); // Dsq.Debug.Profile

// HACK: Resetting cache because we're done with.
Dsq.Utils.gebiFromElementCollectionCache = null;


	
	
	var dsq_styleEl = document.getElementById(disqus_container_id);
	var dsq_anchorEl = document.getElementsByTagName('a')[0];
	
	Dsq.Thread.fc = Dsq.Utils.getStyle(dsq_styleEl, 'color');
	if(dsq_anchorEl) { Dsq.Thread.ac = Dsq.Utils.getStyle(dsq_anchorEl, 'color'); }
	Dsq.Thread.ff = Dsq.Utils.getStyle(dsq_styleEl, (Dsq.Utils.ie || window.opera ? 'fontFamily' : 'font-family'));
	// For Safari / Opera: strip quotes.
	Dsq.Thread.ff = Dsq.Thread.ff.replace(/['"]/g, '');
	Dsq.Thread.fc = encodeURIComponent(Dsq.Thread.fc);
	Dsq.Thread.ac = encodeURIComponent(Dsq.Thread.ac);
	Dsq.Thread.ff = encodeURIComponent(Dsq.Thread.ff);

	
	
	
	if(Dsq.$(Dsq.Templates.addPostContainer)) {
		// TODO: Check to see if theme uses postmessage.
		if (window.disqus_use_postmessage) {
			Dsq.frames['reply_0'] = new Dsq.ReplyFrame(Dsq.$(Dsq.Templates.textareaContainer));
			Dsq.frames['reply_0'].init(function() {
				// Use fallback iframe
				Dsq.$(Dsq.Templates.addPostContainer).innerHTML = '';
				var theme = (typeof disqus_frame_theme == 'undefined') ? 'default' : disqus_frame_theme;
				Dsq.Iframes.showReplyIframeInContainer(Dsq.$(Dsq.Templates.addPostContainer), null, {theme: theme});
				// if(Dsq.Utils.ie) { Dsq.Utils.fixIframesIE(); }
			});
		} else {
			// DEPRECATED
			Dsq.Iframes.showReplyIframeInContainer(Dsq.$('dsq-post-add'));
		}
	}

	
	

	
	if(document.location.hash != '') {
		document.location.hash = document.location.hash.substring(1);
	}

	Dsq.Popup.showCookieMsgs();

	
	if(document.location.search != '' && location.hash != '#disqus_thread') {
		var reply_id = Dsq.Utils.getRequestParams().dsq;
		if(reply_id) { document.location.hash = 'comment-' + reply_id; }
	}

	
	if((typeof OB_Script != 'undefined') && (typeof OB_versionNum != 'undefined')) {
		if(navigator.userAgent.indexOf("Firefox") != -1) {
			if(window.frames['dsq-reply-frame']) {
				window.frames['dsq-reply-frame'].location = Dsq.Urls.REPLY + (new Date()).getTime() + '&f=tntluoma&t=opera_vs_mozilla&to_redirect=' + encodeURIComponent(window.location) + '&ifrs=' + encodeURIComponent(disqus_iframe_css);
			}
		}
	}

	if (Dsq.jsonData.integration.theme == 4) {
		if (Dsq.jsonData.realtime_enabled) {
			Dsq.Realtime.initialize();
		}
	}

	



	window.ExecuteWhen = (function () {
	var obj = {}
	
	// Private
	var running = false;
	var timer = null;
	var pending = [];
	var startTimer = function() {
		running = true;
		timer = setInterval(obj.heartBeat, 100);
	};
	var stopTimer = function() {
		running = false;
		clearInterval(timer);
	};
	
	// Public
	obj.add = function (condition, code) {
		pending.push([condition,code]);
		this.heartBeat(); //!
		if (!running) {
			startTimer();
		}
	};
	obj.heartBeat = function() {
		if (!pending.length) {
			stopTimer();
		}
		var newPending = [];
		for (var i=0; i<pending.length; i++) {
			var cond = pending[i][0];
			var code = pending[i][1];
			// FIXME: if cond or code throw an error, they never get removed from pending
			if (cond()){
				code();
			}
			else {
				newPending.push([cond, code]);
			}
		}
		pending = newPending;
	};
	return obj;
})();

// also used in embed_thread.js:
window.fbIsReady = function () {return window.FB && FB.init;};
// NOTE: This script gets executed again without threadEl
//       set when we are loaded again as the fbc_receiver.
//       In this case, we don't need the hidden container.

if(!window.FB || !FB.init) {
	if(window.Dsq && Dsq.container) {
		// container is not present when init.js is loaded from an xd-receiver iframe; in this case,
		// we don't need the FB_HiddenContainer anyway.
		var fbDiv = document.createElement('div');
		fbDiv.id = "FB_HiddenContainer";	// Required or else FeatureLoader will execute a document.write.
		fbDiv.style.position = 'absolute';	// This is intentionally not setting display to none as this breaks
		fbDiv.style.top = '-10000px';		// Flash in Safari.
		fbDiv.style.left = '-10000px';
		fbDiv.style.width = '0px';
		fbDiv.style.height = '0px';
		Dsq.container.appendChild(fbDiv);
	}
	var fbJS = document.createElement('script');
	fbJS.type = "text/javascript";
	fbJS.src = "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php";
	document.getElementsByTagName('head')[0].appendChild(fbJS);

	ExecuteWhen.add(window.fbIsReady,
		function () {
			// HACK: This is a workaround FBC's single domain limitation by
			//		 allowing sites to create multiple forums with different
			//		 Facebook API keys.  This must be used in conjunction with
			//		 disqus_facebook_forum (see authenticateFacebook).
			var facebook_api_key = 'e190d0ebafc4c90349f9c58ba9b3b298';
			if (typeof disqus_facebook_api_key != 'undefined') {
				facebook_api_key = disqus_facebook_api_key;
			}

			FB.init(facebook_api_key, window.facebookXdReceiverPath || null,
				{fetchSignedPublicSessionData: true});
		});
}


	


if(typeof(disqus_callback) == 'function') {
	var callback_params = Dsq.Utils.getRequestParams()['dsq_cbp'] || null;

	// We don't care about any errors in third-party code
	try {
		disqus_callback(callback_params);
	} catch (x) {
		if (typeof(console) != 'undefined' && typeof(console.log) == 'function') {
			// But it would be nice to let developers know about them
			console.log(x);
		}
		// pass
	}

	// HACK: We don't know if the callback wraps our container, which may
	// possibly result in a new DOM element.
	Dsq.container = document.getElementById('dsq-content');
}

// Global event handler for narcissus.
if (Dsq.jsonData.integration.theme == 4) {
	var g = Dsq.Utils.ie ? document : window;
	Dsq.Utils.addEventListener(g, 'keydown', function(event) {
		// Handle "enter" key on input for post box.
		if ((event.keyCode || event.which) == 13) {
			var target = Dsq.Utils.ie ? event.srcElement : event.target;
			// For Safari bug, detect text node.
			if (target.nodeType == 3) {
				target = target.parentNode;
			}

			if (target.nodeName == 'INPUT' &&
				target.parentNode.className == 'dsq-input-wrapper') {
				var postId = Dsq.Utils.extractId(target);
				Dsq.Templates.postComment(postId, this, false);
			}
		}
	});
}

})();




