/*
 * jQuery Nivo Slider v2.6
 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * March 2010
 */

(function($){
  var NivoSlider=function(element,options){
    var settings=$.extend({},$.fn.nivoSlider.defaults,options);
    var vars={
      currentSlide:0,
      currentImage:'',
      totalSlides:0,
      randAnim:'',
      running:false,
      paused:false,
      stop:false
    };
    
    var slider=$(element);
    slider.data('nivo:vars',vars);
    slider.css('position','relative');
    slider.addClass('nivoSlider');
    var kids=slider.children();
    kids.each(function(){
      var child=$(this);
      var link='';
      if(!child.is('img')){
        if(child.is('a')){
          child.addClass('nivo-imageLink');
          link=child;
        }
        child=child.find('img:first');
      }
      var childWidth=child.width();
      if(childWidth==0)childWidth=child.attr('width');
      var childHeight=child.height();
      if(childHeight==0)childHeight=child.attr('height');
      if(childWidth>slider.width()){
        slider.width(childWidth);
      }
      if(childHeight>slider.height()){
        slider.height(childHeight);
      }
      if(link!=''){
        link.css('display','none');
      }
      child.css('display','none');
      vars.totalSlides++;
    });
    if(settings.startSlide>0){
      if(settings.startSlide>=vars.totalSlides)settings.startSlide=vars.totalSlides-1;
      vars.currentSlide=settings.startSlide;
    }
    if($(kids[vars.currentSlide]).is('img')){
      vars.currentImage=$(kids[vars.currentSlide]);
    }else{
      vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
    }
    if($(kids[vars.currentSlide]).is('a')){
      $(kids[vars.currentSlide]).css('display','block');
    }
    slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
    slider.append($('<div class="nivo-caption"><p></p></div>').css({
      display:'none',
      opacity:settings.captionOpacity
      }));
    var processCaption=function(settings){
      var nivoCaption=$('.nivo-caption',slider);
      if(vars.currentImage.attr('title')!=''&&vars.currentImage.attr('title')!=undefined){
        var title=vars.currentImage.attr('title');
        if(title.substr(0,1)=='#')title=$(title).html();
        if(nivoCaption.css('display')=='block'){
          nivoCaption.find('p').fadeOut(settings.animSpeed,function(){
            $(this).html(title);
            $(this).fadeIn(settings.animSpeed);
          });
        }else{
          nivoCaption.find('p').html(title);
        }
        nivoCaption.fadeIn(settings.animSpeed);
      }else{
        nivoCaption.fadeOut(settings.animSpeed);
      }
    }
  processCaption(settings);
  var timer=0;
  if(!settings.manualAdvance&&kids.length>1){
    timer=setInterval(function(){
      nivoRun(slider,kids,settings,false);
    },settings.pauseTime);
  }
  if(settings.directionNav){
    slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+settings.prevText+'</a><a class="nivo-nextNav">'+settings.nextText+'</a></div>');
    if(settings.directionNavHide){
      $('.nivo-directionNav',slider).hide();
      slider.hover(function(){
        $('.nivo-directionNav',slider).show();
      },function(){
        $('.nivo-directionNav',slider).hide();
      });
    }
    $('a.nivo-prevNav',slider).live('click',function(){
      if(vars.running)return false;
      clearInterval(timer);
      timer='';
      vars.currentSlide-=2;
      nivoRun(slider,kids,settings,'prev');
    });
    $('a.nivo-nextNav',slider).live('click',function(){
      if(vars.running)return false;
      clearInterval(timer);
      timer='';
      nivoRun(slider,kids,settings,'next');
    });
  }
  if(settings.controlNav){
    var nivoControl=$('<div class="nivo-controlNav"></div>');
    slider.append(nivoControl);
    for(var i=0;i<kids.length;i++){
      if(settings.controlNavThumbs){
        var child=kids.eq(i);
        if(!child.is('img')){
          child=child.find('img:first');
        }
        if(settings.controlNavThumbsFromRel){
          nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('rel')+'" alt="" /></a>');
        }else{
          nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('src').replace(settings.controlNavThumbsSearch,settings.controlNavThumbsReplace)+'" alt="" /></a>');
        }
      }else{
      nivoControl.append('<a class="nivo-control" rel="'+i+'">'+(i+1)+'</a>');
    }
    }
$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
  $('.nivo-controlNav a',slider).live('click',function(){
  if(vars.running)return false;
  if($(this).hasClass('active'))return false;
  clearInterval(timer);
  timer='';
  slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
  vars.currentSlide=$(this).attr('rel')-1;
  nivoRun(slider,kids,settings,'control');
});
}
if(settings.keyboardNav){
  $(window).keypress(function(event){
    if(event.keyCode=='37'){
      if(vars.running)return false;
      clearInterval(timer);
      timer='';
      vars.currentSlide-=2;
      nivoRun(slider,kids,settings,'prev');
    }
    if(event.keyCode=='39'){
      if(vars.running)return false;
      clearInterval(timer);
      timer='';
      nivoRun(slider,kids,settings,'next');
    }
  });
}
if(settings.pauseOnHover){
  slider.hover(function(){
    vars.paused=true;
    clearInterval(timer);
    timer='';
  },function(){
    vars.paused=false;
    if(timer==''&&!settings.manualAdvance){
      timer=setInterval(function(){
        nivoRun(slider,kids,settings,false);
      },settings.pauseTime);
    }
  });
}
slider.bind('nivo:animFinished',function(){
  vars.running=false;
  $(kids).each(function(){
    if($(this).is('a')){
      $(this).css('display','none');
    }
  });
if($(kids[vars.currentSlide]).is('a')){
  $(kids[vars.currentSlide]).css('display','block');
}
if(timer==''&&!vars.paused&&!settings.manualAdvance){
  timer=setInterval(function(){
    nivoRun(slider,kids,settings,false);
  },settings.pauseTime);
}
settings.afterChange.call(this);
});
var createSlices=function(slider,settings,vars){
  for(var i=0;i<settings.slices;i++){
    var sliceWidth=Math.round(slider.width()/settings.slices);
    if(i==settings.slices-1){
      slider.append($('<div class="nivo-slice"></div>').css({
        left:(sliceWidth*i)+'px',
        width:(slider.width()-(sliceWidth*i))+'px',
        height:'0px',
        opacity:'0',
        background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'
        }));
    }else{
      slider.append($('<div class="nivo-slice"></div>').css({
        left:(sliceWidth*i)+'px',
        width:sliceWidth+'px',
        height:'0px',
        opacity:'0',
        background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'
        }));
    }
  }
  }
var createBoxes=function(slider,settings,vars){
  var boxWidth=Math.round(slider.width()/settings.boxCols);
  var boxHeight=Math.round(slider.height()/settings.boxRows);
  for(var rows=0;rows<settings.boxRows;rows++){
    for(var cols=0;cols<settings.boxCols;cols++){
      if(cols==settings.boxCols-1){
        slider.append($('<div class="nivo-box"></div>').css({
          opacity:0,
          left:(boxWidth*cols)+'px',
          top:(boxHeight*rows)+'px',
          width:(slider.width()-(boxWidth*cols))+'px',
          height:boxHeight+'px',
          background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'
          }));
      }else{
        slider.append($('<div class="nivo-box"></div>').css({
          opacity:0,
          left:(boxWidth*cols)+'px',
          top:(boxHeight*rows)+'px',
          width:boxWidth+'px',
          height:boxHeight+'px',
          background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'
          }));
      }
    }
    }
  }
var nivoRun=function(slider,kids,settings,nudge){
  var vars=slider.data('nivo:vars');
  if(vars&&(vars.currentSlide==vars.totalSlides-1)){
    settings.lastSlide.call(this);
  }
  if((!vars||vars.stop)&&!nudge)return false;
  settings.beforeChange.call(this);
  if(!nudge){
    slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
  }else{
    if(nudge=='prev'){
      slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
    }
    if(nudge=='next'){
      slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
    }
  }
vars.currentSlide++;
if(vars.currentSlide==vars.totalSlides){
  vars.currentSlide=0;
  settings.slideshowEnd.call(this);
}
if(vars.currentSlide<0)vars.currentSlide=(vars.totalSlides-1);
if($(kids[vars.currentSlide]).is('img')){
  vars.currentImage=$(kids[vars.currentSlide]);
}else{
  vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
}
if(settings.controlNav){
  $('.nivo-controlNav a',slider).removeClass('active');
  $('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
}
processCaption(settings);
$('.nivo-slice',slider).remove();
$('.nivo-box',slider).remove();
if(settings.effect=='random'){
  var anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade','boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
  vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))];
  if(vars.randAnim==undefined)vars.randAnim='fade';
}
if(settings.effect.indexOf(',')!=-1){
  var anims=settings.effect.split(',');
  vars.randAnim=anims[Math.floor(Math.random()*(anims.length))];
  if(vars.randAnim==undefined)vars.randAnim='fade';
}
vars.running=true;
if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft'){
  createSlices(slider,settings,vars);
  var timeBuff=0;
  var i=0;
  var slices=$('.nivo-slice',slider);
  if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')slices=$('.nivo-slice',slider)._reverse();
  slices.each(function(){
    var slice=$(this);
    slice.css({
      'top':'0px'
    });
    if(i==settings.slices-1){
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed,'',function(){
          slider.trigger('nivo:animFinished');
        });
      },(100+timeBuff));
    }else{
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed);
      },(100+timeBuff));
    }
    timeBuff+=50;
    i++;
  });
}
else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft'){
  createSlices(slider,settings,vars);
  var timeBuff=0;
  var i=0;
  var slices=$('.nivo-slice',slider);
  if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')slices=$('.nivo-slice',slider)._reverse();
  slices.each(function(){
    var slice=$(this);
    slice.css({
      'bottom':'0px'
    });
    if(i==settings.slices-1){
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed,'',function(){
          slider.trigger('nivo:animFinished');
        });
      },(100+timeBuff));
    }else{
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed);
      },(100+timeBuff));
    }
    timeBuff+=50;
    i++;
  });
}
else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft'){
  createSlices(slider,settings,vars);
  var timeBuff=0;
  var i=0;
  var v=0;
  var slices=$('.nivo-slice',slider);
  if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')slices=$('.nivo-slice',slider)._reverse();
  slices.each(function(){
    var slice=$(this);
    if(i==0){
      slice.css('top','0px');
      i++;
    }else{
      slice.css('bottom','0px');
      i=0;
    }
    if(v==settings.slices-1){
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed,'',function(){
          slider.trigger('nivo:animFinished');
        });
      },(100+timeBuff));
    }else{
      setTimeout(function(){
        slice.animate({
          height:'100%',
          opacity:'1.0'
        },settings.animSpeed);
      },(100+timeBuff));
    }
    timeBuff+=50;
    v++;
  });
}
else if(settings.effect=='fold'||vars.randAnim=='fold'){
  createSlices(slider,settings,vars);
  var timeBuff=0;
  var i=0;
  $('.nivo-slice',slider).each(function(){
    var slice=$(this);
    var origWidth=slice.width();
    slice.css({
      top:'0px',
      height:'100%',
      width:'0px'
    });
    if(i==settings.slices-1){
      setTimeout(function(){
        slice.animate({
          width:origWidth,
          opacity:'1.0'
        },settings.animSpeed,'',function(){
          slider.trigger('nivo:animFinished');
        });
      },(100+timeBuff));
    }else{
      setTimeout(function(){
        slice.animate({
          width:origWidth,
          opacity:'1.0'
        },settings.animSpeed);
      },(100+timeBuff));
    }
    timeBuff+=50;
    i++;
  });
}
else if(settings.effect=='fade'||vars.randAnim=='fade'){
  createSlices(slider,settings,vars);
  var firstSlice=$('.nivo-slice:first',slider);
  firstSlice.css({
    'height':'100%',
    'width':slider.width()+'px'
    });
  firstSlice.animate({
    opacity:'1.0'
  },(settings.animSpeed*2),'',function(){
    slider.trigger('nivo:animFinished');
  });
}
else if(settings.effect=='slideInRight'||vars.randAnim=='slideInRight'){
  createSlices(slider,settings,vars);
  var firstSlice=$('.nivo-slice:first',slider);
  firstSlice.css({
    'height':'100%',
    'width':'0px',
    'opacity':'1'
  });
  firstSlice.animate({
    width:slider.width()+'px'
    },(settings.animSpeed*2),'',function(){
    slider.trigger('nivo:animFinished');
  });
}
else if(settings.effect=='slideInLeft'||vars.randAnim=='slideInLeft'){
  createSlices(slider,settings,vars);
  var firstSlice=$('.nivo-slice:first',slider);
  firstSlice.css({
    'height':'100%',
    'width':'0px',
    'opacity':'1',
    'left':'',
    'right':'0px'
  });
  firstSlice.animate({
    width:slider.width()+'px'
    },(settings.animSpeed*2),'',function(){
    firstSlice.css({
      'left':'0px',
      'right':''
    });
    slider.trigger('nivo:animFinished');
  });
}
else if(settings.effect=='boxRandom'||vars.randAnim=='boxRandom'){
  createBoxes(slider,settings,vars);
  var totalBoxes=settings.boxCols*settings.boxRows;
  var i=0;
  var timeBuff=0;
  var boxes=shuffle($('.nivo-box',slider));
  boxes.each(function(){
    var box=$(this);
    if(i==totalBoxes-1){
      setTimeout(function(){
        box.animate({
          opacity:'1'
        },settings.animSpeed,'',function(){
          slider.trigger('nivo:animFinished');
        });
      },(100+timeBuff));
    }else{
      setTimeout(function(){
        box.animate({
          opacity:'1'
        },settings.animSpeed);
      },(100+timeBuff));
    }
    timeBuff+=20;
    i++;
  });
}
else if(settings.effect=='boxRain'||vars.randAnim=='boxRain'||settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
  createBoxes(slider,settings,vars);
  var totalBoxes=settings.boxCols*settings.boxRows;
  var i=0;
  var timeBuff=0;
  var rowIndex=0;
  var colIndex=0;
  var box2Darr=new Array();
  box2Darr[rowIndex]=new Array();
  var boxes=$('.nivo-box',slider);
  if(settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
    boxes=$('.nivo-box',slider)._reverse();
  }
  boxes.each(function(){
    box2Darr[rowIndex][colIndex]=$(this);
    colIndex++;
    if(colIndex==settings.boxCols){
      rowIndex++;
      colIndex=0;
      box2Darr[rowIndex]=new Array();
    }
  });
for(var cols=0;cols<(settings.boxCols*2);cols++){
  var prevCol=cols;
  for(var rows=0;rows<settings.boxRows;rows++){
    if(prevCol>=0&&prevCol<settings.boxCols){
      (function(row,col,time,i,totalBoxes){
        var box=$(box2Darr[row][col]);
        var w=box.width();
        var h=box.height();
        if(settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
          box.width(0).height(0);
        }
        if(i==totalBoxes-1){
          setTimeout(function(){
            box.animate({
              opacity:'1',
              width:w,
              height:h
            },settings.animSpeed/1.3,'',function(){
              slider.trigger('nivo:animFinished');
            });
          },(100+time));
        }else{
          setTimeout(function(){
            box.animate({
              opacity:'1',
              width:w,
              height:h
            },settings.animSpeed/1.3);
          },(100+time));
        }
      })(rows,prevCol,timeBuff,i,totalBoxes);
    i++;
  }
  prevCol--;
  }
timeBuff+=100;
}
}
}
var shuffle=function(arr){
  for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);
  return arr;
}
var trace=function(msg){
  if(this.console&&typeof console.log!="undefined")
    console.log(msg);
}
this.stop=function(){
  if(!$(element).data('nivo:vars').stop){
    $(element).data('nivo:vars').stop=true;
    trace('Stop Slider');
  }
}
this.start=function(){
  if($(element).data('nivo:vars').stop){
    $(element).data('nivo:vars').stop=false;
    trace('Start Slider');
  }
}
settings.afterLoad.call(this);
return this;
};

$.fn.nivoSlider=function(options){
  return this.each(function(key,value){
    var element=$(this);
    if(element.data('nivoslider'))return element.data('nivoslider');
    var nivoslider=new NivoSlider(this,options);
    element.data('nivoslider',nivoslider);
  });
};

$.fn.nivoSlider.defaults={
  effect:'random',
  slices:15,
  boxCols:8,
  boxRows:4,
  animSpeed:500,
  pauseTime:3000,
  startSlide:0,
  directionNav:true,
  directionNavHide:true,
  controlNav:true,
  controlNavThumbs:false,
  controlNavThumbsFromRel:false,
  controlNavThumbsSearch:'.jpg',
  controlNavThumbsReplace:'_thumb.jpg',
  keyboardNav:true,
  pauseOnHover:true,
  manualAdvance:false,
  captionOpacity:0.8,
  prevText:'Prev',
  nextText:'Next',
  beforeChange:function(){},
  afterChange:function(){},
  slideshowEnd:function(){},
  lastSlide:function(){},
  afterLoad:function(){}
};

$.fn._reverse=[].reverse;
})(jQuery);
