$.fn.multislider=function(option)
{	
    /* option */
    option = jQuery.extend({
        fromTo: true,
        checkbox: false,
        minVal: 0,
        maxVal: 100,
        //partVal: 10,
        toolText: ''
    }, option);
    
    /* function */
    var format = function(num){
                num = num.toString();
                numSize = num.length;
                var i = num.length - 3;
                var j=0;
                var text = [];
                if(i>0){
                    while(i>=0){
                        text[j] = num.substr(i, 3);
                        if(i - 3 < 0){
                            j++;
                            text[j] = num.substr(0, i);
                        }
                        j++;
                        i = i-3;
                    }
                    num = '';
                    for(var i = j-1; i >= 0; i--){
                        num += i == 0 ? text[i] : text[i] + ' ';
                    }
                }
                return num;  
            };
    
    $(this).each(function(){
        var elBox = $(this);
        var sCode = '<div class="multi-slider-box">'+
                        '<div class="slider-box"><div class="slider-spc-1"><div class="slider-spc-2"><div class="slide-place"><div class="selected-area"></div></div></div></div></div>'+
                        '<div class="slider1"><a href="#" class="slider"><span></span></a></div><div class="tool-tip1"><div class="tip-spc"><span></span></div></div>'+
                        '<div class="slider2"><a href="#" class="slider"><span></span></a></div><div class="tool-tip2"><div class="tip-spc"><span></span></div></div>'+
                    '</div>';
        $(this).wrapInner('<div class="inner-wrap"></div>').append(sCode);
        
        
        if(option.fromTo == true){
            $('.inner-wrap :text:eq(0)', this).addClass('from');
            $('.inner-wrap :text:eq(1)', this).addClass('to');
            var minVal = option.minVal;
            var maxVal = option.maxVal;
            
            var partSum = [1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000];
            var maxStep = 100;
            var stepSumHelp = 1000000; // pomocná proměná k ukládání čísla
            
            for(var i=0; i<partSum.length; i++){
                var stepDel = (((maxVal-minVal) / partSum[i]) / maxStep) - 1; //dělní každou variantou + dělení maximálním počtem kroků + odečtení 1 pro zjištění čísla nejblíž 0
                    stepDel = stepDel < 0 ? stepDel * (-1) : stepDel; // Když je číslo mensí než 0 vynásob -1
                if( stepDel < stepSumHelp){ // Porovnávání 
                   stepSumHelp = stepDel;
                   var stepSum = partSum[i];  // částka kroku  
                };
            }
                
                minVal = Math.floor(minVal/stepSum) * stepSum;
                maxVal = Math.ceil(maxVal/stepSum) * stepSum;
                
            var partVal = (maxVal-minVal) / stepSum; // Počet kroků
            var minActualVal = $('input.from', this).val();
                minActualVal = Math.floor(minActualVal/stepSum) * stepSum;
            var maxActualVal = $('input.to', this).val();
                maxActualVal = Math.ceil(maxActualVal/stepSum) * stepSum;
            var toolText = option.toolText; 
            
        }
        
        if(option.checkbox == true){
            var arrVal = [];
            var i = 0;
            $(':checkbox', elBox).each(function(){
                if(this.parentNode.tagName == 'LABEL'){
                    arrVal[i] = $(this).parent().text();
                }
                else if($('label[for="'+ $(this).attr('id') +'"]').attr('for') == $(this).attr('id')){
                    arrVal[i] = $('label[for="'+$(this).attr('id')+'"]').text();  
                }
                else{
                    arrVal[i] = '';
                }
                i++;
            });
            var minVal = 0;
            var maxVal = $(':checkbox', elBox).size()-1;
            var minActualVal = $(':checkbox', elBox).index($(':checkbox:checked', elBox).filter(':first'));
            var maxActualVal = $(':checkbox', elBox).index($(':checkbox:checked', elBox).filter(':last'));
                maxActualVal = maxActualVal == -1 ? 0 : maxActualVal;
            for(var i = minActualVal; i <= maxActualVal; i++){
                $(':checkbox:eq('+ i +')', elBox).attr('checked', true); 
            }
            partVal = maxVal;
            stepSum = 1;
        }
                            
        $('.multi-slider-box', this).each(function(){
            /* HELP RULES */
            var el = $(this);
            var bLeft = this.offsetLeft;
            var sWidth = $('a.slider', this).outerWidth();
            var sWidthHalf = sWidth / 2;
            var sMinLeft = $('.slider1', this)[0].offsetLeft;
            var sMaxLeft = $('.slider2', this)[0].offsetLeft;
            var actualPosition = 0;
            var startSelect = $('.selected-area', this)[0].offsetLeft;
            var startWidth = sMaxLeft-sMinLeft;//$('.selected-area', this).width();
            var areaPart = (startWidth / partVal);
            
            //if(option.fromTo == true){
                var startLeftS = Math.round(((minActualVal-minVal) / stepSum) * areaPart) + sMinLeft;
                var startRightS = Math.round(((maxActualVal-minVal) / stepSum) * areaPart) + sMinLeft;
            //}
            /*if(option.checkbox == true){
                var startLeftS = Math.round(minActualVal * areaPart);
                var startRightS = Math.round(maxActualVal * areaPart);
            }*/
            
            if(minVal < minActualVal && minActualVal < maxVal){
                $('.slider1', this).css('left', startLeftS + 'px');
            }
            if(maxVal > maxActualVal && maxActualVal > minVal){
                $('.slider2', this).css('left', startRightS + 'px');
            }

            
            var sliderOpen = false;
            var targetSlider = null;
            
            /* DEFINOVÁNÍ HODNOT NÁPOVĚD */
            if(option.fromTo == true){
                $('.tool-tip1 span', this).text(minVal < minActualVal && minActualVal < maxVal ? format(minActualVal) : format(minVal)).after(''+toolText);
                $('.tool-tip2 span', this).text(maxVal > maxActualVal && maxActualVal > minVal ? format(maxActualVal) : format(maxVal)).after(''+toolText);
            }
            else if(option.checkbox == true){
                $('.tool-tip1 span', this).text(minVal < minActualVal && minActualVal < maxVal ? arrVal[minActualVal] : arrVal[minVal]);
                $('.tool-tip2 span', this).text(maxVal > maxActualVal && maxActualVal > minVal ? arrVal[maxActualVal] : arrVal[maxVal]);
            }
            
            /* VYBRANÁ SEKCE */
            var selectedArea = function(){
                if( $('.slider2', el)[0].offsetLeft > $('.slider1', el)[0].offsetLeft){
                    $('.selected-area', el).css({
                        'width': ( $('.slider2', el)[0].offsetLeft + sWidthHalf ) - ( $('.slider1', el)[0].offsetLeft + sWidthHalf ) + 'px',
                        'left': $('.slider1', el)[0].offsetLeft + sWidthHalf + 'px'
                    });
                }
                else{
                    $('.selected-area', el).css({
                        'width': ( $('.slider1', el)[0].offsetLeft + sWidthHalf ) - ( $('.slider2', el)[0].offsetLeft + sWidthHalf ) + 'px',
                        'left': $('.slider2', el)[0].offsetLeft + sWidthHalf + 'px'
                    });    
                }  
            };
            selectedArea();
            /* MĚNĚNÍ HODNOT V NÁPOVĚDĚ */
            var toolTip = function(){
                if(option.fromTo == true){
                    var selectedArea =  $(targetSlider)[0].offsetLeft - sMinLeft;
                    var actualPart = Math.round(selectedArea / areaPart);
                    var actualNumber = (actualPart * stepSum) + minVal < minVal ? minVal : (actualPart * stepSum) + minVal;
                    // Selector pro nápovědy
                    $(targetSlider).next('div').find('span').empty().text(format(actualNumber));
                }
                else if(option.checkbox == true){
                    var selectedArea =  $(targetSlider)[0].offsetLeft - sMinLeft;
                    var actualPart = Math.round(selectedArea / areaPart);
                    var actualNumber = actualPart;
                    // Selector pro nápovědy
                    $(targetSlider).next('div').find('span').empty().text(arrVal[actualNumber]);
                }
            };
            /* MĚNĚNÍ HODNOT V INPUTECH */ 
            var changeInput = function(){
                if(option.fromTo == true){
                    var text1 = $('.tool-tip1 span', el).text();
                        text1 = text1.replace(/\s/g,'');
                        text1 = parseInt(text1);
                    var text2 = $('.tool-tip2 span', el).text();
                        text2 = text2.replace(/\s/g,'');
                        text2 = parseInt(text2);
                    var max = Math.max(text1, text2);
                    var min = Math.min(text1, text2);
                    $('input.to', elBox).val(max);
                    $('input.from', elBox).val(min);
                }
                else if(option.checkbox == true){
                    var s1Pos = Math.round(($('.slider1', el)[0].offsetLeft - sMinLeft) / areaPart);
                    var s2Pos = Math.round(($('.slider2', el)[0].offsetLeft - sMinLeft) / areaPart);
                    $(':checkbox', elBox).attr('checked', false);
                    for(var i = Math.min(s1Pos, s2Pos); i <= Math.max(s1Pos, s2Pos); i++){
                        $(':checkbox:eq('+ i +')', elBox).attr('checked', true); 
                    }
                }
            };
            /* POHYB MYŠÍ PO KLIKU NA SLIDER */
            $(document).bind('mousemove mouseup', function(e){
                e = e || window.event;
                if(e.type == 'mousemove' && sliderOpen == true){
                    var position = $(targetSlider)[0].offsetLeft +(e.clientX - actualPosition);
                        position = position < sMinLeft ? sMinLeft : position;
                        position = position > sMaxLeft ? sMaxLeft : position;
                    actualPosition = e.clientX;
                    
                    if( $(targetSlider).is('.slider1') && position <= $('.slider2')[0].offsetLeft - sWidth + 15)
                    {
                        $(targetSlider).css('left', position +'px');
                    }
                    else if( $(targetSlider).is('.slider2') && position >= $('.slider1')[0].offsetLeft + sWidth - 15)
                    {
                        $(targetSlider).css('left', position +'px');
                    }
                    
                    selectedArea();
                    toolTip();
                    return false;
                    
                }
                if(e.type == 'mouseup' && sliderOpen == true){
                    sliderOpen = false;
                    changeInput();  
                }       
            });
            /* UDÁLOSTI SLIDERU */
            $('a.slider, .tool-tip', this).bind('click mousedown mouseup', function(e){
                e = e || window.event;
                if(e.type == 'mousedown'){    
                    sliderOpen = true;
                    actualPosition = e.clientX;
                    targetSlider = $(this).parent();
                    e.preventDefault();
                    return false;  
                }
                if(e.type == 'mouseup'){
                    sliderOpen = false; 
                    changeInput();     
                }
                if(e.type == 'click'){
                    return false;
                }
            });
            
            
        });
    });
};
