(function($) {
	$.fn.socialbar = function(options){
		var config = {
			href:'',
			facebook: {
				sel: '.shareFacebook',
				show: 'true',
				layout: 'button_count',
				showFaces: false,
				font: 'trebuchet ms',
				colorscheme: 'light'
			},
			twitter: {
				sel: '.shareTwitter',
				show: true,
				via: '',
				text: '',
				lang: 'nl'
			},
			linkedIn: {
				sel: '.shareLinkedin',
				show: true
			},
			googlePlus: {
				sel: '.shareGoogle',
				show: true
			},
			print: {
				sel: '.sharePrint',
				show: true
			}
		};
		var $obj;//wordt gevuld met $wrapped obj
		
		if(options) {$.extend(true, config, options);}
		
		function removeLis() {
			//remove niet getoonde items (nodig ivm css-border van 1e item en li padding)
			for (var nm in config) {
				var p = config[nm];
				if (p.sel && !p.show) {
					$(p.sel).remove();
				}
			}
		}
				
		function initFB() {
			var fb = config.facebook;
			var $li = $obj.find(fb.sel);
			if (fb.show) {
				var elm = '<div class="fb-like" data-href="'+config.href+'" data-layout="'+fb.layout+'" data-show-faces="'+fb.showFaces+'" data-font="'+fb.font+'" data-colorscheme="'+fb.colorscheme+'"></div>';
				$li.append(elm);
				
				//fb script inladen werkt op de een of andere manier niet met $.getScript, dus anders doen
				elm = document.createElement('script');
				elm.type = 'text/javascript';
				elm.async = true;
				elm.src = 'http://connect.facebook.net/en_US/all.js#xfbml=1';
				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(elm, s);
			}
		}
				
		function initTwitter() {
			var tw = config.twitter;
			if (tw.show) {
				tw.text = tw.text || config.href;
				var elm = '<a href="http://twitter.com/share" class="twitter-share-button" data-url="'+config.href+'" data-text="'+tw.text+'" data-count="horizontal" data-lang="'+tw.lang+'"';
				if (tw.via) {
					elm += ' data-via="'+tw.via+'"';
				}
				elm += '></a>';
				$obj.find(tw.sel).append(elm);
				$.getScript('http://platform.twitter.com/widgets.js');
			}
		}
				
		function initLinkedin() {
			var ln = config.linkedIn;
			if (ln.show) {
				var elm = '<div>';
				elm += '<script src="http://platform.linkedin.com/in.js" type="text/javascript"></script>';
				elm += '<script type="IN/Share" data-url="'+config.href+'" data-counter="right"></script>';
				elm += '</div>';
				$obj.find(ln.sel).append(elm);
			}
		}
		
		function initGooglePlus() {
			var gp = config.googlePlus;
			if (gp.show) {
				var elm = '<div class="g-plusone" data-href="'+config.href+'"></div>';
				$obj.find(gp.sel).append(elm);
				$.getScript('https://apis.google.com/js/plusone.js');
			}
		}
		
		function printHandler(evt) {
			evt.preventDefault();
			window.print();
		}
		
		function initPrint() {
			var p = config.print;
			if (p.show) {
				var elm = '<a href="#" class="print">Print dit</a>';
				$(elm).appendTo($obj.find(p.sel)).click(printHandler);
			}
		}
		
		//-- Start helper functions --
			function clog(msg) {
				if(typeof(console) !== "undefined") {
					if (typeof(msg) === "string") {
						console.log(msg);
					} else {
						console.dir(msg);
					}
				}
			}
		//-- End helper functions --
	
		function init(obj) {
			$obj = $(obj);
			if (!config.href) {
				config.href = document.location;
			}
			removeLis();
			initFB();
			//*
			initTwitter();
			initLinkedin();
			initGooglePlus();
			initPrint();
			
			//*/
		}
		
		//doe stuff met elk element van wrapped set, en return de set zodat we hem voor chaining kunnen gebruiken
		return this.each(function() {
			init(this);
		});
	};
	
	
	//Nu ready handler definiëren
	jQuery(document).ready(function($) {
		if (typeof(Vara) != "undefined" && Vara.plugins && Vara.plugins.socialbar && Vara.plugins.socialbar.instances) {
			var instances = Vara.plugins.socialbar.instances;
			for (var i=0; i<instances.length; i++) {
				var instance = instances[i];
				$(instance.containerSelector).socialbar(instance.options);
			}
		}
	});

})(jQuery);

