(function( $ ){
	/**************************************************\
	*  Plugin Global Variables
	\**************************************************/

	//var variable1 = "variable-value";
	
	/**************************************************\
	*  Plugin Global Constants
	\**************************************************/
	//var DATA_KEY = 'getBgImageUrl';
	//var CONSTANT1 = 'constant-value';
	
	/**************************************************\
	*  Helper functions
	\**************************************************/
	/*
	function registerElement(uniqueId, element){
		registeredElements[uniqueId] = element;
	}
	
	function getRegisteredElement(uniqueId){
		return registeredElements[uniqueId];
	}
	
	function setData(jqQueryElement, data){
		var oldData = jqQueryElement.data(DATA_KEY);
		jqQueryElement.data(DATA_KEY, $.extend(oldData, data));
	}
	
	function getData(jqQueryElement){
		return jqQueryElement.data(DATA_KEY);
	}
	
	function getRandomNumber()
	{
		return Math.floor(Math.random() * 10000001);  
	}
	
	*/
	/**************************************************\
	*  API object of methods for each current element
	\**************************************************/
	/*
	function Api(domElement){
		var $this = $(domElement);
		
		// < Public API functions > 
		this.publicApiMethod1 = function (){
		};
		
		// </ Public API functions  >
		
		//< Private API functions >
		function privateApiMethod1(){
		};
		//</ Private API functions >
	};
	*/
	var methods = {
		init : function( options ) {
			var $this = $(this);
			//var data = null;
			//var newData = null;
			var xoptions = $.extend({}, $.fn.getBgImageUrl.defaults.global, options);
			var bgImageUrl = null;
			var bgImageCss = $this.css('background-image');
			if (bgImageCss){
				var match = bgImageCss.match(/url\("?([^"]*)"?\)/);
				bgImageUrl = (match ? match[1] : null);
			}
			
			if (!(typeof bgImageUrl === 'string')){
				bgImageUrl = '';
			}
			
			return bgImageUrl;
						
			//Ramdom number: not necessarily needed in all plugins. Can be used for autogenerated ids and events ids associated to the current element
			//var ramdomIdNumber = getRandomNumber();  

			//Set element' API
			/*
			setData($this, {
				api: new Api(this)
			});
			*/
			//Bind events for this item. Not all plugins need this
			/*
			$this.bind('<event-name>.<namespace>', function(event){
				//do something
			});
			*/
			//Register this element. This will allow, for instance,  later handling of events triggered externally
			//registerElement(uniqueId, $this);
		},
		destroy : function( ) {
			return this.each(function(){
			 //do stuff
			});
		}/*,
		pluginMethod1: function(options){
			var xoptions = $.extend({}, $.fn.getBgImageUrl.defaults.loadThumbnail, options ); //extended params
		
			return this.each(function(){
				var $this = $(this);
				//Do stuff
				
			});
		}*/
	};

	$.fn.getBgImageUrl = function( method ) {
		if ( methods[method] ) {
		  return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
		  return methods.init.apply( this, arguments );
		} else {
		  $.error( 'Method ' +  method + ' does not exist on jQuery.getBgImageUrl' );
		}    
	};
	
	$.fn.getBgImageUrl.defaults = {
		global: {
			throwExceptions: false
		}
	};
	/*
	$.fn.getBgImageUrl.events = {
		event-name: {
			trigger: function(uniqueId, args){	
				var element = getRegisteredElement(uniqueId);
				element.trigger('<event-name>.<namespace>', args);
			}
		}
	};
	*/
	
})( jQuery );

