




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": {"012e1d559ee0db2a77df84118c47fc56": {"username": "Edward Murrison", "tumblr": "", "display_name": "Edward Murrison", "url": "http://disqus.com/guest/012e1d559ee0db2a77df84118c47fc56/", "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": ""}, "edc715db2e6ae993db6d61358eb4a331": {"username": "Terry Brown", "tumblr": "", "display_name": "Terry Brown", "url": "http://disqus.com/guest/edc715db2e6ae993db6d61358eb4a331/", "registered": false, "linkedin": "", "blog": "http://www.thesearchengineconnection.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": ""}, "61dbaf9e4e12673b73b24b1de84ded67": {"username": "Ian Bird", "tumblr": "", "display_name": "Ian Bird", "url": "http://disqus.com/guest/61dbaf9e4e12673b73b24b1de84ded67/", "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": ""}, "bffdf2824ee9ef0a1836ff5279ee0048": {"username": "Prakash Dogra", "tumblr": "", "display_name": "Prakash Dogra", "url": "http://disqus.com/guest/bffdf2824ee9ef0a1836ff5279ee0048/", "registered": false, "linkedin": "", "blog": "http://antarjaal.blogspot.com", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "anthonymckinney": {"username": "anthonymckinney", "tumblr": "", "display_name": "anthonymckinney", "url": "http://disqus.com/anthonymckinney/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "a8b7a9cc4324075e11ae3c222e54e5ac": {"username": "Mike Kimber", "tumblr": "", "display_name": "Mike Kimber", "url": "http://disqus.com/guest/a8b7a9cc4324075e11ae3c222e54e5ac/", "registered": false, "linkedin": "", "blog": "http://www.lagan.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": ""}, "b3b7df7248a630745bc90b8659f84b80": {"username": "Adhir Mattu", "tumblr": "", "display_name": "Adhir Mattu", "url": "http://disqus.com/guest/b3b7df7248a630745bc90b8659f84b80/", "registered": false, "linkedin": "", "blog": "http://adhirmattu.blogspot.com/", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}, "7e96cd58cdec27a68f26b3a820788c4a": {"username": "Andrew", "tumblr": "", "display_name": "Andrew", "url": "http://disqus.com/guest/7e96cd58cdec27a68f26b3a820788c4a/", "registered": false, "linkedin": "", "blog": "http://andrew-boyd.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": ""}, "55d4c98b2eb5776ce35268b81ee237d5": {"username": "Ehsan Ehsani", "tumblr": "", "display_name": "Ehsan Ehsani", "url": "http://disqus.com/guest/55d4c98b2eb5776ce35268b81ee237d5/", "registered": false, "linkedin": "", "blog": "http://www.supplychainer.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": ""}, "0dc4fd1a1081b856310be49a88c87bba": {"username": "Al Bredenberg", "tumblr": "", "display_name": "Al Bredenberg", "url": "http://disqus.com/guest/0dc4fd1a1081b856310be49a88c87bba/", "registered": false, "linkedin": "", "blog": "http://www.linkedin.com/in/albredenberg", "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": ""}, "c2e581bdfdfef9cd5cf36c553cff9be4": {"username": "Hutch Carpenter", "tumblr": "", "display_name": "Hutch Carpenter", "url": "http://disqus.com/guest/c2e581bdfdfef9cd5cf36c553cff9be4/", "registered": false, "linkedin": "", "blog": "http://bhc3.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": ""}, "ce80786b7fd34f7a7b8aebf7a109ddd2": {"username": "Kris G", "tumblr": "", "display_name": "Kris G", "url": "http://disqus.com/guest/ce80786b7fd34f7a7b8aebf7a109ddd2/", "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": ""}, "574579e1817d7031f0becf9e7a6b3583": {"username": "Simon G", "tumblr": "", "display_name": "Simon G", "url": "http://disqus.com/guest/574579e1817d7031f0becf9e7a6b3583/", "registered": false, "linkedin": "", "blog": "http://manticoreblog.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": ""}, "c3828c1ec8b060a3c781095e7a66c582": {"username": "Paolo Galli", "tumblr": "", "display_name": "Paolo Galli", "url": "http://disqus.com/guest/c3828c1ec8b060a3c781095e7a66c582/", "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": ""}, "bfa235552fc489b1ab3dd1367fb33639": {"username": "Elliot Ross", "tumblr": "", "display_name": "Elliot Ross", "url": "http://disqus.com/guest/bfa235552fc489b1ab3dd1367fb33639/", "registered": false, "linkedin": "", "blog": "http://elliotross.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": ""}, "fcc646aa6a36166c9d59b8f1b41ee206": {"username": "Larry Hawes", "tumblr": "", "display_name": "Larry Hawes", "url": "http://disqus.com/guest/fcc646aa6a36166c9d59b8f1b41ee206/", "registered": false, "linkedin": "", "blog": "http://lehawes.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": ""}, "1783ec774a6ed2122fe4701f5c3b9af6": {"username": "SamW", "tumblr": "", "display_name": "SamW", "url": "http://disqus.com/guest/1783ec774a6ed2122fe4701f5c3b9af6/", "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": ""}, "357f6a8e0790b01807859fd1499250bb": {"username": "Tess Harris", "tumblr": "", "display_name": "Tess Harris", "url": "http://disqus.com/guest/357f6a8e0790b01807859fd1499250bb/", "registered": false, "linkedin": "", "blog": "http://www.helmsmanship.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": ""}, "16b23aba618acc7e2fa452ddf6aa4bf3": {"username": "Garrett Strzok", "tumblr": "", "display_name": "Garrett Strzok", "url": "http://disqus.com/guest/16b23aba618acc7e2fa452ddf6aa4bf3/", "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": ""}, "bc9eadea6ab66913d61170b2309c14e0": {"username": "Anshu", "tumblr": "", "display_name": "Anshu", "url": "http://disqus.com/guest/bc9eadea6ab66913d61170b2309c14e0/", "registered": false, "linkedin": "", "blog": "http://www.anshublog.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": ""}, "4c73a1538824e9f85f75c4487817e83f": {"username": "Dermot", "tumblr": "", "display_name": "Dermot", "url": "http://disqus.com/guest/4c73a1538824e9f85f75c4487817e83f/", "registered": false, "linkedin": "", "blog": "http://www.10thmonth.net/detrius", "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": ""}, "fc24e5aac8979ead80d725408bfbfb54": {"username": "John Stafford", "tumblr": "", "display_name": "John Stafford", "url": "http://disqus.com/guest/fc24e5aac8979ead80d725408bfbfb54/", "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": ""}, "da744fe101544d443a66fb87add99aa8": {"username": "Dan Pontefract", "tumblr": "", "display_name": "Dan Pontefract", "url": "http://disqus.com/guest/da744fe101544d443a66fb87add99aa8/", "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": ""}, "0d1a9108aec03858f6b0e62ee9076a83": {"username": "Alex Godden", "tumblr": "", "display_name": "Alex Godden", "url": "http://disqus.com/guest/0d1a9108aec03858f6b0e62ee9076a83/", "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": ""}, "cf9e4efe97cd6a87800cd21154c456ba": {"username": "Mecredy", "tumblr": "", "display_name": "Mecredy", "url": "http://disqus.com/guest/cf9e4efe97cd6a87800cd21154c456ba/", "registered": false, "linkedin": "", "blog": "http://twitter.com/mecredy", "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": ""}, "904e7e1d6f513c75f30e4ac1f778536a": {"username": "Kamal", "tumblr": "", "display_name": "Kamal", "url": "http://disqus.com/guest/904e7e1d6f513c75f30e4ac1f778536a/", "registered": false, "linkedin": "", "blog": "", "remote_domain": null, "points": null, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": false, "name": "Andrew McAfee&#39;s Blog", "streaming_realtime": false, "url": "andrewmcafee", "allow_anon_post": true, "reactions_enabled": true, "reply_position": 0, "show_avatar": true, "allow_anon_votes": false, "disqus_auth_disabled": false}, "realtime_enabled": false, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 2, "forum": "andrewmcafee", "is_initial_load": true, "is_authenticated": false, "timestamp": "2009-12-03_15:37:49", "remote_domain": "", "page": 1, "is_moderator": false, "display_username": "", "points": null, "subscribe_on_post": 2, "moderator_can_edit": false, "is_remote": false, "is_verified": false, "missing_perm": null}, "realtime_paused": false, "posts": {"5488046": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hello Andrew,<br>intuitively your analogy sounds plausible, however according to Saunders' conclusions in your previous post, competition in a given industry is ultimately stifled by intense IT-ification which implies the opposite. <br>An alternative explanation could be that the reduction in competitors is a result of globalization which is a by-product of IT-ification itself.<br><br>Edward", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_11:49:10", "killed": false, "user_key": "012e1d559ee0db2a77df84118c47fc56", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 11:49 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488047": {"up_voted": false, "ip": "", "has_replies": false, "message": "Andrew<br><br>I like it. As a colleague said, in financial services IT is the factory floor. Similar to your analogy and one I use with my own students. <br><br>Dermot", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_12:01:03", "killed": false, "user_key": "4c73a1538824e9f85f75c4487817e83f", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 12:01 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488048": {"up_voted": false, "ip": "", "has_replies": false, "message": "Andrew,<br><br>Your analogy is both sound and interesting.  Too many view enterprise software as a \"solution\".  That term implies that what is being purchased should be deployed \"as is\" in order to solve a specific business challenge.  In fact, most instances of enterprise software are tools (or suites of tools) that are flexible enough to help best any number of organization-specific challenges, depending on how the software is configured prior to deployment.<br><br>A common complaint provides good evidence of the misunderstood nature of enterprise software.  Many organizations complain that ERP Product X forces them to change their business processes to fit the software.  What they don't realize, of course, is that they should be doing the opposite -- changing the out-of-the-box software to meet their specific needs.  It is by doing so that competitive differentiation can be built, especially in the operations realm.<br><br>Thanks for a great post and I hope your analogy gains traction!", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_12:29:59", "killed": false, "user_key": "fcc646aa6a36166c9d59b8f1b41ee206", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 12:29 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488049": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree with the analogy. To give you context, my company bought and heavily customised an enterprise software product from a vendor. The core software is not customised and the IP belongs to the vendor, but the custom business rules, all the logic and calculations in the application layer are in fact our IP and protected by confidentiality agreements. Hence, our main competitor who has just entered into an agreement with the vendor cannot have access to this valuable information, which gives us an inherently protected commodity if you like. Thus, the business rules can be compared I think to business processes that you refer to, which are unique to a company.<br><br>I don't know however if this is how other enterprise applications work whereby the business specific rules and logic - the customised element, can sit on top of the core product and be protected from the competition. I wonder if any other readers can shed light on this?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_13:02:46", "killed": false, "user_key": "904e7e1d6f513c75f30e4ac1f778536a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 01:02 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488050": {"up_voted": false, "ip": "", "has_replies": false, "message": "Andrew - I do like the analogy. Here's why. Assume you want to enter the cell phone business. You could hand-manufacture them. Maybe there is some old, used manufacturing equipment available, and you use that.<br><br>Meanwhile, your competitors are using high-volume, technologically advanced manufacturing facilities. They're killing you in term of (1) cost, (2) production volumes, and (3) ability to change to meet new feature innovations.<br><br>By not utilizing the best process technology available, your little cell phone start-up falls further and further behind.<br><br>I look at ESSP in a similar fashion. Employees' contributions and ability to find a richer amount of information have historically been limited by technology that had a narrow range of accessibility. Companies like Cisco, which are moving hard into better tapping the fuller range of employee knowledge, ideas and energy, are going to be better positioned than their competitors who continue to work in the older, traditional ways.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_13:09:16", "killed": false, "user_key": "c2e581bdfdfef9cd5cf36c553cff9be4", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 01:09 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488051": {"up_voted": false, "ip": "", "has_replies": false, "message": "That is a very interesting way of looking at competition.  I feel it is impossible for two companies to have the exact marketing techniques.  Yeah everyone has access to the same tools but are they being marketing in the same way?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_13:27:25", "killed": false, "user_key": "edc715db2e6ae993db6d61358eb4a331", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 01:27 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488052": {"up_voted": false, "ip": "", "has_replies": false, "message": "A v useful analogy which I will use as well", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_13:41:33", "killed": false, "user_key": "574579e1817d7031f0becf9e7a6b3583", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 01:41 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488053": {"up_voted": false, "ip": "", "has_replies": false, "message": "Yes, I do think this is a promising analogy.<br><br>Somehow the exchange with Charlie Rose here makes me think of the way CRM was being touted during the mid- to late-1990s as a panacea for sales and marketing problems. Many companies were disappointed with the results, but probably more due to naivety and unrealistic expectations than to any essential deficiency in the technologies or the idea of customer relationship management.<br><br>Organizational effectiveness doesn't automatically improve merely from the application of technologies, because those technologies are intimately enmeshed with the people and processes in the organization. So putting providing better data and access for your call center, for example, won't improve your sales and customer service if your personnel are poorly trained or if the company at its core just doesn't really care about its customers.<br><br>One aspect of your analogy that I'm a little uncertain of is that it seems to imply that business processes are a result of the technology, whereas I wonder if that's an oversimplification. I tend to think of technology, processes, and people in more of a symbiotic relationship rather than saying that one arises from the other.<br><br>Nevertheless, I do like the factory analogy and wonder if it might benefit from some refining and further articulation.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_15:07:32", "killed": false, "user_key": "0dc4fd1a1081b856310be49a88c87bba", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 03:07 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488054": {"up_voted": false, "ip": "", "has_replies": false, "message": "I like the analogy.<br><br>However, I think a slightly better one is the construction industry.<br><br>Everyone has access to the exact same suppliers -- Home Depot, local lumberyards. Yet houses end up radically different in terms of cost and quality.<br><br>Some builders specialize in speed and repeatability, others focus on quality. Some focus on new construction, some on rehabs.<br><br>IT can either be used in a generic fashion (single install of industry standards) to get generic results. Or it can be used in a unique fashion (combined with other products, especially legacy or custom development) to get higher or lower results.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_15:11:11", "killed": false, "user_key": "fc24e5aac8979ead80d725408bfbfb54", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 03:11 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488055": {"up_voted": false, "ip": "", "has_replies": false, "message": "I find the analogy interesting but I am not clear on what it conveys. Are you suggesting that two companies can differentiate in spite of having identical IT systems? And that such differentiation comes from process innovation enabled by flexible systems?<br><br>But isn't that true for pretty much every investment a business can make. For instance, you and buy identical billboards or TV slots for advertising and then differentiate on the ad content. Or you and buy identical taxi cabs but offer different prices. Is this innovation enabled by billboards and taxi cabs? Or is innovation in these cases orthogonal to billboards, cars and IT?<br><br>Finally, I can differentiate around the speed with which I adopt the latest IT systems and how well I execute the project etc. So, the premise that two competitors have identical systems (in place) because they are talking to the same vendor is not really true.<br><br>And frankly, this is where the newer models of computing can provide and edge to a competitor. Smaller capital expenditures, faster implementations and more agile systems.<br><br>(Disclaimer: The opinions expressed here are entirely personal.)", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_15:20:28", "killed": false, "user_key": "bc9eadea6ab66913d61170b2309c14e0", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 03:20 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488056": {"up_voted": false, "ip": "", "has_replies": false, "message": "Surely, your analogy echoes what Michael Treacy and Fred Wiersema wrote about in HBR in 1992, ie that \"Operational Excellence\" (aka process) can be a differential value-add, if you don't have superior \"customer intimacy\" and \"product leadership\" - Treacy & Wiersema's other added value disciplines.<br><br>Plus ca change...", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_17:17:11", "killed": false, "user_key": "357f6a8e0790b01807859fd1499250bb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 05:17 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488057": {"up_voted": false, "ip": "", "has_replies": false, "message": "Dear Andrew, <br><br>I personally liked your example in the interview with Charlie Rose and I think it\u00c2\u2019s a powerful analogy for educating public on how the enterprise software is like. However, regarding your question about whether it holds up or not, I would say I prefer to use the analogy of process store or process shop rather than process factory. <br><br>First, I try to give some comments and then explain my reasons, taking SAP as an example of enterprise software and a PDA as a product. <br><br>-Your comment \u00c2\u201cSo even if you and I buy the same basic factory from [Leo], we`re going to do very different things with it. If I do smarter things than you, I will get ahead over time.\u00c2\u201d Assumes that getting ahead over time is a function of smart actions. That means getting ahead depends on the actions of the buyers. However, in the software world, there are sometimes external elements such as the power of location. Two years ago, I was working on a global transformation project with a Finnish company. We had to wait for one year because SAP hadn\u00c2\u2019t had any Finnish version at the time. A German company which has bought the same solution might be ahead of the Finnish one not because of smartness but because of the learning advantage which it has had (You see: It\u00c2\u2019s like a Chinese having a PDA with English manual, in this case the source of advantage is being able to access complementary info.). <br><br>-Typically if you are an inventor and want to turn out a product from a factory, you contact them, give them your product specification and they produce a sample for you. If you don\u00c2\u2019t like the sample, you make some comments and then they will modify it based on your comments. However, if we look at the enterprise software world (as I mentioned, let\u00c2\u2019s take SAP as an example), it\u00c2\u2019s not SAP producing the business processes which companies want: There are other entities within the enterprise software ecosystem which are normally doing this (companies like Accenture, Deloitte, etc.). SAP in this case has the role of a selling agent. <br>-An inventor of a PDA knows what he/she wants; that means that there is no need for another person here. He/she talks to the factory people and communicates the product specification in his/her mind. Therefore, after receiving the produced sample, it\u00c2\u2019s possible to compare the product functions with the product spec. and see if it\u00c2\u2019s really the product which was ordered. In the case of enterprise software many companies don\u00c2\u2019t know what they want and they need help for evaluating the software capabilities both for accepting it and using it. <br>Now let\u00c2\u2019s go to the \u00c2\u201cProcess-Store\u00c2\u201d analogy: Imagine that you want to buy a PDA. You don\u00c2\u2019t know what is out there, so you might go to a store or different stores to see the models. You might also pay for some magazines which have PDA reviews or ask your friends what PDA they have and if they like it. <br><br>PDA is not very cheap, so you might accept payment for buying such magazines because they evaluators who have written the reviews know many models of PDAs (they are expected to &#61514;).   <br><br>After you spend some time and effort doing investigation, you buy the product but you notice that it doesn\u00c2\u2019t do all the things you want: It requires some additional memory. You spent some more time to see which brand is good\u00c2\u2026..Ok, I think you got the idea: <br><br>What I wanted to highlight is the process of decision making, the external entities which influence that and the time and money which is being spent improving the decision, use of it, etc. (I am not sure about my analogy either as I just wrote it as a comment, appreciate the feedback&#61514;<br><br>Best", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_18:16:56", "killed": false, "user_key": "55d4c98b2eb5776ce35268b81ee237d5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 06:16 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488058": {"up_voted": false, "ip": "", "has_replies": false, "message": "Andy - maybe I am a bit slow tnite.  The factor that I think is missing is that the scarce resource that is making the difference is the people that implement the software and that use the software.  Wouldnt it be like saying the competetive difference between hammers makes houses of various qualities?  What point am I missing.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_20:05:52", "killed": false, "user_key": "cf9e4efe97cd6a87800cd21154c456ba", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 08:05 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488059": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think that there are two interesting sides to this analogy. <br><br>The first is the \u00c2\u201cwe\u00c2\u2019re inventors\u00c2\u201d part. The idea here is that even though you have the same factories, you may invent different types of lawnmower to build and keep your competitive advantage through better innovations, IP protection for your designs etc. Having access to the same factory can\u00c2\u2019t level the playing field here.<br>Similarly, companies with the same software are almost certainly not trying to use it to solve exactly the same problem. For example, CRM software is widely available, so you could say that two companies are able to provide exactly the same customer service experience (as they presumably have access to the same pool of employees \u00c2\u2013 the other \u00c2\u201craw material\u00c2\u201d here). However, both companies are unlikely to have the same approach to delivering customer service: one might be following a strategy of  customer segmentation to over-serve profitable customers and encourage unprofitable ones to leave; while the other wants to improve its mass appeal by servicing as many customers as they can as efficiently as possible. Both companies can use the same software to support their strategy, but as long as their strategies are different there is scope for differentiation and competition.<br><br>The second part is the \u00c2\u201cprocess factories\u00c2\u201d part of the analogy: the concept that software is a way of building and replicating business processes. This is, I feel, still an appropriate analogy but can also be used against your argument that IT does not level the playing field: specifically in cases where the business software is so prescriptive that the business processes are defined by it and therefore identical.<br>To illustrate this: say the factory is identical down to every last detail, including the shape of the moulds used to make the plastic lawnmower body and the templates used to cut the blades. In that situation, the lawnmowers produced would be identical. You could perhaps pull ahead in productivity by innovating your workers shift patterns, incentive schemes or the management structure (you can always do something better) but the resulting products would not differ.<br>Customized IT solutions for big companies would not follow this pattern, but enterprise IT is becoming more affordable and useable for smaller companies precisely by becoming more \u00c2\u201coff-the-shelf\u00c2\u201d. Two start-ups using a basic <a href=\"http://salesforce.com\" rel=\"nofollow\">salesforce.com</a> product to handle online customer enquiries are likely to have identical processes, and often near-identical outputs.<br><br>So I think the analogy holds, but there is more scope to explore exactly how you are defining \u00c2\u201cidentical\u00c2\u201d factories in relation to the potential for customization of the software.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-08_20:33:50", "killed": false, "user_key": "0d1a9108aec03858f6b0e62ee9076a83", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/08/2009 08:33 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488060": {"up_voted": false, "ip": "", "has_replies": false, "message": "Yes, I like this analogy-because it encapsulates the essence of the uniqueness of the enterprise (or persons within the enterprise) where - any enterprise can buy the same product from a particular vendor.<br><br>It hold good if I test this analogy with any other product / service in  - I used the example of usage of a particular PDA model, which both me and my friend bought and yet have different levels of satisfaction from it based on our unique usage patterns and business usage.<br><br>The only element i thought missing is that - what about the expertise of the provider of product? How is that being harnessed and innovated upon by the buyer? The ability to tap into the suppliers capabilities to harness global knowledgebase and build upon it is also uniqueness of the buyer. And that is how while the one buyer distinguishes itself from the other buyer of the same product.<br><br>Investing in IT should include both external /visible spend to acquire product/service plus investment in re-engineering systems to create business rules and processes that will leverage the capabilities of the product. That is how unique distinction can be made even when using a common product.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_06:12:00", "killed": false, "user_key": "bffdf2824ee9ef0a1836ff5279ee0048", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 06:12 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488061": {"up_voted": false, "ip": "", "has_replies": false, "message": "Andrew,<br>I like your analogy. I was recently pondering a similar issue with the use of enterprise software. So if you are looking for additional meat and potatoes to compliment your hardware analogy, I submit that given identical opportunities with enterprise software, the differences in success that may be observed a given time later may have more to do with each institutions ability to communicate the individual and organizational benefits of using a well thought out strategy, and then implementing it. In short, given equal tools, the one that can motivate their work forces understanding and smart use of the tools will likely see greater success more quickly.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_06:35:42", "killed": false, "user_key": "16b23aba618acc7e2fa452ddf6aa4bf3", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 06:35 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488062": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hello Andrew,<br>Intuitively your analogy sounds correct but Saunders' conclusions in your preveious post suggest that intense ITification in a given industry leads to a reduced number of competitors. <br>It is of course possible that the reduction is due to globalization which is itself a side-effect of the technology world but I think it is still too early to tell. Did Saunders have any theories on how things will look in say 10 years time?<br>Edward", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_08:08:02", "killed": false, "user_key": "012e1d559ee0db2a77df84118c47fc56", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 08:08 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488063": {"up_voted": false, "ip": "", "has_replies": false, "message": "The challenge with using a product-based analogy is that it does not account for the impact and importance of design on competitive advantage -- i.e. you may have better designers, but not necessarily better processes. <br><br>However, I do believe that the source of competitive advantage is not in the features and functions of the software, but in the ability to configure/customize the software to unique business processes.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_08:13:40", "killed": false, "user_key": "7e96cd58cdec27a68f26b3a820788c4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 08:13 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488065": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think it works fine!<br>I've tried to think about another analogy, car race for example, where every car-maker have the same tech, but one car wins and the other loose, but yours works better.<br>I see in my job (ICT Management Consultant), many customers use ICT very well.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_08:43:55", "killed": false, "user_key": "c3828c1ec8b060a3c781095e7a66c582", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 08:43 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488066": {"up_voted": false, "ip": "", "has_replies": false, "message": "I like the analogy as far as it goes.  It leads me to this question though: Once you and your competitor have made the identical investment in IT, what then provides the competitive differentiation?  How do your investments to date and your future investments create the differentiation in how you employ the 'process factory'?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_10:08:32", "killed": false, "user_key": "1783ec774a6ed2122fe4701f5c3b9af6", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 10:08 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488067": {"up_voted": false, "ip": "", "has_replies": false, "message": "The challenge with using a product-based analogy is that it does not account for the impact and importance of design on competitive advantage -- i.e. you may have better designers, but not necessarily better processes. <br><br>However, I do believe that the source of competitive advantage is not in the features and functions of the software, but in the ability to configure/customize the software to unique business processes.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_10:27:23", "killed": false, "user_key": "7e96cd58cdec27a68f26b3a820788c4a", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 10:27 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488068": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think it is a fine analogy <br><br>I would even add one extension. As you said, the process is important. And how you mange the process.<br><br>Your quote; So even if you and I buy the same basic factory from [Leo], we`re going to do very different things with it. <br><br>I would argue that even if you **were** doing the same thing with it, (ie direct competitors making a widget) The management and processes are the variables, not the factory.<br><br>His sales reps outsell yours 5 to 1<br><br>His aged inventory is 1/3 of yours<br><br>His defect rate is almost zero while yours is 12%<br><br>His first time accurate and on time delivery is 97%, yours is 40<br><br>The factory is the commodity in this analogy - but how you **manage** that commodity is where competitive advantage lies<br><br>And ditto for technology -", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-09_12:53:32", "killed": false, "user_key": "bfa235552fc489b1ab3dd1367fb33639", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/09/2009 12:53 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488069": {"up_voted": false, "ip": "", "has_replies": false, "message": "This is a very helpful idea and it stands up to my limited experience. <br><br>I think you could also use this approach to integrate a set of cooperative strategies that are also (often) in play when the \"process factory\" is put to work within a given enterprise. <br><br>This could be particularly helpful for those of us who are trying to determine how competitive and cooperative paradigms necessarily intermingle in today's world.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-10_15:25:35", "killed": false, "user_key": "61dbaf9e4e12673b73b24b1de84ded67", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/10/2009 03:25 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5488070": {"up_voted": false, "ip": "", "has_replies": false, "message": "Dear Andrew<br><br>I have to respectfully disagree. In reality, use of enterprise software of the likes sold by SAP or Oracle has not been significant beyond double-entry book-keeping and logistics. And we all know how wasteful (in the view of Japanese production concepts) double-entry book keeping is.<br><br>Better research is needed to quantitatively tie firm competitive advantage to its innovative use of enterprise IT. It is difficult to see the correlation if Toyota can run the most competitive auto company in the world with hand signals and ad hoc changes on the manufacturing world, and GM, a poster child of a idiocracy   with umpteen enterprise systems and yes, SAP.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-22_09:35:13", "killed": false, "user_key": "ce80786b7fd34f7a7b8aebf7a109ddd2", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/22/2009 09:35 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5569631": {"up_voted": false, "ip": "", "has_replies": false, "message": "Although in pure theoretical terms I agree with your thesis, in reality it's a different story.<br><br>The theory of your claim can and does work extremely well when various pieces of software can be collected, customized and centralized to specifically dictate the unique business process requirements of a company. Those pieces, cobbled together, creates the process factory for the company in question.<br><br>Eg. a learning management system that actually acts as a social learning engine, not as an archaic course management tool, combined with a proper talent management/succession planning tool, combined with a sales cycle forecasting/prospecting/tracking tool, combined with a robust budgeting & analysis application, combined with &lt;insert sales, human, asset and/or technology tool&gt; etc etc etc<br><br>In my opinion, this is extremely difficult to achieve with an ERP.<br><br>Enterprise software development companies such as SAP et al certainly try to bring this perceived panacea to fruition, but the reality is that it often takes loads of customization (software development customization, not necessarily business process customization) to achieve the desired end state.<br><br>This is where the hay falls off the wagon as the more one customizes an ERP, the less likely it is --- ironically I might add --- to achieve the desired customized business process end state. Customizing the ERP requires gobs of money, and when an upgrade presents itself downstream to 'improve' the ERP, it's likely to involve even more dollars in order to retrofit the upgrade into the older and ultimately customized ERP system currently in place.<br><br>I guess my ultimate argument is that the ERP system is in fact inflexible, and although configurable, it is at times much easier to purchase separate software pieces to achieve your desired business process end state. It allows for easier customization and upgrades over time.<br><br>Whatever happened with your argument about the mash-up anyway? Isn't this the basis for Enterprise 2.0???", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-27_00:34:15", "killed": false, "user_key": "da744fe101544d443a66fb87add99aa8", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/27/2009 12:34 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5642593": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think the analogy works well.   An additional point about the factory - although you might buy the same \"process factory\" you want to find the best location for your intended customers (and partners).   The more who can discover what you are building,  and try your product, the better the chance of beating the competition.  You may also find that your customers and partners can easily recommend their own customers if they can easily access your factory!", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-29_00:35:46", "killed": false, "user_key": "anthonymckinney", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "01/29/2009 12:35 AM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5509610": {"up_voted": false, "ip": "", "has_replies": false, "message": "Dear Andrew,<br><br>Things are bit more complex in the real world and BTW I saw your interview on the Charlie Show.<br><br>Your analogy makes it sound that it is very easy to configure business processes in ERP systems like SAP. Matter of the fact is that, ERP systems are generally so rigid and fixed, that changing standard business processes is a nightmare and these changes often result in the \"dreaded\" customizations which companies find very hard to manage and maintain. <br>Hence, currently ERP customers mostly use standard business processes that provides very limited competitive differentiation.<br><br>SAPs of the world need to go a component based model and leave the designing of the business processes (using these components to the innovative minds of the digital factory ). This will enable the smarter companies to get competitive differentiation by being able to configure better and flexible processes.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-23_23:22:24", "killed": false, "user_key": "b3b7df7248a630745bc90b8659f84b80", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/23/2009 11:22 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "5623669": {"up_voted": false, "ip": "", "has_replies": false, "message": "This blog post seems to support your argument (to me nayway)!:<br><br><a href=\"http://news.cnet.com/8301-13505_3-10151545-16.html?part=rss&subj=news&tag=2547-1_3-0-20\" rel=\"nofollow\">http://news.cnet.com/8301-13505_3-10151545-16.h...</a><br><br>i.e. its not the Google servlet engine that makes Google its Google.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-01-28_14:34:04", "killed": false, "user_key": "a8b7a9cc4324075e11ae3c222e54e5ac", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "01/28/2009 02:34 PM", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}}, "integration": {"receiver_url": null, "theme": 1, "reply_position": false, "disqus_logo": false}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "10392736", "user_id": "anonymous", "forum_id": "78088", "hash": 9032596574234561860}, "thread": {"days_alive": 0, "slug": "it8217s_like_this8230", "paginate": false, "num_pages": 1, "num_posts": 28, "per_page": 0, "total_posts": 0, "realtime_paused": true, "id": 10392736, "queued": false}, "reactions_limit": 10, "context": {"show_reply": true, "use_fb_connect": false, "forum_facebook_key": "", "use_yahoo": false, "subscribed": false, "use_twitter_signin": true, "use_openid": true, "realtime_speed": 5000}, "reactions_start": 0, "settings": {"debug": false, "disqus_url": "http://disqus.com", "media_url": "http://media.disqus.com"}, "media_url": "http://media.disqus.com"};
	/* */ this.jsonData.cookie_messages = {"user_created": null, "post_has_profile": null, "post_twitter": null, "post_not_approved": null}; this.jsonData.session = {"url": null, "name": null, "email": null}; /* */

	
	this.curPageId = 'dsq-comments';

	this.frames = {};
};

var disqus_popup_reference = null;

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



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

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

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

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

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

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

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

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





Dsq.CSRF_TOKEN = '21bc467119200cb06806902fa8e2f5b0';
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;



// 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://disqus.com/forums/andrewmcafee/it8217s_like_this8230/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 {
			return parseInt(chunks[chunks.length-1]);
		}
	};

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

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

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

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

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

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

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

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

		return params;
	};

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

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

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

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

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

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

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

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

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

	};

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

};
// Dsq.Utils

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

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

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

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

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

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

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

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

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

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

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

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

	};

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

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

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

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

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

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

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

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

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

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

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

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

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

	this.remoteAccountSettings = function() {
		var body = '';
		// Set up IFrame.
		var params = {};
		var base_url = 'http://disqus.com/forums/andrewmcafee/_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">28</span> Comments\
	 &nbsp;\
	 <span class="dsq-item-feed">\
	 <a href="http://disqus.com/forums/andrewmcafee/it8217s_like_this8230/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" >Popular now</option>\
	 <option value="best" >Best Rating</option>\
	 <option value="newest" selected="selected">Newest first</option>\
	 <option value="oldest" >Oldest first</option>\
	 </select>\
	 &nbsp;\
	 </span>\
	 <span class="dsq-item-cp"><a href="http://disqus.com/forums/andrewmcafee/it8217s_like_this8230/">Community Page</a>&nbsp;&nbsp;&nbsp;</span>\
	 <span class="dsq-item-subscribe">\
	 <img src="http://media.disqus.com/images/embed/email.png" style="width:12px;height:12px;vertical-align:middle">\
	 <span id="dsq-subscribe">\
	 <a href="#" onclick="Dsq.Thread.subscribe(1); return false">Subscribe by email</a>\
	 </span>\
	 </span>\
	 </div>\
	 <div id="dsq-alerts">\
	 </div>\
		';

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

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

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

		

		html += Dsq.Templates.reactions();

		
			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 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://disqus.com/forums/andrewmcafee/it8217s_like_this8230/trackback/';
		}

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

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

		return html;
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		return '<h3 class="dsq-h3-reactions">Reactions</h3><ul id="dsq-reactions" class="dsq-reactions">' + html + '</ul>';
	};
	
	this.missingPermissions = function() {
		return '';
	};

	//
	// Post
	//

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

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

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

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

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

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

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

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

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

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

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

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

		return ' \
			<div class="dsq-comment-footer" id="dsq-comment-footer-' + post_id + '"> \
				<div id="dsq-points-' + post_id + '" class="dsq-likedtxt">'
				+ (_meta.points
					? _meta.points + Dsq.Utils.pluralize(_meta.points, ' person', ' people') + ' liked this comment.'
					: '')
				+ '</div>'
				+ '<ul class="dsq-comment-options dsq-list-style">'
				+ (_meta.votable
					? '<li class="dsq-list-first dsq-rate" id="dsq-rate-cont-' + post_id + '">'
					+ (!_meta.up_voted
						? '<a href="#" onclick="Dsq.Post.rate(this, ' + post_id + ', 1); return false;">Like</a>'
						: 'You liked this.') + '</li>'
					: '')
				+ '<li class="dsq-report' + (!_meta.votable ? ' dsq-list-first' : '') + '" id="dsq-post-report-' + post_id + '"><a href="#" class="dsq-post-report" onclick="Dsq.Post.report(' + post_id + ', false); return false;">Report</a></li> \
				</ul> \
				<ul class="dsq-list-style">'
				+ (_meta.can_reply
					? '<li class="dsq-list-first"><a href="#" id="dsq-reply-link-' + post_id +'" onclick="Dsq.Post.toggleReply(this, ' + post_id +'); return false;">Reply</a></li>'
					: '')
				+ (_meta.can_reply && !_meta.has_replies && _meta.from_request_user
					? '<li id="dsq-edit-el-' + post_id + '"><a id="dsq-edit-link-' + post_id + '" href="#" onclick="Dsq.Post.edit(this, ' + post_id + '); return false;">Edit</a></li>'
					: '')
				+ '<li class="' + (!_meta.can_reply ? 'dsq-list-first' : '') + '" id="dsq-more-el-' + post_id + '"><a id="dsq-more-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'more\'); return false">More <small>&#9660;</small></a></li>'
				+ (Dsq.jsonData.forum.use_media
					? '<li id="dsq-media-el-' + post_id +'" style="display:none"><a id="dsq-media-link-' + post_id + '" href="#" onclick="Dsq.Post.showMenu(this, ' + post_id + ', \'media\'); return false">Use Media <small>&#9660;</small></a></li>'
					: '')
				+ '</ul>'
				+ '<div id="dsq-reply-bar-' + post_id + '" class="dsq-reply-bar" style="display:none"> \
						<div id="dsq-reply-bar-items-' + post_id + '" class="dsq-reply-bar-items"> \
						</div> \
						<div id="dsq-reply-bar-auth-' + post_id + '" class="dsq-reply-bar-auth"> \
							 \
								 \
								 	<a href="#" class="dsq-help dsq-reply-req-opt" title="You are commenting as a Guest. You may choose to log into an existing DISQUS Profile, your Facebook, Twitter or OpenID account to comment on Andrew McAfee&#39;s Blog" 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:10392736" onclick="Dsq.Popup.login(); return false">Login</a> \
								 \
								&nbsp;or&nbsp; \
									<img src="http://media.disqus.com/images/twitter-signin-icon.png" alt="" /> \
									<a href="#" onclick="Dsq.Twitter.startTwitterConnect(); return false">Sign-in</a> \
								 \
								&nbsp;or&nbsp; \
									 <img src="http://media.disqus.com/images/openid-login-icon.png" alt="" /> \
									 <a href="#" onclick="Dsq.OpenID.requestURL(); return false">OpenID</a> \
								 \
							 \
						</div> \
					</div> \
					<div id="dsq-reply-' + post_id + '"></div> \
			</div> \
		';
	};

	//
	// Iframes
	//

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

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

		var default_params = {
			// TODO: These should be moved to Dsq.jsonData.
			'f'				: 'andrewmcafee',
			't'				: 'it8217s_like_this8230',
			// 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/andrewmcafee/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/andrewmcafee/it8217s_like_this8230/post_report/', {'post_id': id});
			Dsq.Popup.popModal('Thank you. This comment has been flagged for moderator attention.', 'Successfully flagged');
			Dsq.Utils.deleteNode(Dsq.$('dsq-post-report-' + id));
		} else {
			var title = Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT;
			var message = Dsq.Strings.ARE_YOU_SURE_YOU_WOULD_LIKE_TO_REPORT_THIS_COMMENT_TO_A_MODERATOR + '? \
			<br /><br /> \
			<button onclick="Dsq.Popup._closePopup(null, true)"><strong>' + Dsq.Strings.NO + '</strong>, ' + Dsq.Strings.NEVER_MIND + '</button>&nbsp;&nbsp;&nbsp;<button onclick="Dsq.Post.report(' + id + ', true);"><strong>' + Dsq.Strings.YES + '</strong>, ' + Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT + '</button><br /><br />'
			+ Dsq.Strings.THIS_WILL_FLAG_COMMENTS_FOR_MODERATORS_TO_TAKE_ACTION + '. \
			';

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



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

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

};
// Dsq.Post


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

	
	this.adminIsOn = false;

	
	
	

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

	return obj;
}();

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

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

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

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

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

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

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

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

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

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

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

	this.check = function() {
		if (!ongoing_request && Dsq.jsonData.realtime_enabled) {
			if (prev_script) {
				prev_script.parentNode.removeChild(prev_script);
			}
			ongoing_request = true;
			prev_script = Dsq.Utils.execScript('http://disqus.com/forums/10392736/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/andrewmcafee/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/andrewmcafee/queueurl.js');
	};
};

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

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

	return obj;
}();


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









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

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

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

})();

Dsq.container.className = "clearfix";
Dsq.container.innerHTML = ' \
<ul id="dsq-comments">\
	 <li id="dsq-comment-5642593">\
	 <div id="dsq-comment-header-5642593" class="dsq-comment-header">\
	 <cite id="dsq-cite-5642593" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5642593">anthonymckinney</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5642593" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5642593" class="dsq-comment-message">I think the analogy works well.   An additional point about the factory - although you might buy the same "process factory" you want to find the best location for your intended customers (and partners).   The more who can discover what you are building,  and try your product, the better the chance of beating the competition.  You may also find that your customers and partners can easily recommend their own customers if they can easily access your factory!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5623669">\
	 <div id="dsq-comment-header-5623669" class="dsq-comment-header">\
	 <cite id="dsq-cite-5623669" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5623669" href="http://www.lagan.com" target="_blank" rel="nofollow">Mike Kimber</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5623669" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5623669" class="dsq-comment-message">This blog post seems to support your argument (to me nayway)!:<br><br><a href="http://news.cnet.com/8301-13505_3-10151545-16.html?part=rss&subj=news&tag=2547-1_3-0-20" rel="nofollow">http://news.cnet.com/8301-13505_3-10151545-16.h...</a><br><br>i.e. its not the Google servlet engine that makes Google its Google.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5569631">\
	 <div id="dsq-comment-header-5569631" class="dsq-comment-header">\
	 <cite id="dsq-cite-5569631" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5569631">Dan Pontefract</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5569631" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5569631" class="dsq-comment-message">Although in pure theoretical terms I agree with your thesis, in reality it\'s a different story.<br><br>The theory of your claim can and does work extremely well when various pieces of software can be collected, customized and centralized to specifically dictate the unique business process requirements of a company. Those pieces, cobbled together, creates the process factory for the company in question.<br><br>Eg. a learning management system that actually acts as a social learning engine, not as an archaic course management tool, combined with a proper talent management/succession planning tool, combined with a sales cycle forecasting/prospecting/tracking tool, combined with a robust budgeting & analysis application, combined with &lt;insert sales, human, asset and/or technology tool&gt; etc etc etc<br><br>In my opinion, this is extremely difficult to achieve with an ERP.<br><br>Enterprise software development companies such as SAP et al certainly try to bring this perceived panacea to fruition, but the reality is that it often takes loads of customization (software development customization, not necessarily business process customization) to achieve the desired end state.<br><br>This is where the hay falls off the wagon as the more one customizes an ERP, the less likely it is --- ironically I might add --- to achieve the desired customized business process end state. Customizing the ERP requires gobs of money, and when an upgrade presents itself downstream to \'improve\' the ERP, it\'s likely to involve even more dollars in order to retrofit the upgrade into the older and ultimately customized ERP system currently in place.<br><br>I guess my ultimate argument is that the ERP system is in fact inflexible, and although configurable, it is at times much easier to purchase separate software pieces to achieve your desired business process end state. It allows for easier customization and upgrades over time.<br><br>Whatever happened with your argument about the mash-up anyway? Isn\'t this the basis for Enterprise 2.0???</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5509610">\
	 <div id="dsq-comment-header-5509610" class="dsq-comment-header">\
	 <cite id="dsq-cite-5509610" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5509610" href="http://adhirmattu.blogspot.com/" target="_blank" rel="nofollow">Adhir Mattu</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5509610" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5509610" class="dsq-comment-message">Dear Andrew,<br><br>Things are bit more complex in the real world and BTW I saw your interview on the Charlie Show.<br><br>Your analogy makes it sound that it is very easy to configure business processes in ERP systems like SAP. Matter of the fact is that, ERP systems are generally so rigid and fixed, that changing standard business processes is a nightmare and these changes often result in the "dreaded" customizations which companies find very hard to manage and maintain. <br>Hence, currently ERP customers mostly use standard business processes that provides very limited competitive differentiation.<br><br>SAPs of the world need to go a component based model and leave the designing of the business processes (using these components to the innovative minds of the digital factory ). This will enable the smarter companies to get competitive differentiation by being able to configure better and flexible processes.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488070">\
	 <div id="dsq-comment-header-5488070" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488070" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488070">Kris G</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488070" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488070" class="dsq-comment-message">Dear Andrew<br><br>I have to respectfully disagree. In reality, use of enterprise software of the likes sold by SAP or Oracle has not been significant beyond double-entry book-keeping and logistics. And we all know how wasteful (in the view of Japanese production concepts) double-entry book keeping is.<br><br>Better research is needed to quantitatively tie firm competitive advantage to its innovative use of enterprise IT. It is difficult to see the correlation if Toyota can run the most competitive auto company in the world with hand signals and ad hoc changes on the manufacturing world, and GM, a poster child of a idiocracy   with umpteen enterprise systems and yes, SAP.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488069">\
	 <div id="dsq-comment-header-5488069" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488069" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488069">Ian Bird</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488069" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488069" class="dsq-comment-message">This is a very helpful idea and it stands up to my limited experience. <br><br>I think you could also use this approach to integrate a set of cooperative strategies that are also (often) in play when the "process factory" is put to work within a given enterprise. <br><br>This could be particularly helpful for those of us who are trying to determine how competitive and cooperative paradigms necessarily intermingle in today\'s world.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488068">\
	 <div id="dsq-comment-header-5488068" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488068" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488068" href="http://elliotross.wordpress.com" target="_blank" rel="nofollow">Elliot Ross</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488068" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488068" class="dsq-comment-message">I think it is a fine analogy <br><br>I would even add one extension. As you said, the process is important. And how you mange the process.<br><br>Your quote; So even if you and I buy the same basic factory from [Leo], we`re going to do very different things with it. <br><br>I would argue that even if you **were** doing the same thing with it, (ie direct competitors making a widget) The management and processes are the variables, not the factory.<br><br>His sales reps outsell yours 5 to 1<br><br>His aged inventory is 1/3 of yours<br><br>His defect rate is almost zero while yours is 12%<br><br>His first time accurate and on time delivery is 97%, yours is 40<br><br>The factory is the commodity in this analogy - but how you **manage** that commodity is where competitive advantage lies<br><br>And ditto for technology -</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488067">\
	 <div id="dsq-comment-header-5488067" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488067" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488067" href="http://andrew-boyd.com" target="_blank" rel="nofollow">Andrew</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488067" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488067" class="dsq-comment-message">The challenge with using a product-based analogy is that it does not account for the impact and importance of design on competitive advantage -- i.e. you may have better designers, but not necessarily better processes. <br><br>However, I do believe that the source of competitive advantage is not in the features and functions of the software, but in the ability to configure/customize the software to unique business processes.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488066">\
	 <div id="dsq-comment-header-5488066" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488066" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488066">SamW</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488066" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488066" class="dsq-comment-message">I like the analogy as far as it goes.  It leads me to this question though: Once you and your competitor have made the identical investment in IT, what then provides the competitive differentiation?  How do your investments to date and your future investments create the differentiation in how you employ the \'process factory\'?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488065">\
	 <div id="dsq-comment-header-5488065" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488065" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488065">Paolo Galli</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488065" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488065" class="dsq-comment-message">I think it works fine!<br>I\'ve tried to think about another analogy, car race for example, where every car-maker have the same tech, but one car wins and the other loose, but yours works better.<br>I see in my job (ICT Management Consultant), many customers use ICT very well.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488063">\
	 <div id="dsq-comment-header-5488063" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488063" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488063" href="http://andrew-boyd.com" target="_blank" rel="nofollow">Andrew</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488063" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488063" class="dsq-comment-message">The challenge with using a product-based analogy is that it does not account for the impact and importance of design on competitive advantage -- i.e. you may have better designers, but not necessarily better processes. <br><br>However, I do believe that the source of competitive advantage is not in the features and functions of the software, but in the ability to configure/customize the software to unique business processes.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488062">\
	 <div id="dsq-comment-header-5488062" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488062" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488062">Edward Murrison</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488062" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488062" class="dsq-comment-message">Hello Andrew,<br>Intuitively your analogy sounds correct but Saunders\' conclusions in your preveious post suggest that intense ITification in a given industry leads to a reduced number of competitors. <br>It is of course possible that the reduction is due to globalization which is itself a side-effect of the technology world but I think it is still too early to tell. Did Saunders have any theories on how things will look in say 10 years time?<br>Edward</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488061">\
	 <div id="dsq-comment-header-5488061" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488061" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488061">Garrett Strzok</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488061" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488061" class="dsq-comment-message">Andrew,<br>I like your analogy. I was recently pondering a similar issue with the use of enterprise software. So if you are looking for additional meat and potatoes to compliment your hardware analogy, I submit that given identical opportunities with enterprise software, the differences in success that may be observed a given time later may have more to do with each institutions ability to communicate the individual and organizational benefits of using a well thought out strategy, and then implementing it. In short, given equal tools, the one that can motivate their work forces understanding and smart use of the tools will likely see greater success more quickly.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488060">\
	 <div id="dsq-comment-header-5488060" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488060" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488060" href="http://antarjaal.blogspot.com" target="_blank" rel="nofollow">Prakash Dogra</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488060" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488060" class="dsq-comment-message">Yes, I like this analogy-because it encapsulates the essence of the uniqueness of the enterprise (or persons within the enterprise) where - any enterprise can buy the same product from a particular vendor.<br><br>It hold good if I test this analogy with any other product / service in  - I used the example of usage of a particular PDA model, which both me and my friend bought and yet have different levels of satisfaction from it based on our unique usage patterns and business usage.<br><br>The only element i thought missing is that - what about the expertise of the provider of product? How is that being harnessed and innovated upon by the buyer? The ability to tap into the suppliers capabilities to harness global knowledgebase and build upon it is also uniqueness of the buyer. And that is how while the one buyer distinguishes itself from the other buyer of the same product.<br><br>Investing in IT should include both external /visible spend to acquire product/service plus investment in re-engineering systems to create business rules and processes that will leverage the capabilities of the product. That is how unique distinction can be made even when using a common product.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488059">\
	 <div id="dsq-comment-header-5488059" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488059" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488059">Alex Godden</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488059" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488059" class="dsq-comment-message">I think that there are two interesting sides to this analogy. <br><br>The first is the Â“weÂ’re inventorsÂ” part. The idea here is that even though you have the same factories, you may invent different types of lawnmower to build and keep your competitive advantage through better innovations, IP protection for your designs etc. Having access to the same factory canÂ’t level the playing field here.<br>Similarly, companies with the same software are almost certainly not trying to use it to solve exactly the same problem. For example, CRM software is widely available, so you could say that two companies are able to provide exactly the same customer service experience (as they presumably have access to the same pool of employees Â– the other Â“raw materialÂ” here). However, both companies are unlikely to have the same approach to delivering customer service: one might be following a strategy of  customer segmentation to over-serve profitable customers and encourage unprofitable ones to leave; while the other wants to improve its mass appeal by servicing as many customers as they can as efficiently as possible. Both companies can use the same software to support their strategy, but as long as their strategies are different there is scope for differentiation and competition.<br><br>The second part is the Â“process factoriesÂ” part of the analogy: the concept that software is a way of building and replicating business processes. This is, I feel, still an appropriate analogy but can also be used against your argument that IT does not level the playing field: specifically in cases where the business software is so prescriptive that the business processes are defined by it and therefore identical.<br>To illustrate this: say the factory is identical down to every last detail, including the shape of the moulds used to make the plastic lawnmower body and the templates used to cut the blades. In that situation, the lawnmowers produced would be identical. You could perhaps pull ahead in productivity by innovating your workers shift patterns, incentive schemes or the management structure (you can always do something better) but the resulting products would not differ.<br>Customized IT solutions for big companies would not follow this pattern, but enterprise IT is becoming more affordable and useable for smaller companies precisely by becoming more Â“off-the-shelfÂ”. Two start-ups using a basic <a href="http://salesforce.com" rel="nofollow">salesforce.com</a> product to handle online customer enquiries are likely to have identical processes, and often near-identical outputs.<br><br>So I think the analogy holds, but there is more scope to explore exactly how you are defining Â“identicalÂ” factories in relation to the potential for customization of the software.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488058">\
	 <div id="dsq-comment-header-5488058" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488058" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488058" href="http://twitter.com/mecredy" target="_blank" rel="nofollow">Mecredy</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488058" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488058" class="dsq-comment-message">Andy - maybe I am a bit slow tnite.  The factor that I think is missing is that the scarce resource that is making the difference is the people that implement the software and that use the software.  Wouldnt it be like saying the competetive difference between hammers makes houses of various qualities?  What point am I missing.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488057">\
	 <div id="dsq-comment-header-5488057" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488057" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488057" href="http://www.supplychainer.com" target="_blank" rel="nofollow">Ehsan Ehsani</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488057" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488057" class="dsq-comment-message">Dear Andrew, <br><br>I personally liked your example in the interview with Charlie Rose and I think itÂ’s a powerful analogy for educating public on how the enterprise software is like. However, regarding your question about whether it holds up or not, I would say I prefer to use the analogy of process store or process shop rather than process factory. <br><br>First, I try to give some comments and then explain my reasons, taking SAP as an example of enterprise software and a PDA as a product. <br><br>-Your comment Â“So even if you and I buy the same basic factory from [Leo], we`re going to do very different things with it. If I do smarter things than you, I will get ahead over time.Â” Assumes that getting ahead over time is a function of smart actions. That means getting ahead depends on the actions of the buyers. However, in the software world, there are sometimes external elements such as the power of location. Two years ago, I was working on a global transformation project with a Finnish company. We had to wait for one year because SAP hadnÂ’t had any Finnish version at the time. A German company which has bought the same solution might be ahead of the Finnish one not because of smartness but because of the learning advantage which it has had (You see: ItÂ’s like a Chinese having a PDA with English manual, in this case the source of advantage is being able to access complementary info.). <br><br>-Typically if you are an inventor and want to turn out a product from a factory, you contact them, give them your product specification and they produce a sample for you. If you donÂ’t like the sample, you make some comments and then they will modify it based on your comments. However, if we look at the enterprise software world (as I mentioned, letÂ’s take SAP as an example), itÂ’s not SAP producing the business processes which companies want: There are other entities within the enterprise software ecosystem which are normally doing this (companies like Accenture, Deloitte, etc.). SAP in this case has the role of a selling agent. <br>-An inventor of a PDA knows what he/she wants; that means that there is no need for another person here. He/she talks to the factory people and communicates the product specification in his/her mind. Therefore, after receiving the produced sample, itÂ’s possible to compare the product functions with the product spec. and see if itÂ’s really the product which was ordered. In the case of enterprise software many companies donÂ’t know what they want and they need help for evaluating the software capabilities both for accepting it and using it. <br>Now letÂ’s go to the Â“Process-StoreÂ” analogy: Imagine that you want to buy a PDA. You donÂ’t know what is out there, so you might go to a store or different stores to see the models. You might also pay for some magazines which have PDA reviews or ask your friends what PDA they have and if they like it. <br><br>PDA is not very cheap, so you might accept payment for buying such magazines because they evaluators who have written the reviews know many models of PDAs (they are expected to &#61514;).   <br><br>After you spend some time and effort doing investigation, you buy the product but you notice that it doesnÂ’t do all the things you want: It requires some additional memory. You spent some more time to see which brand is goodÂ…..Ok, I think you got the idea: <br><br>What I wanted to highlight is the process of decision making, the external entities which influence that and the time and money which is being spent improving the decision, use of it, etc. (I am not sure about my analogy either as I just wrote it as a comment, appreciate the feedback&#61514;<br><br>Best</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488056">\
	 <div id="dsq-comment-header-5488056" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488056" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488056" href="http://www.helmsmanship.co.uk" target="_blank" rel="nofollow">Tess Harris</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488056" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488056" class="dsq-comment-message">Surely, your analogy echoes what Michael Treacy and Fred Wiersema wrote about in HBR in 1992, ie that "Operational Excellence" (aka process) can be a differential value-add, if you don\'t have superior "customer intimacy" and "product leadership" - Treacy & Wiersema\'s other added value disciplines.<br><br>Plus ca change...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488055">\
	 <div id="dsq-comment-header-5488055" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488055" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488055" href="http://www.anshublog.com" target="_blank" rel="nofollow">Anshu</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488055" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488055" class="dsq-comment-message">I find the analogy interesting but I am not clear on what it conveys. Are you suggesting that two companies can differentiate in spite of having identical IT systems? And that such differentiation comes from process innovation enabled by flexible systems?<br><br>But isn\'t that true for pretty much every investment a business can make. For instance, you and buy identical billboards or TV slots for advertising and then differentiate on the ad content. Or you and buy identical taxi cabs but offer different prices. Is this innovation enabled by billboards and taxi cabs? Or is innovation in these cases orthogonal to billboards, cars and IT?<br><br>Finally, I can differentiate around the speed with which I adopt the latest IT systems and how well I execute the project etc. So, the premise that two competitors have identical systems (in place) because they are talking to the same vendor is not really true.<br><br>And frankly, this is where the newer models of computing can provide and edge to a competitor. Smaller capital expenditures, faster implementations and more agile systems.<br><br>(Disclaimer: The opinions expressed here are entirely personal.)</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488054">\
	 <div id="dsq-comment-header-5488054" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488054" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488054">John Stafford</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488054" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488054" class="dsq-comment-message">I like the analogy.<br><br>However, I think a slightly better one is the construction industry.<br><br>Everyone has access to the exact same suppliers -- Home Depot, local lumberyards. Yet houses end up radically different in terms of cost and quality.<br><br>Some builders specialize in speed and repeatability, others focus on quality. Some focus on new construction, some on rehabs.<br><br>IT can either be used in a generic fashion (single install of industry standards) to get generic results. Or it can be used in a unique fashion (combined with other products, especially legacy or custom development) to get higher or lower results.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488053">\
	 <div id="dsq-comment-header-5488053" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488053" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488053" href="http://www.linkedin.com/in/albredenberg" target="_blank" rel="nofollow">Al Bredenberg</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488053" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488053" class="dsq-comment-message">Yes, I do think this is a promising analogy.<br><br>Somehow the exchange with Charlie Rose here makes me think of the way CRM was being touted during the mid- to late-1990s as a panacea for sales and marketing problems. Many companies were disappointed with the results, but probably more due to naivety and unrealistic expectations than to any essential deficiency in the technologies or the idea of customer relationship management.<br><br>Organizational effectiveness doesn\'t automatically improve merely from the application of technologies, because those technologies are intimately enmeshed with the people and processes in the organization. So putting providing better data and access for your call center, for example, won\'t improve your sales and customer service if your personnel are poorly trained or if the company at its core just doesn\'t really care about its customers.<br><br>One aspect of your analogy that I\'m a little uncertain of is that it seems to imply that business processes are a result of the technology, whereas I wonder if that\'s an oversimplification. I tend to think of technology, processes, and people in more of a symbiotic relationship rather than saying that one arises from the other.<br><br>Nevertheless, I do like the factory analogy and wonder if it might benefit from some refining and further articulation.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488052">\
	 <div id="dsq-comment-header-5488052" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488052" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488052" href="http://manticoreblog.wordpress.com" target="_blank" rel="nofollow">Simon G</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488052" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488052" class="dsq-comment-message">A v useful analogy which I will use as well</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488051">\
	 <div id="dsq-comment-header-5488051" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488051" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488051" href="http://www.thesearchengineconnection.com" target="_blank" rel="nofollow">Terry Brown</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488051" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488051" class="dsq-comment-message">That is a very interesting way of looking at competition.  I feel it is impossible for two companies to have the exact marketing techniques.  Yeah everyone has access to the same tools but are they being marketing in the same way?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488050">\
	 <div id="dsq-comment-header-5488050" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488050" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488050" href="http://bhc3.wordpress.com/" target="_blank" rel="nofollow">Hutch Carpenter</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488050" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488050" class="dsq-comment-message">Andrew - I do like the analogy. Here\'s why. Assume you want to enter the cell phone business. You could hand-manufacture them. Maybe there is some old, used manufacturing equipment available, and you use that.<br><br>Meanwhile, your competitors are using high-volume, technologically advanced manufacturing facilities. They\'re killing you in term of (1) cost, (2) production volumes, and (3) ability to change to meet new feature innovations.<br><br>By not utilizing the best process technology available, your little cell phone start-up falls further and further behind.<br><br>I look at ESSP in a similar fashion. Employees\' contributions and ability to find a richer amount of information have historically been limited by technology that had a narrow range of accessibility. Companies like Cisco, which are moving hard into better tapping the fuller range of employee knowledge, ideas and energy, are going to be better positioned than their competitors who continue to work in the older, traditional ways.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488049">\
	 <div id="dsq-comment-header-5488049" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488049" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488049">Kamal</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488049" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488049" class="dsq-comment-message">I agree with the analogy. To give you context, my company bought and heavily customised an enterprise software product from a vendor. The core software is not customised and the IP belongs to the vendor, but the custom business rules, all the logic and calculations in the application layer are in fact our IP and protected by confidentiality agreements. Hence, our main competitor who has just entered into an agreement with the vendor cannot have access to this valuable information, which gives us an inherently protected commodity if you like. Thus, the business rules can be compared I think to business processes that you refer to, which are unique to a company.<br><br>I don\'t know however if this is how other enterprise applications work whereby the business specific rules and logic - the customised element, can sit on top of the core product and be protected from the competition. I wonder if any other readers can shed light on this?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488048">\
	 <div id="dsq-comment-header-5488048" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488048" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488048" href="http://lehawes.wordpress.com" target="_blank" rel="nofollow">Larry Hawes</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488048" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488048" class="dsq-comment-message">Andrew,<br><br>Your analogy is both sound and interesting.  Too many view enterprise software as a "solution".  That term implies that what is being purchased should be deployed "as is" in order to solve a specific business challenge.  In fact, most instances of enterprise software are tools (or suites of tools) that are flexible enough to help best any number of organization-specific challenges, depending on how the software is configured prior to deployment.<br><br>A common complaint provides good evidence of the misunderstood nature of enterprise software.  Many organizations complain that ERP Product X forces them to change their business processes to fit the software.  What they don\'t realize, of course, is that they should be doing the opposite -- changing the out-of-the-box software to meet their specific needs.  It is by doing so that competitive differentiation can be built, especially in the operations realm.<br><br>Thanks for a great post and I hope your analogy gains traction!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488047">\
	 <div id="dsq-comment-header-5488047" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488047" class="dsq-comment-cite">\
	 <a id="dsq-author-user-5488047" href="http://www.10thmonth.net/detrius" target="_blank" rel="nofollow">Dermot</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488047" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488047" class="dsq-comment-message">Andrew<br><br>I like it. As a colleague said, in financial services IT is the factory floor. Similar to your analogy and one I use with my own students. <br><br>Dermot</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-5488046">\
	 <div id="dsq-comment-header-5488046" class="dsq-comment-header">\
	 <cite id="dsq-cite-5488046" class="dsq-comment-cite">\
	 <span id="dsq-author-user-5488046">Edward Murrison</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-5488046" class="dsq-comment-body">\
	 <div id="dsq-comment-message-5488046" class="dsq-comment-message">Hello Andrew,<br>intuitively your analogy sounds plausible, however according to Saunders\' conclusions in your previous post, competition in a given industry is ultimately stifled by intense IT-ification which implies the opposite. <br>An alternative explanation could be that the reduction in competitors is a result of globalization which is a by-product of IT-ification itself.<br><br>Edward</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=andrewmcafee&t=it8217s_like_this8230&to_redirect=' + encodeURIComponent(window.location) + '&ifrs=' + encodeURIComponent(disqus_iframe_css);
			}
		}
	}

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

	




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');
}

})();




