$.rand plugin

originally at: http://www.labs.skengdon.com/rand

by jorgeluis

HTML

<div class="rand">1</div>
<div class="rand">2</div>
<div class="rand">3</div>
<div class="rand">4</div>
<div class="rand">5</div>
<div class="rand">6</div>
<div class="rand">7</div>
<div class="rand">8</div>
<div class="rand">9</div>
<div class="rand">10</div>
<div class="rand">11</div>
<div class="rand">12</div>

CSS

div { 
    float:left; 
    margin: 0 5px 5px 0;
    width: 25px;
    line-height:30px;
    text-align:center;
    background:#ddd;
    border:1px solid #999;
}
.set1 {
    background: yellow;
}
.set2 {
    background:cyan;
}
.set1.set2 {
    background: green;
}

JavaScript

//.rand plugin
//http://www.labs.skengdon.com/rand

;
(function ($) {
    $.fn.rand = function (number) {
        var array_rand = function (input, num_req) {
                var indexes = [];
                var ticks = num_req || 1;
                var checkDuplicate = function (input, value) {
                        var exist = false,
                            index = 0;
                        while (index < input.length) {
                            if (input[index] === value) {
                                exist = true;
                                break;
                            };
                            index++;
                        };
                        return exist;
                    };
                while (true) {
                    var rand = Math.floor((Math.random() * input.length));
                    if (indexes.length === ticks) {
                        break;
                    };
                    if (!checkDuplicate(indexes, rand)) {
                        indexes.push(rand);
                    }
                };
                return ((ticks == 1) ? indexes.join() : indexes);
            };
        if (typeof number !== 'number') var number = 1;
        if (number > this.length) number = this.length;
        var numbers = array_rand(this, number);
        var $return = [];
        for (var i = 0; i < number; i++) {
            $return[i] = this.get(numbers[i]);
        };
        return $($return);
    };
}(jQuery));


$('div').removeClass().addClass('rand');
$('.rand').rand(3).addClass('set1');  //select a random 3 items
$('.rand').rand(5).addClass('set2');  //select a random 5 items
// overlapping items have both classnames