/*
 * Generate TagCloud class via Perl Module "HTML::TagCloud" - jQuery Plugin
 * Copyright (c) 2008 by Eisuke Oishi
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
*/

;(function($) {
    jQuery.fn.tagcloud = function(option) {
        if( option == undefined ) option = {};
        if( option['levels'] == undefined ) option['levels'] = 5;

        var tags = [];
        this.each(function(){
            var attr = {};
            var class_name = $(this).attr('class');
            if(class_name.match(/tagcnt(\d+)/i)){
                attr['obj'] = this;
                attr['cnt'] = RegExp.$1;
                attr['class'] = class_name;
            }
            tags.push(attr);
        });

        if(tags.length == 0 ) return;

        tags.sort(function(a, b){
            return a['cnt'] - b['cnt'];
        });

        if( option['limit'] ) tags.splice(0, option['limit']);

        var min = Math.log(tags[0]['cnt']);
        var max = Math.log(tags[tags.length - 1]['cnt']);

        var factor;
        if( max - min == 0 ) {
            min = min - option['levels'];
            factor = 1;
        }
        else {
            factor = option['levels'] / ( max - min );
        }

        if( tags.length < option['levels'] ) {
            factor *= tags.length / option['levels'];
        }

        for( var i in tags ) {
            var tag = tags[i];
            var level = Math.ceil(( Math.log(tag['cnt']) - min ) * factor );
            $(tag['obj']).addClass('level' + level);
        }
    };
})(jQuery);
