function $(id)
{	
	var i, elements = [];

	if (id.constructor == Array) {
		for(i = 0; i < id.length; i++) {
			elements.push(document.getElementById(id[i]));
		}
		return elements;
	}

	return document.getElementById(id);
}


function getElementsByClassName(tag, className)
{
	var tmp, elements = [];

	elements = [];
	tmp = (arguments[2] ? arguments[2].getElementsByTagName(tag) : document.getElementsByTagName(tag));
	for(i = 0; i < tmp.length; i++) {
		if (tmp[i].className == className) {
			elements.push(tmp[i]);
		}
	}

	return elements;
}

function externalLinks()
{
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName('a');
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("rel") == "external") anchor.target = "_blank";
	}
}

// #######################################################################################
// ###########################   START CONSTRUCT CODE   ##################################
// #######################################################################################

var Construct = {
	node: function(element)
	{
		element = document.createElement(element.toLowerCase());
		if (!element) return; // failed to create element, no use to continue

		if (arguments[1]) 
		{
			if (typeof(arguments[1])=='object') {			
				if (arguments[1].constructor==Array) {	
					this.children(element, arguments[1]);
				} else {
					this.attributes(element, arguments[1]);
				}
			}
			
			if (typeof(arguments[1])=='string') {
				element.appendChild(this.text(arguments[1]));
			}
		}

		if (arguments[2])
		{
			if (typeof(arguments[2])=='string')
				element.appendChild(this.text(arguments[2]));
			if (typeof(arguments[2])=='object') 
				this.children(element, arguments[2]);	
		}

		if (arguments[3]) 
			this.children(element, arguments[3]);
		
		return element;
	},

	children: function(el, childs)
	{
		for (var i = 0; i < childs.length; i++)
		{
			el.appendChild(childs[i]);
		}
	},

	attributes: function(el, attribute)
	{
		for(attribu in attribute)
		{
			el[attribu] = attribute[attribu];
		}
	},

	text: function(string) 
	{
		return document.createTextNode(string);
	}
}

// #######################################################################################
// ########################   START COOKIE HANDLING CODE   ###############################
// #######################################################################################

function create_cookie(name, value, kill) 
{
	var date, expires;
	
	if (kill) {
		date = new Date("January 1, 1970");
	}
	else {
		date = new Date();
		date.setTime(date.getTime()+(365*24*60*60*1000));
	}

	expires = "; expires="+date.toGMTString();	
    document.cookie = name+"="+ value + expires + "; path=/";
}

function get_cookie(type) 
{
	var info, cookies, title, i;
	
	info = type + "=";
	cookies = document.cookie.split(';');

	for(i = 0; i < cookies.length; i++) {
		title = cookies[i].replace(/^\s+/, '');

		if (title.indexOf(info) == 0) {
			if (title.substring(info.length, title.length) == "null") {
				return '';
			}
			return title.substring(info.length, title.length);
		}
	}
	return '';
}

// #######################################################################################
// #########################   START EVENT HANDLING CODE   ###############################
// #######################################################################################

function addEvent(obj, type, fn) 
{
	if (obj.attachEvent) {
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn](window.event);}
		obj.attachEvent('on'+type, obj[type+fn]);
	} else {
		obj.addEventListener(type, fn, false);
	}
}

function removeEvent(obj, type, fn) 
{
	if (obj.detachEvent) {
		obj.detachEvent('on'+type, obj[type+fn]);
		obj[type+fn] = null;
	} else {
		obj.removeEventListener(type, fn, false);
	}
}

addEvent(window, "load", externalLinks);
