var DocumentLoaded = false;
window.addEvent('load',function(){DocumentLoaded = true});
var DJImageSlider = new Class({
    initialize: function(settings, options){
        var slider_size = 0;
        var loaded_images = 0;
        var max_slides = 0;
        var current_slide = 0;
        var slider = 'sliderHO';
        var autoplay = options.auto;
        var stop = 0;
        var show_nav = 0;
		var is_fading = false;
     
        var slides = $('sliderHO').getChildren('li');
        slides.each(function(){
            slider_size += settings.slide_size;
            loaded_images++;
        })
        
        max_slides = loaded_images - settings.visible_slides;
		
        $(slider).setStyle('position', 'relative');
		
        var slideImages;
		if (settings.slider_type == 2) { // fade
			slides.setStyle('position', 'absolute');
			slides.setStyle('top', 0);
			slides.setStyle('left', 0);
			$(slider).setStyle('width', settings.slide_size);
			slides.setOpacity(0);
			slides[0].setOpacity(1);
			slides[0].setStyle('z-index','10');
			$('navigationHO').setStyle('z-index',20);
						
		} else if (settings.slider_type == 1) { // vertical
            $(slider).setStyle('top', 0);
            $(slider).setStyle('height', slider_size);
            slideImages = new Fx.Style(slider, 'top', {
                duration: options.duration,
                transition: options.transition,
                wait: false
            });
        }
        else { // horizontal
            $(slider).setStyle('left', 0);
            $(slider).setStyle('width', slider_size);
            slideImages = new Fx.Style(slider, 'left', {
                duration: options.duration,
                transition: options.transition,
                wait: false
            });
        }
        
		// navigation effects
		if (settings.show_buttons==1) {
			var play = new Fx.Style('playHO', 'opacity', {
				duration: 200,
				wait: false
			}).set(0);
			var pause = new Fx.Style('pauseHO', 'opacity', {
				duration: 200,
				wait: false
			}).set(0);
		}
		if (settings.show_arrows==1) {
			var nextFx = new Fx.Style('nextHO', 'opacity', {
				duration: 200,
				wait: false
			}).set(0);
			var prevFx = new Fx.Style('prevHO', 'opacity', {
				duration: 200,
				wait: false
			}).set(0);
		}
		
        $('nextHO').addEvent('click', function(){
            if (settings.show_buttons==1) hideNavigation();
            nextSlide();
        });        
        $('prevHO').addEvent('click', function(){
            if (settings.show_buttons==1) hideNavigation();
            prevSlide();
        });        
        $('playHO').addEvent('click', function(){
            changeNavigation();
            autoplay = 1;
        });        
        $('pauseHO').addEvent('click', function(){
            changeNavigation();
            autoplay = 0;
        });
        
		$('silslider-loaderHO').addEvents({
            'mouseenter': function(){
                if (settings.show_buttons==1) showNavigation();
				if (settings.show_arrows==1) {
					nextFx.start(1);
					prevFx.start(1);
				}
				stop = 1;
            },
            'mouseleave': function(){
                if (settings.show_buttons==1) hideNavigation();
				if (settings.show_arrows==1) {
					nextFx.start(0);
					prevFx.start(0);
				}
				stop = 0;
            }
        });
		
		var buttons = $('cust-navigationHO').getElements('.load-button');
		buttons.each(function(el,index){
			el.addEvent('click',function(e){
				if (!is_fading && !el.hasClass('load-button-active')) {
					loadSlide(index);
				}
			});
		});
		
		function updateActiveButton(active){
			buttons.each(function(button,index){
				button.removeClass('load-button-active');
				if(index==active) button.addClass('load-button-active');
			});			
		}
		
		function loadSlide(i) {
			if (settings.slider_type == 2) {
				if(is_fading) return;
				is_fading = true;
				prev_slide = current_slide;
				current_slide = i;
				makeFade(prev_slide);
				
			}
			else {
				current_slide = i;
				slideImages.start(-settings.slide_size * current_slide);
				updateActiveButton(current_slide);
			}
		}
		
        function nextSlide(){
			if (settings.slider_type == 2)
				nextFade();
			else {
				if (current_slide < max_slides) 
					current_slide++;
				else 
					current_slide = 0;
				slideImages.start(-settings.slide_size * current_slide);
				updateActiveButton(current_slide);
			}
        }
        
        function prevSlide(){
			if (settings.slider_type == 2) {
				prevFade();
			}
			else {
				if (current_slide > 0) {
					current_slide--;
				}
				else {
					current_slide = max_slides;
				}
				slideImages.start(-settings.slide_size * current_slide);
				updateActiveButton(current_slide);
			}
        }
        
		function nextFade(){
			if(is_fading) return;
			is_fading = true;
			prev_slide = current_slide;
			if (current_slide < max_slides) {
				current_slide++;
			}
			else {
				current_slide = 0;
			}
				
			makeFade(prev_slide);
		}
		
		function prevFade(){
			if(is_fading) return;
			is_fading = true;
			prev_slide = current_slide;
			if (current_slide > 0) {
				current_slide--;
			}
			else {
				current_slide = max_slides;
			}
			
			makeFade(prev_slide);			
		}
		
		function makeFade(prev_slide){
			slides[current_slide].setOpacity(1); //slides[current_slide].effect('opacity',{duration: options.duration, wait: true}).start(1);
			slides[prev_slide].effect('opacity',{duration: options.duration, wait: true}).start(0).chain(function(){
				slides[prev_slide].setStyle('z-index',0);
				slides[current_slide].setStyle('z-index',10);
				is_fading = false;
			});
			updateActiveButton(current_slide);
		}
		
        function hideNavigation(){
            if (!autoplay) {
                play.start(stop, 0).chain(function(){
                    if (!show_nav) 
                        $('playHO').setStyle('display', 'none');
                });
            }
            else {
                pause.start(stop, 0).chain(function(){
                    if (!show_nav) 
                        $('pauseHO').setStyle('display', 'none');
                });
            }
            show_nav = 0;
        }
        
        function showNavigation(){
            if (!autoplay) {
                $('playHO').setStyle('display', 'block');
                play.start(stop, 1);
            }
            else {
                $('pauseHO').setStyle('display', 'block');
                pause.start(stop, 1);
            }
            show_nav = 1;
        }
        function changeNavigation(){
            if (autoplay) {
                $('pauseHO').setStyle('display', 'none');
                if (settings.show_buttons==1) pause.set(0);
                $('playHO').setStyle('display', 'block');
                if (settings.show_buttons==1) play.set(1);
            }
            else {
                $('playHO').setStyle('display', 'none');
                if (settings.show_buttons==1) play.set(0);
                $('pauseHO').setStyle('display', 'block');
                if (settings.show_buttons==1) pause.set(1);
            }
        }
        
        function slidePlay(){
            setTimeout(function(){
                if (autoplay && !stop) 
                    nextSlide();
                slidePlay();
            }, options.delay);
        }
		
		function sliderLoaded(){
			// hide loader and show slider
			if (/\bMSIE 8.0\b/.test(navigator.appVersion)) { // only for IE8
				var visibles = new Array();
				for (var i = 0; i < settings.visible_slides; i++) {
					visibles[i] = slides[i];
				}
				visibles.each(function(el){
					el.setStyle('opacity', 0);
				});
			}
			
			$('silsliderHO').setOpacity(0);
			$('silsliderHO').setStyle('display','block');
			$('silslider-loaderHO').setStyle('background','url(blank.gif) center center no-repeat');
			
			$('silsliderHO').effect('opacity',{wait: true, duration: 500}).start(0,1);
			
			if (/\bMSIE 8.0\b/.test(navigator.appVersion)) { // only for IE8
				visibles.each(function(el){
					el.effect('opacity', {
						wait: true,
						duration: 500
					}).start(0, 1);
				});
			}
			// count and change silslider dimensions
			buttons_height = $('nextHO').getStyle('height').toInt();
			buttons_height = Math.max(buttons_height,$('prevHO').getStyle('height').toInt());
			//$('navigation' + settings.id).setStyle('height',buttons_height);
        	button_pos = $('navigationHO').getStyle('top').toInt();
        	silslider_height = $('silsliderHO').getStyle('height').toInt();
			if(button_pos > 0) {
				new_height = buttons_height + button_pos;
			} else {
				new_height = silslider_height - button_pos;
			}        	
        	if (new_height > silslider_height) {
            	$('silsliderHO').setStyle('height', new_height);
				$('silslider-loaderHO').setStyle('height', new_height);
        		if (button_pos < 0) {
					$('navigationHO').setStyle('top', 0);
					$('slider-containerHO').setStyle('top', -button_pos);
				}
        	}
			buttons_margin = $('navigationHO').getStyle('margin-left').toInt() + $('navigationHO').getStyle('margin-right').toInt();
			silslider_width = $('silsliderHO').getStyle('width').toInt();
			if(buttons_margin < 0) {
				$('silslider-loaderHO').setStyle('width', silslider_width - buttons_margin);
			}
			nav_width = $('navigationHO').getStyle('width').toInt();
			play_width = $('playHO').getStyle('width').toInt();
			$('playHO').setStyle('left',(nav_width/2 - play_width/2));
			pause_width = $('playHO').getStyle('width').toInt();
			$('pauseHO').setStyle('left',(nav_width/2 - pause_width/2));
			
			if(autoplay) {
				$('playHO').setStyle('display','none');
			} else {
				$('pauseHO').setStyle('display','none');
			}
			
			// start autoplay
			slidePlay();
		}
		
		if(settings.preload) sliderLoaded.delay(settings.preload);
		else if (DocumentLoaded) sliderLoaded();
		else window.addEvent('load', sliderLoaded);
        
    }
    
});

