var kickStart = {
	running : false,

	kick : function() {
		if (!kickStart.running) {
			externalLinks();
			RatingSelector.init();
			highlight();
			pickupInformation();
			
			if (typeof coolblueBar != "undefined") {
				coolblueBar();
			}
			
			kickStart.running = true;
		}
	}
}

if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", kickStart.kick, false);
	window.onload = kickStart.kick;
} else {
	window.onload = kickStart.kick;
}

function animate(properties) {
	// Variables
	var _steps = (properties.duration * 1000) / 50,
		_element,
		_i = 0;

	// If we haven't started yet, the current step is 1
	if (!properties.step) {
		properties.step = 1;
	}

	// Process all the elements in this animation
	while ((_element = properties.elements[_i++])) {
		if (!_element.currentValue) {
			_element.currentValue = _element.startValue;
		}

		// What change should be made to the currentValue during each step?
		if (!_element.change) {
			if (_element.startValue < _element.endValue) {
				_element.change = "_element.currentValue + " + (_element.endValue - _element.startValue) / _steps;
			} else if (_element.startValue > _element.endValue) {
				_element.change = "_element.currentValue - " + (_element.startValue - _element.endValue) / _steps;
			}
		}
		
		// Calculate the new current value
		_element.currentValue = eval(_element.change);

		// Apply the new value
		_element.domNode.style[_element.styleRule] = (_element.preFix ? _element.preFix : "") + (properties.step == _steps ? _element.endValue : _element.currentValue) + (_element.postFix ? _element.postFix : "");
	}

	// As long as we haven't finished, set a new timeout
	if (properties.step < _steps) {
		properties.step++;

		setTimeout(function() {
			animate(properties);
		}, 50);
	}
}

function gameDescription(element, description, event) {
	// Cross-browser event handling
	event = event || window.event;

	// Box
	var _box = document.createElement("div");
	_box.className = "gamedescription";

	// Title
	var _heading = document.createElement("h4");
	_heading.appendChild(document.createTextNode(description.title));
	_box.appendChild(_heading);

	// Text
	var _description = document.createElement("p");
	_description.appendChild(document.createTextNode(description.text));
	_box.appendChild(_description);

	// Table
	if (description.table) {
		var _table = document.createElement("table"),
			_tbody = document.createElement("tbody"),
			_tr, _td;

		for (var _row in description.table) {
			_tr = document.createElement("tr");

			for (var _cell in description.table[_row]) {
				_td = document.createElement("td");
				_td.appendChild(document.createTextNode(description.table[_row][_cell]));
				_tr.appendChild(_td);
			}

			_tr.appendChild(_td);
			_tbody.appendChild(_tr);
		}

		_table.appendChild(_tbody);
		_box.appendChild(_table);
	}

	// Position
	_box.style.top = (event.pageY ? event.pageY : event.clientY + document.documentElement.scrollTop + document.body.scrollTop) + 15 + "px";
	_box.style.left = (event.pageX ? event.pageX : event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft) + 15 + "px";

	// Fade in
	animate({
		duration : 0.2,
		elements : [
			{
				domNode : _box,
				styleRule : 'opacity',
				startValue : 0,
				endValue : 1
			},
			
			{
				domNode : _box,
				styleRule : 'filter',
				startValue : 0,
				preFix : 'alpha(opacity=',
				postFix : ')',
				endValue : 100
			}
		]
	});

	// Set mouseout handler
	element.onmouseout = function() {
		_box.style.visibility = "hidden"; // Opera fix
		_box.parentNode.removeChild(_box);
	}

	// Add the box to the DOM
	document.getElementById("item").appendChild(_box);
}