




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": {"834e95844e0a819fa297050a7ca0a536": {"username": "Andrew", "tumblr": "", "display_name": "Andrew", "url": "http://disqus.com/guest/834e95844e0a819fa297050a7ca0a536/", "registered": false, "linkedin": "", "blog": "http://geekyweekly.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "93ebbccd82d5db97bafe837a3c14fcac": {"username": "Eric", "tumblr": "", "display_name": "Eric", "url": "http://disqus.com/guest/93ebbccd82d5db97bafe837a3c14fcac/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "a582f47784841739bea9a048e508eb10": {"username": "E in MD", "tumblr": "", "display_name": "E in MD", "url": "http://disqus.com/guest/a582f47784841739bea9a048e508eb10/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "2250a0a3c113bde99c1bca24210d3cc0": {"username": "NCN", "tumblr": "", "display_name": "NCN", "url": "http://disqus.com/guest/2250a0a3c113bde99c1bca24210d3cc0/", "registered": false, "linkedin": "", "blog": "http://www.ncnblog.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c9c9145f7ed7f65e7614c829409f317c": {"username": "Craig", "tumblr": "", "display_name": "Craig", "url": "http://disqus.com/guest/c9c9145f7ed7f65e7614c829409f317c/", "registered": false, "linkedin": "", "blog": "http://www.budgetpulse.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/90/7233/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "73f483676e71ad75d007f4575cd06e69": {"username": "Squawkfox", "tumblr": "", "display_name": "Squawkfox", "url": "http://disqus.com/guest/73f483676e71ad75d007f4575cd06e69/", "registered": false, "linkedin": "", "blog": "http://www.squawkfox.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "fd8c1eea82cacf19fbf510458b154685": {"username": "via Facebook", "tumblr": "", "display_name": "via Facebook", "url": "http://disqus.com/guest/fd8c1eea82cacf19fbf510458b154685/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "bbd47e639c9d015bf5a8d29ae775741f": {"username": "Steve", "tumblr": "", "display_name": "Steve", "url": "http://disqus.com/guest/bbd47e639c9d015bf5a8d29ae775741f/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "990346fe3374fabcde3d60dbbe52da63": {"username": "tom", "tumblr": "", "display_name": "tom", "url": "http://disqus.com/guest/990346fe3374fabcde3d60dbbe52da63/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": true, "name": "Consumerism Commentary", "streaming_realtime": false, "url": "consumerismcommentary", "allow_anon_post": true, "reactions_enabled": false, "reply_position": 1, "show_avatar": true, "allow_anon_votes": true, "disqus_auth_disabled": false}, "realtime_enabled": false, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 4, "forum": "consumerismcommentary", "is_initial_load": true, "is_authenticated": false, "timestamp": "2009-11-29_00:22:38", "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": null}, "realtime_paused": false, "posts": {"21319314": {"up_voted": false, "ip": "", "has_replies": false, "message": "The Thank You Network used to be much better.  Points and cents used to be one-to-one, they used to have a fixed price flight option - 20,000 points for a ticket up to a $400 value.  <br><br>They got rid of the fixed price flight option, and you have to spend point on a $100-$500 gift card in order to get the one-to-one relationship.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_09:01:17", "killed": false, "user_key": "990346fe3374fabcde3d60dbbe52da63", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 09:01 AM", "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}, "21319315": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the 29.99% interest rate says it all there - OUCH!", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_11:36:59", "killed": false, "user_key": "73f483676e71ad75d007f4575cd06e69", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 11:36 AM", "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}, "21319316": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Responsible\" categories is such a joke. They don't even include the standard bonus categories, which actually would be responsible - gas stations, grocery stores, and drug stores. This is nothing but a gimmick. The problem is that responsible behavior has its own reward (in the form of less debt, less interest, less spending on frivolous music &amp; restaurant purchases), and as such, it is unprofitable for the cc companies. So they can't really afford to offer a product that truly rewards such behavior.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_11:42:59", "killed": false, "user_key": "bbd47e639c9d015bf5a8d29ae775741f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 11:42 AM", "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}, "21319317": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree with Steve, I just signed up for an AMEX Blue Cash card because Citi completely nerfed their reward system. No rewards on gas and groceries anymore.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_13:35:19", "killed": false, "user_key": "834e95844e0a819fa297050a7ca0a536", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 01:35 PM", "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}, "21319318": {"up_voted": false, "ip": "", "has_replies": false, "message": "Sounds like a card I should get belonging to Citibank and being good with my credit card.  Like you mention the points are basically meaningless because their value is so low.  I agree that they should reward by paying in full, or the points should be worth more.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_15:57:42", "killed": false, "user_key": "c9c9145f7ed7f65e7614c829409f317c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 03:57 PM", "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}, "21319319": {"up_voted": false, "ip": "", "has_replies": false, "message": "Honest to goodness, this might be the silliest thing I've heard of in my life.  Seriously, are we at a point, in our society, where we need to base our purchases on whether we will or will not be \"rewarded\" by a credit card company.  And, who decides which categories are \"good\" and which are \"bad\"?  They do?  Ridiculous.  Live on a budget, but what you need, have a little fun, pay your bills, save for the future, and work hard.  Ignore this fluff.<br>Luddites rule! :)", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_20:11:53", "killed": false, "user_key": "2250a0a3c113bde99c1bca24210d3cc0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 08:11 PM", "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}, "21319320": {"up_voted": false, "ip": "", "has_replies": false, "message": "Leave it to NCN to suck the joy out of CCs! :P<br><br>But the devaluation of TY points really puts this \"initiative\" to waste.  Pass.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-10_07:23:19", "killed": false, "user_key": "93ebbccd82d5db97bafe837a3c14fcac", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/10/2009 07:23 AM", "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}, "21319321": {"up_voted": false, "ip": "", "has_replies": false, "message": "These comments are right. TYN only gives 100% as retail gift cards. But the cashback citation, while correct, is too low since if it the rebate is applied to the card's monthly bill it pays $175 for 25,000 points (3.5%), a good complement to 5% grocery-pharma-gas cards and 2% across-the-board cards, for anyone with significant restaurant, cinema, book, music expenses.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-10_15:17:07", "killed": false, "user_key": "a582f47784841739bea9a048e508eb10", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/10/2009 03:17 PM", "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}, "21319322": {"up_voted": false, "ip": "", "has_replies": false, "message": "<a href=\"http://www.facebook.com/profile.php?id=24403441\" rel=\"nofollow\">&lt;img src=\"http://profile.ak.facebook.com/v222/1339/71/q24403441_275.jpg\" alt=\"\" class=\"feed_comment_pic\"&gt;&lt;/img&gt;</a>&lt;div class=\"wallcontent\" id=\"comment_box_81578394304_81578394304_1017541\"&gt;&lt;/div&gt;&lt;div class=\"wallfrom\"&gt;&lt;a onclick='remove_feed_comment_dialog(\"81578394304\", \"81578394304\", 1017541, \"564671965\", 2, 14, \"\", \"437f7bbcd7e24ebf\"); return false;' class=\"x_to_hide\" title=\"Click here to remove this comment\"&gt;&nbsp;</a>&lt;span class=\"wallmeta\"&gt;&lt;/span&gt;<a href=\"http://www.facebook.com/profile.php?id=24403441\" rel=\"nofollow\">Stephanie Collins</a>&lt;span class=\"wallmeta\"&gt; at 7:06pm March 9&lt;/span&gt;&lt;/div&gt;&lt;div class=\"walltext\"&gt;&lt;/div&gt;&lt;div id=\"text_expose_id_49b6d120e8ba36852984029\" class=\"wall_actual_text\"&gt;How are those &quot;responsible&quot; categories? I can somewhat see the argument for books, but... I just don&#039;t get it.<br></br><br>Although, I guess it&#039;s not a bad credit card for young people. It&#039;s just sort of silly.</br>&lt;/div&gt;&lt;div class=\"wallpost comment_error_target\" id=\"feed_comments_error_81578394304_81578394304\"&gt;&lt;/div&gt;&lt;form method=\"post\" action=\"/minifeed.php\" name=\"add_comment_81578394304_81578394304\" id=\"add_comment_81578394304_81578394304\"&gt;&lt;input type=\"hidden\" name=\"charset_test\" value=\"&euro;,&acute;,\u20ac,\u00b4,\u6c34,\u0414,\u0404\"&gt;&lt;/input&gt;&lt;input type=\"hidden\" id=\"post_form_id\" name=\"post_form_id\" value=\"ff168ca9c50cdbcd6f2a94981ba81a3a\"&gt;&lt;div id=\"comments_add_81578394304_81578394304\" class=\"wallpost comment_add_row\"&gt;&lt;/div&gt;&lt;div class=\"comments_add_box\"&gt;&lt;/div&gt;&lt;div class=\"wallcommentbox clearfix\" id=\"add_comment_wrapper_81578394304_81578394304\"&gt;&lt;textarea cols=\"30\" rows=\"2\" onfocus='feed_comment_show_add_button(\"81578394304\", \"81578394304\", 2);if(!this._has_control){new TextAreaControl(this).setMaxLength(1000).setPlaceholderText(this.value).setAutogrow(true).onfocus();this._has_control=true}' title=\"Write a comment...\" style=\"overflow:hidden;\" class=\"DOMControl_placeholder\" id=\"add_comment_text_81578394304_81578394304\" name=\"add_comment_text_81578394304_81578394304\"&gt;Write a comment...&lt;/textarea&gt;&lt;/div&gt;&lt;div class=\"quote_nub\"&gt;&lt;/div&gt;&lt;div class=\"inline_comment_buttons\"&gt;&lt;/div&gt;&lt;/input&gt;&lt;input type=\"submit\" class=\"inputsubmit inputsubmit\" onclick='feedcomment_submit(\"81578394304\", \"81578394304\", 2, \"564671965\", 14, \"\", \"\", \"437f7bbcd7e24ebf\", \"\"); return false;' id=\"submit_comment_81578394304_81578394304\" name=\"submit_comment_81578394304_81578394304\" value=\"Comment\"&gt;&lt;/input&gt;&lt;/form&gt;&lt;div class=\"UITwoColumnLayout_NarrowContent\" style=\"width:200px\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Container clearfix\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Box\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Corner UIRoundedBox_TL\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Corner UIRoundedBox_TR\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Corner UIRoundedBox_BL\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Corner UIRoundedBox_BR\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Side UIRoundedBox_LS\"&gt;&lt;/div&gt;&lt;div class=\"UIRoundedBox_Side UIRoundedBox_RS\"&gt;&lt;/div&gt;&lt;div class=\"notes_side_column clearfix UIOneOff_Container\"&gt;&lt;script&gt;var _ignoreList = {};&lt;/script&gt;&lt;/div&gt;&lt;div id=\"tag_this_note\" class=\"set\"&gt;&lt;h2&gt;Tag people in this note&lt;/h2&gt;&lt;/div&gt;&lt;div class=\"set_filters\"&gt;&lt;input type=\"hidden\" id=\"num_tags\" name=\"num_tags\" value=\"0\"&gt;&lt;/input&gt;&lt;input type=\"hidden\" id=\"num_tags_max\" name=\"num_tags_max\" value=\"30\"&gt;&lt;/input&gt;&lt;input type=\"hidden\" id=\"note_tagger_label_ok\" name=\"note_tagger_label_ok\" value=\"Type any name\"&gt;&lt;/input&gt;&lt;input type=\"hidden\" id=\"note_tagger_label_full\" name=\"note_tagger_label_full\" value=\"Tag limit reached\"&gt;&lt;label for=\"note_tagger\" id=\"label_note_tagger\"&gt;Type any name&lt;/label&gt;&lt;/input&gt;&lt;/div&gt;&lt;div id=\"tag_search_box\"&gt;&lt;input value=\"\" class=\"inputtext typeahead_placeholder\" maxlength=\"100\" size=\"25\" autocomplete=\"off\" type=\"input\" onfocus='var typeahead_source_instance1 = new friend_source(\"564671965-1236695520-2&amp;u=564671965\");typeahead_source_instance1.text_noinput=&squot;&squot;;new typeaheadpro(this, typeahead_source_instance1,{onselect:editnote_typeahead_onselect,onsubmit:editnote_typeahead_onsubmit});this.onfocus();'&gt;&lt;/input&gt;&lt;/div&gt;&lt;script&gt;&lt;/script&gt;&lt;div id=\"in_this_note\" class=\"set\"&gt;&lt;h2&gt;In this note&lt;/h2&gt;&lt;/div&gt;&lt;div class=\"set_filters\"&gt;&lt;/div&gt;&lt;div id=\"note_tags\"&gt;&lt;/div&gt;&lt;div class=\"no_tags\"&gt;No one.&lt;/div&gt;&lt;div class=\"UIWashFrame_SidebarAds\"&gt;&lt;/div&gt;&lt;div id=\"sidebar_ads\"&gt;&lt;/div&gt;&lt;div class=\"adcolumn_wrapper\"&gt;&lt;/div&gt;&lt;div class=\"adcolumn\"&gt;&lt;/div&gt;&lt;div class=\"adcolumn_header\" id=\"adcolumn_advertise\"&gt;<a href=\"http://www.facebook.com/advertising/?src=advf2\" rel=\"nofollow\">Advertise</a>&lt;/div&gt;&lt;div id=\"ssponsor\" class=\"sponsors\"&gt;&lt;/div&gt;&lt;div class=\"admarket_ad\" id=\"adspace_ad_6002280705593\"&gt;<a href=\"http://www.facebook.com/ac.php?i=6002280705593&amp;meta=AAAAAQAQIXxkUYgVca2o_0jHLYGNkQAAAs-o2i-xo3qDTNnFo3Np48BMrS5n1lJNiGLDUDkxPbTZyjA6WjqmVf37nTN-NPA4xQsx_QEBOTicPttMnJNXfy8FAaVEfrdnEZyMMT5hP6V1PbGv5TzbOedo8gkQPDQRATyWMn0X6S0hVLRp-m-oOmypZuztsWxFGJHfSSAoZKmeDEhx5kR56Fjyv26mfNj1gUbCwe6K6H38W6SQgLEKWFfwW8cDqt3Fz0xhelMfW0hmqIqBszzqKkKbsQpOKRtoyznRPB05jFFYfqtmtg-X9yr1Es9FGmEJmor_RTDubEWfd4wGYIQskZlcMECqTl4NDXVsVhbf6aozInYv4GzU5lVVBbT00oNjR0JjVKPm5UZhcHL0eDPyULh1_JbNfyfvnobi4X6H2gz4ycMmEOKr-21it4u-udh9B-OxEU5zvKIwfDIkboMJDqd6t99DYmfIUPp4fXOBrOnNaOgBNtSNfzTS0IN-5ou9gc-NTruEmnEHkgtLDd8TAhhp1pWInEiLpYBijAuJm2KeaDFt234iegEg8LTx-iFMBWSqtZBBkdcSmzmuJBGbY3omNv6y5ai8fcnQTLBxelsOCEyduk68bSsOFgWvcA9_aTBx7VxZc0RZcppYisujglY4eH1zgazpzWjuhhonlkHxEHnIXExl-3te_zfAwMylVaJaC_Gz2PxcF1ZyHfVUTLoYd33u4TjdnYIaUERYBBm5HOQI1DvusYeirbRGOuD-W78LJnq6IwcUHF-x1wlgu97zsDpDRxzcYpGFUt9nl90IEIKo8CtuDYPdkZ0R23I1SsqLFcFKf18lr-3MJX5jzxAacS-B653vrRQgvIqvV-TI8D8acp2-zvisUpkKeTfyE8zypJdgzM78BTwi6hxsaa5dQidikGW1mWzqYTp2eEI3BIa3eTK_vJZg2SuhsCufrAP2w5tkpII4Q49mKFcAFawPKrU4WQbHygs%2C\" class=\"ad_story ad_clickable\" target=\"_blank\" rel=\"nofollow\"></a>&lt;/div&gt;&lt;div class=\"social_ad_advert\"&gt;&lt;h2&gt;WordPress Autoblog&lt;/h2&gt;&lt;/div&gt;&lt;div class=\"social_ad_image\"&gt;&lt;img src=\"http://creative.ak.facebook.com/ads3/flyers/127/2/6002280704793_1_bfd65fbc.jpg\" alt=\"\"&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=\"social_ad_advert_text\"&gt;Build blog content automatically using any RSS or Atom feed.&lt;/div&gt;&lt;div class=\"below_social_ad clearfix\"&gt;&lt;/div&gt;&lt;div class=\"ads_feedback\"&gt;<a href=\"#\" class=\"thumbs_up\" title=\"Like this ad\" rel=\"nofollow\">&nbsp;</a><a href=\"#\" class=\"thumbs_dn\" title=\"Dislike this ad\" rel=\"nofollow\">&nbsp;</a><a href=\"#\" class=\"next_ad\" title=\"Next Ad\" rel=\"nofollow\">&nbsp;</a>&lt;/div&gt;&lt;!-- ami 6002280705593 --&gt;&lt;div class=\"banner_ad\"&gt;&lt;iframe src=\"http://ads.ak.facebook.com/ads/creative/msn/us-120other.html\" frameborder=\"0\" height=\"600px\" width=\"160px\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;!-- ami 6002231212952 --&gt;<a href=\"http://www.facebook.com/ads/adboard/\" class=\"more_ads\" id=\"adcolumn_more_ads\" rel=\"nofollow\">More Ads</a>&lt;div id=\"pagefooter\"&gt;&lt;/div&gt;&lt;div class=\"pagefooter_topborder clearfix\"&gt;&lt;/div&gt;&lt;div class=\"copyright_and_location clearfix\"&gt;&lt;/div&gt;&lt;div class=\"copyright\" id=\"pagefooter_copyright\"&gt;&lt;span title=\"PHP\"&gt;Facebook &lt;/span&gt;&lt;span id=\"rtime\" title=\"321\"&gt;&copy;&lt;/span&gt; &lt;span title=\"10.17.19.109\"&gt;20&lt;/span&gt;&lt;span title=\"22481080\"&gt;09&lt;/span&gt;&lt;/div&gt;&lt;div id=\"locale_footer_selector\" class=\"locale_footer_selector\"&gt;&lt;/div&gt;&lt;div class=\"dropdown_menu hidden_elem \" id=\"locale_footer_selector_menu\"&gt;&lt;/div&gt;&lt;div class=\"dropdown_menu_header_shadow\"&gt;&lt;/div&gt;&lt;div class=\"menu_content\"&gt;&lt;a href=\"#\" onclick=\"return false;\"&gt;English (US)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"es_LA\"); return false;'&gt;Espa\u00f1ol</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"fr_FR\"); return false;'&gt;Fran\u00e7ais</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"de_DE\"); return false;'&gt;Deutsch</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ja_JP\"); return false;'&gt;\u65e5\u672c\u8a9e</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"af_ZA\"); return false;'&gt;Afrikaans</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ar_AR\"); return false;'&gt;\u0627\u0644\u0639\u0631\u0628\u064a\u0629</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"bg_BG\"); return false;'&gt;\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ca_ES\"); return false;'&gt;Catal\u00e0</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"cs_CZ\"); return false;'&gt;\u010ce\u0161tina</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"cy_GB\"); return false;'&gt;Cymraeg</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"da_DK\"); return false;'&gt;Dansk</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"el_GR\"); return false;'&gt;\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"en_GB\"); return false;'&gt;English (UK)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"en_PI\"); return false;'&gt;English (Pirate) - BETA</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"es_ES\"); return false;'&gt;Espa\u00f1ol (Espa\u00f1a)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"eu_ES\"); return false;'&gt;Euskara - BETA</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"fi_FI\"); return false;'&gt;Suomi</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"gl_ES\"); return false;'&gt;Galego - BETA</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"he_IL\"); return false;'&gt;\u05e2\u05d1\u05e8\u05d9\u05ea</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"hr_HR\"); return false;'&gt;Hrvatski</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"hu_HU\"); return false;'&gt;Magyar</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"id_ID\"); return false;'&gt;Bahasa Indonesia</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"it_IT\"); return false;'&gt;Italiano</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ko_KR\"); return false;'&gt;\ud55c\uad6d\uc5b4</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"lt_LT\"); return false;'&gt;Lietuvi\u0173</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ms_MY\"); return false;'&gt;Bahasa Melayu</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"nb_NO\"); return false;'&gt;Norsk (bokm\u00e5l)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"nl_NL\"); return false;'&gt;Nederlands</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"nn_NO\"); return false;'&gt;Norsk (nynorsk) - BETA</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"pl_PL\"); return false;'&gt;Polski</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"pt_BR\"); return false;'&gt;Portugu\u00eas (Brasil)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"pt_PT\"); return false;'&gt;Portugu\u00eas (Portugal)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ro_RO\"); return false;'&gt;Rom\u00e2n\u0103</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"ru_RU\"); return false;'&gt;\u0420\u0443\u0441\u0441\u043a\u0438\u0439</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"sk_SK\"); return false;'&gt;Sloven\u010dina</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"sl_SI\"); return false;'&gt;Sloven\u0161\u010dina</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"sr_RS\"); return false;'&gt;\u0421\u0440\u043f\u0441\u043a\u0438</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"sv_SE\"); return false;'&gt;Svenska</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"th_TH\"); return false;'&gt;\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"tl_PH\"); return false;'&gt;Filipino</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"tr_TR\"); return false;'&gt;T\u00fcrk\u00e7e</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"vi_VN\"); return false;'&gt;Ti\u1ebfng Vi\u1ec7t</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"zh_CN\"); return false;'&gt;\u4e2d\u6587(\u7b80\u4f53)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"zh_HK\"); return false;'&gt;\u4e2d\u6587(\u9999\u6e2f)</a>&lt;a href=\"#\" onclick='intl_set_locale(\"\", \"FOOTER\", \"zh_TW\"); return false;'&gt;\u4e2d\u6587(\u53f0\u7063)</a>&lt;/div&gt;&lt;div class=\"dropdown_head  double_arrow\"&gt;<a href=\"#\" class=\"dropdown_link\" id=\"locale_footer_selector_hitarea\" rel=\"nofollow\">English (US)&nbsp;&lt;img src=\"http://static.ak.fbcdn.net/images/spacer.gif?8:11\" alt=\"language selector\" style=\"height:8px;width:5px;\"&gt;&lt;/img&gt;</a>&lt;/div&gt;&lt;div id=\"pagefooter_links\"&gt;&lt;ul id=\"pagefooter_left_links\"&gt;&lt;li&gt;<a href=\"http://www.facebook.com/facebook?ref=pf\" accesskey=\"7\" rel=\"nofollow\">About</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/advertising/?src=pf\" rel=\"nofollow\">Advertising</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://developers.facebook.com/?ref=pf\" rel=\"nofollow\">Developers</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/jobs/?ref=pf\" rel=\"nofollow\">Jobs</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/terms.php?ref=pf\" accesskey=\"8\" rel=\"nofollow\">Terms</a>&lt;/li&gt;&lt;/ul&gt;&lt;ul id=\"pagefooter_right_links\"&gt;&lt;li&gt;<a href=\"http://www.facebook.com/findfriends.php?ref=pf\" rel=\"nofollow\">Find Friends</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/policy.php?ref=pf\" accesskey=\"6\" rel=\"nofollow\">Privacy</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/editaccount.php?ref=pf\" accesskey=\"5\" rel=\"nofollow\">Account</a>&lt;/li&gt;&lt;li&gt;<a href=\"http://www.facebook.com/help.php?ref=pf\" accesskey=\"0\" rel=\"nofollow\">Help</a>&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=\"js_buffer\"&gt;&lt;script type=\"text/javascript\"&gt;&lt;/script&gt;&lt;script type=\"text/javascript\"&gt;onloadRegister(function(){Bootloader.configurePage({\"http://static.ak.fbcdn.net/rsrc.php/z1L8T/lpkg/c10nizfp/en_US/141/149127/css/6q91m3yb7b40gk4g.pkg.css\":[\"css/6q91m3yb7b40gk4g.pkg.css\",true],\"http://static.ak.fbcdn.net/rsrc.php/z12SS/lpkg/42aepnwc/en_US/141/149267/css/8oz8vpjndlc80w48.pkg.css\":[\"css/8oz8vpjndlc80w48.pkg.css\",true],\"http://static.ak.fbcdn.net/rsrc.php/zDTXB/lpkg/3vlveeb2/en_US/141/149289/css/esa63k2mtdkw0soo.pkg.css\":[\"css/esa63k2mtdkw0soo.pkg.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/zAGPW/lpkg/edue2c47/en_US/141/145548/css/e3u5ketl0v4kg0os.pkg.css\":[\"css/e3u5ketl0v4kg0os.pkg.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/z1WNH/lpkg/87551rpj/en_US/141/143838/css/6ml7h6y9pu4oc0gs.pkg.css\":[\"css/6ml7h6y9pu4oc0gs.pkg.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/z7UGZ/lpkg/adynhi09/en_US/141/149267/css/99d6etg6hyos0wc4.pkg.css\":[\"css/99d6etg6hyos0wc4.pkg.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/z8Q1B/l/7wz2wtw6/en_US/149267/css/adz/social_footer.css\":[\"css/adz/social_footer.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/zDBQK/l/jxg3ibso/en_US/145491/css/adz/feedback.css\":[\"css/adz/feedback.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/z7K6M/lpkg/bhxt2bx7/en_US/141/147306/css/7lneaftob80scw0c.pkg.css\":[\"css/7lneaftob80scw0c.pkg.css\",false],\"http://static.ak.fbcdn.net/rsrc.php/z74NC/lpkg/admk39gh/en_US/141/148849/css/1uom3yh8tp7o4so4.pkg.css\":[\"css/1uom3yh8tp7o4so4.pkg.css\",true],\"http://static.ak.fbcdn.net/rsrc.php/zC7X3/lpkg/derg0zg2/en_US/141/148378/css/9xsxlqd8nns48gww.pkg.css\":[\"css/9xsxlqd8nns48gww.pkg.css\",true],\"http://static.ak.fbcdn.net/rsrc.php/z2RKM/lpkg/7gpmre8d/en_US/141/145354/css/3e9boc71u1ogk884.pkg.css\":[\"css/3e9boc71u1ogk884.pkg.css\",false]});Bootloader.done([\"css/6q91m3yb7b40gk4g.pkg.css\",\"css/8oz8vpjndlc80w48.pkg.css\",\"css/esa63k2mtdkw0soo.pkg.css\",\"css/e3u5ketl0v4kg0os.pkg.css\",\"css/6ml7h6y9pu4oc0gs.pkg.css\",\"css/99d6etg6hyos0wc4.pkg.css\",\"css/adz/social_footer.css\",\"css/adz/feedback.css\",\"css/7lneaftob80scw0c.pkg.css\",\"css/1uom3yh8tp7o4so4.pkg.css\",\"css/9xsxlqd8nns48gww.pkg.css\",\"css/3e9boc71u1ogk884.pkg.css\"]);});onloadRegister(function() {if (window.Env) { Env[\"nectar_last_impression_id\"]=\"3e683020fcd349018681da9cd79d6a83\"; }});onloadRegister(function() {if (window.Env) { Env[\"nectar_last_nav_impression_id\"]=\"\"; }});onloadRegister(function() {notes_information = new NotesInformation(0, -1, 0, 0, \"\", 1);});onloadRegister(function() {window._note_id = \"81578394304\";});onloadRegister(function() {share_data={max_recipients:20}});onloadRegister(function() {new LikeLink({\"viewer\":\"564671965\",\"actor\":\"564671965\",\"item_id\":\"81578394304\",\"target_fbid\":\"81578394304\",\"type_id\":\"14\",\"source\":2,\"assoc_obj_id\":\"\",\"extra_story_params\":[]}, false, \"like_link_81578394304_81578394304_id_49b6d120e81d04343334263\");});onloadRegister(function() {new LikeBox({\"viewer\":\"564671965\",\"actor\":\"564671965\",\"item_id\":\"81578394304\",\"target_fbid\":\"81578394304\",\"type_id\":\"14\",\"source\":2,\"assoc_obj_id\":\"\",\"extra_story_params\":[]}, false, false, \"like_box_81578394304_81578394304\");});onloadRegister(function() {new AdspaceAdsFeedback(\"adspace_ad_6002280705593\")                      .set_usage_data([0,0,6002280705593])                      .set_log_data(\"AAAAAQAQIXxkUYgVca2o_0jHLYGNkQAAAs-o2i-xo3qDTNnFo3Np48BMrS5n1lJNiGLDUDkxPbTZyjA6WjqmVf37nTN-NPA4xQsx_QEBOTicPttMnJNXfy8FAaVEfrdnEZyMMT5hP6V1PbGv5TzbOedo8gkQPDQRATyWMn0X6S0hVLRp-m-oOmypZuztsWxFGJHfSSAoZKmeDEhx5kR56Fjyv26mfNj1gUbCwe6K6H38W6SQgLEKWFfwW8cDqt3Fz0xhelMfW0hmqIqBszzqKkKbsQpOKRtoyznRPB05jFFYfqtmtg-X9yr1Es9FGmEJmor_RTDubEWfd4wGYIQskZlcMECqTl4NDXVsVhbf6aozInYv4GzU5lVVBbT00oNjR0JjVKPm5UZhcHL0eDPyULh1_JbNfyfvnobi4X6H2gz4ycMmEOKr-21it4u-udh9B-OxEU5zvKIwfDIkboMJDqd6t99DYmfIUPp4fXOBrOnNaOgBNtSNfzTS0IN-5ou9gc-NTruEmnEHkgtLDd8TAhhp1pWInEiLpYBijAuJm2KeaDFt234iegEg8LTx-iFMBWSqtZBBkdcSmzmuJBGbY3omNv6y5ai8fcnQTLBxelsOCEyduk68bSsOFgWvcA9_aTBx7VxZc0RZcppYisujglY4eH1zgazpzWjuhhonlkHxEHnIXExl-3te_zfAwMylVaJaC_Gz2PxcF1ZyHfVUTLoYd33u4TjdnYIaUERYBBm5HOQI1DvusYeirbRGOuD-W78LJnq6IwcUHF-x1wlgu97zsDpDRxzcYpGFUt9nl90IEIKo8CtuDYPdkZ0R23I1SsqLFcFKf18lr-3MJX5jzxAacS-B653vrRQgvIqvV-TI8D8acp2-zvisUpkKeTfyE8zypJdgzM78BTwi6hxsaa5dQidikGW1mWzqYTp2eEI3BIa3eTK_vJZg2SuhsCufrAP2w5tkpII4Q49mKFcAFawPKrU4WQbHygs,\");});onloadRegister(function() {window.loading_page_chrome = true;});onloadRegister(function() {try { so_sound_player = new SWFObject(\"/swf/SoundPlayer.swf\", \"so_sound_player\", \"1px\", \"1px\", \"9.0.115\", \"#ffffff\");so_sound_player.addParam(\"allowscriptaccess\", \"always\");so_sound_player.addParam(\"wmode\", \"transparent\");so_sound_player.addVariable(\"string_table\", \"http://static.ak.fbcdn.net/js_strings.php/t85883/en_US\");so_sound_player.addVariable(\"swf_id\", \"so_sound_player\");so_sound_player.fallback_html = \" \";so_sound_player.write(\"sound_player_holder\"); } catch (swfex) { }});onloadRegister(function() {placeholderSetup(\"status_placeholder_input_chat\");});onloadRegister(function() {new ChatStatusEditor($(\"status_editor_chat\"), \"564671965\", 1);});onloadRegister(function() {placeholderSetup(\"buddy_list_typeahead_input\");});onloadRegister(function() {window.presenceCookieManager = new CookieManager(2);});onloadRegister(function() {window.channelManager = new ChannelManager(\"564671965\", 0, {\"MIN_RETRY_INTERVAL\":3000,\"MAX_RETRY_INTERVAL\":60000}, false);});onloadRegister(function() {window.presence = new Presence(\"564671965\", \"Flexo Smith\", \"Flexo\", 1236717857000, 0, {\"UPDATE_GRANULARITY\":20,\"BUDDY_BASE_TIME\":40,\"BUDDY_MAX_TIME\":900,\"BUDDY_COST_NEVER_SENT_MESSAGE\":900,\"BUDDY_COST_NO_LIST_CHANGE\":30,\"BUDDY_COST_NO_CHAT_TABS\":30,\"BUDDY_COST_CHAT_ACTIVITY\":180,\"BUDDY_COST_VIEW_ACTIVITY\":180,\"BUDDY_COST_PAGE_ACTIVITY\":180,\"BUDDY_MAX_ACTIVITY_MINS\":180,\"BUDDY_MAX_AVAIL_COOKIE\":20,\"BUDDY_VIEW_FETCH_WINDOW\":120,\"NOTIFICATIONS_PIGGYBACK_PERCENTAGE\":25}, \"http://www.facebook.com/presence/popout.php\");});onloadRegister(function() {window.presenceUpdater = new PresenceUpdater();});onloadRegister(function() {window.presenceNotifications = new ChatNotifications(8, 8, 1236717857000, {\"19675640871\":\"Feed Comments\",\"2347471856\":\"Notes\",\"2357179312\":\"SuperPoke!\",\"2409997254\":\"Likes\"}, 1236647289, 0);});onloadRegister(function() {window.applicationDock = new ApplicationDock({\"6802152230\":{\"name\":\"Page Manager\",\"href\":\"http://www.facebook.com/business/dashboard/?ref=sb\",\"icon\":\"http://photos-g.ak.fbcdn.net/photos-ak-sf2p/v43/146/6802152230/app_4_6802152230_487.gif\",\"class\":\"ads_and_pages_manager_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/ads_and_pages.gif?8:66945\",\"order\":1},\"2305272732\":{\"name\":\"Photos\",\"href\":\"http://www.facebook.com/photos/?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/photo.gif?8:39263\",\"class\":\"photos_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/photo.gif?8:25796\",\"order\":2},\"2361831622\":{\"name\":\"Groups\",\"href\":\"http://www.facebook.com/groups.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/group.gif?8:39263\",\"class\":\"groups_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/group.gif?8:25796\",\"order\":3},\"2344061033\":{\"name\":\"Events\",\"href\":\"http://www.facebook.com/events.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/event.gif?8:39263\",\"class\":\"events_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/event.gif?8:25796\",\"order\":4},\"2328908412\":{\"name\":\"Marketplace\",\"href\":\"http://www.facebook.com/marketplace/?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/marketplace.gif?8:42238\",\"class\":\"classifieds_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/marketplace.gif?8:41989\",\"order\":5},\"3221375004\":{\"name\":\"Blog Friends\",\"href\":\"http://apps.facebook.com/blogfriends/\",\"icon\":\"http://photos-e.ak.fbcdn.net/photos-ak-sf2p/v43/36/3221375004/app_4_3221375004_3317.gif\",\"new_icon\":\"http://photos-e.ak.fbcdn.net/photos-ak-sf2p/v43/36/3221375004/app_2_3221375004_2971.gif\",\"order\":6},\"2386512837\":{\"name\":\"Gifts\",\"href\":\"http://www.facebook.com/giftshop.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/gift.gif?8:117008\",\"class\":\"giftbox_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/gift.gif?8:32236\",\"order\":7},\"2405948328\":{\"name\":\"Likeness\",\"href\":\"http://apps.facebook.com/likeness/sideNav.php\",\"icon\":\"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/0/2405948328/app_4_2405948328_9252.gif\",\"new_icon\":\"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/0/2405948328/app_2_2405948328_9125.gif\",\"order\":8},\"17501549056\":{\"name\":\"LivingSocial: Beer\",\"href\":\"http://apps.facebook.com/oktoberfest/\",\"icon\":\"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/124/17501549056/app_4_17501549056_537.gif\",\"new_icon\":\"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/124/17501549056/app_2_17501549056_401.gif\",\"order\":9},\"2309869772\":{\"name\":\"Links\",\"href\":\"http://www.facebook.com/posted.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/post.gif?8:39263\",\"class\":\"posted_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/post.gif?8:26575\",\"order\":10},\"2347471856\":{\"name\":\"Notes\",\"href\":\"http://www.facebook.com/notes.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/note.gif?8:39263\",\"class\":\"notes_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/note.gif?8:25796\",\"order\":11}}).setBookmarkableApp({\"2347471856\":{\"name\":\"Notes\",\"href\":\"http://www.facebook.com/notes.php?ref=sb\",\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/note.gif?8:39263\",\"class\":\"notes_app_link\",\"new_icon\":\"http://static.ak.fbcdn.net/images/icons/note.gif?8:25796\",\"order\":1}}, true).setRecentApps({\"9953271133\":{\"name\":\"NetworkedBlogs\",\"href\":\"http://apps.facebook.com/blognetworks/index.php\",\"icon\":\"http://photos-f.ak.fbcdn.net/photos-ak-sf2p/v43/169/9953271133/app_4_9953271133_9257.gif\",\"new_icon\":\"http://photos-f.ak.fbcdn.net/photos-ak-sf2p/v43/169/9953271133/app_2_9953271133_9023.gif\",\"order\":1}}).setTopBookmarkWrap(\"\").setBMLogging(false).setADLogging(false).render();});onloadRegister(function() {channelManager.addChannel(\"\", 0, bind(presence, \"handleMsg\"),bind(presence, \"start\"),bind(presence, \"connectionShutdown\"),bind(presence, \"restart\"));presence.doSync.bind(presence).defer(100);});onloadRegister(function() {presence.permaShutdown();});onloadRegister(function() {placeholderSetup('q');});onloadRegister(function() {window.search_friend_source.url_templates = {\"u\":{\"photo\":\"http://www.facebook.com/profile.php?id=%d&v;=photos\",\"default_url\":\"http://www.facebook.com/profile.php?id=%d\"},\"g\":{\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/group.gif?8:39263\",\"default_url\":\"http://www.facebook.com/group.php?gid=%d\"},\"e\":{\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/event.gif?8:39263\",\"default_url\":\"http://www.facebook.com/event.php?eid=%d\"},\"p\":{\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/fbpage.gif?8:72158\"},\"search\":{\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/search.gif?8:97819\",\"default_url\":\"http://www.facebook.com/s.php?init=q&q;=%h\"},\"web\":{\"icon\":\"http://static.ak.fbcdn.net/images/app_icons/web_search.gif?8:123103\",\"default_url\":\"http://www.facebook.com/s.php?init=q&k;=80000000010&q;=%h\"}};});onloadRegister(function() {window.ADVANCED_SEARCH_TYPEAHEAD = false;});onloadRegister(function() {window.search_friend_source.WEBSEARCH_USER = true});onloadRegister(function() {new MenuBar(\"fb_menubar_core\").setTimeoutInterval(250).init();});onloadRegister(function() {new MenuBar(\"fb_menubar_aux\").setTimeoutInterval(100).init();});onloadRegister(function() {dropmenu(\"locale_footer_selector_hitarea\")      .registerHTMLMenu(\"locale_footer_selector_menu\")      .setPosition(dropmenu.ALIGN_LEFT)      .setDirection(dropmenu.DIRECTION_UP)      .addHook(\"show\", function(clickTarget) {        CSS.addClass(clickTarget, \"active\"); }        .bind(null, \"locale_footer_selector_hitarea\"))      .addHook(\"hide\", function(clickTarget) {        CSS.removeClass(clickTarget, \"active\"); }        .bind(null, \"locale_footer_selector_hitarea\"));});onloadRegister(function() {window.loading_page_chrome = false;});onloadRegister(function() {var n = \"rtime\"; (window.ge && ge(n)) && (ge(n).title += \" | 327\");});onloadRegister(function() {      onbeforeunloadRegister(function () {        window.setCookie && window.setCookie(\"cavalry_transit_start_time\", (new Date()).getTime(), 10000);        }, true);});&lt;/script&gt;&lt;/div&gt;", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-03-09_19:06:00", "killed": false, "user_key": "fd8c1eea82cacf19fbf510458b154685", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "03/09/2009 07:06 PM", "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": "", "theme": 4, "reply_position": true, "disqus_logo": false}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "42500128", "user_id": "anonymous", "forum_id": "214864", "hash": -2231126393274511832}, "thread": {"days_alive": 0, "slug": "citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits", "paginate": false, "num_pages": 1, "num_posts": 9, "per_page": 0, "total_posts": 0, "realtime_paused": true, "id": 42500128, "queued": false}, "reactions_limit": 10, "context": {"show_reply": true, "use_fb_connect": true, "forum_facebook_key": "a754e38c7443c66a17fb4f842187453e", "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: ";
};
// 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 = '4f0bfca82e06c976a1efdd7c783a5fd0';
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=consumerismcommentary' +
		'&t=citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits' +
		'&ff=' + Dsq.Thread.ff +
		'&default_text=' + 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://consumerismcommentary.disqus.com/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/latest.rss">' + Dsq.Strings.SUBSCRIBE_BY_RSS + '</a> \
			</span> \
		</div> \
		';

		
		

		return html;

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

		html += Dsq.Templates.pagination();

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

		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>';
		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_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>'))
							+ ' <a href="' + Dsq.jsonData.settings.disqus_url + Dsq.Urls.REQUEST_USER_PROFILE + '">' + Dsq.jsonData.request.display_username + '</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"> \
				<form action="." method="GET" onsubmit="Dsq.Templates.postComment(' + post_id + ', this, false); return false;"> \
				<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">Subscribe to all comments by email</a></li> \
									<li><a href="#" onclick="Dsq.Templates.setSubscribe(0, this, ' + post_id + '); return false">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> \
				</form> \
			</div>'
			: '')
			+ '<div class="dsq-post-footer"> \
				<div class="dsq-sharing-options" ' + (!display_sharing_options ? 'style="display:none;"' : '') + '> \
					<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 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 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 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 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 class="dsq-button-small">' + Dsq.Strings.REPLY + '</button> \
						<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 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 ' + (reaction.source == 'backtype' ? '<a href="http://backtype.com/">BackType</a>' : '<a href="' + reaction.source_url + '">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 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 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 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 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 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 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 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="" /> 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 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/consumerismcommentary/thread.js'
			+ '?slug='	+ 'citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits'
			+ '&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/consumerismcommentary/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://consumerismcommentary.disqus.com/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/reply.html';
	this.REQUEST_USER_PROFILE = '/AnonymousUser/';
	this.REQUEST_USER_AVATAR = 'http://media.disqus.com/uploads/forums/21/4864//avatar92.jpg';
};
// 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 {
			return parseInt(chunks[chunks.length-1]);
		}
	};

	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 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/consumerismcommentary/_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">9</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://consumerismcommentary.disqus.com/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/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://consumerismcommentary.disqus.com/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/">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">\
	 </div>\
		';

		

		
		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.authPost();
		

		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 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://consumerismcommentary.disqus.com/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/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 ' + (reaction.source == 'backtype' ? '<a href="http://backtype.com/">BackType</a>' : '<a href="' + reaction.source_url + '">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 '';
	};

	//
	// 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 Consumerism Commentary" 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:42500128" 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'				: 'consumerismcommentary',
			't'				: 'citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits',
			// 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/consumerismcommentary/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/consumerismcommentary/citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits/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 onclick="Dsq.Popup._closePopup(null, true)"><strong>' + Dsq.Strings.NO + '</strong>, ' + Dsq.Strings.NEVER_MIND + '</button>&nbsp;&nbsp;&nbsp;<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/consumerismcommentary/thread.js'
			+ '?slug='	+ 'citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits'
			+ '&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/consumerismcommentary/thread.js'
			+ '?slug='	+ 'citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits'
			+ '&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/consumerismcommentary/subscribe.js'
				+'?status=' 	+ status
				+ '&slug='		+ 'citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits'
				+ '&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 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 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.updateDaysAlive = function() {
		var days = Dsq.$('dsq-thread-days-alive').value;
		var status = Dsq.$('dsq-thread-settings-status');
		Dsq.Utils.postToUrl('http://disqus.com/forums/consumerismcommentary/update_days_alive.js', {days:days,thread:Dsq.jsonData.thread.id});
		status.innerHTML = 'Saved!';
		window.setTimeout(function() { status.innerHTML = ''; }, 1000);
	};
};
// 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/42500128/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/consumerismcommentary/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/consumerismcommentary/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;
		});
	})();
}





	// TODO: Move Seesmic code outside of the main script.  Don't let this script clobber the global namespace.
	if(typeof seesmic == 'undefined') { var seesmic = {}; }
	seesmic.widget = new function () {
		this.callback = function (data) {
			playerVersion = data.disqusplayer;
		};
	};

	
	var scriptEl = document.createElement('script');
	scriptEl.setAttribute('type', 'text/javascript');
	scriptEl.setAttribute('src', 'http://seesmic.com/version.js?callback=seesmic.widget.callback');
	document.getElementsByTagName('head')[0].appendChild(scriptEl);

	
	var scriptEl = document.createElement('script');
	scriptEl.setAttribute('type', 'text/javascript');
	scriptEl.setAttribute('src', 'http://media.disqus.com/javascript/library/swfobject.js');
	document.getElementsByTagName('head')[0].appendChild(scriptEl);

	function see_play_video(_videoUri, _add) {
		var swf = !!playerVersion ? playerVersion : 'http://seesmic.com/embeds/StandalonePlayer.swf';

		flashcontentDiv = Dsq.$(_videoUri + '_content');
		previewDiv = Dsq.$('dsq-seesmic-' + _videoUri + '_preview');
		hideDiv = Dsq.$('dsq-seesmic-' + _videoUri + '_hide');
		showDiv = Dsq.$('dsq-seesmic-' + _videoUri + '_show');
		if(_add) {
			// push flash widget
			var so = new SWFObject(swf, 'sotester', '300', '270', '9', '#000000');
			so.addVariable('video', _videoUri);
			so.addParam('allowFullScreen', 'true');
			so.addParam('allowScriptAccess','always');
			so.useExpressInstall('swfobject/expressinstall.swf');
			so.write(_videoUri + '_content');

			previewDiv.style.display = 'none';
			hideDiv.style.display = 'block';
			showDiv.style.display = 'none';
		}
		else {
			flashcontentDiv.innerHTML = '';
			previewDiv.style.display = 'block';
			hideDiv.style.display = 'none';
			showDiv.style.display = 'block';
		}
	};





(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-21319314">\
	 <div id="dsq-comment-header-21319314" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319314" class="dsq-comment-cite">\
	 <span id="dsq-author-user-21319314">tom</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319314" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319314" class="dsq-comment-message">The Thank You Network used to be much better.  Points and cents used to be one-to-one, they used to have a fixed price flight option - 20,000 points for a ticket up to a $400 value.  <br><br>They got rid of the fixed price flight option, and you have to spend point on a $100-$500 gift card in order to get the one-to-one relationship.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319315">\
	 <div id="dsq-comment-header-21319315" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319315" class="dsq-comment-cite">\
	 <a id="dsq-author-user-21319315" href="http://www.squawkfox.com/" target="_blank" rel="nofollow">Squawkfox</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319315" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319315" class="dsq-comment-message">I think the 29.99% interest rate says it all there - OUCH!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319316">\
	 <div id="dsq-comment-header-21319316" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319316" class="dsq-comment-cite">\
	 <span id="dsq-author-user-21319316">Steve</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319316" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319316" class="dsq-comment-message">"Responsible" categories is such a joke. They don\'t even include the standard bonus categories, which actually would be responsible - gas stations, grocery stores, and drug stores. This is nothing but a gimmick. The problem is that responsible behavior has its own reward (in the form of less debt, less interest, less spending on frivolous music &amp; restaurant purchases), and as such, it is unprofitable for the cc companies. So they can\'t really afford to offer a product that truly rewards such behavior.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319317">\
	 <div id="dsq-comment-header-21319317" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319317" class="dsq-comment-cite">\
	 <a id="dsq-author-user-21319317" href="http://geekyweekly.com/" target="_blank" rel="nofollow">Andrew</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319317" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319317" class="dsq-comment-message">I agree with Steve, I just signed up for an AMEX Blue Cash card because Citi completely nerfed their reward system. No rewards on gas and groceries anymore.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319318">\
	 <div id="dsq-comment-header-21319318" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319318" class="dsq-comment-cite">\
	 <a id="dsq-author-user-21319318" href="http://www.budgetpulse.com/" target="_blank" rel="nofollow">Craig</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319318" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319318" class="dsq-comment-message">Sounds like a card I should get belonging to Citibank and being good with my credit card.  Like you mention the points are basically meaningless because their value is so low.  I agree that they should reward by paying in full, or the points should be worth more.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319322">\
	 <div id="dsq-comment-header-21319322" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319322" class="dsq-comment-cite">\
	 <span id="dsq-author-user-21319322">via Facebook</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319322" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319322" class="dsq-comment-message"><a href="http://www.facebook.com/profile.php?id=24403441" rel="nofollow">&lt;img src="http://profile.ak.facebook.com/v222/1339/71/q24403441_275.jpg" alt="" class="feed_comment_pic"&gt;&lt;/img&gt;</a>&lt;div class="wallcontent" id="comment_box_81578394304_81578394304_1017541"&gt;&lt;/div&gt;&lt;div class="wallfrom"&gt;&lt;a onclick=\'remove_feed_comment_dialog("81578394304", "81578394304", 1017541, "564671965", 2, 14, "", "437f7bbcd7e24ebf"); return false;\' class="x_to_hide" title="Click here to remove this comment"&gt;&nbsp;</a>&lt;span class="wallmeta"&gt;&lt;/span&gt;<a href="http://www.facebook.com/profile.php?id=24403441" rel="nofollow">Stephanie Collins</a>&lt;span class="wallmeta"&gt; at 7:06pm March 9&lt;/span&gt;&lt;/div&gt;&lt;div class="walltext"&gt;&lt;/div&gt;&lt;div id="text_expose_id_49b6d120e8ba36852984029" class="wall_actual_text"&gt;How are those &quot;responsible&quot; categories? I can somewhat see the argument for books, but... I just don&#039;t get it.<br></br><br>Although, I guess it&#039;s not a bad credit card for young people. It&#039;s just sort of silly.</br>&lt;/div&gt;&lt;div class="wallpost comment_error_target" id="feed_comments_error_81578394304_81578394304"&gt;&lt;/div&gt;&lt;form method="post" action="/minifeed.php" name="add_comment_81578394304_81578394304" id="add_comment_81578394304_81578394304"&gt;&lt;input type="hidden" name="charset_test" value="&euro;,&acute;,€,´,水,Д,Є"&gt;&lt;/input&gt;&lt;input type="hidden" id="post_form_id" name="post_form_id" value="ff168ca9c50cdbcd6f2a94981ba81a3a"&gt;&lt;div id="comments_add_81578394304_81578394304" class="wallpost comment_add_row"&gt;&lt;/div&gt;&lt;div class="comments_add_box"&gt;&lt;/div&gt;&lt;div class="wallcommentbox clearfix" id="add_comment_wrapper_81578394304_81578394304"&gt;&lt;textarea cols="30" rows="2" onfocus=\'feed_comment_show_add_button("81578394304", "81578394304", 2);if(!this._has_control){new TextAreaControl(this).setMaxLength(1000).setPlaceholderText(this.value).setAutogrow(true).onfocus();this._has_control=true}\' title="Write a comment..." style="overflow:hidden;" class="DOMControl_placeholder" id="add_comment_text_81578394304_81578394304" name="add_comment_text_81578394304_81578394304"&gt;Write a comment...&lt;/textarea&gt;&lt;/div&gt;&lt;div class="quote_nub"&gt;&lt;/div&gt;&lt;div class="inline_comment_buttons"&gt;&lt;/div&gt;&lt;/input&gt;&lt;input type="submit" class="inputsubmit inputsubmit" onclick=\'feedcomment_submit("81578394304", "81578394304", 2, "564671965", 14, "", "", "437f7bbcd7e24ebf", ""); return false;\' id="submit_comment_81578394304_81578394304" name="submit_comment_81578394304_81578394304" value="Comment"&gt;&lt;/input&gt;&lt;/form&gt;&lt;div class="UITwoColumnLayout_NarrowContent" style="width:200px"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Container clearfix"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Box"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Corner UIRoundedBox_TL"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Corner UIRoundedBox_TR"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Corner UIRoundedBox_BL"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Corner UIRoundedBox_BR"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Side UIRoundedBox_LS"&gt;&lt;/div&gt;&lt;div class="UIRoundedBox_Side UIRoundedBox_RS"&gt;&lt;/div&gt;&lt;div class="notes_side_column clearfix UIOneOff_Container"&gt;&lt;script&gt;var _ignoreList = {};&lt;/script&gt;&lt;/div&gt;&lt;div id="tag_this_note" class="set"&gt;&lt;h2&gt;Tag people in this note&lt;/h2&gt;&lt;/div&gt;&lt;div class="set_filters"&gt;&lt;input type="hidden" id="num_tags" name="num_tags" value="0"&gt;&lt;/input&gt;&lt;input type="hidden" id="num_tags_max" name="num_tags_max" value="30"&gt;&lt;/input&gt;&lt;input type="hidden" id="note_tagger_label_ok" name="note_tagger_label_ok" value="Type any name"&gt;&lt;/input&gt;&lt;input type="hidden" id="note_tagger_label_full" name="note_tagger_label_full" value="Tag limit reached"&gt;&lt;label for="note_tagger" id="label_note_tagger"&gt;Type any name&lt;/label&gt;&lt;/input&gt;&lt;/div&gt;&lt;div id="tag_search_box"&gt;&lt;input value="" class="inputtext typeahead_placeholder" maxlength="100" size="25" autocomplete="off" type="input" onfocus=\'var typeahead_source_instance1 = new friend_source("564671965-1236695520-2&amp;u=564671965");typeahead_source_instance1.text_noinput=&squot;&squot;;new typeaheadpro(this, typeahead_source_instance1,{onselect:editnote_typeahead_onselect,onsubmit:editnote_typeahead_onsubmit});this.onfocus();\'&gt;&lt;/input&gt;&lt;/div&gt;&lt;script&gt;&lt;/script&gt;&lt;div id="in_this_note" class="set"&gt;&lt;h2&gt;In this note&lt;/h2&gt;&lt;/div&gt;&lt;div class="set_filters"&gt;&lt;/div&gt;&lt;div id="note_tags"&gt;&lt;/div&gt;&lt;div class="no_tags"&gt;No one.&lt;/div&gt;&lt;div class="UIWashFrame_SidebarAds"&gt;&lt;/div&gt;&lt;div id="sidebar_ads"&gt;&lt;/div&gt;&lt;div class="adcolumn_wrapper"&gt;&lt;/div&gt;&lt;div class="adcolumn"&gt;&lt;/div&gt;&lt;div class="adcolumn_header" id="adcolumn_advertise"&gt;<a href="http://www.facebook.com/advertising/?src=advf2" rel="nofollow">Advertise</a>&lt;/div&gt;&lt;div id="ssponsor" class="sponsors"&gt;&lt;/div&gt;&lt;div class="admarket_ad" id="adspace_ad_6002280705593"&gt;<a href="http://www.facebook.com/ac.php?i=6002280705593&amp;meta=AAAAAQAQIXxkUYgVca2o_0jHLYGNkQAAAs-o2i-xo3qDTNnFo3Np48BMrS5n1lJNiGLDUDkxPbTZyjA6WjqmVf37nTN-NPA4xQsx_QEBOTicPttMnJNXfy8FAaVEfrdnEZyMMT5hP6V1PbGv5TzbOedo8gkQPDQRATyWMn0X6S0hVLRp-m-oOmypZuztsWxFGJHfSSAoZKmeDEhx5kR56Fjyv26mfNj1gUbCwe6K6H38W6SQgLEKWFfwW8cDqt3Fz0xhelMfW0hmqIqBszzqKkKbsQpOKRtoyznRPB05jFFYfqtmtg-X9yr1Es9FGmEJmor_RTDubEWfd4wGYIQskZlcMECqTl4NDXVsVhbf6aozInYv4GzU5lVVBbT00oNjR0JjVKPm5UZhcHL0eDPyULh1_JbNfyfvnobi4X6H2gz4ycMmEOKr-21it4u-udh9B-OxEU5zvKIwfDIkboMJDqd6t99DYmfIUPp4fXOBrOnNaOgBNtSNfzTS0IN-5ou9gc-NTruEmnEHkgtLDd8TAhhp1pWInEiLpYBijAuJm2KeaDFt234iegEg8LTx-iFMBWSqtZBBkdcSmzmuJBGbY3omNv6y5ai8fcnQTLBxelsOCEyduk68bSsOFgWvcA9_aTBx7VxZc0RZcppYisujglY4eH1zgazpzWjuhhonlkHxEHnIXExl-3te_zfAwMylVaJaC_Gz2PxcF1ZyHfVUTLoYd33u4TjdnYIaUERYBBm5HOQI1DvusYeirbRGOuD-W78LJnq6IwcUHF-x1wlgu97zsDpDRxzcYpGFUt9nl90IEIKo8CtuDYPdkZ0R23I1SsqLFcFKf18lr-3MJX5jzxAacS-B653vrRQgvIqvV-TI8D8acp2-zvisUpkKeTfyE8zypJdgzM78BTwi6hxsaa5dQidikGW1mWzqYTp2eEI3BIa3eTK_vJZg2SuhsCufrAP2w5tkpII4Q49mKFcAFawPKrU4WQbHygs%2C" class="ad_story ad_clickable" target="_blank" rel="nofollow"></a>&lt;/div&gt;&lt;div class="social_ad_advert"&gt;&lt;h2&gt;WordPress Autoblog&lt;/h2&gt;&lt;/div&gt;&lt;div class="social_ad_image"&gt;&lt;img src="http://creative.ak.facebook.com/ads3/flyers/127/2/6002280704793_1_bfd65fbc.jpg" alt=""&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class="social_ad_advert_text"&gt;Build blog content automatically using any RSS or Atom feed.&lt;/div&gt;&lt;div class="below_social_ad clearfix"&gt;&lt;/div&gt;&lt;div class="ads_feedback"&gt;<a href="#" class="thumbs_up" title="Like this ad" rel="nofollow">&nbsp;</a><a href="#" class="thumbs_dn" title="Dislike this ad" rel="nofollow">&nbsp;</a><a href="#" class="next_ad" title="Next Ad" rel="nofollow">&nbsp;</a>&lt;/div&gt;&lt;!-- ami 6002280705593 --&gt;&lt;div class="banner_ad"&gt;&lt;iframe src="http://ads.ak.facebook.com/ads/creative/msn/us-120other.html" frameborder="0" height="600px" width="160px" scrolling="no" marginheight="0" marginwidth="0"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;!-- ami 6002231212952 --&gt;<a href="http://www.facebook.com/ads/adboard/" class="more_ads" id="adcolumn_more_ads" rel="nofollow">More Ads</a>&lt;div id="pagefooter"&gt;&lt;/div&gt;&lt;div class="pagefooter_topborder clearfix"&gt;&lt;/div&gt;&lt;div class="copyright_and_location clearfix"&gt;&lt;/div&gt;&lt;div class="copyright" id="pagefooter_copyright"&gt;&lt;span title="PHP"&gt;Facebook &lt;/span&gt;&lt;span id="rtime" title="321"&gt;&copy;&lt;/span&gt; &lt;span title="10.17.19.109"&gt;20&lt;/span&gt;&lt;span title="22481080"&gt;09&lt;/span&gt;&lt;/div&gt;&lt;div id="locale_footer_selector" class="locale_footer_selector"&gt;&lt;/div&gt;&lt;div class="dropdown_menu hidden_elem " id="locale_footer_selector_menu"&gt;&lt;/div&gt;&lt;div class="dropdown_menu_header_shadow"&gt;&lt;/div&gt;&lt;div class="menu_content"&gt;&lt;a href="#" onclick="return false;"&gt;English (US)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "es_LA"); return false;\'&gt;Español</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "fr_FR"); return false;\'&gt;Français</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "de_DE"); return false;\'&gt;Deutsch</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ja_JP"); return false;\'&gt;日本語</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "af_ZA"); return false;\'&gt;Afrikaans</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ar_AR"); return false;\'&gt;العربية</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "bg_BG"); return false;\'&gt;Български</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ca_ES"); return false;\'&gt;Català</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "cs_CZ"); return false;\'&gt;Čeština</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "cy_GB"); return false;\'&gt;Cymraeg</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "da_DK"); return false;\'&gt;Dansk</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "el_GR"); return false;\'&gt;Ελληνικά</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "en_GB"); return false;\'&gt;English (UK)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "en_PI"); return false;\'&gt;English (Pirate) - BETA</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "es_ES"); return false;\'&gt;Español (España)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "eu_ES"); return false;\'&gt;Euskara - BETA</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "fi_FI"); return false;\'&gt;Suomi</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "gl_ES"); return false;\'&gt;Galego - BETA</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "he_IL"); return false;\'&gt;עברית</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "hr_HR"); return false;\'&gt;Hrvatski</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "hu_HU"); return false;\'&gt;Magyar</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "id_ID"); return false;\'&gt;Bahasa Indonesia</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "it_IT"); return false;\'&gt;Italiano</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ko_KR"); return false;\'&gt;한국어</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "lt_LT"); return false;\'&gt;Lietuvių</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ms_MY"); return false;\'&gt;Bahasa Melayu</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "nb_NO"); return false;\'&gt;Norsk (bokmål)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "nl_NL"); return false;\'&gt;Nederlands</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "nn_NO"); return false;\'&gt;Norsk (nynorsk) - BETA</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "pl_PL"); return false;\'&gt;Polski</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "pt_BR"); return false;\'&gt;Português (Brasil)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "pt_PT"); return false;\'&gt;Português (Portugal)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ro_RO"); return false;\'&gt;Română</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "ru_RU"); return false;\'&gt;Русский</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "sk_SK"); return false;\'&gt;Slovenčina</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "sl_SI"); return false;\'&gt;Slovenščina</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "sr_RS"); return false;\'&gt;Српски</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "sv_SE"); return false;\'&gt;Svenska</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "th_TH"); return false;\'&gt;ภาษาไทย</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "tl_PH"); return false;\'&gt;Filipino</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "tr_TR"); return false;\'&gt;Türkçe</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "vi_VN"); return false;\'&gt;Tiếng Việt</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "zh_CN"); return false;\'&gt;中文(简体)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "zh_HK"); return false;\'&gt;中文(香港)</a>&lt;a href="#" onclick=\'intl_set_locale("", "FOOTER", "zh_TW"); return false;\'&gt;中文(台灣)</a>&lt;/div&gt;&lt;div class="dropdown_head  double_arrow"&gt;<a href="#" class="dropdown_link" id="locale_footer_selector_hitarea" rel="nofollow">English (US)&nbsp;&lt;img src="http://static.ak.fbcdn.net/images/spacer.gif?8:11" alt="language selector" style="height:8px;width:5px;"&gt;&lt;/img&gt;</a>&lt;/div&gt;&lt;div id="pagefooter_links"&gt;&lt;ul id="pagefooter_left_links"&gt;&lt;li&gt;<a href="http://www.facebook.com/facebook?ref=pf" accesskey="7" rel="nofollow">About</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/advertising/?src=pf" rel="nofollow">Advertising</a>&lt;/li&gt;&lt;li&gt;<a href="http://developers.facebook.com/?ref=pf" rel="nofollow">Developers</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/jobs/?ref=pf" rel="nofollow">Jobs</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/terms.php?ref=pf" accesskey="8" rel="nofollow">Terms</a>&lt;/li&gt;&lt;/ul&gt;&lt;ul id="pagefooter_right_links"&gt;&lt;li&gt;<a href="http://www.facebook.com/findfriends.php?ref=pf" rel="nofollow">Find Friends</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/policy.php?ref=pf" accesskey="6" rel="nofollow">Privacy</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/editaccount.php?ref=pf" accesskey="5" rel="nofollow">Account</a>&lt;/li&gt;&lt;li&gt;<a href="http://www.facebook.com/help.php?ref=pf" accesskey="0" rel="nofollow">Help</a>&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id="js_buffer"&gt;&lt;script type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;onloadRegister(function(){Bootloader.configurePage({"http://static.ak.fbcdn.net/rsrc.php/z1L8T/lpkg/c10nizfp/en_US/141/149127/css/6q91m3yb7b40gk4g.pkg.css":["css/6q91m3yb7b40gk4g.pkg.css",true],"http://static.ak.fbcdn.net/rsrc.php/z12SS/lpkg/42aepnwc/en_US/141/149267/css/8oz8vpjndlc80w48.pkg.css":["css/8oz8vpjndlc80w48.pkg.css",true],"http://static.ak.fbcdn.net/rsrc.php/zDTXB/lpkg/3vlveeb2/en_US/141/149289/css/esa63k2mtdkw0soo.pkg.css":["css/esa63k2mtdkw0soo.pkg.css",false],"http://static.ak.fbcdn.net/rsrc.php/zAGPW/lpkg/edue2c47/en_US/141/145548/css/e3u5ketl0v4kg0os.pkg.css":["css/e3u5ketl0v4kg0os.pkg.css",false],"http://static.ak.fbcdn.net/rsrc.php/z1WNH/lpkg/87551rpj/en_US/141/143838/css/6ml7h6y9pu4oc0gs.pkg.css":["css/6ml7h6y9pu4oc0gs.pkg.css",false],"http://static.ak.fbcdn.net/rsrc.php/z7UGZ/lpkg/adynhi09/en_US/141/149267/css/99d6etg6hyos0wc4.pkg.css":["css/99d6etg6hyos0wc4.pkg.css",false],"http://static.ak.fbcdn.net/rsrc.php/z8Q1B/l/7wz2wtw6/en_US/149267/css/adz/social_footer.css":["css/adz/social_footer.css",false],"http://static.ak.fbcdn.net/rsrc.php/zDBQK/l/jxg3ibso/en_US/145491/css/adz/feedback.css":["css/adz/feedback.css",false],"http://static.ak.fbcdn.net/rsrc.php/z7K6M/lpkg/bhxt2bx7/en_US/141/147306/css/7lneaftob80scw0c.pkg.css":["css/7lneaftob80scw0c.pkg.css",false],"http://static.ak.fbcdn.net/rsrc.php/z74NC/lpkg/admk39gh/en_US/141/148849/css/1uom3yh8tp7o4so4.pkg.css":["css/1uom3yh8tp7o4so4.pkg.css",true],"http://static.ak.fbcdn.net/rsrc.php/zC7X3/lpkg/derg0zg2/en_US/141/148378/css/9xsxlqd8nns48gww.pkg.css":["css/9xsxlqd8nns48gww.pkg.css",true],"http://static.ak.fbcdn.net/rsrc.php/z2RKM/lpkg/7gpmre8d/en_US/141/145354/css/3e9boc71u1ogk884.pkg.css":["css/3e9boc71u1ogk884.pkg.css",false]});Bootloader.done(["css/6q91m3yb7b40gk4g.pkg.css","css/8oz8vpjndlc80w48.pkg.css","css/esa63k2mtdkw0soo.pkg.css","css/e3u5ketl0v4kg0os.pkg.css","css/6ml7h6y9pu4oc0gs.pkg.css","css/99d6etg6hyos0wc4.pkg.css","css/adz/social_footer.css","css/adz/feedback.css","css/7lneaftob80scw0c.pkg.css","css/1uom3yh8tp7o4so4.pkg.css","css/9xsxlqd8nns48gww.pkg.css","css/3e9boc71u1ogk884.pkg.css"]);});onloadRegister(function() {if (window.Env) { Env["nectar_last_impression_id"]="3e683020fcd349018681da9cd79d6a83"; }});onloadRegister(function() {if (window.Env) { Env["nectar_last_nav_impression_id"]=""; }});onloadRegister(function() {notes_information = new NotesInformation(0, -1, 0, 0, "", 1);});onloadRegister(function() {window._note_id = "81578394304";});onloadRegister(function() {share_data={max_recipients:20}});onloadRegister(function() {new LikeLink({"viewer":"564671965","actor":"564671965","item_id":"81578394304","target_fbid":"81578394304","type_id":"14","source":2,"assoc_obj_id":"","extra_story_params":[]}, false, "like_link_81578394304_81578394304_id_49b6d120e81d04343334263");});onloadRegister(function() {new LikeBox({"viewer":"564671965","actor":"564671965","item_id":"81578394304","target_fbid":"81578394304","type_id":"14","source":2,"assoc_obj_id":"","extra_story_params":[]}, false, false, "like_box_81578394304_81578394304");});onloadRegister(function() {new AdspaceAdsFeedback("adspace_ad_6002280705593")                      .set_usage_data([0,0,6002280705593])                      .set_log_data("AAAAAQAQIXxkUYgVca2o_0jHLYGNkQAAAs-o2i-xo3qDTNnFo3Np48BMrS5n1lJNiGLDUDkxPbTZyjA6WjqmVf37nTN-NPA4xQsx_QEBOTicPttMnJNXfy8FAaVEfrdnEZyMMT5hP6V1PbGv5TzbOedo8gkQPDQRATyWMn0X6S0hVLRp-m-oOmypZuztsWxFGJHfSSAoZKmeDEhx5kR56Fjyv26mfNj1gUbCwe6K6H38W6SQgLEKWFfwW8cDqt3Fz0xhelMfW0hmqIqBszzqKkKbsQpOKRtoyznRPB05jFFYfqtmtg-X9yr1Es9FGmEJmor_RTDubEWfd4wGYIQskZlcMECqTl4NDXVsVhbf6aozInYv4GzU5lVVBbT00oNjR0JjVKPm5UZhcHL0eDPyULh1_JbNfyfvnobi4X6H2gz4ycMmEOKr-21it4u-udh9B-OxEU5zvKIwfDIkboMJDqd6t99DYmfIUPp4fXOBrOnNaOgBNtSNfzTS0IN-5ou9gc-NTruEmnEHkgtLDd8TAhhp1pWInEiLpYBijAuJm2KeaDFt234iegEg8LTx-iFMBWSqtZBBkdcSmzmuJBGbY3omNv6y5ai8fcnQTLBxelsOCEyduk68bSsOFgWvcA9_aTBx7VxZc0RZcppYisujglY4eH1zgazpzWjuhhonlkHxEHnIXExl-3te_zfAwMylVaJaC_Gz2PxcF1ZyHfVUTLoYd33u4TjdnYIaUERYBBm5HOQI1DvusYeirbRGOuD-W78LJnq6IwcUHF-x1wlgu97zsDpDRxzcYpGFUt9nl90IEIKo8CtuDYPdkZ0R23I1SsqLFcFKf18lr-3MJX5jzxAacS-B653vrRQgvIqvV-TI8D8acp2-zvisUpkKeTfyE8zypJdgzM78BTwi6hxsaa5dQidikGW1mWzqYTp2eEI3BIa3eTK_vJZg2SuhsCufrAP2w5tkpII4Q49mKFcAFawPKrU4WQbHygs,");});onloadRegister(function() {window.loading_page_chrome = true;});onloadRegister(function() {try { so_sound_player = new SWFObject("/swf/SoundPlayer.swf", "so_sound_player", "1px", "1px", "9.0.115", "#ffffff");so_sound_player.addParam("allowscriptaccess", "always");so_sound_player.addParam("wmode", "transparent");so_sound_player.addVariable("string_table", "http://static.ak.fbcdn.net/js_strings.php/t85883/en_US");so_sound_player.addVariable("swf_id", "so_sound_player");so_sound_player.fallback_html = " ";so_sound_player.write("sound_player_holder"); } catch (swfex) { }});onloadRegister(function() {placeholderSetup("status_placeholder_input_chat");});onloadRegister(function() {new ChatStatusEditor($("status_editor_chat"), "564671965", 1);});onloadRegister(function() {placeholderSetup("buddy_list_typeahead_input");});onloadRegister(function() {window.presenceCookieManager = new CookieManager(2);});onloadRegister(function() {window.channelManager = new ChannelManager("564671965", 0, {"MIN_RETRY_INTERVAL":3000,"MAX_RETRY_INTERVAL":60000}, false);});onloadRegister(function() {window.presence = new Presence("564671965", "Flexo Smith", "Flexo", 1236717857000, 0, {"UPDATE_GRANULARITY":20,"BUDDY_BASE_TIME":40,"BUDDY_MAX_TIME":900,"BUDDY_COST_NEVER_SENT_MESSAGE":900,"BUDDY_COST_NO_LIST_CHANGE":30,"BUDDY_COST_NO_CHAT_TABS":30,"BUDDY_COST_CHAT_ACTIVITY":180,"BUDDY_COST_VIEW_ACTIVITY":180,"BUDDY_COST_PAGE_ACTIVITY":180,"BUDDY_MAX_ACTIVITY_MINS":180,"BUDDY_MAX_AVAIL_COOKIE":20,"BUDDY_VIEW_FETCH_WINDOW":120,"NOTIFICATIONS_PIGGYBACK_PERCENTAGE":25}, "http://www.facebook.com/presence/popout.php");});onloadRegister(function() {window.presenceUpdater = new PresenceUpdater();});onloadRegister(function() {window.presenceNotifications = new ChatNotifications(8, 8, 1236717857000, {"19675640871":"Feed Comments","2347471856":"Notes","2357179312":"SuperPoke!","2409997254":"Likes"}, 1236647289, 0);});onloadRegister(function() {window.applicationDock = new ApplicationDock({"6802152230":{"name":"Page Manager","href":"http://www.facebook.com/business/dashboard/?ref=sb","icon":"http://photos-g.ak.fbcdn.net/photos-ak-sf2p/v43/146/6802152230/app_4_6802152230_487.gif","class":"ads_and_pages_manager_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/ads_and_pages.gif?8:66945","order":1},"2305272732":{"name":"Photos","href":"http://www.facebook.com/photos/?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/photo.gif?8:39263","class":"photos_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/photo.gif?8:25796","order":2},"2361831622":{"name":"Groups","href":"http://www.facebook.com/groups.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/group.gif?8:39263","class":"groups_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/group.gif?8:25796","order":3},"2344061033":{"name":"Events","href":"http://www.facebook.com/events.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/event.gif?8:39263","class":"events_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/event.gif?8:25796","order":4},"2328908412":{"name":"Marketplace","href":"http://www.facebook.com/marketplace/?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/marketplace.gif?8:42238","class":"classifieds_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/marketplace.gif?8:41989","order":5},"3221375004":{"name":"Blog Friends","href":"http://apps.facebook.com/blogfriends/","icon":"http://photos-e.ak.fbcdn.net/photos-ak-sf2p/v43/36/3221375004/app_4_3221375004_3317.gif","new_icon":"http://photos-e.ak.fbcdn.net/photos-ak-sf2p/v43/36/3221375004/app_2_3221375004_2971.gif","order":6},"2386512837":{"name":"Gifts","href":"http://www.facebook.com/giftshop.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/gift.gif?8:117008","class":"giftbox_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/gift.gif?8:32236","order":7},"2405948328":{"name":"Likeness","href":"http://apps.facebook.com/likeness/sideNav.php","icon":"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/0/2405948328/app_4_2405948328_9252.gif","new_icon":"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/0/2405948328/app_2_2405948328_9125.gif","order":8},"17501549056":{"name":"LivingSocial: Beer","href":"http://apps.facebook.com/oktoberfest/","icon":"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/124/17501549056/app_4_17501549056_537.gif","new_icon":"http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v43/124/17501549056/app_2_17501549056_401.gif","order":9},"2309869772":{"name":"Links","href":"http://www.facebook.com/posted.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/post.gif?8:39263","class":"posted_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/post.gif?8:26575","order":10},"2347471856":{"name":"Notes","href":"http://www.facebook.com/notes.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/note.gif?8:39263","class":"notes_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/note.gif?8:25796","order":11}}).setBookmarkableApp({"2347471856":{"name":"Notes","href":"http://www.facebook.com/notes.php?ref=sb","icon":"http://static.ak.fbcdn.net/images/app_icons/note.gif?8:39263","class":"notes_app_link","new_icon":"http://static.ak.fbcdn.net/images/icons/note.gif?8:25796","order":1}}, true).setRecentApps({"9953271133":{"name":"NetworkedBlogs","href":"http://apps.facebook.com/blognetworks/index.php","icon":"http://photos-f.ak.fbcdn.net/photos-ak-sf2p/v43/169/9953271133/app_4_9953271133_9257.gif","new_icon":"http://photos-f.ak.fbcdn.net/photos-ak-sf2p/v43/169/9953271133/app_2_9953271133_9023.gif","order":1}}).setTopBookmarkWrap("").setBMLogging(false).setADLogging(false).render();});onloadRegister(function() {channelManager.addChannel("", 0, bind(presence, "handleMsg"),bind(presence, "start"),bind(presence, "connectionShutdown"),bind(presence, "restart"));presence.doSync.bind(presence).defer(100);});onloadRegister(function() {presence.permaShutdown();});onloadRegister(function() {placeholderSetup(\'q\');});onloadRegister(function() {window.search_friend_source.url_templates = {"u":{"photo":"http://www.facebook.com/profile.php?id=%d&v;=photos","default_url":"http://www.facebook.com/profile.php?id=%d"},"g":{"icon":"http://static.ak.fbcdn.net/images/app_icons/group.gif?8:39263","default_url":"http://www.facebook.com/group.php?gid=%d"},"e":{"icon":"http://static.ak.fbcdn.net/images/app_icons/event.gif?8:39263","default_url":"http://www.facebook.com/event.php?eid=%d"},"p":{"icon":"http://static.ak.fbcdn.net/images/app_icons/fbpage.gif?8:72158"},"search":{"icon":"http://static.ak.fbcdn.net/images/app_icons/search.gif?8:97819","default_url":"http://www.facebook.com/s.php?init=q&q;=%h"},"web":{"icon":"http://static.ak.fbcdn.net/images/app_icons/web_search.gif?8:123103","default_url":"http://www.facebook.com/s.php?init=q&k;=80000000010&q;=%h"}};});onloadRegister(function() {window.ADVANCED_SEARCH_TYPEAHEAD = false;});onloadRegister(function() {window.search_friend_source.WEBSEARCH_USER = true});onloadRegister(function() {new MenuBar("fb_menubar_core").setTimeoutInterval(250).init();});onloadRegister(function() {new MenuBar("fb_menubar_aux").setTimeoutInterval(100).init();});onloadRegister(function() {dropmenu("locale_footer_selector_hitarea")      .registerHTMLMenu("locale_footer_selector_menu")      .setPosition(dropmenu.ALIGN_LEFT)      .setDirection(dropmenu.DIRECTION_UP)      .addHook("show", function(clickTarget) {        CSS.addClass(clickTarget, "active"); }        .bind(null, "locale_footer_selector_hitarea"))      .addHook("hide", function(clickTarget) {        CSS.removeClass(clickTarget, "active"); }        .bind(null, "locale_footer_selector_hitarea"));});onloadRegister(function() {window.loading_page_chrome = false;});onloadRegister(function() {var n = "rtime"; (window.ge && ge(n)) && (ge(n).title += " | 327");});onloadRegister(function() {      onbeforeunloadRegister(function () {        window.setCookie && window.setCookie("cavalry_transit_start_time", (new Date()).getTime(), 10000);        }, true);});&lt;/script&gt;&lt;/div&gt;</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319319">\
	 <div id="dsq-comment-header-21319319" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319319" class="dsq-comment-cite">\
	 <a id="dsq-author-user-21319319" href="http://www.ncnblog.com/" target="_blank" rel="nofollow">NCN</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319319" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319319" class="dsq-comment-message">Honest to goodness, this might be the silliest thing I\'ve heard of in my life.  Seriously, are we at a point, in our society, where we need to base our purchases on whether we will or will not be "rewarded" by a credit card company.  And, who decides which categories are "good" and which are "bad"?  They do?  Ridiculous.  Live on a budget, but what you need, have a little fun, pay your bills, save for the future, and work hard.  Ignore this fluff.<br>Luddites rule! :)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319320">\
	 <div id="dsq-comment-header-21319320" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319320" class="dsq-comment-cite">\
	 <span id="dsq-author-user-21319320">Eric</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319320" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319320" class="dsq-comment-message">Leave it to NCN to suck the joy out of CCs! :P<br><br>But the devaluation of TY points really puts this "initiative" to waste.  Pass.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-21319321">\
	 <div id="dsq-comment-header-21319321" class="dsq-comment-header">\
	 <cite id="dsq-cite-21319321" class="dsq-comment-cite">\
	 <span id="dsq-author-user-21319321">E in MD</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-21319321" class="dsq-comment-body">\
	 <div id="dsq-comment-message-21319321" class="dsq-comment-message">These comments are right. TYN only gives 100% as retail gift cards. But the cashback citation, while correct, is too low since if it the rebate is applied to the card\'s monthly bill it pays $175 for 25,000 points (3.5%), a good complement to 5% grocery-pharma-gas cards and 2% across-the-board cards, for anyone with significant restaurant, cinema, book, music expenses.</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=consumerismcommentary&t=citibank_offers_citi_forward_credit_card_rewarding_users_for_good_habits&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 = 'a754e38c7443c66a17fb4f842187453e';
			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');
}

})();




