/*
 * Author: Ludovit Voros
 * Before including must be loaded jquery and jequery UI easing effects
 * input: $(selector).headline_slideshow();
 * 
 */

//required global variables
var headline_slideshow_count = null;
var headline_slideshow_slideholder = null;
var headline_slideshow_width = null;
var headline_slideshow_direction = null;
var headline_slideshow_switchholder = null;
var headline_slideshow_allowscroll = true;
var headline_slideshow_timer = null;
var headline_slideshow_speed = null;
var headline_slideshow_transitionspeed = null;

jQuery.fn.headline_slideshow = function() {
    var slideshowholder = $(this[0]) // my element
    var args = arguments[0] || {}; // passed arguments: images,headings,descriptions,links
    var textheight = args['textheight'] || 50;
    headline_slideshow_speed = args['speed'] || 2000;
    headline_slideshow_transitionspeed = args['transitionspeed'] || 500;
    
    var slides = slideshowholder.children('div');
    var slidecount = slides.length;
    
    var slidewidth = slideshowholder.width();
    var slideheight = slideshowholder.height();
    
    if(slidecount > 0){
    
        var data = {'text':[],'image':[]};

        //getting slides content into data array
        slides.each(function(){
            var text = $(this).children('.headline_slideshow_text').html();
            if(text != undefined) data['text'][data['text'].length] = text;
            var image = $(this).children('.headline_slideshow_image').attr('src');
            if(image != undefined) data['image'][data['image'].length] = image;
        });
        slideshowholder.empty();
        slideshowholder.addClass('headline_slideshow');

        //setting slides and other
        if(data['text'].length == slidecount && data['image'].length == slidecount){
            //adding required elements
            var slideholder = $('<div class="headline_slideshow_slideholder"></div>');
            slideholder.width(slidecount*slidewidth)
                       .height(slideheight)
                       .appendTo(slideshowholder);
            var slideswitchholder = $('<div class="headline_slideshow_slideswitchholder"></div>');
            slideswitchholder.css({'margin-top': '-'+slideheight+'px'}).appendTo(slideshowholder);
            
            var slide;
            var slideswitch;
            var slidetext;
            for(var i=0;i<slidecount;i++){
                slide = $('<div class="headline_slideshow_slide" style="width: '+slidewidth+'px;height: '+slideheight+'px;background-image: url(\''+data['image'][i]+'\');"></div>');
                slidetext = $('<div class="headline_slideshow_slidetext" style="height: '+textheight+'px;top:'+(slideheight-textheight)+'px;"><p>'+data['text'][i]+'</p></div>');
                slide.append(slidetext);
                slideholder.append(slide);
                
                slideswitch = $('<div class="headline_slideshow_sw'+i+' headline_slideshow_switch" onclick="headline_slideshow_scrollToSlide('+i+')"></div>');
                slideswitchholder.append(slideswitch);
            }
            slideswitchholder.css({
                'margin-top': '-'+slideheight+'px',
                'margin-left':(slidewidth-slideswitchholder.width())+'px'
            });
            
            $('<div class="headline_slideshow_clear"></div>').appendTo(slideholder);
            
            //setting global vars
            headline_slideshow_count = slidecount;
            headline_slideshow_slideholder = slideholder;
            headline_slideshow_width = slidewidth;
            headline_slideshow_switchholder = slideswitchholder;
            
            slideshowholder.hover(headline_slideshow_stopScroll,headline_slideshow_allowscrollScroll);
            
            headline_slideshow_startSliding();
        }else{
            slideshowholder.html('headline_slideshow: Wrong format for slide definition!');
        }
    }else{
        slideshowholder.html('Novinky zverejníme čoskoro!');
    }
}

//starts the sliding and initial operations
function headline_slideshow_startSliding(){
    headline_slideshow_direction = 'left';
    headline_slideshow_activeslide = 0;
    headline_slideshow_switchholder.children('.headline_slideshow_sw0').addClass('headline_slideshow_switchactive');
    headline_slideshow_timer = setTimeout("headline_slideshow_scrollSlides();",headline_slideshow_speed);
}

//scrolls the slides
function headline_slideshow_scrollSlides(){
    if(headline_slideshow_count != 1){
        clearTimeout(headline_slideshow_timer);
        if(parseInt(headline_slideshow_slideholder.css('margin-left')) <= ((-headline_slideshow_count*headline_slideshow_width))+headline_slideshow_width){
            headline_slideshow_direction = 'right';
        }
        if(parseInt(headline_slideshow_slideholder.css('margin-left')) >= 0){
            headline_slideshow_direction = 'left';
        }
        if(headline_slideshow_allowscroll){
            if(headline_slideshow_direction == 'left'){
                headline_slideshow_slideholder.animate({
                    marginLeft: '-='+headline_slideshow_width
                },
                headline_slideshow_transitionspeed,
                'easeInOutCirc',
                function(){
                    headline_slideshow_setSlideSwitch();
                    headline_slideshow_timer = setTimeout("headline_slideshow_scrollSlides();",headline_slideshow_speed);
                });
            }else{
                headline_slideshow_slideholder.animate({
                    marginLeft: '+='+headline_slideshow_width
                },
                headline_slideshow_transitionspeed,
                'easeInOutCirc',
                function(){
                    headline_slideshow_setSlideSwitch();
                    headline_slideshow_timer = setTimeout("headline_slideshow_scrollSlides();",headline_slideshow_speed);
                });
            }
        }
    }    
}

//stops autoscrolling on mouseover
function headline_slideshow_stopScroll(){
    headline_slideshow_allowscroll = false;
    clearTimeout(headline_slideshow_timer);
}

//allows autoscrolling on mouseout
function headline_slideshow_allowscrollScroll(){
    headline_slideshow_allowscroll = true;    
    headline_slideshow_timer = setTimeout("headline_slideshow_scrollSlides();",headline_slideshow_speed);
}

//scrolls to specified slide
function headline_slideshow_scrollToSlide(i){
    var newMargin = -(i*headline_slideshow_width);
    headline_slideshow_slideholder.stop()
                                  .animate({
                                      marginLeft: newMargin
                                  },
                                  (headline_slideshow_transitionspeed/2),
                                  'easeInOutCirc',
                                  headline_slideshow_setSlideSwitch
                              );
}

//sets the actual slide in the slideswitch
function headline_slideshow_setSlideSwitch(){
    headline_slideshow_switchholder.children('.headline_slideshow_switchactive').removeClass('headline_slideshow_switchactive');
    headline_slideshow_switchholder.children('.headline_slideshow_sw'+Math.round(-parseInt(headline_slideshow_slideholder.css('margin-left'))/headline_slideshow_width))
                                   .addClass('headline_slideshow_switchactive');
}
