(function($){
	
	var app = OPENSPACE;
	
	app.namespace('OPENSPACE.widgets');
	
	app.widgets.Lightbox = function() {
		
		var $lightboxes = $(),
			groupOpts = {},
			$groupOptEls = $('[data-lightbox-group]');
		
		// Public methods
		
		function init($triggerEl) {

			return $triggerEl.colorbox(buildOpts($triggerEl));
		}
		
		function getGroupOptEl(group) {
			
			var $groupOptEl = $groupOptEls.filter(function(){
				return $(this).data('lightbox-group').rel == group;
			});
			
			return $groupOptEl;
		}
		
		function mergeWithGroupOpts(indivOpts, group) {
			
			if(group && groupOpts[group]) {
				return $.extend(true, {}, groupOpts[group], indivOpts);
			} else {
				$groupOptEl = getGroupOptEl(group);
				if($groupOptEl.length) groupOpts[group] = $groupOptEl.data('lightbox-group');
				return $.extend(true, {}, groupOpts[group], indivOpts);
			}
		}
		
		function buildOpts($triggerEl) {
			
			var indivOpts = $triggerEl.data('lightbox'),
				inline = /^#/.test($triggerEl.attr('href')) || (opts && opts.selector) ? true : false,
				group = $triggerEl.attr('rel') || null,
				dataOpts = group ? mergeWithGroupOpts(indivOpts, group) : indivOpts;

			var opts = $.extend({
				inline: inline,
				iframe: !inline,
				href: $triggerEl.attr('href'),
				rel: $triggerEl.attr('rel') || null
			}, dataOpts );

			return opts;
		}
		
		return {
			init : init,
			buildOpts : buildOpts
		}
	}();
	
}(jQuery));
