/**
 * jQuery.bgSwitcher v0.1b
 * http://rewish.org/javascript/jquery_bg_switcher
 *
 * Copyright (c) 2009 Rewish (http://rewish.org/)
 *
 * Licensed under the MIT:
 * [en] http://www.opensource.org/licenses/mit-license.php
 * [ja] http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license
 *
 * Date:
 * 2009-04-08
 *
 **/
(function($) {
	$.fn.bgSwitcher = function(opts, callback)
	{
		/**
		 * Options
		 */
		var opts = $.extend({
			bgImages : null,
			interval : 5000,
			loopExec : true,
			fadeOut  : false,
			fadeSpeed: 1000,
			sequence : false,
			seqFirst : 1,
			seqLast  : 5,
			startNum : 1
		}, opts);

		if (opts.bgImages == null)
			return this;

		/**
		 * Sequence number
		 */
		var sequence = function()
		{
			if (!opts.sequence) return;
			img = opts.bgImages[0];
			dot = img.lastIndexOf('.');
			opts.bgImages = Array();
			for (i = opts.seqFirst; i <= opts.seqLast; i++) {
				opts.bgImages.push(img.substr(0, dot) + i + img.substring(dot));
			}
		}

		/**
		 * Preload
		 */
		var imgPreload = function()
		{
			$(opts.bgImages).each(function(i, src) {
				$('<img>').attr('src', src);
			});
		}

		/**
		 * setting CSS to Clone Element
		 *
		 * @param object from
		 * @param object to
		 */
		var setCSS = function(from, to)
		{
			if (isNaN(from.css('z-index')))
				from.css('z-index', 1);
			pos = from.position();
			return to.css({
				zIndex: from.css('z-index') + 10,
				position: 'absolute',
				top: pos.top
				//left: pos.left
			});
		};

		/**
		 * Background switch
		 *
		 * @param object elem
		 * @param string bg
		 * @param object clone
		 */
		var bgSwitch = (callback) ? callback(elem, bg, clone) : function(elem, bg, clone)
		{
			if (opts.fadeOut) {
				clone.css('background-image', elem.css('background-image')).show();
				elem.css('background-image', 'url('+ bg +')');
				clone.fadeOut(opts.fadeSpeed);
			} else
				elem.css('background-image', 'url('+ bg +')');
		};

		/**
		 * Main method
		 */
		return this.each(function(i)
		{
			sequence();
			imgPreload();
			var elem  = $(this);
			var clone = (opts.fadeOut)
			          ? setCSS(elem, elem.clone()).insertAfter(elem)
			          : null;
			var num = opts.startNum - 1;
			var len = opts.bgImages.length;
			var tId = setInterval(function()
			{
				bgSwitch(elem, opts.bgImages[num], clone);
				num++;
				if (len == num) {
					if (opts.loopExec) num = 0;
					else clearInterval(tId);
				}
			}, opts.interval);
		});
	};
})(jQuery);

