(function(){
/*
 * zawa 0.1
 *
 * Copyright (c) 2008 wakasa.org
 *
 * $Date: 2008-06-13 $
 */
	var count=0;
	var confList=[];
	var base;

	$.fn.zawa = function(config){
		
		base=this;
		
		config = jQuery.extend({
				x: Math.floor(Math.random()*(base.width()+1)),
				y: Math.floor(Math.random()*(base.height()+1)),
				size: randRange(20,200),
				max: 20,
				image: null,
				move: null,
				fade: false,
				timeout: null
			},config);
		
		confList.push(config);
		if(count<config.max){
			create(config,count);
			count++;
		}
		
		function randRange(min,max){
			if(typeof(min)=="number" && typeof(max)=="number"){
				return min + Math.floor( Math.random() * (max-min+1) );
			}else if(typeof(min)=="object" && typeof(min[0])=="number" && typeof(min[1])=="number"){
				return min[0] + Math.floor( Math.random() * (min[1]-min[0]+1) );
			}
			return 0;
		}
		function getNum(obj){
			if(isRange(obj)){
				return randRange(obj);
			}else if(isNumber(obj)){
				return obj;
			}
			return 0;
		}
		
		function create(config,number){
			var x=getNum(config.x);
			var y=getNum(config.y);
			var size=getNum(config.size);
			
			var ins;
			if(isObject(config.image) && isString(config.image.src)){
				var imObj = config.image;
				if(jQuery.browser.msie && isNumber(imObj.width) && isNumber(imObj.height) && imObj.src.substring(imObj.src.length-4)==".png"){
					var height=size;
					var width=Math.floor(imObj.width*(height/imObj.height))
					
					ins='<div style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=\'true\',src=\''+imObj.src+'\', sizingMethod=\'scale\'); width:'+width+'px; height:'+height+'px;"></div>';
				}else{
					ins='<img src="'+imObj.src+'" height="'+size+'"/>';
				}
			}else{
				ins='<span style="font-size:'+size+'px;white-space:nowrap;word-break:keep-all;">'+'ざわ…</span>';
			}
			var style='position:absolute;top:'+y+'px;left:'+x+'px';
	
			base.append('<div style="'+style+'" number="'+number+'">'+ins+'</div>');
	
			if(isObject(config.anime)){
				var clist = base.children();
				setAnime($(clist.get(clist.length-1)),config.anime);
			}
		}
		
		
		function setAnime(target,anime){
				
				var effect = {};
				
				if(anime.fade){
					effect["opacity"]='0';
				}
				if(anime.x){
					effect["left"]=target.offset().left+getNum(anime.x)
				}
				if(anime.y){
					effect["top"]=target.offset().top+getNum(anime.y);
				}
				var timeout = getNum(anime.timeout);
				if(timeout==0){
					timeout = randRange(5000,10000);
				}
				
				target.animate(effect,timeout,animeEnd);
		}
		
		
		function isObject(obj){
			return obj && typeof(obj)=='object';
		}
		function isRange(obj){
			return obj && typeof(obj)=='object' && obj.length==2;
		}
		function isNumber(obj){
			return obj && typeof(obj)=='number';
		}
		function isString(obj){
			return obj && typeof(obj)=='string';
		}
		
		function animeEnd(){
			if($(this).css("opacity")==0){
				$(this).remove();
				if(confList.length>count){
					create(confList[count],count);
					count++;
				}
			}else{
				var number = $(this).attr("number");
				setAnime($(this),confList[number].anime);
			}
		}
	};

})(jQuery);
