(function($) {

	$.fn.shareLinks = function(options) {
		// build main options before element iteration
		var opts = $.extend({}, $.fn.shareLinks.defaults, options);
		// iterate and reformat each matched element
		return this.each(function() {

			$container = $(this);
			$container.addClass('ui-share-links').append($('<div class="ui-share-links-prefix">' + opts.prefixText + '</div>'));

			$(opts.services).each(function() {
				var $markup = $.fn.shareLinks.inject(this);

				// build the urls based on service
				var service = this;
				var mask = opts.masks[service];
				var encodedUrl = encodeURIComponent(opts.url);
				var encodedTitle = encodeURIComponent(opts.title);
				mask = mask.replace("{url}", encodedUrl);
				mask = mask.replace("{title}", encodedTitle);

				var name = opts.serviceNames[service] || '';

				var $link = $("<a></a>")
					.attr('href', mask)
					.attr('title', name)
					.attr('alt', name)
					.addClass('ui-share-link').addClass(service);

				// should we open the link in a new tab?
				if(opts.newTab) { 
					$link.attr('target', '_new');
				}

				// build the google events tracking data
				if(opts.gaEvent.label == 'SERVICE') { opts.gaEvent.label = name; }
				if(opts.gaEvent.label == 'TITLE')   { opts.gaEvent.title = title; }
				$link.click(function() {
					try {
						pageTracker._trackEvent(opts.gaEvent.category, opts.gaEvent.action, opts.gaEvent.label, opts.gaEvent.title);
					} catch(err) {}
				});

				// build the label for the serivce
				var $label = $('<span></span>').addClass('ui-share-link-label').append(name);
				$markup.append($link);
				$markup.append($label);
				$container.append($markup);
			});

		});
	};

	//
	// define and expose our inject function
	//
	$.fn.shareLinks.inject = function(service) {
  		return $('<div class="' + service + '"></div>').addClass('ui-share-link-container');
	};

	// plugin defaults
	$.fn.shareLinks.defaults = {
		prefixText: "Share:",
		gaEvent: {
			category: 'Aggregator',
			action: 'Share on Social Network',
			label: 'SERVICE',
			title: 'TITLE'
		},
		masks: {
			ask: "http://myjeeves.ask.com/mysearch/BookmarkIt?v=1.2&t=webpages&url={url}&title={title}",
			bebo: "http://bebo.com/c/share?Url={url}&Title={title}",
			blinklist: "http://www.blinklist.com/index.php?Action=Blink/addblink.php&Url={url}&Title={title}",
			blogmarks: "http://blogmarks.net/my/new.php?mini=1&simple=1&url={url}&title={title}",
			delicious: "http://del.icio.us/post?v=4&partner=[partner]&noui&url={url}&title={title}",
			digg: "http://digg.com/submit?phase=2&partner=[partner]&url={url}&title={title}",
			diigo: "http://www.diigo.com/post?url={url}&title={title}",
			facebook: "http://www.facebook.com/sharer.php?u={url}&t={title}",
			fark: "http://cgi.fark.com/cgi/fark/submit.pl?new_url={url}&new_comment={title}",
			feedmelinks: "http://feedmelinks.com/categorize?from=toolbar&op=submit&url={url}&name={title}",
			friendfeed: "http://friendfeed.com/share?url={url}&title={title}",
			furl: "http://www.furl.net/savedialog.jsp?p=1&u={url}&t={title}&r=&v=1&c=",
			googlebookmarks: "http://www.google.com/bookmarks/mark?op=add&bkmk={url}&title={title}",
			kaboodle: "http://www.kaboodle.com/grab/addItemWithUrl?url={url}&pidOrRid=pid=&redirectToKPage=true",
			linkedin: "http://www.linkedin.com/shareArticle?mini=true&url={url}&title={title}&ro=false&summary=&source=",
			live: "https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={url}&title={title}&top=1",
			magnolia: "http://ma.gnolia.com/bookmarklet/add?url={url}&title={title}",
			myaol: "http://favorites.my.aol.com/ffclient/AddBookmark?url={url}&title={title}&favelet=true",
			myspace: "http://www.myspace.com/Modules/PostTo/Pages/?u={url}&t={title}&c=%20",
			newsvine: "http://www.newsvine.com/_tools/seed&save?u={url}&h={title}",
			reddit: "http://reddit.com/submit?url={url}&title={title}",
			slashdot: "http://slashdot.org/bookmark.pl?url={url}",
			spurl: "http://www.spurl.net/spurl.php?url={url}&title={title}",
			stumbleupon: "http://www.stumbleupon.com/submit?url={url}&title={title}",
			technorati: "http://technorati.com/faves/?add={url}",
			twitter: "http://twitter.com/home?status={url}",
			yahoobookmarks: "http://bookmarks.yahoo.com/toolbar/savebm?opener=tb&u={url}&t={title}",
			yahoobuzz: "http://buzz.yahoo.com/submit?submitUrl={url}&submitHeadline={title}"
		},
		serviceNames: {
			delicious: "Delicious",
			digg: "Digg",
			facebook: "Facebook",
			linkedin: "LinkedIn",
			live: "Live",
			myspace: "MySpace",
			twitter: "Twitter"
		},
		newTab: true,
		services: new Array('delicious', 'digg', 'facebook', 'myspace', 'twitter'),
		title: document.title,
		url: document.location.href
	};

})(jQuery);