// buzzcloud
//
// Buzzword Cloud v0.5 - jQuery effect
// Copyright (c) 2009 Peter Medl
//
// License: MIT and GPL
// http://www.opensource.org/licenses/mit-license.php
// http://www.gnu.org/licenses/gpl.html
// do anything you want with the code but don`t claim its yours
// Homebase: http://www.atomad.de
// 
// Usage (from html doc)
// takes list <li> entires and dsiplays them
// animated and 
//override defaults for resolution, speed, height
// var options = {
//  color: '#808080',
//  speed: 100
// }
// $('myDiv').burningdiv(options);


(function($) { 
$.fn.buzzcloud = function(options) {
	var config = {'color': '#808080','speed': '100','height': '200','width':'200'};
	cloudobj = function(){
		this.items = Array();
		this.timer = null;
	}
	stritem = function(theobj,string)
	{
  		this.obj = theobj;
		this.str = string;
		this.x = 0;
		this.xdelta = Math.random();
		this.y = 0;
		this.ydelta = Math.random()*0.5;
		this.size = 10;
		this.sizedelta = (Math.random()*0.1);
		this.trans = 0.8;
		this.transdelta = (Math.random()*0.01);
	}
	var thecloud = new cloudobj(); 
   	if (options) $.extend(config, options);
	
	function signum(arg){
		if (arg<0)return -1;
		if (arg==0)return 0;
		if (arg>0)return 1;
	}
	// some effects functions
	function anim(){
		for (i=0;i<thecloud.items.length;i++){
			
			thecloud.items[i].x+=thecloud.items[i].xdelta;
			if(thecloud.items[i].x>options['width'] || thecloud.items[i].x<0){
				thecloud.items[i].xdelta=-1*thecloud.items[i].xdelta;
				thecloud.items[i].x+=thecloud.items[i].xdelta;
			}
			
			thecloud.items[i].y+=thecloud.items[i].ydelta;
			if(thecloud.items[i].y>options['height'] || thecloud.items[i].y<0){
				thecloud.items[i].ydelta*=-1;
				thecloud.items[i].y+=thecloud.items[i].ydelta;
			}
			
			thecloud.items[i].size+=thecloud.items[i].sizedelta;
			if(thecloud.items[i].size>32 || thecloud.items[i].size<1){
				thecloud.items[i].sizedelta*=-1;
				thecloud.items[i].size+=thecloud.items[i].sizedelta;
			}
			
			thecloud.items[i].trans+=thecloud.items[i].transdelta;
			if(thecloud.items[i].trans>0.99 || thecloud.items[i].trans<0){
				thecloud.items[i].transdelta*=-1;
				thecloud.items[i].trans+=thecloud.items[i].transdelta;
			}
			
			$("#"+thecloud.items[i].obj).css('left',thecloud.items[i].x);
			$("#"+thecloud.items[i].obj).css('top',thecloud.items[i].y);
			//$("#"+thecloud.items[i].obj).css('font-size',thecloud.items[i].size+"pt");
			$("#"+thecloud.items[i].obj).css('opacity',thecloud.items[i].trans);
			//$("#"+thecloud.items[i].obj).css('font-size',thecloud.items[thecloud.items.length-1].size+"pt");

		}
	}
	
	return this.each(function() {
		var myobj = $(this);
		// get all li
		var mywords = $("li", myobj); 
		
		// iterate through resolution number of img
		for (i=0;i<mywords.length;i++){//options['res']
			var newobj = "bzcloudID"+i;
			//alert('style="color: "'+options['color']);
			thecloud.items[thecloud.items.length]=new stritem(newobj,mywords.eq(i).text());
			myobj.append('<div id="'+newobj+'" class="cloudstyle" style="color: '+options['color']+'">'+mywords.eq(i).text()+'</div>');
			thecloud.items[thecloud.items.length-1].x=Math.random()*50;
			thecloud.items[thecloud.items.length-1].y=Math.random()*80;
			thecloud.items[thecloud.items.length-1].size=8+(Math.random()*28);
			thecloud.items[thecloud.items.length-1].trans=0.5+Math.random()*0.5;
			$("#"+thecloud.items[thecloud.items.length-1].obj).css('left',thecloud.items[thecloud.items.length-1].x);
			$("#"+thecloud.items[thecloud.items.length-1].obj).css('top',thecloud.items[thecloud.items.length-1].y);
			$("#"+thecloud.items[thecloud.items.length-1].obj).css('font-size',thecloud.items[thecloud.items.length-1].size+"pt");
			$("#"+thecloud.items[thecloud.items.length-1].obj).css('opacity',thecloud.items[thecloud.items.length-1].trans);
		}
		$("li", myobj).remove();
		$("ul", myobj).remove();
		thecloud.timer = setInterval(anim,options['speed']);
    });
 ;}
})(jQuery);


