(function($){
    $.widget('ui.zoara_stepslider', {
	  _init: function(){
		var sliderDiv = $(this.element);
		var opts_array = this.options.opts_array;
		var canon_opts_array = (function(){
		    var result = [];
		    $.each(opts_array, function(index, value){
		        result.push(value.replace(/<br\/>/g, '').replace(/-/g, '').replace(/ /g, '_').toLowerCase());
		    });
		    return result;
		})();
		var callback = this.options.callback;
		var slide_callback = this.options.slide_callback;
		var custom_wrapper = this.options.custom_wrapper;
		var margin_left = this.options.margin_left;
		var current = this.options.current;
		var force_width = this.options.width;
		
		var values = current;
		
		sliderDiv.wrap('<div class="'+custom_wrapper+'"></div>');
		
		sliderDiv.slider({
		    values: this.options.values,
		    min: 0,
		    max: opts_array.length,
		    values: values,
		    step: 1,
		    range: true,
		    change: function(e, ui){
			  if(sliderDiv.data('ignore')){
				return;
			  }
			  var selected = [$(this).slider('values', 0), $(this).slider('values', 1)];
			  selected = selected.join(',').replace(/<br\/>/g, '').replace(/-/g, '').replace(/ /g, '_');
			  if(callback){
				callback.call(this, selected);
			  }
		    },
		    slide: function(e, ui){
			  if($(this).slider('values', 1) - $(this).slider('values', 0) < 1){
				return false;
			  } else {
				return true;
			  }
		    }
		});
		
		var width = force_width ? force_width : sliderDiv.outerWidth();
		var ul = $('<ul class="slider-ul"></ul>').css('margin-left', margin_left);
		ul.insertAfter(sliderDiv.parent());
		$.each(opts_array, function(k, v){
		    var li = $('<li>'+this+'</li>').appendTo(ul).click(function(){
			  var index = ul.children().index(this);
			  sliderDiv.data('ignore', true);
		        sliderDiv.slider('values', 0, index);
			  sliderDiv.data('ignore', false);
			  sliderDiv.slider('values', 1, index+1);
		        return false;
		    }).css('left', ((width+(margin_left/2))/(opts_array.length))*k).mouseover(function(){
		        $(this).css('text-decoration', 'underline');
		    }).mouseout(function(){
			  $(this).css('text-decoration', 'none');
		    });
		    var diff = (((width/(opts_array.length)) - li.outerWidth())/2);
		    li.css('left', parseFloat(li.css('left')) + diff);
		});
		var el = ul.children().eq(0);
		el.css('left', parseFloat(el.css('left'))+(margin_left/2));
		el = ul.children().eq(ul.length-1);
		el.css('left', parseFloat(el.css('left'))+(margin_left/4));
	  }
    });
    $.extend($.ui.zoara_stepslider, {
	  defaults: {
		opts_array: null,
		callback: null,
		slide_callback: false,
		margin_left: 0,
		current: '',
		width: false,
		custom_wrapper: 'slider-wrapper'
	  }
    });
})(jQuery);