




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": [{"body": "BTW, I agree with the thesis of Robert's missive: &quot;The new way to keep kids safe isn\u2019t to try to block them from going to nasty sites: it\u2019s all about educating them about what is good behavior and is bad.&quot;", "author_name": "Kurt Starnes", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1401895, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#1852882d-9f54-4af5-b83a-8c2c3df5d9c9", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/kurtstarnes", "date_created": "5 months ago", "retweets": []}, {"body": "Adam - Are you implying that letting a well educated kid use the net openly is analogous to letting a well educated kid ride the subway alone?  If so, I would certainly argue against such a position.", "author_name": "Kurt Starnes", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1401896, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#c435d2a7-8fb6-49fa-b200-fb0a5cdd876a", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/kurtstarnes", "date_created": "5 months ago", "retweets": []}, {"body": "Kurt, you remind me of that NYC mom who let her 9 year old ride the subway alone", "author_name": "Adam", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1401897, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#d834cf23-6470-46d8-86fc-c38b4f5a1f9c", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/adambassador", "date_created": "5 months ago", "retweets": []}, {"body": "Prepare your children for the road, not the road for your children - that's my philosophy with my Daughter and the net, among other things.  It's a very liberal approach, but it seems to be working so far. I also spend a significant amount of time with her, teaching her the difference between good and evil. :D", "author_name": "Kurt Starnes", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1401898, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#a476dc7c-732c-4acd-b8a5-3f3ff468623e", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/kurtstarnes", "date_created": "5 months ago", "retweets": []}, {"body": "OpenDNS for us. It's router based and my kids and wife love me for it.", "author_name": "Adam", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1401899, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#b47e9185-5ef5-41a9-b8d0-e80b6b560a39", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/adambassador", "date_created": "5 months ago", "retweets": []}, {"body": "I grew up before the age of social media and there was lots of bullying, malicious gossip and harassment, not to mention the creepy guy who stood on the corner in a raincoat. (of course, bringing guns to school wasn't unusual then, you just had to keep them on the gun rack) The Web is just the latest tool for bullies and pervs.", "author_name": "Robert Hafer", "source_url": "http://www.backtype.com/search?q=http%3A//scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1041537, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3", "source": "backtype", "get_service_name": "friendfeed", "avatar_url": null, "author_url": "http://friendfeed.com/rehafer", "date_created": "10 months ago", "retweets": []}, {"body": "@ Robert Hafer Today, the creepy guy in a raincoat is a sweet-looking 10-year-old girl who is popular with everyone and has all the latest gadgets but absent parents.", "author_name": "Dominic Jones", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1068032, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#44a1d9f4-f906-43f1-abf4-ad478daac248", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/irwebreport/picture?size=large", "author_url": "", "date_created": "10 months ago", "retweets": []}, {"body": "I grew up before the age of social media and there was lots of bullying, malicious gossip and harassment, not to mention the creepy guy who stood on the corner in a raincoat. (of course, bringing guns to school wasn't unusual then, you just had to keep them on the gun rack) The Web is just the latest tool for bullies and pervs.", "author_name": "Robert Hafer", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1068031, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#3bc5546d-fb67-401e-827a-074b69cc61ef", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/rehafer/picture?size=large", "author_url": "", "date_created": "10 months ago", "retweets": []}, {"body": "Sorry to hog this, but if I can help one person it's worth it. Teach your kids never to share their passwords with their friends. They often do this for things like neopets and webkinz when they're going to be offline for a while and want a friend to take care of their \"pets\" or keep in good standing on Club Penguin or something. Their passwords often are the same for a variety of sites, including web mail.", "author_name": "Dominic Jones", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1068030, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#5f6985d4-a52e-480b-b260-68898fd6b0ac", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/irwebreport/picture?size=large", "author_url": "", "date_created": "10 months ago", "retweets": []}, {"body": "And the cc: line in emails is the most common way strangers get into your kids' networks.", "author_name": "Dominic Jones", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2009/02/10/keeping-kids-online-safe/", "id": 1068029, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/5190c385-5c00-ed3e-efbe-c38f6db856d3#d548cc29-1708-41e6-8966-55355f44a5d5", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/irwebreport/picture?size=large", "author_url": "", "date_created": "10 months ago", "retweets": []}], "has_more_reactions": true, "users": {"3573cbae1e8aac31de3b46f3ac32b578": {"username": "Seann Birkelund", "tumblr": "", "display_name": "Seann Birkelund", "url": "http://disqus.com/guest/3573cbae1e8aac31de3b46f3ac32b578/", "registered": false, "linkedin": "", "blog": "http://www.education.com/topic/school-bullying-teasing/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b240e76e30f8b68b5e351aaf26950e96": {"username": "Ben Curnett", "tumblr": "", "display_name": "Ben Curnett", "url": "http://disqus.com/guest/b240e76e30f8b68b5e351aaf26950e96/", "registered": false, "linkedin": "", "blog": "http://www.matterhornmarketing.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "ba7f01ec9e8334f6a376aaa90b34d320": {"username": "frederic sidler", "tumblr": "", "display_name": "frederic sidler", "url": "http://disqus.com/guest/ba7f01ec9e8334f6a376aaa90b34d320/", "registered": false, "linkedin": "", "blog": "http://www.mixin.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/49/1796/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7499893b36ae93005807b38ef37ce5d6": {"username": "Jennifer McKasson", "tumblr": "", "display_name": "Jennifer McKasson", "url": "http://disqus.com/guest/7499893b36ae93005807b38ef37ce5d6/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "760cc0b1a36815a8878b8aea2e17cbcb": {"username": "banana", "tumblr": "", "display_name": "banana", "url": "http://disqus.com/guest/760cc0b1a36815a8878b8aea2e17cbcb/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "a8f159388c73876ea80c22f1267cd61d": {"username": "Denise Howell", "tumblr": "", "display_name": "Denise Howell", "url": "http://disqus.com/guest/a8f159388c73876ea80c22f1267cd61d/", "registered": false, "linkedin": "", "blog": "http://twitter.com/dhowell", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "05ecef2c0da11319b239d426acd22d4f": {"username": "Tech_Teacher13", "tumblr": "", "display_name": "Tech_Teacher13", "url": "http://disqus.com/guest/05ecef2c0da11319b239d426acd22d4f/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b31a37da7801bb30c10950c253c8f59d": {"username": "TechMama", "tumblr": "", "display_name": "TechMama", "url": "http://disqus.com/guest/b31a37da7801bb30c10950c253c8f59d/", "registered": false, "linkedin": "", "blog": "http://www.techmamas.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "dc672c11cfe881f36908f66088626cae": {"username": "Jim", "tumblr": "", "display_name": "Jim", "url": "http://disqus.com/guest/dc672c11cfe881f36908f66088626cae/", "registered": false, "linkedin": "", "blog": "http://www.beallfp.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "8121147b6e592bbe8b0eff587da5537c": {"username": "RB", "tumblr": "", "display_name": "RB", "url": "http://disqus.com/guest/8121147b6e592bbe8b0eff587da5537c/", "registered": false, "linkedin": "", "blog": "http://wickedwitchoftheweb.blogspot.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "552b199dadbb0e3af80c1ddf9c63bb0b": {"username": "Larry Roth", "tumblr": "", "display_name": "Larry Roth", "url": "http://disqus.com/guest/552b199dadbb0e3af80c1ddf9c63bb0b/", "registered": false, "linkedin": "", "blog": "http://larryroth.net/blog/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/141/8441/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "98440694bc9208fba43c88865b0fbb6b": {"username": "Andrew Feinberg", "tumblr": "", "display_name": "Andrew Feinberg", "url": "http://disqus.com/guest/98440694bc9208fba43c88865b0fbb6b/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "017329173ff75324d2822770f49f9285": {"username": "Jonathan Sprague", "tumblr": "", "display_name": "Jonathan Sprague", "url": "http://disqus.com/guest/017329173ff75324d2822770f49f9285/", "registered": false, "linkedin": "", "blog": "http://www.giganu.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7f6291e8344b594235e57b843fc05d9b": {"username": "Christopher Coulter", "tumblr": "", "display_name": "Christopher Coulter", "url": "http://disqus.com/guest/7f6291e8344b594235e57b843fc05d9b/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "5cca4b69038c717df9f4c63e458bb459": {"username": "Joel Leonard", "tumblr": "", "display_name": "Joel Leonard", "url": "http://disqus.com/guest/5cca4b69038c717df9f4c63e458bb459/", "registered": false, "linkedin": "", "blog": "http://www.plantservices.com/skilltv/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b11a9a7bee6fc07723be3e8aea636835": {"username": "Alexander van Elsas", "tumblr": "", "display_name": "Alexander van Elsas", "url": "http://disqus.com/guest/b11a9a7bee6fc07723be3e8aea636835/", "registered": false, "linkedin": "", "blog": "http://vanelsas.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/6/5510/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "382b799a85df7f836b72c5411252e78b": {"username": "ec", "tumblr": "", "display_name": "ec", "url": "http://disqus.com/guest/382b799a85df7f836b72c5411252e78b/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "d38db823058012e58e2517188b9f9bc0": {"username": "Offbeatmammal", "tumblr": "", "display_name": "Offbeatmammal", "url": "http://disqus.com/guest/d38db823058012e58e2517188b9f9bc0/", "registered": false, "linkedin": "", "blog": "http://blog.offbeatmammal.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/93/3782/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "1b5111af308a18c3e3e2260b2d0ebe3e": {"username": "Leon Cych", "tumblr": "", "display_name": "Leon Cych", "url": "http://disqus.com/guest/1b5111af308a18c3e3e2260b2d0ebe3e/", "registered": false, "linkedin": "", "blog": "http://www.L4L.co.uk/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "4e017c17439afa0f24efed39f4d2c6c3": {"username": "Dominic Jones", "tumblr": "", "display_name": "Dominic Jones", "url": "http://disqus.com/guest/4e017c17439afa0f24efed39f4d2c6c3/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/190/7872/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "68e3b37dff1b48efbd4e61ece838a890": {"username": "Karen Diro", "tumblr": "", "display_name": "Karen Diro", "url": "http://disqus.com/guest/68e3b37dff1b48efbd4e61ece838a890/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f1fb571a04201fef1d7884ba0591f9cb": {"username": "Matt Norton", "tumblr": "", "display_name": "Matt Norton", "url": "http://disqus.com/guest/f1fb571a04201fef1d7884ba0591f9cb/", "registered": false, "linkedin": "", "blog": "http://www.sentrywireless.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "1db0b5f3517fc79fabca853d39ec7ba2": {"username": "NasMobile", "tumblr": "", "display_name": "NasMobile", "url": "http://disqus.com/guest/1db0b5f3517fc79fabca853d39ec7ba2/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "fec53dcbc6cf4908528cb3f956433d48": {"username": "dvdchris", "tumblr": "", "display_name": "dvdchris", "url": "http://disqus.com/guest/fec53dcbc6cf4908528cb3f956433d48/", "registered": false, "linkedin": "", "blog": "http://www.cooltidbits.net/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f26a97aa5468261379a716edbe86febe": {"username": "The Family Safety Team", "tumblr": "", "display_name": "The Family Safety Team", "url": "http://disqus.com/guest/f26a97aa5468261379a716edbe86febe/", "registered": false, "linkedin": "", "blog": "http://spaces.live.com/familysafety", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "4e6933625d1d051a71d6e61319458a70": {"username": "Jazz Fan", "tumblr": "", "display_name": "Jazz Fan", "url": "http://disqus.com/guest/4e6933625d1d051a71d6e61319458a70/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "90df7fac7c4e9a98ffe6cf6d54d0c532": {"username": "Alison", "tumblr": "", "display_name": "Alison", "url": "http://disqus.com/guest/90df7fac7c4e9a98ffe6cf6d54d0c532/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "1f1c34c170bdce4307c18f1ba7b3c3e9": {"username": "Dave", "tumblr": "", "display_name": "Dave", "url": "http://disqus.com/guest/1f1c34c170bdce4307c18f1ba7b3c3e9/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/8021/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "34d200f533715898b50dc27781527180": {"username": "Tim Toron", "tumblr": "", "display_name": "Tim Toron", "url": "http://disqus.com/guest/34d200f533715898b50dc27781527180/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "9c7b3649b302804de35e31befea88d46": {"username": "Molly Antos", "tumblr": "", "display_name": "Molly Antos", "url": "http://disqus.com/guest/9c7b3649b302804de35e31befea88d46/", "registered": false, "linkedin": "", "blog": "http://www.internetsafety.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "30d97b9979cd26a99405139a1831c17f": {"username": "James", "tumblr": "", "display_name": "James", "url": "http://disqus.com/guest/30d97b9979cd26a99405139a1831c17f/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "f36709c79df3729496e35f6219657d6b": {"username": "Colleen", "tumblr": "", "display_name": "Colleen", "url": "http://disqus.com/guest/f36709c79df3729496e35f6219657d6b/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "19c98a346a55dc106a8a4c99b2d67799": {"username": "Zacqary Adam Green", "tumblr": "", "display_name": "Zacqary Adam Green", "url": "http://disqus.com/guest/19c98a346a55dc106a8a4c99b2d67799/", "registered": false, "linkedin": "", "blog": "http://plankhead.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "6a7b5427747ffedefbd730103ec18a34": {"username": "Jonas", "tumblr": "", "display_name": "Jonas", "url": "http://disqus.com/guest/6a7b5427747ffedefbd730103ec18a34/", "registered": false, "linkedin": "", "blog": "http://kattk.org/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "0f41d4d94c87ddf9bc57098e99504dd6": {"username": "So Much More Than A Mom", "tumblr": "", "display_name": "So Much More Than A Mom", "url": "http://disqus.com/guest/0f41d4d94c87ddf9bc57098e99504dd6/", "registered": false, "linkedin": "", "blog": "http://www.somuchmorethanamom.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": true, "name": "Scobleizer", "streaming_realtime": true, "url": "scobleizer", "allow_anon_post": true, "reactions_enabled": true, "reply_position": 1, "show_avatar": true, "allow_anon_votes": false, "disqus_auth_disabled": false}, "realtime_enabled": true, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 4, "forum": "scobleizer", "is_initial_load": true, "is_authenticated": false, "timestamp": "2009-12-17_09:56:09", "remote_domain": "", "page": 1, "is_moderator": false, "display_username": "", "points": null, "subscribe_on_post": 2, "moderator_can_edit": false, "is_remote": false, "is_verified": false, "missing_perm": "locked"}, "realtime_paused": false, "posts": {"9714560": {"up_voted": false, "ip": "", "has_replies": false, "message": "Thanks for the article, I agree with all the commenters that say it's important to be involved in your children's lives--not just talking TO them but WITH them.<br><br>What I think will be interesting, is the current generation of tweeners and 20-somethings having to explain all their online \"appearances\" to their kids.<br>Think about it:<br>\"Mommy, what are Girls Gone Wild?\", \"Daddy, who is Michael Phelps and what is that you are handing him?\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_22:35:10", "killed": false, "user_key": "552b199dadbb0e3af80c1ddf9c63bb0b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714561": {"up_voted": false, "ip": "", "has_replies": false, "message": "as a parent with a 9yo daughter I worry about what she's going to encounter on the web - but I also worry about TV and the mall - so we try to educate and inform and discuss. We use OpenDNS with filters set pretty high at home and an ever expanding hosts file. The PC is in the family area and only approved mail and IM contacts can communicate.<br><br>But I wouldn't trust Norton to look after my daughter. My experiences with their software have been less than savory over the years and running their installer is high on my list of things to do when I get a new machine with their cruftware on.<br><br>While I hope a convenient and reliable software solution is found (I suspect with an open and transparent peer to peer rating engine) I don't trust a filter to do the whole job any more than I'd let Aibo walk her to school ;)", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_15:10:00", "killed": false, "user_key": "d38db823058012e58e2517188b9f9bc0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714562": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Remember, Google sees all but it is selective about what it sees.\"<br><br>Isn't Gmail still the only major online mail service that does not show the originating IP address in the header? Yes, I think they are and the kids know and love this because it provide anonymity to attack their \"friends.\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_15:52:30", "killed": false, "user_key": "4e017c17439afa0f24efed39f4d2c6c3", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714563": {"up_voted": false, "ip": "", "has_replies": false, "message": "I whole-heartedly agree that talking to your kids about what is and isn't acceptable behavior online is key.  As someone with 9 nieces and nephews in their tweens and teens, I was surprised to see what they and some of their friends actually post online -- from potentially embarrassing pictures to rants about other kids -- I found it hard to believe that they didn't understand what some of the consequences of their posts could be.  I've spoken to my nieces and nephews about online safety, and in particular, about their online reputation and how that could affect them later.  I work at AOL and contribute to the SafetyClicks (<a href=\"http://http:www.safetyclicks.com\" rel=\"nofollow\">http:www.safetyclicks.com</a>) blog about online child safety, and we often stress the importance of parents talking to their kids about appropriate and inappropriate online behavior.<br><br>You also make a great point that simply blocking \"bad\" sites doesn't keep kids safe online.  The final Internet Safety Task Force report (<a href=\"http://cyber.law.harvard.edu/pubrelease/isttf/\" rel=\"nofollow\">http://cyber.law.harvard.edu/pubrelease/isttf/</a>) reinforces that sentiment in their findings by saying that technology plays a helpful role, but should be combined with parental oversight and education.  For years, AOL has advocated that parents use AOL Parental Controls (<a href=\"http://parentalcontrols.aol.com\" rel=\"nofollow\">http://parentalcontrols.aol.com</a>) as a way to start a conversation with their kids about online safety.  As kids increase their online time, it's more important than ever for parents to educate themselves about the technology their kids are using, and to have open conversations with them about how to keep safe.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_17:02:43", "killed": false, "user_key": "68e3b37dff1b48efbd4e61ece838a890", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714564": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the software companies are missing the mark.  It's great that they get that kids work around any barrier you put up and do more than just talk with creepy old men.  However, there is no substitute for a conversation with kids, since they are the ones who will be out there in the danger zone making choices.  No software company can simulate it, nor should they.  If a parent is seeking a software solution for online child safety and reputation management, the parent doesn't get it.<br><br>In four years as a middle school teacher by day and online child decoy by night, I got some great anecdotes from students who didn't know what I did when I went home in the evenings.  There was a high schooler who saw Dateline and talked with her mom about it and they agreed that she would be safer if she didn't participate in a particular social networking site.  I got the story because she was defending not being a member to a friend of hers with an air of \"I can't believe you participate there.  That's dangerous.\"  Another time my students found out and told me about the conversations they initiated with their parents.  Two years later one reported that she still remembered the safety lessons I imparted to them.<br><br>Software companies who are trying to sell something in this space are not serving their customers the best they can, in my opinion.  If Norton were to set up an online community for parents to participate in and get tips and guidelines on how to have those conversations with their kids, when to have them and what to do if it's too late...  That would be valuable.  I'd like to see them add value that way rather than another product that feeds a horrible misconception: that software can take the place of conversation and understanding of the danger.  If they wanted to monetize it, offer live webinars to members of the community for a reasonable charge ($5 per IP.)<br><br>The dangers to our kids are readily apparent right now, and they are constantly shifting.  Right now I see the danger to children as being through parents, actually.  Parents see their kids in danger or endangering their future and want to protect them but are ill-informed to do so. In seeking out tools to help them, they get taken prey by software companies promising them their child's safety and security if they buy this product.  I hope Norton doesn't fall into this group of predatory companies.  That would be a shame.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_17:25:56", "killed": false, "user_key": "7499893b36ae93005807b38ef37ce5d6", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714565": {"up_voted": false, "ip": "", "has_replies": false, "message": "Great post, Robert!<br><br>I worked in network security for several years and this topic is near and dear to me, since I have a kid of my own.<br><br>What I do is fairly easy and requires no special software:<br><br>I have a hardware router and firewall and I do a couple of things. First, I filter access to my home network by MAC address to keep the wi-fi thieves away. Secondly, I take my kid's IP address and I set up a whitelist of websites. She can only visit those sites and no other. I check her computer and the router and firewall on a regular basis to ensure they are doing their respective jobs. I set up my kid's laptop with Ubuntu and I've set up additional filters on her machine to jive with the settings on the router and firewall. Works like a charm. No extra money needed.<br><br>Whitelists are far and away better than blackists because they are easier to implement and you don't have to worry about something sneaking in and around your particular set of values you establish for your family.  Likewise, your kid can only go where you deem fit. I've helped others with this and it works great. Most hardware routers also have a time restriction function to keep the kids off the net when you don't want them on.<br><br>Let's see more security stuff, Robert. I like when you wax poetic on multiple tech topics.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_20:06:52", "killed": false, "user_key": "4e6933625d1d051a71d6e61319458a70", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714566": {"up_voted": false, "ip": "", "has_replies": false, "message": "@RB<br><br>Quoth ye: \"Young kids learning to use the Internet are the rising stars of the information age and it is our task to guide them without censoring them.\"<br><br>I fully agree with this sentence shy of the last three words. It's a parents' job to censor their child. That's what movie and game ratings are for -- to help parents make informed decisions concerning what their kids see and hear. I know I censor my daughter and she appreciates it. She knows there is evil out there and she wants no part of it.<br><br>I worked as a network investigator for a very large ISP, and I can tell you first-hand that there are some very, very evil people out there that want to harm you and your kids. I've seen stuff I wish I could forget. I've families destroyed by what's online, marriages broken, kids exposed to all manner of evil and mischief.<br><br>Parents who fail to censor their kids' online activities fail them morally. Full stop. There is no arguing this. Young kids through about 15 should not be allowed to have access to an unfettered internet. Yes, they are the future of tech, but a damaged future holds no promise. I believe the statistics Robert provided are rather conservative based on my own observations in the network security world. It's better to be a little strict and have your kids mad then to have them become a victim.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_20:59:08", "killed": false, "user_key": "4e6933625d1d051a71d6e61319458a70", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714567": {"up_voted": false, "ip": "", "has_replies": false, "message": "Speaking of security, Nice Diggs Robert:  <a rel=\"nofollow\">Robert's Home</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_01:18:01", "killed": false, "user_key": "760cc0b1a36815a8878b8aea2e17cbcb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714568": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think that this article and accompanying comments are on the mark. However, educating the children is not the only solution - firstly, because software/hardware safeguards must be in place as well, and moreover the adults need the background and knowledge of the situation at hand to control and/or fight it.<br><br>Plus, children aside, I believe that safeguards must be in place for adults as well. Whether it is a monitoring program, filtering software, firewall, or what-have-you, I think that human nature might force even adults to do that which they might know is wrong and should not be done. The only way to safeguard that activity is to have the technology in place to keep them from wrongdoing.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_13:01:19", "killed": false, "user_key": "382b799a85df7f836b72c5411252e78b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714569": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hi Robert!<br><br>This is a good discussion, thanks for taking the time to kick it off. Our product Windows Live Family Safety has a related article for our customers (or future customers) on our blog at <a href=\"http://familysafety.spaces.live.com/blog/cns!5CE47D5D040962D1!1584.entry\" rel=\"nofollow\">http://familysafety.spaces.live.com/blog/cns!5CE47D5D040962D1!1584.entry</a><br><br>Kudos!<br><br>- Elizabeth Grigg", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_13:55:37", "killed": false, "user_key": "f26a97aa5468261379a716edbe86febe", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714570": {"up_voted": false, "ip": "", "has_replies": false, "message": "Timing couldn't be more perfect, my daughters's elementary school Principal called last night to remind us of the Online Safety meeting for parents and 6th graders that we are having Thursday night.<br>I will be forwarding this thread to her.<br>As with most of life's challenges Education and Context are vital.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_14:02:15", "killed": false, "user_key": "dc672c11cfe881f36908f66088626cae", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714571": {"up_voted": false, "ip": "", "has_replies": false, "message": "Great post.  It's nice to see greater attention being paid to what is an ever increasing challenge for today's kids.  Norton is the lead sponsor for a special edition <a href=\"http://Education.com\" rel=\"nofollow\">Education.com</a> has published on bullying on-line and at a school --- <a href=\"http://www.education.com/topic/school-bullying-teasing/\" rel=\"nofollow\">http://www.education.com/topic/school-bullying-...</a>.  There are a number of things parents can do to give their kids the presence of mind to handle tough social situations - both as the bullied and as the bully.<br><br>The new Norton product is a major innovation and gives parents the tools they need to begin an active dialogue with their kids and to help protect them from the uglier side of the Internet.  I recommend every parent of a school-aged child check out the product when it becomes generally available.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_17:02:40", "killed": false, "user_key": "3573cbae1e8aac31de3b46f3ac32b578", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714572": {"up_voted": false, "ip": "", "has_replies": false, "message": "Picking up on some of the earlier notes some of you will probably be interested to know that there are software solutions available already to protect children using mobile phones. The general concensus that I've seen from children's charities and child experts is that while there are definite risks to children using mobile phones from a your age the downsides are outweighed by the positives - both safety and convenience. Secondly, it's just unrealistic to think that you'll be able to resist giving your child a mobile phone sooner rather than later - 'you can't duck technology, you have to deal with it!'.<br><br>I'm the CEO of an Irish start-up software company (<a href=\"http://www.sentrywireless.com\" rel=\"nofollow\">www.sentrywireless.com</a>) that has developed and launched software that helps 'teach children about responsible mobile usage'. We won the title of \"Most Innovagtive Mobile Start-up in the Asia Pacific\" for it's launch in Singapore.  Using a regular mobile phone (none of those kiddy ones that children laugh at) parents are allowed to 'approve the numbers in the phone book with a PIN number. Once they've done this (it takes less than 15 seconds from first touching teh handset to completion) it means that that not only are these the only numbers the child can call or text but also (more importantly?) these are the only people who can contact the child - so only approved people get through and not strangers! (a white list of approved contacts)<br><br>James from earlier today (7.24am) I think got it just right in terms of what a good solution should do:<br><br>SMART technology should be able to: (allow me to repeat)<br><br>1) Have a part to play to help educate children (without taking away the fun)<br>2) Provide reassurance to parents (by providing them information when there is a problem)<br>3) And not be spying! (which creates parent/child trust issues).<br><br>We think that when the child is young / naive the parent will control the phone tightly. As the child matures and shows that they are more aware they will have freer use of the phone and at some point the parent will give them the PIN number so that they can enter and remove numbers as they choose .. but still be protected from complete strangers. Eventually they will have no controls.<br><br>Kidsafe has a parent alert built in so that if the child tries to remove the SIM card and place it in another phone that miught not protect the parent will automatically send an SMS to the parent warning them. It also captures the main details of the blocked calls and text messages which only the parent can see. This allows the parent detect if there might be an issue e.g. they see a strange number trying repeatedly to contact the child late at night.<br><br>However, to James third point about NOT spying) it doesn't capture the content of any text message - sent to a blocked or approved number. It could do from a technical perspective but we believe that it's a could of steps too far and would create real trust issues with the child.<br><br>Without wishing to scare anyone there's lots of hard data and media reports showing that almost half (39% in Ireland) of kids are either bullied themselves or know a close friend who has been bullied via their mobile phone. Because of the nature of the device children use them outside of the home and away from their parents protective reach. That increases the risk.<br><br>Kidsafe has already been launched with a mobile operator in Ireland and also Singapore. Unfortunately we're not in a position to sell directly to consumers but as is always the case in these circumstances the only way that you'll get the protection for your child is by demanding it. Kidsafe isn't the only solution available to operators (though I do think it's the best!!) but if you want your kids to be protected you should tell them and let them know - call customer service, write an email and ask what they're doing and point out other operators (<a href=\"http://www.m1.com.sg\" rel=\"nofollow\">www.m1.com.sg</a>) and <a href=\"http://www.three.ie\" rel=\"nofollow\">www.three.ie</a> have proactively addressed the situation. Apologies for going on so long - can't help but be passionate.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_17:57:21", "killed": false, "user_key": "f1fb571a04201fef1d7884ba0591f9cb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714573": {"up_voted": false, "ip": "", "has_replies": false, "message": "Some people here seem to put in serious efforts to \"protect\" their kids from outside threads.<br><br>I wonder how these people organize their social live. Are they aware that 90% of all real life sex crimes against children are committed by people close to the kids: Family members, friends of the family, teachers ... ??<br><br>Yes, we also teach our kids why they shouldn't provide personal information on public web sites, we talk about what might happen to them when they visit disturbing web pages (having ugly dreams for two weeks at least). But at the end this is just part of the normal \"get them ready for the world\" education.<br><br>Its on the same level as teaching them how to cross the street or what to eat and what not. Nothing more, nothing less. Just something what must be done but no reason to panic.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-12_17:14:07", "killed": false, "user_key": "34d200f533715898b50dc27781527180", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714574": {"up_voted": false, "ip": "", "has_replies": false, "message": "<a href=\"http://InternetSafety.com\" rel=\"nofollow\">InternetSafety.com</a> provides an array of safety features for kids online - their program \"Safe Eyes\" sends parents text messages to alert them when their child has attempted to access something inappropriate. This leads to more open and honest discussions between parents and children as opposed to just blindly blocking websites with no explanation.<br><br>They recently release an application for the iPhone, the only one of its kind, that will protect kids on the go!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-12_18:03:28", "killed": false, "user_key": "9c7b3649b302804de35e31befea88d46", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714575": {"up_voted": false, "ip": "", "has_replies": false, "message": "We'll do open DNS eventually, but for now our 5-year-old's perfectly content with Glubble's FireFox-friendly, well laid out, and safe browser:  <a href=\"http://glubble.com/\" rel=\"nofollow\">http://glubble.com/</a>  The family social network part of this service is great too.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-14_13:40:21", "killed": false, "user_key": "a8f159388c73876ea80c22f1267cd61d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10567987": {"up_voted": false, "ip": "", "has_replies": false, "message": "Our company may be of interest to some parents: <a href=\"http://www.securinu.com\" rel=\"nofollow\">www.securinu.com</a><br><br>Kind Regards", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-06-06_14:52:32", "killed": false, "user_key": "017329173ff75324d2822770f49f9285", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714539": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"29% had been bullied.\"<br><br>Compared to probably 40%-50% that they are bullied in the real world.<br><br>I agree that parents and kids need to be educated about the \"dangers\" of the Internet - the same way kids are educated about how not to grab a hot pan, or jay-walk. And parents need to supervise the same way they do when their younger kids are cooking.  But I don't think we need to overreact much either.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_08:36:29", "killed": false, "user_key": "1f1c34c170bdce4307c18f1ba7b3c3e9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714540": {"up_voted": false, "ip": "", "has_replies": false, "message": "It's called Digital Literacy. You engage with your community and you open out the issues and discuss them. Not many governments or institutions seem to \"get\" this yet. It's all moral panic and run screaming to block stuff. A lot of much younger kids have facebook accounts or worse and are surfing in areas they shouldn't be. A lot of research suggests that most kids are pretty savvy but that those at risk in the \"physical world\" offline will be just as vulnerable online if not more so.<br><br>So what do you do? Have a concentrated program of getting information out to and debate about it with parents, teachers, carers etc. Let people know the sanctions as well as the pitfalls. If you don't talk about it and explore how to keep your kids safe and let them know strategies for combatting and safely navigating the online world with all it's attendant risks then you're just sweeping it under the carpet and not addressing the problem. There needs to be a general awareness campaign in schools and not just the shock horror tactics - I'll bet if you conducted and anonymous survey of younger kids and asked them if they are in areas they shouldn't be you'd be surprised.<br><br>You can't stop it - and when mobile devices become ubiquitous it will be totally unstoppable - so you then educate and engage and inform. You also remain vigilant and know what's happening. It's about community and people as usual - not the tech.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_08:43:51", "killed": false, "user_key": "1b5111af308a18c3e3e2260b2d0ebe3e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714541": {"up_voted": false, "ip": "", "has_replies": false, "message": "Unfortunately educators are late with these new communication tools. Also are the parents. So what frighten me is that nobody is able to care about that. We are not usual parents. We are connected ones. So who could take care about that. I really don't know. This is bad.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:07:12", "killed": false, "user_key": "ba7f01ec9e8334f6a376aaa90b34d320", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714542": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hey Robert,<br><br>this is where Glubble will help you. We provide parents the tools to support their children discover the web and social networking. Instead of locking children or the computer down, or trying to be the experts for parents, we let parents take the responsibility and build a safe and fun web for their children. This way parents can teach their children to be good citizens in the online world. Glubble is directly integrated into Firefox and comes with safe browsing, search, fun content, twitter, and photo sharing for families, and more.<br><br>You can check it out here: <a href=\"http://www.glubble.com\" rel=\"nofollow\">www.glubble.com</a><br>Or look at this video: <a href=\"http://www.glubble.com/learn_more\" rel=\"nofollow\">http://www.glubble.com/learn_more</a><br><br>Sorry for the plug, but it fits the discussion.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_13:02:15", "killed": false, "user_key": "b11a9a7bee6fc07723be3e8aea636835", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714543": {"up_voted": false, "ip": "", "has_replies": false, "message": "It is Safer Internet Day in the UK here - so good timing - forgot to include this site :<br><br><a href=\"http://www.thinkyouknow.co.uk/teachers/\" rel=\"nofollow\">http://www.thinkyouknow.co.uk/teachers/</a><br><br>Might help some people.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:12:58", "killed": false, "user_key": "1b5111af308a18c3e3e2260b2d0ebe3e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714544": {"up_voted": false, "ip": "", "has_replies": false, "message": "Thank you for taking on this topic.  I look forward to hearing the responses.  My sons are almost 7, and are total Webkinz and <a href=\"http://Lego.com\" rel=\"nofollow\">Lego.com</a> addicts.  They don't email friends yet, but they hate me when I limit their online time and kick them off the computer when they would play games all weekend long if I didn't set a timer and step in and be a parent.  Starting early by limiting online time for them is key at a young age, and only letting them use the computer as a privilege seems to be working here.<br><br>What I worry about is them being hurt by friends as well.  Even now, at age 40, I stumble upon my ex-husbands girlfriend's blog, which explains details of them being in places I spent my most intimate years with him.  Him reciting the same songs he used to sing to me.  It really hurts, and I'm a grown up, right?  Painful things are still painful, but with age and experience, we learn to accept some things better.  How does this kind of behavior affect a child?  To see these things happen right in your face, on Facebook?  It is as if bullying and the pain of failed relationships has been amplified to deafen even the strongest spirit.<br><br>The key, I believe, is to teach kids that there is more to life than being online, and this means to show them that with our own actions, and our own values.  Get out.  Climb a mountain with them daily.  Hike more, email less.  Set days of the week where you don't even touch your own computer, iPhone or other tech gadget when the kids are home at all.  If the kids see you playing with 10 computers on your desk from day one, isn't that all they will end up thinking is cool?<br><br>I think being a parent is more than just discussing what they do online with them, but it is setting a good example by limiting our own behavior.  We are all going to share ourselves online in some way, but teaching them what to share and what to keep private is tough.  What a challenge.  I hope things are easier by the time my kids are teens online. : )", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:04:33", "killed": false, "user_key": "f36709c79df3729496e35f6219657d6b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714545": {"up_voted": false, "ip": "", "has_replies": false, "message": "Timely topic. I am dealing with a 14 year old girl and this and the crap they call movies is keeping me very busy.<br><br>For example a month ago, she wanted to go to movies, well we screwed up and did not google the time slot and just went to find her selected movie did not start for another 3 hours. So I saw the banner for a golden globe honoree \"The Reader\"- hey a movie about reading cool. Wrong<br><br>Little did I know that I took my daughter to an intermittent softporn movie. I was very embarrassed but let her enjoy the good parts.  However afterward the awkwardness got us talking and she was able to talk about subject matter that we haven't thus far either out of my fear or hers. And I thought better I be there than her learn on her own with her friends with their spin.<br><br>Later we got suckered in to see the action flick \"Taken\" the worst fears a father can have-- a girl taken to be sold in the sex slave trade. The victim looked remarkably like my daughter. Which made me quite grateful for the safety and security of daughter.  We had some great conversations afterward as well. Confronting our worst fears made us come closer together and removed some of our fears and hopefully put in some safeguards for future behavior.<br><br>Robert, I totally agree that parental involvement and education is key to avoiding negative outcomes of these fascinating, and extremely powerful tools.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_08:26:03", "killed": false, "user_key": "5cca4b69038c717df9f4c63e458bb459", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714546": {"up_voted": false, "ip": "", "has_replies": false, "message": "We have parental controls set on our kids' e-mail accounts so that they can only receive e-mail from approved senders (family members and close friends that we know and trust).  We also have parental controls on their login for the internet.  There are only a few sites they are allowed to visit and none of them involve any chat.  Some are games but many are educational.  We also keep a laptop in the family room so we are always right there when they are on the internet and can see what they are up to.  Even more important than all that, IMHO, is to keep open communication with your kids so they will feel safe talking to you about anything, including anything strange they encounter on the internet.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_08:40:16", "killed": false, "user_key": "0f41d4d94c87ddf9bc57098e99504dd6", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714547": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert - thanks for discussing such an important issue.<br><br>I'm looking into <a href=\"http://www.opendns.com/\" rel=\"nofollow\">http://www.opendns.com/</a> to assist with parental controls etc in addition to educating my 'advanced' five year old! Would be interested in other tools also.<br><br>I don't see the internet any different to the wider world. You wouldn't let your child go out in to the world unprotected or uneducated against risks - the internet should not be any different.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_08:41:14", "killed": false, "user_key": "1db0b5f3517fc79fabca853d39ec7ba2", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714548": {"up_voted": false, "ip": "", "has_replies": false, "message": "I totally agree with the \"get over it\" part.  Honesty and transparency go way past my Twitter acct.  My kid is going to see things I don't want him to see, and that's that.  Nothing I can do will prevent it- how he reacts, though, will be largely up how I choose to parent.<br><br>If we can conceptualize social media's changing landscape (imagining when kids make fun of facebooking parents the way we made fun of the 8 track- already happening, BTW), we should be able to think about the ways kids can use social media to participate in a kid's version of society.  Without guidance, it's multiplayer Lord of the Flies.<br><br>Teaching kids to think critically about the decisions they make is the key to internet safety.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:03:00", "killed": false, "user_key": "b240e76e30f8b68b5e351aaf26950e96", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714549": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert,<br><br>Not sure if you know why this is the buzz right now, but in the Ed Tech sphere it is because of the 2009 Berkman report on online safety that was just released.  It basically confirms what Jody Gibney is saying (Or is this where she got her info?).  Check out this blog for the links a synopsis and links:<br><a href=\"http://www.dangerouslyirrelevant.org/2009/01/2009-berkman-report-on-online-safety.html\" rel=\"nofollow\">http://www.dangerouslyirrelevant.org/2009/01/20...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_14:52:03", "killed": false, "user_key": "05ecef2c0da11319b239d426acd22d4f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714550": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert,<br><br>Lest we forget our excellent conversation with Commissioner Jonathan Adelstein of the FCC last summer. I'm surprised you didn't link back to this.<br><br><a href=\"http://www.fastcompany.tv/video/talking-child-protection-issues-with-fcc-commissioner\" rel=\"nofollow\">http://www.fastcompany.tv/video/talking-child-p...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_12:41:29", "killed": false, "user_key": "98440694bc9208fba43c88865b0fbb6b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714551": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"You blokes look up tight. You should try logging off; it relieves tension\" --Ray Tracer.  (The Return of the Crimson Binome)", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_10:32:08", "killed": false, "user_key": "7f6291e8344b594235e57b843fc05d9b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714552": {"up_voted": false, "ip": "", "has_replies": false, "message": "A timely article for sure.<br><br>I completely agree that the need for education for both children and parents is a constant requirement - the question for me is, how can parents protect their kids in the meantime?<br><br>More often than not, parents have little real idea of what the children spend their time doing - looking at website lists is, as has already been pointed out, not the whole story - if children want to see most things on the internet then YouTube (to name just one popular site) will have something for sure.<br><br>Fact is, children use the internet as a communications tool, be it social networks or instant messenger - THESE are the places kids hang out and therefore old school parental \"controls\" style tools arent enough - websites are always bad, but the people who use them can be. Is Facebook inherently \"bad\"? No. Is there a risk of cyberbullying and reputation risk? Yes. Blocking a common website isnt the answer now.<br><br>Today, I feel it is more about the appropriateness of communication between children and others, it is about how they represent themselves online, and how they can (safely) learn what to communicate and when. \"Parental Controls\" are ok when you want to block sites, but the game has moved on and these \"control\" technologies have not. Just simple keyword matching is too unsophisticated to be used properly in the real world. Kids DO swear a bit - people DO fly Virgin and yes, even live in Scunthorpe...all would trigger keyword matches (!) but does a parent have to know EVERY time a word looks bad (even when, in context, it isnt?) when this irepresents little real danger? The result is \"cry-wolf\" parental control products that just get ignored after a while.<br><br>SMART technology should be able to -<br><br>1) Have a part to play to help educate children (without taking away the fun)<br>2) Provide reassurance to parents (by providing them information when there is a problem)<br>3) And not be spying! (which creates parent/child trust issues).<br><br>Clever, active technologies that \"learn\" and understand context as well as content can help be a cornerstone in the family's online \"policy\" when used alongside sensible education and discussion.<br><br>Parents need help, as well as advice, in navigating the online world in order to best keep their children safe - they cannot be realistically expected to become online child safety experts overnight.<br><br>There are tools out there that are beginning to help parents achieve this \"safe but free\" state with their kids - the laudable efforts of the guys at <a href=\"http://www.imsafer.com\" rel=\"nofollow\">www.imsafer.com</a> show what can be achieved when the problem is properly understood from a parents perspective - and it doesnt have to cost a penny....<br><br>Great article and thread.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_10:24:31", "killed": false, "user_key": "30d97b9979cd26a99405139a1831c17f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714553": {"up_voted": false, "ip": "", "has_replies": false, "message": "Part of the issue is that parents and teachers are both guilty of not teaching their kids how to use the Internet responsibly.  Would you let your child who is learning to read pronounce words in an incorrect way? No. The same should be true with Internet literacy. But, the problem goes deeper than that. There is so much information and so much BAD information.  There are very few sites that can be trusted. Google spits back result after result, but even I, with a keen eye for differentiating good from bad information have been guilty of relying on  information filled with holes and errors. How will our students/children know the difference? I would say  that at this time, it's important to find one or two search engines that are safe.  Sites like PBS (<a href=\"http://www.pbs.com\" rel=\"nofollow\">http://www.pbs.com</a>)  and <a href=\"http://SweetSearch.com\" rel=\"nofollow\">SweetSearch.com</a> (<a href=\"http://www.sweetsearch.com\" rel=\"nofollow\">http://www.sweetsearch.com</a>) are the sites I rely on for kids. Both provide adequate information and games and \"sweet Search\" is hand-picked sites, which are guaranteed to be safe for kids, while providing quality results. A new issue of learning in the future is going to be information literacy...and it's long overdue.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_10:21:13", "killed": false, "user_key": "90df7fac7c4e9a98ffe6cf6d54d0c532", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714554": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the time when mobile devices become ubiquitous is here already. I can't look at a teenager without seeing an iPhone in their hand. Even if the parent refuses to get a teen their own cell phone account, the iPod Touch, handheld video games and other devices have wifi built in. At this point it becomes impossible to control what they are viewing.<br>Teens today are aware of just about everything regarding sexuality. Your only hope is that you have instilled your values into them at the pre-teen age.<br>This doesn't mean you can't control it at home, dont give a young teen a computer and webcam in their own room, etc.<br>As far as bullying, where is the outrage of this happening in real life? It happened to me for years and I absolutely hated middle school because of it. School administrators did nothing to try to stop bullying.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:25:12", "killed": false, "user_key": "fec53dcbc6cf4908528cb3f956433d48", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714555": {"up_voted": false, "ip": "", "has_replies": false, "message": "You write: \"The new way to keep kids safe isn\u2019t to try to block them from going to nasty sites: it\u2019s all about educating them about what is good behavior and is bad.\" I'd add to that that we need to show kids the *real* value of the Internet--its potential as an education and research tool. Good online behavior means making the most of Web's rigorous resources.<br><br>Young kids learning to use the Internet are the rising stars of the information age and it is our task to guide them without censoring them. Human-edited search engines like <a href=\"http://www.SweetSearch.com\" rel=\"nofollow\">www.SweetSearch.com</a> are targeted at that type of hands on learning. Kids have the power and the freedom, but SweetSearch includes almost exclusively research, news and education sites. The young habitually come to see the ways the Internet is empowering, not destructive.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:17:58", "killed": false, "user_key": "8121147b6e592bbe8b0eff587da5537c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714556": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree with Dave (although I'm not sure about the figures). Kids are at risk from their own peers. They are bullied by other kids they know. Why don't I see reviews of the kids safety in school, on the playground or sports activitys? Rarely will children talk about things troubling them unless asked. Or if the situation has gone way to far. Lets ask them a bit more often, eh! Review schools like the Internet is reviewed. Grade them from a child-safety point of view. Support and educate parents in supporting their children and let the kids be kids. Don't lumber the responsibility on them.<br><br>Joel Leonard: Well said!<br><br>Good post", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_09:15:38", "killed": false, "user_key": "6a7b5427747ffedefbd730103ec18a34", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714557": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the first step to protect kids is to educate parents. The problem is the big technology gap between the technology that most parents \"grew up\" with and how kids use technology these days. Some parents believe that keeping their kids away from technology at home will keep them safe.. Those are the kids that are at the highest risk - because all kids will have access to technology at some place at some time. Beyond that - technology is already apart of how tweens/teens communicate.<br><br>So I suggest to all parents to spend time educating themselves then spend time educating their kids. Implement internet security on all computers at home - but also explain why it is important to have security.  Try to have computers in public spaces - or if kids have laptops it is important to set timing limitations for internet use.<br><br>Parents also need to understand the technology within a computer. Don't think that kids won't figure out how to use the internal video camera to video chat - assume they will and help them understand what is and is NOT appropriate when it comes to video chat (or disable the camera). I could go on, but so happy you got this discussion going.<br><br>I also read \"Ask Marian\" which is a blogger that works for Symantec and talks about online security and safety for kids and families.<br><a href=\"http://community.norton.com/t5/blogs/blogpage/blog-id/askmarian\" rel=\"nofollow\">http://community.norton.com/t5/blogs/blogpage/b...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-11_00:48:57", "killed": false, "user_key": "b31a37da7801bb30c10950c253c8f59d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9714558": {"up_voted": false, "ip": "", "has_replies": false, "message": "So parents have to actually talk to their own children now? This is America. Only queers and hippies talk to their kids. Must be that Obama guy's fault. Did you know he's a secret muslin?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2009-02-10_23:10:40", "killed": false, "user_key": "19c98a346a55dc106a8a4c99b2d67799", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "10 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}}, "integration": {"receiver_url": "", "theme": 4, "reply_position": true, "disqus_logo": false}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "18347667", "user_id": "anonymous", "forum_id": "125200", "hash": 3064187291166665891}, "thread": {"total_posts": 0, "paginate": false, "per_page": 0, "slug": "keeping_kids_online_safe", "num_pages": 1, "days_alive": 0, "realtime_paused": true, "id": 18347667, "num_posts": 37, "closed": true, "queued": false, "killed": false}, "reactions_limit": 10, "context": {"show_reply": false, "use_fb_connect": true, "forum_facebook_key": "faaf467d0f47abde553c3b8e0e1b3570", "use_yahoo": false, "subscribed": false, "use_twitter_signin": true, "use_openid": false, "realtime_speed": 5000}, "reactions_start": 0, "settings": {"debug": false, "disqus_url": "http://disqus.com", "media_url": "http://media.disqus.com"}, "media_url": "http://media.disqus.com"};
	/* */ this.jsonData.cookie_messages = {"user_created": null, "post_has_profile": null, "post_twitter": null, "post_not_approved": null}; this.jsonData.session = {"url": null, "name": null, "email": null}; /* */

	
	this.curPageId = 'dsq-comments';

	this.frames = {};
};

var disqus_popup_reference = null;

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



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

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

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

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

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

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

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

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

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





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



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

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

	this._lastHash = null;

	this._accumMsg = '';

	this._lastSeqno = 0;

	this.MAX_DATA_LEN	= 1024;

	this.WAIT_TIME		= 10;

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

};

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

FragmentPacket.prototype.log = function(msg) {



};

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

		hash = this.reader.name;
	} else {

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

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

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

		this._lastSeqno = seqno;

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

				this._accumMsg = '';

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

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

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

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

};

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

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

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

	if (packetNum === 0) {

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

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

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

	if (num_packets === packetNum) {

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

	this._lastSeqno++;

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

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

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

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

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

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


	this.receiverId = receiverId;
};

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

	var listener = function(e) {

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


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

		that.receiveCallback(data);
	};

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

PostMessagePacket.prototype.send = function(msg) {



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


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

	var packet;
	if (!msg) {

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

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

var JsonRpc = function() {

	this.ids = {};

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

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

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

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

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

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

				json = 'null';
				break;
		}

		return json;
	};

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

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

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

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

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

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

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

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

		send_func(this.objectToJSON(request));

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

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


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



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


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


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

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

	this.packetHandler = null;


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


	var _createReceiverForFragmentPacket = function() {

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

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

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

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

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

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

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

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

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

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

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

			that._ready = true;
		};

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

		that.receiver.onload = receiver_onload;







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

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

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

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


	var _createReceiverForPostMessage = function() {

		var receiver_onload = function() {

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

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


		ParentMessenger['_receiver_onload_' + receiverId] = receiver_onload;

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

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

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

};

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

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

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

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

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

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

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

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

	var sendFunc = function(msg) {

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


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


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

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

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

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

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

		if (msg.username) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	var handleSessionData = function(session) {

		var forum_url = Dsq.jsonData.forum.url;




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

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

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


	






Dsq.Themes = {};

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



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

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

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

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

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

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

		
			html += Dsq.Templates.trackbacks();
		


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

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

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

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

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

		return html;
	};

	this.postBox = function(post_id, use_fallback_iframe) {


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

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


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

		var _requestUserInfo = function() {
			var html;



			var user_has_email = false;

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

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

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


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



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

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




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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



	
	this.chooseSubscribe = function(post_id) {

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

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

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

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

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

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

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

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

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

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

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

		d = auth_data;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

				body.appendChild(edit_area);

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

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

		Dsq.Templates.toggleEdit(post_id);
	};

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

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

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

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

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

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

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

		}

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

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

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

		var extra_params = '';

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

		Dsq.$('dsq-pagination').innerHTML += '<img src="http://media.disqus.com/images/loading-small.gif">';
		
		if(el_clicked) {
			Dsq.Templates.setLoadingButton(el_clicked);
		}
		
		Dsq.Utils.execScript('http://disqus.com/forums/scobleizer/thread.js'
			+ '?slug='	+ 'keeping_kids_online_safe'
			+ '&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/scobleizer/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://scobleizer.disqus.com/keeping_kids_online_safe/reply.html';
	this.REQUEST_USER_PROFILE = '/AnonymousUser/';
	this.REQUEST_USER_AVATAR = 'http://media.disqus.com/images/noavatar92.png';
};
// Dsq.Urls

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

		return [windowWidth, windowHeight];
	}

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

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

		return [scrollWidth, scrollTop];
	}

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

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

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

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

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

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

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

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

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

				form.appendChild(input);
			}
		}

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

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

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

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

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

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

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

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

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

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

		return params;
	};

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

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

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

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

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

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

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

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

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

	};

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

};
// Dsq.Utils

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

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

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

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

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

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

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

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

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

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

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

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

	};

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

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

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

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

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

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

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

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

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

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

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

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

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

	this.remoteAccountSettings = function() {
		var body = '';
		// Set up IFrame.
		var params = {};
		var base_url = 'http://disqus.com/forums/scobleizer/_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">37</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://scobleizer.disqus.com/keeping_kids_online_safe/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://scobleizer.disqus.com/keeping_kids_online_safe/">Community Page</a>&nbsp;&nbsp;&nbsp;</span>\
	 <span class="dsq-item-subscribe">\
	 <img src="http://media.disqus.com/images/embed/email.png" style="width:12px;height:12px;vertical-align:middle">\
	 <span id="dsq-subscribe">\
	 <a href="#" onclick="Dsq.Thread.subscribe(1); return false">Subscribe by email</a>\
	 </span>\
	 </span>\
	 </div>\
	 <div id="dsq-alerts">\
	 <p>Comments for this page are closed.</p>\
	 </div>\
		';

		

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

		
			html += Dsq.Templates.trackbacks();
		

		return html;
	};

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

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

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

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

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

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

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

		return html;
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//
	// Post
	//

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

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

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

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

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

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

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

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

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

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

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

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

		return ' \
			<div class="dsq-comment-footer" id="dsq-comment-footer-' + post_id + '"> \
				<div id="dsq-points-' + post_id + '" class="dsq-likedtxt">'
				+ (_meta.points
					? _meta.points + Dsq.Utils.pluralize(_meta.points, ' person', ' people') + ' liked this comment.'
					: '')
				+ '</div>'
				+ '<ul class="dsq-comment-options dsq-list-style">'
				+ (_meta.votable
					? '<li class="dsq-list-first dsq-rate" id="dsq-rate-cont-' + post_id + '">'
					+ (!_meta.up_voted
						? '<a href="#" onclick="Dsq.Post.rate(this, ' + post_id + ', 1); return false;">Like</a>'
						: 'You liked this.') + '</li>'
					: '')
				+ '<li class="dsq-report' + (!_meta.votable ? ' dsq-list-first' : '') + '" id="dsq-post-report-' + post_id + '"><a href="#" class="dsq-post-report" onclick="Dsq.Post.report(' + post_id + ', false); return false;">Report</a></li> \
				</ul> \
				<ul class="dsq-list-style">'
				+ (_meta.can_reply
					? '<li class="dsq-list-first"><a href="#" id="dsq-reply-link-' + post_id +'" onclick="Dsq.Post.toggleReply(this, ' + post_id +'); return false;">Reply</a></li>'
					: '')
				+ (_meta.can_reply && !_meta.has_replies && _meta.from_request_user
					? '<li id="dsq-edit-el-' + post_id + '"><a id="dsq-edit-link-' + post_id + '" href="#" onclick="Dsq.Post.edit(this, ' + post_id + '); return false;">Edit</a></li>'
					: '')
				+ '<li class="' + (!_meta.can_reply ? 'dsq-list-first' : '') + '" id="dsq-more-el-' + post_id + '"><a id="dsq-more-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'more\'); return false">More <small>&#9660;</small></a></li>'
				+ (Dsq.jsonData.forum.use_media
					? '<li id="dsq-media-el-' + post_id +'" style="display:none"><a id="dsq-media-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'media\'); return false">Use Media <small>&#9660;</small></a></li>'
					: '')
				+ '</ul>'
				+ '<div id="dsq-reply-bar-' + post_id + '" class="dsq-reply-bar" style="display:none"> \
						<div id="dsq-reply-bar-items-' + post_id + '" class="dsq-reply-bar-items"> \
						</div> \
						<div id="dsq-reply-bar-auth-' + post_id + '" class="dsq-reply-bar-auth"> \
							 \
								 \
								 	<a href="#" class="dsq-help dsq-reply-req-opt" title="You are commenting as a Guest. You may choose to log into an existing DISQUS Profile, your Facebook, Twitter or OpenID account to comment on Scobleizer" 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:18347667" 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> \
								 \
								 \
							 \
						</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'				: 'scobleizer',
			't'				: 'keeping_kids_online_safe',
			// 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/scobleizer/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/scobleizer/keeping_kids_online_safe/post_report/', {'post_id': id});
			Dsq.Popup.popModal('Thank you. This comment has been flagged for moderator attention.', 'Successfully flagged');
			Dsq.Utils.deleteNode(Dsq.$('dsq-post-report-' + id));
		} else {
			var title = Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT;
			var message = Dsq.Strings.ARE_YOU_SURE_YOU_WOULD_LIKE_TO_REPORT_THIS_COMMENT_TO_A_MODERATOR + '? \
			<br /><br /> \
			<button type="button" onclick="Dsq.Popup._closePopup(null, true)"><strong>' + Dsq.Strings.NO + '</strong>, ' + Dsq.Strings.NEVER_MIND + '</button>&nbsp;&nbsp;&nbsp;<button type="button" onclick="Dsq.Post.report(' + id + ', true);"><strong>' + Dsq.Strings.YES + '</strong>, ' + Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT + '</button><br /><br />'
			+ Dsq.Strings.THIS_WILL_FLAG_COMMENTS_FOR_MODERATORS_TO_TAKE_ACTION + '. \
			';

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



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

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

};
// Dsq.Post


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

	
	this.adminIsOn = false;

	
	
	

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

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

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

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

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

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

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

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

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

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

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


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

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

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

		Dsq.$('dsq-pagination').innerHTML += '<img src="http://media.disqus.com/images/loading-small.gif">';
		
		if(el_clicked) {
			el_clicked.style.display = 'none';
		}
		
		Dsq.Utils.execScript('http://disqus.com/forums/scobleizer/thread.js'
			+ '?slug='	+ 'keeping_kids_online_safe'
			+ '&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/scobleizer/thread.js'
			+ '?slug='	+ 'keeping_kids_online_safe'
			+ '&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/scobleizer/subscribe.js'
				+'?status=' 	+ status
				+ '&slug='		+ 'keeping_kids_online_safe'
				+ '&email=' 	+ encodeURIComponent(email));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	return obj;
}();

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

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

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

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

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

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

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

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

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

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

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

	this.check = function() {
		if (!ongoing_request && Dsq.jsonData.realtime_enabled) {
			if (prev_script) {
				prev_script.parentNode.removeChild(prev_script);
			}
			ongoing_request = true;
			prev_script = Dsq.Utils.execScript('http://disqus.com/forums/18347667/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/scobleizer/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/scobleizer/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-9714545">\
	 <div id="dsq-comment-header-9714545" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714545" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714545" href="http://www.plantservices.com/skilltv/" target="_blank" rel="nofollow">Joel Leonard</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714545" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714545" class="dsq-comment-message">Timely topic. I am dealing with a 14 year old girl and this and the crap they call movies is keeping me very busy.<br><br>For example a month ago, she wanted to go to movies, well we screwed up and did not google the time slot and just went to find her selected movie did not start for another 3 hours. So I saw the banner for a golden globe honoree "The Reader"- hey a movie about reading cool. Wrong<br><br>Little did I know that I took my daughter to an intermittent softporn movie. I was very embarrassed but let her enjoy the good parts.  However afterward the awkwardness got us talking and she was able to talk about subject matter that we haven\'t thus far either out of my fear or hers. And I thought better I be there than her learn on her own with her friends with their spin.<br><br>Later we got suckered in to see the action flick "Taken" the worst fears a father can have-- a girl taken to be sold in the sex slave trade. The victim looked remarkably like my daughter. Which made me quite grateful for the safety and security of daughter.  We had some great conversations afterward as well. Confronting our worst fears made us come closer together and removed some of our fears and hopefully put in some safeguards for future behavior.<br><br>Robert, I totally agree that parental involvement and education is key to avoiding negative outcomes of these fascinating, and extremely powerful tools.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714539">\
	 <div id="dsq-comment-header-9714539" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714539" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714539">Dave</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714539" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714539" class="dsq-comment-message">"29% had been bullied."<br><br>Compared to probably 40%-50% that they are bullied in the real world.<br><br>I agree that parents and kids need to be educated about the "dangers" of the Internet - the same way kids are educated about how not to grab a hot pan, or jay-walk. And parents need to supervise the same way they do when their younger kids are cooking.  But I don\'t think we need to overreact much either.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714546">\
	 <div id="dsq-comment-header-9714546" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714546" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714546" href="http://www.somuchmorethanamom.wordpress.com/" target="_blank" rel="nofollow">So Much More Than A Mom</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714546" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714546" class="dsq-comment-message">We have parental controls set on our kids\' e-mail accounts so that they can only receive e-mail from approved senders (family members and close friends that we know and trust).  We also have parental controls on their login for the internet.  There are only a few sites they are allowed to visit and none of them involve any chat.  Some are games but many are educational.  We also keep a laptop in the family room so we are always right there when they are on the internet and can see what they are up to.  Even more important than all that, IMHO, is to keep open communication with your kids so they will feel safe talking to you about anything, including anything strange they encounter on the internet.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714547">\
	 <div id="dsq-comment-header-9714547" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714547" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714547">NasMobile</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714547" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714547" class="dsq-comment-message">Robert - thanks for discussing such an important issue.<br><br>I\'m looking into <a href="http://www.opendns.com/" rel="nofollow">http://www.opendns.com/</a> to assist with parental controls etc in addition to educating my \'advanced\' five year old! Would be interested in other tools also.<br><br>I don\'t see the internet any different to the wider world. You wouldn\'t let your child go out in to the world unprotected or uneducated against risks - the internet should not be any different.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714540">\
	 <div id="dsq-comment-header-9714540" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714540" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714540" href="http://www.L4L.co.uk/" target="_blank" rel="nofollow">Leon Cych</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714540" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714540" class="dsq-comment-message">It\'s called Digital Literacy. You engage with your community and you open out the issues and discuss them. Not many governments or institutions seem to "get" this yet. It\'s all moral panic and run screaming to block stuff. A lot of much younger kids have facebook accounts or worse and are surfing in areas they shouldn\'t be. A lot of research suggests that most kids are pretty savvy but that those at risk in the "physical world" offline will be just as vulnerable online if not more so.<br><br>So what do you do? Have a concentrated program of getting information out to and debate about it with parents, teachers, carers etc. Let people know the sanctions as well as the pitfalls. If you don\'t talk about it and explore how to keep your kids safe and let them know strategies for combatting and safely navigating the online world with all it\'s attendant risks then you\'re just sweeping it under the carpet and not addressing the problem. There needs to be a general awareness campaign in schools and not just the shock horror tactics - I\'ll bet if you conducted and anonymous survey of younger kids and asked them if they are in areas they shouldn\'t be you\'d be surprised.<br><br>You can\'t stop it - and when mobile devices become ubiquitous it will be totally unstoppable - so you then educate and engage and inform. You also remain vigilant and know what\'s happening. It\'s about community and people as usual - not the tech.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714548">\
	 <div id="dsq-comment-header-9714548" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714548" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714548" href="http://www.matterhornmarketing.com/" target="_blank" rel="nofollow">Ben Curnett</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714548" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714548" class="dsq-comment-message">I totally agree with the "get over it" part.  Honesty and transparency go way past my Twitter acct.  My kid is going to see things I don\'t want him to see, and that\'s that.  Nothing I can do will prevent it- how he reacts, though, will be largely up how I choose to parent.<br><br>If we can conceptualize social media\'s changing landscape (imagining when kids make fun of facebooking parents the way we made fun of the 8 track- already happening, BTW), we should be able to think about the ways kids can use social media to participate in a kid\'s version of society.  Without guidance, it\'s multiplayer Lord of the Flies.<br><br>Teaching kids to think critically about the decisions they make is the key to internet safety.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714544">\
	 <div id="dsq-comment-header-9714544" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714544" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714544">Colleen</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714544" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714544" class="dsq-comment-message">Thank you for taking on this topic.  I look forward to hearing the responses.  My sons are almost 7, and are total Webkinz and <a href="http://Lego.com" rel="nofollow">Lego.com</a> addicts.  They don\'t email friends yet, but they hate me when I limit their online time and kick them off the computer when they would play games all weekend long if I didn\'t set a timer and step in and be a parent.  Starting early by limiting online time for them is key at a young age, and only letting them use the computer as a privilege seems to be working here.<br><br>What I worry about is them being hurt by friends as well.  Even now, at age 40, I stumble upon my ex-husbands girlfriend\'s blog, which explains details of them being in places I spent my most intimate years with him.  Him reciting the same songs he used to sing to me.  It really hurts, and I\'m a grown up, right?  Painful things are still painful, but with age and experience, we learn to accept some things better.  How does this kind of behavior affect a child?  To see these things happen right in your face, on Facebook?  It is as if bullying and the pain of failed relationships has been amplified to deafen even the strongest spirit.<br><br>The key, I believe, is to teach kids that there is more to life than being online, and this means to show them that with our own actions, and our own values.  Get out.  Climb a mountain with them daily.  Hike more, email less.  Set days of the week where you don\'t even touch your own computer, iPhone or other tech gadget when the kids are home at all.  If the kids see you playing with 10 computers on your desk from day one, isn\'t that all they will end up thinking is cool?<br><br>I think being a parent is more than just discussing what they do online with them, but it is setting a good example by limiting our own behavior.  We are all going to share ourselves online in some way, but teaching them what to share and what to keep private is tough.  What a challenge.  I hope things are easier by the time my kids are teens online. : )</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714541">\
	 <div id="dsq-comment-header-9714541" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714541" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714541" href="http://www.mixin.com/" target="_blank" rel="nofollow">frederic sidler</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714541" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714541" class="dsq-comment-message">Unfortunately educators are late with these new communication tools. Also are the parents. So what frighten me is that nobody is able to care about that. We are not usual parents. We are connected ones. So who could take care about that. I really don\'t know. This is bad.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714543">\
	 <div id="dsq-comment-header-9714543" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714543" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714543" href="http://www.L4L.co.uk/" target="_blank" rel="nofollow">Leon Cych</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714543" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714543" class="dsq-comment-message">It is Safer Internet Day in the UK here - so good timing - forgot to include this site :<br><br><a href="http://www.thinkyouknow.co.uk/teachers/" rel="nofollow">http://www.thinkyouknow.co.uk/teachers/</a><br><br>Might help some people.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714556">\
	 <div id="dsq-comment-header-9714556" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714556" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714556" href="http://kattk.org/" target="_blank" rel="nofollow">Jonas</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714556" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714556" class="dsq-comment-message">I agree with Dave (although I\'m not sure about the figures). Kids are at risk from their own peers. They are bullied by other kids they know. Why don\'t I see reviews of the kids safety in school, on the playground or sports activitys? Rarely will children talk about things troubling them unless asked. Or if the situation has gone way to far. Lets ask them a bit more often, eh! Review schools like the Internet is reviewed. Grade them from a child-safety point of view. Support and educate parents in supporting their children and let the kids be kids. Don\'t lumber the responsibility on them.<br><br>Joel Leonard: Well said!<br><br>Good post</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714555">\
	 <div id="dsq-comment-header-9714555" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714555" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714555" href="http://wickedwitchoftheweb.blogspot.com/" target="_blank" rel="nofollow">RB</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714555" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714555" class="dsq-comment-message">You write: "The new way to keep kids safe isn’t to try to block them from going to nasty sites: it’s all about educating them about what is good behavior and is bad." I\'d add to that that we need to show kids the *real* value of the Internet--its potential as an education and research tool. Good online behavior means making the most of Web\'s rigorous resources.<br><br>Young kids learning to use the Internet are the rising stars of the information age and it is our task to guide them without censoring them. Human-edited search engines like <a href="http://www.SweetSearch.com" rel="nofollow">www.SweetSearch.com</a> are targeted at that type of hands on learning. Kids have the power and the freedom, but SweetSearch includes almost exclusively research, news and education sites. The young habitually come to see the ways the Internet is empowering, not destructive.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714554">\
	 <div id="dsq-comment-header-9714554" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714554" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714554" href="http://www.cooltidbits.net/" target="_blank" rel="nofollow">dvdchris</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714554" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714554" class="dsq-comment-message">I think the time when mobile devices become ubiquitous is here already. I can\'t look at a teenager without seeing an iPhone in their hand. Even if the parent refuses to get a teen their own cell phone account, the iPod Touch, handheld video games and other devices have wifi built in. At this point it becomes impossible to control what they are viewing.<br>Teens today are aware of just about everything regarding sexuality. Your only hope is that you have instilled your values into them at the pre-teen age.<br>This doesn\'t mean you can\'t control it at home, dont give a young teen a computer and webcam in their own room, etc.<br>As far as bullying, where is the outrage of this happening in real life? It happened to me for years and I absolutely hated middle school because of it. School administrators did nothing to try to stop bullying.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714553">\
	 <div id="dsq-comment-header-9714553" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714553" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714553">Alison</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714553" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714553" class="dsq-comment-message">Part of the issue is that parents and teachers are both guilty of not teaching their kids how to use the Internet responsibly.  Would you let your child who is learning to read pronounce words in an incorrect way? No. The same should be true with Internet literacy. But, the problem goes deeper than that. There is so much information and so much BAD information.  There are very few sites that can be trusted. Google spits back result after result, but even I, with a keen eye for differentiating good from bad information have been guilty of relying on  information filled with holes and errors. How will our students/children know the difference? I would say  that at this time, it\'s important to find one or two search engines that are safe.  Sites like PBS (<a href="http://www.pbs.com" rel="nofollow">http://www.pbs.com</a>)  and <a href="http://SweetSearch.com" rel="nofollow">SweetSearch.com</a> (<a href="http://www.sweetsearch.com" rel="nofollow">http://www.sweetsearch.com</a>) are the sites I rely on for kids. Both provide adequate information and games and "sweet Search" is hand-picked sites, which are guaranteed to be safe for kids, while providing quality results. A new issue of learning in the future is going to be information literacy...and it\'s long overdue.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714552">\
	 <div id="dsq-comment-header-9714552" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714552" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714552">James</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714552" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714552" class="dsq-comment-message">A timely article for sure.<br><br>I completely agree that the need for education for both children and parents is a constant requirement - the question for me is, how can parents protect their kids in the meantime?<br><br>More often than not, parents have little real idea of what the children spend their time doing - looking at website lists is, as has already been pointed out, not the whole story - if children want to see most things on the internet then YouTube (to name just one popular site) will have something for sure.<br><br>Fact is, children use the internet as a communications tool, be it social networks or instant messenger - THESE are the places kids hang out and therefore old school parental "controls" style tools arent enough - websites are always bad, but the people who use them can be. Is Facebook inherently "bad"? No. Is there a risk of cyberbullying and reputation risk? Yes. Blocking a common website isnt the answer now.<br><br>Today, I feel it is more about the appropriateness of communication between children and others, it is about how they represent themselves online, and how they can (safely) learn what to communicate and when. "Parental Controls" are ok when you want to block sites, but the game has moved on and these "control" technologies have not. Just simple keyword matching is too unsophisticated to be used properly in the real world. Kids DO swear a bit - people DO fly Virgin and yes, even live in Scunthorpe...all would trigger keyword matches (!) but does a parent have to know EVERY time a word looks bad (even when, in context, it isnt?) when this irepresents little real danger? The result is "cry-wolf" parental control products that just get ignored after a while.<br><br>SMART technology should be able to -<br><br>1) Have a part to play to help educate children (without taking away the fun)<br>2) Provide reassurance to parents (by providing them information when there is a problem)<br>3) And not be spying! (which creates parent/child trust issues).<br><br>Clever, active technologies that "learn" and understand context as well as content can help be a cornerstone in the family\'s online "policy" when used alongside sensible education and discussion.<br><br>Parents need help, as well as advice, in navigating the online world in order to best keep their children safe - they cannot be realistically expected to become online child safety experts overnight.<br><br>There are tools out there that are beginning to help parents achieve this "safe but free" state with their kids - the laudable efforts of the guys at <a href="http://www.imsafer.com" rel="nofollow">www.imsafer.com</a> show what can be achieved when the problem is properly understood from a parents perspective - and it doesnt have to cost a penny....<br><br>Great article and thread.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714551">\
	 <div id="dsq-comment-header-9714551" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714551" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714551">Christopher Coulter</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714551" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714551" class="dsq-comment-message">"You blokes look up tight. You should try logging off; it relieves tension" --Ray Tracer.  (The Return of the Crimson Binome)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714550">\
	 <div id="dsq-comment-header-9714550" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714550" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714550">Andrew Feinberg</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714550" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714550" class="dsq-comment-message">Robert,<br><br>Lest we forget our excellent conversation with Commissioner Jonathan Adelstein of the FCC last summer. I\'m surprised you didn\'t link back to this.<br><br><a href="http://www.fastcompany.tv/video/talking-child-protection-issues-with-fcc-commissioner" rel="nofollow">http://www.fastcompany.tv/video/talking-child-p...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714542">\
	 <div id="dsq-comment-header-9714542" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714542" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714542" href="http://vanelsas.wordpress.com/" target="_blank" rel="nofollow">Alexander van Elsas</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714542" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714542" class="dsq-comment-message">Hey Robert,<br><br>this is where Glubble will help you. We provide parents the tools to support their children discover the web and social networking. Instead of locking children or the computer down, or trying to be the experts for parents, we let parents take the responsibility and build a safe and fun web for their children. This way parents can teach their children to be good citizens in the online world. Glubble is directly integrated into Firefox and comes with safe browsing, search, fun content, twitter, and photo sharing for families, and more.<br><br>You can check it out here: <a href="http://www.glubble.com" rel="nofollow">www.glubble.com</a><br>Or look at this video: <a href="http://www.glubble.com/learn_more" rel="nofollow">http://www.glubble.com/learn_more</a><br><br>Sorry for the plug, but it fits the discussion.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714549">\
	 <div id="dsq-comment-header-9714549" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714549" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714549">Tech_Teacher13</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714549" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714549" class="dsq-comment-message">Robert,<br><br>Not sure if you know why this is the buzz right now, but in the Ed Tech sphere it is because of the 2009 Berkman report on online safety that was just released.  It basically confirms what Jody Gibney is saying (Or is this where she got her info?).  Check out this blog for the links a synopsis and links:<br><a href="http://www.dangerouslyirrelevant.org/2009/01/2009-berkman-report-on-online-safety.html" rel="nofollow">http://www.dangerouslyirrelevant.org/2009/01/20...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714561">\
	 <div id="dsq-comment-header-9714561" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714561" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714561" href="http://blog.offbeatmammal.com/" target="_blank" rel="nofollow">Offbeatmammal</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714561" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714561" class="dsq-comment-message">as a parent with a 9yo daughter I worry about what she\'s going to encounter on the web - but I also worry about TV and the mall - so we try to educate and inform and discuss. We use OpenDNS with filters set pretty high at home and an ever expanding hosts file. The PC is in the family area and only approved mail and IM contacts can communicate.<br><br>But I wouldn\'t trust Norton to look after my daughter. My experiences with their software have been less than savory over the years and running their installer is high on my list of things to do when I get a new machine with their cruftware on.<br><br>While I hope a convenient and reliable software solution is found (I suspect with an open and transparent peer to peer rating engine) I don\'t trust a filter to do the whole job any more than I\'d let Aibo walk her to school ;)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714562">\
	 <div id="dsq-comment-header-9714562" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714562" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714562">Dominic Jones</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714562" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714562" class="dsq-comment-message">"Remember, Google sees all but it is selective about what it sees."<br><br>Isn\'t Gmail still the only major online mail service that does not show the originating IP address in the header? Yes, I think they are and the kids know and love this because it provide anonymity to attack their "friends."</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714563">\
	 <div id="dsq-comment-header-9714563" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714563" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714563">Karen Diro</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714563" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714563" class="dsq-comment-message">I whole-heartedly agree that talking to your kids about what is and isn\'t acceptable behavior online is key.  As someone with 9 nieces and nephews in their tweens and teens, I was surprised to see what they and some of their friends actually post online -- from potentially embarrassing pictures to rants about other kids -- I found it hard to believe that they didn\'t understand what some of the consequences of their posts could be.  I\'ve spoken to my nieces and nephews about online safety, and in particular, about their online reputation and how that could affect them later.  I work at AOL and contribute to the SafetyClicks (<a href="http://http:www.safetyclicks.com" rel="nofollow">http:www.safetyclicks.com</a>) blog about online child safety, and we often stress the importance of parents talking to their kids about appropriate and inappropriate online behavior.<br><br>You also make a great point that simply blocking "bad" sites doesn\'t keep kids safe online.  The final Internet Safety Task Force report (<a href="http://cyber.law.harvard.edu/pubrelease/isttf/" rel="nofollow">http://cyber.law.harvard.edu/pubrelease/isttf/</a>) reinforces that sentiment in their findings by saying that technology plays a helpful role, but should be combined with parental oversight and education.  For years, AOL has advocated that parents use AOL Parental Controls (<a href="http://parentalcontrols.aol.com" rel="nofollow">http://parentalcontrols.aol.com</a>) as a way to start a conversation with their kids about online safety.  As kids increase their online time, it\'s more important than ever for parents to educate themselves about the technology their kids are using, and to have open conversations with them about how to keep safe.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714564">\
	 <div id="dsq-comment-header-9714564" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714564" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714564">Jennifer McKasson</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714564" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714564" class="dsq-comment-message">I think the software companies are missing the mark.  It\'s great that they get that kids work around any barrier you put up and do more than just talk with creepy old men.  However, there is no substitute for a conversation with kids, since they are the ones who will be out there in the danger zone making choices.  No software company can simulate it, nor should they.  If a parent is seeking a software solution for online child safety and reputation management, the parent doesn\'t get it.<br><br>In four years as a middle school teacher by day and online child decoy by night, I got some great anecdotes from students who didn\'t know what I did when I went home in the evenings.  There was a high schooler who saw Dateline and talked with her mom about it and they agreed that she would be safer if she didn\'t participate in a particular social networking site.  I got the story because she was defending not being a member to a friend of hers with an air of "I can\'t believe you participate there.  That\'s dangerous."  Another time my students found out and told me about the conversations they initiated with their parents.  Two years later one reported that she still remembered the safety lessons I imparted to them.<br><br>Software companies who are trying to sell something in this space are not serving their customers the best they can, in my opinion.  If Norton were to set up an online community for parents to participate in and get tips and guidelines on how to have those conversations with their kids, when to have them and what to do if it\'s too late...  That would be valuable.  I\'d like to see them add value that way rather than another product that feeds a horrible misconception: that software can take the place of conversation and understanding of the danger.  If they wanted to monetize it, offer live webinars to members of the community for a reasonable charge ($5 per IP.)<br><br>The dangers to our kids are readily apparent right now, and they are constantly shifting.  Right now I see the danger to children as being through parents, actually.  Parents see their kids in danger or endangering their future and want to protect them but are ill-informed to do so. In seeking out tools to help them, they get taken prey by software companies promising them their child\'s safety and security if they buy this product.  I hope Norton doesn\'t fall into this group of predatory companies.  That would be a shame.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714565">\
	 <div id="dsq-comment-header-9714565" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714565" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714565">Jazz Fan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714565" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714565" class="dsq-comment-message">Great post, Robert!<br><br>I worked in network security for several years and this topic is near and dear to me, since I have a kid of my own.<br><br>What I do is fairly easy and requires no special software:<br><br>I have a hardware router and firewall and I do a couple of things. First, I filter access to my home network by MAC address to keep the wi-fi thieves away. Secondly, I take my kid\'s IP address and I set up a whitelist of websites. She can only visit those sites and no other. I check her computer and the router and firewall on a regular basis to ensure they are doing their respective jobs. I set up my kid\'s laptop with Ubuntu and I\'ve set up additional filters on her machine to jive with the settings on the router and firewall. Works like a charm. No extra money needed.<br><br>Whitelists are far and away better than blackists because they are easier to implement and you don\'t have to worry about something sneaking in and around your particular set of values you establish for your family.  Likewise, your kid can only go where you deem fit. I\'ve helped others with this and it works great. Most hardware routers also have a time restriction function to keep the kids off the net when you don\'t want them on.<br><br>Let\'s see more security stuff, Robert. I like when you wax poetic on multiple tech topics.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714566">\
	 <div id="dsq-comment-header-9714566" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714566" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714566">Jazz Fan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714566" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714566" class="dsq-comment-message">@RB<br><br>Quoth ye: "Young kids learning to use the Internet are the rising stars of the information age and it is our task to guide them without censoring them."<br><br>I fully agree with this sentence shy of the last three words. It\'s a parents\' job to censor their child. That\'s what movie and game ratings are for -- to help parents make informed decisions concerning what their kids see and hear. I know I censor my daughter and she appreciates it. She knows there is evil out there and she wants no part of it.<br><br>I worked as a network investigator for a very large ISP, and I can tell you first-hand that there are some very, very evil people out there that want to harm you and your kids. I\'ve seen stuff I wish I could forget. I\'ve families destroyed by what\'s online, marriages broken, kids exposed to all manner of evil and mischief.<br><br>Parents who fail to censor their kids\' online activities fail them morally. Full stop. There is no arguing this. Young kids through about 15 should not be allowed to have access to an unfettered internet. Yes, they are the future of tech, but a damaged future holds no promise. I believe the statistics Robert provided are rather conservative based on my own observations in the network security world. It\'s better to be a little strict and have your kids mad then to have them become a victim.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714560">\
	 <div id="dsq-comment-header-9714560" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714560" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714560" href="http://larryroth.net/blog/" target="_blank" rel="nofollow">Larry Roth</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714560" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714560" class="dsq-comment-message">Thanks for the article, I agree with all the commenters that say it\'s important to be involved in your children\'s lives--not just talking TO them but WITH them.<br><br>What I think will be interesting, is the current generation of tweeners and 20-somethings having to explain all their online "appearances" to their kids.<br>Think about it:<br>"Mommy, what are Girls Gone Wild?", "Daddy, who is Michael Phelps and what is that you are handing him?"</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714558">\
	 <div id="dsq-comment-header-9714558" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714558" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714558" href="http://plankhead.com/" target="_blank" rel="nofollow">Zacqary Adam Green</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714558" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714558" class="dsq-comment-message">So parents have to actually talk to their own children now? This is America. Only queers and hippies talk to their kids. Must be that Obama guy\'s fault. Did you know he\'s a secret muslin?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714557">\
	 <div id="dsq-comment-header-9714557" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714557" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714557" href="http://www.techmamas.com/" target="_blank" rel="nofollow">TechMama</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714557" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714557" class="dsq-comment-message">I think the first step to protect kids is to educate parents. The problem is the big technology gap between the technology that most parents "grew up" with and how kids use technology these days. Some parents believe that keeping their kids away from technology at home will keep them safe.. Those are the kids that are at the highest risk - because all kids will have access to technology at some place at some time. Beyond that - technology is already apart of how tweens/teens communicate.<br><br>So I suggest to all parents to spend time educating themselves then spend time educating their kids. Implement internet security on all computers at home - but also explain why it is important to have security.  Try to have computers in public spaces - or if kids have laptops it is important to set timing limitations for internet use.<br><br>Parents also need to understand the technology within a computer. Don\'t think that kids won\'t figure out how to use the internal video camera to video chat - assume they will and help them understand what is and is NOT appropriate when it comes to video chat (or disable the camera). I could go on, but so happy you got this discussion going.<br><br>I also read "Ask Marian" which is a blogger that works for Symantec and talks about online security and safety for kids and families.<br><a href="http://community.norton.com/t5/blogs/blogpage/blog-id/askmarian" rel="nofollow">http://community.norton.com/t5/blogs/blogpage/b...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714567">\
	 <div id="dsq-comment-header-9714567" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714567" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714567">banana</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714567" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714567" class="dsq-comment-message">Speaking of security, Nice Diggs Robert:  <a rel="nofollow">Robert\'s Home</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714568">\
	 <div id="dsq-comment-header-9714568" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714568" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714568">ec</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714568" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714568" class="dsq-comment-message">I think that this article and accompanying comments are on the mark. However, educating the children is not the only solution - firstly, because software/hardware safeguards must be in place as well, and moreover the adults need the background and knowledge of the situation at hand to control and/or fight it.<br><br>Plus, children aside, I believe that safeguards must be in place for adults as well. Whether it is a monitoring program, filtering software, firewall, or what-have-you, I think that human nature might force even adults to do that which they might know is wrong and should not be done. The only way to safeguard that activity is to have the technology in place to keep them from wrongdoing.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714569">\
	 <div id="dsq-comment-header-9714569" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714569" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714569" href="http://spaces.live.com/familysafety" target="_blank" rel="nofollow">The Family Safety Team</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714569" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714569" class="dsq-comment-message">Hi Robert!<br><br>This is a good discussion, thanks for taking the time to kick it off. Our product Windows Live Family Safety has a related article for our customers (or future customers) on our blog at <a href="http://familysafety.spaces.live.com/blog/cns!5CE47D5D040962D1!1584.entry" rel="nofollow">http://familysafety.spaces.live.com/blog/cns!5CE47D5D040962D1!1584.entry</a><br><br>Kudos!<br><br>- Elizabeth Grigg</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714570">\
	 <div id="dsq-comment-header-9714570" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714570" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714570" href="http://www.beallfp.com/" target="_blank" rel="nofollow">Jim</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714570" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714570" class="dsq-comment-message">Timing couldn\'t be more perfect, my daughters\'s elementary school Principal called last night to remind us of the Online Safety meeting for parents and 6th graders that we are having Thursday night.<br>I will be forwarding this thread to her.<br>As with most of life\'s challenges Education and Context are vital.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714571">\
	 <div id="dsq-comment-header-9714571" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714571" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714571" href="http://www.education.com/topic/school-bullying-teasing/" target="_blank" rel="nofollow">Seann Birkelund</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714571" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714571" class="dsq-comment-message">Great post.  It\'s nice to see greater attention being paid to what is an ever increasing challenge for today\'s kids.  Norton is the lead sponsor for a special edition <a href="http://Education.com" rel="nofollow">Education.com</a> has published on bullying on-line and at a school --- <a href="http://www.education.com/topic/school-bullying-teasing/" rel="nofollow">http://www.education.com/topic/school-bullying-...</a>.  There are a number of things parents can do to give their kids the presence of mind to handle tough social situations - both as the bullied and as the bully.<br><br>The new Norton product is a major innovation and gives parents the tools they need to begin an active dialogue with their kids and to help protect them from the uglier side of the Internet.  I recommend every parent of a school-aged child check out the product when it becomes generally available.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714572">\
	 <div id="dsq-comment-header-9714572" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714572" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714572" href="http://www.sentrywireless.com/" target="_blank" rel="nofollow">Matt Norton</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714572" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714572" class="dsq-comment-message">Picking up on some of the earlier notes some of you will probably be interested to know that there are software solutions available already to protect children using mobile phones. The general concensus that I\'ve seen from children\'s charities and child experts is that while there are definite risks to children using mobile phones from a your age the downsides are outweighed by the positives - both safety and convenience. Secondly, it\'s just unrealistic to think that you\'ll be able to resist giving your child a mobile phone sooner rather than later - \'you can\'t duck technology, you have to deal with it!\'.<br><br>I\'m the CEO of an Irish start-up software company (<a href="http://www.sentrywireless.com" rel="nofollow">www.sentrywireless.com</a>) that has developed and launched software that helps \'teach children about responsible mobile usage\'. We won the title of "Most Innovagtive Mobile Start-up in the Asia Pacific" for it\'s launch in Singapore.  Using a regular mobile phone (none of those kiddy ones that children laugh at) parents are allowed to \'approve the numbers in the phone book with a PIN number. Once they\'ve done this (it takes less than 15 seconds from first touching teh handset to completion) it means that that not only are these the only numbers the child can call or text but also (more importantly?) these are the only people who can contact the child - so only approved people get through and not strangers! (a white list of approved contacts)<br><br>James from earlier today (7.24am) I think got it just right in terms of what a good solution should do:<br><br>SMART technology should be able to: (allow me to repeat)<br><br>1) Have a part to play to help educate children (without taking away the fun)<br>2) Provide reassurance to parents (by providing them information when there is a problem)<br>3) And not be spying! (which creates parent/child trust issues).<br><br>We think that when the child is young / naive the parent will control the phone tightly. As the child matures and shows that they are more aware they will have freer use of the phone and at some point the parent will give them the PIN number so that they can enter and remove numbers as they choose .. but still be protected from complete strangers. Eventually they will have no controls.<br><br>Kidsafe has a parent alert built in so that if the child tries to remove the SIM card and place it in another phone that miught not protect the parent will automatically send an SMS to the parent warning them. It also captures the main details of the blocked calls and text messages which only the parent can see. This allows the parent detect if there might be an issue e.g. they see a strange number trying repeatedly to contact the child late at night.<br><br>However, to James third point about NOT spying) it doesn\'t capture the content of any text message - sent to a blocked or approved number. It could do from a technical perspective but we believe that it\'s a could of steps too far and would create real trust issues with the child.<br><br>Without wishing to scare anyone there\'s lots of hard data and media reports showing that almost half (39% in Ireland) of kids are either bullied themselves or know a close friend who has been bullied via their mobile phone. Because of the nature of the device children use them outside of the home and away from their parents protective reach. That increases the risk.<br><br>Kidsafe has already been launched with a mobile operator in Ireland and also Singapore. Unfortunately we\'re not in a position to sell directly to consumers but as is always the case in these circumstances the only way that you\'ll get the protection for your child is by demanding it. Kidsafe isn\'t the only solution available to operators (though I do think it\'s the best!!) but if you want your kids to be protected you should tell them and let them know - call customer service, write an email and ask what they\'re doing and point out other operators (<a href="http://www.m1.com.sg" rel="nofollow">www.m1.com.sg</a>) and <a href="http://www.three.ie" rel="nofollow">www.three.ie</a> have proactively addressed the situation. Apologies for going on so long - can\'t help but be passionate.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714573">\
	 <div id="dsq-comment-header-9714573" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714573" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9714573">Tim Toron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714573" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714573" class="dsq-comment-message">Some people here seem to put in serious efforts to "protect" their kids from outside threads.<br><br>I wonder how these people organize their social live. Are they aware that 90% of all real life sex crimes against children are committed by people close to the kids: Family members, friends of the family, teachers ... ??<br><br>Yes, we also teach our kids why they shouldn\'t provide personal information on public web sites, we talk about what might happen to them when they visit disturbing web pages (having ugly dreams for two weeks at least). But at the end this is just part of the normal "get them ready for the world" education.<br><br>Its on the same level as teaching them how to cross the street or what to eat and what not. Nothing more, nothing less. Just something what must be done but no reason to panic.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714574">\
	 <div id="dsq-comment-header-9714574" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714574" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714574" href="http://www.internetsafety.com/" target="_blank" rel="nofollow">Molly Antos</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714574" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714574" class="dsq-comment-message"><a href="http://InternetSafety.com" rel="nofollow">InternetSafety.com</a> provides an array of safety features for kids online - their program "Safe Eyes" sends parents text messages to alert them when their child has attempted to access something inappropriate. This leads to more open and honest discussions between parents and children as opposed to just blindly blocking websites with no explanation.<br><br>They recently release an application for the iPhone, the only one of its kind, that will protect kids on the go!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9714575">\
	 <div id="dsq-comment-header-9714575" class="dsq-comment-header">\
	 <cite id="dsq-cite-9714575" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9714575" href="http://twitter.com/dhowell" target="_blank" rel="nofollow">Denise Howell</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9714575" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9714575" class="dsq-comment-message">We\'ll do open DNS eventually, but for now our 5-year-old\'s perfectly content with Glubble\'s FireFox-friendly, well laid out, and safe browser:  <a href="http://glubble.com/" rel="nofollow">http://glubble.com/</a>  The family social network part of this service is great too.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10567987">\
	 <div id="dsq-comment-header-10567987" class="dsq-comment-header">\
	 <cite id="dsq-cite-10567987" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10567987" href="http://www.giganu.com/" target="_blank" rel="nofollow">Jonathan Sprague</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10567987" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10567987" class="dsq-comment-message">Our company may be of interest to some parents: <a href="http://www.securinu.com" rel="nofollow">www.securinu.com</a><br><br>Kind Regards</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=scobleizer&t=keeping_kids_online_safe&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 = 'faaf467d0f47abde553c3b8e0e1b3570';
			if (typeof disqus_facebook_api_key != 'undefined') {
				facebook_api_key = disqus_facebook_api_key;
			}

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


	


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

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

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

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

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

})();




