(function($) { //create closure
    $.fn.make_slides = function(options) 
	{
		//alert('Start');
		// prepare for container
		var container = $(this);
		container.css('overflow', 'hidden');
		var height = container.height();
		//alert(height);
		//alert(container.attr('id'));

		// prepare for the parameters
		var slides_files = new Array();
		var slides_urls = new Array();
		var slides_tags = new Array();
		var slides_targets = new Array();
		var slides_delay = 4000;
		var slides_style = 'text-align:center;';
		if(undefined != options)
		{
			if(undefined != options['slides_files'])slides_files = options['slides_files'];
			if(undefined != options['slides_urls']) slides_urls  = options['slides_urls'];
			if(undefined != options['slides_tags']) slides_tags  = options['slides_tags'];
			if(undefined != options['slides_targets']) slides_targets  = options['slides_targets'];
			if(undefined != options['slides_delay']) slides_delay  = options['slides_delay'];
			if(undefined != options['height']) height = options['height'];
			if(undefined != options['slides_style']) slides_style = options['slides_style'];
		}
		var itemCount = slides_files.length;

		// generate the slide items
		var slides_items = new Array();
		var slides_tags_bar = $('<div class="slides_tags_bar"></div>');
		slides_tags_bar.css('width', itemCount * 30 + 'px');
		var slides_tag_items = new Array();
		var mTimer = null;
		if(0 == slides_files.length)container.css("height", "0");
		for (var ptr in slides_files)
		{
			var file = slides_files[ptr];
			if(undefined != slides_urls[ptr] && null != slides_urls[ptr])
			{
				slides_items[ptr] = $('<div class="slides_hidden" style="' + slides_style + '">' + 
						'<a href="' + slides_urls[ptr] + '" ' + 'target="' + ((undefined==slides_targets[ptr]||null==slides_targets[ptr])?'':slides_targets[ptr]) + '"' + '>' +
							'<img style="height:' + height + 'px" src="' + file + '"/>' + 
						'</a>' +
					'</div>');
			}
			else
			{
				slides_items[ptr] = $('<div class="slides_hidden" style="' + slides_style + '">' + 
						'<img style="height:' + height + 'px" src="' + file + '"/>' + 
					'</div>');
			}
			container.append(slides_items[ptr]);
			// for tags
			slides_tag_items[ptr] = $('<div class="slides_tag_outside" value="' + ptr + '"><div class="slides_tag_inside">'
				+ ((undefined != slides_tags[ptr])?slides_tags[ptr]:(''+ptr)) +
				'</div></div>');
			slides_tag_items[ptr].mouseover(function(){$(this).removeClass('slides_tag_outside');$(this).addClass('slides_tag_outside_light');});
			slides_tag_items[ptr].mouseout(function() {$(this).removeClass('slides_tag_outside_light');$(this).addClass('slides_tag_outside');});
			slides_tag_items[ptr].click(
			function()
			{
				try
				{					
					var ind = $(this).attr('value');
					slides_items[ptr].hide();
					
					slides_tag_items[ptr].removeClass('slides_tag_outside_light');
					slides_tag_items[ptr].addClass('slides_tag_outside');
					slides_tag_items[ptr].children().removeClass('slides_tag_inside_light');
					slides_tag_items[ptr].children().addClass('slides_tag_inside');

					ptr = (ind-1+itemCount)%itemCount;
					//alert(ptr);
					if(null != mTimer)
					{
						clearTimeout(mTimer);
						//alert('clearTimeout');
					}
					showSlide();
				}
				catch (e)
				{
					alert(e);
				}
			}
			);

			slides_tags_bar.append(slides_tag_items[ptr]);
		}
		container.append(slides_tags_bar);

		// start to show
		var ptr = itemCount-1;
		function showSlide()
		{
			slides_tag_items[ptr].removeClass('slides_tag_outside_light');
			slides_tag_items[ptr].addClass('slides_tag_outside');
			slides_tag_items[ptr].children().removeClass('slides_tag_inside_light');
			slides_tag_items[ptr].children().addClass('slides_tag_inside');
			ptr = (ptr+1) % itemCount;
			slides_items[ptr].fadeIn('slow', 
				function()
				{
					try
					{
						slides_tag_items[ptr].removeClass('slides_tag_outside');
						slides_tag_items[ptr].addClass('slides_tag_outside_light');
						slides_tag_items[ptr].children().removeClass('slides_tag_inside');
						slides_tag_items[ptr].children().addClass('slides_tag_inside_light');
						mTimer = setTimeout(
							function()
							{
								slides_items[ptr].fadeOut('slow', showSlide);
								clearTimeout(mTimer);
								mTimer = null;
							}, 
							slides_delay
						);
					}
					catch (e)
					{
							alert(e);
					}					
					//alert('fadeIn ' + ptr);
				}
			);
		}
		if(itemCount)showSlide();
	}
})(jQuery);
