var Kompost = function()
{
    this.kompost_container = "#kompost_player";
    this.slider_container = "#kompost_slider";
    this.image_class = "kompost_large_image";
    this.image_thumb_class = "kompost_small_image";
    this.slider_class = "kompost_slider_image";
    
    this.image_set = $("."+this.image_class);
    this.thumb_set = $("."+this.image_thumb_class);
    this.slider_set = $("."+this.slider_class);
    this.inflection = $(this.image_set).length;                                 //the point at which to reset the current slide
    
    this.current_slide = -1;                                                    //initialize to -1 to let it know that it hasn't played yet
    
    //boolean checks
    this.isPlaying = true;
    this.pauseOnMouseOver = true;
    this.showSliderBorderAlways = true;                                         //trumps never show slider border
    this.showSliderBorderNever = false;                                                  
    
    //timing intervals
    this.interval = 5000;
    this.animateFadeOutTime = 1000;
    this.animateFadeInTime = 1000;
    this.animateThumbFadeOutTime = 700;
    this.animateThumbFadeInTime = 900;
    this.transitionDelay = 400;
    this.displayThumbTime = 2000;
    this.mouseOverAnimationSpeed = 200;
    this.playAfterMouseOutDelay = 1000;
    this.startPlayerDelay = 1000;
    this.displaySliderOffsetDelay = 400;
    this.sliderIntroAnimateTime = 500;
    
    //image sizes
    this.thumb_width = 414;
    this.thumb_height = 217;
    this.slider_width = 50;
    this.slider_height = 50;
    this.container_width = 926;
    this.container_height = 371;
    
    //paddings
    this.mouseDetectionContainerPadding = 10;
    
    //offsets and stuff
    this.thumb_left = 600;                                                      //moves the thumb_set to the left by this amount
    this.slider_top = 40;
    this.slider_container_margin_top = 240;
    this.slider_container_padding_left = 30;
    this.main_image_offset = this.container_width;                              //allows the image to slide
	
	//positioning
	this.slider_container_position = "relative";
    
    //opacity settings (0 to 1)
    this.main_image_mouseover_opacity = .75;
    this.thumb_set_opacity = .75;
    this.slider_background_opacity = .25;
    this.slider_image_mouseover_opacity = .5;
    
    this.show_overlay = true;
    
    //animation style
    this.animationStyle = "1";
    
    var kompost = this;
    
    this.setup = function()
    {
      // $(function(){
            //first apply the necessary css
            $(kompost.slider_container).css("position", "relative")
                                       .css("padding", 10)
                                       .css("z-index", "30")
                                       .css("margin-top", kompost.slider_container_margin_top)
                                       .css("padding-left", kompost.slider_container_padding_left)
                                       .css("top", kompost.slider_top)
                                       .css("left", kompost.slider_left);
                                       
            $(kompost.slider_set).css("opacity", 0)
                              .css("top", -50)
                              .css("position", "relative")
                              .css("width", kompost.slider_width)
                              .css("height", kompost.slider_height)
            
            $(kompost.image_set).css("opacity", 0)
                             .css("position", "absolute")
                             .css("z-index", "10")
                             .css("display", "none");
            
            $(kompost.thumb_set).css("opacity", 0)
                             .css("position", "absolute")
                             .css("height", kompost.thumb_height)
                             .css("width", kompost.thumb_width)
                             .css("z-index", "20")
                             .css("left", kompost.thumb_left);
                             
            
            
            $(kompost.kompost_container).css("position", kompost.slider_container_position)
                    .css("overflow", "hidden")
                    .css("width", kompost.container_width)
                    .css("height", kompost.container_height);
                    
            
            kompost.getNextSlide(true);
            
            setTimeout(function(){kompost.image_set.fadeIn("fast");}, kompost.startPlayerDelay*.5)
            setTimeout(function(){
                setInterval(kompost.getNextSlide, kompost.interval);
                
                $(kompost.slider_set).each(function(index){
                    var obj = $(kompost.slider_set).get(index);
                    setTimeout(function(){
                        $(obj).animate({opacity: 1, top: (kompost.slider_top)}, kompost.sliderIntroAnimateTime);
                    }, index*kompost.displaySliderOffsetDelay);
                    
                });
                
                if(kompost.showSliderBorderAlways)
                {
                    setTimeout(kompost.showSliderBorder, 800);
                                        
                }
                
                
            }, kompost.startPlayerDelay);
            
            
            //listeners for the compost container
            $(kompost.kompost_container).mouseover(function(){
                
                if(kompost.pauseOnMouseOver){
                    kompost.pause();   
                }
                $(kompost.image_set.get(kompost.current_slide)).animate({ opacity: kompost.main_image_mouseover_opacity }, kompost.mouseOverAnimationSpeed);
                
            }).mouseout(function(e){
                
                var padding = kompost.mouseDetectionContainerPadding;
                var position = $(kompost.kompost_container).offset();
                var rightMost = position.left + $(kompost.kompost_container).width();
                var bottomMost = position.top + $(kompost.kompost_container).height();
                
                
                //we'll use a little collision detection to ensure that our mouse is actually not inside the container area
                if(e.pageX < (position.left + padding) || e.pageX > (rightMost - padding) || e.pageY < (position.top + padding) || e.pageY > (bottomMost - padding) )
                {
                    $(kompost.image_set.get(kompost.current_slide)).animate({ opacity: 1 }, kompost.mouseOverAnimationSpeed);
                    setTimeout(function(){
                        kompost.play();
                    }, kompost.playAfterMouseOutDelay)
                }

            });
            
            //listeners for the slider
            $(kompost.slider_set).mouseover(function(){
                $(this).animate({opacity: kompost.slider_image_mouseover_opacity}, 200);
                
                if(kompost.pauseOnMouseOver){
                    kompost.pause();   
                }
                
                if(!kompost.showSliderBorderAlways)
                {
                    if(!kompost.showSliderBorderNever)
                        kompost.showSliderBorder();
                }
            }).mouseout(function(e){
                $(this).animate({opacity: 1}, 200);
                
                var position = $(this).offset();
                
                if(!kompost.showSliderBorderAlways)
                {
                    if(!kompost.showSliderBorderNever)
                    {
                        //use a little collision detection to ensure that we're still within the y boundaries
                        if( e.pageY < (position.top) || e.pageY > (position.top) + ($(this).height()) )
                        {
                            kompost.hideSliderBorder();                          
                        } 
                    }

                }


            }).click(function(){
                kompost.pause();
                kompost.getNextSlide(true, $(this).index());
            });
            
            //listeners for slider container
            $(kompost.slider_container).mouseout(function(e){
                 
            });
        //});
    }
    
    this.getNextSlide = function(ignorePlay, slideToPlay)
    {
        
        if(ignorePlay == null)
            ignorePlay = false;
            
        if(slideToPlay != null)
        {
            kompost.current_slide = slideToPlay-1;
        }
            
        $(function(){
            
            if(kompost.isPlaying == true || ignorePlay == true)
            {
                $(kompost.thumb_set).animate({ top: "-175", opacity: 0}, kompost.animateThumbFadeOutTime);
                $(kompost.image_set).css("z-index", 0);
                
                setTimeout(function(){
                    
                    if(kompost.animationStyle == "2")
                    {
                        //move left
                        $(kompost.image_set).animate({opacity:0}, kompost.animateFadeOutTime, function(){ $(kompost.image_set).css("left", kompost.main_image_offset); });
                        $(kompost.image_set.get(kompost.current_slide)).animate({opacity: 1, left: 0 }, kompost.animateFadeInTime).css("z-index", 1);
                    }
                    else if(kompost.animationStyle == "1")
                    {
                        //fade in
                        $(kompost.image_set).animate({opacity:0}, kompost.animateFadeOutTime, function(){});
                        $(kompost.image_set.get(kompost.current_slide)).animate({opacity: 1}, kompost.animateFadeInTime).css("z-index", 1); 
                    }

                    
                    
                    if(kompost.show_overlay){
                        setTimeout(function(){
                            $(kompost.thumb_set.get(kompost.current_slide)).animate({top: "0", opacity: kompost.thumb_set_opacity}, kompost.animateThumbFadeInTime);
                        }, kompost.displayThumbTime);
                    }
                    
                }, kompost.transitionDelay);
                
                kompost.current_slide+=1;
                if(kompost.current_slide >= kompost.inflection)
                {
                    kompost.current_slide = 0;
                }
            }
        });
    }
    
    this.play = function()
    {
        kompost.isPlaying = true;
    }
    
    this.pause = function()
    {
        kompost.isPlaying = false;
    }
    
    this.showSliderBorder = function()
    {
        $(kompost.slider_container).css("background", "rgba(0, 0, 0, "+kompost.slider_background_opacity+")");
    }
    
    this.hideSliderBorder = function()
    {
        $(kompost.slider_container).css("background", "none");
    }
    
    //calculates times based on major interval
    this.calculateTimingByMainInterval = function()
    {
        this.animateFadeOutTime = this.interval*.2;
        this.animateFadeInTime = this.interval*.2;
        this.animateThumbFadeOutTime = this.interval*.14;
        this.animateThumbFadeInTime = this.interval*.18;
        this.transitionDelay = this.interval*.08;
        this.displayThumbTime = this.interval*.4;
        this.startPlayerDelay = this.interval*.2;
        
        if(this.interval < 5000)
        {
            this.mouseOverAnimationSpeed = this.interval*.04;
            this.playAfterMouseOutDelay = this.interval*.2;
            this.displaySliderOffsetDelay = this.interval*.08;
            this.sliderIntroAnimateTime = this.interval*.1;
        }
    }
}
