Array.prototype.in_array = function(needle) {
	for (key in this) {
		if (this[key] == needle)
			return key;
	}

	return false;	
}

var LatestNews = function() {
	var options = {
			items : "news-items",
			index : "news-index",
			maxImageWidth : 0,
			maxImageHeight : 0,
			cropImages : false,
			cacheImages : false
		},
		current = 0,
		items = new Array(),
		index = new Array(),
		regexp = /(^|\s)news-item($|\s)/i,
		indexElement = null,
		timeout = 3000,
		t = null;
	
	this.addLink = function(item) {
		var div = document.createElement('div'),
			title = document.createElement('div'),
			image = document.createElement('div');
		
		div.className = item.className;
		div.onmouseover = function() {
			pause();
			setCurrentItem(item);
		};
		div.onmouseout = function() {
			continueItems();
		};
		
		title.innerHTML = item.getElementsByTagName('h3')[0].innerHTML;
		title.className = "news-item-title";
		
		image.className = "news-item-image";
		
		var images = item.getElementsByTagName('img');
		
		if (images.length > 0) {
			var src = images[0].src,
				regexpScript = /image.php/i,
				regexpURI = /(\?|&)uri=([^\?&$]+)/i;
			
			if (src.match(regexpScript) && src.match(regexpURI)) {
				src = 'image.php' + 
					'?uri=' + regexpURI.exec(src)[2] + 
					(options.maxImageWidth > 0 ? '&width=' + options.maxImageWidth : '') + 
					(options.maxImageHeight > 0 ? '&height=' + options.maxImageHeight : '') + 
					(options.cropImages ? '&crop=1' : '') + 
					(options.cacheImages ? '&cache=1' : '');
			}

			var img = document.createElement('img');
			img.src = src;
			
			image.appendChild(img);
			div.appendChild(image);
		}
		
		div.appendChild(title);
		indexElement.appendChild(div);
		index.push(div);
	};
	
	this.setClassCurrent = function(item, current) {
		var className = item.className.split(' '),
			key = className.in_array('news-item-current');

		if (current && key === false)
			className.push('news-item-current');
		else if (!current && key !== false)
			className.splice(key, 1);

		item.className = className.join(' ');
	};
	
	this.setCurrentItem = function(item) {
		for (var i = 0; i < items.length; i++) {
			if (isCurrent = (items[i] == item))
				current = i;
			
			setClassCurrent(items[i], isCurrent);
			setClassCurrent(index[i], isCurrent);
		}
	}
	
	this.setNextItem = function() {
		if (++current >= items.length)
			current = 0;

		setCurrentItem(items[current]);
	};
	
	this.continueItems = function() {
		if (!t)
			t = setInterval("setNextItem()", timeout);
	};
	
	this.pause = function() {
		clearTimeout(t);
		t = null;
	};
	
	return {
		init : function(conf) {
			if (conf instanceof Object) {
				for (v in conf)
					options[v] = conf[v];
			}
			
			var divs = document.getElementById(options.items).getElementsByTagName('div');
			indexElement = document.getElementById(options.index);
			
			for (var i = 0; i < divs.length; i++) {
				if (!regexp.test(divs[i].className))
					continue;
				
				items.push(divs[i]);
				addLink(divs[i]);
				divs[i].onmouseover = function() {
					pause();
					setCurrentItem(this);
				};
				divs[i].onmouseout = function() {
					continueItems();
				};
			}
			
			if (items.length > 0) {
				setCurrentItem(items[0]);
				continueItems();
			}
		}
	};
}();
