// Selecció de Kfunctions 1
function sprintf(){
	var args = ($type(arguments[0])=='string') ? arguments : arguments[0];
	if(!args || args.length < 1 || !RegExp){ return; }
	var str = args[0];
	var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
	var a = b = [], numSubstitutions = 0, numMatches = 0;
	while (a = re.exec(str)){
		var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
		var pPrecision = a[5], pType = a[6], rightPart = a[7];

		numMatches++;
		if(pType == '%'){
			subst = '%';
		}else{
			numSubstitutions++;
			if(numSubstitutions >= args.length) return null;
			var param = args[numSubstitutions];
			var pad = '';
					 if(pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
			  else if (pPad) pad = pPad;
			var justifyRight = true;
					 if (pJustify && pJustify === "-") justifyRight = false;
			var minLength = -1;
					 if (pMinLength) minLength = parseInt(pMinLength);
			var precision = -1;
					 if (pPrecision && pType == 'f')
						 precision = parseInt(pPrecision.substring(1));
			var subst = param;
			switch (pType){
			case 'b':
				subst = parseInt(param).toString(2);
				break;
			case 'c':
				subst = String.fromCharCode(parseInt(param));
				break;
			case 'd':
				subst = parseInt(param) ? parseInt(param) : 0;
				break;
			case 'u':
				subst = Math.abs(param);
				break;
			case 'f':
				subst = (precision > -1)
				 ? Math.round(parseFloat(param) * Math.pow(10, precision))
				  / Math.pow(10, precision)
				 : parseFloat(param);
				break;
			case 'o':
				subst = parseInt(param).toString(8);
				break;
			case 's':
				subst = param;
				break;
			case 'x':
				subst = ('' + parseInt(param).toString(16)).toLowerCase();
				break;
			case 'X':
				subst = ('' + parseInt(param).toString(16)).toUpperCase();
				break;
			}
			var padLeft = minLength - subst.toString().length;
			if(padLeft > 0){
				var arrTmp = new Array(padLeft+1);
				var padding = arrTmp.join(pad?pad:" ");
			}else{
				var padding = "";
			}
		}
		str = leftpart + padding + subst + rightPart;
	}
	return str;
}
function eachNode(bind,fn){
	if(bind.length){
		for(var i = 0; i < bind.length ; i++) fn.call(bind, bind.item(i), i);
		return true;
	}
};
function verticalAlign(){
	$$('.vertical').each(function(el){
		el.verticalAlign();
	});
}
String.extend({
	replaceOnce: function(searchValue, replaceValue){
		var replaceRegex = new RegExp(searchValue);
		return this.replace(replaceRegex, replaceValue);
	},
	sprintf:function(){
		var dis = ($type(this)=='array') ? this.join() : this;
		var args = new Array(this);
		for(var i=0;i<arguments.length;i++){
			args.push(arguments[i]);
		}
		return sprintf(args);
	},
	htmlEntities:function(){
		var chars = new Array ('&','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<','>','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾');
		var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring','aelig','ccedil','egrave','eacute','ecirc','euml','igrave','iacute','icirc','iuml','eth','ntilde','ograve','oacute','ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc','uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc','Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute','Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde','Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave','Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig','lt','gt','cent','pound','curren','yen','brvbar','sect','uml','copy','ordf','laquo','not','shy','reg','macr','deg','plusmn','sup2','sup3','acute','micro','para','middot','cedil','sup1','ordm','raquo','frac14','frac12','frac34');
		newString = this;
		for (var i = 0; i < chars.length; i++){
			myRegExp = new RegExp();
			myRegExp.compile(chars[i],'g')
			newString = newString.replace (myRegExp, '&' + entities[i] + ';');
		}
		return newString;
	}
});
Array.extend({
	random:function(){
		return this[$random(0,this.length-1)];
	}
});