(function($)
{$.fn.sudoSlider=function(options)
{if(typeof(options)!='object'&&options!=''&&options)
{return this.each(function(){$(this).trigger("sudoSliderEvent",[options]);});}
else
{var defaults={prevNext:true,prevHtml:'<a href="#" class="prevBtn"> previous </a>',nextHtml:'<a href="#" class="nextBtn"> next </a>',controlsShow:true,controlsAttr:'id="controls"',controlsFadeSpeed:'400',controlsFade:true,insertAfter:true,firstShow:false,firstHtml:'<a href="#" class="firstBtn"> first </a>',lastShow:false,lastHtml:'<a href="#" class="lastBtn"> last </a>',numericAttr:'class="controls"',numericText:['1'],vertical:false,speed:'800',ease:'swing',auto:false,pause:'2000',continuous:false,clickableAni:false,numeric:false,updateBefore:false,history:false,speedhistory:'400',autoheight:true,customLink:false,fade:false,crossFade:true,fadespeed:'1000',ajax:false,loadingText:false,preloadAjax:false,startSlide:false,imgAjaxFunction:false,docAjaxFunction:false,beforeAniFunc:false,afterAniFunc:false,uncurrentFunc:false,currentFunc:false};var options=$.extend(defaults,options);var optionscontrolsFadeSpeed=options.controlsFadeSpeed;var optionscontrolsFade=options.controlsFade;var optionsfirstShow=options.firstShow;var optionslastShow=options.lastShow;var optionsvertical=options.vertical;var optionsspeed=options.speed;var optionsease=options.ease;var optionsauto=options.auto;var optionspause=options.pause;var optionscontinuous=options.continuous;var optionsprevNext=options.prevNext;var optionsnumeric=options.numeric;var optionsnumericAttr=options.numericAttr;var optionsnumericText=options.numericText;var optionshistory=options.history;var optionsspeedhistory=options.speedhistory;var optionsautoheight=options.autoheight;var optionscustomLink=options.customLink;var optionsfade=options.fade;var optionscrossFade=options.crossFade;var optionsfadespeed=options.fadespeed;var optionsupdateBefore=options.updateBefore;var optionsajax=options.ajax;var optionsstartSlide=options.startSlide;var optionsimgAjaxFunction=options.imgAjaxFunction;var optionsdocAjaxFunction=options.docAjaxFunction;var optionsbeforeAniFunc=options.beforeAniFunc;var optionsafterAniFunc=options.afterAniFunc;var optionsuncurrentFunc=options.uncurrentFunc;var optionscurrentFunc=options.currentFunc;return this.each(function()
{var init=true;if(optionsauto)optionscontinuous=true;var obj=$(this);var ul=obj.children("ul");var li=ul.children("li");var s=li.length;var w=600;var h=200;if(optionsajax)
{if(ul.length==0)
{obj.append('<ul></ul>');ul=obj.children("ul");}
if(optionsajax.length>s)
{for(var i=1;i<=optionsajax.length-s;i++)ul.append('<li><p>'+returnFunnyLoadingText()+'</p></li>');li=ul.children("li");s=li.length;w=li.eq(0).width();}}
function returnFunnyLoadingText()
{var funnyLoadingTexts=["Spinning up the hamster","&pi; &times; 1337% == 42","Programming the flux capacitor","The last time I tried this the monkey didn't survive","Testing data on Timmy... ... ... We need another Timmy","Warming up Large Hadron Collider","It looks like you're waiting for something to load"];return options.loadingText?options.loadingText:(funnyLoadingTexts[Math.round(Math.random()*(funnyLoadingTexts.length-1))]+'...');};var t=0;var ot=t;var nt=t;var ts=s-1;var clickable=true;var buttonclicked=false;var fading=false;var ajaxloading=false;var autoheightdocument=0;var numericControls=new Array();var numericContainer=false;obj.css("overflow","hidden");li.css('float','left');for(var i=0;i<s;i++)
{if(optionsnumericText[i]==undefined)optionsnumericText[i]=(i+1);if(optionsajax&&optionsajax[i]==undefined)optionsajax[i]=false;}
if(optionscontinuous)
{if(optionsvertical)
{ul.prepend(li.filter(":last-child").clone().css("margin-top","-"+h+"px"));ul.append(li.filter(":nth-child(2)").clone());ul.height((s+1)*h);}else{ul.prepend(li.filter(":last-child").clone().css("margin-left","-"+w+"px"));ul.append(li.filter(":nth-child(2)").clone());ul.width((s+1)*w);}
if(optionsajax)
{if(optionsajax[0]){ajaxLoad('last',0,false,0);}
if(optionsajax[s-1])
{ajaxLoad('first',(s-1),false,0);ajaxLoad(s,(s-1),false,0);optionsajax[s-1]=false;}}}
else
{if(optionsvertical)ul.height(s*h);else ul.width(s*w);};if(options.preloadAjax)
{for(var i=0;i<=s-subtract;i++)
{if(optionsajax[i])
{ajaxLoad(i,i,false,0);optionsajax[i]=false;}}}
if(options.controlsShow)
{var controls=$('<span '+options.controlsAttr+'></span>');if(options.insertAfter)$(obj).after(controls);else $(obj).before(controls);var html=options.controlsBefore;if(optionsnumeric){numericContainer=controls.prepend('<ol '+optionsnumericAttr+'></ol>').children();for(var i=0;i<s;i++)
{numericControls[i]=$(document.createElement("li")).attr({'rel':(i+1)}).html('<a href="#"><span>'+optionsnumericText[i]+'</span></a>').appendTo(numericContainer).click(function(){goToSlide($(this).attr('rel')-1,true);return false;});};}
if(optionsfirstShow){var firstbutton=makecontrol(options.firstHtml,"first");}
if(optionslastShow){var lastbutton=makecontrol(options.lastHtml,"last");}
if(optionsprevNext){var prevbutton=makecontrol(options.prevHtml,"prev");var nextbutton=makecontrol(options.nextHtml,"next");}};function goToSlide(i,clicked)
{if(optionsfade)
{fadeto(i,clicked);}else{animate(i,clicked,true);}};function makecontrol(html,action)
{var button=$(html);controls.prepend(button);button.click(function(){goToSlide(action,true);return false;});return button;}
optionscontrolsFadeSpeed=textSpeedToNumber(optionscontrolsFadeSpeed);optionsspeed=textSpeedToNumber(optionsspeed);optionspause=textSpeedToNumber(optionspause);optionsspeedhistory=textSpeedToNumber(optionsspeedhistory);optionsfadespeed=textSpeedToNumber(optionsfadespeed);function textSpeedToNumber(speed)
{if(parseInt(speed))var returnspeed=parseInt(speed);else
{switch(speed)
{case'fast':var returnspeed=200;break;case'normal':var returnspeed=400;break;case'medium':var returnspeed=400;break;case'slow':var returnspeed=600;break;default:var returnspeed=400;}}
return returnspeed;};function runOnImagesLoaded(e,_cb)
{e.each(function(){var $imgs=(this.tagName.toLowerCase()==='img')?$(this):$('img',this),_cont=this,i=0,_done=function(){if(typeof _cb==='function')_cb(_cont);};if($imgs.length){$imgs.each(function(){var _img=this,_checki=function(e){if((_img.complete)||(_img.readyState=='complete'&&e.type=='readystatechange'))
{if(++i===$imgs.length)_done();}
else if(_img.readyState===undefined)
{$(_img).attr('src',$(_img).attr('src'));}};$(_img).bind('load readystatechange',function(e){_checki(e);});_checki({type:'readystatechange'});});}else _done();});};function imageCheck(file)
{var extArray=new Array(".jpg",".png",".bmp",".gif");var image=false;while(file.indexOf("\\")!=-1)var file=file.slice(file.indexOf("\\")+1);var ext=file.slice(file.indexOf(".")).toLowerCase();for(var ii=0;ii<extArray.length;ii++)if(extArray[ii]==ext){image=true;break;}
return image;};function fadeControl(fadeOpacity,fadetime,nextcontrol)
{if(nextcontrol)
{var eA=nextbutton;var eB=lastbutton;var directionA='next';var directionB='last';var firstlastshow=optionslastShow;}
else
{var eA=prevbutton;var eB=firstbutton;var directionA='prev';var directionB='first';var firstlastshow=optionsfirstShow;}
if(!optionscontinuous&&optionsprevNext)eA.fadeTo(fadetime,fadeOpacity,function(){if(fadeOpacity==0)$(this).hide();});if(firstlastshow)eB.fadeTo(fadetime,fadeOpacity,function(){if(fadeOpacity==0)$(this).hide();});if(optionscustomLink)
{$(optionscustomLink).filter(function(index){return($(this).attr("rel")==directionA||$(this).attr("rel")==directionB);}).fadeTo(fadetime,fadeOpacity,function(){if(fadeOpacity==0)$(this).hide();}).children().fadeTo(fadetime,fadeOpacity,function(){if(fadeOpacity==0)$(this).hide();});}};function fadeControls(a,fadetime)
{if(a==0)fadeControl(0,fadetime,false);else fadeControl(1,fadetime,false);if(a==ts)fadeControl(0,fadetime,true);else fadeControl(1,fadetime,true);};function setCurrent(i)
{i=parseInt((i>ts)?i=0:((i<0)?i=ts:i))+1;for(var a=0;a<numericControls.length;a++)setCurrentElement(numericControls[a],i);if(optionscustomLink)setCurrentElement(optionscustomLink,i);};function setCurrentElement(element,i)
{$(element).filter(".current").removeClass("current").each(function(){if($.isFunction(optionsuncurrentFunc)){optionsuncurrentFunc.call(this,$(this).attr("rel"));}});$(element).filter(function(){return $(this).attr("rel")==i;}).addClass("current").each(function(index){if($.isFunction(optionscurrentFunc)){optionscurrentFunc.call(this,i);}});};function filterUrlHash(t)
{var te=0;for(var i=0;i<=s;i=i+1)if(optionsnumericText[i]==t)te=i;return te;};function autoheight(i,speed)
{if(i==s)i=0;var target=li.eq(i);var nheight=target.height();if(nheight!=0)setHeight(nheight,speed);runOnImagesLoaded(target,function(imgtarget){nheight=$(imgtarget).height();if(nheight!=0)setHeight(nheight,speed);});};function setHeight(nheight,speed)
{obj.animate({height:nheight},{queue:false,duration:speed,easing:optionsease});};function adjust()
{if(t>ts)t=0;if(t<0)t=ts;if(!optionsupdateBefore)setCurrent(t);if(optionsvertical)ul.css("margin-top",(t*h*-1));else ul.css("margin-left",(t*w*-1));clickable=true;if(optionshistory&&buttonclicked)window.location.hash=optionsnumericText[t];if(!fading)
{if($.isFunction(optionsafterAniFunc)){optionsafterAniFunc.call(li.eq(t),t+1);}}};function filterDir(dir,ot)
{var nt=t;switch(dir)
{case"next":nt=(ot>=ts)?(optionscontinuous?nt+1:ts):nt+1;break;case"prev":nt=(t<=0)?(optionscontinuous?nt-1:0):nt-1;break;case"first":nt=0;break;case"last":nt=ts;break;default:nt=parseInt(dir);break;};return nt;};function ajaxLoad(i,l,adjust,speed)
{var targetslide=false;if(parseInt(i)||i==0)targetslide=li.eq(i);else
{if(i=='last')targetslide=$('li:last',obj);else targetslide=$('li:first',obj);}
var ajaxspeed=(fading)?(!optionscrossFade?parseInt(optionsfadespeed*(2/5)):optionsfadespeed):speed;var tt=l+1;if(imageCheck(optionsajax[l]))
{targetslide.html(' ').append($(new Image()).attr('src',optionsajax[l]));runOnImagesLoaded(targetslide,function(img){var target=$(img).children();var width=target.width();var height=target.height();target.attr({'oldheight':height,'oldwidth':width});if(width>w)target.animate({width:w,height:(height/width)*w},0);if($.isFunction(optionsimgAjaxFunction)){optionsimgAjaxFunction.call($(img),tt);}
if(optionsautoheight&&adjust)autoheight(t,ajaxspeed);});}
else
{targetslide.load(optionsajax[l],function(response,status,xhr){if(status=="error"||!$(this).html())$(this).html("Sorry but there was an error: "+(xhr.status?xhr.status:'no content')+" "+xhr.statusText);if(status!="error"&&$.isFunction(optionsdocAjaxFunction)){optionsdocAjaxFunction.call($(this),tt);}
var nheight=$(this).height();if(optionsautoheight&&adjust)autoheight(l,ajaxspeed);});}};function fadeto(i,clicked)
{if(i!=t)
{if(clickable)
{ajaxloading=false;if(clicked)clearTimeout(timeout);if(optionsupdateBefore)setCurrent(filterDir(i,ot));clickable=!clicked;var speed=(!clicked&&!optionsauto&&optionshistory)?optionsfadespeed*(optionsspeedhistory/optionsspeed):optionsfadespeed;var ll=filterDir(i,ot);if(ll>ts)ll=0;if(ll<0)ll=ts;if(optionscontrolsFade)fadeControls(ll,optionscontrolsFadeSpeed);if(optionsautoheight)
{if(optionsajax)
{if(!optionsajax[ll])autoheight(ll,optionsfadespeed);}
else autoheight(ll,optionsfadespeed);}
var target=li.eq(ll);if($.isFunction(optionsbeforeAniFunc)){optionsbeforeAniFunc.call(target,ll+1);}
if(optionscrossFade)
{var fadeIntarget=target.clone().prependTo(obj).css({'z-index':'100000','position':'absolute','list-style':'none','top':'0','left':'0'});if(optionsajax[ll])
{ajaxLoad(0,ll,false,speed);if(imageCheck(optionsajax[ll]))
{ajaxLoad(ll+1,ll,false,speed);runOnImagesLoaded(li.eq(ll+1),function(){if(optionsautoheight)autoheight(ll,optionsfadespeed);});}
else
{ajaxLoad(ll+1,ll,true,speed);}
optionsajax[ll]=false;}
fadeIntarget.hide().fadeIn(optionsfadespeed,function(){clickable=true;fading=true;animate(i,false,false);$(this).remove();if(optionshistory&&clicked)window.location.hash=optionsnumericText[t];fading=false;if($.isFunction(optionsafterAniFunc)){optionsafterAniFunc.call(target,ll+1);}});}
else
{var fadeinspeed=parseInt((speed)*(3/5));var fadeoutspeed=speed-fadeinspeed;obj.children().fadeTo(fadeoutspeed,0.00001,function(){clickable=true;fading=true;animate(i,false,false);clickable=!clicked;obj.children().fadeTo(fadeinspeed,1,function(){if(optionshistory&&clicked)window.location.hash=optionsnumericText[t];clickable=true;fading=false;if($.isFunction(optionsafterAniFunc)){optionsafterAniFunc.call(target,ll+1);}});});}}}};function animate(dir,clicked,time)
{if(clickable)
{ajaxloading=false;clickable=(!clicked&&!optionsauto)?true:options.clickableAni;buttonclicked=clicked;ot=t;t=filterDir(dir,ot);if(optionsupdateBefore)setCurrent(t);var diff=Math.sqrt(Math.abs(ot-t));var speed=parseInt(diff*optionsspeed);if(!clicked&&!optionsauto)speed=parseInt(diff*optionsspeedhistory);if(!time)speed=0;var i=t;if(t>ts)i=0;if(t<0)i=ts;if(optionsajax)
{if(optionsajax[i])
{ajaxLoad(i,i,true,speed);optionsajax[i]=false;ajaxloading=true;}
if(!fading)
{var countajax=0;if(ot>t)
{for(a=t;a<=ot;a++)
{if(a<=ts&&a>=0)
{if(optionsajax[a])
{ajaxLoad(a,a,false,speed);optionsajax[a]=false;countajax++;}}
if(countajax==10)a=ot;}}
else
{for(a=ot;a<=t;a++)
{if(a<=ts&&a>=0)
{if(optionsajax[a])
{ajaxLoad(a,a,false,speed);optionsajax[a]=false;countajax++;}}
if(countajax==10)a=t;}}}
if((i+1<=ts)&&!init)
{if(optionsajax[i+1])
{ajaxLoad(i+1,i+1,false,0);optionsajax[i+1]=false;}}
if(i-1>=0&&!init)
{if(optionsajax[i-1])
{ajaxLoad(i-1,i-1,false,0);optionsajax[i-1]=false;}}}
if(!fading)
{if($.isFunction(optionsbeforeAniFunc)){optionsbeforeAniFunc.call(li.eq(i),i+1);}}
if(!optionsvertical){if(optionsautoheight&&!fading&&!ajaxloading)autoheight(t,speed);p=(t*w*-1);ul.animate({marginLeft:p},{queue:false,duration:speed,easing:optionsease,complete:adjust});}else{p=(t*h*-1);ul.animate({marginTop:p},{queue:false,duration:speed,easing:optionsease,complete:adjust});};if(optionscontrolsFade)
{var fadetime=optionscontrolsFadeSpeed;if(!clicked&&!optionsauto)fadetime=(optionsspeedhistory/optionsspeed)*optionscontrolsFadeSpeed;if(!time)fadetime=0;if(fading)fadetime=parseInt((optionsfadespeed)*(3/5));fadeControls(t,fadetime);}
if(clicked)clearTimeout(timeout);if(optionsauto&&dir=="next"&&!clicked){timeout=startAuto(optionspause+optionsspeed);};};};var timeout;if(optionsauto){timeout=startAuto(optionspause);};function startAuto(pause)
{return setTimeout(function(){goToSlide("next",false);},pause);}
if(optionscustomLink)
{$(optionscustomLink).live('click',function(){var a=$(this).attr('rel');if(a)doExternalInput(a);return false;});}
obj.bind('sudoSliderEvent',function(e,a){doExternalInput(a);return false;});function doExternalInput(a)
{if(a=='stop')clearTimeout(timeout)
else if(a=='start')
{timeout=startAuto(optionspause);optionsauto=true;}
else if(a=='block')clickable=false;else if(a=='unblock')clickable=true;else if(a=='action')alert('The slider just performed an action');else if(clickable)goToSlide((a==parseInt(a))?a-1:a,true);};init=false;if(optionshistory){$.address.init(function(e){var i=filterUrlHash(e.value);animate(i,false,false);}).change(function(e){var i=filterUrlHash(e.value);if(i!=t)goToSlide(i,false);});}
else if(optionsstartSlide)animate(optionsstartSlide-1,false,false);else animate(0,false,false);});}};})(jQuery);
