function Slider(selector, configurations)
{
    // Gets user configurations
    
    var slider_prefix       = getConfiguration("prefix", "");
    var slider_speed        = getConfiguration("slider_speed", 3000);
    var animation_speed     = getConfiguration("animation_speed", 3000);
    var next_button         = getConfiguration("next_button", "");
    var prev_button         = getConfiguration("prev_button", "");
    var stop_on_hover       = getConfiguration("stop_on_hover", true);
    // run at atartup
    // Public variables

    this.selector   = selector;   
    var run         = null;
    // Calls the constructor method
    
    construct();
    
    // Constructor
    
    function construct()
    {
        replaceSelector(selector);
        
        // Move he last list item before the first item. 
        jQuery('#' + slider_prefix + 'holder .slider .slide:first').before
        (
            jQuery('#' + slider_prefix + 'holder .slider .slide:last')
        );
        
        run = setInterval(function(){next();}, slider_speed);
    }
    
    /////////////////////////////////////////////////////////////////////////////////////////////
    
    // Adds event to "next slide" button (if defined)
    
    if(next_button)
    {
        jQuery(next_button).click(function(){ next(); });
    }
    
    // Adds event to "previous slide" button (if defined)
    
    if(prev_button)
    {
        jQuery(prev_button).click(function(){ prev(); });
    }
    
    // Stops the animation on hover
    
    if(stop_on_hover)
    {
        jQuery('#' + slider_prefix + 'holder').hover( function()
        {
            clearInterval(run);
        }, function()
        {
            run = setInterval(function(){next();}, slider_speed);
        });
    }
    
    /////////////////////////////////////////////////////////////////////////////////////////////
    
    // Next Slide function
    
    function next()
    {
        clearInterval(run);
        
        // Get the width of the items
        var item_width = jQuery('#' + slider_prefix + 'holder .slider .slide').outerWidth();

        var left_indent = parseInt(jQuery('#' + slider_prefix + 'holder .slider').css('left')) - item_width;

        jQuery('#' + slider_prefix + 'holder .slider:not(:animated)').animate({'left' : left_indent},animation_speed,function(){    

            // Get the first list item and put it after the last list item
            jQuery('#' + slider_prefix + 'holder .slider .slide:last').after(jQuery('#' + slider_prefix + 'holder .slider .slide:first')); 
            jQuery('#' + slider_prefix + 'holder .slider').css({'left' : "-"+item_width+"px"});
        });
        
        run = setInterval(function(){next();}, slider_speed);
    }
    
    // Provious Slide function
    
    function prev()
    {
        clearInterval(run);
        
        // Get the width of the items
        var item_width = jQuery('#' + slider_prefix + 'holder .slider .slide').outerWidth();
            
        var left_indent = parseInt(jQuery('#' + slider_prefix + 'holder .slider').css('left')) + item_width;

        jQuery('#' + slider_prefix + 'holder .slider:not(:animated)').animate({'left' : left_indent},animation_speed,function(){    
            
            // Get the last list item and put it after the first list item
            jQuery('#' + slider_prefix + 'holder .slider .slide:first').before(jQuery('#' + slider_prefix + 'holder .slider .slide:last')); 
            jQuery('#' + slider_prefix + 'holder .slider').css({'left' : "-"+item_width+"px"});
        });
        
        run = setInterval(function(){next();}, slider_speed);
    }
    
    // Function to replace selector with slider block
    
    function replaceSelector(object)
    {
        var items = new Array();
                
        jQuery(object).each( function()
        {
            jQuery(this).children(object + ' li').each( function(i, e)
            {
                items.push(jQuery(e).html());
            })
        });
        
        jQuery(object).replaceWith('<div id="'+slider_prefix+'holder"></div>');
        jQuery('#'+slider_prefix+'holder').append('<div class="slider"></div>')
        
        for (i = 0; i < items.length; i++) 
        {
            var slide = '<div class="slide item-'+(i + 1)+'">' + items[i] + '</div>';
            jQuery('#'+slider_prefix+'holder .slider').append(slide)
        }
    }
    
    // Draws steps box in #holder
    
    function drawSteps()
    {
        
    }
    
    // Function that returns valid configuration
    
    function getConfiguration(config, default_value)
    {        
        if(configurations.hasOwnProperty(config))
        {
            return  configurations[config];
        }
        else
        {
            return default_value;
        }
    }
}
