




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

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

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

var Dsq = new function() {
	this.container = document.getElementById('dsq-content');
	this.jsonData = {"reactions": [{"body": "<p>Ok so I just realized how much I miss having a custom tone for text messages&#8230; I know the standard one is very clean and fits in with the whole theme of the phone very well but with all the customization options on the Pre I can't imagine why the only thing you can select for are phone calls.</p>\n<p>I'm pretty sure if people are vocal enough about such an easy change then Palm will respond fairly quickly.</p>\n<p><a href=\"http://www.palmpreforum.org\" rel=\"nofollow\">http://www.palmpreforum.org</a>  This is all about the plam pre</p>", "author_name": "coolfx35", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169506, "get_service_url": "http://wordpress.org/", "title": "By: coolfx35", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-867483", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>The Pre is just as much a me-too copy of the iPhone as the iPhone is a me-too copy of Windows Mobile.</p>\n<p>Think they really are the same?  Try running Pandora while navigating on the iPhone.</p>\n<p>Or try going back to the contact you last worked with after you looked something up on the web.</p>\n<p>These aren't exotic examples of what you might expect to do on a PDA.</p>\n<p>I'm not trying to knock the iPhone. I think it is a great phone. But Apple has some catching up to do with WebOS. The notification feature of the iPhone is not a very good substitute for running multiple apps concurrently.</p>\n<p>All of which is to say: The pre is no me-too phone.</p>", "author_name": "remon", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169441, "get_service_url": "http://wordpress.org/", "title": "By: remon", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-867404", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>Absolutely right! It is a logical fallacy that an initial lack of apps relative to the competition means the phone won't succeed, and the iPhone is the best proof of that.</p>\n<p>But it is very important that lots of apps get written for the new machine. And one of the factors that determines how many apps are written for it is how easy it is to develop for it. I think that javascript/html/css is a pretty smart choice. Objective C has a steep learning curve, and the number of apps that crash on startup is a testament to that fact.</p>", "author_name": "remon", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169501, "get_service_url": "http://wordpress.org/", "title": "By: remon", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-867399", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>The argument that Palm is doomed because of the size of the iPhone market is belied by Apple's history. 10 years ago Apple was in the same position as Palm. Windows had the attention of developers and it was the main argument against Apple.</p>", "author_name": "Sivan", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169482, "get_service_url": "http://wordpress.org/", "title": "By: Sivan", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-867174", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>Let me first state that I think that the Palm WebOS is extremely innovative and creative.  But to compare the Pre to the iPhone is like comparing the success of Tiger Woods to a first year college player.  The problem for Palm that they will likely never overcome is that apple and windows mobile has the attention of the development community and they will simply never catch up from an apps standpoint, which is what people seem to want these days.  Let's see what happens, but I don't think it looks good for the Pre or any future WebOS phone.</p>", "author_name": "mbldev", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169443, "get_service_url": "http://wordpress.org/", "title": "By: mbldev", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-867169", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>Ok first of all - I see all this talk about 'getting lost in the noise'. Well welcome to the real goddamn world. You can't just build something and expect it to do well. Look at Facebook apps. Do most of them gain such a large distribution just because they are great quality? NO. A tremendous amount of resources are put into distribution. yes, on Facebook distribution is more of a mathematical formula as opposed to in the iPhone world - where word of mouth, marketing and publicity play a bigger role. There are many things one must do. One key area that is lacking is marketing for iPhone apps and that's really what developers need to focus on building partnerships for. </p>\n<p>Remember youtube videos and the techcrunch article where the guy talked about how he made youtube videos go viral and that requires a lot of people posting links on forums and what not to reach a critical mass? So yes, social media and WOM and all that can help spread the word of a product thats truly <br />remarkable (Seth Godin talks a lot about this) but you need to invest money in distribution - and for iphone thats more of an art compared to Facebook which is more of a science. </p>\n<p>Also what about platforms such as openfeint within iPhone? that might help eh? Palm will never have the community iPhone will.</p>", "author_name": "Azam Khan", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169430, "get_service_url": "http://wordpress.org/", "title": "By: Azam Khan", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-865425", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "Has the Palm Pre already beaten the iPhone? http://bit.ly/3PbCTO", "author_name": "rachounette", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 1487188, "get_service_url": "http://twitter.com/", "title": "Has the Palm Pre already beaten the iPhone? http://bit.ly/3PbCTO", "url": "http://twitter.com/rachounette/status/2235738416", "source": "ubervu", "get_service_name": "twitter", "avatar_url": "http://s3.amazonaws.com/twitter_production/profile_images/180965832/rachel_normal.jpg", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "RT @cenzopenza: Developers flock to Palm Pre for ease of development on WebOS: http://bit.ly/U5gWK", "author_name": "namtran", "source_url": "http://www.backtype.com/search?q=http%3A//venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 1487189, "get_service_url": "http://twitter.com/", "title": "", "url": "http://twitter.com/namtran/statuses/2213664912", "source": "backtype", "get_service_name": "twitter", "avatar_url": "http://s3.amazonaws.com/twitter_production/profile_images/149037967/nam-cropped_normal.jpg", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "<p>Matt, well researched article that presents a smarting balance of the issues at bay&#8230;for $PALM, not having a plethora of apps on their marketplace is more an opportunity than an issue!</p>\n<p>thanks again for the smarting read!</p>", "author_name": "Jim Goodlett", "source_url": "http://www.ubervu.com/conversations/venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 16169496, "get_service_url": "http://wordpress.org/", "title": "By: Jim Goodlett", "url": "http://digital.venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/comment-page-1/#comment-863453", "source": "ubervu", "get_service_name": "wordpress", "avatar_url": "http://media.disqus.com/images/reactions/services/wordpress_128.png", "author_url": "", "date_created": "6 months ago", "retweets": []}, {"body": "RT @venturebeat Has the Palm Pre already beaten the iPhone?.. http://tinyurl.com/kuktzt", "author_name": "briangarcia", "source_url": "http://www.backtype.com/search?q=http%3A//venturebeat.com/2009/06/12/has-the-palm-pre-already-beaten-the-iphone/", "id": 1487190, "get_service_url": "http://twitter.com/", "title": "", "url": "http://twitter.com/briangarcia/statuses/2195142568", "source": "backtype", "get_service_name": "twitter", "avatar_url": "http://s3.amazonaws.com/twitter_production/profile_images/53203365/brian80x80_normal.jpg", "author_url": "", "date_created": "6 months ago", "retweets": []}], "has_more_reactions": true, "users": {"ef1d48144761a6af8cce89394fd6f1d5": {"username": "Derek", "tumblr": "", "display_name": "Derek", "url": "http://disqus.com/guest/ef1d48144761a6af8cce89394fd6f1d5/", "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": ""}, "facebook-1463444015": {"username": "facebook-1463444015", "tumblr": "", "display_name": "Chris Spencer", "url": "http://disqus.com/facebook-1463444015/", "registered": true, "linkedin": "", "blog": "http://www.facebook.com/people/Chris-Spencer/1463444015", "remote_domain": 1, "points": 1, "facebook": "http://www.facebook.com/people/Chris-Spencer/1463444015", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": "Facebook"}, "79de7926f331c3c76b0be2a6d8969644": {"username": "SU", "tumblr": "", "display_name": "SU", "url": "http://disqus.com/guest/79de7926f331c3c76b0be2a6d8969644/", "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": ""}, "facebook-1268568911": {"username": "facebook-1268568911", "tumblr": "", "display_name": "Vance Souders", "url": "http://disqus.com/facebook-1268568911/", "registered": true, "linkedin": "", "blog": "http://www.facebook.com/people/Vance-Souders/1268568911", "remote_domain": 1, "points": 1, "facebook": "http://www.facebook.com/people/Vance-Souders/1268568911", "avatar": "http://media.disqus.com/uploads/users/38/2742/avatar92.jpg", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": "Facebook"}, "0804af8b24f34e52f09f87adb25c68cd": {"username": "George Zachary", "tumblr": "", "display_name": "George Zachary", "url": "http://disqus.com/guest/0804af8b24f34e52f09f87adb25c68cd/", "registered": false, "linkedin": "", "blog": "http://www.crv.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": ""}, "mbldev": {"username": "mbldev", "tumblr": "", "display_name": "mbldev", "url": "http://disqus.com/mbldev/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "4cad269d3e027e42de57ae268e3d3bbb": {"username": "Had_to", "tumblr": "", "display_name": "Had_to", "url": "http://disqus.com/guest/4cad269d3e027e42de57ae268e3d3bbb/", "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": ""}, "a154387406389982961fdd479ec1c4ce": {"username": "slappy", "tumblr": "", "display_name": "slappy", "url": "http://disqus.com/guest/a154387406389982961fdd479ec1c4ce/", "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": ""}, "facebook-3623416": {"username": "facebook-3623416", "tumblr": "", "display_name": "Azam Khan", "url": "http://disqus.com/facebook-3623416/", "registered": true, "linkedin": "", "blog": "http://www.facebook.com/people/Azam-Khan/3623416", "remote_domain": 1, "points": 1, "facebook": "http://www.facebook.com/people/Azam-Khan/3623416", "avatar": "http://media.disqus.com/uploads/users/19/591/avatar92.jpg", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": "Facebook"}, "thegeniusfiles": {"username": "thegeniusfiles", "tumblr": "", "display_name": "thegeniusfiles", "url": "http://disqus.com/thegeniusfiles/", "registered": true, "linkedin": "in/thegeniusfiles", "blog": "http://www.thegeniusfiles.com", "remote_domain": null, "points": 5, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/14/3170/avatar92.jpg", "delicious": "www.thegeniusfiles.com", "is_remote": false, "verified": true, "flickr": "thegeniusfiles", "twitter": "", "remote_domain_name": ""}, "twitter-27362073": {"username": "twitter-27362073", "tumblr": "", "display_name": "Johann D\u00f6wa", "url": "http://disqus.com/twitter-27362073/", "registered": true, "linkedin": "", "blog": "http://twitter.com/maniacdev", "remote_domain": 2, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/37/4718/avatar92.jpg", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "http://twitter.com/maniacdev", "remote_domain_name": "Twitter"}, "91ee2488f04bd88362929120fc6939d8": {"username": "Vance Souders", "tumblr": "", "display_name": "Vance Souders", "url": "http://disqus.com/guest/91ee2488f04bd88362929120fc6939d8/", "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": ""}, "chleoku": {"username": "chleoku", "tumblr": "", "display_name": "chleoku", "url": "http://disqus.com/chleoku/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "benjitek": {"username": "benjitek", "tumblr": "", "display_name": "benjitek", "url": "http://disqus.com/benjitek/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "1cf1ee771fc280b59d1923126f1900d5": {"username": "jd", "tumblr": "", "display_name": "jd", "url": "http://disqus.com/guest/1cf1ee771fc280b59d1923126f1900d5/", "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": ""}, "64917ee22bc65debe7abb1a70cb14e99": {"username": "Danstl", "tumblr": "", "display_name": "Danstl", "url": "http://disqus.com/guest/64917ee22bc65debe7abb1a70cb14e99/", "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": ""}, "c7306b4d8907a69957585d1fce610c65": {"username": "igniguy", "tumblr": "", "display_name": "igniguy", "url": "http://disqus.com/guest/c7306b4d8907a69957585d1fce610c65/", "registered": false, "linkedin": "", "blog": "http://www.ignimedia.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": ""}, "hypermark": {"username": "hypermark", "tumblr": "", "display_name": "hypermark", "url": "http://disqus.com/hypermark/", "registered": true, "linkedin": "in/marksigal", "blog": "http://www.thenetworkgarden.com", "remote_domain": null, "points": 20, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/19461/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "coolfx35": {"username": "coolfx35", "tumblr": "", "display_name": "coolfx35", "url": "http://disqus.com/coolfx35/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 3, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "c06efc73dfbcfba7d74aa32df46b5586": {"username": "HK", "tumblr": "", "display_name": "HK", "url": "http://disqus.com/guest/c06efc73dfbcfba7d74aa32df46b5586/", "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": ""}, "facebook-557111035": {"username": "facebook-557111035", "tumblr": "", "display_name": "Jim Goodlett", "url": "http://disqus.com/facebook-557111035/", "registered": true, "linkedin": "", "blog": "http://www.facebook.com/people/Jim-Goodlett/557111035", "remote_domain": 1, "points": 1, "facebook": "http://www.facebook.com/people/Jim-Goodlett/557111035", "avatar": "http://media.disqus.com/uploads/users/38/9282/avatar92.jpg", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": "Facebook"}, "7fd64fbdca43b3e0f3263df184167b30": {"username": "Ryan", "tumblr": "", "display_name": "Ryan", "url": "http://disqus.com/guest/7fd64fbdca43b3e0f3263df184167b30/", "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": ""}, "b1abf4fdbba3945418e4e58ec53dc07d": {"username": "Chris", "tumblr": "", "display_name": "Chris", "url": "http://disqus.com/guest/b1abf4fdbba3945418e4e58ec53dc07d/", "registered": false, "linkedin": "", "blog": "http://worstiphoneapps.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": ""}, "5182e4879ff980b3bb88eb44505178a9": {"username": "Sivan", "tumblr": "", "display_name": "Sivan", "url": "http://disqus.com/guest/5182e4879ff980b3bb88eb44505178a9/", "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": ""}, "maniacdev": {"username": "maniacdev", "tumblr": "", "display_name": "maniacdev", "url": "http://disqus.com/maniacdev/", "registered": true, "linkedin": "", "blog": "http://maniacdev.com", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "remon": {"username": "remon", "tumblr": "", "display_name": "remon", "url": "http://disqus.com/remon/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/42/9116/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "facebook-1230725576": {"username": "facebook-1230725576", "tumblr": "", "display_name": "Matth\u00e4us Krzykowski", "url": "http://disqus.com/facebook-1230725576/", "registered": true, "linkedin": "", "blog": "http://www.facebook.com/people/Matthaus-Krzykowski/1230725576", "remote_domain": 1, "points": 1, "facebook": "http://www.facebook.com/people/Matthaus-Krzykowski/1230725576", "avatar": "http://media.disqus.com/uploads/users/36/2024/avatar92.jpg", "delicious": "", "is_remote": true, "verified": false, "flickr": "", "twitter": "", "remote_domain_name": "Facebook"}, "f36a73fb3bd9c38ae20f4251d2f92c72": {"username": "Aaron", "tumblr": "", "display_name": "Aaron", "url": "http://disqus.com/guest/f36a73fb3bd9c38ae20f4251d2f92c72/", "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": ""}, "chris_pivotal": {"username": "chris_pivotal", "tumblr": "", "display_name": "Christian Sepulveda", "url": "http://disqus.com/chris_pivotal/", "registered": true, "linkedin": "", "blog": "", "remote_domain": null, "points": 1, "facebook": "", "avatar": "http://media.disqus.com/images/noavatar92.png", "delicious": "", "is_remote": false, "verified": true, "flickr": "", "twitter": "", "remote_domain_name": ""}, "shonzilla": {"username": "shonzilla", "tumblr": "", "display_name": "shonzilla", "url": "http://disqus.com/shonzilla/", "registered": true, "linkedin": "in/shonzilla", "blog": "http://blog.shonzilla.com", "remote_domain": null, "points": 3, "facebook": "", "avatar": "http://media.disqus.com/uploads/users/2364/avatar92.jpg", "delicious": "", "is_remote": false, "verified": true, "flickr": "shonzilla", "twitter": "", "remote_domain_name": ""}}, "forum": {"use_media": true, "name": "VentureBeat", "streaming_realtime": false, "url": "venturebeat", "allow_anon_post": true, "reactions_enabled": true, "reply_position": 1, "show_avatar": true, "allow_anon_votes": false, "disqus_auth_disabled": false}, "realtime_enabled": false, "request": {"username": "", "is_global_moderator": false, "sharing": {}, "sort": 4, "forum": "venturebeat", "is_initial_load": true, "is_authenticated": false, "timestamp": "2010-01-02_06:19:58", "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, "remote_domain_name": ""}, "realtime_paused": false, "posts": {"10838147": {"up_voted": false, "ip": "", "has_replies": true, "message": "\"Android has a clear vision, but its framework is still a challenge for most developers to get their head around. \"<br><br>This is a silly statement. Did the author actually talk to any Android developers? I develop for Android and have a friend who develops for iPhone. I can tell you that getting up and running writing native apps with Android is far easier. It was not a challenge to get my head around it.<br><br>As for luring devs with money, Google just announced the second Android Developer Challenge, with something like $2 million in total prize money. That might be enough to lure some devs to the platform.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_10:18:25", "killed": false, "user_key": "ef1d48144761a6af8cce89394fd6f1d5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "11510276": {"up_voted": false, "ip": "", "has_replies": false, "message": "Ok first of all - I see all this talk about 'getting lost in the noise'. Well welcome to the real goddamn world. You can't just build something and expect it to do well. Look at Facebook apps. Do most of them gain such a large distribution just because they are great quality? NO. A tremendous amount of resources are put into distribution. yes, on Facebook distribution is more of a mathematical formula as opposed to in the iPhone world - where word of mouth, marketing and publicity play a bigger role. There are many things one must do. One key area that is lacking is marketing for iPhone apps and that's really what developers need to focus on building partnerships for. <br><br>Remember youtube videos and the techcrunch article where the guy talked about how he made youtube videos go viral and that requires a lot of people posting links on forums and what not to reach a critical mass? So yes, social media and WOM and all that can help spread the word of a product thats truly <br>remarkable (Seth Godin talks a lot about this) but you need to invest money in distribution - and for iphone thats more of an art compared to Facebook which is more of a science. <br><br>Also what about platforms such as openfeint within iPhone? that might help eh? Palm will never have the community iPhone will.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-20_16:31:53", "killed": false, "user_key": "facebook-3623416", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 10825779, "depth": 2, "points": 0, "author_is_creator": false, "is_realtime": false}, "10876295": {"up_voted": false, "ip": "", "has_replies": false, "message": "Well for those who thing the pre is just css/js/html you are wrong.  People have already gotten DOOM to run with hardware accel  this is a big deal. The initial API will be css/js/html, but they will allow direct hardware APIs.  Remember this is just running linux, so there are millions of devs out there with knowledge of the underbelly of the pre.<br><br>Face it, the pre offers a great dev platform for web-scrape apps (most iphone apps) that can be powered by css/js/html - web 2.0 people... Are you living under a rock?  Google just announced html5 is the new application platform - the pre is already there...", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_21:59:28", "killed": false, "user_key": "64917ee22bc65debe7abb1a70cb14e99", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10814986": {"up_voted": false, "ip": "", "has_replies": true, "message": "\"You can have a developer working on web work in Java, another working on middleware in Java, and another on the desktop in Java, but none of them have the knowledge to be effective in each of the other areas.\"<br><br>That is an absolutely ridiculous statement.  If your java developer can't be effective in all of these area, you hired a shitty java developer.<br><br><br>\"However, Sepulveda says WebOS is much easier for most up-and-coming developers than Android because its core elements \u2014 Javascript, HTML and CSS \u2014 are better understood by them. Android is based on Java, which is a language known by lots of developers, but it\u2019s also a beast to grasp.\"<br><br>Absurd as well.  Java is far easier to program with than using JS/HTML/CSS.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_16:59:09", "killed": false, "user_key": "f36a73fb3bd9c38ae20f4251d2f92c72", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 3, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10841611": {"up_voted": false, "ip": "", "has_replies": true, "message": "I do think many smartphone buyers will be looking for games, but I think many are also looking to \"keep connected\".  They want email, news, twitter, stocks, etc. They want to view their family photos and videos on a good screen. <br><br>For these users, I think Palm has an edge. I one of the crazy people who waited on line for the iPhone launch two years ago, but I have happily given up my iPhone for a Pre. Having multiple applications open makes it easy to quickly check my email, twitter, latest news, etc. I keep Evernote open to capture random thoughts or to-dos.<br><br>I also spend a lot more time with my Pre -- the experience is much stickier whereas the iPhone was get-in and get-out, at least for me. <br><br>On the game question, it will be interesting to see how Palm responds to the soon-to-be gray market; Doom has already been hacked into the Pre. <br><br>I also think all the App Catalog/Store/World/etc are really inefficient, at least right now. Apple, Palm, RIM and Google could do a lot more to help users find the apps they are interested in. The result would be good for everyone -- more sales and happier users. That could also help change the economic incentives for developers.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_12:57:02", "killed": false, "user_key": "chris_pivotal", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": true, "email": "", "parent_post_id": 10840714, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10845966": {"up_voted": false, "ip": "", "has_replies": false, "message": "Hi Derek,<br>as VB's resident Android fanboy until I met Christian on Thursday I agreed with Rich Miner statement we cited above that \"Android is the best platform to build and iterate on\". As you also  say writing native apps with Android is far easier.<br><br>However, I find in discussions that it is still a minority opinion. That's what Matt's above statement refers to.<br><br>After talking to Christian, who's one of the first developers to comment on his with WebOS, I've got reasons to believe that WebOS has some advantages which make prototyping and testing easier vis-a-vis Android.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_16:36:02", "killed": false, "user_key": "facebook-1230725576", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": true, "email": "", "parent_post_id": 10838147, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "11858065": {"up_voted": false, "ip": "", "has_replies": false, "message": "Absolutely right! It is a logical fallacy that an initial lack of apps relative to the competition means the phone won't succeed, and the iPhone is the best proof of that.<br><br>But it is very important that lots of apps get written for the new machine. And one of the factors that determines how many apps are written for it is how easy it is to develop for it. I think that javascript/html/css is a pretty smart choice. Objective C has a steep learning curve, and the number of apps that crash on startup is a testament to that fact.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-28_13:46:43", "killed": false, "user_key": "remon", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 11837815, "depth": 2, "points": 0, "author_is_creator": false, "is_realtime": false}, "10825874": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think it depends on your goals. Many of the people we meet have an idea, but lack a coherent application definition -- user interaction, details on features, etc. <br><br>It is really useful to be able to iterate and experiment  and evolve your application and to discover (t0 a degree) the best user experience for your idea.<br><br>The cost of development is going to either enable or restrict an application's ability to converge on what ultimately succeeds.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_23:14:58", "killed": false, "user_key": "chris_pivotal", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": true, "email": "", "parent_post_id": 10818718, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10821828": {"up_voted": false, "ip": "", "has_replies": true, "message": "Aaron and Johann,<br><br>Agreed. What's interesting about this article is the direct correlation between developer interest and platform success.<br><br>I don't believe it is anywhere near this simple.<br><br>So yes, being the first to launch an app on Pre would be a good position to be in - at least for the short term. But that is *not* the same thing as the success of the platform in general. There's obviously a connection between customer interest and developer interest. We could also go down the chicken / egg path of arguing which is more important for the success of the platform.<br><br>But I believe that the sheer momentum of the iPhone/Touch market is enough to propel it a long way and will make it very tough for Pre, Android or any other competitor to catch up. Now that Apple has added some significant features and developer candy in iPhone OS 3 I wouldn't want to be backing any other company at this time.<br><br>All the new USB/bluetooth hardware tricks and the trickle / subscription pay models introduced with iPhone 3 are exciting developers at a time that Pre needs to be attracting them.<br><br>I figure that Apple is going to have to go stagnant for a *long* time OR a game-changing technology  / paradigm shift will have to show up in order to unseat Apple.<br><br>it's going to be interesting to watch though.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_20:14:02", "killed": false, "user_key": "79de7926f331c3c76b0be2a6d8969644", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10949533": {"up_voted": false, "ip": "", "has_replies": false, "message": "To the comment about games driving hardware sales: this is an argument that surfaced when PCs were being commoditized a few years ago. By contrast, smartphones can be seen as an extreme form of mobile computing with plenty of innovation ahead to overcome miniaturization, performance and cost challenges.<br><br>I've surveyed the applications I most use on my G1 and could not think of one not suitable for webOS development. The issue of games elludes me as I'm not a gamer, I mostly read and communicate using these devices.<br><br>I do wonder about networking and graphics programming on webOS but, excluding games and VoIP (which carriers resent), how much is left that's not possible in mobile applications?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-15_18:12:05", "killed": false, "user_key": "5182e4879ff980b3bb88eb44505178a9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10818718": {"up_voted": false, "ip": "", "has_replies": true, "message": "Developing on the Pre first is just bad advice. Ease of development should be pretty low on the list of factors.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_18:17:57", "killed": false, "user_key": "1cf1ee771fc280b59d1923126f1900d5", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10824223": {"up_voted": false, "ip": "", "has_replies": false, "message": "Pre has a long way to go. After Monday it's 15 min of fame ended.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_21:52:55", "killed": false, "user_key": "a154387406389982961fdd479ec1c4ce", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10819056": {"up_voted": false, "ip": "", "has_replies": false, "message": "vise-like grip.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_18:28:29", "killed": false, "user_key": "4cad269d3e027e42de57ae268e3d3bbb", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 1, "author_is_creator": false, "is_realtime": false}, "10814121": {"up_voted": false, "ip": "", "has_replies": false, "message": "His points are valid. Phones should use web technologies, and, although google advocates it, android does not offer a 'web based' framework to build apps on. There are projects like Phonegap (<a href=\"http://phonegap.com\" rel=\"nofollow\">http://phonegap.com</a>) that do just that: allow you to build conventional HTML based apps on iPhone or Android that can make use of all the phones capabilities.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_16:34:35", "killed": false, "user_key": "c7306b4d8907a69957585d1fce610c65", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "11836843": {"up_voted": false, "ip": "", "has_replies": true, "message": "Let me first state that I think that the Palm WebOS is extremely innovative and creative.  But to compare the Pre to the iPhone is like comparing the success of Tiger Woods to a first year college player.  The problem for Palm that they will likely never overcome is that apple and windows mobile has the attention of the development community and they will simply never catch up from an apps standpoint, which is what people seem to want these days.  Let's see what happens, but I don't think it looks good for the Pre or any future WebOS phone.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-27_15:42:16", "killed": false, "user_key": "mbldev", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10820012": {"up_voted": false, "ip": "", "has_replies": true, "message": "Umm... you are making the assumption that \"easy development\" is the sole thing that will attract developers.<br><br>More important than the ease of development, Apple just announced that their user base for the iPhone/iPod Touch is 40 Million!<br><br>THAT's what attracts developers. Money.<br><br>Not exclusively, but it's huge motivator. How long will it take for the Pre to get a user base that is even a reasonable fraction of that?<br><br>This logical failure just makes the rest of the article look like a Pre puff piece.... oh, perhaps that's what it was.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_18:59:39", "killed": false, "user_key": "79de7926f331c3c76b0be2a6d8969644", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10960690": {"up_voted": false, "ip": "", "has_replies": false, "message": "The iPhone may indeed be a mobile PC but the trend on full fledged PCs has been clearly moving toward web apps replacing desktop ones.<br><br>Why is this so, and remembering that it was their success that has pushed the browser platform forward and not vice versa? The ease of iteration on the web was originally not because of ease of development, but of deployment.<br><br>App stores and OTA updates have made deployment trivial, whether on the iPhone or the Pre. What's left is the ease of development in a dynamic language and a an army of developers that will have a short ramp up time to start developing for the Pre. If Palm can capitalize on that it has a shot at succeeding.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-16_00:38:31", "killed": false, "user_key": "5182e4879ff980b3bb88eb44505178a9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10901422": {"up_voted": false, "ip": "", "has_replies": false, "message": "Palm WebOS may find competition in #Android Scripting Env supporting Python,  Lua, BeanShell (TODO: Ruby & JavaScript). I hope, Groovy too.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-14_18:55:53", "killed": false, "user_key": "shonzilla", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10826032": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree with much of what you wrote. On your last point though, no one has to unseat Apple to be a success -- it is not  zero-sum game. <br><br>Some are predicting the smartphone market, particularly in the US, is growing by as much as 70% this year.  (<a href=\"http://www.engadget.com/2009/02/04/phone-shipments-plunge-12-6-percent-year-over-year-in-q4-08/\" rel=\"nofollow\">http://www.engadget.com/2009/02/04/phone-shipme...</a>). There is room for many of the platforms to succeed.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_23:22:33", "killed": false, "user_key": "chris_pivotal", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": true, "email": "", "parent_post_id": 10821828, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10815538": {"up_voted": false, "ip": "", "has_replies": false, "message": "Yes it's easier but it's not even close to as capable.<br><br>The phone isn't much more than a souped up web browser. <br><br>So no, it's not going to touch the iPhone except in apps that are just connections into a web presence.<br><br>It may catch up to Apple on this but it will take a long time to see that happen.<br><br>Because the smart phone is now just a mobile computer, I think the players will be Microsoft, Apple, and Google (representing Linux).    Apple has a good head start and Microsoft is severely lagging.  Google is accelerating and may get enough momentum to take the lead....but I wouldn't bet on it.<br><br>The phones are each sticky, meaning users will be resistant to jumping camps so at least for now Apple's early lead is a huge advantage....but they were in the boat with early Apple II's years ago and they blew it.  If they look hard at why they blew it...they might figure out a way to keep history from repeating.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_17:16:39", "killed": false, "user_key": "facebook-1463444015", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10825779": {"up_voted": false, "ip": "", "has_replies": true, "message": "I agree the iPhone market attracts developers, but it is hard to stand out in the 50,000 apps in the App Store. So unless the developer has a business model and promotion/marketing plan, it is really hard to make money in the App Store.<br><br>The Palm Pre doesn't need 40 million users to be attractive. For a lot of developers, if they are on the device early, they can accumulate good reviews and lots of downloads early. As the market grows, so does their opportunity to charge or make money via other means. <br><br>I know a variety of iPhone app developers, who were out at launch and established their app early. In those cases, their app continues to make money today. However, some of those same developers released other apps, and they got lost in the noise of the App Store and have not made any real return on those later apps. (As a note, many of their later apps were actually a lot better --- but it was too hard to get anyone to see them.)<br><br>There are hundreds of millions of web users, but how easy is it to make money when you launch a new web app?<br><br>But I think interest in the platform is what drives a lot of developers and it will be a personal preference to develop for iPhone, webOS, Android or Blackberry.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_23:10:28", "killed": false, "user_key": "chris_pivotal", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": true, "email": "", "parent_post_id": 10820012, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10999838": {"up_voted": false, "ip": "", "has_replies": false, "message": "Matt, well researched article that presents a smarting balance of the issues at bay...for $PALM, not having a plethora of apps on their marketplace is more an opportunity than an issue!<br><br>thanks again for the smarting read!", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-16_14:07:29", "killed": false, "user_key": "facebook-557111035", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10840714": {"up_voted": false, "ip": "", "has_replies": true, "message": "@HK - I also worry that the upcoming Pre SDK will not allow developers to write close enough to the metal to create sophisticated games or complex applications.  It's possible that Palm doesn't see games as important to their target demographic or that they don't want to risk having applications running that can crash the device or put it into a modal state.  <br><br>Christian, you mentioned that the smartphone market is expected to grow about 70% this year.  I would expect that many of those growth users are not going to be business users and that applications such as games are going to be very, very important to capturing a slice of that market.  As a game developer, I would love to see Palm open up the SDK enough to put that nice graphics core to work.<br><br>We have avoided developing for the iPhone because of the poor signal to noise ratio in the app store.  Here's are some of the trends we expect to see in regard to iPhone development over the next 12 months.<br><br>1) The downward pressure on App prices and poor ROI in the near term is going to continue the poliferation of \"ringtone apps\".<br><br>2) Once the ringtone apps stop bringing in any money (if they ever did for most people), the quick-buck developers will leave the platform.<br><br>3) After the ringtone app developers flee the platform, it leaves it open to the more serious development efforts. The problem is that pricing model is heavily tilted toward the very inexpensive or free apps. So, I think it will be very, very hard for developers to charge $30.00 or more on the platform to recover the costs of sophisticated development.<br><br>4) It will be interesting to see what this means for games. Even though platforms like the PSP have a smaller installed base, the consumer has been conditioned to expect higher prices for the experience and you certainly have a more targed demographic. I wouldn't be surprised if the ROI was way better on the PSP/PSP Go in the near future than on the iPhone.<br><br>5) It's possible that micropayments might help recover the cost of development for some games and applications but I still think that's a long shot for the majority of developers.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_12:16:43", "killed": false, "user_key": "facebook-1268568911", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "11866303": {"up_voted": false, "ip": "", "has_replies": false, "message": "Ok so I just realized how much I miss having a custom tone for text messages... I know the standard one is very clean and fits in with the whole theme of the phone very well but with all the customization options on the Pre I can't imagine why the only thing you can select for are phone calls.<br><br>I'm pretty sure if people are vocal enough about such an easy change then Palm will respond fairly quickly.<br><br><a href=\"http://www.palmpreforum.org\" rel=\"nofollow\">http://www.palmpreforum.org</a>  This is all about the plam pre", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-28_21:20:16", "killed": false, "user_key": "coolfx35", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10888769": {"up_voted": false, "ip": "", "has_replies": false, "message": "I think this posting is just a bunch of hot air ;)  The Pre, like WinMo, will be out in many form factors -- preventing standardization of accessories, etc, that have made iPhones & iPods &gt;the&lt; standard.  I doubt we'll be seeing dedicated PalmPorts in cars anytime soon.<br><br>Having pre-ordered a iPhone 3Gs, I'm floored at the wide availability of accessories and addons from my new toy, especially having come from being a longtime WinMo user.  A very slick leather case for $14, with free shipping -- comeption is great.  I'm used to purchasing a device and hoping it becomes popular enough for stuff to come out for it, and then paying much more that that.  As a consumer, I want it all as easy as possible -- and I seem to have stumbled upon just that.  As this trend continues,  it'll only get better.<br><br>Not that the Palm stuff won't catch on and find a market, but it ain't killin no iPhones :)  Android, Windows Mobile, Symbian, Palm and others are pretty much just diluting what's left over...", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-14_13:36:24", "killed": false, "user_key": "benjitek", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10837060": {"up_voted": false, "ip": "", "has_replies": false, "message": "This is absurd.   Since the Pre does not have Java, or C/C++ to write applications, complex applications can not be written.  Simple apps can be done quickly, that's about it. <br><br>For example, many of the good games on the iPhone or Android can never be written for the Pre.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_09:01:37", "killed": false, "user_key": "c06efc73dfbcfba7d74aa32df46b5586", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10815815": {"up_voted": false, "ip": "", "has_replies": false, "message": "These things always come down to the ecosystem and SDK.  If Pre can show how they make it easy for the pre-existing web developers not to have to learn a new methodology to be mobile broadband ready (while getting full benefits of marketplace, distribution, e-wallet), then they have a chance, as there are a lot of LAMP types that are sitting on the sidelines wrt mobile because they don't want to learn another methodology.<br><br>Now obviously they face a tremendous chicken/egg wrt attracting both consumers and developers, since consumers now see this as an apps play, and all of the apps are on iPhone.  Plus, apps developers can develop and reach a footprint of 40M iPhone/iPod touch devices, which is pretty darn compelling.<br><br>Either way, it is not a foregone conclusion of zero sum, save for skepticism that RIM can penetrate consumer base at this level (disclaimer: I am a happy BB owner and iPod touch owner) and questions whether Java will be an Achilles heel for Android.  <br><br>I would say that as a Ruby on Rails shop, it is unsurprising that Pivotal Labs sees Pre/WebOS as the preferred development model.  <br><br>Some fodder on Apple Worldwide Developer Conference this week, which provides relativity to this topic can be found here:<br><br>Apple WWDC Keynote Analysis: Punishing the Wizard, Part Two <br><a href=\"http://bit.ly/2lC3yC\" rel=\"nofollow\">http://bit.ly/2lC3yC</a> <br><br>Check it out if interested.<br><br>Cheers.<br><br>Mark", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_17:23:44", "killed": false, "user_key": "hypermark", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10958281": {"up_voted": false, "ip": "", "has_replies": false, "message": "Sivan,<br><br>I really think it's more about perception and how games and other high end software shift that perception of the device.  I'm already seeing articles like this one:<br><br><a href=\"http://www.pcmag.com/article2/0%2C2817%2C2348658%2C00.asp\" rel=\"nofollow\">http://www.pcmag.com/article2/0,2817,2348658,00...</a><br><br>From the article:<br><br>\"This is not a subtle distinction, either. Apple has evolved the iPhone in ways that we could not have imagined when it came out two years ago. The new OS 3.0 games are 3D in nature and provide a rich game experience similar to that on a PC. Games on other smartphones are weak by comparison.\"<br><br>...<br><br>\"It's unfair to Palm to ask whether the Pre is an iPhone killer. In fact, even trying to put it in the same class as the iPhone is dooming it to failure. The Pre and others are excellent smartphones, but they're phones, not PC platforms. \"<br><br>Not good.  They are basically putting the Pre into the toy category while the iPhone gets put into the pocket computer category.  You and I know that both devices have very similar hardware (I believe the CPU and GPU are actually the same or very similar).  <br><br>We're going to see more and more of this chasm between full featured desktop class operating systems running on mobile hardware and everyone else.  Apple clearly has a desktop OS running at the heart of the iPhone.  I don't know enough about Palm's WebOS to know where it falls but the media is starting to make the call based on what they see (or don't see) running on the devices.  As an aside, Microsoft is at a cross-roads with Windows Mobile.  In my opinion, Microsoft really should move away from a seperate code base and put a trimmed down version of Windows 7 on mobile hardware.  Of course, I'm not sure how you would support all of the existing software written for Windows Mobile 6.5 and lower (VM maybe?).  Then there's the cost to retool the development pipeline.  Sounds complicated, which is why the momentum and excellent development tools that gave Windows Mobile an advantage in the past is likely one of the things holding it back from making the necessary transition away from the WinCE core.<br><br>In any case, it will be a very interesting generation of devices.  As a note, I use a Palm Pre as my primary device and despite the somewhat flaky build quality (everything is loose - it feels like it will explode into atoms if I drop it), I love it.<br><br>-Vance", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-15_23:00:18", "killed": false, "user_key": "facebook-1268568911", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "11837815": {"up_voted": false, "ip": "", "has_replies": true, "message": "The argument that Palm is doomed because of the size of the iPhone market is belied by Apple's history. 10 years ago Apple was in the same position as Palm. Windows had the attention of developers and it was the main argument against Apple.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-27_16:26:16", "killed": false, "user_key": "5182e4879ff980b3bb88eb44505178a9", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": true, "email": "", "parent_post_id": 11836843, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10947281": {"up_voted": false, "ip": "", "has_replies": true, "message": "Why do you think so many people go with PHP over Java for web development?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-15_17:07:44", "killed": false, "user_key": "7fd64fbdca43b3e0f3263df184167b30", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": true, "email": "", "parent_post_id": 10814986, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10886627": {"up_voted": false, "ip": "", "has_replies": false, "message": "I agree that the Pre provides a great experience and the \"keep connected\" crowd will be hooked once they get a taste of Pre's multitasking.  <br><br>The issue I have with the lack of games (and I am certainly biased) is that games move hardware.  Even if you don't play games, they give the consumer the impression of a powerful, modern device.  Multitasking aside, the average consumer won't be able to tell the difference between a Twitter client on Palm vs Apple, but they will notice the difference between Connect 4 (the only game on the Pre - although I understand more are coming) VS hardware accelerated 3D on the iPhone.<br><br>Also, I would bet that eventually XNA, Windows Mobile 7 and the XBOX ecosystem are going to collide (Late 2010?).  The Zune HD is already a very early step in this direction.  The clock is seriously ticking and the ball really is in Palm's court.  They have a great device, a very compelling platform but we've all seen compelling, sophisticated platforms dissolve right out of the market (Amiga?).<br><br>As for the grey market, my guess is that Palm will ignore it.  Unless it becomes very, very easy to modify the device, I think it will represent a very small percentage of the installed base.<br><br>-Vance", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-14_12:10:37", "killed": false, "user_key": "91ee2488f04bd88362929120fc6939d8", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 10841611, "depth": 2, "points": 0, "author_is_creator": false, "is_realtime": false}, "10814810": {"up_voted": false, "ip": "", "has_replies": false, "message": "My prediction is that Palm will displace RIM/Blackberry and Apple in the smartphone market in the next 3 years.  WebOS and the Pre are one revolutionary generation in front of both.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_16:53:57", "killed": false, "user_key": "0804af8b24f34e52f09f87adb25c68cd", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10901343": {"up_voted": false, "ip": "", "has_replies": true, "message": "The Palm Pre is such a me-too phone, why not buy the original from Apple with a faster chip<br><br>Chris<br><a href=\"http://worstiphoneapps.blogspot.com\" rel=\"nofollow\">http://worstiphoneapps.blogspot.com</a>", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-14_18:55:25", "killed": false, "user_key": "b1abf4fdbba3945418e4e58ec53dc07d", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 2, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10826210": {"up_voted": false, "ip": "", "has_replies": false, "message": "The android market already has 6,000. apps.  Sure most are crap (like the iphone app store), but there are enough in there to do almost everything I want.  I imagine Pre will rapidly ramp up on apps as well.  The ability to make custom background apps alone should more than justify the lack of hardware tricks.  <br><br>I don't see a lack of apps as hurting the other markets (Pre/Android/win mobile).  I see only a (perceived) crumminess of the device.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_23:31:17", "killed": false, "user_key": "f36a73fb3bd9c38ae20f4251d2f92c72", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 10821828, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10974563": {"up_voted": false, "ip": "", "has_replies": true, "message": "PHP is much more designed for rendering HTML, JS, and CSS.   In other words it ties into (required) client technologies better.  <br><br>That being said, I see no reason a new web developer should learn php.  Ruby or python (esp. with a good framework) are much better choices", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-16_05:13:45", "killed": false, "user_key": "f36a73fb3bd9c38ae20f4251d2f92c72", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 1, "is_first_child": false, "email": "", "parent_post_id": 10947281, "depth": 2, "points": 0, "author_is_creator": false, "is_realtime": false}, "10877393": {"up_voted": false, "ip": "", "has_replies": false, "message": "The Pre has very little to offer to users over the iPhone. Already AT&T is sold out of iPhone 3G S.  Just announced today.  iPhone just offers much more for users and leads the pack in OS and UI advantages.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_23:21:15", "killed": false, "user_key": "a154387406389982961fdd479ec1c4ce", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "16041065": {"up_voted": false, "ip": "", "has_replies": false, "message": "Palm has one advantage over Apple: they don't sell laptops or desktops. Apple won't want to cannibalize sales of those items by making the iPhone too powerful. Palm doesn't have that concern. The Pre, and successive iterations of WebOS devices, has the potential to become a true primary computing device as I describe in this blog post: <a href=\"http://www.thegeniusfiles.com/thoughts-on-using-palm-pre-as-my-primary-comp\" rel=\"nofollow\">http://www.thegeniusfiles.com/thoughts-on-using...</a>", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-09-05_22:12:23", "killed": false, "user_key": "thegeniusfiles", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "3 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10821867": {"up_voted": false, "ip": "", "has_replies": false, "message": "Aaron, I believe the number is over 40,000 apps now.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_20:15:42", "killed": false, "user_key": "maniacdev", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10974573": {"up_voted": false, "ip": "", "has_replies": false, "message": "In other words, the reason for PHP is solely because it is easier to render client pages with it.  It does NOT mean that a phone should be using client technologies as opposed to, say, java or .NET", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-16_05:14:40", "killed": false, "user_key": "f36a73fb3bd9c38ae20f4251d2f92c72", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 10974563, "depth": 3, "points": 0, "author_is_creator": false, "is_realtime": false}, "10820718": {"up_voted": false, "ip": "", "has_replies": false, "message": "Going by  Palm's stock price the Pre is already a winner.  As above 40 million iPods/iPod Touches is probably why most developers won't even take a sniff at the Pre.  Also, products designed with html/javascript can run and be sold in the iPhone app store.. there's been frameworks for doing that for quite some time.  If that's supposed to be what sets the Pre apart for developers... well good luck with that.<br><br>That being said I like the Pre, and there could be some profitable niches to exploit in the Palm's app store.. although the ratio of Pre's/Developers looks like it could be worse than the ratio of iTouch+iPhones/Developers with all the WebOS hoopla.", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_19:26:30", "killed": false, "user_key": "twitter-27362073", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "10947453": {"up_voted": false, "ip": "", "has_replies": false, "message": "Maybe people want to avoid AT&T?", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-15_17:12:14", "killed": false, "user_key": "7fd64fbdca43b3e0f3263df184167b30", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": true, "email": "", "parent_post_id": 10901343, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10820976": {"up_voted": false, "ip": "", "has_replies": false, "message": "SU/Johann: There are also 20,000 apps.  You'll stand out from the crowd much easier if you develop for the Pre", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-12_19:36:46", "killed": false, "user_key": "f36a73fb3bd9c38ae20f4251d2f92c72", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": null, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}, "11858473": {"up_voted": false, "ip": "", "has_replies": false, "message": "The Pre is just as much a me-too copy of the iPhone as the iPhone is a me-too copy of Windows Mobile.<br><br>Think they really are the same?  Try running Pandora while navigating on the iPhone.<br><br>Or try going back to the contact you last worked with after you looked something up on the web.<br><br>These aren't exotic examples of what you might expect to do on a PDA.<br><br>I'm not trying to knock the iPhone. I think it is a great phone. But Apple has some catching up to do with WebOS. The notification feature of the iPhone is not a very good substitute for running multiple apps concurrently.<br><br>All of which is to say: The pre is no me-too phone.", "is_last_child": true, "can_reply": true, "down_voted": false, "real_date": "2009-06-28_14:09:14", "killed": false, "user_key": "remon", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": 10901343, "depth": 1, "points": 0, "author_is_creator": false, "is_realtime": false}, "10876541": {"up_voted": false, "ip": "", "has_replies": false, "message": "Cool Palm Pre and iphone comparison<br><br><a href=\"http://www.wealthalchemist.com/Blog/2009/06/palm-pres-coming-party-june-6th/\" rel=\"nofollow\">http://www.wealthalchemist.com/Blog/2009/06/pal...</a>", "is_last_child": false, "can_reply": true, "down_voted": false, "real_date": "2009-06-13_22:17:13", "killed": false, "user_key": "chleoku", "has_been_anonymized": false, "edited": false, "author_is_moderator": false, "from_request_user": false, "votable": true, "date": "6 months ago", "approved": true, "num_replies": 0, "is_first_child": false, "email": "", "parent_post_id": null, "depth": 0, "points": 0, "author_is_creator": false, "is_realtime": false}}, "integration": {"receiver_url": "", "theme": 4, "reply_position": true, "disqus_logo": true}, "timer": {"timer_url": "http://localhost:8005", "thread_id": "21432725", "user_id": "anonymous", "forum_id": "7041", "hash": 7436154193672678243}, "thread": {"total_posts": 0, "paginate": false, "per_page": 0, "slug": "has_the_palm_pre_already_beaten_the_iphone_94", "num_pages": 1, "days_alive": 0, "realtime_paused": true, "id": 21432725, "num_posts": 44, "closed": false, "queued": false, "killed": false}, "reactions_limit": 10, "context": {"show_reply": true, "use_fb_connect": true, "forum_facebook_key": "547225e2dda46ccfdec279a9a44a0074", "use_yahoo": false, "subscribed": false, "use_twitter_signin": true, "use_openid": false, "realtime_speed": 5000}, "reactions_start": 0, "settings": {"debug": false, "disqus_url": "http://disqus.com", "media_url": "http://media.disqus.com"}, "media_url": "http://media.disqus.com"};
	/* */ this.jsonData.cookie_messages = {"user_created": null, "post_has_profile": null, "post_twitter": null, "post_not_approved": null}; this.jsonData.session = {"url": null, "name": null, "email": null}; /* */

	
	this.curPageId = 'dsq-comments';

	this.frames = {};
};

var disqus_popup_reference = null;

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



/**
 * Dsq.Strings: UI strings
 */
Dsq.Strings = new function() {
	this.ADD_NEW_COMMENT = "Add New Comment";
	this.LOG_INTO_DISQUS = "Log into DISQUS";
	this.USE_MEDIA = "Use Media";
	this.LOGOUT = "Logout";
	this.SHARING_OPTIONS = "Sharing options";
	this.SHARE_ON = "Share on";
	this.TWEET_THIS_COMMENT = "Tweet this comment";
	this.SHARE_ON_NEWSFEED = "Share on news feed";
	this.SEND_UPDATE_TO_YAHOO = "Share via Yahoo! Updates";
	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.IN_REPLY_TO = "in reply to";
  this.SETTINGS = "Settings";
  this.MODERATOR_OPTIONS = "Moderator options: ";
  this.MODERATE_OPTIONS = "Moderate Options";

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

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

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

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

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

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

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

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






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



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

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

	this._lastHash = null;

	this._accumMsg = '';

	this._lastSeqno = 0;

	this.MAX_DATA_LEN	= 1024;

	this.WAIT_TIME		= 10;

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

};

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

FragmentPacket.prototype.log = function(msg) {



};

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

		hash = this.reader.name;
	} else {

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

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

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

		this._lastSeqno = seqno;

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

				this._accumMsg = '';

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

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

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

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

};

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

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

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

	if (packetNum === 0) {

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

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

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

	if (num_packets === packetNum) {

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

	this._lastSeqno++;

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

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

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

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

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

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


	this.receiverId = receiverId;
};

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

	var listener = function(e) {

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


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

		that.receiveCallback(data);
	};

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

PostMessagePacket.prototype.send = function(msg) {



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


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

	var packet;
	if (!msg) {

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

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

var JsonRpc = function() {

	this.ids = {};

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

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

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

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

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

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

				json = 'null';
				break;
		}

		return json;
	};

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

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

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

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

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

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

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

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

		send_func(this.objectToJSON(request));

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

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


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



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


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


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

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

	this.packetHandler = null;


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


	var _createReceiverForFragmentPacket = function() {

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

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

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

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

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

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

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

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

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

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

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

			that._ready = true;
		};

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

		that.receiver.onload = receiver_onload;







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

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

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

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


	var _createReceiverForPostMessage = function() {

		var receiver_onload = function() {

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

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


		ParentMessenger['_receiver_onload_' + receiverId] = receiver_onload;

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

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

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

};

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

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

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

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

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

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

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

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

	var sendFunc = function(msg) {

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


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


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

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

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

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

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

		if (msg.username) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	var handleSessionData = function(session) {

		var forum_url = Dsq.jsonData.forum.url;




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

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

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


	






Dsq.Themes = {};

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



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

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

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

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

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

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

		
		

		return html;

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

		html += Dsq.Templates.pagination();

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

		html += Dsq.Templates.reactions();

		
			html += Dsq.Templates.trackbacks();
		


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

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

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

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

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

		return html;
	};

	this.postBox = function(post_id, use_fallback_iframe) {


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

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


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

		var _requestUserInfo = function() {
			var html;



			var user_has_email = false;

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

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

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


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



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

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




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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



	
	this.chooseSubscribe = function(post_id) {

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

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

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

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

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

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

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

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

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

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

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

		d = auth_data;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

				body.appendChild(edit_area);

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

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

		Dsq.Templates.toggleEdit(post_id);
	};

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

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

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

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

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

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

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

		}

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

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

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

		var extra_params = '';

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

		Dsq.$('dsq-pagination').innerHTML += '<img src="http://media.disqus.com/images/loading-small.gif">';
		
		if(el_clicked) {
			Dsq.Templates.setLoadingButton(el_clicked);
		}
		
		Dsq.Utils.execScript('http://disqus.com/forums/venturebeat/thread.js'
			+ '?slug='	+ 'has_the_palm_pre_already_beaten_the_iphone_94'
			+ '&p='		+ page
			+ extra_params);
	};
	
	
	this.rate = function(el, id, vote) {


		if(Dsq.jsonData.request.is_authenticated || Dsq.jsonData.forum.allow_anon_votes) {
			if(vote == 1) {
				Dsq.$('dsq-like-' + id).innerHTML = '<img src="http://media.disqus.com/images/loading-small.gif">';
			}
			Dsq.Utils.execScript('http://disqus.com/forums/venturebeat/vote.js'
				+ '?post_id='    + id
				+ '&vote='        + vote);
		} else {
			Dsq.Popup.login('To rate, please log in');
		}
	};

	this.voted = function(post_id, points, vote) {

		Dsq.$('dsq-like-pts-' + post_id).innerHTML = points + Dsq.Utils.pluralize(points, ' person', ' people') + ' liked this.';

		if(vote) {
			Dsq.$('dsq-like-' + post_id).innerHTML = 'You liked this.&nbsp;&nbsp;';
		}
	};




	this.postComment_onSuccess = function(response, parent_post_id, post_id) {
		var approved = response.message.post_meta.approved;

		if (parent_post_id) {
			Dsq.Post.toggleReply(parent_post_id);
		}

		Dsq.Popup._closePopup(null, true);
		
		if (approved) {
			Dsq.Post.incrementPostCount();
			Dsq.Post.outlineComment(post_id);
		} else {			
			var unapproved_msg = 'Thanks for posting!\
	 Your comment must be approved by a moderator before appearing here.\
			';
			Dsq.Popup.popModal(unapproved_msg, 'Comment awaiting approval', post_id);
		}

		var sharing_results = response.message.sharing_results;
		var sharing_errors = '';
		for (var service in sharing_results) {
			if (sharing_results.hasOwnProperty(service) === true) {
				if (sharing_results[service].error === true) {
					sharing_errors += service + ', ';
				}
			}
		}

		if (sharing_results.facebook && sharing_results.facebook.callback) {
			FB.ensureInit(function() {
				FB.Connect.streamPublish('', sharing_results.facebook.attachment);
			});
		}

		if (sharing_errors !== '') {
			var message = 'Your comment was posted, but there were errors sharing with the following connections: ';
			message += sharing_errors.replace(/,\s$/, '');
			message += '<p><a href="' + Dsq.jsonData.settings.disqus_url + '/profile/connections" target="_blank">Configure your connections here</a></p>'
			Dsq.Popup.popModal(message, 'Sharing options');
		}

		Dsq.Templates.setLoadingButton(false);
	};

	this.postComment_onFailure = function(response, parent_post_id, post_id) {

		Dsq.Templates.setLoadingButton(false);
	};
};




// TODO: It might be faster to use string methods to find all <li (...) </li> blocks and pass to Dsq.PostHandler manually.
Dsq.CommentsHandler = function(str, head, post_id, content, tail, offset, s) {
	var prepend_post = Dsq.Templates.prependPost(post_id);
	var append_post = Dsq.Templates.appendPost(post_id);

	content = content.replace(Dsq.POST_RE, Dsq.PostHandler);
	Dsq.Templates.postLoopCounter++;
	head = Dsq.Templates.Filters.commentContainer(post_id, head);
	return prepend_post + head + content + tail + append_post;
};

Dsq.PostHandler = function(str, h_head, post_id, h_content, h_tail, b_head, b_content, b_tail, offset, s) {
	var prepend_header = Dsq.Templates.postPrependHeader(post_id);
	var append_header = Dsq.Templates.postAppendHeader(post_id);
	var prepend_body = Dsq.Templates.preBody(post_id);
	var append_body = Dsq.Templates.postBody(post_id);
	var append_footer = Dsq.Templates.postFooter(post_id);

	b_content = b_content.replace(Dsq.POST_BODY_RE, Dsq.PostBodyHandler);
	return h_head + prepend_header + h_content + append_header + h_tail + b_head + prepend_body + b_content + append_body + b_tail + append_footer;
};

Dsq.PostBodyHandler = function(str, head, post_id, content, tail, offset, s) {
	content = Dsq.Templates.Filters.commentContent(post_id, content);
	return head + content + tail;
};

Dsq.MediaPostHandler = function(str, args, offset, s) {
	args = args.split(' ');
	if(args[0] == 'seesmic') {
		return '<br />' + Dsq.Templates.mediaSeesmic(args[1], args[2]);
	}
	return '';
};


/**
 * Shorcuts
 */
Dsq.$ = function(element) { return document.getElementById(element); };
Dsq.$b = document.body || document.getElementsByTagName('body')[0];


/**
 * Dsq.Debug: Logging functions.
 */

Dsq.Debug = new function() {this.log=function(s){};this.profile=function(f){if(typeof f == 'function')return f();else return eval(f);};};


/**
 * Dsq.Urls: URL paths
 */
Dsq.Urls = new function() {
	this.LOGIN = '/profile/login/';
	this.LOGOUT = '/logout/';
	this.REPLY = 'http://disqus.com/forums/venturebeat/has_the_palm_pre_already_beaten_the_iphone_94/reply.html';
	this.REQUEST_USER_PROFILE = '/AnonymousUser/';
	this.REQUEST_USER_AVATAR = 'http://media.disqus.com/images/noavatar92.png';
};
// Dsq.Urls

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

		return [windowWidth, windowHeight];
	}

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

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

		return [scrollWidth, scrollTop];
	}

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

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

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

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

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

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

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

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

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

				form.appendChild(input);
			}
		}

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

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

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

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

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

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

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

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

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

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

		return params;
	};

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

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

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

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

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

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

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

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

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

	};

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

};
// Dsq.Utils

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

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

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

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

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

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

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

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

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

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

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

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

	};

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		

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

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

		
			html += Dsq.Templates.authPost();
		

		html += Dsq.Templates.reactions();

		
			html += Dsq.Templates.trackbacks();
		

		return html;
	};

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

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

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

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

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

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

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

		return html;
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//
	// 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 VentureBeat" 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:21432725" onclick="Dsq.Popup.login(); return false">Login</a> \
								 \
									&nbsp;or&nbsp; \
									<img class="fb_login_image" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_small_short.gif" alt="Facebook Connect"/> \
									<a href="#" onclick="FB.Connect.requireSession(DisqusFbcParentController.onLogin); return false;">Connect</a> \
								 \
								&nbsp;or&nbsp; \
									<img src="http://media.disqus.com/images/twitter-signin-icon.png" alt="" /> \
									<a href="#" onclick="Dsq.Twitter.startTwitterConnect(); return false">Sign-in</a> \
								 \
								 \
							 \
						</div> \
					</div> \
					<div id="dsq-reply-' + post_id + '"></div> \
			</div> \
		';
	};

	//
	// Iframes
	//

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

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

		var default_params = {
			// TODO: These should be moved to Dsq.jsonData.
			'f'				: 'venturebeat',
			't'				: 'has_the_palm_pre_already_beaten_the_iphone_94',
			// 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);
			}

			// insert post as a sibling after dsq-append-post-{id}
			node.parentNode.insertBefore(div, node.nextSibling);
		}
	};

	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/venturebeat/vote.js'
                + '?post_id='    + id
                + '&vote='        + vote);

		} else {
			Dsq.Popup.login(Dsq.Strings.TO_RATE_PLEASE_LOG_IN);
		}
    };

	this.showParent = function(id) {
		var author = Dsq.$('dsq-author-user-' + id).innerHTML;
		var post = Dsq.$('dsq-comment-message-' + id).innerHTML;
		
		post += '<br /><br /><a href="#comment-' + id + '">Jump to comment</a>';
		
		Dsq.Popup.popModal(post, author + ' said...', id);
	}

	this.report = function(id, confirmed) {
		if(confirmed) {
			Dsq.Utils.postToUrl('http://disqus.com/forums/venturebeat/has_the_palm_pre_already_beaten_the_iphone_94/post_report/', {'post_id': id});
			Dsq.Popup.popModal('Thank you. This comment has been flagged for moderator attention.', 'Successfully flagged');
			Dsq.Utils.deleteNode(Dsq.$('dsq-post-report-' + id));
		} else {
			var title = Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT;
			var message = Dsq.Strings.ARE_YOU_SURE_YOU_WOULD_LIKE_TO_REPORT_THIS_COMMENT_TO_A_MODERATOR + '? \
			<br /><br /> \
			<button type="button" onclick="Dsq.Popup._closePopup(null, true)"><strong>' + Dsq.Strings.NO + '</strong>, ' + Dsq.Strings.NEVER_MIND + '</button>&nbsp;&nbsp;&nbsp;<button type="button" onclick="Dsq.Post.report(' + id + ', true);"><strong>' + Dsq.Strings.YES + '</strong>, ' + Dsq.Strings.FLAG_INAPPROPRIATE_COMMENT + '</button><br /><br />'
			+ Dsq.Strings.THIS_WILL_FLAG_COMMENTS_FOR_MODERATORS_TO_TAKE_ACTION + '. \
			';

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



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

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

};
// Dsq.Post


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

	
	this.adminIsOn = false;

	
	
	

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	return obj;
}();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	return obj;
}();


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





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

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

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

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

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

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





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

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

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

})();

Dsq.container.className = "clearfix";
Dsq.container.innerHTML = ' \
<ul id="dsq-comments">\
	 <li id="dsq-comment-10819056">\
	 <div id="dsq-comment-header-10819056" class="dsq-comment-header">\
	 <cite id="dsq-cite-10819056" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10819056">Had_to</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10819056" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10819056" class="dsq-comment-message">vise-like grip.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10814121">\
	 <div id="dsq-comment-header-10814121" class="dsq-comment-header">\
	 <cite id="dsq-cite-10814121" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10814121" href="http://www.ignimedia.com/" target="_blank" rel="nofollow">igniguy</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10814121" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10814121" class="dsq-comment-message">His points are valid. Phones should use web technologies, and, although google advocates it, android does not offer a \'web based\' framework to build apps on. There are projects like Phonegap (<a href="http://phonegap.com" rel="nofollow">http://phonegap.com</a>) that do just that: allow you to build conventional HTML based apps on iPhone or Android that can make use of all the phones capabilities.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10814810">\
	 <div id="dsq-comment-header-10814810" class="dsq-comment-header">\
	 <cite id="dsq-cite-10814810" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10814810" href="http://www.crv.com/" target="_blank" rel="nofollow">George Zachary</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10814810" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10814810" class="dsq-comment-message">My prediction is that Palm will displace RIM/Blackberry and Apple in the smartphone market in the next 3 years.  WebOS and the Pre are one revolutionary generation in front of both.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10814986">\
	 <div id="dsq-comment-header-10814986" class="dsq-comment-header">\
	 <cite id="dsq-cite-10814986" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10814986">Aaron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10814986" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10814986" class="dsq-comment-message">"You can have a developer working on web work in Java, another working on middleware in Java, and another on the desktop in Java, but none of them have the knowledge to be effective in each of the other areas."<br><br>That is an absolutely ridiculous statement.  If your java developer can\'t be effective in all of these area, you hired a shitty java developer.<br><br><br>"However, Sepulveda says WebOS is much easier for most up-and-coming developers than Android because its core elements — Javascript, HTML and CSS — are better understood by them. Android is based on Java, which is a language known by lots of developers, but it’s also a beast to grasp."<br><br>Absurd as well.  Java is far easier to program with than using JS/HTML/CSS.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10947281">\
	 <div id="dsq-comment-header-10947281" class="dsq-comment-header">\
	 <cite id="dsq-cite-10947281" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10947281">Ryan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10947281" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10947281" class="dsq-comment-message">Why do you think so many people go with PHP over Java for web development?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10974563">\
	 <div id="dsq-comment-header-10974563" class="dsq-comment-header">\
	 <cite id="dsq-cite-10974563" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10974563">Aaron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10974563" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10974563" class="dsq-comment-message">PHP is much more designed for rendering HTML, JS, and CSS.   In other words it ties into (required) client technologies better.  <br><br>That being said, I see no reason a new web developer should learn php.  Ruby or python (esp. with a good framework) are much better choices</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10974573">\
	 <div id="dsq-comment-header-10974573" class="dsq-comment-header">\
	 <cite id="dsq-cite-10974573" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10974573">Aaron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10974573" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10974573" class="dsq-comment-message">In other words, the reason for PHP is solely because it is easier to render client pages with it.  It does NOT mean that a phone should be using client technologies as opposed to, say, java or .NET</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10815538">\
	 <div id="dsq-comment-header-10815538" class="dsq-comment-header">\
	 <cite id="dsq-cite-10815538" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10815538" href="http://www.facebook.com/people/Chris-Spencer/1463444015" target="_blank" rel="nofollow">Chris Spencer</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10815538" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10815538" class="dsq-comment-message">Yes it\'s easier but it\'s not even close to as capable.<br><br>The phone isn\'t much more than a souped up web browser. <br><br>So no, it\'s not going to touch the iPhone except in apps that are just connections into a web presence.<br><br>It may catch up to Apple on this but it will take a long time to see that happen.<br><br>Because the smart phone is now just a mobile computer, I think the players will be Microsoft, Apple, and Google (representing Linux).    Apple has a good head start and Microsoft is severely lagging.  Google is accelerating and may get enough momentum to take the lead....but I wouldn\'t bet on it.<br><br>The phones are each sticky, meaning users will be resistant to jumping camps so at least for now Apple\'s early lead is a huge advantage....but they were in the boat with early Apple II\'s years ago and they blew it.  If they look hard at why they blew it...they might figure out a way to keep history from repeating.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10815815">\
	 <div id="dsq-comment-header-10815815" class="dsq-comment-header">\
	 <cite id="dsq-cite-10815815" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10815815" href="http://www.thenetworkgarden.com" target="_blank" rel="nofollow">hypermark</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10815815" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10815815" class="dsq-comment-message">These things always come down to the ecosystem and SDK.  If Pre can show how they make it easy for the pre-existing web developers not to have to learn a new methodology to be mobile broadband ready (while getting full benefits of marketplace, distribution, e-wallet), then they have a chance, as there are a lot of LAMP types that are sitting on the sidelines wrt mobile because they don\'t want to learn another methodology.<br><br>Now obviously they face a tremendous chicken/egg wrt attracting both consumers and developers, since consumers now see this as an apps play, and all of the apps are on iPhone.  Plus, apps developers can develop and reach a footprint of 40M iPhone/iPod touch devices, which is pretty darn compelling.<br><br>Either way, it is not a foregone conclusion of zero sum, save for skepticism that RIM can penetrate consumer base at this level (disclaimer: I am a happy BB owner and iPod touch owner) and questions whether Java will be an Achilles heel for Android.  <br><br>I would say that as a Ruby on Rails shop, it is unsurprising that Pivotal Labs sees Pre/WebOS as the preferred development model.  <br><br>Some fodder on Apple Worldwide Developer Conference this week, which provides relativity to this topic can be found here:<br><br>Apple WWDC Keynote Analysis: Punishing the Wizard, Part Two <br><a href="http://bit.ly/2lC3yC" rel="nofollow">http://bit.ly/2lC3yC</a> <br><br>Check it out if interested.<br><br>Cheers.<br><br>Mark</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10818718">\
	 <div id="dsq-comment-header-10818718" class="dsq-comment-header">\
	 <cite id="dsq-cite-10818718" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10818718">jd</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10818718" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10818718" class="dsq-comment-message">Developing on the Pre first is just bad advice. Ease of development should be pretty low on the list of factors.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10825874">\
	 <div id="dsq-comment-header-10825874" class="dsq-comment-header">\
	 <cite id="dsq-cite-10825874" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10825874">Christian Sepulveda</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10825874" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10825874" class="dsq-comment-message">I think it depends on your goals. Many of the people we meet have an idea, but lack a coherent application definition -- user interaction, details on features, etc. <br><br>It is really useful to be able to iterate and experiment  and evolve your application and to discover (t0 a degree) the best user experience for your idea.<br><br>The cost of development is going to either enable or restrict an application\'s ability to converge on what ultimately succeeds.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10820012">\
	 <div id="dsq-comment-header-10820012" class="dsq-comment-header">\
	 <cite id="dsq-cite-10820012" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10820012">SU</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10820012" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10820012" class="dsq-comment-message">Umm... you are making the assumption that "easy development" is the sole thing that will attract developers.<br><br>More important than the ease of development, Apple just announced that their user base for the iPhone/iPod Touch is 40 Million!<br><br>THAT\'s what attracts developers. Money.<br><br>Not exclusively, but it\'s huge motivator. How long will it take for the Pre to get a user base that is even a reasonable fraction of that?<br><br>This logical failure just makes the rest of the article look like a Pre puff piece.... oh, perhaps that\'s what it was.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10825779">\
	 <div id="dsq-comment-header-10825779" class="dsq-comment-header">\
	 <cite id="dsq-cite-10825779" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10825779">Christian Sepulveda</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10825779" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10825779" class="dsq-comment-message">I agree the iPhone market attracts developers, but it is hard to stand out in the 50,000 apps in the App Store. So unless the developer has a business model and promotion/marketing plan, it is really hard to make money in the App Store.<br><br>The Palm Pre doesn\'t need 40 million users to be attractive. For a lot of developers, if they are on the device early, they can accumulate good reviews and lots of downloads early. As the market grows, so does their opportunity to charge or make money via other means. <br><br>I know a variety of iPhone app developers, who were out at launch and established their app early. In those cases, their app continues to make money today. However, some of those same developers released other apps, and they got lost in the noise of the App Store and have not made any real return on those later apps. (As a note, many of their later apps were actually a lot better --- but it was too hard to get anyone to see them.)<br><br>There are hundreds of millions of web users, but how easy is it to make money when you launch a new web app?<br><br>But I think interest in the platform is what drives a lot of developers and it will be a personal preference to develop for iPhone, webOS, Android or Blackberry.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11510276">\
	 <div id="dsq-comment-header-11510276" class="dsq-comment-header">\
	 <cite id="dsq-cite-11510276" class="dsq-comment-cite">\
	 <a id="dsq-author-user-11510276" href="http://www.facebook.com/people/Azam-Khan/3623416" target="_blank" rel="nofollow">Azam Khan</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11510276" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11510276" class="dsq-comment-message">Ok first of all - I see all this talk about \'getting lost in the noise\'. Well welcome to the real goddamn world. You can\'t just build something and expect it to do well. Look at Facebook apps. Do most of them gain such a large distribution just because they are great quality? NO. A tremendous amount of resources are put into distribution. yes, on Facebook distribution is more of a mathematical formula as opposed to in the iPhone world - where word of mouth, marketing and publicity play a bigger role. There are many things one must do. One key area that is lacking is marketing for iPhone apps and that\'s really what developers need to focus on building partnerships for. <br><br>Remember youtube videos and the techcrunch article where the guy talked about how he made youtube videos go viral and that requires a lot of people posting links on forums and what not to reach a critical mass? So yes, social media and WOM and all that can help spread the word of a product thats truly <br>remarkable (Seth Godin talks a lot about this) but you need to invest money in distribution - and for iphone thats more of an art compared to Facebook which is more of a science. <br><br>Also what about platforms such as openfeint within iPhone? that might help eh? Palm will never have the community iPhone will.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10820718">\
	 <div id="dsq-comment-header-10820718" class="dsq-comment-header">\
	 <cite id="dsq-cite-10820718" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10820718" href="http://twitter.com/maniacdev" target="_blank" rel="nofollow">Johann Döwa</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10820718" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10820718" class="dsq-comment-message">Going by  Palm\'s stock price the Pre is already a winner.  As above 40 million iPods/iPod Touches is probably why most developers won\'t even take a sniff at the Pre.  Also, products designed with html/javascript can run and be sold in the iPhone app store.. there\'s been frameworks for doing that for quite some time.  If that\'s supposed to be what sets the Pre apart for developers... well good luck with that.<br><br>That being said I like the Pre, and there could be some profitable niches to exploit in the Palm\'s app store.. although the ratio of Pre\'s/Developers looks like it could be worse than the ratio of iTouch+iPhones/Developers with all the WebOS hoopla.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10820976">\
	 <div id="dsq-comment-header-10820976" class="dsq-comment-header">\
	 <cite id="dsq-cite-10820976" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10820976">Aaron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10820976" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10820976" class="dsq-comment-message">SU/Johann: There are also 20,000 apps.  You\'ll stand out from the crowd much easier if you develop for the Pre</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10821828">\
	 <div id="dsq-comment-header-10821828" class="dsq-comment-header">\
	 <cite id="dsq-cite-10821828" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10821828">SU</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10821828" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10821828" class="dsq-comment-message">Aaron and Johann,<br><br>Agreed. What\'s interesting about this article is the direct correlation between developer interest and platform success.<br><br>I don\'t believe it is anywhere near this simple.<br><br>So yes, being the first to launch an app on Pre would be a good position to be in - at least for the short term. But that is *not* the same thing as the success of the platform in general. There\'s obviously a connection between customer interest and developer interest. We could also go down the chicken / egg path of arguing which is more important for the success of the platform.<br><br>But I believe that the sheer momentum of the iPhone/Touch market is enough to propel it a long way and will make it very tough for Pre, Android or any other competitor to catch up. Now that Apple has added some significant features and developer candy in iPhone OS 3 I wouldn\'t want to be backing any other company at this time.<br><br>All the new USB/bluetooth hardware tricks and the trickle / subscription pay models introduced with iPhone 3 are exciting developers at a time that Pre needs to be attracting them.<br><br>I figure that Apple is going to have to go stagnant for a *long* time OR a game-changing technology  / paradigm shift will have to show up in order to unseat Apple.<br><br>it\'s going to be interesting to watch though.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10826032">\
	 <div id="dsq-comment-header-10826032" class="dsq-comment-header">\
	 <cite id="dsq-cite-10826032" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10826032">Christian Sepulveda</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10826032" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10826032" class="dsq-comment-message">I agree with much of what you wrote. On your last point though, no one has to unseat Apple to be a success -- it is not  zero-sum game. <br><br>Some are predicting the smartphone market, particularly in the US, is growing by as much as 70% this year.  (<a href="http://www.engadget.com/2009/02/04/phone-shipments-plunge-12-6-percent-year-over-year-in-q4-08/" rel="nofollow">http://www.engadget.com/2009/02/04/phone-shipme...</a>). There is room for many of the platforms to succeed.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10826210">\
	 <div id="dsq-comment-header-10826210" class="dsq-comment-header">\
	 <cite id="dsq-cite-10826210" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10826210">Aaron</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10826210" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10826210" class="dsq-comment-message">The android market already has 6,000. apps.  Sure most are crap (like the iphone app store), but there are enough in there to do almost everything I want.  I imagine Pre will rapidly ramp up on apps as well.  The ability to make custom background apps alone should more than justify the lack of hardware tricks.  <br><br>I don\'t see a lack of apps as hurting the other markets (Pre/Android/win mobile).  I see only a (perceived) crumminess of the device.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10821867">\
	 <div id="dsq-comment-header-10821867" class="dsq-comment-header">\
	 <cite id="dsq-cite-10821867" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10821867" href="http://maniacdev.com" target="_blank" rel="nofollow">maniacdev</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10821867" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10821867" class="dsq-comment-message">Aaron, I believe the number is over 40,000 apps now.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10824223">\
	 <div id="dsq-comment-header-10824223" class="dsq-comment-header">\
	 <cite id="dsq-cite-10824223" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10824223">slappy</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10824223" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10824223" class="dsq-comment-message">Pre has a long way to go. After Monday it\'s 15 min of fame ended.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10837060">\
	 <div id="dsq-comment-header-10837060" class="dsq-comment-header">\
	 <cite id="dsq-cite-10837060" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10837060">HK</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10837060" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10837060" class="dsq-comment-message">This is absurd.   Since the Pre does not have Java, or C/C++ to write applications, complex applications can not be written.  Simple apps can be done quickly, that\'s about it. <br><br>For example, many of the good games on the iPhone or Android can never be written for the Pre.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10838147">\
	 <div id="dsq-comment-header-10838147" class="dsq-comment-header">\
	 <cite id="dsq-cite-10838147" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10838147">Derek</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10838147" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10838147" class="dsq-comment-message">"Android has a clear vision, but its framework is still a challenge for most developers to get their head around. "<br><br>This is a silly statement. Did the author actually talk to any Android developers? I develop for Android and have a friend who develops for iPhone. I can tell you that getting up and running writing native apps with Android is far easier. It was not a challenge to get my head around it.<br><br>As for luring devs with money, Google just announced the second Android Developer Challenge, with something like $2 million in total prize money. That might be enough to lure some devs to the platform.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10845966">\
	 <div id="dsq-comment-header-10845966" class="dsq-comment-header">\
	 <cite id="dsq-cite-10845966" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10845966" href="http://www.facebook.com/people/Matthaus-Krzykowski/1230725576" target="_blank" rel="nofollow">Matthäus Krzykowski</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10845966" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10845966" class="dsq-comment-message">Hi Derek,<br>as VB\'s resident Android fanboy until I met Christian on Thursday I agreed with Rich Miner statement we cited above that "Android is the best platform to build and iterate on". As you also  say writing native apps with Android is far easier.<br><br>However, I find in discussions that it is still a minority opinion. That\'s what Matt\'s above statement refers to.<br><br>After talking to Christian, who\'s one of the first developers to comment on his with WebOS, I\'ve got reasons to believe that WebOS has some advantages which make prototyping and testing easier vis-a-vis Android.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10840714">\
	 <div id="dsq-comment-header-10840714" class="dsq-comment-header">\
	 <cite id="dsq-cite-10840714" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10840714" href="http://www.facebook.com/people/Vance-Souders/1268568911" target="_blank" rel="nofollow">Vance Souders</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10840714" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10840714" class="dsq-comment-message">@HK - I also worry that the upcoming Pre SDK will not allow developers to write close enough to the metal to create sophisticated games or complex applications.  It\'s possible that Palm doesn\'t see games as important to their target demographic or that they don\'t want to risk having applications running that can crash the device or put it into a modal state.  <br><br>Christian, you mentioned that the smartphone market is expected to grow about 70% this year.  I would expect that many of those growth users are not going to be business users and that applications such as games are going to be very, very important to capturing a slice of that market.  As a game developer, I would love to see Palm open up the SDK enough to put that nice graphics core to work.<br><br>We have avoided developing for the iPhone because of the poor signal to noise ratio in the app store.  Here\'s are some of the trends we expect to see in regard to iPhone development over the next 12 months.<br><br>1) The downward pressure on App prices and poor ROI in the near term is going to continue the poliferation of "ringtone apps".<br><br>2) Once the ringtone apps stop bringing in any money (if they ever did for most people), the quick-buck developers will leave the platform.<br><br>3) After the ringtone app developers flee the platform, it leaves it open to the more serious development efforts. The problem is that pricing model is heavily tilted toward the very inexpensive or free apps. So, I think it will be very, very hard for developers to charge $30.00 or more on the platform to recover the costs of sophisticated development.<br><br>4) It will be interesting to see what this means for games. Even though platforms like the PSP have a smaller installed base, the consumer has been conditioned to expect higher prices for the experience and you certainly have a more targed demographic. I wouldn\'t be surprised if the ROI was way better on the PSP/PSP Go in the near future than on the iPhone.<br><br>5) It\'s possible that micropayments might help recover the cost of development for some games and applications but I still think that\'s a long shot for the majority of developers.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10841611">\
	 <div id="dsq-comment-header-10841611" class="dsq-comment-header">\
	 <cite id="dsq-cite-10841611" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10841611">Christian Sepulveda</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10841611" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10841611" class="dsq-comment-message">I do think many smartphone buyers will be looking for games, but I think many are also looking to "keep connected".  They want email, news, twitter, stocks, etc. They want to view their family photos and videos on a good screen. <br><br>For these users, I think Palm has an edge. I one of the crazy people who waited on line for the iPhone launch two years ago, but I have happily given up my iPhone for a Pre. Having multiple applications open makes it easy to quickly check my email, twitter, latest news, etc. I keep Evernote open to capture random thoughts or to-dos.<br><br>I also spend a lot more time with my Pre -- the experience is much stickier whereas the iPhone was get-in and get-out, at least for me. <br><br>On the game question, it will be interesting to see how Palm responds to the soon-to-be gray market; Doom has already been hacked into the Pre. <br><br>I also think all the App Catalog/Store/World/etc are really inefficient, at least right now. Apple, Palm, RIM and Google could do a lot more to help users find the apps they are interested in. The result would be good for everyone -- more sales and happier users. That could also help change the economic incentives for developers.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10886627">\
	 <div id="dsq-comment-header-10886627" class="dsq-comment-header">\
	 <cite id="dsq-cite-10886627" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10886627">Vance Souders</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10886627" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10886627" class="dsq-comment-message">I agree that the Pre provides a great experience and the "keep connected" crowd will be hooked once they get a taste of Pre\'s multitasking.  <br><br>The issue I have with the lack of games (and I am certainly biased) is that games move hardware.  Even if you don\'t play games, they give the consumer the impression of a powerful, modern device.  Multitasking aside, the average consumer won\'t be able to tell the difference between a Twitter client on Palm vs Apple, but they will notice the difference between Connect 4 (the only game on the Pre - although I understand more are coming) VS hardware accelerated 3D on the iPhone.<br><br>Also, I would bet that eventually XNA, Windows Mobile 7 and the XBOX ecosystem are going to collide (Late 2010?).  The Zune HD is already a very early step in this direction.  The clock is seriously ticking and the ball really is in Palm\'s court.  They have a great device, a very compelling platform but we\'ve all seen compelling, sophisticated platforms dissolve right out of the market (Amiga?).<br><br>As for the grey market, my guess is that Palm will ignore it.  Unless it becomes very, very easy to modify the device, I think it will represent a very small percentage of the installed base.<br><br>-Vance</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10876295">\
	 <div id="dsq-comment-header-10876295" class="dsq-comment-header">\
	 <cite id="dsq-cite-10876295" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10876295">Danstl</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10876295" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10876295" class="dsq-comment-message">Well for those who thing the pre is just css/js/html you are wrong.  People have already gotten DOOM to run with hardware accel  this is a big deal. The initial API will be css/js/html, but they will allow direct hardware APIs.  Remember this is just running linux, so there are millions of devs out there with knowledge of the underbelly of the pre.<br><br>Face it, the pre offers a great dev platform for web-scrape apps (most iphone apps) that can be powered by css/js/html - web 2.0 people... Are you living under a rock?  Google just announced html5 is the new application platform - the pre is already there...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10876541">\
	 <div id="dsq-comment-header-10876541" class="dsq-comment-header">\
	 <cite id="dsq-cite-10876541" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10876541">chleoku</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10876541" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10876541" class="dsq-comment-message">Cool Palm Pre and iphone comparison<br><br><a href="http://www.wealthalchemist.com/Blog/2009/06/palm-pres-coming-party-june-6th/" rel="nofollow">http://www.wealthalchemist.com/Blog/2009/06/pal...</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10877393">\
	 <div id="dsq-comment-header-10877393" class="dsq-comment-header">\
	 <cite id="dsq-cite-10877393" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10877393">slappy</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10877393" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10877393" class="dsq-comment-message">The Pre has very little to offer to users over the iPhone. Already AT&T is sold out of iPhone 3G S.  Just announced today.  iPhone just offers much more for users and leads the pack in OS and UI advantages.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10888769">\
	 <div id="dsq-comment-header-10888769" class="dsq-comment-header">\
	 <cite id="dsq-cite-10888769" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10888769">benjitek</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10888769" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10888769" class="dsq-comment-message">I think this posting is just a bunch of hot air ;)  The Pre, like WinMo, will be out in many form factors -- preventing standardization of accessories, etc, that have made iPhones & iPods &gt;the&lt; standard.  I doubt we\'ll be seeing dedicated PalmPorts in cars anytime soon.<br><br>Having pre-ordered a iPhone 3Gs, I\'m floored at the wide availability of accessories and addons from my new toy, especially having come from being a longtime WinMo user.  A very slick leather case for $14, with free shipping -- comeption is great.  I\'m used to purchasing a device and hoping it becomes popular enough for stuff to come out for it, and then paying much more that that.  As a consumer, I want it all as easy as possible -- and I seem to have stumbled upon just that.  As this trend continues,  it\'ll only get better.<br><br>Not that the Palm stuff won\'t catch on and find a market, but it ain\'t killin no iPhones :)  Android, Windows Mobile, Symbian, Palm and others are pretty much just diluting what\'s left over...</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10901343">\
	 <div id="dsq-comment-header-10901343" class="dsq-comment-header">\
	 <cite id="dsq-cite-10901343" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10901343" href="http://worstiphoneapps.blogspot.com/" target="_blank" rel="nofollow">Chris</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10901343" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10901343" class="dsq-comment-message">The Palm Pre is such a me-too phone, why not buy the original from Apple with a faster chip<br><br>Chris<br><a href="http://worstiphoneapps.blogspot.com" rel="nofollow">http://worstiphoneapps.blogspot.com</a></div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10947453">\
	 <div id="dsq-comment-header-10947453" class="dsq-comment-header">\
	 <cite id="dsq-cite-10947453" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10947453">Ryan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10947453" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10947453" class="dsq-comment-message">Maybe people want to avoid AT&T?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11858473">\
	 <div id="dsq-comment-header-11858473" class="dsq-comment-header">\
	 <cite id="dsq-cite-11858473" class="dsq-comment-cite">\
	 <span id="dsq-author-user-11858473">remon</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11858473" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11858473" class="dsq-comment-message">The Pre is just as much a me-too copy of the iPhone as the iPhone is a me-too copy of Windows Mobile.<br><br>Think they really are the same?  Try running Pandora while navigating on the iPhone.<br><br>Or try going back to the contact you last worked with after you looked something up on the web.<br><br>These aren\'t exotic examples of what you might expect to do on a PDA.<br><br>I\'m not trying to knock the iPhone. I think it is a great phone. But Apple has some catching up to do with WebOS. The notification feature of the iPhone is not a very good substitute for running multiple apps concurrently.<br><br>All of which is to say: The pre is no me-too phone.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10901422">\
	 <div id="dsq-comment-header-10901422" class="dsq-comment-header">\
	 <cite id="dsq-cite-10901422" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10901422" href="http://blog.shonzilla.com" target="_blank" rel="nofollow">shonzilla</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10901422" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10901422" class="dsq-comment-message">Palm WebOS may find competition in #Android Scripting Env supporting Python,  Lua, BeanShell (TODO: Ruby & JavaScript). I hope, Groovy too.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10949533">\
	 <div id="dsq-comment-header-10949533" class="dsq-comment-header">\
	 <cite id="dsq-cite-10949533" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10949533">Sivan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10949533" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10949533" class="dsq-comment-message">To the comment about games driving hardware sales: this is an argument that surfaced when PCs were being commoditized a few years ago. By contrast, smartphones can be seen as an extreme form of mobile computing with plenty of innovation ahead to overcome miniaturization, performance and cost challenges.<br><br>I\'ve surveyed the applications I most use on my G1 and could not think of one not suitable for webOS development. The issue of games elludes me as I\'m not a gamer, I mostly read and communicate using these devices.<br><br>I do wonder about networking and graphics programming on webOS but, excluding games and VoIP (which carriers resent), how much is left that\'s not possible in mobile applications?</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10958281">\
	 <div id="dsq-comment-header-10958281" class="dsq-comment-header">\
	 <cite id="dsq-cite-10958281" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10958281" href="http://www.facebook.com/people/Vance-Souders/1268568911" target="_blank" rel="nofollow">Vance Souders</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10958281" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10958281" class="dsq-comment-message">Sivan,<br><br>I really think it\'s more about perception and how games and other high end software shift that perception of the device.  I\'m already seeing articles like this one:<br><br><a href="http://www.pcmag.com/article2/0%2C2817%2C2348658%2C00.asp" rel="nofollow">http://www.pcmag.com/article2/0,2817,2348658,00...</a><br><br>From the article:<br><br>"This is not a subtle distinction, either. Apple has evolved the iPhone in ways that we could not have imagined when it came out two years ago. The new OS 3.0 games are 3D in nature and provide a rich game experience similar to that on a PC. Games on other smartphones are weak by comparison."<br><br>...<br><br>"It\'s unfair to Palm to ask whether the Pre is an iPhone killer. In fact, even trying to put it in the same class as the iPhone is dooming it to failure. The Pre and others are excellent smartphones, but they\'re phones, not PC platforms. "<br><br>Not good.  They are basically putting the Pre into the toy category while the iPhone gets put into the pocket computer category.  You and I know that both devices have very similar hardware (I believe the CPU and GPU are actually the same or very similar).  <br><br>We\'re going to see more and more of this chasm between full featured desktop class operating systems running on mobile hardware and everyone else.  Apple clearly has a desktop OS running at the heart of the iPhone.  I don\'t know enough about Palm\'s WebOS to know where it falls but the media is starting to make the call based on what they see (or don\'t see) running on the devices.  As an aside, Microsoft is at a cross-roads with Windows Mobile.  In my opinion, Microsoft really should move away from a seperate code base and put a trimmed down version of Windows 7 on mobile hardware.  Of course, I\'m not sure how you would support all of the existing software written for Windows Mobile 6.5 and lower (VM maybe?).  Then there\'s the cost to retool the development pipeline.  Sounds complicated, which is why the momentum and excellent development tools that gave Windows Mobile an advantage in the past is likely one of the things holding it back from making the necessary transition away from the WinCE core.<br><br>In any case, it will be a very interesting generation of devices.  As a note, I use a Palm Pre as my primary device and despite the somewhat flaky build quality (everything is loose - it feels like it will explode into atoms if I drop it), I love it.<br><br>-Vance</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10960690">\
	 <div id="dsq-comment-header-10960690" class="dsq-comment-header">\
	 <cite id="dsq-cite-10960690" class="dsq-comment-cite">\
	 <span id="dsq-author-user-10960690">Sivan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10960690" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10960690" class="dsq-comment-message">The iPhone may indeed be a mobile PC but the trend on full fledged PCs has been clearly moving toward web apps replacing desktop ones.<br><br>Why is this so, and remembering that it was their success that has pushed the browser platform forward and not vice versa? The ease of iteration on the web was originally not because of ease of development, but of deployment.<br><br>App stores and OTA updates have made deployment trivial, whether on the iPhone or the Pre. What\'s left is the ease of development in a dynamic language and a an army of developers that will have a short ramp up time to start developing for the Pre. If Palm can capitalize on that it has a shot at succeeding.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-10999838">\
	 <div id="dsq-comment-header-10999838" class="dsq-comment-header">\
	 <cite id="dsq-cite-10999838" class="dsq-comment-cite">\
	 <a id="dsq-author-user-10999838" href="http://www.facebook.com/people/Jim-Goodlett/557111035" target="_blank" rel="nofollow">Jim Goodlett</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-10999838" class="dsq-comment-body">\
	 <div id="dsq-comment-message-10999838" class="dsq-comment-message">Matt, well researched article that presents a smarting balance of the issues at bay...for $PALM, not having a plethora of apps on their marketplace is more an opportunity than an issue!<br><br>thanks again for the smarting read!</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11836843">\
	 <div id="dsq-comment-header-11836843" class="dsq-comment-header">\
	 <cite id="dsq-cite-11836843" class="dsq-comment-cite">\
	 <span id="dsq-author-user-11836843">mbldev</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11836843" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11836843" class="dsq-comment-message">Let me first state that I think that the Palm WebOS is extremely innovative and creative.  But to compare the Pre to the iPhone is like comparing the success of Tiger Woods to a first year college player.  The problem for Palm that they will likely never overcome is that apple and windows mobile has the attention of the development community and they will simply never catch up from an apps standpoint, which is what people seem to want these days.  Let\'s see what happens, but I don\'t think it looks good for the Pre or any future WebOS phone.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11837815">\
	 <div id="dsq-comment-header-11837815" class="dsq-comment-header">\
	 <cite id="dsq-cite-11837815" class="dsq-comment-cite">\
	 <span id="dsq-author-user-11837815">Sivan</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11837815" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11837815" class="dsq-comment-message">The argument that Palm is doomed because of the size of the iPhone market is belied by Apple\'s history. 10 years ago Apple was in the same position as Palm. Windows had the attention of developers and it was the main argument against Apple.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11858065">\
	 <div id="dsq-comment-header-11858065" class="dsq-comment-header">\
	 <cite id="dsq-cite-11858065" class="dsq-comment-cite">\
	 <span id="dsq-author-user-11858065">remon</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11858065" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11858065" class="dsq-comment-message">Absolutely right! It is a logical fallacy that an initial lack of apps relative to the competition means the phone won\'t succeed, and the iPhone is the best proof of that.<br><br>But it is very important that lots of apps get written for the new machine. And one of the factors that determines how many apps are written for it is how easy it is to develop for it. I think that javascript/html/css is a pretty smart choice. Objective C has a steep learning curve, and the number of apps that crash on startup is a testament to that fact.</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-11866303">\
	 <div id="dsq-comment-header-11866303" class="dsq-comment-header">\
	 <cite id="dsq-cite-11866303" class="dsq-comment-cite">\
	 <span id="dsq-author-user-11866303">coolfx35</span>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-11866303" class="dsq-comment-body">\
	 <div id="dsq-comment-message-11866303" class="dsq-comment-message">Ok so I just realized how much I miss having a custom tone for text messages... I know the standard one is very clean and fits in with the whole theme of the phone very well but with all the customization options on the Pre I can\'t imagine why the only thing you can select for are phone calls.<br><br>I\'m pretty sure if people are vocal enough about such an easy change then Palm will respond fairly quickly.<br><br><a href="http://www.palmpreforum.org" rel="nofollow">http://www.palmpreforum.org</a>  This is all about the plam pre</div>\
	 </div>\
	 </li>\
	 <li id="dsq-comment-16041065">\
	 <div id="dsq-comment-header-16041065" class="dsq-comment-header">\
	 <cite id="dsq-cite-16041065" class="dsq-comment-cite">\
	 <a id="dsq-author-user-16041065" href="http://www.thegeniusfiles.com" target="_blank" rel="nofollow">thegeniusfiles</a>\
	 </cite>\
	 </div>\
	 <div id="dsq-comment-body-16041065" class="dsq-comment-body">\
	 <div id="dsq-comment-message-16041065" class="dsq-comment-message">Palm has one advantage over Apple: they don\'t sell laptops or desktops. Apple won\'t want to cannibalize sales of those items by making the iPhone too powerful. Palm doesn\'t have that concern. The Pre, and successive iterations of WebOS devices, has the potential to become a true primary computing device as I describe in this blog post: <a href="http://www.thegeniusfiles.com/thoughts-on-using-palm-pre-as-my-primary-comp" rel="nofollow">http://www.thegeniusfiles.com/thoughts-on-using...</a></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=venturebeat&t=has_the_palm_pre_already_beaten_the_iphone_94&to_redirect=' + encodeURIComponent(window.location) + '&ifrs=' + encodeURIComponent(disqus_iframe_css);
			}
		}
	}

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

	



	window.ExecuteWhen = (function () {
	var obj = {}
	
	// Private
	var running = false;
	var timer = null;
	var pending = [];
	var startTimer = function() {
		running = true;
		timer = setInterval(obj.heartBeat, 100);
	};
	var stopTimer = function() {
		running = false;
		clearInterval(timer);
	};
	
	// Public
	obj.add = function (condition, code) {
		pending.push([condition,code]);
		this.heartBeat(); //!
		if (!running) {
			startTimer();
		}
	};
	obj.heartBeat = function() {
		if (!pending.length) {
			stopTimer();
		}
		var newPending = [];
		for (var i=0; i<pending.length; i++) {
			var cond = pending[i][0];
			var code = pending[i][1];
			// FIXME: if cond or code throw an error, they never get removed from pending
			if (cond()){
				code();
			}
			else {
				newPending.push([cond, code]);
			}
		}
		pending = newPending;
	};
	return obj;
})();

// also used in embed_thread.js:
window.fbIsReady = function () {return window.FB && FB.init;};
// NOTE: This script gets executed again without threadEl
//       set when we are loaded again as the fbc_receiver.
//       In this case, we don't need the hidden container.

if(!window.FB || !FB.init) {
	if(window.Dsq && Dsq.container) {
		// container is not present when init.js is loaded from an xd-receiver iframe; in this case,
		// we don't need the FB_HiddenContainer anyway.
		var fbDiv = document.createElement('div');
		fbDiv.id = "FB_HiddenContainer";	// Required or else FeatureLoader will execute a document.write.
		fbDiv.style.position = 'absolute';	// This is intentionally not setting display to none as this breaks
		fbDiv.style.top = '-10000px';		// Flash in Safari.
		fbDiv.style.left = '-10000px';
		fbDiv.style.width = '0px';
		fbDiv.style.height = '0px';
		Dsq.container.appendChild(fbDiv);
	}
	var fbJS = document.createElement('script');
	fbJS.type = "text/javascript";
	fbJS.src = "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php";
	document.getElementsByTagName('head')[0].appendChild(fbJS);

	ExecuteWhen.add(window.fbIsReady,
		function () {
			// HACK: This is a workaround FBC's single domain limitation by
			//		 allowing sites to create multiple forums with different
			//		 Facebook API keys.  This must be used in conjunction with
			//		 disqus_facebook_forum (see authenticateFacebook).
			var facebook_api_key = '547225e2dda46ccfdec279a9a44a0074';
			if (typeof disqus_facebook_api_key != 'undefined') {
				facebook_api_key = disqus_facebook_api_key;
			}

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


	


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

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

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

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

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

})();




