$(document).ready(function() {
        var starting_points = new Array();
        var adjusted_width = 0;
        $('.destination_slider_item').each(function() {
                adjusted_width += $(this).outerWidth(true);
        });
        $('#destination_slider').width(adjusted_width);
        $('.destination_slider_item').each(function() {
                var category_index = $(this).attr('class').replace(/[^0-9\.]/g,'');
                starting_points[category_index] = (starting_points[category_index] === undefined) ?
                                                        $(this).position().left :
                                                        starting_points[category_index];	
        });
        var target_width = $('#destination_slider').width();
        var scrollbar_width = $('#destination_slider_scrollbar_track').width() + ($('#slider_handle').innerWidth() / 2);
        document.scrollbar_to_target = target_width / scrollbar_width; 
        document.target_to_scrollbar = scrollbar_width / target_width;
        
        $('.destination_slider_label').each(function() {
                var category_index = $(this).attr('class').replace(/[^0-9\.]/g,'');
                var target_width_padding = ($('#destination_slider_scrollbar_handle').width() - $(this).innerWidth()) / 2;
                document.track_padding = parseInt($('#destination_slider_scrollbar_track').css('padding-left').replace(/[^0-9\.]/g,''), 10);
                $(this).css({
                        'margin': 0,
                        'padding': 0,
                        'position': 'absolute',
                        'left': (document.target_to_scrollbar * (starting_points[category_index] - document.track_padding)) ,
                        'padding-left': target_width_padding,
                        'padding-right': target_width_padding
                });
        });
        
        $('#destination_slider_scrollbar_arrow_left').mousedown(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);								
                }
                document.scrolling_interval = setInterval("slide_left()", 10);	
        }).mouseup(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);
                        document.scrolling_interval = null;
                }
        }).mouseleave(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);
                        document.scrolling_interval = null;
                }
        }).click(function() {
                slide_left();
        });
        
        $('#destination_slider_scrollbar_arrow_right').mousedown(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);								
                }
                document.scrolling_interval = setInterval("slide_right()", 20);	
        }).mouseup(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);
                        document.scrolling_interval = null;
                }
        }).mouseleave(function() {
                if(document.scrolling_interval) {
                        clearInterval(document.scrolling_interval);
                        document.scrolling_interval = null;
                }
        }).click(function() {
                slide_right();
        });
        
        
        $('.destination_slider_label').click(function() {
                $('#slider_handle').css({left: $(this).position().left + document.track_padding});
                slider_moved(true);
        });
        

        $('#slider_handle').draggable({
                axis: 'x',
                containment: 'parent',
                drag: function(event, ui) {
                        slider_moved(false);
                }
        });
});

function slide_left() {
        var slider_left = $('#slider_handle').position().left;
        var left_limit = 0 + document.track_padding;
        if(slider_left >= left_limit) {
                var target_left = slider_left - 5;
                if(target_left < left_limit) {
                        target_left = left_limit;
                }
                $('#slider_handle').css({left: target_left});
                slider_moved(false);
        }
}

function slide_right() {
        var slider_left = $('#slider_handle').position().left;
        var right_limit = $('#destination_slider_scrollbar_track').width() - ($('#slider_handle').width()*2) - document.track_padding;
        if(slider_left <= right_limit) {
                var target_left = slider_left + 5;
                
                if(target_left > right_limit) {
                        target_left = right_limit;
                }
                $('#slider_handle').css({left: target_left});
                slider_moved(false);
        }
}

function slider_moved(automate) {
        var handle_left = $('#slider_handle').position().left;
        var scroll_left = ($('#slider_handle').position().left - document.track_padding) * document.scrollbar_to_target;
        
        if(automate) {
                $('#destination_slider_scrollbar_handle').animate({left: handle_left}, 250, function() {adjust_label_colors()});
                $('#secondary_wrapper').animate({ scrollLeft: scroll_left}, 250);
                
        } else {
                $('#destination_slider_scrollbar_handle').css('left', handle_left);
                $('#secondary_wrapper').scrollLeft(scroll_left);
                adjust_label_colors();

        }
}

// Darken/Lighten label colors as necessary
function adjust_label_colors() {
        $('.destination_slider_label').each(function() {
                if(x_hit_detect($(this), $('#slider_handle'))) {
                        $(this).addClass('destination_slider_label_selected');
                } else {
                        $(this).removeClass('destination_slider_label_selected');
                }
        });
}

// Ignores y axis. True if target_a is touching or contained by target_b
function x_hit_detect($target_a, $target_b) {
        var a_left = $target_a.position().left + parseInt($target_a.css('padding-left').replace(/[^0-9\.]/g,''));
        var b_left = $target_b.position().left + parseInt($target_b.css('padding-left').replace(/[^0-9\.]/g,''));
        var a_right = a_left + $target_a.width();
        var b_right = b_left + $target_b.width();
        
        if(a_left <= b_right && a_left >= b_left) {
                return true;
        }
        
        if(a_right >= b_left && a_right <= b_right) {
                return true;
        }
        
        return false;
}

