// Useful functions ----------------------------------------------------------->
function getElementsByClassName ( cn, pele )
{
	if ( !pele ) pele = this;
	var eles;
	if ( pele.nodeName )
		eles = pele.getElementsByTagName ( '*' );
	else eles = document.getElementsByTagName ( '*' );
	var r = new Array ();
	for ( var a = 0; a < eles.length; a++ )
	{
		var classes = eles[a].className.split ( ' ' );
		for ( var b = 0; b < classes.length; b++ )
		{
			if ( classes[b] == cn )
			{
				r.push ( eles[a] );
				break;
			}
		}
	}
	return r;
}
function setOpacity ( op, pele )
{
	if ( !pele ) pele = this;
	if ( navigator.userAgent.indexOf ( 'MSIE' ) >= 0 )
	{
		pele.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + ( Math.floor ( op * 100 ) ) + ")";
	}
	else
	{
		pele.style.opacity = op;
	}
}

// Get elements or an element by id ------------------------------------------ >
$ = function ( el )
{
	switch ( typeof ( el ) )
	{
		case 'string':
			return document.getElementById ( el );
		case 'array':
			var r = new Array ();
			for ( var a in el )
			{
				var t = document.getElementById ( el[a] );
				if ( t ) r.push ( t );
			}
			return r;
		case 'object':
			if ( el.nodeName )
				return el;
			return false;
		default:
			return false;
	}			
}

// Include a javascript source and eval it globally --------------------------->
function Include ( url )
{
	if ( window.cAjax )
	{
		var j = new cAjax ();
		j.open ( url );
		j.onload = function ( )
		{
			if ( window.execScript )
				window.execScript ( this.responseText, "Javascript" );
			else eval.call ( window, this.responseText );
		}
	}
	else 
	{
		var ele = document.createElement ( "script" );
		ele.type = "text/javascript";
		ele.src = url;
		document.body.insertBefore ( ele, document.body.firstChild );
	}
}

// Add several events on each event type -------------------------------------->
var _events = new Array ();
function AddEvent ( type, func )
{	
	if ( !window[type] )
	{
		window[type] = function ()
		{
			for ( var a = 0; a < _events[type].length; a++ )
				_events[type][a]();
		}
		_events[type] = [ func ];
	}
	else _events[type].push ( func );
	return func;
}
// Removes an event from the event pool --------------------------------------->
function DelEvent ( func )
{
	for ( a in _events )
	{
		var out = new Array ();
		for ( b in _events[a] )
		{
			if ( func != _events[a][b] )
				out.push ( _events[a][b] );
		}
		_events[a] = out;
	}
}

// Gets a translation if available -------------------------------------------->
function i18n ( word )
{
	if ( !document.i18n) return word;
	if ( document.i18n[word] )
		return document.i18n[word];
	return word;
}

// Trims leading and ending white-space from a string ------------------------->
function Trim ( string )
{
	for ( var b = 0; b < 2; b++ )
	{
		var mode = 0;
		var ostr = '';
		for ( var a = 0; a < string.length; a++ )
		{
			if ( 
				string.substr ( a, 1 ) != " " && 
				string.substr ( a, 1 ) != "\n" && 
				string.substr ( a, 1 ) != "\r" && 
				string.substr ( a, 1 ) != "\t" 
			)
			{
				mode = 1;
			}
			if ( mode == 0 )
			{
				continue;
			}
			else
			{
				ostr += string.substr ( a, 1);
			}
		}
		var rstr = '';
		for ( var a = ostr.length-1; a >= 0; a-- )
		{
			rstr += ostr.substr ( a, 1 );
		}
		string = rstr;
	}
	return string;
}

// Sets a cookie with no fuss ------------------------------------------------->
function SetCookie ( n, v )
{
	document.cookie = n + '=' + v;
	return true;
}

// Gets a cookie value (with no fuss!) ---------------------------------------->
function GetCookie ( n )
{
	var cookies = document.cookie + ''; cookies = cookies.split ( ";" );
	for ( var a = 0; a < cookies.length; a++ )
	{
		var info = cookies[a].split ( '=' );
		var kn = info[0];
		if ( Trim ( kn ) == Trim ( n ) )
		{
			return info[1];
		}
	}
	return '';
}

// Gets the base url ---------------------------------------------------------->
function BaseUrl ()
{
	return document.getElementsByTagName ( 'base' )[0].href;
}


