/*######################################################*\
||                                                      ||
||                  S N E L S I T E                     ||
||                                                      ||
||       Media Design Content Management System         ||
||           Copyright 2002-2007 Media Design           ||
\*######################################################*/

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 AJAX HANDLING CODE   ################################
// #######################################################################################

var AJAX = {

	xmlhttp : null,
	type    : null,
	notice  : '',

	// create a new AJAX object
	create : function()	
	{
		try {
			xmlhttp = new XMLHttpRequest(); // Gecko's
		} catch (failed) {
			try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // IE
			} catch(failed) {
				xmlhttp = null; // 
				return false;
			}
		}

		if ($('response-notice'))
		{
			notice = $('response-notice');
		}
	},

	running : function()
	{
		// check for running connections
		xmlhttp.abort();
	},

	state : function(execute)
	{
		if (xmlhttp.readyState != 4) {
			return false; // do not go further on till the request is complete
		}

		if (xmlhttp.status != 200) {
			return false; // 404 or 0 status (IE sometimes returns 0)
		} 

		if (type.toLowerCase() == 'xml')
		{
			if (xmlhttp.reponseXML == '')
			{
				return false;
			}
		}
		else
		{
			if (xmlhttp.responseText == '')
			{
				return false;
			}
		}
	
		eval(execute);
	},

	request : function(kind, file, execute, responsetype)
	{
		type = responsetype;

		if ($('response-notice'))
		{
			notice.firstChild.innerHTML = arguments[4];
		}

		xmlhttp.onreadystatechange = function() { AJAX.state(execute); };

		xmlhttp.open(kind, file, true);
		xmlhttp.send(null);
	},

	response : function()
	{
		return (type.toLowerCase() == 'xml' ? xmlhttp.responseXML : xmlhttp.responseText);
	},

	raise_notice : function(text)
	{
		if ($('response-notice'))
		{
			notice.firstChild.innerHTML = text;
		}
	}
}

// #######################################################################################
// ###########################   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);

/*######################################################*\
||                   S N E L S I T E                    ||
||           Copyright 2002-2007 Media Design           ||
\*######################################################*/