/**
 * jquery.slideshow.js
 * @version 5 Apr 2011
 * @author shinji<web@shinjifukuda.com>
 */
(function(){jQuery.fn.slideshow=function(options){var defaults={'width':'640px','height':'480px','selected':0,'speed':400,'event':'click','behavior':'normal','easing':'swing','auto':false,'interval':5000,'repeat':false};var setting=jQuery.extend(defaults,options);var total=jQuery('ul > li',this).size();var selected=(total<=setting.selected||setting.selected<0)?0:setting.selected;var target=this;var targetId=jQuery(target).attr('id');target.addClass('slideshow').css({'width':setting.width,'height':setting.height,'overflow':'hidden','background-color':'#000','margin':0,'padding':0,'position':'relative'});var w=target.width();var h=target.height();var ul=jQuery('ul',target).css({'margin':0,'padding':0,'position':'absolute','z-index':1});var li=jQuery('ul > li',target).addClass('slideshow-item');var buttons=jQuery('<div class="slideshow-buttons"></div>').css({'position':'absolute','z-index':2});var buttonsList=[],positions=[],items=[];var zidx=1,count=0;li.each(function(i){var item=jQuery(this).css({'width':setting.width,'height':setting.height,'background-color':'#000','overflow':'hidden','position':'absolute'});items.push(item);var position={'toX':w*i,'toY':h*i};positions.push(position);var button=jQuery('<div class="slideshow-button">'+i+'</div>');switch(setting.event.toLowerCase()){case'mouseover':button.mouseenter(function(){toNumHandler(i);});break;case'mouseenter':button.mouseenter(function(){toNumHandler(i);});break;default:button.click(function(){toNumHandler(i);});break;}
buttonsList.push(button);buttons.append(button);count+=1;if(count===total){target.append(buttons);init();}});var toNumHandler=function(value){if(selected!==value){selected=value;changeHandler();}}
var prevHandler=function(){selected-=1;if(selected<0)selected=total-1;changeHandler();}
var nextHandler=function(){selected+=1;if(selected/total===1)selected=0;changeHandler();}
var changeHandler;function init(){var i=0;switch(setting.behavior.toLowerCase()){case'fade':for(i=total;i--;){items[i].css({'left':0,'top':0});}
buttonChecked();jQuery('.slideshow-item',target).eq(selected).css({'z-index':zidx});changeHandler=function(){buttonChecked();zidx++;jQuery('.slideshow-item',target).eq(selected).css({'display':'none','z-index':zidx}).fadeIn(setting.speed);};break;case'scrollx':for(i=total;i--;){items[i].css({'left':positions[i].toX+'px'});ul.css({'width':ul.width()+positions[i].toX+'px'});}
buttonChecked();ul.css({'left':'-'+positions[selected].toX+'px'});changeHandler=function(){buttonChecked();ul.animate({'left':'-'+positions[selected].toX+'px'},{queue:false,duration:setting.speed,easing:setting.easing});};break;case'scrolly':for(i=total;i--;){items[i].css({'top':positions[i].toY+'px'});}
ul.css({'top':'-'+positions[selected].toY+'px'});buttonChecked();changeHandler=function(){buttonChecked();ul.animate({'top':'-'+positions[selected].toY+'px'},{queue:false,duration:setting.speed,easing:setting.easing});};break;default:for(i=total;i--;){items[i].css({'top':0,'left':0});}
buttonChecked();jQuery('.slideshow-item',target).eq(selected).css({'z-index':zidx});changeHandler=function(){buttonChecked();zidx+=1;jQuery('.slideshow-item',target).eq(selected).css({'display':'block','z-index':zidx});};break;}}
function buttonChecked(){jQuery('.slideshow-button',target).removeClass('slideshow-button-selected').eq(selected).addClass('slideshow-button-selected');}
jQuery('[href^="#'+targetId+'-"]').each(function()
{var targetHref=String(jQuery(this).attr('href'));var key=targetHref.replace('#'+targetId+'-','');switch(key)
{case'prev':jQuery(this).click(function(e){prevHandler();e.preventDefault();});break;case'next':jQuery(this).click(function(e){nextHandler();e.preventDefault();});break;default:if(items[key]){jQuery(this).click(function(e){toNumHandler(Number(key));e.preventDefault();});}
break;};});if(setting.auto){var intervalId=setInterval(timerHandler,setting.interval);target.mouseover(function(){clearInterval(intervalId);}).mouseout(function(){intervalId=setInterval(timerHandler,setting.interval);});}
function timerHandler(){if(setting.repeat){nextHandler();}else{if(selected===(total-1)){clearInterval(intervalId);target.unbind('mouseover mouseout');}else{nextHandler();}}}
return this;}})(jQuery);
