$(function(){
        if(!Array.indexOf){
            Array.prototype.indexOf = function(obj){
                for(var i = 0; i < this.length; i++){
                    if(this[i] === obj){
                        return i;
                    }
                }
                return -1;
            }
        }
    });

$(window).load(function() {
        var $body = $("#entry > p:first").css({position: "relative"});
        var $img = $body.find("img:first");
        var $imgDesc = $('<div class="tooltip" />').css({
                position: 'absolute',
                display: 'none'
            }).appendTo("body");

        var _imgLeft = ($body.width() - $img.width()) / 2;

        var rand = function(n){
            return parseInt(Math.random() * n);
        };

        var getRandRange = function(n){
            var r = 10;
            for(var i = 1; i < n; i++){
                r  *= 10;
            }
            return r;
        };

        var getRand = function(range, max, min){
            var r = rand(range);
            if((max && r > max) || (min && r < min)){
                return getRand(range, max, min);
            }
            return r;
        };

        var $comList = $("#pb_comments .commentlist");
        var $coms = $comList.find('.comment > div');
        var fltComs = [];

        for(var i = 0, len = $coms.size(), $com = {}, comTxt = '', author = '', $tmp = null; i < len; i++){
            $com = $('<div class="tooltip fltCom" />');
            $tmp = $coms.eq(i);
            comTxt = $tmp.find('.comment-body').text();
            author = $.trim($tmp.find('.comment-author').text());
            if(author.length > 0){
                comTxt += " @" + author;
            }
            $com.text(comTxt);
            fltComs.push($com);
        }

        var randRange = getRandRange(String(fltComs.length).length);


        var getComPos = function(pos, wprWdh, wprHgh){
            var ctrWdh = parseInt(wprWdh * 0.5);
            var ctrMinLeft = parseInt(wprWdh * 0.25);
            var ctrLeft = { min: ctrMinLeft, max: ctrMinLeft + ctrWdh }

            var ctrHgh = parseInt(wprHgh * 0.5);
            var ctrMinTop = parseInt(wprHgh * 0.25);
            var ctrTop = { min: ctrMinTop, max: ctrMinTop + ctrHgh }

            var left = getRand(getRandRange(String(pos.maxLeft).length), pos.maxLeft, pos.minLeft), top = 0;

            if(left > ctrLeft.min && left < ctrLeft.max){
                while(true){
                    top = getRand(getRandRange(String(pos.top).length), pos.top);
                    if(top < ctrTop.min || top > ctrTop.max){
                        break;
                    }
                }
            }else{
                top = getRand(getRandRange(String(pos.top).length), pos.top);
            }

            if(top <= 10){
                top += 10;
            }
            if(top >= pos.top - 20){
                top -+ 20;
            }
            if(left >= wprWdh - 10){
                left -+ 10;
            }

            return { left: left, top: top }
        };

        var showedCom = [];

        var showCom = function(coms, opts){
            var iden = getRand(randRange, coms.length);
            if(showedCom.indexOf(iden) > -1){
                return false;
            }
            showedCom.push(iden);
            var com = coms[iden];
            var $com = $(com).clone();
            var pos = getComPos(opts.pos, $img.width(), $img.height());

            setTimeout(function(){
                    $body.append($com.hide());
                    $com.css({
                            'position': "absolute",
                            'left': pos.left,
                            'top': pos.top,
                            'opacity': '.75'
                        }).fadeIn("slow");
                }, opts.interval.show * 1000 + rand(500));

            setTimeout(function(){
                    $com.fadeOut("slow", function(){
                            $(this).remove();
                            var i = showedCom.indexOf(iden);
                            var tmp = showedCom.slice(i + 1, showedCom.length);
                            showedCom = showedCom.slice(0, i).concat(tmp);
                        });
                }, (opts.interval.show + opts.interval.hide) * 1000 + rand(500));
        };

        var opts = {
            interval: { show: 1, hide: 2, global: 0.85 },
            pos: { top: $img.height(), minLeft: _imgLeft, maxLeft: _imgLeft + $img.width() }
        };

        if(fltComs.length > 0){
            var showComItv = setInterval(function(){
                    showCom(fltComs, opts);
                }, opts.interval.global * 1000 + rand(100) );
        }
    });
