(function($){
	function typewriter(elem,params){
		var opts={
				delay:80,
				pos:0,
				text:'',
				complete: function(){return false}
		};
		
		$.extend(opts,params);
		var tlen=opts.text.length;
				
		if(tlen==0){
			opts.text=elem.html();
			tlen=opts.text.length;
		}

		elem.html('');
		var delaytime = 0;
		nextdelay = opts.delay;

		opts.text = opts.text.replace(/<br>/gi, String.fromCharCode(10));
		opts.text = opts.text.replace(/<br nodeindex=\"\d*\">/gi, String.fromCharCode(10));

		for(i=opts.pos;i<tlen;i++){
			t = opts.text.charAt(i);
			
			delaytime = delaytime + nextdelay;
			nextdelay = opts.delay;
			if (t==',' || t=='.') nextdelay = opts.delay * 8;

			setTimeout(function(){
				txt = opts.text.charAt(opts.pos);
				if (opts.text.charCodeAt(opts.pos)==10) txt = "<br />";
				
				elem.append(txt);
				opts.pos++;
				if (opts.pos>=tlen){
					opts.complete();
				}
			
			},delaytime);
		}
	}
	
	$.fn.typewriter=function(params){
		$(this).each(function(){		
			typewriter($(this),params);
		});
		return this;
	};
})(jQuery);
