$ = 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 i = -1; 
    var acc = [];
    while(++i < this.length) acc.push(f(this[i]));
    return acc;
}

Array.prototype.filter = function(f){
	var i = -1; var acc = [];
	while(++i < 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];
}

toggle = function(thing){
	if(thing) thing.style.display = (thing.style.display == 'none') ? '' : 'none';
}
addLoadEvent = function(func){
	var oldonload = window.onload;
	window.onload = (typeof window.onload != 'function') ?
	func : 	function(){ if(oldonload)oldonload(); func();}
}
addLoadEvents = function(lst){
	lst.map(function(x){addLoadEvent(x)})
}
