$ =	function(x){ return	document.getElementById(x);	}
$A = function(x){
	var newArray = [];
	for(var i=0; i < x.length; i++){ newArray.push(x[i]); }
	return newArray; 
}
toArray = function(x){return $A(x)}
$T = function(tag, root){
	var root = $(root) || document;
	var lst = $A(root.getElementsByTagName(tag));
	if (!lst) return;
	return $A(lst);
}
give = function(ctnr, stf){ ctnr.innerHTML = stf; }
Array.prototype.head = function(){
    if (!this.length) return false;
    return this[0]; 
}
Array.prototype.tail = function(){
    if (this.length < 1) return;
    return (this.slice(1));
}
Array.prototype.map = function(f){
	var acc = []; var i = -1;
	while((i+=1) < this.length) acc.push(f(this[i]));
	return acc;
}
Array.prototype.mapi = function(f){
	var acc = []; var i = -1;
	while((i+=1) < this.length) acc.push(f(this[i], i));
	return acc;
}
Array.prototype.filter = function(f){
	var acc = [], i = -1;
	while((i+=1) < this.length) if(f(this[i])) acc.push(this[i]);
	return acc;
}
Array.prototype.reduce = function( acc ){
	var acc = acc || '';
	this.map( function(x){ acc += x });
	return acc; 
}
String.prototype.humanize = function(){
	var cap = this.charAt(0).toUpperCase();
	var rest = this.substring(1).replace(/_/, ' ');
	return cap + rest
}
basename = function(s){
	if(s == '')return;
	var bits = String.split('\\');
	return bits[bits.length-1];
}
addLoadEvent = function(func){
	var	oldonload =	window.onload;
	window.onload = (typeof window.onload != 'function') ? 
	func : 
	function(){ 
		if(oldonload)oldonload(); func();	
	}	
}
