

red.prototype.util = {
	
	camelize : function ( value ) {
		return value.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
	},
	
	deCamelize : function ( value ) {
		return value.replace(/([A-Z])/g, '-$1').toLowerCase();
	},
	
	fromto : function(numberfrom,numberto,totalsteps,step,max){
		if(numberfrom == numberto){
			return numberfrom;
		}
		if(max == null){
			var diff = (numberfrom-numberto)/totalsteps;
			return numberfrom-(Math.round(diff*step));	
		}
		else{
			var diff1 = (numberfrom-numberto);
			var diff2 = (max-Math.max(numberfrom,numberto))+Math.min(numberfrom,numberto);
			if(Math.abs(diff1) <= Math.abs(diff2)){
				var diff = diff1/totalsteps;
				return numberfrom-Math.round(diff*step);	
			}
			else{
				var diff = diff2/totalsteps;
				//rechtsrum
				if(numberfrom >= numberto){
					var total = numberfrom+(Math.round(diff*step));
					if(total > max){return total-max;}
					else{return total;}
				}
				//linksrum
				else{
					var total = numberfrom-(Math.round(diff*step));
					if(total < 0){return max-Math.abs(total);}
					else{return total;}
				}
			}
		}
	},
	
	collect : function(a,f){
		var n=[];
		for(var i = 0;i < a.length;i++){
			var v = f(a[i]);
			if(v != null){
				n.push(v);
			}	
		}
		return n;
	}

};
