1/*
2 * jquery.socialshareprivacy.js
3 *
4 * Copyright (c) 2012 Mathias Panzenböck
5 *
6 * is released under the MIT License http://www.opensource.org/licenses/mit-license.php
7 *
8 */
9(function ($, undefined) {
10	"use strict";
11
12	var DISQUSWIDGETS = {
13		displayCount: function (data) {
14			var options = requestQueue.shift();
15			$('.social_share_privacy_area .disqus .disqus-widget:not(.init)').each(function () {
16				var $widget = $(this);
17				if ($widget.attr("data-shortname") === options.shortname && $widget.attr("data-uri") === options.uri) {
18					var key = $widget.attr("data-count");
19					var count = data.counts[0][key];
20					var text = data.text[key];
21					var scount = $.fn.socialSharePrivacy.formatNumber(count);
22					$widget.attr('title', count === 0 ? text.zero : count === 1 ? text.one : text.multiple.replace('{num}', scount));
23					$widget.find('.count a').text(scount);
24					$widget.addClass('init');
25				}
26			});
27		}
28	};
29
30	var requestId     = 0;
31	var requestActive = false;
32	var requestQueue  = [];
33
34	function enqueue (options) {
35		options.requestId = String(requestId ++);
36		requestQueue.push(options);
37		if (!requestActive) {
38			request(options);
39		}
40	}
41
42	function request (options) {
43		// this breaks every other usage of the disqus count API:
44		window.DISQUSWIDGETS = DISQUSWIDGETS;
45
46		requestActive = true;
47		var script = document.createElement('script');
48		script.type  = "text/javascript";
49		script.src   = 'http://'+options.shortname+'.disqus.com/count.js?q=1&0=2,'+encodeURIComponent(options.uri);
50		script.async = true;
51		script.setAttribute('data-request-id', options.requestId);
52		script.onload = script.onreadystatechange = script.onerror = requestLoad;
53		(document.head||document.body).appendChild(script);
54	}
55
56	function requestLoad (event) {
57		if (!event) event = window.event;
58		if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete' || event.type === 'error') {
59			this.onload = this.onreadystatechange = this.onerror = requestLoad;
60			var $script = $(this);
61			var requestId = $script.attr('data-request-id');
62
63			if (requestQueue.length > 0 && requestQueue[0].requestId === requestId) {
64				requestQueue.shift();
65			}
66
67			if (requestQueue.length > 0) {
68				request(requestQueue[0]);
69			}
70			else {
71				requestActive = false;
72			}
73		}
74	}
75
76	$.fn.socialSharePrivacy.settings.services.disqus = {
77		'status'            : true,
78		'dummy_line_img'    : 'images/dummy_disqus.png',
79		'dummy_box_img'     : 'images/dummy_box_disqus.png',
80		'dummy_alt'         : '"Disqus"-Dummy',
81		'txt_info'          : 'Two clicks for more privacy: The Disqus button will be enabled once you click here. Activating the button already sends data to Disqus &ndash; see <em>i</em>.',
82		'txt_off'           : 'not connected to Disqus',
83		'txt_on'            : 'connected to Disqus',
84		'perma_option'      : true,
85		'display_name'      : 'Disqus',
86		'referrer_track'    : '',
87		'shortname'         : '',
88		'count'             : 'comments',
89		'onclick'           : null,
90		'button'            : function (options, uri, settings) {
91			var shortname = options.shortname || window.disqus_shortname || '';
92			var $code;
93			if (settings.layout === 'line') {
94				$code = $('<div class="disqus-widget">'+
95					'<a href="#disqus_thread" class="name">Disq<span class="us">us</span></a>'+
96					'<span class="count"><i></i><u></u><a href="#disqus_thread">&nbsp;</a></span></div>');
97			}
98			else {
99				$code = $('<div class="disqus-widget">'+
100					'<div class="count"><i></i><u></u><a href="#disqus_thread">&nbsp;</a></div>'+
101					'<a href="#disqus_thread" class="name">Disq<span class="us">us</span></a></div>');
102			}
103
104			$code.attr({
105				'data-count'     : options.count,
106				'data-shortname' : shortname,
107				'data-uri'       : uri + options.referrer_track
108			});
109
110			if (options.onclick) {
111				$code.find('a').click(typeof options.onclick === "function" ?
112					options.onclick : new Function("event", options.onclick));
113			}
114
115			enqueue({
116				shortname : shortname,
117				uri       : uri + options.referrer_track
118			});
119
120			return $code;
121		}
122	};
123})(jQuery);
124