(function($) {

		
	function open($this, options)
	{
		var data = $this.data('imageselect');
		setPositions(data, options);
		var url = "" + options.selector_url + options.image_type_id + "/page/" + data.page + '/width/' + options.image_width;
		$.get(url, function(rdata) {
			$(data.selectspace).html(rdata);			
			
			$('.imageselectclose').click(function() {			
				close($this, options);
				return false;
			});
			
			$(options.select_image_selector).bind('click.imageselect', function() {
				var simageid = $(this).attr('rel');
				if(simageid)
				{
					lastselect = simageid;
					if(options.update_input_selector)
					{					
						var inp = $(options.update_input_selector);
						if(inp) { inp.val(simageid); }
					}
					
					$.get(options.image_url + simageid + "/width/" + options.image_width, function(data) {
						close($this, options);
						if(jQuery.isFunction(options.selectCallback))
						{
							$(options.display_image_selector).hide();
							$(options.display_image_selector).html(data);
							options.selectCallback(simageid);
						}
						else
						{
							$(options.display_image_selector).html(data);
						}
					});	
				}
				else
				{
					close($this, options);
				}
				return false;
			});	

			$('#uploadform').ajaxForm({
				success: function(rdata) {	
					data = $this.data('imageselect');
					data.page = 1;
					open($this, options);
				}
			});
			
			$('.imagepagenext').bind('click.imageselect', function() {
				data = $this.data('imageselect');
				data.page += 1;
				open($this, options);
				return false;
			});
			
			$('.imagepageprev').bind('click.imageselect', function() {
				data = $this.data('imageselect');
				data.page -= 1;
				open($this, options);
				return false;
			});	
			
			$('.imagepagefilter').bind('click.imageselect', function() {
				open($this, options);
				return false;
			});	
			
			$('.deleteimage').bind('click.imageselect', function() {
				var simageid = $(this).attr('rel');
				if(simageid)
				{
					$(data.selectspace).html('Please wait...');
					$.get(options.delete_image_url + simageid, function() {
						open($this, options);						
					});
				}
				return false;
			});
			
			$(data.overlay).bind('click.imageselect', function() {
				close($this, options);
			});
			
			$(data.overlay).show();
			$(data.selectspace).show();
		});
		 
	}
	
	function setPositions(data, options)
	{
		data.overlay.css('width', $(window).width());
		data.overlay.css('height', $(window).height());
		data.overlay.css('top', $(window).scrollTop());		
		data.selectspace.css('width', options.select_space_width);
		data.selectspace.css('height', options.select_space_height);		
		data.selectspace.css('top', ($(window).height() - options.select_space_height)/2 + $(window).scrollTop());		
		data.selectspace.css('left', ($(window).width() - options.select_space_width)/2);		
	}

	function close($this, options)
	{
		var data = $this.data('imageselect');

		$(options.select_image_selector).unbind('.imageselect');
		$(data.selectspace).html('');
		$(data.selectspace).hide();
		$(data.overlay).hide();
		$(options.display_image_selector).show();
	}	
	
	function clearimage($this, options)
	{
		if(options.update_input_selector)
		{					
			var inp = $(options.update_input_selector);
			if(inp) { inp.val(''); }
			$(options.display_image_selector).hide();
		}
	}
	
	
	var methods = {
			init : function( customOptions ) {
		
				var options = {
				
					selector_url: '/media/selector/imagetypeid/',
					image_url: '/media/selector/imageid/',
					delete_image_url: '/media/deleteimage/imageid/',
					
					display_image_selector: '#currentimage',
					select_space_width: 800,
					select_space_height: 500,
					update_input_selector: null,
					remove_image_selector: null,
					selectCallback: null,
					
					select_image_selector: '.selectimage',
					
					image_type_id: null,					
					image_width: 100				

				};
		
				$.extend(options, customOptions);
				
				var lastselect = -1;
				
				return this.each(function() {
					
					var $this = $(this);
					var data = $this.data('imageselect');
					
					if(!data)
					{				
						var overlay = $('<div class="imageselectoverlay"></div>').hide();
						var selectspace = $('<div class="imageselectpopup"></div>').hide();
						$('body').append(overlay);
						$('body').append(selectspace);
						
						$(this).data('imageselect', {
				               page : 1,
				               overlay: overlay,
				               selectspace: selectspace
				           });
					}
					
					$this.click(function () {	
						if(overlay.css('display') == 'none')
						{			
							open($this, options);
						}
						else
						{
							close($this, options);
						}	
						return false;
					}, false);
					
					if(options.remove_image_selector != null)
					{
						$(options.remove_image_selector).click(function() {
							clearimage($this, options);
							return false;
						});
					}					
				});	
			}
	};
	
	$.fn.imageselecta = 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.imageselect' );
		}    
	};		
})(jQuery); 
