/*
 * jQuery Nivo Slider v2.5.1
 * 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')!='') {
                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('mouseover', function() {
                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');
            });
            $('.nivo-controlNav a',slider).live('click', function() {
                var index = $(this).prevAll().length;
                window.location.href = $('#home-slider').find('a:eq('+index+')').attr('href');
            });
        }
        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);
