/**
 * jQuery.bgSwitcher
 *
 * @version    0.2.2-beta
 * @author     Hiroshi Hoaki <rewish.org@gmail.com>
 * @copyright  2010 Hiroshi Hoaki
 * @license    http://rewish.org/license/mit The MIT License
 * @link       http://rewish.org/javascript/jquery_bgswitcher
 */
(function(a){a.fn.bgSwitcher=function(c,b){return this.each(function(){try{a(this).data("bgSwitcher",new a.bgSwitcher(this,c))}catch(d){if(b){alert(d)}}})};a.bgSwitcher=function(d,c){this.node=a(d);this.setConfig(c);this.initialize();if(this.config.autoStart){this.start()}var b=this;if(this.config.resize){a(window).bind("resize.bgSwitcher",function(){b.resizeHandler()})}return{start:function(){b.start.apply(b,arguments)},stop:function(){b.stop.apply(b,arguments)},toggle:function(){b.toggle.apply(b,arguments)},reset:function(){b.reset.apply(b,arguments)}}};a.bgSwitcher.prototype={setConfig:function(b){this.config=a.extend({images:null,interval:5000,autoStart:true,fadeSpeed:1000,loop:true,random:false,resize:false,callback:null},b);if(!(this.config.images instanceof Array)){throw new Error('config["images"] is invalid.')}if(typeof this.config.images[0]==="string"&&typeof this.config.images[1]==="number"&&typeof this.config.images[2]==="number"){this.sequence()}if(this.config.images.length<=1){throw new Error("Image must be at least more than two.")}if(!(this.config.callback instanceof Function)){this.config.callback=this.config.fadeSpeed?this.fadeCallback:this.normalCallback}if(this.config.fadeSpeed){this.initFadeNode()}},initialize:function(){this.index=0;this.node.css({backgroundImage:"url("+this.config.images[this.index]+")"});this.preload()},start:function(){if(this.timeId){return}var b=this,d=this.config.images,c=this[this.config.random?"random":"order"];this.timeId=setInterval(function(){c.call(b);b.config.callback.call(b,d[b.index])},b.config.interval)},stop:function(){if(this.timeId){clearInterval(this.timeId);this.timeId=null}},toggle:function(){if(this.timeId){this.stop()}else{this.start()}},reset:function(){this.index=0;this.stop();this.config.callback.call(this,this.config.images[this.index]);this.start()},order:function(){if(++this.index===this.config.images.length){this.index=0;if(!this.config.loop){this.stop()}}},random:function(){var c=this.config.images.length,b=this.index;while(this.index===b){b=Math.floor(Math.random()*c)}this.index=b},sequence:function(){var d=[],e=this.config.images[0],c=this.config.images[1],b=this.config.images[2];for(i=c;i<=b;++i){d.push(e.replace(/\.\w+$/,i+"$&"))}this.config.images=d},preload:function(){this.loadedImages=[];var b=this.config.images.length;for(var c=0;c<b;++c){this.loadedImages[c]=new Image;this.loadedImages[c].src=this.config.images[c]}},initFadeNode:function(){var b=this.node[0].tagName.toLowerCase();if(b==="html"){throw new Error("FadeOut the HTML not allowed.")}if(b==="body"){this.initRootNode();b="div"}var d=this.node.css("zIndex"),c=this.node.offset();if(isNaN(d)){d=1000;this.node.css({zIndex:d})}this.fadeNode=a("<"+b+">");this.fadeNode.css({dispaly:"block",position:"absolute",zIndex:d-1,top:c.top,left:c.left,width:this.node.innerWidth(),height:this.node.innerHeight(),backgroundImage:this.node.css("backgroundImage"),backgroundPosition:this.node.css("backgroundPosition")||[this.node.css("backgroundPositionX"),this.node.css("backgroundPositionY")].join(" "),backgroundRepeat:this.node.css("backgroundRepeat"),backgroundColor:this.node.css("backgroundColor"),backgroundAttachment:this.node.css("backgroundAttachment")});this.origNode=this.node;this.origNode.css({position:"relative",background:"none"});this.node=this.fadeNode.clone();this.node.css({zIndex:d-2});this.origNode.after(this.fadeNode,this.node)},initRootNode:function(){var j="bgSwitcher-"+ +new Date;a("> *",this.node).not("script").wrapAll('<div id="'+j+'">');var c=a("#"+j),e=this.node;var g={backgroundImage:e.css("backgroundImage"),backgroundPosition:e.css("backgroundPosition")||[e.css("backgroundPositionX"),e.css("backgroundPositionY")].join(" "),backgroundRepeat:e.css("backgroundRepeat"),backgroundColor:e.css("backgroundColor"),backgroundAttachment:e.css("backgroundAttachment")};var f=["Top","Bottom","Right","Left"];for(var d=0;d<4;++d){var h="padding"+f[d];g[h]=+e.css("margin"+f[d]).replace(/\D/g,"");g[h]+=+e.css("padding"+f[d]).replace(/\D/g,"");g[h]+="px"}c.css(g);e.css({margin:0,padding:0,background:"none"});this.node=c;var b=this;a(window).bind("resize.bgSwitcher",function(){b.resizeHandler()})},resizeHandler:function(){var b=this.origNode.innerWidth();this.node.width(b);this.fadeNode.width(b)},normalCallback:function(b){this.node.css({backgroundImage:"url("+b+")"})},fadeCallback:function(c){var b=this;this.fadeNode.stop(true,true).css({backgroundImage:this.node.css("background-image")}).show(0,function(){b.node.css({backgroundImage:"url("+c+")"});b.fadeNode.fadeOut(b.config.fadeSpeed)})}}})(jQuery);
