




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": "Robert Scoble finally getting back his senses on data portability and listing some usecases that are problematic in terms of ownership, context and privacy.", "author_name": "Pascal Van Hecke", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065463, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/1316035e-ff1a-9448-4b38-2aa11df481d3#51ec810e-03af-11dd-b31b-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/pascalvanhecke/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}, {"body": "There are roadblocks to DataPortability, but at least we all agree that DP is needed.", "author_name": "Mike Reynolds", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065467, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/8621fced-c76f-f80f-1339-5c392dfb476f#d0a02e44-ffed-11dc-9764-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/mikereynolds/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}, {"body": "Change of mind on data portability from your previous position?", "author_name": "Dennis Howlett", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065466, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/8621fced-c76f-f80f-1339-5c392dfb476f#611f4a1e-ffca-11dc-96e4-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/dahowlett/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}, {"body": "lots of interesting questions and issues that become non-issues once it is the user that can take charge of his/her own data without a platform interfering.", "author_name": "Adriana Lukas", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065468, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/b87ecf30-0ba7-90c7-2f8c-086b5530bb7d#17ac8b66-fd05-11dc-bf7f-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/ragegirrl/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}, {"body": "Dennis, not sure what you mean by 180 degree turn.", "author_name": "Robert Scoble", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065465, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/8621fced-c76f-f80f-1339-5c392dfb476f#1eede7ac-fb76-11dc-b17f-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/scobleizer/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}, {"body": "That looks like a 180 degree turn?", "author_name": "Dennis Howlett", "source_url": "http://www.ubervu.com/conversations/scobleizer.com/2008/03/26/the-real-roadblocks-to-data-portability-on-social-networks/", "id": 1065464, "get_service_url": "http://friendfeed.com/", "title": "", "url": "http://friendfeed.com/e/8621fced-c76f-f80f-1339-5c392dfb476f#8ef55b78-fb6e-11dc-b65c-003048343a40", "source": "ubervu", "get_service_name": "friendfeed", "avatar_url": "http://friendfeed.com/dahowlett/picture?size=large", "author_url": "", "date_created": "1 year ago", "retweets": []}], "has_more_reactions": false, "users": {"822d8ab24cda4d2824322820c8e26dae": {"username": "Logical Extremes", "tumblr": "", "display_name": "Logical Extremes", "url": "http://disqus.com/guest/822d8ab24cda4d2824322820c8e26dae/", "registered": false, "linkedin": "", "blog": "http://logicalextremes.blogspot.com/search/label/privacy", "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": ""}, "b9da358d6d2cfc0f07ead73fbe4a08f5": {"username": "Andy Winters", "tumblr": "", "display_name": "Andy Winters", "url": "http://disqus.com/guest/b9da358d6d2cfc0f07ead73fbe4a08f5/", "registered": false, "linkedin": "", "blog": "http://www.youtube.com/watch?v=_njahisJ2Z8", "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": ""}, "32ca778cb6dc72863614273106fa01ad": {"username": "saran", "tumblr": "", "display_name": "saran", "url": "http://disqus.com/guest/32ca778cb6dc72863614273106fa01ad/", "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": ""}, "7bfd646dea8e47642bbb573f026bf159": {"username": "engtech", "tumblr": "", "display_name": "engtech", "url": "http://disqus.com/guest/7bfd646dea8e47642bbb573f026bf159/", "registered": false, "linkedin": "", "blog": "http://internetducttape.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/8922/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "aac81455403c4c36d22f59fb63cf7c09": {"username": "Chris Miller", "tumblr": "", "display_name": "Chris Miller", "url": "http://disqus.com/guest/aac81455403c4c36d22f59fb63cf7c09/", "registered": false, "linkedin": "", "blog": "http://TheSocialNetworker.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": ""}, "luigimontanez": {"username": "luigimontanez", "tumblr": "", "display_name": "luigimontanez", "url": "http://disqus.com/luigimontanez/", "registered": true, "linkedin": "", "blog": "http://leftmostbit.com/", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/104/9830/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "28053556c181149f71116ee80d7b1be3": {"username": "Kaliya Hamlin", "tumblr": "", "display_name": "Kaliya Hamlin", "url": "http://disqus.com/guest/28053556c181149f71116ee80d7b1be3/", "registered": false, "linkedin": "", "blog": "http://www.identitywoman.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": ""}, "f3b41bc009a402017febfab746770bc5": {"username": "jonas", "tumblr": "", "display_name": "jonas", "url": "http://disqus.com/guest/f3b41bc009a402017febfab746770bc5/", "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": ""}, "3e00403e6a08fc4499057d8be5b85709": {"username": "Tom Morris", "tumblr": "", "display_name": "Tom Morris", "url": "http://disqus.com/guest/3e00403e6a08fc4499057d8be5b85709/", "registered": false, "linkedin": "", "blog": "http://tommorris.org/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": ""}, "bc741aa407c4c878ee8d0afad10ed1b0": {"username": "shaidorsai", "tumblr": "", "display_name": "shaidorsai", "url": "http://disqus.com/guest/bc741aa407c4c878ee8d0afad10ed1b0/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/101/1717/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "ef9a110e6f84d3ebf3d4672ad090a1de": {"username": "Michael Koby", "tumblr": "", "display_name": "Michael Koby", "url": "http://disqus.com/guest/ef9a110e6f84d3ebf3d4672ad090a1de/", "registered": false, "linkedin": "", "blog": "http://www.mkoby.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": ""}, "c8fc6f50eb2ceb57df0197176d6cb709": {"username": "Steve Cholerton", "tumblr": "", "display_name": "Steve Cholerton", "url": "http://disqus.com/guest/c8fc6f50eb2ceb57df0197176d6cb709/", "registered": false, "linkedin": "", "blog": "http://www.tektalkin.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": ""}, "3690e1595c09d9b9f42baa64d16e8ae5": {"username": "Marijn", "tumblr": "", "display_name": "Marijn", "url": "http://disqus.com/guest/3690e1595c09d9b9f42baa64d16e8ae5/", "registered": false, "linkedin": "", "blog": "http://marijnsomers.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": ""}, "sgd": {"username": "sgd", "tumblr": "", "display_name": "Sam Davyson", "url": "http://disqus.com/sgd/", "registered": true, "linkedin": "", "blog": "http://sam.davyson.com/weblog", "remote_domain": null, "points": 7, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/1641/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "45e47229d60fd5950193a08797701cb9": {"username": "John Breslin", "tumblr": "", "display_name": "John Breslin", "url": "http://disqus.com/guest/45e47229d60fd5950193a08797701cb9/", "registered": false, "linkedin": "", "blog": "http://www.johnbreslin.com/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": ""}, "ce2bd12610e895f0789616c63d69c2ae": {"username": "Carter f Smith", "tumblr": "", "display_name": "Carter f Smith", "url": "http://disqus.com/guest/ce2bd12610e895f0789616c63d69c2ae/", "registered": false, "linkedin": "", "blog": "http://carterfsmith.blogspot.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/173/3917/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c270cc4de6efecbb5b0e9d6acfaa641b": {"username": "Uno De Waal", "tumblr": "", "display_name": "Uno De Waal", "url": "http://disqus.com/guest/c270cc4de6efecbb5b0e9d6acfaa641b/", "registered": false, "linkedin": "", "blog": "http://www.unodewaal.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/7047/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c106a6dde433ffbeca42deecdda96936": {"username": "gowrisivaprasad", "tumblr": "", "display_name": "gowrisivaprasad", "url": "http://disqus.com/guest/c106a6dde433ffbeca42deecdda96936/", "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": ""}, "bc2c84cea752a5b3734f9fbcd8da6ccf": {"username": "Dennis McDonald", "tumblr": "", "display_name": "Dennis McDonald", "url": "http://disqus.com/guest/bc2c84cea752a5b3734f9fbcd8da6ccf/", "registered": false, "linkedin": "", "blog": "http://www.ddmcd.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": ""}, "b11a9a7bee6fc07723be3e8aea636835": {"username": "Alexander van Elsas", "tumblr": "", "display_name": "Alexander van Elsas", "url": "http://disqus.com/guest/b11a9a7bee6fc07723be3e8aea636835/", "registered": false, "linkedin": "", "blog": "", "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": ""}, "9b646ff3eeda1f01cc2b1cb86d1634f9": {"username": "paul", "tumblr": "", "display_name": "paul", "url": "http://disqus.com/guest/9b646ff3eeda1f01cc2b1cb86d1634f9/", "registered": false, "linkedin": "", "blog": "http://www.dotnetjunkies.com/WebLog/paul/", "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": ""}, "6625370ffa42f6c3f82d88c4bce53fc9": {"username": "Simon Brocklehurst", "tumblr": "", "display_name": "Simon Brocklehurst", "url": "http://disqus.com/guest/6625370ffa42f6c3f82d88c4bce53fc9/", "registered": false, "linkedin": "", "blog": "http://www.psynixis.com/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": ""}, "85d181059d928358602c985ef22d0ca4": {"username": "John Maas", "tumblr": "", "display_name": "John Maas", "url": "http://disqus.com/guest/85d181059d928358602c985ef22d0ca4/", "registered": false, "linkedin": "", "blog": "http://www.capatrex.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": ""}, "5c8328a8a72fef8e27bcf9a9ac56a56a": {"username": "David Evans", "tumblr": "", "display_name": "David Evans", "url": "http://disqus.com/guest/5c8328a8a72fef8e27bcf9a9ac56a56a/", "registered": false, "linkedin": "", "blog": "http://theprogressbar.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/36/9352/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7315caba81f567d7a1df500ed3c4022c": {"username": "Matthew Warren", "tumblr": "", "display_name": "Matthew Warren", "url": "http://disqus.com/guest/7315caba81f567d7a1df500ed3c4022c/", "registered": false, "linkedin": "", "blog": "http://tsmwiki.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": ""}, "7743a9d115f38953322ce78bf6353af2": {"username": "bhc3", "tumblr": "", "display_name": "bhc3", "url": "http://disqus.com/guest/7743a9d115f38953322ce78bf6353af2/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/5/641/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "08587ccf9cb76a0e1edf17d3aa8afda0": {"username": "Jim", "tumblr": "", "display_name": "Jim", "url": "http://disqus.com/guest/08587ccf9cb76a0e1edf17d3aa8afda0/", "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": ""}, "4c8fb903fabe7e6986d4a066326239cf": {"username": "yodahome", "tumblr": "", "display_name": "yodahome", "url": "http://disqus.com/guest/4c8fb903fabe7e6986d4a066326239cf/", "registered": false, "linkedin": "", "blog": "http://yodahome.de/", "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": ""}, "b4256fb7d7d66b87b7003ba8ddd7e45e": {"username": "SamCollins", "tumblr": "", "display_name": "SamCollins", "url": "http://disqus.com/guest/b4256fb7d7d66b87b7003ba8ddd7e45e/", "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": ""}, "2d9567a5dc6d38988355ee3e8c0429f2": {"username": "Chris Saad", "tumblr": "", "display_name": "Chris Saad", "url": "http://disqus.com/guest/2d9567a5dc6d38988355ee3e8c0429f2/", "registered": false, "linkedin": "", "blog": "http://www.chrissaad.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/8/914/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "jbond": {"username": "jbond", "tumblr": "", "display_name": "jbond", "url": "http://disqus.com/jbond/", "registered": true, "linkedin": "", "blog": "http://www.ecademy.com", "remote_domain": null, "points": 4, "facebook": "http://www.facebook.com/julian.bond", "avatar": "http://media.disqus.com/uploads/users/7/6930/avatar92.jpg", "delicious": "jbond", "is_remote": false, "verified": true, "flickr": "jbond", "twitter": "http://twitter.com/jbond", "remote_domain_name": ""}, "79391b2e6f7370c9bdcd28eb28ad6698": {"username": "Matthias", "tumblr": "", "display_name": "Matthias", "url": "http://disqus.com/guest/79391b2e6f7370c9bdcd28eb28ad6698/", "registered": false, "linkedin": "", "blog": "http://www.jimdo.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": ""}, "6fbab64c95396f6b64389f633013ea77": {"username": "earlemartin", "tumblr": "", "display_name": "earlemartin", "url": "http://disqus.com/guest/6fbab64c95396f6b64389f633013ea77/", "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": ""}, "3b958d50a0aa8b9c0d850c9e59a4c00d": {"username": "Johannes", "tumblr": "", "display_name": "Johannes", "url": "http://disqus.com/guest/3b958d50a0aa8b9c0d850c9e59a4c00d/", "registered": false, "linkedin": "", "blog": "http://sixgroups.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": ""}, "f89b745cb3983fb1c02bca74a4f6d077": {"username": "francine hardaway", "tumblr": "", "display_name": "francine hardaway", "url": "http://disqus.com/guest/f89b745cb3983fb1c02bca74a4f6d077/", "registered": false, "linkedin": "", "blog": "http://blog.stealthmode.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/13604/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": "http://www.capitolvalley.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": ""}, "1b6fe66542027f0a55598a58677be125": {"username": "Mary", "tumblr": "", "display_name": "Mary", "url": "http://disqus.com/guest/1b6fe66542027f0a55598a58677be125/", "registered": false, "linkedin": "", "blog": "http://www.vegasbookmarks.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": ""}, "ff0eb14189bbc1754983c610b5895ae4": {"username": "Herschel", "tumblr": "", "display_name": "Herschel", "url": "http://disqus.com/guest/ff0eb14189bbc1754983c610b5895ae4/", "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": ""}, "12577d95bfa06342d7d716e0157adba4": {"username": "Talweezy", "tumblr": "", "display_name": "Talweezy", "url": "http://disqus.com/guest/12577d95bfa06342d7d716e0157adba4/", "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": ""}, "9762d708be14c68ff56e8b711d73bedd": {"username": "Nathan Bowers", "tumblr": "", "display_name": "Nathan Bowers", "url": "http://disqus.com/guest/9762d708be14c68ff56e8b711d73bedd/", "registered": false, "linkedin": "", "blog": "http://nathanbowers.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": ""}, "9a475a680a7959398550f4757703849d": {"username": "Johnny Kwan", "tumblr": "", "display_name": "Johnny Kwan", "url": "http://disqus.com/guest/9a475a680a7959398550f4757703849d/", "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": ""}, "4dd0386976de668049b55e43e6eeacb5": {"username": "Andrew", "tumblr": "", "display_name": "Andrew", "url": "http://disqus.com/guest/4dd0386976de668049b55e43e6eeacb5/", "registered": false, "linkedin": "", "blog": "http://www.somenice.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/54/827/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b1088dbd877c2d7d33e6b3b63ee38081": {"username": "Prokofy Neva", "tumblr": "", "display_name": "Prokofy Neva", "url": "http://disqus.com/guest/b1088dbd877c2d7d33e6b3b63ee38081/", "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": ""}, "8368b78ae44072e829f80ee577d35c96": {"username": "Matt", "tumblr": "", "display_name": "Matt", "url": "http://disqus.com/guest/8368b78ae44072e829f80ee577d35c96/", "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": ""}, "1d3cb3c43cdb3ff64e25fb75135e4b26": {"username": "John", "tumblr": "", "display_name": "John", "url": "http://disqus.com/guest/1d3cb3c43cdb3ff64e25fb75135e4b26/", "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": ""}, "272c10be6b0847611171791042035108": {"username": "JD", "tumblr": "", "display_name": "JD", "url": "http://disqus.com/guest/272c10be6b0847611171791042035108/", "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": ""}, "18c0e6d661515858720aeac353280589": {"username": "Santosh Maharshi", "tumblr": "", "display_name": "Santosh Maharshi", "url": "http://disqus.com/guest/18c0e6d661515858720aeac353280589/", "registered": false, "linkedin": "", "blog": "http://blog.santoshmaharshi.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": ""}, "7d5f7f21fb20788c39acce8786f0d9d6": {"username": "Matt Galligan", "tumblr": "", "display_name": "Matt Galligan", "url": "http://disqus.com/guest/7d5f7f21fb20788c39acce8786f0d9d6/", "registered": false, "linkedin": "", "blog": "http://socialthing.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": ""}, "3b55c99ae4e4de32912a8a2afd3348bb": {"username": "GP", "tumblr": "", "display_name": "GP", "url": "http://disqus.com/guest/3b55c99ae4e4de32912a8a2afd3348bb/", "registered": false, "linkedin": "", "blog": "http://www.booberfish.com/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": ""}, "dc5065aa3b9c6ea0586c20a9d7ad5b79": {"username": "mike wood", "tumblr": "", "display_name": "mike wood", "url": "http://disqus.com/guest/dc5065aa3b9c6ea0586c20a9d7ad5b79/", "registered": false, "linkedin": "", "blog": "http://mikewoodphotography.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": ""}, "dfe7ba2ad52340fa65adff460ab3ae77": {"username": "Brad Templeton", "tumblr": "", "display_name": "Brad Templeton", "url": "http://disqus.com/guest/dfe7ba2ad52340fa65adff460ab3ae77/", "registered": false, "linkedin": "", "blog": "http://ideas.4brad.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": ""}, "danja": {"username": "danja", "tumblr": "", "display_name": "danja", "url": "http://disqus.com/danja/", "registered": true, "linkedin": "", "blog": "http://dannyayers.com/", "remote_domain": null, "points": 4, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "macbeach": {"username": "macbeach", "tumblr": "", "display_name": "macbeach", "url": "http://disqus.com/macbeach/", "registered": true, "linkedin": "", "blog": "http://blog.macb.net", "remote_domain": null, "points": 4, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/130/4404/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c519558f6d6ff12136ac8f05783a4cd9": {"username": "Jay Gilmore (smashingred)", "tumblr": "", "display_name": "Jay Gilmore (smashingred)", "url": "http://disqus.com/guest/c519558f6d6ff12136ac8f05783a4cd9/", "registered": false, "linkedin": "", "blog": "http://www.smashingred.com/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": ""}, "579fbc756c0d918e2244dff914c9bf88": {"username": "Dare Obasanjo", "tumblr": "", "display_name": "Dare Obasanjo", "url": "http://disqus.com/guest/579fbc756c0d918e2244dff914c9bf88/", "registered": false, "linkedin": "", "blog": "http://www.25hoursaday.com/weblog", "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": ""}, "d9db8ecb04a59b479c62e49c02b88a59": {"username": "Brian Hanafee", "tumblr": "", "display_name": "Brian Hanafee", "url": "http://disqus.com/guest/d9db8ecb04a59b479c62e49c02b88a59/", "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": ""}, "f7d96d15b901651ba8861f8385b7042c": {"username": "Christian Scholz", "tumblr": "", "display_name": "Christian Scholz", "url": "http://disqus.com/guest/f7d96d15b901651ba8861f8385b7042c/", "registered": false, "linkedin": "", "blog": "http://mrtopf.de/blog", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/36/7185/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "28e1204754440a5114edff705d675217": {"username": "gregorys", "tumblr": "", "display_name": "gregorys", "url": "http://disqus.com/guest/28e1204754440a5114edff705d675217/", "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": ""}}, "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_06:48:01", "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": {"9703214": {"up_voted": false, "ip": "", "has_replies": false, "message": "One idea I've had about this issue relates to the lifestream aggregators.  Is it possible to view FriendFeed as your \"social network cloud\"?  All the updates from the various social networks feed the cloud.<br><br>Then you look at something like Twitter or Jaiku less as THE social network, and more as a social application.  Your friends see your updates via FriendFeed, not via Twitter.  They can comment directly on the FriendFeed site.<br><br>In such a scenario, switching from something like Twitter to Jaiku or Pownce means you don't lose the connections you have.  They keep up with you via the lifestream cloud.  Same idea could apply for moving from Flickr to SmugMug.  People don't keep up with you via the social app - they follow you on the lifestream aggregator.  A backdoor way to data (or maybe social network) portability.<br><br>More thoughts here: <a href=\"http://tinyurl.com/29cu6k\" rel=\"nofollow\">http://tinyurl.com/29cu6k</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-29_17:33:06", "killed": false, "user_key": "7743a9d115f38953322ce78bf6353af2", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703215": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the most important point is that sometimes we don't want every network to know everything. I might want to delete my info from one network but not another. And, just like you suggested, I use a different email address for every site I join. Any sort of data propagation between networks would have to be entirely optional.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-29_15:59:57", "killed": false, "user_key": "3b55c99ae4e4de32912a8a2afd3348bb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703216": {"up_voted": false, "ip": "", "has_replies": false, "message": "What is data portability?  And what is a social network?<br><br>I take social networks, at their core, to mean three related functions:<br>1. Some way of maintaining state about yourself:  contact info, demographics, etc.<br>2. Some way to identify relationships - who and what kind of relationship.<br>3. Some way to control permissions of those related to you and their access to your state.<br><br>I see data portability as defining a standard set of policies governing the sharing and unsharing of these three things.<br><br>Done correctly, it means the end of social networks.  The standard that it defines by default makes one gigantic social network, one that correctly mirrors human relationships off-line!<br><br>This is similar to Sam's thoughts above.<br><br>Vendor-led efforts are dead in the water.  If data portability is accomplished, there are no social networks left.  It becomes a public utility that people and businesses use, one that generates vast amounts of economic utility, but one that no private party is able to convert into fiscal value.<br><br>I second John's concerns, but they aren't a problem.  This seems like an OO-purist's obsession:  correctly establishing identity.  If I want to lead a double-life, I can lead a double life.  And if I bisect the AllThing's social graph with two nodes that represent me, oh well.  I have that right.<br><br>Indeed, the idea of a universal social graph is flawed.  It only benefits companies.  If privacy is respected, then we each get a different social graph.  Ralph may not want me to know that he knows Wanda, or in what capacity, so on my social graph, that link will be missing.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_15:42:43", "killed": false, "user_key": "9a475a680a7959398550f4757703849d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703217": {"up_voted": false, "ip": "", "has_replies": false, "message": "Tom says in the first comment: \"...vendors will jump in front of the parade and start preaching openness when it becomes inevitable\" - it has and they are.<br><br>The actions are slower than the word, but still, one bite at a time.<br><br>My biggest worry in all of this is that we'll wind up with poorly thought-out hacks solving the immediate problem, without considering the bigger picture - the more general Web of Data (where the standards are already in place, the Semantic Web stack).<br><br>Fortunately the DataPortability folks seem relatively sane :-)", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_07:13:53", "killed": false, "user_key": "danja", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703218": {"up_voted": false, "ip": "", "has_replies": false, "message": "There are many reasons why this will be hard. One right now is that every major system wants to invent it's own API, Contact Schema and Authentication. It's great that they want to do import/export but can we all please do it the same way? Oh. Wait a minute. We're talking about billion dollar companies here. :(<br><br>I think these issues are going to get solved from both ends. Top down defacto standards and bottom up innovation and evangelism. Let's hope they meet in the middle. The more people like Robert demand these sorts of functions and the more groups like DataPortability spread the word, the more likely it is to get done.<br><br>And as someone up there said, don't avoid the easy stuff because the big picture looks impossibly hard or some of the issues look intractable.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:43:51", "killed": false, "user_key": "jbond", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703219": {"up_voted": false, "ip": "", "has_replies": false, "message": "What happens if these people actual do trust each other and allow you to port data. Wouldn't that result in Big brother watching you? If the FBI wanted to spy on you, all they would need is one e-mail address and then all these networks combined will tell them where you are, were, will be and track you/spy on you 24x7. Would you want to give up your freedom in such an easy way? How can you prevent it from happening? There is nothing which can protect you at that point. No law will protect anyone from snooping, because this will all be public information at that point. And what about stalkers?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_15:49:06", "killed": false, "user_key": "b4256fb7d7d66b87b7003ba8ddd7e45e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703220": {"up_voted": false, "ip": "", "has_replies": false, "message": "The problem is that Facebook has ZERO incentive to open up their walled garden. Google generates value by munching data (both traffic and user interactions) from Gmail, GoogleAnalytics, Feedburner, ads, and the open internet. There's no upside for Facebook in giving up the one thing Google wants.<br><br>I'm a fan of openness, but in a world where data is a commodity and Google is the 800lb gorilla, it's a good value proposition to differentiate yourself by building fences. It's like commodity PCs powered by Microsoft vs. Apple's walled garden.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_15:30:47", "killed": false, "user_key": "9762d708be14c68ff56e8b711d73bedd", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703221": {"up_voted": false, "ip": "", "has_replies": false, "message": "Yes, these are all hard problems and maybe not all of them can be addresses in a matter that everybody is happy.<br><br>So my vision is also to have one social network which is the internet but not as one master server for everybody but following the OpenID model (I think this goes into the direction Sam was thinking). So this can be easily used to sync data. If you change your email address 3 times then the last one should be valid unless you state that you want to use another profile (with a different address) on some social application (if we have one social network the existing ones might then be called social applications making use of that network).<br><br>So everybody can actually choose their master server of choice (some might trust Facebook, some might trust their bank, some their own hosted thing) and you give permissions around.<br><br>Of course this is not fully thought through but it might be one idea to think further.<br><br>The thing is though that \"Data Portability\" can be sort of everything or nothing depending on who you ask. This email problem is more a problem of sync and sync is probably one of the most difficult to solve. I would already be happy if we would solve the export issue, defining technical standards and policy for exporting data (and policies which you are allowed to do with it).<br><br>I summarized some ideas of how to partition the problem space here: <a href=\"http://mrtopf.de/blog/web20/what-is-data-portability/\" rel=\"nofollow\">http://mrtopf.de/blog/web20/what-is-data-portab...</a> and during the last DP meeting a similar idea seems to have been discussed in the form of DP labs. I think the main problem which stops the actual work in DP right now is really not having a defined scope (maybe narrow enough to being able to solve it).<br><br><br>Another thing I would like though would be that Dave Morin joins the conversation on one of the Data Portability Groups or even lists these use cases in the wiki so people can think about it. I mean FB joined this project so it would be good to know what the problems they are facing are. Both on the user and on the business side.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_17:11:09", "killed": false, "user_key": "f7d96d15b901651ba8861f8385b7042c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703222": {"up_voted": false, "ip": "", "has_replies": false, "message": "BTW, Robert, where's your YASN-Roll? The list of links to your profile on all those systems. The one that's marked up with microformats so that things like the Socialgraph API can find it. And that can be used as the basis to find all your friends when you join the next one. And is linked to your OpenID so that new system can find it.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:48:45", "killed": false, "user_key": "jbond", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703223": {"up_voted": false, "ip": "", "has_replies": false, "message": "Dumb user here. The big issue here is TRUST. I'm on as many networks as you are, but some of them I just signed up to test, and then rejected. Do I want them to have access to the ones I really use, that have stuff on them like my friends.? And what about the ones that I got put on because they spammed my address book? I don't want my trusted applications and my \"non-trusted\" applications mixed.<br><br>Not that I don't want the \"change your address once\" convenience, but when it comes with the spamminess of Plaxo, I always wonder if it's worth it.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:38:41", "killed": false, "user_key": "f89b745cb3983fb1c02bca74a4f6d077", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703224": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think Sam's comment above is closest to the solution, although I don't believe in having ONE Social Network, but rather, ONE social network API.  Companies offering OpenID are well positioned in this regard since they could simply add the necessary social network API's to their set of services.  This way, when you sign up on a website you can simply point to your OpenID provider who will provide, and more importantly, enforce all of your social network rules.   With this said, there's little to stop Facebook, MySpace, etc from supporting this and becoming an OpenID+Social_API provider.<br><br>All of the use cases Robert pointed out seem to be solved by this sort of solution.<br><br>Oh, and for the totally paranoid, I'd even suggest having a browser plug-in that maintained your social networking rules.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:46:18", "killed": false, "user_key": "08587ccf9cb76a0e1edf17d3aa8afda0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703225": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm not sure that this will be a profitable venture for Microsoft, but it's worth a try. We know that owning a centrally located piece of real estate and inviting big names to stake their claim there has worked in the real world in the past. Microsoft has shown their ability in Web 1.0 to make money, and it's apparent that no one in social networking has figured out how to do that yet . . .<br><br>The Microsoft strategy appears to start with inviting your friends and connections to connect on Windows Live Messenger (not sounding a lot like portability here -- I am thinking \"import from\").<br><br>So I tried the only currently available option -- Facebook. A login to Facebook screen (with Windows Live logo but a Facebook URL) popped up, and the first try on login failed (hmmm, a phishing site?). But the next screen had the Facebook logo, and it logged me in just fine. I didn't however, see where I could add anyone to an invite list, so . . . I gave up and started blogging.<br><br>So we'll just keep beta testing while Microsoft keeps building . . .<br><br><a href=\"http://carterfsmith.blogspot.com/2008/04/social-network-portability-is-coming.html\" rel=\"nofollow\">http://carterfsmith.blogspot.com/2008/04/social...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-04-04_18:16:20", "killed": false, "user_key": "ce2bd12610e895f0789616c63d69c2ae", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703226": {"up_voted": false, "ip": "", "has_replies": false, "message": "Data portability....  Yikes.<br><br>Call it \"Facilitating transfer of personal information\" and you might get a different take on it.  You write like it's all good, but it's going to mean that more people's personal data spreads to more and more companies -- and not just minor personal data, but your complete social network, likes, dislikes.   The marketers are salivating.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:20:23", "killed": false, "user_key": "dfe7ba2ad52340fa65adff460ab3ae77", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703227": {"up_voted": false, "ip": "", "has_replies": false, "message": "Uniquely identifying who YOU are is going to be one of the bigger challenges. Username? Uhm no! Email? Well, if you have 4 different ones, that's a challenge. SS#? If we all got that ID block thing :) Then again, the simple standard is to tell people, \"if you want to integrate your networks, you must use the same email address\", and if they don't, it's their problem.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_12:16:03", "killed": false, "user_key": "1d3cb3c43cdb3ff64e25fb75135e4b26", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703228": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert,<br><br>Facebook has officially given the finger on Data Portabilty.<br><br>I've been emailing their corporate communications coordinator back and forth asking why/when/how the \"export to CSV\" feature was deleted. I asked if there was someone with institutional knowledge and expertise on the history of the system to know, and was told that there isn't such a person.<br><br>*cough*bullshit*cough*<br><br>Isn't it just easier to tell the truth?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-28_09:44:06", "killed": false, "user_key": "98440694bc9208fba43c88865b0fbb6b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703229": {"up_voted": false, "ip": "", "has_replies": false, "message": "What do we call these facebook like social networking applications?<br><br>well, how about snaps?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_11:10:36", "killed": false, "user_key": "7315caba81f567d7a1df500ed3c4022c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703230": {"up_voted": false, "ip": "", "has_replies": false, "message": "The organization of personal-published information on the Web is still in it's infancy.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:54:21", "killed": false, "user_key": "9b646ff3eeda1f01cc2b1cb86d1634f9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703231": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert, I think your point #3 is excellent, and is actually something that we've been working on for a long time here at Socialthing!  I'd love to get a conversation going with you to talk about what you would specifically like to see.<br><br>If you can, email me at matt at socialthing dot com...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_21:08:18", "killed": false, "user_key": "7d5f7f21fb20788c39acce8786f0d9d6", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703232": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm glad the Facebook guy was able to cramp your data portability extremism a little bit into some pragmatic considerations that aren't just other people's privacy, which is something you may not care about, but raise just data *management* issues, like the problem of software you can't leave because it keeps spraying your info everywhere.<br><br>What I dislike about this discussion is the horrid artificial problem created out of thin air, which then is mounted as a thing needing a \"solution\".<br><br>And that problem is an imaginary one, where tekkies who don't like typing their handles and passwords 10 times over are inconvenienced.<br><br>It's simply hard to see that as a problem. Who cares?! You can solve the problem by making your handle and password the same everywhere, which shouldn't matter on these dollar-a-dozen social networks that come and go, and aren't involving monetary transactions but only chat.<br><br>Surely some of them will die off and only a few stronger ones will survive and/or be bought out. So why fuss about your inability to port your friendz from <a href=\"http://Wikitikiwoo.com\" rel=\"nofollow\">Wikitikiwoo.com</a> to <a href=\"http://Rinkydinki.net\" rel=\"nofollow\">Rinkydinki.net</a> when both of them will become extinct by next year?<br><br>I also don't like the idea of having some social-mark-up that might inevitably enable some entity to have all your social data centralized somewhere under the guise of open-source and under the guise of you being to manage and apportion it out to this or that social network.<br><br>At some point, the places that exist on the Internet that you will be \"on\" aren't going to be the places anymore, such that you have to sign up for them.<br><br>The place you will be \"on\" will be your phone, with its unique number and password. Obviously you'll control what you want to be on that mobile phone yourself, linked to that number and password. You won't need any hand-holding from any opensourced wikitarian to do this.<br><br>And that phone will then access all the stuff out there and maybe not even bother to log in anymore -- why should it? it won't need to. The websites will be the connecting spaces between phones.<br><br>Yes, there will be multiple phone services that will not have interoperability. Good!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_19:42:39", "killed": false, "user_key": "b1088dbd877c2d7d33e6b3b63ee38081", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703233": {"up_voted": false, "ip": "", "has_replies": false, "message": "The reason why it'll take so long to do this simply is that all those social network companies are scared to loose their users once they can move data with a click. There are lots of redundant services (and atm more and more seem to become available) and some will simply become obsolete once you can have all the apps AND your data on any network. But I believe social networks might become the next email. Everybody uses it but you can't make much money out of it (not my idea, I think I read it somewhere, maybe techcrunch). But evidently all email providers offer more or less the same features.<br><br>Most of the scenarios you mention involve some kind of decision a service provider can't make on his own (mostly because it can't be automated or generalized). So what? Let the user decide which information to share with whom, when and for how long. We're the only ones really responsible for our data. Why don't they let us be?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:02:18", "killed": false, "user_key": "4c8fb903fabe7e6986d4a066326239cf", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703234": {"up_voted": false, "ip": "", "has_replies": false, "message": "Matt (comment #6) says:<br><br>\"We really need to push for an Open spec on social markup. A downloadable file (like OPML for feeds) marked up with microformats containing your social profile information... all you should have to do is import this file containing all info...\"<br><br>That would be FOAF. It was around a long time before the current crop of social networks, and has had an awful lot of work put into it by some very smart people. I'm surprised nobody here has mentioned it yet, as it's an idea whose time has clearly come. See it at: <a href=\"http://www.foaf-project.org/\" rel=\"nofollow\">http://www.foaf-project.org/</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-30_14:48:46", "killed": false, "user_key": "6fbab64c95396f6b64389f633013ea77", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703235": {"up_voted": false, "ip": "", "has_replies": false, "message": "There are so many open questions (as described), and we are \"just\" talking about DATA portability. What if meaning comes into play (portable ontologies)? One question is \"what exists?\", another is \"what is/shall be transfered?\". Things are not getting easier...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_14:20:45", "killed": false, "user_key": "3b958d50a0aa8b9c0d850c9e59a4c00d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703236": {"up_voted": false, "ip": "", "has_replies": false, "message": "<a href=\"http://DataPortability.org\" rel=\"nofollow\">DataPortability.org</a> won't work because they aren't solving the biggest problem -- and probably can't. Just look at their FAQ - it breaks the problem into vendors, consumers, and standards and technology. They're skirting around the real problem, which is lack of a consistent data model. Absent that, data portability inevitably encounters impedence mismatches at every translation point as different sites try to use the data for different purposes.<br><br>Look at a really core example: person. If you look in a law book, the flesh and blood you will find that there are different concepts of person. You as a reader of this blog are a natural person or, at least for our purposes. A \"legal person\" can also be, for example, a corporation, a trustee, a partnership, etc.. So, a single natural person can have a wide variety of relationships and types of relationships with any number of legal persons. In fact, persons in general can have a wide variety of relationships with other persons; natural persons are just a special case. Data portability has to consider:<br><br>* Relationships between people and other people (natural or otherwise).<br>* Trust relationships between people.<br>* Transitivity of those relationships.<br><br>Now add back the reality of an online identity. Identity is not a person. It's the handle to interact with a system. Data portability is based on the idea that if \"you\" just had a portable identity, problems would be solved. The misguided assumption is that multiple identities are just an artifact of using computers, and that it's a problem that goes away in the real world. It doesn't. Identity is just a handle that ties some identifier such as \"robertscoble\" to some person, with some degree of confidence. So now the question is which person should it tie to? Robert Scoble? Scobleizer? Is Scobleizer more useful as an identity or as a \"person\" in it's own right? What relationship does either of those \"people\" have to the real Rober Scoble? Do you really want those tied to the same person as your birth certificate, passport and IRS records? Would you want that ability if, for example, somebody started publishing as \"Scobleizer\" on some other blog? If not, how could any of those identities legitimately be called yours? The boundary between you and your online presence is fuzzy. That adds to the data portability problem:<br><br>* Relationships between authentication techniques (passwords, etc.) and identities.<br>* Confidence in those relationships.<br>* Transitivity of the confidence across systems that are themselves authenticated to varying degrees of confidence.<br>* Relationships between identities and people.<br>* Trust between people and the sites that use the identities.<br><br>Whatever movement we get this year will have to be very careful about which part of the problem they try to solve. OpenId has done a really good job of making clear what pieces it solves and which it doesn't. It doesn't solve a lot of things, but at least acknowledges as much. I'm not so sure that <a href=\"http://DataPortability.org\" rel=\"nofollow\">DataPortability.org</a> has yet established exactly where their boundaries are and should be.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-28_15:45:12", "killed": false, "user_key": "d9db8ecb04a59b479c62e49c02b88a59", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703237": {"up_voted": false, "ip": "", "has_replies": false, "message": "This issues you raise are important.  I have been working for 4 years almost full time to help support the evolution of a community to solve these problems. At the core of the problem of getting people related data to move is - Identity.  This is what IDentity Commons is all supporting a community of groups addressing the range of issues (technical, social and legal) that come up. <a href=\"http://wiki.idcommons.net/index.php/Working_Group_Descriptions\" rel=\"nofollow\">http://wiki.idcommons.net/index.php/Working_Gro...</a><br><br>I am VERY hopeful that the face to face opportunity to meet at the Data Sharing Summit will move things forward significantly.  <a href=\"http://www.datasharingsummit.com\" rel=\"nofollow\">http://www.datasharingsummit.com</a> - I hope you and other deeply concerned about getting this problem solved can come - there is nothing like a white board and and a real live face to face conversation to make progress on difficult issues.<br><br>The event is being run in the tradition of the Internet Identity Workshop that has been instrumental in progress in that realm.  <a href=\"http://iiw.idcommons.net\" rel=\"nofollow\">http://iiw.idcommons.net</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-28_16:31:27", "killed": false, "user_key": "28053556c181149f71116ee80d7b1be3", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703238": {"up_voted": false, "ip": "", "has_replies": false, "message": "I don't think by the end of the year, but it needs to happen soon. hell, one example... I would like it once when I leave comments on blogs that I don't need to remember the logins for wordpress, blogger and who knows what else, and the myriad of email addresses I used over the years to set them up. I can't tell you how many times I wanted to leave a comment but the moment passed by the time I either created an ID for something, hunted for the login, or reset a password. Sounds small scale, but a single sign on for all that would be huge.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-04-01_22:06:29", "killed": false, "user_key": "dc5065aa3b9c6ea0586c20a9d7ad5b79", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703239": {"up_voted": false, "ip": "", "has_replies": false, "message": "I can't believe you were still using Hotmail in 2008...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_12:17:31", "killed": false, "user_key": "272c10be6b0847611171791042035108", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703240": {"up_voted": false, "ip": "", "has_replies": false, "message": "What ever happened to the discussion about multiple encrypted databases that contain our information, which is cached for a certain period of time. Commenter 41 is talking about that. Sort of like DNS root servers and TTL settings. Bidirectional propagation is tough, so push everything back to the mothership, then push it out to other services. Dealing with diffs between what you want displayed on various services is going to be tough.<br><br>Perhaps the signup process will be more along the lines of \"put checks next to all the data you want to be made public.\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_09:22:09", "killed": false, "user_key": "5c8328a8a72fef8e27bcf9a9ac56a56a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703241": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think Friend Feed is going to provide a better open social network than OpenSocial ever will.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_12:56:17", "killed": false, "user_key": "7bfd646dea8e47642bbb573f026bf159", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703242": {"up_voted": false, "ip": "", "has_replies": false, "message": "Normal people are, at some point, going to get sick of having to deal with so many social networks. I believe things will converge to a small number of networks. Other systems have gone through similar evolution over the years - remember how many web-email providers there were at one point? We struggled with how we will manage so many email addresses.<br><br>I don't believe portability can ever be done automatically by the networks. There are just too many use cases and privacy concerns and issues to get this right. IMO, external tools that help export and import data in and out of the networks is the right way. The user controls these tools and decide what and when to do data porting. Automation can be achieved by the user with the right tools. But they dont have to worry about the networks doing anything right or wrong.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_13:22:43", "killed": false, "user_key": "c106a6dde433ffbeca42deecdda96936", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703243": {"up_voted": false, "ip": "", "has_replies": false, "message": "I guess the question that comes to mind over this exact issue is when does one begin to limit the number of social networks they are a part of?  Really the only way to not have to change your email on several sites is to not sign up for so many sites, but in this Web 2.0 world where people jump from service to service as the \"next big thing\" comes along that concept is made more difficult to actually adhere to.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_13:23:29", "killed": false, "user_key": "ef9a110e6f84d3ebf3d4672ad090a1de", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703244": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm glad you got to talk to Dave and he injected some perspective into your \"Data Portability\" invectives.<br><br>On the other hand, I don't understand where how you'd come to the conclusion that sharing content or making it portable (i.e. photos, videos, blog posts) is the hard part compared to sharing identities across different services. Don't we already have the former happening today?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:50:25", "killed": false, "user_key": "579fbc756c0d918e2244dff914c9bf88", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703245": {"up_voted": false, "ip": "", "has_replies": false, "message": "The problem with OpenSocial is that it solves a developer problem, not a user problem. Developers want to put their gadgets/widgets/mini-apps in other social networks, but as a user, do you really want more junk to contend with?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:38:00", "killed": false, "user_key": "luigimontanez", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703246": {"up_voted": false, "ip": "", "has_replies": false, "message": "The answer to all of your questions is standards.<br><br>The Google Social Graph API is this.<br><br><a href=\"http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q=http%253A%252F%252Fscobleizer.com\" rel=\"nofollow\">http://socialgraph-resources.googlecode.com/svn...</a><br><br>As soon as we can define standards for friends then I think the need for a social network has gone. And it has already been defined. The only way that data can become portable between social networks is if it doesn't matter which social network you are on you can still communicate with each other. i.e. Like EMAIL. But obviously with more standards it can be richer.<br><br>I wrote a post about this a while ago:<br><br>\"If you could move your information about friends etc (your social graph) right now would you? Where would you move it to? Moving your social graph is not going to be useful unless all of your friends (or at least some of them) move too. In this way making data portable is not really going to change anything about the lock in with social networks. People are going to stay where people they know are. Similar arguments debunk the significance of Open Social. People don\u2019t switch networks for applications or widgets. They move because of their friends.<br><br>What is needed instead is to make the rich experience of a social network standardised. I think Google knows this. The real future is ONE social network for everyone. I see social networking as an extension to email. From Gmail I can email people on Hotmail and they can email me back. There is a communication standard there. So what we need is a standard account type (that is OpenID) and then standards for feeds of activity (that\u2019s RSS), and standards for everything else you do on a social network. Once the social networking \u201cscape\u201d is fully open in this way people can use their own bit of the network (essentially their network provider) like Facebook, or Google, or Bebo, or whatever. And it might have slightly different features just like the way that Gmail has different features to Hotmail but it would have all been the same network. So I can switch from Google to Facebook and I\u2019ll see a different interface but can browse my friends on whichever network provider they\u2019ve chosen.<br><br>OpenID and a standard social graph is the key. As far as I can tell there is no benefit in the \u201chalf-way\u201d solution where I can move my data from Facebook to Orkut. My friends will still be on Facebook. Fingers crossed this can go all the way.\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:45:21", "killed": false, "user_key": "sgd", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703247": {"up_voted": false, "ip": "", "has_replies": false, "message": "@Dennis McDonald,<br><br>I think for it to work it should be opt-in if that is even feasible.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:08:19", "killed": false, "user_key": "c519558f6d6ff12136ac8f05783a4cd9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703248": {"up_voted": false, "ip": "", "has_replies": false, "message": "Well, I am all pro data-portability..<br><br>But if you look at LinkedIn, they have build their own Twitter for their system, instead of just using Twitter...those are the things my mind just cant seem to get..", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_10:03:02", "killed": false, "user_key": "3690e1595c09d9b9f42baa64d16e8ae5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703249": {"up_voted": false, "ip": "", "has_replies": false, "message": "You should listen to the <a href=\"http://DataPortability.org\" rel=\"nofollow\">DataPortability.org</a> podcasts, too, for more insight into why it's going to take so long for \"social data portability\" to happen without a few large vendors weighing in and knocking heads.<br><br>My take: unless I can control who can see what, I'm not in favor of \"social data portability.\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:51:16", "killed": false, "user_key": "bc2c84cea752a5b3734f9fbcd8da6ccf", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703250": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm totally lost... I mean totally lost.<br><br>Robert, in your post you have defined what you think \"Data Portability\" should be. However, I think the industry has to define the requirements for what is \"Data Portability\" first and then deal with the politics of implementation.<br><br>To do anything of substance you have to have common requirements so everyone knows what's going on and can march to the same beat.<br><br>To answer your question, you could have some type of portability before the end of the year, depends on the requirements.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:48:43", "killed": false, "user_key": "ff0eb14189bbc1754983c610b5895ae4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703251": {"up_voted": false, "ip": "", "has_replies": false, "message": "I was just thinking that this was a real issue but hadn't figured on a solution. Not so much for my email as I control my domain name but because I have friends, associates and the like who change their contact information when they change jobs or rebrand etc.<br><br>I thought Plaxo was supposed to lead things off into the right direction but shifted focus to being a pseudo LinkedIn. I think that this will be much easier than the supposed Local Number Portability that was supposed to allow customers keep their phone number as they switched telcos in North America.<br><br>For me, too I have dozens of logins, usernames, nicks because of formatting, preference of nicks/handles over emails and such so how are some people to know it is me. Avatars help but have no ID or sniff test for people to say, \"That's him!\" or say, \"This person is an imposter.\".<br><br>I'd be interested to see if a solution for cross application interaction happens.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:47:36", "killed": false, "user_key": "c519558f6d6ff12136ac8f05783a4cd9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703252": {"up_voted": false, "ip": "", "has_replies": false, "message": "We really need to push for an Open spec on social markup.  A downloadable file (like OPML for feeds) marked up with microformats containing your social profile information... all you should have to do is import this file containing all info... and sure, Network B might have some additional info you can add there, but they should turn around and allow you to re-export your data updated with this info. An automatic dissemination is brutal.. like peoples complaints about socialthing (when argued against friendfeed)... automatic can be a burden.. i don't keep the same contacts everywhere...  you are a special case of person because you are followed by/follow most known species of organism on just about every social network... even the ones that aren't even out. lol.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:38:45", "killed": false, "user_key": "8368b78ae44072e829f80ee577d35c96", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703253": {"up_voted": false, "ip": "", "has_replies": false, "message": "just have microsoft buy everything. then itll work together :D<br><br>(this is acutally why i love it that facebook and ms are getting cuddly. i use live services extensivly, and  facebook too. they are together like 80% of my online social thingies)", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:33:36", "killed": false, "user_key": "f3b41bc009a402017febfab746770bc5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703254": {"up_voted": false, "ip": "", "has_replies": false, "message": "Excellent and Insightful article.  This is an issue that will not go away in a short time.  It requires a level of co-operation between the players that is unprecedented.<br><br>In the business world you'd expect it to be a relatively straightforward task to decide on the  'standard schema' for a customer record to enable easy data interchange between systems (a long promised but not yet delivered facility) - but this has yet to happen and that is not on the scale of complexity that you are talking about here ...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:32:46", "killed": false, "user_key": "c8fc6f50eb2ceb57df0197176d6cb709", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703255": {"up_voted": false, "ip": "", "has_replies": false, "message": "Did you notice with the MSN messenger you get the email address of your friends off Facebook - exactly the kind of thing that you were banned on Facebook for :)<br><a href=\"http://www.unodewaal.com/2008/03/26/microsoft-invites-pull-your-address-data-out-of-fb/\" rel=\"nofollow\">http://www.unodewaal.com/2008/03/26/microsoft-i...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:25:17", "killed": false, "user_key": "c270cc4de6efecbb5b0e9d6acfaa641b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703256": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"For instance, what if a user wants to delete his or her info off of Facebook. Today that's possible\"<br><br>LOLWUT? Why did Britain's Data Commissioner have to step in to slap down Facebook for it's efforts to prevent users getting their account fully deleted.<br><br>Dave Morin sounds like he's spreading FUD. There are existing implementations - like the ability to import your contacts into Dopplr from Twitter and from any page with hCards. That works fine, and nobody is bitching about the privacy concerns of this.<br><br>A lot of people are bringing up \"policy\" reasons why this kind of thing can't happen. The fact is that they are already happening. I'm sceptical that it'll be groups like <a href=\"http://DataPortability.org\" rel=\"nofollow\">DataPortability.org</a> that'll push this - it's more likely it'll be hackers working together in an ad-hoc way will solve the problems. Then the vendors will jump in front of the parade and start preaching openness when it becomes inevitable.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:27:22", "killed": false, "user_key": "3e00403e6a08fc4499057d8be5b85709", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703257": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think we'll experience some small steps but the scenario you're drawing (and that we're all hoping for) will indeed take time. Anyway, it's good to see that the big players are actually working on it. That's a big thumbs up.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_09:29:50", "killed": false, "user_key": "79391b2e6f7370c9bdcd28eb28ad6698", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703258": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hi Robert,<br>You have raised a very valid point and I had twittered on that in reply. One thing that also comes into my mind is that in an open dataportable environment how will these applications trust each other. What is the qualifying parameter and checks that an application needs to do before talking to another application. Are systems like OpenID solution to that. In the portal environment 'Trust' will be the most critical factor and there needs to a common an open qualifier for 'Trust' too.<br><br>Thanks<br>Santosh Maharshi", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:44:22", "killed": false, "user_key": "18c0e6d661515858720aeac353280589", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703259": {"up_voted": false, "ip": "", "has_replies": false, "message": "How do you eat an elephant? One bite at a time.<br><br>Yes, are lots of big challenges around data portability.  However, just because it's tough to solve the *whole* problem, doesn't mean it's not worth solving any part of it.<br><br>Lots of software developers fall into the trap of wanting to design the \"big solution\" for the \"big problem\".  However, that's almost *never* the right answer as far as the end-users of a computer system are concerned.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:52:05", "killed": false, "user_key": "6625370ffa42f6c3f82d88c4bce53fc9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703260": {"up_voted": false, "ip": "", "has_replies": false, "message": "After the last DP Meetup, I did a blog posting that summed this up a bit..<br><a href=\"http://thesocialnetworker.com/tsn/tsn.nsf/dx/what-DataPortability-offers-businesses.htm\" rel=\"nofollow\">http://thesocialnetworker.com/tsn/tsn.nsf/dx/wh...</a><br><br><br>Chris Saad and myself in a podcast on <a href=\"http://DataPortability.org\" rel=\"nofollow\">DataPortability.org</a><br><a href=\"http://thesocialnetworker.com/tsn/tsn.nsf/dx/TheSocialNetworkerEpisode5.htm\" rel=\"nofollow\">http://thesocialnetworker.com/tsn/tsn.nsf/dx/Th...</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:53:21", "killed": false, "user_key": "aac81455403c4c36d22f59fb63cf7c09", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703261": {"up_voted": false, "ip": "", "has_replies": false, "message": "great...in addition to the rampant facebook spam i already get, all i need is facebook spam that can trickle into my email inbox for a vague \"data portability\" cause. i've noticed that most people more liberally give away their fb friendship than their email address, which is more highly guarded.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:53:47", "killed": false, "user_key": "12577d95bfa06342d7d716e0157adba4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703262": {"up_voted": false, "ip": "", "has_replies": false, "message": "I really want to see data portability succeed, it's our main weapon against walled gardens like Facebook. Google is a good example... it's easy to share or not share info publicly from within its services, and it's easy to extract my data and take it elsewhere. Sharing has to be under my complete control. I don't want any site automatically sharing any of my data with any other site. If there aren't controls to be very specific about what sharing/updating I do and do not want, the default should be no sharing. Privacy always trumps openness.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_11:58:41", "killed": false, "user_key": "822d8ab24cda4d2824322820c8e26dae", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703263": {"up_voted": false, "ip": "", "has_replies": false, "message": "Thank you for that list of social boards I was not aware of some of them.<br><br>Mary", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_14:04:47", "killed": false, "user_key": "1b6fe66542027f0a55598a58677be125", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703264": {"up_voted": false, "ip": "", "has_replies": false, "message": "[10:33:03] John Breslin says: despite all the difficult scenarios (mainly in terms of ownership), you should still be able to bring your profile and your content with you<br>[10:33:25] John Breslin says: even without comments, tags, etc. (if they \"belong\" to other people)<br>[10:34:06] John Breslin says: the stuff \"belonging\" to others could still be ported depending on a profile option for those users on the old/new sites<br>[10:34:40] John Breslin says: \"Yes, let my friends port objects that connect us together from this site.\" / \"Yes, let my friends port objects that connect us together to this site.\"", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_06:38:36", "killed": false, "user_key": "45e47229d60fd5950193a08797701cb9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703265": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert, do you speaking about something like this<br><a href=\"http://blogs.zdnet.com/microsoft/?p=1291\" rel=\"nofollow\">http://blogs.zdnet.com/microsoft/?p=1291</a> ?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_06:01:56", "killed": false, "user_key": "28e1204754440a5114edff705d675217", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703266": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm surprised that the use case quoted were seen as something not thought about.<br><br>The data portability working group have been looking at examples like that since the get go.<br><br>I touched on data ownership in <a href=\"http://shaidorsai.wordpress.com/2008/01/11/trust-openid-vrm-data-portablity-and-how-does-it-hang-together/\" rel=\"nofollow\">http://shaidorsai.wordpress.com/2008/01/11/trus...</a><br>and said then that it was something we needed to get under. JP's talked about several times, refered to in that post.<br><br>Worried about your content? Stick a creative commons licence on it, if you want attribution and so on. That'll make your intentions *clear*. It won't stop thieves, but at least your wishes are explicit.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-27_05:04:28", "killed": false, "user_key": "bc741aa407c4c878ee8d0afad10ed1b0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703267": {"up_voted": false, "ip": "", "has_replies": false, "message": "the google wow begins :)", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_22:02:31", "killed": false, "user_key": "32ca778cb6dc72863614273106fa01ad", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703268": {"up_voted": false, "ip": "", "has_replies": false, "message": "I don't know if the guy you talked to at Facebook is a real technical guy or just someone with a fancy title.  Two things stood out for me in your message and in his response:<br><br>I think Open ID is an important part of this.  Open ID does not require every product I use to keep a copy of my ID and password, but whatever system I use as my authentication server must have a high degree of uptime and responsiveness to validate me to all the others.<br><br>Why can't my address list be housed on Google if I use that most for e-mail, or Yahoo if I use that, and available in real time to any service I've authorized to use it?  You seem to be thinking in terms of every service copying all of my accumulated data when I first sign up.    I'm quite sure the Facebook guy was thrilled to tell you how impractical that would be.   I can just imagine him saying that RSS was impossible as it would require every player to maintain an entire copy of the Internet!  Once people join these walled garden companies they can't think straight any more (if they ever could).<br><br>Oh a third thing... for data that DOES need to be copied from one service to another, all you need is a standard for defining a \"delete transaction\" or some more generic transaction mechanism to keep them all in sync without constant copying.  And in the case that someone asked above of you changing your e-mail address to different things on several services (assuming you e-mail address was being used as the common linkage) then you would simply be breaking the connection at that point.  I don't see anything wrong with that, if that's what you want to do.  Maybe there could (and should) even be a way of linking two pre-existing accounts when new services hop on the bandwagon.   I would hope so.<br><br>Facebook is dragging its heels for purely non-technical reasons, and they make themselves look progressively sillier with every new attempt.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_21:31:49", "killed": false, "user_key": "macbeach", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "1 year 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}, "9703269": {"up_voted": false, "ip": "", "has_replies": false, "message": "I envision data \"portability\" as just that, your info moving where you do. In the browser. Think a robots.txt file meets cookies where I decide who gets what level of information and how the relationships are mapped.<br><br>I simple \"handshake\" with a new website would allow them to see where else I share similar info, who I relate to and even (cringe) serve me relevant ads.<br>This could be expanded to all levels of customization or preferences for web use.<br><br>One config file to rule them all?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_18:06:18", "killed": false, "user_key": "4dd0386976de668049b55e43e6eeacb5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703270": {"up_voted": false, "ip": "", "has_replies": false, "message": "@Christian - agreed, that's why the DP discussion exists - to discuss these tricky use cases and solve them.<br><br>Facebook is not unique in having these problems, and the answers *are* being discussed - good answers.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_18:18:30", "killed": false, "user_key": "2d9567a5dc6d38988355ee3e8c0429f2", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703271": {"up_voted": false, "ip": "", "has_replies": false, "message": "Well, a not so obvious solution to many of these problems would be to leave all data where it belongs. With the user. No need for data portability then. Only a simple agreement on how a user would identify himself to a service that he wishes to make use of (even temporary). If you put the user in charge and let him decide which info he shares with others and which not, it would put most current web 2.0 walled garden social graph data hogging services out of business. We would get a user centric web. A web where you are in charge of your own interactions with others. And social networks would simply become means to interact. I could use any means I want as I have my friends with me.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-03-26_16:14:23", "killed": false, "user_key": "b11a9a7bee6fc07723be3e8aea636835", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703272": {"up_voted": false, "ip": "", "has_replies": false, "message": "Yup, I'm just waiting for this to happen too.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-07-13_14:11:13", "killed": false, "user_key": "85d181059d928358602c985ef22d0ca4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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}, "9703273": {"up_voted": false, "ip": "", "has_replies": false, "message": "Who wants to port their comments from one site to the next anyway?  I don't really think that's the purpose.  If someone needs to go elsewhere then so be it.  Leave some clutter behind.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2008-10-07_23:43:04", "killed": false, "user_key": "b9da358d6d2cfc0f07ead73fbe4a08f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "1 year 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": "18357852", "user_id": "anonymous", "forum_id": "125200", "hash": 6912160502633318014}, "thread": {"total_posts": 0, "paginate": false, "per_page": 0, "slug": "the_real_roadblocks_to_data_portability_on_social_networks", "num_pages": 1, "days_alive": 0, "realtime_paused": true, "id": 18357852, "num_posts": 60, "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=the_real_roadblocks_to_data_portability_on_social_networks' +
		'&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/the_real_roadblocks_to_data_portability_on_social_networks/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='	+ 'the_real_roadblocks_to_data_portability_on_social_networks'
			+ '&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/the_real_roadblocks_to_data_portability_on_social_networks/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">60</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://scobleizer.disqus.com/the_real_roadblocks_to_data_portability_on_social_networks/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/the_real_roadblocks_to_data_portability_on_social_networks/">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/the_real_roadblocks_to_data_portability_on_social_networks/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:18357852" 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'				: 'the_real_roadblocks_to_data_portability_on_social_networks',
			// 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/the_real_roadblocks_to_data_portability_on_social_networks/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='	+ 'the_real_roadblocks_to_data_portability_on_social_networks'
			+ '&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='	+ 'the_real_roadblocks_to_data_portability_on_social_networks'
			+ '&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='		+ 'the_real_roadblocks_to_data_portability_on_social_networks'
				+ '&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/18357852/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-9703255">\
	 <div id="dsq-comment-header-9703255" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703255" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703255" href="http://www.unodewaal.com/" target="_blank" rel="nofollow">Uno De Waal</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703255" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703255" class="dsq-comment-message">Did you notice with the MSN messenger you get the email address of your friends off Facebook - exactly the kind of thing that you were banned on Facebook for :)<br><a href="http://www.unodewaal.com/2008/03/26/microsoft-invites-pull-your-address-data-out-of-fb/" rel="nofollow">http://www.unodewaal.com/2008/03/26/microsoft-i...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703256">\
	 <div id="dsq-comment-header-9703256" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703256" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703256" href="http://tommorris.org/blog/" target="_blank" rel="nofollow">Tom Morris</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703256" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703256" class="dsq-comment-message">"For instance, what if a user wants to delete his or her info off of Facebook. Today that\'s possible"<br><br>LOLWUT? Why did Britain\'s Data Commissioner have to step in to slap down Facebook for it\'s efforts to prevent users getting their account fully deleted.<br><br>Dave Morin sounds like he\'s spreading FUD. There are existing implementations - like the ability to import your contacts into Dopplr from Twitter and from any page with hCards. That works fine, and nobody is bitching about the privacy concerns of this.<br><br>A lot of people are bringing up "policy" reasons why this kind of thing can\'t happen. The fact is that they are already happening. I\'m sceptical that it\'ll be groups like <a href="http://DataPortability.org" rel="nofollow">DataPortability.org</a> that\'ll push this - it\'s more likely it\'ll be hackers working together in an ad-hoc way will solve the problems. Then the vendors will jump in front of the parade and start preaching openness when it becomes inevitable.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703257">\
	 <div id="dsq-comment-header-9703257" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703257" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703257" href="http://www.jimdo.com/" target="_blank" rel="nofollow">Matthias</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703257" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703257" class="dsq-comment-message">I think we\'ll experience some small steps but the scenario you\'re drawing (and that we\'re all hoping for) will indeed take time. Anyway, it\'s good to see that the big players are actually working on it. That\'s a big thumbs up.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703254">\
	 <div id="dsq-comment-header-9703254" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703254" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703254" href="http://www.tektalkin.co.uk/" target="_blank" rel="nofollow">Steve Cholerton</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703254" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703254" class="dsq-comment-message">Excellent and Insightful article.  This is an issue that will not go away in a short time.  It requires a level of co-operation between the players that is unprecedented.<br><br>In the business world you\'d expect it to be a relatively straightforward task to decide on the  \'standard schema\' for a customer record to enable easy data interchange between systems (a long promised but not yet delivered facility) - but this has yet to happen and that is not on the scale of complexity that you are talking about here ...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703253">\
	 <div id="dsq-comment-header-9703253" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703253" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703253">jonas</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703253" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703253" class="dsq-comment-message">just have microsoft buy everything. then itll work together :D<br><br>(this is acutally why i love it that facebook and ms are getting cuddly. i use live services extensivly, and  facebook too. they are together like 80% of my online social thingies)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703252">\
	 <div id="dsq-comment-header-9703252" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703252" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703252">Matt</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703252" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703252" class="dsq-comment-message">We really need to push for an Open spec on social markup.  A downloadable file (like OPML for feeds) marked up with microformats containing your social profile information... all you should have to do is import this file containing all info... and sure, Network B might have some additional info you can add there, but they should turn around and allow you to re-export your data updated with this info. An automatic dissemination is brutal.. like peoples complaints about socialthing (when argued against friendfeed)... automatic can be a burden.. i don\'t keep the same contacts everywhere...  you are a special case of person because you are followed by/follow most known species of organism on just about every social network... even the ones that aren\'t even out. lol.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703251">\
	 <div id="dsq-comment-header-9703251" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703251" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703251" href="http://www.smashingred.com/blog/" target="_blank" rel="nofollow">Jay Gilmore (smashingred)</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703251" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703251" class="dsq-comment-message">I was just thinking that this was a real issue but hadn\'t figured on a solution. Not so much for my email as I control my domain name but because I have friends, associates and the like who change their contact information when they change jobs or rebrand etc.<br><br>I thought Plaxo was supposed to lead things off into the right direction but shifted focus to being a pseudo LinkedIn. I think that this will be much easier than the supposed Local Number Portability that was supposed to allow customers keep their phone number as they switched telcos in North America.<br><br>For me, too I have dozens of logins, usernames, nicks because of formatting, preference of nicks/handles over emails and such so how are some people to know it is me. Avatars help but have no ID or sniff test for people to say, "That\'s him!" or say, "This person is an imposter.".<br><br>I\'d be interested to see if a solution for cross application interaction happens.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703250">\
	 <div id="dsq-comment-header-9703250" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703250" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703250">Herschel</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703250" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703250" class="dsq-comment-message">I\'m totally lost... I mean totally lost.<br><br>Robert, in your post you have defined what you think "Data Portability" should be. However, I think the industry has to define the requirements for what is "Data Portability" first and then deal with the politics of implementation.<br><br>To do anything of substance you have to have common requirements so everyone knows what\'s going on and can march to the same beat.<br><br>To answer your question, you could have some type of portability before the end of the year, depends on the requirements.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703249">\
	 <div id="dsq-comment-header-9703249" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703249" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703249" href="http://www.ddmcd.com/" target="_blank" rel="nofollow">Dennis McDonald</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703249" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703249" class="dsq-comment-message">You should listen to the <a href="http://DataPortability.org" rel="nofollow">DataPortability.org</a> podcasts, too, for more insight into why it\'s going to take so long for "social data portability" to happen without a few large vendors weighing in and knocking heads.<br><br>My take: unless I can control who can see what, I\'m not in favor of "social data portability."</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703248">\
	 <div id="dsq-comment-header-9703248" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703248" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703248" href="http://marijnsomers.blogspot.com/" target="_blank" rel="nofollow">Marijn</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703248" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703248" class="dsq-comment-message">Well, I am all pro data-portability..<br><br>But if you look at LinkedIn, they have build their own Twitter for their system, instead of just using Twitter...those are the things my mind just cant seem to get..</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703247">\
	 <div id="dsq-comment-header-9703247" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703247" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703247" href="http://www.smashingred.com/blog/" target="_blank" rel="nofollow">Jay Gilmore (smashingred)</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703247" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703247" class="dsq-comment-message">@Dennis McDonald,<br><br>I think for it to work it should be opt-in if that is even feasible.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703245">\
	 <div id="dsq-comment-header-9703245" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703245" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703245">luigimontanez</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703245" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703245" class="dsq-comment-message">The problem with OpenSocial is that it solves a developer problem, not a user problem. Developers want to put their gadgets/widgets/mini-apps in other social networks, but as a user, do you really want more junk to contend with?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703246">\
	 <div id="dsq-comment-header-9703246" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703246" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703246">Sam Davyson</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703246" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703246" class="dsq-comment-message">The answer to all of your questions is standards.<br><br>The Google Social Graph API is this.<br><br><a href="http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q=http%253A%252F%252Fscobleizer.com" rel="nofollow">http://socialgraph-resources.googlecode.com/svn...</a><br><br>As soon as we can define standards for friends then I think the need for a social network has gone. And it has already been defined. The only way that data can become portable between social networks is if it doesn\'t matter which social network you are on you can still communicate with each other. i.e. Like EMAIL. But obviously with more standards it can be richer.<br><br>I wrote a post about this a while ago:<br><br>"If you could move your information about friends etc (your social graph) right now would you? Where would you move it to? Moving your social graph is not going to be useful unless all of your friends (or at least some of them) move too. In this way making data portable is not really going to change anything about the lock in with social networks. People are going to stay where people they know are. Similar arguments debunk the significance of Open Social. People don’t switch networks for applications or widgets. They move because of their friends.<br><br>What is needed instead is to make the rich experience of a social network standardised. I think Google knows this. The real future is ONE social network for everyone. I see social networking as an extension to email. From Gmail I can email people on Hotmail and they can email me back. There is a communication standard there. So what we need is a standard account type (that is OpenID) and then standards for feeds of activity (that’s RSS), and standards for everything else you do on a social network. Once the social networking “scape” is fully open in this way people can use their own bit of the network (essentially their network provider) like Facebook, or Google, or Bebo, or whatever. And it might have slightly different features just like the way that Gmail has different features to Hotmail but it would have all been the same network. So I can switch from Google to Facebook and I’ll see a different interface but can browse my friends on whichever network provider they’ve chosen.<br><br>OpenID and a standard social graph is the key. As far as I can tell there is no benefit in the “half-way” solution where I can move my data from Facebook to Orkut. My friends will still be on Facebook. Fingers crossed this can go all the way."</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703244">\
	 <div id="dsq-comment-header-9703244" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703244" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703244" href="http://www.25hoursaday.com/weblog" target="_blank" rel="nofollow">Dare Obasanjo</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703244" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703244" class="dsq-comment-message">I\'m glad you got to talk to Dave and he injected some perspective into your "Data Portability" invectives.<br><br>On the other hand, I don\'t understand where how you\'d come to the conclusion that sharing content or making it portable (i.e. photos, videos, blog posts) is the hard part compared to sharing identities across different services. Don\'t we already have the former happening today?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703230">\
	 <div id="dsq-comment-header-9703230" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703230" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703230" href="http://www.dotnetjunkies.com/WebLog/paul/" target="_blank" rel="nofollow">paul</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703230" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703230" class="dsq-comment-message">The organization of personal-published information on the Web is still in it\'s infancy.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703233">\
	 <div id="dsq-comment-header-9703233" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703233" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703233" href="http://yodahome.de/" target="_blank" rel="nofollow">yodahome</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703233" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703233" class="dsq-comment-message">The reason why it\'ll take so long to do this simply is that all those social network companies are scared to loose their users once they can move data with a click. There are lots of redundant services (and atm more and more seem to become available) and some will simply become obsolete once you can have all the apps AND your data on any network. But I believe social networks might become the next email. Everybody uses it but you can\'t make much money out of it (not my idea, I think I read it somewhere, maybe techcrunch). But evidently all email providers offer more or less the same features.<br><br>Most of the scenarios you mention involve some kind of decision a service provider can\'t make on his own (mostly because it can\'t be automated or generalized). So what? Let the user decide which information to share with whom, when and for how long. We\'re the only ones really responsible for our data. Why don\'t they let us be?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703258">\
	 <div id="dsq-comment-header-9703258" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703258" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703258" href="http://blog.santoshmaharshi.com/" target="_blank" rel="nofollow">Santosh Maharshi</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703258" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703258" class="dsq-comment-message">Hi Robert,<br>You have raised a very valid point and I had twittered on that in reply. One thing that also comes into my mind is that in an open dataportable environment how will these applications trust each other. What is the qualifying parameter and checks that an application needs to do before talking to another application. Are systems like OpenID solution to that. In the portal environment \'Trust\' will be the most critical factor and there needs to a common an open qualifier for \'Trust\' too.<br><br>Thanks<br>Santosh Maharshi</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703259">\
	 <div id="dsq-comment-header-9703259" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703259" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703259" href="http://www.psynixis.com/blog/" target="_blank" rel="nofollow">Simon Brocklehurst</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703259" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703259" class="dsq-comment-message">How do you eat an elephant? One bite at a time.<br><br>Yes, are lots of big challenges around data portability.  However, just because it\'s tough to solve the *whole* problem, doesn\'t mean it\'s not worth solving any part of it.<br><br>Lots of software developers fall into the trap of wanting to design the "big solution" for the "big problem".  However, that\'s almost *never* the right answer as far as the end-users of a computer system are concerned.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703260">\
	 <div id="dsq-comment-header-9703260" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703260" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703260" href="http://TheSocialNetworker.com/" target="_blank" rel="nofollow">Chris Miller</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703260" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703260" class="dsq-comment-message">After the last DP Meetup, I did a blog posting that summed this up a bit..<br><a href="http://thesocialnetworker.com/tsn/tsn.nsf/dx/what-DataPortability-offers-businesses.htm" rel="nofollow">http://thesocialnetworker.com/tsn/tsn.nsf/dx/wh...</a><br><br><br>Chris Saad and myself in a podcast on <a href="http://DataPortability.org" rel="nofollow">DataPortability.org</a><br><a href="http://thesocialnetworker.com/tsn/tsn.nsf/dx/TheSocialNetworkerEpisode5.htm" rel="nofollow">http://thesocialnetworker.com/tsn/tsn.nsf/dx/Th...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703261">\
	 <div id="dsq-comment-header-9703261" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703261" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703261">Talweezy</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703261" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703261" class="dsq-comment-message">great...in addition to the rampant facebook spam i already get, all i need is facebook spam that can trickle into my email inbox for a vague "data portability" cause. i\'ve noticed that most people more liberally give away their fb friendship than their email address, which is more highly guarded.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703262">\
	 <div id="dsq-comment-header-9703262" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703262" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703262" href="http://logicalextremes.blogspot.com/search/label/privacy" target="_blank" rel="nofollow">Logical Extremes</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703262" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703262" class="dsq-comment-message">I really want to see data portability succeed, it\'s our main weapon against walled gardens like Facebook. Google is a good example... it\'s easy to share or not share info publicly from within its services, and it\'s easy to extract my data and take it elsewhere. Sharing has to be under my complete control. I don\'t want any site automatically sharing any of my data with any other site. If there aren\'t controls to be very specific about what sharing/updating I do and do not want, the default should be no sharing. Privacy always trumps openness.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703227">\
	 <div id="dsq-comment-header-9703227" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703227" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703227">John</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703227" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703227" class="dsq-comment-message">Uniquely identifying who YOU are is going to be one of the bigger challenges. Username? Uhm no! Email? Well, if you have 4 different ones, that\'s a challenge. SS#? If we all got that ID block thing :) Then again, the simple standard is to tell people, "if you want to integrate your networks, you must use the same email address", and if they don\'t, it\'s their problem.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703239">\
	 <div id="dsq-comment-header-9703239" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703239" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703239">JD</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703239" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703239" class="dsq-comment-message">I can\'t believe you were still using Hotmail in 2008...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703241">\
	 <div id="dsq-comment-header-9703241" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703241" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703241" href="http://internetducttape.com/" target="_blank" rel="nofollow">engtech</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703241" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703241" class="dsq-comment-message">I think Friend Feed is going to provide a better open social network than OpenSocial ever will.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703242">\
	 <div id="dsq-comment-header-9703242" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703242" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703242">gowrisivaprasad</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703242" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703242" class="dsq-comment-message">Normal people are, at some point, going to get sick of having to deal with so many social networks. I believe things will converge to a small number of networks. Other systems have gone through similar evolution over the years - remember how many web-email providers there were at one point? We struggled with how we will manage so many email addresses.<br><br>I don\'t believe portability can ever be done automatically by the networks. There are just too many use cases and privacy concerns and issues to get this right. IMO, external tools that help export and import data in and out of the networks is the right way. The user controls these tools and decide what and when to do data porting. Automation can be achieved by the user with the right tools. But they dont have to worry about the networks doing anything right or wrong.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703243">\
	 <div id="dsq-comment-header-9703243" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703243" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703243" href="http://www.mkoby.com/" target="_blank" rel="nofollow">Michael Koby</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703243" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703243" class="dsq-comment-message">I guess the question that comes to mind over this exact issue is when does one begin to limit the number of social networks they are a part of?  Really the only way to not have to change your email on several sites is to not sign up for so many sites, but in this Web 2.0 world where people jump from service to service as the "next big thing" comes along that concept is made more difficult to actually adhere to.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703263">\
	 <div id="dsq-comment-header-9703263" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703263" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703263" href="http://www.vegasbookmarks.com/" target="_blank" rel="nofollow">Mary</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703263" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703263" class="dsq-comment-message">Thank you for that list of social boards I was not aware of some of them.<br><br>Mary</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703226">\
	 <div id="dsq-comment-header-9703226" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703226" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703226" href="http://ideas.4brad.com/" target="_blank" rel="nofollow">Brad Templeton</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703226" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703226" class="dsq-comment-message">Data portability....  Yikes.<br><br>Call it "Facilitating transfer of personal information" and you might get a different take on it.  You write like it\'s all good, but it\'s going to mean that more people\'s personal data spreads to more and more companies -- and not just minor personal data, but your complete social network, likes, dislikes.   The marketers are salivating.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703223">\
	 <div id="dsq-comment-header-9703223" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703223" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703223" href="http://blog.stealthmode.com/" target="_blank" rel="nofollow">francine hardaway</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703223" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703223" class="dsq-comment-message">Dumb user here. The big issue here is TRUST. I\'m on as many networks as you are, but some of them I just signed up to test, and then rejected. Do I want them to have access to the ones I really use, that have stuff on them like my friends.? And what about the ones that I got put on because they spammed my address book? I don\'t want my trusted applications and my "non-trusted" applications mixed.<br><br>Not that I don\'t want the "change your address once" convenience, but when it comes with the spamminess of Plaxo, I always wonder if it\'s worth it.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703218">\
	 <div id="dsq-comment-header-9703218" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703218" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703218" href="http://www.ecademy.com" target="_blank" rel="nofollow">jbond</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703218" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703218" class="dsq-comment-message">There are many reasons why this will be hard. One right now is that every major system wants to invent it\'s own API, Contact Schema and Authentication. It\'s great that they want to do import/export but can we all please do it the same way? Oh. Wait a minute. We\'re talking about billion dollar companies here. :(<br><br>I think these issues are going to get solved from both ends. Top down defacto standards and bottom up innovation and evangelism. Let\'s hope they meet in the middle. The more people like Robert demand these sorts of functions and the more groups like DataPortability spread the word, the more likely it is to get done.<br><br>And as someone up there said, don\'t avoid the easy stuff because the big picture looks impossibly hard or some of the issues look intractable.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703224">\
	 <div id="dsq-comment-header-9703224" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703224" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703224">Jim</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703224" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703224" class="dsq-comment-message">I think Sam\'s comment above is closest to the solution, although I don\'t believe in having ONE Social Network, but rather, ONE social network API.  Companies offering OpenID are well positioned in this regard since they could simply add the necessary social network API\'s to their set of services.  This way, when you sign up on a website you can simply point to your OpenID provider who will provide, and more importantly, enforce all of your social network rules.   With this said, there\'s little to stop Facebook, MySpace, etc from supporting this and becoming an OpenID+Social_API provider.<br><br>All of the use cases Robert pointed out seem to be solved by this sort of solution.<br><br>Oh, and for the totally paranoid, I\'d even suggest having a browser plug-in that maintained your social networking rules.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703222">\
	 <div id="dsq-comment-header-9703222" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703222" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703222" href="http://www.ecademy.com" target="_blank" rel="nofollow">jbond</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703222" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703222" class="dsq-comment-message">BTW, Robert, where\'s your YASN-Roll? The list of links to your profile on all those systems. The one that\'s marked up with microformats so that things like the Socialgraph API can find it. And that can be used as the basis to find all your friends when you join the next one. And is linked to your OpenID so that new system can find it.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703220">\
	 <div id="dsq-comment-header-9703220" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703220" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703220" href="http://nathanbowers.com/" target="_blank" rel="nofollow">Nathan Bowers</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703220" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703220" class="dsq-comment-message">The problem is that Facebook has ZERO incentive to open up their walled garden. Google generates value by munching data (both traffic and user interactions) from Gmail, GoogleAnalytics, Feedburner, ads, and the open internet. There\'s no upside for Facebook in giving up the one thing Google wants.<br><br>I\'m a fan of openness, but in a world where data is a commodity and Google is the 800lb gorilla, it\'s a good value proposition to differentiate yourself by building fences. It\'s like commodity PCs powered by Microsoft vs. Apple\'s walled garden.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703216">\
	 <div id="dsq-comment-header-9703216" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703216" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703216">Johnny Kwan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703216" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703216" class="dsq-comment-message">What is data portability?  And what is a social network?<br><br>I take social networks, at their core, to mean three related functions:<br>1. Some way of maintaining state about yourself:  contact info, demographics, etc.<br>2. Some way to identify relationships - who and what kind of relationship.<br>3. Some way to control permissions of those related to you and their access to your state.<br><br>I see data portability as defining a standard set of policies governing the sharing and unsharing of these three things.<br><br>Done correctly, it means the end of social networks.  The standard that it defines by default makes one gigantic social network, one that correctly mirrors human relationships off-line!<br><br>This is similar to Sam\'s thoughts above.<br><br>Vendor-led efforts are dead in the water.  If data portability is accomplished, there are no social networks left.  It becomes a public utility that people and businesses use, one that generates vast amounts of economic utility, but one that no private party is able to convert into fiscal value.<br><br>I second John\'s concerns, but they aren\'t a problem.  This seems like an OO-purist\'s obsession:  correctly establishing identity.  If I want to lead a double-life, I can lead a double life.  And if I bisect the AllThing\'s social graph with two nodes that represent me, oh well.  I have that right.<br><br>Indeed, the idea of a universal social graph is flawed.  It only benefits companies.  If privacy is respected, then we each get a different social graph.  Ralph may not want me to know that he knows Wanda, or in what capacity, so on my social graph, that link will be missing.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703219">\
	 <div id="dsq-comment-header-9703219" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703219" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703219">SamCollins</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703219" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703219" class="dsq-comment-message">What happens if these people actual do trust each other and allow you to port data. Wouldn\'t that result in Big brother watching you? If the FBI wanted to spy on you, all they would need is one e-mail address and then all these networks combined will tell them where you are, were, will be and track you/spy on you 24x7. Would you want to give up your freedom in such an easy way? How can you prevent it from happening? There is nothing which can protect you at that point. No law will protect anyone from snooping, because this will all be public information at that point. And what about stalkers?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703271">\
	 <div id="dsq-comment-header-9703271" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703271" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703271">Alexander van Elsas</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703271" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703271" class="dsq-comment-message">Well, a not so obvious solution to many of these problems would be to leave all data where it belongs. With the user. No need for data portability then. Only a simple agreement on how a user would identify himself to a service that he wishes to make use of (even temporary). If you put the user in charge and let him decide which info he shares with others and which not, it would put most current web 2.0 walled garden social graph data hogging services out of business. We would get a user centric web. A web where you are in charge of your own interactions with others. And social networks would simply become means to interact. I could use any means I want as I have my friends with me.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703221">\
	 <div id="dsq-comment-header-9703221" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703221" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703221" href="http://mrtopf.de/blog" target="_blank" rel="nofollow">Christian Scholz</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703221" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703221" class="dsq-comment-message">Yes, these are all hard problems and maybe not all of them can be addresses in a matter that everybody is happy.<br><br>So my vision is also to have one social network which is the internet but not as one master server for everybody but following the OpenID model (I think this goes into the direction Sam was thinking). So this can be easily used to sync data. If you change your email address 3 times then the last one should be valid unless you state that you want to use another profile (with a different address) on some social application (if we have one social network the existing ones might then be called social applications making use of that network).<br><br>So everybody can actually choose their master server of choice (some might trust Facebook, some might trust their bank, some their own hosted thing) and you give permissions around.<br><br>Of course this is not fully thought through but it might be one idea to think further.<br><br>The thing is though that "Data Portability" can be sort of everything or nothing depending on who you ask. This email problem is more a problem of sync and sync is probably one of the most difficult to solve. I would already be happy if we would solve the export issue, defining technical standards and policy for exporting data (and policies which you are allowed to do with it).<br><br>I summarized some ideas of how to partition the problem space here: <a href="http://mrtopf.de/blog/web20/what-is-data-portability/" rel="nofollow">http://mrtopf.de/blog/web20/what-is-data-portab...</a> and during the last DP meeting a similar idea seems to have been discussed in the form of DP labs. I think the main problem which stops the actual work in DP right now is really not having a defined scope (maybe narrow enough to being able to solve it).<br><br><br>Another thing I would like though would be that Dave Morin joins the conversation on one of the Data Portability Groups or even lists these use cases in the wiki so people can think about it. I mean FB joined this project so it would be good to know what the problems they are facing are. Both on the user and on the business side.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703269">\
	 <div id="dsq-comment-header-9703269" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703269" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703269" href="http://www.somenice.com/" target="_blank" rel="nofollow">Andrew</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703269" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703269" class="dsq-comment-message">I envision data "portability" as just that, your info moving where you do. In the browser. Think a robots.txt file meets cookies where I decide who gets what level of information and how the relationships are mapped.<br><br>I simple "handshake" with a new website would allow them to see where else I share similar info, who I relate to and even (cringe) serve me relevant ads.<br>This could be expanded to all levels of customization or preferences for web use.<br><br>One config file to rule them all?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703270">\
	 <div id="dsq-comment-header-9703270" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703270" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703270" href="http://www.chrissaad.com/" target="_blank" rel="nofollow">Chris Saad</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703270" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703270" class="dsq-comment-message">@Christian - agreed, that\'s why the DP discussion exists - to discuss these tricky use cases and solve them.<br><br>Facebook is not unique in having these problems, and the answers *are* being discussed - good answers.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703268">\
	 <div id="dsq-comment-header-9703268" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703268" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703268" href="http://blog.macb.net" target="_blank" rel="nofollow">macbeach</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703268" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703268" class="dsq-comment-message">I don\'t know if the guy you talked to at Facebook is a real technical guy or just someone with a fancy title.  Two things stood out for me in your message and in his response:<br><br>I think Open ID is an important part of this.  Open ID does not require every product I use to keep a copy of my ID and password, but whatever system I use as my authentication server must have a high degree of uptime and responsiveness to validate me to all the others.<br><br>Why can\'t my address list be housed on Google if I use that most for e-mail, or Yahoo if I use that, and available in real time to any service I\'ve authorized to use it?  You seem to be thinking in terms of every service copying all of my accumulated data when I first sign up.    I\'m quite sure the Facebook guy was thrilled to tell you how impractical that would be.   I can just imagine him saying that RSS was impossible as it would require every player to maintain an entire copy of the Internet!  Once people join these walled garden companies they can\'t think straight any more (if they ever could).<br><br>Oh a third thing... for data that DOES need to be copied from one service to another, all you need is a standard for defining a "delete transaction" or some more generic transaction mechanism to keep them all in sync without constant copying.  And in the case that someone asked above of you changing your e-mail address to different things on several services (assuming you e-mail address was being used as the common linkage) then you would simply be breaking the connection at that point.  I don\'t see anything wrong with that, if that\'s what you want to do.  Maybe there could (and should) even be a way of linking two pre-existing accounts when new services hop on the bandwagon.   I would hope so.<br><br>Facebook is dragging its heels for purely non-technical reasons, and they make themselves look progressively sillier with every new attempt.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703267">\
	 <div id="dsq-comment-header-9703267" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703267" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703267">saran</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703267" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703267" class="dsq-comment-message">the google wow begins :)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703266">\
	 <div id="dsq-comment-header-9703266" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703266" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703266">shaidorsai</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703266" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703266" class="dsq-comment-message">I\'m surprised that the use case quoted were seen as something not thought about.<br><br>The data portability working group have been looking at examples like that since the get go.<br><br>I touched on data ownership in <a href="http://shaidorsai.wordpress.com/2008/01/11/trust-openid-vrm-data-portablity-and-how-does-it-hang-together/" rel="nofollow">http://shaidorsai.wordpress.com/2008/01/11/trus...</a><br>and said then that it was something we needed to get under. JP\'s talked about several times, refered to in that post.<br><br>Worried about your content? Stick a creative commons licence on it, if you want attribution and so on. That\'ll make your intentions *clear*. It won\'t stop thieves, but at least your wishes are explicit.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703265">\
	 <div id="dsq-comment-header-9703265" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703265" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703265">gregorys</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703265" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703265" class="dsq-comment-message">Robert, do you speaking about something like this<br><a href="http://blogs.zdnet.com/microsoft/?p=1291" rel="nofollow">http://blogs.zdnet.com/microsoft/?p=1291</a> ?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703264">\
	 <div id="dsq-comment-header-9703264" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703264" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703264" href="http://www.johnbreslin.com/blog/" target="_blank" rel="nofollow">John Breslin</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703264" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703264" class="dsq-comment-message">[10:33:03] John Breslin says: despite all the difficult scenarios (mainly in terms of ownership), you should still be able to bring your profile and your content with you<br>[10:33:25] John Breslin says: even without comments, tags, etc. (if they "belong" to other people)<br>[10:34:06] John Breslin says: the stuff "belonging" to others could still be ported depending on a profile option for those users on the old/new sites<br>[10:34:40] John Breslin says: "Yes, let my friends port objects that connect us together from this site." / "Yes, let my friends port objects that connect us together to this site."</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703217">\
	 <div id="dsq-comment-header-9703217" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703217" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703217">danja</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703217" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703217" class="dsq-comment-message">Tom says in the first comment: "...vendors will jump in front of the parade and start preaching openness when it becomes inevitable" - it has and they are.<br><br>The actions are slower than the word, but still, one bite at a time.<br><br>My biggest worry in all of this is that we\'ll wind up with poorly thought-out hacks solving the immediate problem, without considering the bigger picture - the more general Web of Data (where the standards are already in place, the Semantic Web stack).<br><br>Fortunately the DataPortability folks seem relatively sane :-)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703240">\
	 <div id="dsq-comment-header-9703240" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703240" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703240" href="http://theprogressbar.com/" target="_blank" rel="nofollow">David Evans</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703240" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703240" class="dsq-comment-message">What ever happened to the discussion about multiple encrypted databases that contain our information, which is cached for a certain period of time. Commenter 41 is talking about that. Sort of like DNS root servers and TTL settings. Bidirectional propagation is tough, so push everything back to the mothership, then push it out to other services. Dealing with diffs between what you want displayed on various services is going to be tough.<br><br>Perhaps the signup process will be more along the lines of "put checks next to all the data you want to be made public."</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703229">\
	 <div id="dsq-comment-header-9703229" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703229" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703229" href="http://tsmwiki.com/" target="_blank" rel="nofollow">Matthew Warren</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703229" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703229" class="dsq-comment-message">What do we call these facebook like social networking applications?<br><br>well, how about snaps?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703235">\
	 <div id="dsq-comment-header-9703235" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703235" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703235" href="http://sixgroups.com/" target="_blank" rel="nofollow">Johannes</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703235" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703235" class="dsq-comment-message">There are so many open questions (as described), and we are "just" talking about DATA portability. What if meaning comes into play (portable ontologies)? One question is "what exists?", another is "what is/shall be transfered?". Things are not getting easier...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703232">\
	 <div id="dsq-comment-header-9703232" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703232" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703232">Prokofy Neva</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703232" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703232" class="dsq-comment-message">I\'m glad the Facebook guy was able to cramp your data portability extremism a little bit into some pragmatic considerations that aren\'t just other people\'s privacy, which is something you may not care about, but raise just data *management* issues, like the problem of software you can\'t leave because it keeps spraying your info everywhere.<br><br>What I dislike about this discussion is the horrid artificial problem created out of thin air, which then is mounted as a thing needing a "solution".<br><br>And that problem is an imaginary one, where tekkies who don\'t like typing their handles and passwords 10 times over are inconvenienced.<br><br>It\'s simply hard to see that as a problem. Who cares?! You can solve the problem by making your handle and password the same everywhere, which shouldn\'t matter on these dollar-a-dozen social networks that come and go, and aren\'t involving monetary transactions but only chat.<br><br>Surely some of them will die off and only a few stronger ones will survive and/or be bought out. So why fuss about your inability to port your friendz from <a href="http://Wikitikiwoo.com" rel="nofollow">Wikitikiwoo.com</a> to <a href="http://Rinkydinki.net" rel="nofollow">Rinkydinki.net</a> when both of them will become extinct by next year?<br><br>I also don\'t like the idea of having some social-mark-up that might inevitably enable some entity to have all your social data centralized somewhere under the guise of open-source and under the guise of you being to manage and apportion it out to this or that social network.<br><br>At some point, the places that exist on the Internet that you will be "on" aren\'t going to be the places anymore, such that you have to sign up for them.<br><br>The place you will be "on" will be your phone, with its unique number and password. Obviously you\'ll control what you want to be on that mobile phone yourself, linked to that number and password. You won\'t need any hand-holding from any opensourced wikitarian to do this.<br><br>And that phone will then access all the stuff out there and maybe not even bother to log in anymore -- why should it? it won\'t need to. The websites will be the connecting spaces between phones.<br><br>Yes, there will be multiple phone services that will not have interoperability. Good!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703231">\
	 <div id="dsq-comment-header-9703231" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703231" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703231" href="http://socialthing.com/" target="_blank" rel="nofollow">Matt Galligan</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703231" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703231" class="dsq-comment-message">Robert, I think your point #3 is excellent, and is actually something that we\'ve been working on for a long time here at Socialthing!  I\'d love to get a conversation going with you to talk about what you would specifically like to see.<br><br>If you can, email me at matt at socialthing dot com...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703228">\
	 <div id="dsq-comment-header-9703228" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703228" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703228" href="http://www.capitolvalley.net/" target="_blank" rel="nofollow">Andrew Feinberg</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703228" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703228" class="dsq-comment-message">Robert,<br><br>Facebook has officially given the finger on Data Portabilty.<br><br>I\'ve been emailing their corporate communications coordinator back and forth asking why/when/how the "export to CSV" feature was deleted. I asked if there was someone with institutional knowledge and expertise on the history of the system to know, and was told that there isn\'t such a person.<br><br>*cough*bullshit*cough*<br><br>Isn\'t it just easier to tell the truth?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703236">\
	 <div id="dsq-comment-header-9703236" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703236" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703236">Brian Hanafee</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703236" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703236" class="dsq-comment-message"><a href="http://DataPortability.org" rel="nofollow">DataPortability.org</a> won\'t work because they aren\'t solving the biggest problem -- and probably can\'t. Just look at their FAQ - it breaks the problem into vendors, consumers, and standards and technology. They\'re skirting around the real problem, which is lack of a consistent data model. Absent that, data portability inevitably encounters impedence mismatches at every translation point as different sites try to use the data for different purposes.<br><br>Look at a really core example: person. If you look in a law book, the flesh and blood you will find that there are different concepts of person. You as a reader of this blog are a natural person or, at least for our purposes. A "legal person" can also be, for example, a corporation, a trustee, a partnership, etc.. So, a single natural person can have a wide variety of relationships and types of relationships with any number of legal persons. In fact, persons in general can have a wide variety of relationships with other persons; natural persons are just a special case. Data portability has to consider:<br><br>* Relationships between people and other people (natural or otherwise).<br>* Trust relationships between people.<br>* Transitivity of those relationships.<br><br>Now add back the reality of an online identity. Identity is not a person. It\'s the handle to interact with a system. Data portability is based on the idea that if "you" just had a portable identity, problems would be solved. The misguided assumption is that multiple identities are just an artifact of using computers, and that it\'s a problem that goes away in the real world. It doesn\'t. Identity is just a handle that ties some identifier such as "robertscoble" to some person, with some degree of confidence. So now the question is which person should it tie to? Robert Scoble? Scobleizer? Is Scobleizer more useful as an identity or as a "person" in it\'s own right? What relationship does either of those "people" have to the real Rober Scoble? Do you really want those tied to the same person as your birth certificate, passport and IRS records? Would you want that ability if, for example, somebody started publishing as "Scobleizer" on some other blog? If not, how could any of those identities legitimately be called yours? The boundary between you and your online presence is fuzzy. That adds to the data portability problem:<br><br>* Relationships between authentication techniques (passwords, etc.) and identities.<br>* Confidence in those relationships.<br>* Transitivity of the confidence across systems that are themselves authenticated to varying degrees of confidence.<br>* Relationships between identities and people.<br>* Trust between people and the sites that use the identities.<br><br>Whatever movement we get this year will have to be very careful about which part of the problem they try to solve. OpenId has done a really good job of making clear what pieces it solves and which it doesn\'t. It doesn\'t solve a lot of things, but at least acknowledges as much. I\'m not so sure that <a href="http://DataPortability.org" rel="nofollow">DataPortability.org</a> has yet established exactly where their boundaries are and should be.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703237">\
	 <div id="dsq-comment-header-9703237" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703237" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703237" href="http://www.identitywoman.net/" target="_blank" rel="nofollow">Kaliya Hamlin</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703237" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703237" class="dsq-comment-message">This issues you raise are important.  I have been working for 4 years almost full time to help support the evolution of a community to solve these problems. At the core of the problem of getting people related data to move is - Identity.  This is what IDentity Commons is all supporting a community of groups addressing the range of issues (technical, social and legal) that come up. <a href="http://wiki.idcommons.net/index.php/Working_Group_Descriptions" rel="nofollow">http://wiki.idcommons.net/index.php/Working_Gro...</a><br><br>I am VERY hopeful that the face to face opportunity to meet at the Data Sharing Summit will move things forward significantly.  <a href="http://www.datasharingsummit.com" rel="nofollow">http://www.datasharingsummit.com</a> - I hope you and other deeply concerned about getting this problem solved can come - there is nothing like a white board and and a real live face to face conversation to make progress on difficult issues.<br><br>The event is being run in the tradition of the Internet Identity Workshop that has been instrumental in progress in that realm.  <a href="http://iiw.idcommons.net" rel="nofollow">http://iiw.idcommons.net</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703215">\
	 <div id="dsq-comment-header-9703215" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703215" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703215" href="http://www.booberfish.com/blog" target="_blank" rel="nofollow">GP</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703215" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703215" class="dsq-comment-message">I think the most important point is that sometimes we don\'t want every network to know everything. I might want to delete my info from one network but not another. And, just like you suggested, I use a different email address for every site I join. Any sort of data propagation between networks would have to be entirely optional.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703214">\
	 <div id="dsq-comment-header-9703214" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703214" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703214">bhc3</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703214" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703214" class="dsq-comment-message">One idea I\'ve had about this issue relates to the lifestream aggregators.  Is it possible to view FriendFeed as your "social network cloud"?  All the updates from the various social networks feed the cloud.<br><br>Then you look at something like Twitter or Jaiku less as THE social network, and more as a social application.  Your friends see your updates via FriendFeed, not via Twitter.  They can comment directly on the FriendFeed site.<br><br>In such a scenario, switching from something like Twitter to Jaiku or Pownce means you don\'t lose the connections you have.  They keep up with you via the lifestream cloud.  Same idea could apply for moving from Flickr to SmugMug.  People don\'t keep up with you via the social app - they follow you on the lifestream aggregator.  A backdoor way to data (or maybe social network) portability.<br><br>More thoughts here: <a href="http://tinyurl.com/29cu6k" rel="nofollow">http://tinyurl.com/29cu6k</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703234">\
	 <div id="dsq-comment-header-9703234" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703234" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9703234">earlemartin</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703234" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703234" class="dsq-comment-message">Matt (comment #6) says:<br><br>"We really need to push for an Open spec on social markup. A downloadable file (like OPML for feeds) marked up with microformats containing your social profile information... all you should have to do is import this file containing all info..."<br><br>That would be FOAF. It was around a long time before the current crop of social networks, and has had an awful lot of work put into it by some very smart people. I\'m surprised nobody here has mentioned it yet, as it\'s an idea whose time has clearly come. See it at: <a href="http://www.foaf-project.org/" rel="nofollow">http://www.foaf-project.org/</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703238">\
	 <div id="dsq-comment-header-9703238" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703238" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703238" href="http://mikewoodphotography.blogspot.com/" target="_blank" rel="nofollow">mike wood</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703238" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703238" class="dsq-comment-message">I don\'t think by the end of the year, but it needs to happen soon. hell, one example... I would like it once when I leave comments on blogs that I don\'t need to remember the logins for wordpress, blogger and who knows what else, and the myriad of email addresses I used over the years to set them up. I can\'t tell you how many times I wanted to leave a comment but the moment passed by the time I either created an ID for something, hunted for the login, or reset a password. Sounds small scale, but a single sign on for all that would be huge.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703225">\
	 <div id="dsq-comment-header-9703225" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703225" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703225" href="http://carterfsmith.blogspot.com/" target="_blank" rel="nofollow">Carter f Smith</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703225" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703225" class="dsq-comment-message">I\'m not sure that this will be a profitable venture for Microsoft, but it\'s worth a try. We know that owning a centrally located piece of real estate and inviting big names to stake their claim there has worked in the real world in the past. Microsoft has shown their ability in Web 1.0 to make money, and it\'s apparent that no one in social networking has figured out how to do that yet . . .<br><br>The Microsoft strategy appears to start with inviting your friends and connections to connect on Windows Live Messenger (not sounding a lot like portability here -- I am thinking "import from").<br><br>So I tried the only currently available option -- Facebook. A login to Facebook screen (with Windows Live logo but a Facebook URL) popped up, and the first try on login failed (hmmm, a phishing site?). But the next screen had the Facebook logo, and it logged me in just fine. I didn\'t however, see where I could add anyone to an invite list, so . . . I gave up and started blogging.<br><br>So we\'ll just keep beta testing while Microsoft keeps building . . .<br><br><a href="http://carterfsmith.blogspot.com/2008/04/social-network-portability-is-coming.html" rel="nofollow">http://carterfsmith.blogspot.com/2008/04/social...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703272">\
	 <div id="dsq-comment-header-9703272" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703272" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703272" href="http://www.capatrex.com/" target="_blank" rel="nofollow">John Maas</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703272" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703272" class="dsq-comment-message">Yup, I\'m just waiting for this to happen too.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9703273">\
	 <div id="dsq-comment-header-9703273" class="dsq-comment-header">\
	 <cite id="dsq-cite-9703273" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9703273" href="http://www.youtube.com/watch?v=_njahisJ2Z8" target="_blank" rel="nofollow">Andy Winters</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9703273" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9703273" class="dsq-comment-message">Who wants to port their comments from one site to the next anyway?  I don\'t really think that\'s the purpose.  If someone needs to go elsewhere then so be it.  Leave some clutter behind.</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=the_real_roadblocks_to_data_portability_on_social_networks&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);
			}
		}
	});
}

})();




