// TagCloud class
// @author Slava Gurgov
// @createDate 2008-05-07

function TagCloud()
{
    this.tags = [];
    this.maxTags = 50;
    this.minFontSize = 8;
    this.maxFontSize = 36;

    this.add = function(tag)
	{
        if (trim(tag) == '') return;
        tag = trim(tag);

        var added = -1;

		for (var i=0; i < this.tags.length; i++)
			if (this.tags[i][0] == tag)
				this.tags[added=i][1]++;

		if (added == -1)
			this.tags[added=this.tags.length] = [tag, 1];
	}

	this.addSet = function(tagSet)
	{
		var arr = tagSet.split(/,/);
		for (var i=0; i < arr.length; i++)
			this.add(arr[i]);
	}

	this.printAll = function()
	{
		for (var i=0; i < this.tags.length; i++)
			document.write(this.tags[i][0]+" repeated "+this.tags[i][1]+"x<br>");
	}

	this.printCloud = function()
	{
		var urlPrefix = (arguments.length > 0 ? arguments[0] : "search.jsp?");
        var orig = this.tags.slice(); // make a copy of tags array by value
        var sorted = this.tags.sort(function(a,b){return (a[1] <= b[1] ? -1 : 1);}); // sort items of array (works by reference)
        this.tags = orig; // so will need to re-copy original values back to tags array
        var smallest = sorted[0][1];
        var biggest = sorted[sorted.length-1][1];
        var minFont = 8;
        var maxFont = 36;
        var offset = minFont - smallest;
        var ratio = biggest / (maxFont - offset);

        var max = (this.tags.length < this.maxTags ? this.tags.length : this.maxTags);

        document.write("<div class='tagCloud'>");
		for (var i=0; i < max; i++)
		{
            var size = Math.ceil((this.tags[i][1] / ratio) + offset);
            document.write("<a href='"+urlPrefix+"keywords="+escape(this.tags[i][0])+"&oper=tag' class='tag'><span style='font-size:"+(size)+"pt;'>"+this.tags[i][0]+"</span></a> "); // title='"+this.tags[i][1]+"'
        }
		document.write("</div>");
    }
}
