/*	Based on "1k DHTML API" by Chris Nott <http://dithered.com/javascript/1kdhtml/>
		and "1k DOM API" by Timothy R. Morgan <http://timmorgan.info/1k/>
	Author: Chris Nott (chris[at]dithered[dot]com)
	Modified by: Pascal Polleunus <ppo@beeznest.net>
	License: http://creativecommons.org/licenses/by/1.0/
	Dependencies: browser_detect.js */

// HTMLElement gE(string id)
// get element
function gE(e,f){
	if(browser.isNS4x){
		f=(f) ? f : self;
		var V=f.document.layers;
		if(V[e]) return V[e];
		for(var W=0;W<V.length;) t=gE(e,V[W++]);
		return t;
	}
	if(document.all) return document.all[e];
	return document.getElementById(e);
}

// HTMLElement gEbT(string tag)
// get element by tag name
function gEbT(t){
	return document.getElementsByTag(t.toUpperCase());
}

// HTMLElement gA(HTMLElement elm, string tag)
// get first ancestor tag
function gA(e,t){
	r=null;
	t=t.toUpperCase();
	while(e.parentNode){
		e=e.parentNode;
		if(e.tagName==t){
			r=e;
			break;
		}
	}
	return r;
}

// HTMLElement gC(HTMLElement elm, int index, string tag)
// get child tag at given index
function gC(e,i,t){
	c=e.childNodes;
	if(isNaN(t)&&c.length>i){
		return c[i];
	}else{
		t=t.toUpperCase();
		k=-1;
		for(j=0;j<c.length;j++){
			if(c[j].tagName==t){
				k++;
				if(k==i){
					return c[j];
				}
			}
		}
	}
	return null;
}

// HTMLElement cE([string tag])
// create element
function cE(t){
	return document.createElement(t||'div');
}

// HTMLElement aC(HTMLElement elm [, HTMLElement parent])
// append child
function aC(e,p){
	return (p||document.body).appendChild(e);
}

// void iV(HTMLElement elm [, bool useVisibility])
// whether element is visible (v tells whether to use style.visibility)
function iV(e,v){
	return browser.isNS4x ? e.visibility!='hide' : v ? e.style.visibility!='hidden' : e.style.display!='none';
}

// void sE(HTMLElement elm [, bool useVisibility])
// show element (v tells whether to use style.visibility)
function sE(e,v){
	if(browser.isNS4x){
		e.visibility='show';
	}else if(v){
		e.style.visibility='visible';
	}else if(e.style.oldDisplay){
		e.style.display=e.style.oldDisplay;
	}else{
		e.style.display='';
	}
}

// void hE(HTMLElement elm [, bool useVisibility])
// hide element (v tells whether to use style.visibility)
function hE(e,v){
	if(browser.isNS4x){
		e.visibility='hide';
	}else if(v){
		e.style.visibility='hidden';
	}else{
		if(e.style.display!='none') e.style.oldDisplay=e.style.display;
		e.style.display='none';
	}
}

// void tE(HTMLElement elm [, bool useVisibility])
// show/hide element (v tells whether to use style.visibility)
function tE(e,v){
	iV(e,v) ? hE(e,v) : sE(e,v);
}

// void sZ(HTMLElement elm, int/string zIndex)    
// set z-index
function sZ(e,z){
	browser.isNS4x ? e.zIndex=z : e.style.zIndex=z;
}

// void sX(HTMLElement elm, int/string xPos)      
// set x position
function sX(e,x){
	browser.isNS4x ? e.left=x : browser.isOpera ? e.style.pixelLeft=x : e.style.left=px(x);
}

// void sY(HTMLElement elm, int/string yPos)      
// set y position
function sY(e,y){
	browser.isNS4x ? e.top=y : browser.isOpera ? e.style.pixelTop=y : e.style.top=px(y);
}

// void sW(HTMLElement elm, int/string width)     
// set width
function sW(e,w){
	browser.isNS4x ? e.clip.width=w : browser.isOpera ? e.style.pixelWidth=w : e.style.width=px(w);
}

// void sH(HTMLElement elm, int/string height)    
// set height
function sH(e,h){
	browser.isNS4x ? e.clip.height=h : browser.isOpera ? e.style.pixelHeight=h : e.style.height=px(h);
}

// void sC(HTMLElement elm, int/string top, int/string right, int/string bottom, int/string left)
// set clipping
function sC(e,t,r,b,l){
	browser.isNS4x ? (X=e.clip,X.top=t,X.right=r,X.bottom=b,X.left=l) : e.style.clip='rect('+px(t)+' '+px(r)+' '+px(b)+' '+px(l)+')';
}

// void wH(HTMLElement elm, string html)          
// write html
function wH(e,h){
	if(browser.isNS4x){
		Y=e.document;
		Y.open();
		Y.write(h);
		Y.close();
	}
	if(e.innerHTML) e.innerHTML=h;
}

// return length value
// Author: Timothy R. Morgan (1k DOM API - http://timmorgan.info/1k/)
function px(n){
	return (typeof n=='string') ? n : n+'px';
}

// trim a string
function trim(s){
	return s.replace(/^[\s]+(.+)[\s]+$/,'$1');
}
