(function($) {
/**
 * Example script to set up superShare on links
 * <script>
 *	(function($) {
 *		$(document).ready(function() {
 *			$('a[data-share-link]').superShare({
 *				facebook: {
 *					app_id: <your facebook app id>,
 *					redirect_uri: '<?php echo Router::url('/shares/add/facebook', true); ?>',
 *					share: '/engage_cms/trunk/portal/share/facebook'
 *				},
 *				twitter: {
 *					share: '/engage_cms/trunk/portal/share/twitter'
 *				},
 *				email: {
 *					share: '/engage_cms/trunk/portal/share/email'
 *				}
 *			});
 *			});
 *		})(jQuery);
 *	</script>
 */
$.fn.superShare = function(opt) {
	// If this is empty return this and do no extra work.
	if (this.length == 0) {
		return this;
	}
	
	// Set opt to an empty object in the event that no options are passed
	if (opt == undefined) {
		opt = {};
	}

	// Internal bools to check if twttr is loaded and bound
	twttr_loaded = false;
	twttr_bound = false;
	
	// Default settings other than share type settings
	var base_settings = {
	}
	
	// Default settings for the share types
	var settings = {
		url: '',
		facebook: {
			enabled: true,
			//app_id: false,
			redirect_uri: false,
			callback: false,
			share: configuration.base+configuration.portalPrefix+'/share/facebook'
			//share: 'https://www.facebook.com/dialog/feed'
		},
		twitter: {
			enabled: true,
			callback: false,
			load_widget: false,
			share: configuration.base+configuration.portalPrefix+'/share/twitter'
			//share: 'https://twitter.com/intent/tweet'
		},
		email: {
			enabled: true,
			callback: false,
			share: configuration.base+configuration.portalPrefix+'/share/email'
		}
	};
	
	// Default click handlers for the share types
	// Link to be shared is in event.data.article
	var default_handlers = {
		facebook: function(event) {
			var link = event.data.article;
			var url = options.url + options.facebook.share;
			var params = {};
			/*params.app_id = options.facebook.app_id;
			if (!params.app_id) {
				console.error('Must define the app_id to use Facebook share');
				return;
			}
			params.redirect_uri = options.facebook.redirect_uri;
			if (!params.redirect_uri) {
				console.error('Must define the redirect uri the use Facebook share');
				return;
			}*/
			params.display = 'popup';
			params.link = link.attr('href');
			if (link.attr('title')) {
				params.name = link.attr('title');
			}
			if (link.attr('data-title')) {
				params.name = link.attr('data-title');
			}
			if (link.attr('data-description')) {
				params.description = link.attr('data-description');
			}
			if (link.attr('data-caption')) {
				params.caption = link.attr('data-caption');
			}
			var query = '?';
			for (var p in params) {
				query = query + p + '=' + encodeURIComponent(params[p]) + '&';
			}
			query = query.slice(0, query.length - 1);
			var share_window = window.open(url+query, '', 'width=580, height=400, scrollbars=no, resizable=no, menubar=no, titlebar=no, toolbar=no');
			return;
		},
		twitter: function(event) {
			var link = event.data.article;
			var url = options.url + options.twitter.share;

			var params = {};
			params.link = link.attr('href');
			var query = '?';
			for (var p in params) {
				query = query + p + '=' + encodeURIComponent(params[p]) + '&';
			}
			query = query.slice(0, query.length - 1);
			var share_window = window.open(url+query, '', 'width=550, height=420, scrollbars=no, resizable=no, menubar=no, titlebar=no, toolbar=no');
		},
		email: function(event) {
			var link = event.data.article;
			var url = options.url + options.email.share;
			var params = {};
			params.link = link.attr('href');
			if (link.attr('title')) {
				params.title = link.attr('title');
			}
			if (link.attr('data-title')) {
				params.title = link.attr('data-title');
			}
			if (link.attr('data-description')) {
				params.description = link.attr('data-description');
			}
			var query = '?';
			for (var p in params) {
				query = query + p + '=' + encodeURIComponent(params[p]) + '&';
			}
			query = query.slice(0, query.length - 1);
			var share_window = window.open(url+query, '', 'width=550, height=420, scrollbars=no, resizable=no, menubar=no, titlebar=no, toolbar=no');
		}
	}
	
	// All the handlers for the share types. Uses
	// default_handlers if custom one is not passed in
	var handlers = {};
	
	for (var h in default_handlers) {
		if (opt[h] && opt[h].callback) {
			handlers[h] = opt[h].callback;
		} else {
			handlers[h] = default_handlers[h];
		}
	}
	
	// Sets up options variable which is merge of passed
	// in opt var and settings var
	var options = {};
	$.extend(options, base_settings, opt);
	if (opt != undefined) {
		for (var o in settings) {
			if (opt[o] != undefined) {
				$.extend(options[o], settings[o], opt[o]);
			} else {
				options[o] = settings[o];
			}
		}
	}
	
	// Var that holds the dialog dom object so only one
	// is created at any one time.
	var dialog = false;
	
	// Set to true when dialog is currently visible so
	// that it can be hidden before reopened.
	var dialog_displayed = false;
	
	// Builds the block of links and assigns click events
	function build_links(link) {
		var links = [];
		// facebook
		if (options.facebook.enabled) {
			var facebook = $(document.createElement('a')).addClass('shareit-sm').attr('rel', 'shareit-facebook');
			facebook.html('<img src="' + options.url + configuration.base + '/img/supershare/facebook.png" width="32" height="32" alt="Facebook" title="Facebook" />');
			facebook.bind('click', {article: link}, handlers.facebook);
			links.push(facebook);
		}
		// twitter
		if (options.twitter.enabled) {
			if (!twttr_loaded) {
				
			}
			var twitter = $(document.createElement('a')).addClass('shareit-sm').attr('rel', 'shareit-twitter');
			twitter.html('<img src="' + options.url + configuration.base + '/img/supershare/twitter.png" width="32" height="32" alt="Twitter" title="Twitter" />');
			twitter.bind('click', {article: link}, handlers.twitter);
			links.push(twitter);
		}
		// email
		if (options.email.enabled) {
			var email = $(document.createElement('a')).addClass('shareit-sm').attr('rel', 'shareit-mail');
			email.html('<img src="' + options.url + configuration.base + '/img/supershare/email.png" width="32" height="32" alt="Mail" title="Mail" />');
			email.bind('click', {article: link}, handlers.email);
			links.push(email);
		}
		// collection
		var list = $(document.createElement('ul'));
		for (var i in links) {
			list.append($('<li>').append(links[i]));
		}
		return $('<div>').addClass('shareit-icon').html(list);
	}
	
	// Displays dialog, creating it if it doesn't already exist,
	// hides it if it is already shown, and assigns mouseleave
	// event to close dialog
	function display_dialog(event) {
		var article = $(this);
		if (!dialog) {
			dialog = $('<div />').addClass('shareit-box');
			$('<div />').addClass('shareit-header').appendTo(dialog);
			$('<div />').addClass('shareit-body').appendTo(dialog);
			$('body').append(dialog);
		}
		if (!dialog_displayed) {
		//	hide_dialog(span);
		}
		var height = $(this).height();
		var top = $(this).offset().top;
		
		//get the left and find the center value
		var left = $(this).offset().left + ($(this).width() /2) - (dialog.width() / 2);

		dialog.find('.shareit-header').height(height);

		dialog.css({'top':top, 'left':left});
		dialog.show();
		dialog_displayed = true;
		dialog.bind('mouseleave', function(event) {
			dialog.hide();
			//hide_dialog($(this).parent());
		});
		var links = build_links(article);
		dialog.find('.shareit-body').empty().append('<div class="shareit-blank">').append(links);
	}
	
	// Hides the dialog by removing it from the dom and sets
	// dialog_displayed to false
	function hide_dialog(span) {
		span.children('div').empty().remove();
		dialog_displayed = false;
	}
	
	// Called on a collection of links that need to be sharable.
	// Wraps link in a span and adds a sibling share link and
	// icon. Gives icon link a click event to show dialog.
	return this.each(function(i) {
		var self = $(this);
/*
		var wrap = document.createElement('span');
		var image = document.createElement('img');
		image.src = configuration.base + '/img/share.png';
		image.height = 10;
		image.width = 10;
		var share = document.createElement('a');
		share.setAttribute('class', 'share-toggle');
		share.appendChild(image);
		wrap.appendChild(share);
		wrap.appendChild(this.cloneNode(true));
		this.parentNode.replaceChild(wrap, this);
		var share_block = $(wrap);
		share_block.attr('style', 'position:relative;');
		share_block.find('.share-toggle').bind('click', display_dialog) ;
*/
		self
			.bind('mouseenter', display_dialog);
	});

};

}(jQuery));

