




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

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

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

var Dsq = new function() {
	this.container = document.getElementById('dsq-content');
	this.jsonData = {"reactions": [], "has_more_reactions": false, "users": {"a25d305109741d32cf064232a35bd568": {"username": "Larry Borsato", "tumblr": "", "display_name": "Larry Borsato", "url": "http://disqus.com/guest/a25d305109741d32cf064232a35bd568/", "registered": false, "linkedin": "", "blog": "http://larryborsato.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": ""}, "f15b634dfa5fbe67e0faed8993e85be4": {"username": "Binsurf", "tumblr": "", "display_name": "Binsurf", "url": "http://disqus.com/guest/f15b634dfa5fbe67e0faed8993e85be4/", "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": ""}, "5a0d04c001d4c3aaa837fc36e890823c": {"username": "Molly C", "tumblr": "", "display_name": "Molly C", "url": "http://disqus.com/guest/5a0d04c001d4c3aaa837fc36e890823c/", "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": ""}, "ac4d476937104eae28af7fa91ecdbf64": {"username": "binsurf", "tumblr": "", "display_name": "binsurf", "url": "http://disqus.com/guest/ac4d476937104eae28af7fa91ecdbf64/", "registered": false, "linkedin": "", "blog": "http://janddmanning.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "9e1d97baa1c9d42d39e0c19bd64f1b77": {"username": "JonH", "tumblr": "", "display_name": "JonH", "url": "http://disqus.com/guest/9e1d97baa1c9d42d39e0c19bd64f1b77/", "registered": false, "linkedin": "", "blog": "http://www.jonheupel.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": ""}, "409c374528ea214933b6df26f8e3cede": {"username": "SB", "tumblr": "", "display_name": "SB", "url": "http://disqus.com/guest/409c374528ea214933b6df26f8e3cede/", "registered": false, "linkedin": "", "blog": "http://www.sbpoet.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": ""}, "9ea4bd444290a3b6af452ce25673858b": {"username": "Laurent", "tumblr": "", "display_name": "Laurent", "url": "http://disqus.com/guest/9ea4bd444290a3b6af452ce25673858b/", "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": ""}, "3ba3e0e14126f6840bedc3337c3ffac9": {"username": "Jason", "tumblr": "", "display_name": "Jason", "url": "http://disqus.com/guest/3ba3e0e14126f6840bedc3337c3ffac9/", "registered": false, "linkedin": "", "blog": "http://www.office12watch.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": ""}, "706f67c19c5467071797d4421ff8af44": {"username": "Lincoln", "tumblr": "", "display_name": "Lincoln", "url": "http://disqus.com/guest/706f67c19c5467071797d4421ff8af44/", "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": ""}, "1d1ba4bf0ef77766a1d77ac61c86e386": {"username": "Carolus Holman", "tumblr": "", "display_name": "Carolus Holman", "url": "http://disqus.com/guest/1d1ba4bf0ef77766a1d77ac61c86e386/", "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": ""}, "7246473a167796585f9d39d89dac3d44": {"username": "Andrew Burton", "tumblr": "", "display_name": "Andrew Burton", "url": "http://disqus.com/guest/7246473a167796585f9d39d89dac3d44/", "registered": false, "linkedin": "", "blog": "http://profnano.org/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c5f095286dd8a3f1dbbc047412a10fb3": {"username": "David Megginson", "tumblr": "", "display_name": "David Megginson", "url": "http://disqus.com/guest/c5f095286dd8a3f1dbbc047412a10fb3/", "registered": false, "linkedin": "", "blog": "http://www.megginson.com/blogs/quoderat/", "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": ""}, "5aeb73e9f0788d5bb8ef38f9d7e329ab": {"username": "Mark D Polino, CPA", "tumblr": "", "display_name": "Mark D Polino, CPA", "url": "http://disqus.com/guest/5aeb73e9f0788d5bb8ef38f9d7e329ab/", "registered": false, "linkedin": "", "blog": "http://www.dynamicaccounting.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": ""}, "e45fa4d8890cca2fb87a53a868e7507c": {"username": "Philip Hodgetts", "tumblr": "", "display_name": "Philip Hodgetts", "url": "http://disqus.com/guest/e45fa4d8890cca2fb87a53a868e7507c/", "registered": false, "linkedin": "", "blog": "http://www.intelligentassistance.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": ""}, "dff619f768de84b888ef0e09731f1b98": {"username": "Devil&#39;s Advocate", "tumblr": "", "display_name": "Devil&#39;s Advocate", "url": "http://disqus.com/guest/dff619f768de84b888ef0e09731f1b98/", "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": ""}, "1526dcb784188b422544c6344ef223c2": {"username": "andypiper", "tumblr": "", "display_name": "andypiper", "url": "http://disqus.com/guest/1526dcb784188b422544c6344ef223c2/", "registered": false, "linkedin": "", "blog": "http://andypiper.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/137/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "13b47e934e19e348e3598303610e01cd": {"username": "Jeff Fansler", "tumblr": "", "display_name": "Jeff Fansler", "url": "http://disqus.com/guest/13b47e934e19e348e3598303610e01cd/", "registered": false, "linkedin": "", "blog": "http://www.thisisfanzoo.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": ""}, "ce49bccd0b4c327dc4f5a5eff9ecd381": {"username": "Ashish Sinha", "tumblr": "", "display_name": "Ashish Sinha", "url": "http://disqus.com/guest/ce49bccd0b4c327dc4f5a5eff9ecd381/", "registered": false, "linkedin": "", "blog": "http://sinha.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/118/1422/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "437a6ac1492a36a094261dd60c5282a0": {"username": "jean", "tumblr": "", "display_name": "jean", "url": "http://disqus.com/guest/437a6ac1492a36a094261dd60c5282a0/", "registered": false, "linkedin": "", "blog": "http://jean.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "5daa9640bbc52ebe3472587f84c58b6d": {"username": "Chris Brennan", "tumblr": "", "display_name": "Chris Brennan", "url": "http://disqus.com/guest/5daa9640bbc52ebe3472587f84c58b6d/", "registered": false, "linkedin": "", "blog": "http://www.allpointsnorth.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": ""}, "c489355ab8af522634fdef64206a3954": {"username": "dmad", "tumblr": "", "display_name": "dmad", "url": "http://disqus.com/guest/c489355ab8af522634fdef64206a3954/", "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": ""}, "3aeb85796d88e54daedf94e769fda691": {"username": "Goebbels", "tumblr": "", "display_name": "Goebbels", "url": "http://disqus.com/guest/3aeb85796d88e54daedf94e769fda691/", "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": ""}, "dce90ceb553a872aa5c621c363c5ff57": {"username": "Bosko Milekic", "tumblr": "", "display_name": "Bosko Milekic", "url": "http://disqus.com/guest/dce90ceb553a872aa5c621c363c5ff57/", "registered": false, "linkedin": "", "blog": "http://www.crowdedweb.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": ""}, "b2e09fc4233f8e40882d214a592adb85": {"username": "Sridhar Vembu", "tumblr": "", "display_name": "Sridhar Vembu", "url": "http://disqus.com/guest/b2e09fc4233f8e40882d214a592adb85/", "registered": false, "linkedin": "", "blog": "http://zoho.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": ""}, "56649421e9c3e301529f3e69e34fc5c3": {"username": "Jake of 8bitjoystick.com", "tumblr": "", "display_name": "Jake of 8bitjoystick.com", "url": "http://disqus.com/guest/56649421e9c3e301529f3e69e34fc5c3/", "registered": false, "linkedin": "", "blog": "http://www.8bitjoystick.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": ""}, "da745428bb70294fbc70ce799c5ce81c": {"username": "Ryan B", "tumblr": "", "display_name": "Ryan B", "url": "http://disqus.com/guest/da745428bb70294fbc70ce799c5ce81c/", "registered": false, "linkedin": "", "blog": "http://rbenson.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/24/8048/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "508c512301cf007b93bc32009a79951a": {"username": "JSW", "tumblr": "", "display_name": "JSW", "url": "http://disqus.com/guest/508c512301cf007b93bc32009a79951a/", "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": ""}, "780bc6c72ea998f2b5f5f7a1fe8875eb": {"username": "Al", "tumblr": "", "display_name": "Al", "url": "http://disqus.com/guest/780bc6c72ea998f2b5f5f7a1fe8875eb/", "registered": false, "linkedin": "", "blog": "http://www.folknology.com/blog/1/1/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/23/5741/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "b29e0eec9757357537d55ec55184a10a": {"username": "Andy Beal", "tumblr": "", "display_name": "Andy Beal", "url": "http://disqus.com/guest/b29e0eec9757357537d55ec55184a10a/", "registered": false, "linkedin": "", "blog": "http://www.marketingpilgrim.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/9/4929/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "4b6a920079304a8dff90ceade541d4f5": {"username": "Tony", "tumblr": "", "display_name": "Tony", "url": "http://disqus.com/guest/4b6a920079304a8dff90ceade541d4f5/", "registered": false, "linkedin": "", "blog": "http://www.editgrid.com/home", "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": ""}, "6089f2273641976c6aef9cd89a9aced8": {"username": "Sreekanth", "tumblr": "", "display_name": "Sreekanth", "url": "http://disqus.com/guest/6089f2273641976c6aef9cd89a9aced8/", "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": ""}, "bdbb5ecc59e74492f5fcc7444a5e7f25": {"username": "Don Campbell", "tumblr": "", "display_name": "Don Campbell", "url": "http://disqus.com/guest/bdbb5ecc59e74492f5fcc7444a5e7f25/", "registered": false, "linkedin": "", "blog": "http://blogs.msdn.com/doncampbell", "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": ""}, "422187df3c45655b0dc2ae5de0710b27": {"username": "John C. Welch", "tumblr": "", "display_name": "John C. Welch", "url": "http://disqus.com/guest/422187df3c45655b0dc2ae5de0710b27/", "registered": false, "linkedin": "", "blog": "http://www.bynkii.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": ""}, "d96fd018df037889c9598d90504ca52d": {"username": "Billy Hollis", "tumblr": "", "display_name": "Billy Hollis", "url": "http://disqus.com/guest/d96fd018df037889c9598d90504ca52d/", "registered": false, "linkedin": "", "blog": "http://www.dotnetmasters.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": ""}, "82c534800265d863a1014326078451f9": {"username": "Phil Wheat", "tumblr": "", "display_name": "Phil Wheat", "url": "http://disqus.com/guest/82c534800265d863a1014326078451f9/", "registered": false, "linkedin": "", "blog": "http://blog.austinwheats.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": ""}, "51b85dca6c130363e1ce7c55be465d83": {"username": "Stephane Rodriguez", "tumblr": "", "display_name": "Stephane Rodriguez", "url": "http://disqus.com/guest/51b85dca6c130363e1ce7c55be465d83/", "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": ""}, "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": ""}, "dcf810abcc6016d162504556082f5c3f": {"username": "Rod Edwards", "tumblr": "", "display_name": "Rod Edwards", "url": "http://disqus.com/guest/dcf810abcc6016d162504556082f5c3f/", "registered": false, "linkedin": "", "blog": "http://www.blockrocker.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/5922/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "9f586e865bb3cafae670651945b914c5": {"username": "Sri", "tumblr": "", "display_name": "Sri", "url": "http://disqus.com/guest/9f586e865bb3cafae670651945b914c5/", "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": ""}, "456636993483a10e9b50ffe17733de4a": {"username": "Robert Scoble", "tumblr": "", "display_name": "Robert Scoble", "url": "http://disqus.com/guest/456636993483a10e9b50ffe17733de4a/", "registered": false, "linkedin": "", "blog": "http://scobleizer.wordpress.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "4fe19b3352f366bef89ea9cdf6c0e0c9": {"username": "Ross", "tumblr": "", "display_name": "Ross", "url": "http://disqus.com/guest/4fe19b3352f366bef89ea9cdf6c0e0c9/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/22/6452/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "1a2316746a4ef51b24a412a7442e982c": {"username": "jonathan", "tumblr": "", "display_name": "jonathan", "url": "http://disqus.com/guest/1a2316746a4ef51b24a412a7442e982c/", "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": ""}, "579fbc756c0d918e2244dff914c9bf88": {"username": "Dare Obasanjo", "tumblr": "", "display_name": "Dare Obasanjo", "url": "http://disqus.com/guest/579fbc756c0d918e2244dff914c9bf88/", "registered": false, "linkedin": "", "blog": "http://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": ""}, "cfbc9ecd79ad006672887b53ecf06930": {"username": "Peter Cranstone", "tumblr": "", "display_name": "Peter Cranstone", "url": "http://disqus.com/guest/cfbc9ecd79ad006672887b53ecf06930/", "registered": false, "linkedin": "", "blog": "http://www.5o9inc.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": ""}, "df60b07a61176c26af4e7201f97c84c1": {"username": "Richard", "tumblr": "", "display_name": "Richard", "url": "http://disqus.com/guest/df60b07a61176c26af4e7201f97c84c1/", "registered": false, "linkedin": "", "blog": "http://jack-of-all-tradez.blogspot.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/uploads/anonusers/13/9154/avatar92.jpg", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "cab1041ab2de14f71e070c15f8ae968e": {"username": "Christopher Coulter", "tumblr": "", "display_name": "Christopher Coulter", "url": "http://disqus.com/guest/cab1041ab2de14f71e070c15f8ae968e/", "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": ""}, "8efac25a624c04c98e1ebedf69a95c48": {"username": "-- Morgan Schweers, CyberFOX!", "tumblr": "", "display_name": "-- Morgan Schweers, CyberFOX!", "url": "http://disqus.com/guest/8efac25a624c04c98e1ebedf69a95c48/", "registered": false, "linkedin": "", "blog": "http://www.jbidwatcher.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": true, "name": "Scobleizer", "streaming_realtime": true, "url": "scobleizer", "allow_anon_post": true, "reactions_enabled": true, "reply_position": 1, "show_avatar": true, "allow_anon_votes": false, "disqus_auth_disabled": false}, "realtime_enabled": true, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 4, "forum": "scobleizer", "is_initial_load": true, "is_authenticated": false, "timestamp": "2009-12-17_11:28:34", "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": {"9641216": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Strange, every enterprise I enter ythat has Sharepoint think it\u2019s an overhyped piece of crap that is poorly implemented so no one uses it ... \"<br><br>\"Every enterprise\"?<br><br>We must be visiting different ones.  I can give you a long list of Fortune 500s that are doing some very cool things with the SharePoint in Office 2003.<br><br>Its true the first SharePoint (2001) was not an enterprise app, and many people think of that when they hear SharePoint.  But it was re-written for Office 2003 and is very capable today, and widely used by millions of users.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_21:39:17", "killed": false, "user_key": "bdbb5ecc59e74492f5fcc7444a5e7f25", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641217": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Nobody loves MS Office. They tolerate it because it is relatively ubiquitous..\"<br><br>I don't 'love' any software. Office is the de facto standard in that segment and it does it's job quite well. We use spreadsheets quite often in my line of work - structural engineering - and while they may be relatively simple, they have all kinds of macros and functions embedded in them. If Google's products can really import those XLS files and make them work flawlessly (there are times when OpenOffice can't) then I'll consider using it. However it only takes a couple of things to not work completely right and it will be rendered useless to me.<br><br>Then of course there is the whole issue of online storage. First of all do you want all that data on someone else's server? And this begs the question - as always with Google - what are they going to do with it (or how are they going to profit from it)?<br><br>People who use spreadsheets to make simple lists are one thing, but businesses typically use them for financial purposes. This usually means data that is somewhat more sensitive than a grocery list. If you can convince companies to trust Google's servers with that data I'd be impressed.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_21:39:51", "killed": false, "user_key": "df60b07a61176c26af4e7201f97c84c1", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641218": {"up_voted": false, "ip": "", "has_replies": false, "message": "Don, I totally agree. It's quite obvious that Goebbels hasn't visited many enterprise accounts lately.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_21:41:42", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641219": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert,<br><br>You may visit more enterprises, but I highly doubt you have the ability and skills to know what's going on under the dog and pony show you're getting, and the knowledge to know the difference between a product in wide use and one being used effectively.<br><br>I guarantee that someone who IS a sysadmin with a clue can find out more in ten minutes than you will in ten hours, because they know what to look for and you don't.<br><br>I can tell you right now, that if you're not an all -Windows shop, Sharepoint sucks to use.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_22:26:46", "killed": false, "user_key": "422187df3c45655b0dc2ae5de0710b27", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641220": {"up_voted": false, "ip": "", "has_replies": false, "message": "@45, and outside of total Windows shops or shops that are know MS shops (Boeing, Target...I rather doubt Amazon qualifies as an Sharepoint candidate) how many enterprises have you visted? Of those, how many IT admins have you actually talked to where they told you how much your software sucked, and why?  Or were your visits merely to hock your book?<br><br>Sure there's a lot of licensed Sharepoint out there (one version comes with Windows, right?), but how WELL is it being used?  How many enterprises on the scale of say...WalMart, GE, Boeing, Nestle, Shell, are using Sharepoint as there PRIMARY portal and teaming solution?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_22:58:08", "killed": false, "user_key": "c489355ab8af522634fdef64206a3954", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641221": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"If the CTO of GM wants a feature in Excel he'll probably get it?\"<br><br>Are you completely certain that is true?  Since when did MS get into the IBM game of building specific versions for their software for a specific customer? It would seem counterproductive for an off-the-shelf software company like Microsoft to design, code, check-in, test, beta, bug fix, test, regression test, bug fix, test, regression test... ship.. a feature for one specific customer, regardless of their size.  I would think that said feature would have to appeal more broadly than just the CTO of GM for MS to consider adding it.<br><br>But, given the quality bar you guys seem to set, maybe that's not all that surprising.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_23:04:21", "killed": false, "user_key": "c489355ab8af522634fdef64206a3954", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641222": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree. I think the best thing this does is put some more competition in the market for Microsoft to continually improve and evolve. Middleware may be an option, but I just don't think it's there yet, or will be soon. If the browsers and online items can't agree on simple stuff like CSS standards, I don't see a wide acceptance needed for middleware to gain enough ground for Google office apps to be much more than they are now.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_00:25:46", "killed": false, "user_key": "3ba3e0e14126f6840bedc3337c3ffac9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641223": {"up_voted": false, "ip": "", "has_replies": false, "message": "First time poster, long time lurker...<br><br>Nice topic...I have relatively little experience in large corps (I loathe working for 'the man') so I can't address the enterprise level discussion. But I have been thinking about google and ms for while...I think some very strategic elements of ms's biz model are getting ready for 'rude awaking'.<br><br>Start with Outlook (all the ms ofc apps are overpowered for 'joe user') so the value of their vast array of features is discounted heavily in terms of real usability. Take the contact manager, it's a mess to tweak it just a bit to make it 'fit me' (how I want the look and feel for how i use it) I've bought the books, hammered away and gave up. Most will not go this path, and (stated above) simply 'accept it like it is' and use it. The gmail fits well on it's first rendition as it does attempt to be a all purpose (and overwhelming) contact mgmt program but do what a mail program needs to do, for the masses. Outlook completely fails on the spam front, I get 200 a day and have about 25% end up in my inbox...which I have to manage AND for which MS has not 'smarts' behind the scenes to recognize that v1agra is vlagra is v!aggra...it costs me time. I get 250 spams in gmail and deal with 3-5% and have noticed the filter begins to delete once it sees my pattern PLUS it measures this against other users so the cummulative intelligence provides a better filter. That works.<br><br>Word...been a user of every version of this ms product since the beginning...advance features (linking, embedded spreadsheet ranges, etc) but the simple act of collaborating (with my IT guy who left for Israel today) says it all about writely. So I can't embed my ssheet range today...I am highly confident it will happen because it appears the 'middle ware' components are there to facilitate the integration of these advanced features.<br><br>Since my 'invite' arrived today on google spread sheet, I have no experience with it. however, as an 'average joe' who exploits excels features at a level higher than most people, this product is going to be hard for google to adapt at a level which would make it a competitive product beyond individuals (into the enterprise). But considering the 'baseball coach' comment, google's spreadsheet will compete and win over users. Maybe they are aiming at a market beyond the 270million US residents? How sophisticated are those users? Exactly! It'll gain market share.<br><br>On the openoffice front, I ditched MS office about a year and half ago when I disconnected the linked symantec product (on purpose, to change security systems) and the whole thing broke. Spent a good part of two weeks on getting it all to work like I WANTED...no luck...and no more MS office on my system. deleted the entire suite...never looked back.<br><br>The open office products are good. Yeah had to learn a few different keystokes thanks to the ms patent attns probably but no biggie. It's a great suite. I have only found one bug which is embedding ssheets in docs that requires a work around but, again, for most users, it works. All openofc needs is some marketing dollars or zealots in the blogoshere and it will win market share too.<br><br>From my perspective the assault google is making on office is something I would be paying close attn to if I was the ms-ofc prod mgr. These guys are for real and they are looking at the world differently. Their view is more aligned with the 'open' network we have than where ms' formative roots lie - on the desk top, behind the firewall. If I was him, i would not be sleeping too much either because that wave of innovation is going to strike the beach (MS) hard.<br><br>Even with S&amp;L's proclamations of 'being good' yada, yada, they will integrate their calendar, mail, spreadsheet, doc, etc so it works seamlessly; it's a direct aim at MS Ofc, any other assumption is naive. Why on earth would they stop short of integration? Hell, I would go for it, the win is simply too big if they pull it off. very big.<br><br>About security and data, it's a hole in their program for sure but wow, ms and security in the same sentence is a stretch too! One not to be taken lightly and I don't have an answer at this point for how they might resolve it. However, if fiber is being lit, servers are being installed at the rate some guess, then I contend the 'downtime' aspect of this arguement is slowly going away AND there will be a way for me to port my data either locally or 'offline'. It could be as simple a solution as a 'file save to local' on a menu or a 5bucks per month 'rent-a-space' option...exactly like every other data warehouse does with a huge percentage of the online internet data that is flowing thru the pipes today.<br><br>Hey, we do ccard biz, route sensitive docs,netc, across and thru these routers/servers now...how is that significantly different that what google is doing by default with their 'online' application approach...looks the same to me.<br><br>My/Your/Our data is out there...where? exactly! Who knows...but we have adapted and integrated this into the main stream of our lives and busineses in the short timeline from lynx to opera ('93 to '06).<br><br>Who'd a thunk it!<br><br>I enjoy your writings. Probably the most genuine(ly interesting) person i have read on the net. The week you shared about your mother was very heart felt. Sorry for you loss.<br><br>Keep your brain cells churning and your keyboard hooked up...it's always a good read here.<br><br>Thanks for the opportunity to share my thoughts.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_00:31:00", "killed": false, "user_key": "508c512301cf007b93bc32009a79951a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641224": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm a big fan of \"load local\" and web services haven't really interested me, but reading about Google's spreadsheet got me excited - because two or more people can work on the one sheet at a time. A limited sheet, sure, but a spreadsheet none the less.  My producer and I could look at a schedule together; or perhaps a guest could place themselves in the schedule? I love the idea.<br><br>And I know Excel with Office Live will probably have some similar features but so far I've been undersold. ;-)<br><br>Philip", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_00:54:14", "killed": false, "user_key": "e45fa4d8890cca2fb87a53a868e7507c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641225": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"You're watching two massively different ideas about how computers should be used battling it out right on the world's economic stage.<br><br>On one hand you have the old standard Office that says \"load locally and use local resources.\"\"<br><br>You are half right.  It is a battle but it has nothing to do with how apps are deployed.  Tech people care about thick client vs thin client.  The real battle between MS and Google is which paradigm are users after more, tons of features or easy to use?<br><br>MS has always sold new versions on look at all the new features we added!  Google and the new wave of designy based web 2.0 apps are based on look at how pretty this is and how with a small feature set it's straight forward to use!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_01:22:13", "killed": false, "user_key": "9e1d97baa1c9d42d39e0c19bd64f1b77", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641226": {"up_voted": false, "ip": "", "has_replies": false, "message": "GOogle has brought in the spreadsheet via the web, wait till the users gasp when they bring out the adverts on the pages based on the numbers :D<br><a href=\"http://www.irintech.com/x1/blogarchive.php?id=210\" rel=\"nofollow\">http://www.irintech.com/x1/blogarchive.php?id=210</a><br><br><a href=\"http://www.irin.co.uk\" rel=\"nofollow\">www.irin.co.uk</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_01:26:58", "killed": false, "user_key": "437a6ac1492a36a094261dd60c5282a0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641227": {"up_voted": false, "ip": "", "has_replies": false, "message": "I just want to say, you have a very high quality of commenters here. I learn something when I follow the conversation, and I appreciate that.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_01:37:26", "killed": false, "user_key": "409c374528ea214933b6df26f8e3cede", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641228": {"up_voted": false, "ip": "", "has_replies": false, "message": "local/remote: we just need a bigger javascript-accessible file sandbox to store data locally in case the network is temporarily out<br><br>security of your data: Google Office could easily encrypt our data on the browser side (javascript encryption of text data is fine), and Google would store our encrypted data", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_01:54:50", "killed": false, "user_key": "9ea4bd444290a3b6af452ce25673858b", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641229": {"up_voted": false, "ip": "", "has_replies": false, "message": "Well, I guess *putting data on the internt (i.e. online office)' is a temporary issue. Companies were not too comfortable putting their crm/procurement data on the net too. But with time and effort, they are ready to part with their data on <a href=\"http://salesforce.com\" rel=\"nofollow\">salesforce.com</a> etc (ASPs).<br>And the compelling reason for do is the lesser TCO of the software.<br>The challenge for Microsoft is not Google. If MS Office's prices aren'r reduced (I want better security, better control over MS products, but still I am not too willing to pay the *OH MY GOD* price that MS charges.<br>If MS continues to do so, companies won't mind shifting to Google.<br>After all, the mandate for CIO is to lower the TCO (or get fired), and I dont see MS helping the CIO in any ways. (apart from security patches and the huge maintenance fee that they charge)<br>Its not the product features, but its the cost/usage that will drive the decision to shift to Google etc..<br>WOnder why you missed this point in your blog (esp being a product manager!)<br><br>Thanks,<br>Ashish<br>Sr. Product Manager,<br><a href=\"http://sinha.wordpress.com\" rel=\"nofollow\">http://sinha.wordpress.com</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_06:33:59", "killed": false, "user_key": "ce49bccd0b4c327dc4f5a5eff9ecd381", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641230": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm happy about the competition as well.  There are so many features in Excel now that most people just never use.  I hope that the competition will push MS into focusing on simplicity.<br><br>That said, I haven't used the new version of Office yet or Vista.  I posted on my blog about getting a copy and I think your idea of sending it out to bloggers is a good one.  If there's any way you can push this issue and get me a copy of Office and Vista I'd gladly blog my experience.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_08:39:01", "killed": false, "user_key": "13b47e934e19e348e3598303610e01cd", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641231": {"up_voted": false, "ip": "", "has_replies": false, "message": "While I do agree with you about \"MS Office vs. Google Spreadsheets,\" there is one interesting thing that you didn't mention: you can't use Excel in Second Life.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_08:52:05", "killed": false, "user_key": "7246473a167796585f9d39d89dac3d44", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641232": {"up_voted": false, "ip": "", "has_replies": false, "message": "Thanks for mentioning Zoho Sheet. By way of background, Zoho is a division of AdventNet, a company that has been around 10 years now. Profitable, non-VC-funded, bubble-survivor - so I would say the data is pretty safe with us.<br><br>Sridhar", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_13:15:04", "killed": false, "user_key": "b2e09fc4233f8e40882d214a592adb85", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641233": {"up_voted": false, "ip": "", "has_replies": false, "message": "If memory serves, Microsoft predicted 5 or 6 years ago that online storage would become a norm in the internet world very soon. Yet, here they are trying to trump Google with their heavy, resource intensive (honestly, how much resources should it take to do half the stuff it does) office apps that don't even remotely begin to store offline. Microsoft is becoming an old man oracle, predicting some things true, and others of thin air. I know, I sound like a Microsoft hater, I'm not. I just wish they'd think before speaking.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_13:58:28", "killed": false, "user_key": "ac4d476937104eae28af7fa91ecdbf64", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641234": {"up_voted": false, "ip": "", "has_replies": false, "message": "Binsurf: it's totally untrue when you say that Office apps don't even remotely begin to store offline. Completely untrue. I use Outlook every day and everything I do there is stored offline and online. So are all my docs, cause I have Sharepoint.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_16:23:23", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641235": {"up_voted": false, "ip": "", "has_replies": false, "message": "I see your point but I don\u2019t think any corporate people want to use Google spreadsheet to run their business. They must stick to Microsoft Excel. But this online spreadsheet is very useful for personal use and it can be shared between family members and friends. You don\u2019t need to send spreadsheet as attachments. I don\u2019t think we want to get all those Excel features in online spreadsheet. Basic functionalities are good enough. I will be very happy to use these kinds of online tools from the big three companies.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-07_21:33:33", "killed": false, "user_key": "6089f2273641976c6aef9cd89a9aced8", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641236": {"up_voted": false, "ip": "", "has_replies": false, "message": "I wrote a <a href=\"http://andypiper.wordpress.com/2006/06/08/google-does-spreadsheets/\" rel=\"nofollow\">mini-review of Google Spreadsheets</a> this morning.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-08_06:17:56", "killed": false, "user_key": "1526dcb784188b422544c6344ef223c2", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641237": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hi! Have you seen <a href=\"http://www.editgrid.com/home\" rel=\"nofollow\">EditGrid</a> also?<br><br>There's a comparison between it and google spreadsheet here:<br><a href=\"http://www.editgrid.com/tnc/pkchan/EditGrid_v._Google\" rel=\"nofollow\">http://www.editgrid.com/tnc/pkchan/EditGrid_v._Google</a>.<br><br>You may wish to take a look!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-08_16:23:32", "killed": false, "user_key": "4b6a920079304a8dff90ceade541d4f5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641238": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert, that's online, I admit, however, it's only with in the enterprise. I meant online storage in the global sense. The internet as a storage medium itself. I realize, a few years ago, we had an explosion of online \"hard drives\" that quickly lost energy. My understanding of Microsoft's vision in this sense, was that all applications and storage (like Writely and GS) would be online (internet based) and that users could just buy software and use it remotely in that fashion. You're talking about roaming profiles and remote storage on a server within the organization. That's been done for years.<br><br>Per below;<br>__________________________________________________<br>Comment by Robert Scoble \u2014 June 7, 2006 @ 1:23 pm<br><br>Binsurf: it\u2019s totally untrue when you say that Office apps don\u2019t even remotely begin to store offline. Completely untrue. I use Outlook every day and everything I do there is stored offline and online. So are all my docs, cause I have Sharepoint.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-09_08:48:15", "killed": false, "user_key": "f15b634dfa5fbe67e0faed8993e85be4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641176": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'm not convinced that Google will provide any competition to Microsoft with Writely and Spreadsheets, but I am convinced that Microsoft will waste thousands of man hours trying to counter something that will not impact the Office bottom line (any more than YAOV - Yet Another Office Version) will.<br><br>And I hope that, having been through Middleware 1.0 (servicemark? anyone?), the guys in charge will be too wise to go through it again - it is a pity that takeup of ClickOnce and JNLP (Java version) doesn't seem to have been that great, a much better compromise.  The last thing anyone needs is to have to go through the Applet,ActiveX,TCL plugin (remember that?), Flash pain again.<br><br>Lets see if WPF/E gets any more traction than something like laszlo (<a href=\"http://www.laszlosystems.com/\" rel=\"nofollow\">http://www.laszlosystems.com/</a>) before we claim that MiddleWare 2.0 is just around the corner.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:05:14", "killed": false, "user_key": "4fe19b3352f366bef89ea9cdf6c0e0c9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641177": {"up_voted": false, "ip": "", "has_replies": false, "message": "Ah, Scoble, you're betting against Windows Live? The massive new initiative headed by the only compelling executive remaining in your company simply so you can say that the web is not a good platform because a rival is better at it than you?", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:08:30", "killed": false, "user_key": "3aeb85796d88e54daedf94e769fda691", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641178": {"up_voted": false, "ip": "", "has_replies": false, "message": "Ross, Joe Wilcox is concerned about the same thing: <a href=\"http://www.microsoftmonitor.com/archives/015805.html\" rel=\"nofollow\">http://www.microsoftmonitor.com/archives/015805...</a><br><br>Goebbels: no. But Windows Live is definitely going to compete on middleware. The most interesting gadgets are  going to be built with WPF and .NET to take advantage of what I just talked about.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:15:16", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641179": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Goebbels: no\"<br><br>Yes, you are. You are either saying the web is not a preferred platform to the desktop and/or Windows Live is years away from being compelling. And yet... your company is floundering on so many levels it was the last and most significant announcement your company made. Of course, your company screams about everything and Live has hardly delivered anything.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:26:45", "killed": false, "user_key": "3aeb85796d88e54daedf94e769fda691", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641180": {"up_voted": false, "ip": "", "has_replies": false, "message": "As an <a href=\"http://OpenOffice.org\" rel=\"nofollow\">OpenOffice.org</a> user on my iBook I fail to see why I should care about Google Spreadsheet. I don't think I would want to trust an external service with my information like that.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:32:26", "killed": false, "user_key": "56649421e9c3e301529f3e69e34fc5c3", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641181": {"up_voted": false, "ip": "", "has_replies": false, "message": "Goebbels: fair enough. I haven't been screaming about <a href=\"http://Live.com\" rel=\"nofollow\">Live.com</a>, so don't know where you are seeing all this hype that you're telling us exists.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:35:15", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641182": {"up_voted": false, "ip": "", "has_replies": false, "message": "Err... its sort of the 80/20 scenario here, except its probably closer to 97/3 in the context of spreadsheets - i.e.: 97% of people use 3% of the features of Excel. GSheet targets that demographic - the Little League managers who don't want/need or can't afford a full-on localized version.<br><br>IMHO Google's battle is against perceptions - i.e.: the perception that a web tool is a stripped down, neutered version of desktop app. Which, of course, it is - but to the 97%, that won't matter - but they need to be shown that this is the case.<br><br>Also, consider that GSheets offers less effort-of-conversion than say, OpenOffice - i.e.: I'm more likely to try GSheets online, where effort is restricted to opening a webpage, than download, install, start, and use Open Office.<br><br>With that in mind, I'd say the OpenOffice/Corel/SecondTeirProductivitySuite players are going to get dinged first. Give the hosted app meme time to spread, and MS will see the At-Home-User demographic eroded too.<br><br>Just my $0.02! Looking forward to what MS volleys back with...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:36:39", "killed": false, "user_key": "dcf810abcc6016d162504556082f5c3f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641183": {"up_voted": false, "ip": "", "has_replies": false, "message": "you are so imparcial.....<br><br>this spreadsheet is the start of a new era.....of course it's not going to beat office 2007 anytime soon...you guys have been at it for over a decades and it still s**ks.....<br><br>i've tried the '07 and it's a good start, nice gui and all but come on.....make it easier to collaborate,....and cheaper....<br><br>that's just my two cents...", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:37:01", "killed": false, "user_key": "1a2316746a4ef51b24a412a7442e982c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641184": {"up_voted": false, "ip": "", "has_replies": false, "message": "Rod: that, of course is true! (Although with Office 2007 I think the percentage of features used will double).<br><br>The real problem when designing features is that everyone uses a different 3%.<br><br>When I talk to the product designers over in Office they know approximately how many users use each feature. In even the least-used-case that's hundreds of thousands of people. This is why Office Suites that have fewer features have never gained marketshare.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:42:34", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641185": {"up_voted": false, "ip": "", "has_replies": false, "message": "I can't help but wonder if the \"long tail\" is relevant here.<br><br>When I first heard the idea, years ago, that we might be doing all our work \"on the web\" and our computers would basically be terminals, I thought that was absurd. I certainly would want all my work right here on my own hard drive.<br><br>Then a few crashed. Again. And again.<br><br>Now, big business will probably continue to use their own software and keep everything local -- as might anyone who works with confidential information.<br><br>But most of us are on the \"tail\" -- we may do a lot of computing, but it's actually less scary to trust it to Google's servers than our own little desktops and haphazard backup practices. We are online all the time, but not so overwhelmed as you, so a bit slower is OK. And we want that quick connection with friends and family -- documents, photos, get-together plans.<br><br>I think Google is winning the tail.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:42:36", "killed": false, "user_key": "409c374528ea214933b6df26f8e3cede", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641186": {"up_voted": false, "ip": "", "has_replies": false, "message": "Rod: that, of course is true! (Although with Office 2007 I think the percentage of features used will double).<br><br>The real problem when designing features is that everyone uses a different 3%.<br><br>When I talk to the product designers over in Office they know approximately how many users use each feature. In even the least-used-case that's hundreds of thousands of people. This is why Office Suites that have fewer features have typically lost marketshare.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:42:51", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641187": {"up_voted": false, "ip": "", "has_replies": false, "message": "SB: good point. But, then, the trick for us is to make it easy to backup files into the Internet cloud, or, even make that transparently happen. Keep in mind that most enterprise accounts already have Sharepoint servers where all Office files get stored anyway (and I store all my files in Outlook, which gets replicated automatically to a server as well).<br><br>Also, I&#39;ve learned that the Internet sometimes goes away (like everytime I&#39;m on a plane) so keeping files locally is vitally important to most businesspeople who can&#39;t rely on the Internet for their vital data.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:44:04", "killed": false, "user_key": "456636993483a10e9b50ffe17733de4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641188": {"up_voted": false, "ip": "", "has_replies": false, "message": "I really don't want all apps to become web-apps.  If that happens, we'll be cheating ourselves out of a lot of functionality, richness, usability, etc.  Anyway, look for Microsoft to make a web-version of Works, loaded with ads. *bleh*<br><br>Office 2007 blows away all current office suites, and moreover, makes web-apps look like mere toys. lol", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:50:58", "killed": false, "user_key": "5a0d04c001d4c3aaa837fc36e890823c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641189": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"I haven\u2019t been screaming about <a href=\"http://Live.com\" rel=\"nofollow\">Live.com</a>, so don\u2019t know where you are seeing all this hype that you\u2019re telling us exists.\"<br><br>You're so high off the smell of your own crap that you think that you are the only source of hype?<br><br>Sorry, Scoble, in this case I'm referring to major platform announcements by your company... and in the last 2 years Live (or the theoretical push to web-based services which I do not truly see occuring) would be the biggest. Anything else has fallen far short of the hype.<br><br>And, yes, I know you aren't hyping it because you are at least smart enough to not hype something so underbaked... and overbaked (at the same time). Unfortunately, you are still foolish enough to criticize Google based on the flawed criteria that Microsoft applies to itself.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:53:04", "killed": false, "user_key": "3aeb85796d88e54daedf94e769fda691", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641190": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Keep in mind that most enterprise accounts already have Sharepoint servers where all Office files get stored anyway (and I store all my files in Outlook, which gets replicated automatically to a server as well).\"<br><br>Strange, every enterprise I enter ythat has Sharepoint think it's an overhyped piece of crap that is poorly implemented so no one uses it... and other in-house built intranets or traditional software solutions are used to far greater benefit than Sharepoint. If I was a Microsoft shill, I would never, ever use Sharepoint as an example of the right direction.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_13:56:37", "killed": false, "user_key": "3aeb85796d88e54daedf94e769fda691", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641191": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"Joe Wilcox is worried that Microsoft will get distracted by Google. Oh, I don't think we have to worry about that too much.\"<br><br>You're kidding, right? Your company is the most profoundly distracted company around! It's easier to distract Microsoft than it is to distract a newborn with a piece of tinfoil. Well, I guess that's why you don't have to worry about it... it's already true.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_14:00:52", "killed": false, "user_key": "3aeb85796d88e54daedf94e769fda691", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641192": {"up_voted": false, "ip": "", "has_replies": false, "message": "Forget about features, Robert, and pay close attention to collaboration.<br><br>The ability for multiple people at multiple locations to work on the same document at the same time (without having to install and maintain custom software at all endpoints) will have a huge effect on productivity in the business world.<br><br>Right now, business people often spend days e-mailing documents back and forth, when they could solve a problem with 15 minutes of live collaboration.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_14:07:58", "killed": false, "user_key": "c5f095286dd8a3f1dbbc047412a10fb3", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641193": {"up_voted": false, "ip": "", "has_replies": false, "message": "All you can do it sit back and admire the brand equity Google has, and just how far it gets them. Open Office has been challenging Microsoft Office for years, and some would say it's a more credible challenger than Google, yet we hardly hear anything about it these days.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_14:21:54", "killed": false, "user_key": "b29e0eec9757357537d55ec55184a10a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641194": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the key difference here is 'Collaboration'.<br>That key feature (One that microsoft failed to deliver for years whilst in its internet denial phase) is what makes what google is doing so different from a me to Excel copy. A very large number of spreadsheet users do not use it for finance and higher order functions. They use it to produce simple lists and cards etc.. Often these are shared amongst others ( think local league tables, memebership lists, org charts, phone lists etc..). Thishas historically been difficult with excel requiring emailing of files and then merging changes, beyond the scope of many. With the collaborative spreadsheet this just happens. Add the ability to chat and interact whilst doing it and you have the single biggest development the spreadsheet has received in decades. This does to the spreadsheet concept what a blog did for word processing. Thats the innovation here, not actually Google's by the way, preceded by NumSum, WikiCalc,IRows.. etc (I feel sorry for those guys).<br><br>regards<br>Al", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_14:39:52", "killed": false, "user_key": "780bc6c72ea998f2b5f5f7a1fe8875eb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641195": {"up_voted": false, "ip": "", "has_replies": false, "message": "+1 for Al.<br><br>As always, Microsoft overlooks deployment, and does not see that this product can scale to release vertical market add-ons (healthcare, finance, ...) to users in a very short time. All of that comes without installing anything on the client, zero footprint.<br><br>Can you remind me the roll-out cycle of Excel? 4 years, something like that, right?<br><br>This product was not written from scratch in the last few months. It already has most of Excel's core engine on the back-end.<br><br>Microsoft's biggest mistake so far is deployment. Unsurprisingly however, that's with the same mistake that Microsoft decided .NET was not worth installing on XP boxes, which is actually a big limitation to today's .NET client deployments.<br><br>Megacorps are hard to steer...and Google is making it blatantly obvious, even for the blinds.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_14:57:44", "killed": false, "user_key": "51b85dca6c130363e1ce7c55be465d83", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641196": {"up_voted": false, "ip": "", "has_replies": false, "message": "You know, this smart client thing might just take off...<br><br>Seriously, the lines are getting pretty blurry on the UI side. Instead of only two options (browser-based or local forms), we've now got a bunch. Simple browser, AJAX, plug-ins, forms over the web, plus various combinations of those. And WPF/+-e fills in some more holes on the spectrum.<br><br>I think Google has a pretty good chance at making an impact - if they get on some bandwagon that goes beyond DHTML. Heck, if I were a strategist in Google, I'd be looking hard at what WPF/e could do for me, or even what kinds of apps might be better suited as full smart client (like Google Earth!).<br><br>But as Robert says, that competition leads to nice things for us all.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_15:01:02", "killed": false, "user_key": "d96fd018df037889c9598d90504ca52d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641197": {"up_voted": false, "ip": "", "has_replies": false, "message": "I'll never write a paper online with refresh and close/quit still active without a dialogue box to confirm it...I lost many posts due to that.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_15:53:13", "killed": false, "user_key": "da745428bb70294fbc70ce799c5ce81c", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641198": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert - in regards to #9 - agreed! However - plot the users of each individual feature in the product's feature set as circles in a venn (sp?) diagram. Beyond core functionality, I'd hypothesize, based on purely anecdotal evidence, that the overlaps would be big, and clustered - that is to say, its not everyone uses a different 3%, but rather everone uses the same 3% core functionality, and a relatively limited number of groups use similar additional subsets of the whole functionality (the overlap clusters).<br><br>You should suggest to the product group that they cross index their usage stats against the SIC code that each is user fits into:<br><a href=\"http://www.osha.gov/pls/imis/sic_manual.html\" rel=\"nofollow\">http://www.osha.gov/pls/imis/sic_manual.html</a><br><br>Then, determine the average number of features or feature-groups that a given SIC code travels across. This would yeild a feature-usage-concentration-by-industry metric.<br><br>My hypothesis would be that concentration would be high - i.e.: there's a finite # of groups using feature groups for a relatively limited number of things.<br><br>The marketing implication is that a well-executed intelligent segmentation strategy and feature set design could do some damage.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_15:59:56", "killed": false, "user_key": "dcf810abcc6016d162504556082f5c3f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641199": {"up_voted": false, "ip": "", "has_replies": false, "message": "Umm, of course, SIC comparison would miss home users - they'd have to be a code of their own. And I don't doubt that the Excel team has a very intelligent segmentation strategy of their own, as well as an understanding of usage patterns - I don't mean to come off as a jerk talking down to anyone.<br><br>I'm just big on segmentation!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_16:05:13", "killed": false, "user_key": "dcf810abcc6016d162504556082f5c3f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641200": {"up_voted": false, "ip": "", "has_replies": false, "message": "@22: That's why I'd go for a XUL or XAML application. Client side framework used to run applications from the server.<br><br>Something like that you get the best of both worlds: a single 'app' to run all of your client 'apps', but they all get served up from the internet (or, as I still think will be the intermediate answer, the intranet). That way, you have control over closing without saving and so on.<br><br>FYI, XUL is the Mozilla framework: both the Firefox browser and the Thunderbird mail client are built on it. Yes, they're client apps, but in theory, they could just as well been server side.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_16:12:10", "killed": false, "user_key": "706f67c19c5467071797d4421ff8af44", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641201": {"up_voted": false, "ip": "", "has_replies": false, "message": "<i>If I was a Microsoft shill, I would never, ever use Sharepoint as an example of the right direction.</i><br><br>Amen. In my CIOish days, don't think I ever encountered anyone happy with (or using to full potential) that mash-up slop of Sharepoint.<br><br>I see deployment and rollouts as the big issue...but too early in this game. But Google as an apps company? Do be serious.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_16:53:40", "killed": false, "user_key": "cab1041ab2de14f71e070c15f8ae968e", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641202": {"up_voted": false, "ip": "", "has_replies": false, "message": "It amazes me that nobody sees the enterprise value of the Google Spreadsheet. I don't meant at Google, but behind the firewall of a corporation. Microsoft has has to add security tools to ensure that you can turn off copy, save, and print on documents. The Google Spreadsheet behind your firewall offers the ability to collaborate, yet completely control the data.<br><br>Companies would have the security and control of a pseudo-mainframe environment while employees seemed to have the flexibility of a PC environment.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:10:02", "killed": false, "user_key": "a25d305109741d32cf064232a35bd568", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641203": {"up_voted": false, "ip": "", "has_replies": false, "message": "Online spreadsheet? You mean like the SharePoint Dataview on lists?  Been there, done that for 3+ years already.<br><br>And I'll agree with the previous poster - I haven't seen anyone using the full potential of SharePoint - there's too much there!  As far as happy - LOTS of people are happy with it.  Are there things that need improvement?  TONS of things need to be improved.  Tons are improved with the 2007 version - then we'll get used to that and have even more things that'll need to be improved/added.  And thus the march goes on.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:13:19", "killed": false, "user_key": "82c534800265d863a1014326078451f9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641204": {"up_voted": false, "ip": "", "has_replies": false, "message": "Robert,<br><br>You're right on the mark with Office 2007 - totally rocks. The major disruption is the new UI. Took me about 10 minutes to get used to it and now I don't ever want to go back. Ship this product and every online Office product will look like it's from the dark ages.<br><br>Now if I could only get Vista to work (it's running inside MS Virtual Machine but lacks the drivers for my Sony Viao)<br><br>Peter", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:17:12", "killed": false, "user_key": "cfbc9ecd79ad006672887b53ecf06930", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641205": {"up_voted": false, "ip": "", "has_replies": false, "message": "One thing that always interests me in debates like this is that people often look at it as black and white. That one side is out to kill the other or that it will dominate it. Google Spreadsheet isn't the same product as Excel but then it's not trying to be. The offsite, online method isn't going to appeal to all but then again neither does Excel with its local method. The competition is good and I'll be using Google Spreadsheet for a few things here and there but I'll also be using Office as well. There's enough market for both and plenty of cross over in my opinion. As an aside to all those who say they don't trust online apps I must have lost more articles from an unexpected quit than I have from a browser going down so stability shouldn't be a deterrent.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:17:43", "killed": false, "user_key": "5daa9640bbc52ebe3472587f84c58b6d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641206": {"up_voted": false, "ip": "", "has_replies": false, "message": "Well I am user of Microsoft products and have come to find out they have made what they percieved as a minor change to their software, namely Reporting Services SP1 has Removed the single click 'Uncheck All\" feature from the Multivalued select dropdown, this feature SOLD me and I SOLD others on this product because it was a great idea. Article here:<br><a href=\"http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=f68f4903-5171-4fff-9d70-1b4342b03a35\" rel=\"nofollow\">http://lab.msdn.microsoft.com/productfeedback/v...</a><br><br>Now I have to tell my users if they want to uncheck the boxes they will have to Click 200X! WTF!<br><br>After the pain I have experienced with ASP.NET 2.0 this week, Directory Services, LDAP, and now the best product SQL 2005, I am beginning to see why you Robert are trying so hard to make these program managers listen to the Customers. I wouldn't complain so much but my Company has invested ALOT of money in Reporting Services.<br><br>ALAS the only ting I could post over on MSDN was bout how I was gonna go TELL SCOBLE about this. Dang I feel like I am in Kindergarten!", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:39:28", "killed": false, "user_key": "1d1ba4bf0ef77766a1d77ac61c86e386", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641207": {"up_voted": false, "ip": "", "has_replies": false, "message": "Look, the money from spreadsheets is in corporations. Accountants are the big users and oh, by the way, they control the budget. Entire IT budgets will be decimated before Finance let's go of Excel. The real monopoly is not Office, but VBA macros. Once MS went that direction, dislodging Excel became nearly impossible. Too many companies rely on spreadsheets built by someone a long time, ago that just simply work. No one knows how they work, they just do and they are full of macros that won't convert to Open Office and won't convert to Google Spreadsheet. I spend most of my time in 3 apps, Outlook, Excel and our ERP system. We have 2 critical spreadsheet apps that survived a Sarbannes-Oxley audit and saved us thousand of dollars and manhours over buying specialized dedicated applications. The ROI is there for companies to buy Excel. Oh yeah,  I don't want our company's budget, or my personal budget, sitting out on the web for Google to have an \"accidental security breach\" with. Nor do I want I ads served with my spreadsheet. Talk about some boring ads! I think that this was a poor place for Google to compete. They should have picked on PowerPoint. Everyone loves to hate PowerPoint.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:46:09", "killed": false, "user_key": "5aeb73e9f0788d5bb8ef38f9d7e329ab", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641208": {"up_voted": false, "ip": "", "has_replies": false, "message": "There's nothing Google could POSSIBLY do to distract Microsoft more than Microsoft does to itself", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_17:47:42", "killed": false, "user_key": "422187df3c45655b0dc2ae5de0710b27", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641209": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"It amazes me that nobody sees the enterprise value of the Google Spreadsheet. \"<br><br>I think people are forgetting that whatever Google can do on their servers they can also do a pizza-box that they sell for your air conditioned computer room.<br><br>Before the recent Google distractions Microsoft (Gates and Ballmer anyway) stated a desire to go head to head with IBM in the services business.  They also have an obvious case of Apple and Sony envy wanting to keep their fingers in the media business.  The only thing missing is chip-fab where the margins are WAY too low for their tastes.  These are fallback positions though, in case the core business fails.   Let me steer you in the right direction.<br><br>First, how about a baby step... a Microsoft pizza-box server.  Turn-key, ready to go, admined at a very high level of creating IDs and reseting passwords etc.  THAT would be the proper response to Google, since that is probably where Google will be 5 years.   Microsoft is still following the Amway business model pioneered by Novel, turning half a company's human infrastructure into internal sales reps for your products.  I think those days are coming to an end.  As the number of people calling themselves computer professionals ramped up in the 80s the quality took a nosedive.  Something had to give, and as with the telephone industry where (in the 40s) we all became our own switchboard operators, the entry-point to computing is now: plug it in, turn it on and go.  With the exception of legitimate paranoia about proprietary data it should make no difference if the network is in your home, up the hall or a thousand miles away.<br><br>I've had a couple small companies ask me about getting their own server and I ask them how many hundreds of $K are they willing to spend.  Ironically no matter which path you take the gateway for small businesses is just as high as it was in IBM's heyday, which is why their hardware business is still hanging in there.  I think that is about to change though, and it will affect everyone, IBM, Microsoft, and even Intel and AMD, in ways not yet foreseen.  The future is zero or near-zero admin costs.  First company to get there wins the prize.  Are you up for it Microsoft?<br><br>I'm telling my small business clients to hang in there for another year, mailing their spreadsheets around, but I don't think they will need to be doing that much longer.  And no, they don't use 3 percent of the features.  Much lower I'd say.  A grid that can do basic math is all they need.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_18:13:52", "killed": false, "user_key": "macbeach", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641210": {"up_voted": false, "ip": "", "has_replies": false, "message": "For the time being, online apps won't replace software...but companies like Microsoft need to be ready for the day they do.  I agree with Chris on that they are two different products.  At the end of the day, the uses for your Excel sheet and Google Spreadsheet are going to be far different.  However, times will change soon.<br><br>On another thought, I am intrigued by the notion that Google would create a \"browser\" that would enhance apps.  There have been rumors that they are playing with the idea of creating a new browser.  If Google decides to go after this middleware idea, then MS needs to act smart.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_18:17:22", "killed": false, "user_key": "9f586e865bb3cafae670651945b914c5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641211": {"up_voted": false, "ip": "", "has_replies": false, "message": "\"This is why Office Suites that have fewer features have never gained marketshare.\"<br><br>And it explains why apps with fewer (but focused) feature sets develop communities and followings who love the product.<br><br>Nobody loves MS Office.  They tolerate it because it is relatively ubiquitous (which it became thanks to illegal tying practices).<br><br>I'm not much of a spreadsheet user in general, but competition is surely a good thing.  This would be even better with adoption of open document formats.<br><br>Then MS could compete on quality (for a change).", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_19:26:38", "killed": false, "user_key": "dff619f768de84b888ef0e09731f1b98", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641212": {"up_voted": false, "ip": "", "has_replies": false, "message": "&gt;Nobody loves MS Office. They tolerate it because it is relatively ubiquitous (which it became thanks to illegal tying practices).<br><br>What illegal tying practices? I don't remember any antitrust lawsuits about MS Office.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_20:36:09", "killed": false, "user_key": "579fbc756c0d918e2244dff914c9bf88", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641213": {"up_voted": false, "ip": "", "has_replies": false, "message": "Scoble, if you compare MS Office to Google \"Office\" (to be?), you _have_ to compare them in terms of cost/value w.r.t. the end-user.<br><br>What I mean is this: Google Spreadsheet might very well be very under-featured compared to MS Excel in MS Office 2007, but it's also free.  Collaboration is easy in GSpreadsheet in large part _because_ it's free and easily accessible/adoptable.  If you want to start comparing thin-client with thick-client, it would help if both sides offered the same value proposition.  But the fact of the matter is that right now, MS Excel costs money (i.e., is software), while GSpreadsheet is media-ware (free for basic use but potentially monetizable attention).<br><br>I think that if MSFT is really serious about the thick-client approach, then tie it in to web services  (with enough hosted intelligence to be able to leverage it in the form of mediaware) and distribute the thick client for free _now_ and be ahead of the curve.  If what you're predicting is true, and Google does have to \"thicken\" the browser to have GSpreadsheet do the same neat things Excel already does, you can bet your bottom dollar that when they do, it'll be free, and at that point the Excel featureset will already have become commodity.<br><br>You can still charge for the Office _suite_ and perhaps offer some additional membership services on top of it, but stop distributing your software like software (using the old model) if you're really trying to become a media company.<br><br>Cheers,<br>Bosko<br><a href=\"http://www.crowdedweb.com/\" rel=\"nofollow\">http://www.crowdedweb.com/</a>", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_20:55:13", "killed": false, "user_key": "dce90ceb553a872aa5c621c363c5ff57", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641214": {"up_voted": false, "ip": "", "has_replies": false, "message": "I just read through the remainder of the comments pertaining to the fact that the current spreadsheet market is largely dominated by enterprise.  While a lot of these comments are spot on, they neglect to note that just because the current market appears to be dominated by enterprise does not imply that there is no other market for spreadsheets, just that the current model is not suitable for that other market.<br><br>A mediaware model where basic spreadsheet functionality is free (and perhaps subsidized by relevant advertising, lead generation, or similar) _is_ more appealing than a relatively expensive and over-featured piece of software that does too much for non-enterprise spreadsheet users.  And these users exist.  They simply don't dominate the _current_ spreadsheet market... for now anyway.", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_21:01:48", "killed": false, "user_key": "dce90ceb553a872aa5c621c363c5ff57", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "9641215": {"up_voted": false, "ip": "", "has_replies": false, "message": "Greetings,<br>I signed up the second I heard about it.  Why?  Because I can share spreadsheets with my wife, and we can update from any computer (her Mac laptop or her Windows desktop, my Mac laptop, my Linux and Windows desktops, my work Windows and Linux desktops, hell probably my cellphone!), and keep a mini-database online of the info we need, with some calculations thrown in for good measure.<br><br>We just closed a mortgage.  We could have kept a spreadsheet of all the approximate closing costs, etc., and constantly updated it as we found out specific values for each entry, so either of us could be in touch with the lender and we'd both be kept informed via the GSheet.  We can use it to collaborate on shopping lists, even, and more.<br><br>It's the same reason we both signed up for Google Calendar, and immediately invited each other to join calendars.  It's all about the long tail, here.<br><br>There isn't a product made by Microsoft that supports the need that my wife and I have to share information.  That's partially because Microsoft doesn't just believe in the thick client, it's a religion.  Even XmlHTTPRequest was a thickening of the client.  It pains me to admit that it was necessary, but it really was.  This is a world where more is less.  Any of .NET, Flash, Java, and WPF are going to make things LESS accessible.<br><br>I live in fear of the day that Microsoft successfully develops something that replaces Flash, because I know my wife and I won't be able to use it on my Treo 650 (Palm) phone, my Linux box, my Mac laptops, Firefox, Opera, and probably any old Windows installs I have.<br><br>No.  Please, do not thicken the client any more than it needs to be.  Any thickening should come in the form of simple standards from an independant party, implemented by all browsers.  (I.e. WHAT/WG).", "is_last_child": false, "can_reply": false, "down_voted": false, "real_date": "2006-06-06_21:09:02", "killed": false, "user_key": "8efac25a624c04c98e1ebedf69a95c48", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "3 years ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}}, "integration": {"receiver_url": "", "theme": 4, "reply_position": true, "disqus_logo": false}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "18365553", "user_id": "anonymous", "forum_id": "125200", "hash": 2615610609556593605}, "thread": {"total_posts": 0, "paginate": false, "per_page": 0, "slug": "google_announces_more_sleepless_nights_ahead_for_msft_product_managers", "num_pages": 1, "days_alive": 0, "realtime_paused": true, "id": 18365553, "num_posts": 63, "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=google_announces_more_sleepless_nights_ahead_for_msft_product_managers' +
		'&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/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/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='	+ 'google_announces_more_sleepless_nights_ahead_for_msft_product_managers'
			+ '&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/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/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">63</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://scobleizer.disqus.com/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/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/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/">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/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/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:18365553" 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'				: 'google_announces_more_sleepless_nights_ahead_for_msft_product_managers',
			// 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/google_announces_more_sleepless_nights_ahead_for_msft_product_managers/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='	+ 'google_announces_more_sleepless_nights_ahead_for_msft_product_managers'
			+ '&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='	+ 'google_announces_more_sleepless_nights_ahead_for_msft_product_managers'
			+ '&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='		+ 'google_announces_more_sleepless_nights_ahead_for_msft_product_managers'
				+ '&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/18365553/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-9641176">\
	 <div id="dsq-comment-header-9641176" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641176" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641176">Ross</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641176" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641176" class="dsq-comment-message">I\'m not convinced that Google will provide any competition to Microsoft with Writely and Spreadsheets, but I am convinced that Microsoft will waste thousands of man hours trying to counter something that will not impact the Office bottom line (any more than YAOV - Yet Another Office Version) will.<br><br>And I hope that, having been through Middleware 1.0 (servicemark? anyone?), the guys in charge will be too wise to go through it again - it is a pity that takeup of ClickOnce and JNLP (Java version) doesn\'t seem to have been that great, a much better compromise.  The last thing anyone needs is to have to go through the Applet,ActiveX,TCL plugin (remember that?), Flash pain again.<br><br>Lets see if WPF/E gets any more traction than something like laszlo (<a href="http://www.laszlosystems.com/" rel="nofollow">http://www.laszlosystems.com/</a>) before we claim that MiddleWare 2.0 is just around the corner.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641177">\
	 <div id="dsq-comment-header-9641177" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641177" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641177">Goebbels</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641177" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641177" class="dsq-comment-message">Ah, Scoble, you\'re betting against Windows Live? The massive new initiative headed by the only compelling executive remaining in your company simply so you can say that the web is not a good platform because a rival is better at it than you?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641178">\
	 <div id="dsq-comment-header-9641178" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641178" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641178" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641178" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641178" class="dsq-comment-message">Ross, Joe Wilcox is concerned about the same thing: <a href="http://www.microsoftmonitor.com/archives/015805.html" rel="nofollow">http://www.microsoftmonitor.com/archives/015805...</a><br><br>Goebbels: no. But Windows Live is definitely going to compete on middleware. The most interesting gadgets are  going to be built with WPF and .NET to take advantage of what I just talked about.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641179">\
	 <div id="dsq-comment-header-9641179" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641179" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641179">Goebbels</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641179" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641179" class="dsq-comment-message">"Goebbels: no"<br><br>Yes, you are. You are either saying the web is not a preferred platform to the desktop and/or Windows Live is years away from being compelling. And yet... your company is floundering on so many levels it was the last and most significant announcement your company made. Of course, your company screams about everything and Live has hardly delivered anything.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641180">\
	 <div id="dsq-comment-header-9641180" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641180" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641180" href="http://www.8bitjoystick.com/" target="_blank" rel="nofollow">Jake of 8bitjoystick.com</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641180" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641180" class="dsq-comment-message">As an <a href="http://OpenOffice.org" rel="nofollow">OpenOffice.org</a> user on my iBook I fail to see why I should care about Google Spreadsheet. I don\'t think I would want to trust an external service with my information like that.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641181">\
	 <div id="dsq-comment-header-9641181" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641181" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641181" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641181" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641181" class="dsq-comment-message">Goebbels: fair enough. I haven\'t been screaming about <a href="http://Live.com" rel="nofollow">Live.com</a>, so don\'t know where you are seeing all this hype that you\'re telling us exists.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641182">\
	 <div id="dsq-comment-header-9641182" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641182" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641182" href="http://www.blockrocker.com/" target="_blank" rel="nofollow">Rod Edwards</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641182" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641182" class="dsq-comment-message">Err... its sort of the 80/20 scenario here, except its probably closer to 97/3 in the context of spreadsheets - i.e.: 97% of people use 3% of the features of Excel. GSheet targets that demographic - the Little League managers who don\'t want/need or can\'t afford a full-on localized version.<br><br>IMHO Google\'s battle is against perceptions - i.e.: the perception that a web tool is a stripped down, neutered version of desktop app. Which, of course, it is - but to the 97%, that won\'t matter - but they need to be shown that this is the case.<br><br>Also, consider that GSheets offers less effort-of-conversion than say, OpenOffice - i.e.: I\'m more likely to try GSheets online, where effort is restricted to opening a webpage, than download, install, start, and use Open Office.<br><br>With that in mind, I\'d say the OpenOffice/Corel/SecondTeirProductivitySuite players are going to get dinged first. Give the hosted app meme time to spread, and MS will see the At-Home-User demographic eroded too.<br><br>Just my $0.02! Looking forward to what MS volleys back with...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641183">\
	 <div id="dsq-comment-header-9641183" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641183" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641183">jonathan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641183" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641183" class="dsq-comment-message">you are so imparcial.....<br><br>this spreadsheet is the start of a new era.....of course it\'s not going to beat office 2007 anytime soon...you guys have been at it for over a decades and it still s**ks.....<br><br>i\'ve tried the \'07 and it\'s a good start, nice gui and all but come on.....make it easier to collaborate,....and cheaper....<br><br>that\'s just my two cents...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641184">\
	 <div id="dsq-comment-header-9641184" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641184" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641184" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641184" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641184" class="dsq-comment-message">Rod: that, of course is true! (Although with Office 2007 I think the percentage of features used will double).<br><br>The real problem when designing features is that everyone uses a different 3%.<br><br>When I talk to the product designers over in Office they know approximately how many users use each feature. In even the least-used-case that\'s hundreds of thousands of people. This is why Office Suites that have fewer features have never gained marketshare.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641185">\
	 <div id="dsq-comment-header-9641185" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641185" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641185" href="http://www.sbpoet.com/" target="_blank" rel="nofollow">SB</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641185" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641185" class="dsq-comment-message">I can\'t help but wonder if the "long tail" is relevant here.<br><br>When I first heard the idea, years ago, that we might be doing all our work "on the web" and our computers would basically be terminals, I thought that was absurd. I certainly would want all my work right here on my own hard drive.<br><br>Then a few crashed. Again. And again.<br><br>Now, big business will probably continue to use their own software and keep everything local -- as might anyone who works with confidential information.<br><br>But most of us are on the "tail" -- we may do a lot of computing, but it\'s actually less scary to trust it to Google\'s servers than our own little desktops and haphazard backup practices. We are online all the time, but not so overwhelmed as you, so a bit slower is OK. And we want that quick connection with friends and family -- documents, photos, get-together plans.<br><br>I think Google is winning the tail.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641186">\
	 <div id="dsq-comment-header-9641186" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641186" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641186" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641186" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641186" class="dsq-comment-message">Rod: that, of course is true! (Although with Office 2007 I think the percentage of features used will double).<br><br>The real problem when designing features is that everyone uses a different 3%.<br><br>When I talk to the product designers over in Office they know approximately how many users use each feature. In even the least-used-case that\'s hundreds of thousands of people. This is why Office Suites that have fewer features have typically lost marketshare.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641187">\
	 <div id="dsq-comment-header-9641187" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641187" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641187" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641187" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641187" class="dsq-comment-message">SB: good point. But, then, the trick for us is to make it easy to backup files into the Internet cloud, or, even make that transparently happen. Keep in mind that most enterprise accounts already have Sharepoint servers where all Office files get stored anyway (and I store all my files in Outlook, which gets replicated automatically to a server as well).<br><br>Also, I&#39;ve learned that the Internet sometimes goes away (like everytime I&#39;m on a plane) so keeping files locally is vitally important to most businesspeople who can&#39;t rely on the Internet for their vital data.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641188">\
	 <div id="dsq-comment-header-9641188" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641188" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641188">Molly C</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641188" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641188" class="dsq-comment-message">I really don\'t want all apps to become web-apps.  If that happens, we\'ll be cheating ourselves out of a lot of functionality, richness, usability, etc.  Anyway, look for Microsoft to make a web-version of Works, loaded with ads. *bleh*<br><br>Office 2007 blows away all current office suites, and moreover, makes web-apps look like mere toys. lol</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641189">\
	 <div id="dsq-comment-header-9641189" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641189" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641189">Goebbels</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641189" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641189" class="dsq-comment-message">"I haven’t been screaming about <a href="http://Live.com" rel="nofollow">Live.com</a>, so don’t know where you are seeing all this hype that you’re telling us exists."<br><br>You\'re so high off the smell of your own crap that you think that you are the only source of hype?<br><br>Sorry, Scoble, in this case I\'m referring to major platform announcements by your company... and in the last 2 years Live (or the theoretical push to web-based services which I do not truly see occuring) would be the biggest. Anything else has fallen far short of the hype.<br><br>And, yes, I know you aren\'t hyping it because you are at least smart enough to not hype something so underbaked... and overbaked (at the same time). Unfortunately, you are still foolish enough to criticize Google based on the flawed criteria that Microsoft applies to itself.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641190">\
	 <div id="dsq-comment-header-9641190" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641190" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641190">Goebbels</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641190" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641190" class="dsq-comment-message">"Keep in mind that most enterprise accounts already have Sharepoint servers where all Office files get stored anyway (and I store all my files in Outlook, which gets replicated automatically to a server as well)."<br><br>Strange, every enterprise I enter ythat has Sharepoint think it\'s an overhyped piece of crap that is poorly implemented so no one uses it... and other in-house built intranets or traditional software solutions are used to far greater benefit than Sharepoint. If I was a Microsoft shill, I would never, ever use Sharepoint as an example of the right direction.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641191">\
	 <div id="dsq-comment-header-9641191" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641191" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641191">Goebbels</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641191" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641191" class="dsq-comment-message">"Joe Wilcox is worried that Microsoft will get distracted by Google. Oh, I don\'t think we have to worry about that too much."<br><br>You\'re kidding, right? Your company is the most profoundly distracted company around! It\'s easier to distract Microsoft than it is to distract a newborn with a piece of tinfoil. Well, I guess that\'s why you don\'t have to worry about it... it\'s already true.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641192">\
	 <div id="dsq-comment-header-9641192" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641192" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641192" href="http://www.megginson.com/blogs/quoderat/" target="_blank" rel="nofollow">David Megginson</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641192" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641192" class="dsq-comment-message">Forget about features, Robert, and pay close attention to collaboration.<br><br>The ability for multiple people at multiple locations to work on the same document at the same time (without having to install and maintain custom software at all endpoints) will have a huge effect on productivity in the business world.<br><br>Right now, business people often spend days e-mailing documents back and forth, when they could solve a problem with 15 minutes of live collaboration.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641193">\
	 <div id="dsq-comment-header-9641193" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641193" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641193" href="http://www.marketingpilgrim.com/" target="_blank" rel="nofollow">Andy Beal</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641193" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641193" class="dsq-comment-message">All you can do it sit back and admire the brand equity Google has, and just how far it gets them. Open Office has been challenging Microsoft Office for years, and some would say it\'s a more credible challenger than Google, yet we hardly hear anything about it these days.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641194">\
	 <div id="dsq-comment-header-9641194" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641194" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641194" href="http://www.folknology.com/blog/1/1/" target="_blank" rel="nofollow">Al</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641194" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641194" class="dsq-comment-message">I think the key difference here is \'Collaboration\'.<br>That key feature (One that microsoft failed to deliver for years whilst in its internet denial phase) is what makes what google is doing so different from a me to Excel copy. A very large number of spreadsheet users do not use it for finance and higher order functions. They use it to produce simple lists and cards etc.. Often these are shared amongst others ( think local league tables, memebership lists, org charts, phone lists etc..). Thishas historically been difficult with excel requiring emailing of files and then merging changes, beyond the scope of many. With the collaborative spreadsheet this just happens. Add the ability to chat and interact whilst doing it and you have the single biggest development the spreadsheet has received in decades. This does to the spreadsheet concept what a blog did for word processing. Thats the innovation here, not actually Google\'s by the way, preceded by NumSum, WikiCalc,IRows.. etc (I feel sorry for those guys).<br><br>regards<br>Al</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641195">\
	 <div id="dsq-comment-header-9641195" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641195" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641195">Stephane Rodriguez</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641195" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641195" class="dsq-comment-message">+1 for Al.<br><br>As always, Microsoft overlooks deployment, and does not see that this product can scale to release vertical market add-ons (healthcare, finance, ...) to users in a very short time. All of that comes without installing anything on the client, zero footprint.<br><br>Can you remind me the roll-out cycle of Excel? 4 years, something like that, right?<br><br>This product was not written from scratch in the last few months. It already has most of Excel\'s core engine on the back-end.<br><br>Microsoft\'s biggest mistake so far is deployment. Unsurprisingly however, that\'s with the same mistake that Microsoft decided .NET was not worth installing on XP boxes, which is actually a big limitation to today\'s .NET client deployments.<br><br>Megacorps are hard to steer...and Google is making it blatantly obvious, even for the blinds.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641196">\
	 <div id="dsq-comment-header-9641196" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641196" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641196" href="http://www.dotnetmasters.com/" target="_blank" rel="nofollow">Billy Hollis</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641196" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641196" class="dsq-comment-message">You know, this smart client thing might just take off...<br><br>Seriously, the lines are getting pretty blurry on the UI side. Instead of only two options (browser-based or local forms), we\'ve now got a bunch. Simple browser, AJAX, plug-ins, forms over the web, plus various combinations of those. And WPF/+-e fills in some more holes on the spectrum.<br><br>I think Google has a pretty good chance at making an impact - if they get on some bandwagon that goes beyond DHTML. Heck, if I were a strategist in Google, I\'d be looking hard at what WPF/e could do for me, or even what kinds of apps might be better suited as full smart client (like Google Earth!).<br><br>But as Robert says, that competition leads to nice things for us all.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641197">\
	 <div id="dsq-comment-header-9641197" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641197" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641197" href="http://rbenson.wordpress.com/" target="_blank" rel="nofollow">Ryan B</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641197" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641197" class="dsq-comment-message">I\'ll never write a paper online with refresh and close/quit still active without a dialogue box to confirm it...I lost many posts due to that.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641198">\
	 <div id="dsq-comment-header-9641198" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641198" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641198" href="http://www.blockrocker.com/" target="_blank" rel="nofollow">Rod Edwards</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641198" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641198" class="dsq-comment-message">Robert - in regards to #9 - agreed! However - plot the users of each individual feature in the product\'s feature set as circles in a venn (sp?) diagram. Beyond core functionality, I\'d hypothesize, based on purely anecdotal evidence, that the overlaps would be big, and clustered - that is to say, its not everyone uses a different 3%, but rather everone uses the same 3% core functionality, and a relatively limited number of groups use similar additional subsets of the whole functionality (the overlap clusters).<br><br>You should suggest to the product group that they cross index their usage stats against the SIC code that each is user fits into:<br><a href="http://www.osha.gov/pls/imis/sic_manual.html" rel="nofollow">http://www.osha.gov/pls/imis/sic_manual.html</a><br><br>Then, determine the average number of features or feature-groups that a given SIC code travels across. This would yeild a feature-usage-concentration-by-industry metric.<br><br>My hypothesis would be that concentration would be high - i.e.: there\'s a finite # of groups using feature groups for a relatively limited number of things.<br><br>The marketing implication is that a well-executed intelligent segmentation strategy and feature set design could do some damage.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641199">\
	 <div id="dsq-comment-header-9641199" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641199" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641199" href="http://www.blockrocker.com/" target="_blank" rel="nofollow">Rod Edwards</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641199" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641199" class="dsq-comment-message">Umm, of course, SIC comparison would miss home users - they\'d have to be a code of their own. And I don\'t doubt that the Excel team has a very intelligent segmentation strategy of their own, as well as an understanding of usage patterns - I don\'t mean to come off as a jerk talking down to anyone.<br><br>I\'m just big on segmentation!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641200">\
	 <div id="dsq-comment-header-9641200" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641200" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641200">Lincoln</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641200" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641200" class="dsq-comment-message">@22: That\'s why I\'d go for a XUL or XAML application. Client side framework used to run applications from the server.<br><br>Something like that you get the best of both worlds: a single \'app\' to run all of your client \'apps\', but they all get served up from the internet (or, as I still think will be the intermediate answer, the intranet). That way, you have control over closing without saving and so on.<br><br>FYI, XUL is the Mozilla framework: both the Firefox browser and the Thunderbird mail client are built on it. Yes, they\'re client apps, but in theory, they could just as well been server side.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641201">\
	 <div id="dsq-comment-header-9641201" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641201" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641201">Christopher Coulter</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641201" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641201" class="dsq-comment-message"><i>If I was a Microsoft shill, I would never, ever use Sharepoint as an example of the right direction.</i><br><br>Amen. In my CIOish days, don\'t think I ever encountered anyone happy with (or using to full potential) that mash-up slop of Sharepoint.<br><br>I see deployment and rollouts as the big issue...but too early in this game. But Google as an apps company? Do be serious.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641202">\
	 <div id="dsq-comment-header-9641202" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641202" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641202" href="http://larryborsato.com/" target="_blank" rel="nofollow">Larry Borsato</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641202" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641202" class="dsq-comment-message">It amazes me that nobody sees the enterprise value of the Google Spreadsheet. I don\'t meant at Google, but behind the firewall of a corporation. Microsoft has has to add security tools to ensure that you can turn off copy, save, and print on documents. The Google Spreadsheet behind your firewall offers the ability to collaborate, yet completely control the data.<br><br>Companies would have the security and control of a pseudo-mainframe environment while employees seemed to have the flexibility of a PC environment.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641203">\
	 <div id="dsq-comment-header-9641203" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641203" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641203" href="http://blog.austinwheats.net/" target="_blank" rel="nofollow">Phil Wheat</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641203" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641203" class="dsq-comment-message">Online spreadsheet? You mean like the SharePoint Dataview on lists?  Been there, done that for 3+ years already.<br><br>And I\'ll agree with the previous poster - I haven\'t seen anyone using the full potential of SharePoint - there\'s too much there!  As far as happy - LOTS of people are happy with it.  Are there things that need improvement?  TONS of things need to be improved.  Tons are improved with the 2007 version - then we\'ll get used to that and have even more things that\'ll need to be improved/added.  And thus the march goes on.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641204">\
	 <div id="dsq-comment-header-9641204" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641204" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641204" href="http://www.5o9inc.com/" target="_blank" rel="nofollow">Peter Cranstone</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641204" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641204" class="dsq-comment-message">Robert,<br><br>You\'re right on the mark with Office 2007 - totally rocks. The major disruption is the new UI. Took me about 10 minutes to get used to it and now I don\'t ever want to go back. Ship this product and every online Office product will look like it\'s from the dark ages.<br><br>Now if I could only get Vista to work (it\'s running inside MS Virtual Machine but lacks the drivers for my Sony Viao)<br><br>Peter</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641205">\
	 <div id="dsq-comment-header-9641205" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641205" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641205" href="http://www.allpointsnorth.co.uk/" target="_blank" rel="nofollow">Chris Brennan</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641205" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641205" class="dsq-comment-message">One thing that always interests me in debates like this is that people often look at it as black and white. That one side is out to kill the other or that it will dominate it. Google Spreadsheet isn\'t the same product as Excel but then it\'s not trying to be. The offsite, online method isn\'t going to appeal to all but then again neither does Excel with its local method. The competition is good and I\'ll be using Google Spreadsheet for a few things here and there but I\'ll also be using Office as well. There\'s enough market for both and plenty of cross over in my opinion. As an aside to all those who say they don\'t trust online apps I must have lost more articles from an unexpected quit than I have from a browser going down so stability shouldn\'t be a deterrent.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641206">\
	 <div id="dsq-comment-header-9641206" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641206" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641206">Carolus Holman</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641206" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641206" class="dsq-comment-message">Well I am user of Microsoft products and have come to find out they have made what they percieved as a minor change to their software, namely Reporting Services SP1 has Removed the single click \'Uncheck All" feature from the Multivalued select dropdown, this feature SOLD me and I SOLD others on this product because it was a great idea. Article here:<br><a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=f68f4903-5171-4fff-9d70-1b4342b03a35" rel="nofollow">http://lab.msdn.microsoft.com/productfeedback/v...</a><br><br>Now I have to tell my users if they want to uncheck the boxes they will have to Click 200X! WTF!<br><br>After the pain I have experienced with ASP.NET 2.0 this week, Directory Services, LDAP, and now the best product SQL 2005, I am beginning to see why you Robert are trying so hard to make these program managers listen to the Customers. I wouldn\'t complain so much but my Company has invested ALOT of money in Reporting Services.<br><br>ALAS the only ting I could post over on MSDN was bout how I was gonna go TELL SCOBLE about this. Dang I feel like I am in Kindergarten!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641207">\
	 <div id="dsq-comment-header-9641207" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641207" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641207" href="http://www.dynamicaccounting.net/" target="_blank" rel="nofollow">Mark D Polino, CPA</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641207" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641207" class="dsq-comment-message">Look, the money from spreadsheets is in corporations. Accountants are the big users and oh, by the way, they control the budget. Entire IT budgets will be decimated before Finance let\'s go of Excel. The real monopoly is not Office, but VBA macros. Once MS went that direction, dislodging Excel became nearly impossible. Too many companies rely on spreadsheets built by someone a long time, ago that just simply work. No one knows how they work, they just do and they are full of macros that won\'t convert to Open Office and won\'t convert to Google Spreadsheet. I spend most of my time in 3 apps, Outlook, Excel and our ERP system. We have 2 critical spreadsheet apps that survived a Sarbannes-Oxley audit and saved us thousand of dollars and manhours over buying specialized dedicated applications. The ROI is there for companies to buy Excel. Oh yeah,  I don\'t want our company\'s budget, or my personal budget, sitting out on the web for Google to have an "accidental security breach" with. Nor do I want I ads served with my spreadsheet. Talk about some boring ads! I think that this was a poor place for Google to compete. They should have picked on PowerPoint. Everyone loves to hate PowerPoint.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641208">\
	 <div id="dsq-comment-header-9641208" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641208" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641208" href="http://www.bynkii.com/" target="_blank" rel="nofollow">John C. Welch</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641208" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641208" class="dsq-comment-message">There\'s nothing Google could POSSIBLY do to distract Microsoft more than Microsoft does to itself</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641209">\
	 <div id="dsq-comment-header-9641209" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641209" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641209" href="http://blog.macb.net" target="_blank" rel="nofollow">macbeach</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641209" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641209" class="dsq-comment-message">"It amazes me that nobody sees the enterprise value of the Google Spreadsheet. "<br><br>I think people are forgetting that whatever Google can do on their servers they can also do a pizza-box that they sell for your air conditioned computer room.<br><br>Before the recent Google distractions Microsoft (Gates and Ballmer anyway) stated a desire to go head to head with IBM in the services business.  They also have an obvious case of Apple and Sony envy wanting to keep their fingers in the media business.  The only thing missing is chip-fab where the margins are WAY too low for their tastes.  These are fallback positions though, in case the core business fails.   Let me steer you in the right direction.<br><br>First, how about a baby step... a Microsoft pizza-box server.  Turn-key, ready to go, admined at a very high level of creating IDs and reseting passwords etc.  THAT would be the proper response to Google, since that is probably where Google will be 5 years.   Microsoft is still following the Amway business model pioneered by Novel, turning half a company\'s human infrastructure into internal sales reps for your products.  I think those days are coming to an end.  As the number of people calling themselves computer professionals ramped up in the 80s the quality took a nosedive.  Something had to give, and as with the telephone industry where (in the 40s) we all became our own switchboard operators, the entry-point to computing is now: plug it in, turn it on and go.  With the exception of legitimate paranoia about proprietary data it should make no difference if the network is in your home, up the hall or a thousand miles away.<br><br>I\'ve had a couple small companies ask me about getting their own server and I ask them how many hundreds of $K are they willing to spend.  Ironically no matter which path you take the gateway for small businesses is just as high as it was in IBM\'s heyday, which is why their hardware business is still hanging in there.  I think that is about to change though, and it will affect everyone, IBM, Microsoft, and even Intel and AMD, in ways not yet foreseen.  The future is zero or near-zero admin costs.  First company to get there wins the prize.  Are you up for it Microsoft?<br><br>I\'m telling my small business clients to hang in there for another year, mailing their spreadsheets around, but I don\'t think they will need to be doing that much longer.  And no, they don\'t use 3 percent of the features.  Much lower I\'d say.  A grid that can do basic math is all they need.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641210">\
	 <div id="dsq-comment-header-9641210" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641210" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641210">Sri</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641210" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641210" class="dsq-comment-message">For the time being, online apps won\'t replace software...but companies like Microsoft need to be ready for the day they do.  I agree with Chris on that they are two different products.  At the end of the day, the uses for your Excel sheet and Google Spreadsheet are going to be far different.  However, times will change soon.<br><br>On another thought, I am intrigued by the notion that Google would create a "browser" that would enhance apps.  There have been rumors that they are playing with the idea of creating a new browser.  If Google decides to go after this middleware idea, then MS needs to act smart.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641211">\
	 <div id="dsq-comment-header-9641211" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641211" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641211">Devil&#39;s Advocate</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641211" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641211" class="dsq-comment-message">"This is why Office Suites that have fewer features have never gained marketshare."<br><br>And it explains why apps with fewer (but focused) feature sets develop communities and followings who love the product.<br><br>Nobody loves MS Office.  They tolerate it because it is relatively ubiquitous (which it became thanks to illegal tying practices).<br><br>I\'m not much of a spreadsheet user in general, but competition is surely a good thing.  This would be even better with adoption of open document formats.<br><br>Then MS could compete on quality (for a change).</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641212">\
	 <div id="dsq-comment-header-9641212" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641212" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641212" href="http://25hoursaday.com/weblog" target="_blank" rel="nofollow">Dare Obasanjo</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641212" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641212" class="dsq-comment-message">&gt;Nobody loves MS Office. They tolerate it because it is relatively ubiquitous (which it became thanks to illegal tying practices).<br><br>What illegal tying practices? I don\'t remember any antitrust lawsuits about MS Office.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641213">\
	 <div id="dsq-comment-header-9641213" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641213" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641213" href="http://www.crowdedweb.com/" target="_blank" rel="nofollow">Bosko Milekic</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641213" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641213" class="dsq-comment-message">Scoble, if you compare MS Office to Google "Office" (to be?), you _have_ to compare them in terms of cost/value w.r.t. the end-user.<br><br>What I mean is this: Google Spreadsheet might very well be very under-featured compared to MS Excel in MS Office 2007, but it\'s also free.  Collaboration is easy in GSpreadsheet in large part _because_ it\'s free and easily accessible/adoptable.  If you want to start comparing thin-client with thick-client, it would help if both sides offered the same value proposition.  But the fact of the matter is that right now, MS Excel costs money (i.e., is software), while GSpreadsheet is media-ware (free for basic use but potentially monetizable attention).<br><br>I think that if MSFT is really serious about the thick-client approach, then tie it in to web services  (with enough hosted intelligence to be able to leverage it in the form of mediaware) and distribute the thick client for free _now_ and be ahead of the curve.  If what you\'re predicting is true, and Google does have to "thicken" the browser to have GSpreadsheet do the same neat things Excel already does, you can bet your bottom dollar that when they do, it\'ll be free, and at that point the Excel featureset will already have become commodity.<br><br>You can still charge for the Office _suite_ and perhaps offer some additional membership services on top of it, but stop distributing your software like software (using the old model) if you\'re really trying to become a media company.<br><br>Cheers,<br>Bosko<br><a href="http://www.crowdedweb.com/" rel="nofollow">http://www.crowdedweb.com/</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641214">\
	 <div id="dsq-comment-header-9641214" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641214" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641214" href="http://www.crowdedweb.com/" target="_blank" rel="nofollow">Bosko Milekic</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641214" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641214" class="dsq-comment-message">I just read through the remainder of the comments pertaining to the fact that the current spreadsheet market is largely dominated by enterprise.  While a lot of these comments are spot on, they neglect to note that just because the current market appears to be dominated by enterprise does not imply that there is no other market for spreadsheets, just that the current model is not suitable for that other market.<br><br>A mediaware model where basic spreadsheet functionality is free (and perhaps subsidized by relevant advertising, lead generation, or similar) _is_ more appealing than a relatively expensive and over-featured piece of software that does too much for non-enterprise spreadsheet users.  And these users exist.  They simply don\'t dominate the _current_ spreadsheet market... for now anyway.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641215">\
	 <div id="dsq-comment-header-9641215" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641215" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641215" href="http://www.jbidwatcher.com/" target="_blank" rel="nofollow">-- Morgan Schweers, CyberFOX!</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641215" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641215" class="dsq-comment-message">Greetings,<br>I signed up the second I heard about it.  Why?  Because I can share spreadsheets with my wife, and we can update from any computer (her Mac laptop or her Windows desktop, my Mac laptop, my Linux and Windows desktops, my work Windows and Linux desktops, hell probably my cellphone!), and keep a mini-database online of the info we need, with some calculations thrown in for good measure.<br><br>We just closed a mortgage.  We could have kept a spreadsheet of all the approximate closing costs, etc., and constantly updated it as we found out specific values for each entry, so either of us could be in touch with the lender and we\'d both be kept informed via the GSheet.  We can use it to collaborate on shopping lists, even, and more.<br><br>It\'s the same reason we both signed up for Google Calendar, and immediately invited each other to join calendars.  It\'s all about the long tail, here.<br><br>There isn\'t a product made by Microsoft that supports the need that my wife and I have to share information.  That\'s partially because Microsoft doesn\'t just believe in the thick client, it\'s a religion.  Even XmlHTTPRequest was a thickening of the client.  It pains me to admit that it was necessary, but it really was.  This is a world where more is less.  Any of .NET, Flash, Java, and WPF are going to make things LESS accessible.<br><br>I live in fear of the day that Microsoft successfully develops something that replaces Flash, because I know my wife and I won\'t be able to use it on my Treo 650 (Palm) phone, my Linux box, my Mac laptops, Firefox, Opera, and probably any old Windows installs I have.<br><br>No.  Please, do not thicken the client any more than it needs to be.  Any thickening should come in the form of simple standards from an independant party, implemented by all browsers.  (I.e. WHAT/WG).</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641216">\
	 <div id="dsq-comment-header-9641216" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641216" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641216" href="http://blogs.msdn.com/doncampbell" target="_blank" rel="nofollow">Don Campbell</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641216" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641216" class="dsq-comment-message">"Strange, every enterprise I enter ythat has Sharepoint think it’s an overhyped piece of crap that is poorly implemented so no one uses it ... "<br><br>"Every enterprise"?<br><br>We must be visiting different ones.  I can give you a long list of Fortune 500s that are doing some very cool things with the SharePoint in Office 2003.<br><br>Its true the first SharePoint (2001) was not an enterprise app, and many people think of that when they hear SharePoint.  But it was re-written for Office 2003 and is very capable today, and widely used by millions of users.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641217">\
	 <div id="dsq-comment-header-9641217" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641217" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641217" href="http://jack-of-all-tradez.blogspot.com/" target="_blank" rel="nofollow">Richard</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641217" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641217" class="dsq-comment-message">"Nobody loves MS Office. They tolerate it because it is relatively ubiquitous.."<br><br>I don\'t \'love\' any software. Office is the de facto standard in that segment and it does it\'s job quite well. We use spreadsheets quite often in my line of work - structural engineering - and while they may be relatively simple, they have all kinds of macros and functions embedded in them. If Google\'s products can really import those XLS files and make them work flawlessly (there are times when OpenOffice can\'t) then I\'ll consider using it. However it only takes a couple of things to not work completely right and it will be rendered useless to me.<br><br>Then of course there is the whole issue of online storage. First of all do you want all that data on someone else\'s server? And this begs the question - as always with Google - what are they going to do with it (or how are they going to profit from it)?<br><br>People who use spreadsheets to make simple lists are one thing, but businesses typically use them for financial purposes. This usually means data that is somewhat more sensitive than a grocery list. If you can convince companies to trust Google\'s servers with that data I\'d be impressed.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641218">\
	 <div id="dsq-comment-header-9641218" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641218" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641218" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641218" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641218" class="dsq-comment-message">Don, I totally agree. It\'s quite obvious that Goebbels hasn\'t visited many enterprise accounts lately.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641219">\
	 <div id="dsq-comment-header-9641219" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641219" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641219" href="http://www.bynkii.com/" target="_blank" rel="nofollow">John C. Welch</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641219" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641219" class="dsq-comment-message">Robert,<br><br>You may visit more enterprises, but I highly doubt you have the ability and skills to know what\'s going on under the dog and pony show you\'re getting, and the knowledge to know the difference between a product in wide use and one being used effectively.<br><br>I guarantee that someone who IS a sysadmin with a clue can find out more in ten minutes than you will in ten hours, because they know what to look for and you don\'t.<br><br>I can tell you right now, that if you\'re not an all -Windows shop, Sharepoint sucks to use.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641220">\
	 <div id="dsq-comment-header-9641220" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641220" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641220">dmad</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641220" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641220" class="dsq-comment-message">@45, and outside of total Windows shops or shops that are know MS shops (Boeing, Target...I rather doubt Amazon qualifies as an Sharepoint candidate) how many enterprises have you visted? Of those, how many IT admins have you actually talked to where they told you how much your software sucked, and why?  Or were your visits merely to hock your book?<br><br>Sure there\'s a lot of licensed Sharepoint out there (one version comes with Windows, right?), but how WELL is it being used?  How many enterprises on the scale of say...WalMart, GE, Boeing, Nestle, Shell, are using Sharepoint as there PRIMARY portal and teaming solution?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641221">\
	 <div id="dsq-comment-header-9641221" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641221" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641221">dmad</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641221" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641221" class="dsq-comment-message">"If the CTO of GM wants a feature in Excel he\'ll probably get it?"<br><br>Are you completely certain that is true?  Since when did MS get into the IBM game of building specific versions for their software for a specific customer? It would seem counterproductive for an off-the-shelf software company like Microsoft to design, code, check-in, test, beta, bug fix, test, regression test, bug fix, test, regression test... ship.. a feature for one specific customer, regardless of their size.  I would think that said feature would have to appeal more broadly than just the CTO of GM for MS to consider adding it.<br><br>But, given the quality bar you guys seem to set, maybe that\'s not all that surprising.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641222">\
	 <div id="dsq-comment-header-9641222" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641222" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641222" href="http://www.office12watch.com/" target="_blank" rel="nofollow">Jason</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641222" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641222" class="dsq-comment-message">I agree. I think the best thing this does is put some more competition in the market for Microsoft to continually improve and evolve. Middleware may be an option, but I just don\'t think it\'s there yet, or will be soon. If the browsers and online items can\'t agree on simple stuff like CSS standards, I don\'t see a wide acceptance needed for middleware to gain enough ground for Google office apps to be much more than they are now.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641223">\
	 <div id="dsq-comment-header-9641223" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641223" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641223">JSW</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641223" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641223" class="dsq-comment-message">First time poster, long time lurker...<br><br>Nice topic...I have relatively little experience in large corps (I loathe working for \'the man\') so I can\'t address the enterprise level discussion. But I have been thinking about google and ms for while...I think some very strategic elements of ms\'s biz model are getting ready for \'rude awaking\'.<br><br>Start with Outlook (all the ms ofc apps are overpowered for \'joe user\') so the value of their vast array of features is discounted heavily in terms of real usability. Take the contact manager, it\'s a mess to tweak it just a bit to make it \'fit me\' (how I want the look and feel for how i use it) I\'ve bought the books, hammered away and gave up. Most will not go this path, and (stated above) simply \'accept it like it is\' and use it. The gmail fits well on it\'s first rendition as it does attempt to be a all purpose (and overwhelming) contact mgmt program but do what a mail program needs to do, for the masses. Outlook completely fails on the spam front, I get 200 a day and have about 25% end up in my inbox...which I have to manage AND for which MS has not \'smarts\' behind the scenes to recognize that v1agra is vlagra is v!aggra...it costs me time. I get 250 spams in gmail and deal with 3-5% and have noticed the filter begins to delete once it sees my pattern PLUS it measures this against other users so the cummulative intelligence provides a better filter. That works.<br><br>Word...been a user of every version of this ms product since the beginning...advance features (linking, embedded spreadsheet ranges, etc) but the simple act of collaborating (with my IT guy who left for Israel today) says it all about writely. So I can\'t embed my ssheet range today...I am highly confident it will happen because it appears the \'middle ware\' components are there to facilitate the integration of these advanced features.<br><br>Since my \'invite\' arrived today on google spread sheet, I have no experience with it. however, as an \'average joe\' who exploits excels features at a level higher than most people, this product is going to be hard for google to adapt at a level which would make it a competitive product beyond individuals (into the enterprise). But considering the \'baseball coach\' comment, google\'s spreadsheet will compete and win over users. Maybe they are aiming at a market beyond the 270million US residents? How sophisticated are those users? Exactly! It\'ll gain market share.<br><br>On the openoffice front, I ditched MS office about a year and half ago when I disconnected the linked symantec product (on purpose, to change security systems) and the whole thing broke. Spent a good part of two weeks on getting it all to work like I WANTED...no luck...and no more MS office on my system. deleted the entire suite...never looked back.<br><br>The open office products are good. Yeah had to learn a few different keystokes thanks to the ms patent attns probably but no biggie. It\'s a great suite. I have only found one bug which is embedding ssheets in docs that requires a work around but, again, for most users, it works. All openofc needs is some marketing dollars or zealots in the blogoshere and it will win market share too.<br><br>From my perspective the assault google is making on office is something I would be paying close attn to if I was the ms-ofc prod mgr. These guys are for real and they are looking at the world differently. Their view is more aligned with the \'open\' network we have than where ms\' formative roots lie - on the desk top, behind the firewall. If I was him, i would not be sleeping too much either because that wave of innovation is going to strike the beach (MS) hard.<br><br>Even with S&amp;L\'s proclamations of \'being good\' yada, yada, they will integrate their calendar, mail, spreadsheet, doc, etc so it works seamlessly; it\'s a direct aim at MS Ofc, any other assumption is naive. Why on earth would they stop short of integration? Hell, I would go for it, the win is simply too big if they pull it off. very big.<br><br>About security and data, it\'s a hole in their program for sure but wow, ms and security in the same sentence is a stretch too! One not to be taken lightly and I don\'t have an answer at this point for how they might resolve it. However, if fiber is being lit, servers are being installed at the rate some guess, then I contend the \'downtime\' aspect of this arguement is slowly going away AND there will be a way for me to port my data either locally or \'offline\'. It could be as simple a solution as a \'file save to local\' on a menu or a 5bucks per month \'rent-a-space\' option...exactly like every other data warehouse does with a huge percentage of the online internet data that is flowing thru the pipes today.<br><br>Hey, we do ccard biz, route sensitive docs,netc, across and thru these routers/servers now...how is that significantly different that what google is doing by default with their \'online\' application approach...looks the same to me.<br><br>My/Your/Our data is out there...where? exactly! Who knows...but we have adapted and integrated this into the main stream of our lives and busineses in the short timeline from lynx to opera (\'93 to \'06).<br><br>Who\'d a thunk it!<br><br>I enjoy your writings. Probably the most genuine(ly interesting) person i have read on the net. The week you shared about your mother was very heart felt. Sorry for you loss.<br><br>Keep your brain cells churning and your keyboard hooked up...it\'s always a good read here.<br><br>Thanks for the opportunity to share my thoughts.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641224">\
	 <div id="dsq-comment-header-9641224" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641224" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641224" href="http://www.intelligentassistance.com/" target="_blank" rel="nofollow">Philip Hodgetts</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641224" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641224" class="dsq-comment-message">I\'m a big fan of "load local" and web services haven\'t really interested me, but reading about Google\'s spreadsheet got me excited - because two or more people can work on the one sheet at a time. A limited sheet, sure, but a spreadsheet none the less.  My producer and I could look at a schedule together; or perhaps a guest could place themselves in the schedule? I love the idea.<br><br>And I know Excel with Office Live will probably have some similar features but so far I\'ve been undersold. ;-)<br><br>Philip</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641225">\
	 <div id="dsq-comment-header-9641225" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641225" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641225" href="http://www.jonheupel.com/" target="_blank" rel="nofollow">JonH</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641225" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641225" class="dsq-comment-message">"You\'re watching two massively different ideas about how computers should be used battling it out right on the world\'s economic stage.<br><br>On one hand you have the old standard Office that says "load locally and use local resources.""<br><br>You are half right.  It is a battle but it has nothing to do with how apps are deployed.  Tech people care about thick client vs thin client.  The real battle between MS and Google is which paradigm are users after more, tons of features or easy to use?<br><br>MS has always sold new versions on look at all the new features we added!  Google and the new wave of designy based web 2.0 apps are based on look at how pretty this is and how with a small feature set it\'s straight forward to use!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641226">\
	 <div id="dsq-comment-header-9641226" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641226" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641226" href="http://jean.wordpress.com/" target="_blank" rel="nofollow">jean</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641226" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641226" class="dsq-comment-message">GOogle has brought in the spreadsheet via the web, wait till the users gasp when they bring out the adverts on the pages based on the numbers :D<br><a href="http://www.irintech.com/x1/blogarchive.php?id=210" rel="nofollow">http://www.irintech.com/x1/blogarchive.php?id=210</a><br><br><a href="http://www.irin.co.uk" rel="nofollow">www.irin.co.uk</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641227">\
	 <div id="dsq-comment-header-9641227" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641227" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641227" href="http://www.sbpoet.com/" target="_blank" rel="nofollow">SB</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641227" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641227" class="dsq-comment-message">I just want to say, you have a very high quality of commenters here. I learn something when I follow the conversation, and I appreciate that.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641228">\
	 <div id="dsq-comment-header-9641228" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641228" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641228">Laurent</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641228" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641228" class="dsq-comment-message">local/remote: we just need a bigger javascript-accessible file sandbox to store data locally in case the network is temporarily out<br><br>security of your data: Google Office could easily encrypt our data on the browser side (javascript encryption of text data is fine), and Google would store our encrypted data</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641229">\
	 <div id="dsq-comment-header-9641229" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641229" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641229" href="http://sinha.wordpress.com/" target="_blank" rel="nofollow">Ashish Sinha</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641229" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641229" class="dsq-comment-message">Well, I guess *putting data on the internt (i.e. online office)\' is a temporary issue. Companies were not too comfortable putting their crm/procurement data on the net too. But with time and effort, they are ready to part with their data on <a href="http://salesforce.com" rel="nofollow">salesforce.com</a> etc (ASPs).<br>And the compelling reason for do is the lesser TCO of the software.<br>The challenge for Microsoft is not Google. If MS Office\'s prices aren\'r reduced (I want better security, better control over MS products, but still I am not too willing to pay the *OH MY GOD* price that MS charges.<br>If MS continues to do so, companies won\'t mind shifting to Google.<br>After all, the mandate for CIO is to lower the TCO (or get fired), and I dont see MS helping the CIO in any ways. (apart from security patches and the huge maintenance fee that they charge)<br>Its not the product features, but its the cost/usage that will drive the decision to shift to Google etc..<br>WOnder why you missed this point in your blog (esp being a product manager!)<br><br>Thanks,<br>Ashish<br>Sr. Product Manager,<br><a href="http://sinha.wordpress.com" rel="nofollow">http://sinha.wordpress.com</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641230">\
	 <div id="dsq-comment-header-9641230" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641230" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641230" href="http://www.thisisfanzoo.com/blog" target="_blank" rel="nofollow">Jeff Fansler</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641230" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641230" class="dsq-comment-message">I\'m happy about the competition as well.  There are so many features in Excel now that most people just never use.  I hope that the competition will push MS into focusing on simplicity.<br><br>That said, I haven\'t used the new version of Office yet or Vista.  I posted on my blog about getting a copy and I think your idea of sending it out to bloggers is a good one.  If there\'s any way you can push this issue and get me a copy of Office and Vista I\'d gladly blog my experience.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641231">\
	 <div id="dsq-comment-header-9641231" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641231" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641231" href="http://profnano.org/" target="_blank" rel="nofollow">Andrew Burton</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641231" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641231" class="dsq-comment-message">While I do agree with you about "MS Office vs. Google Spreadsheets," there is one interesting thing that you didn\'t mention: you can\'t use Excel in Second Life.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641232">\
	 <div id="dsq-comment-header-9641232" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641232" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641232" href="http://zoho.com/" target="_blank" rel="nofollow">Sridhar Vembu</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641232" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641232" class="dsq-comment-message">Thanks for mentioning Zoho Sheet. By way of background, Zoho is a division of AdventNet, a company that has been around 10 years now. Profitable, non-VC-funded, bubble-survivor - so I would say the data is pretty safe with us.<br><br>Sridhar</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641233">\
	 <div id="dsq-comment-header-9641233" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641233" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641233" href="http://janddmanning.wordpress.com/" target="_blank" rel="nofollow">binsurf</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641233" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641233" class="dsq-comment-message">If memory serves, Microsoft predicted 5 or 6 years ago that online storage would become a norm in the internet world very soon. Yet, here they are trying to trump Google with their heavy, resource intensive (honestly, how much resources should it take to do half the stuff it does) office apps that don\'t even remotely begin to store offline. Microsoft is becoming an old man oracle, predicting some things true, and others of thin air. I know, I sound like a Microsoft hater, I\'m not. I just wish they\'d think before speaking.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641234">\
	 <div id="dsq-comment-header-9641234" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641234" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641234" href="http://scobleizer.wordpress.com/" target="_blank" rel="nofollow">Robert Scoble</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641234" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641234" class="dsq-comment-message">Binsurf: it\'s totally untrue when you say that Office apps don\'t even remotely begin to store offline. Completely untrue. I use Outlook every day and everything I do there is stored offline and online. So are all my docs, cause I have Sharepoint.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641235">\
	 <div id="dsq-comment-header-9641235" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641235" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641235">Sreekanth</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641235" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641235" class="dsq-comment-message">I see your point but I don’t think any corporate people want to use Google spreadsheet to run their business. They must stick to Microsoft Excel. But this online spreadsheet is very useful for personal use and it can be shared between family members and friends. You don’t need to send spreadsheet as attachments. I don’t think we want to get all those Excel features in online spreadsheet. Basic functionalities are good enough. I will be very happy to use these kinds of online tools from the big three companies.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641236">\
	 <div id="dsq-comment-header-9641236" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641236" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641236" href="http://andypiper.wordpress.com/" target="_blank" rel="nofollow">andypiper</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641236" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641236" class="dsq-comment-message">I wrote a <a href="http://andypiper.wordpress.com/2006/06/08/google-does-spreadsheets/" rel="nofollow">mini-review of Google Spreadsheets</a> this morning.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641237">\
	 <div id="dsq-comment-header-9641237" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641237" class="dsq-comment-cite">\
	 <a id="dsq-author-user-9641237" href="http://www.editgrid.com/home" target="_blank" rel="nofollow">Tony</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641237" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641237" class="dsq-comment-message">Hi! Have you seen <a href="http://www.editgrid.com/home" rel="nofollow">EditGrid</a> also?<br><br>There\'s a comparison between it and google spreadsheet here:<br><a href="http://www.editgrid.com/tnc/pkchan/EditGrid_v._Google" rel="nofollow">http://www.editgrid.com/tnc/pkchan/EditGrid_v._Google</a>.<br><br>You may wish to take a look!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-9641238">\
	 <div id="dsq-comment-header-9641238" class="dsq-comment-header">\
	 <cite id="dsq-cite-9641238" class="dsq-comment-cite">\
	 <span id="dsq-author-user-9641238">Binsurf</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-9641238" class="dsq-comment-body">\
	 <div id="dsq-comment-message-9641238" class="dsq-comment-message">Robert, that\'s online, I admit, however, it\'s only with in the enterprise. I meant online storage in the global sense. The internet as a storage medium itself. I realize, a few years ago, we had an explosion of online "hard drives" that quickly lost energy. My understanding of Microsoft\'s vision in this sense, was that all applications and storage (like Writely and GS) would be online (internet based) and that users could just buy software and use it remotely in that fashion. You\'re talking about roaming profiles and remote storage on a server within the organization. That\'s been done for years.<br><br>Per below;<br>__________________________________________________<br>Comment by Robert Scoble — June 7, 2006 @ 1:23 pm<br><br>Binsurf: it’s totally untrue when you say that Office apps don’t even remotely begin to store offline. Completely untrue. I use Outlook every day and everything I do there is stored offline and online. So are all my docs, cause I have Sharepoint.</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=google_announces_more_sleepless_nights_ahead_for_msft_product_managers&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);
			}
		}
	});
}

})();




