if (typeof(HAMILTONS) == 'undefined') {
	HAMILTONS		= {};
	HAMILTONS.UI	= {};
}

HAMILTONS.UI.SlideShow	= function()
{
	var duration	= 6000;
	var container;
	var xmldoc;
	var items = [];
	var imgs = [];
	var timer;
	
	var keeprolling	= true;
	
	var init	= function(xmlpath) {
	
		YAHOO.util.Dom.addClass(document.body, 'dynamic');
		
		container	= YAHOO.util.Dom.get('flashcontent');
		var oConn	= YAHOO.util.Connect.asyncRequest('GET', xmlpath, HAMILTONS.UI.SlideShow.callback);

		container.innerHTML	= '';
		
	}
	
	
	var loadXML	= function(xmldoc) {
		var docitems	= xmldoc.getElementsByTagName('item');
		if (docitems.length) {
			var i, l;
			for(i=0, l=docitems.length; i<l; i++) {
				var item	= {
					src: docitems[i].getAttribute('i'),
					title: docitems[i].getAttribute('n'),
					visible: false,
					index: i
				};
				items.push(item);
				
				var img		= document.createElement('IMG');
				img.setAttribute('src', item.src);
				img.setAttribute('alt', item.title);
				YAHOO.util.Dom.setStyle(img, 'opacity', 0);
				img	= container.appendChild(img);
				imgs.push(img);
			}

			items[0].visible	= true;
			YAHOO.util.Dom.setStyle(imgs[0], 'opacity', 1);
			
			buildNav();
			
			timer	= setTimeout(HAMILTONS.UI.SlideShow.roll, duration);
		}
		
	}
	
	var buildNav	= function() {
		var ul		= document.createElement('UL');	
		var li		= document.createElement('LI');
		var a		= document.createElement('A');
		var txt		= document.createTextNode('Stop slide show');
		
		a.appendChild(txt);
		a.setAttribute('href', '#');
		a.setAttribute('id', 'stop');
		YAHOO.util.Event.addListener(a, 'click', HAMILTONS.UI.SlideShow.stop);
		YAHOO.util.Dom.addClass(li, 'selected');
		li.appendChild(a);
		ul.appendChild(li);
		
		if (items.length) {
			var i, l;
			
			for (i=0, l=items.length; i<l; i++) {
				var li		= document.createElement('LI');
				var a		= document.createElement('A');
				var txt		= document.createTextNode('0' + (i+1).toString());
				
				a.appendChild(txt);
				
				a.setAttribute('href', '#');
				
				li.appendChild(a);
				items[i].link	= ul.appendChild(li);
				
				YAHOO.util.Event.addListener(items[i].link, 'click', HAMILTONS.UI.SlideShow.show, items[i], true);
				
				if (i==0) {
					YAHOO.util.Dom.addClass(items[i].link, 'selected');
				}
				
			}
		}
		
		
		
		container.appendChild(ul);
	}
	
	var roll	= function() {
		if (items.length && keeprolling) {
			var i, l;
			
			for (i=0, l=items.length; i<l; i++) {
				if (items[i].visible) {
				
					if (typeof(items[i+1]) == 'undefined') {
						var nextitem	= items[0];
						var nextimg		= imgs[0];
					}else{
						var nextitem	= items[i+1];
						var nextimg		= imgs[i+1];
					}
					
					var outgoing	= new YAHOO.util.Anim(imgs[i], {opacity: {to: 0}}, 1);
					var incoming	= new YAHOO.util.Anim(nextimg, {opacity: {to: 1}}, 1);
					
					outgoing.animate();
					incoming.animate();
					
					items[i].visible	= false;
					nextitem.visible	= true;
					
					YAHOO.util.Dom.addClass(nextitem.link, 'selected');
					YAHOO.util.Dom.removeClass(items[i].link, 'selected');
					
					timer	= setTimeout(HAMILTONS.UI.SlideShow.roll, duration);
					
					
					break;
				}
			}
		}
	}
	
	
	var callback	= {
		success: function(o){ loadXML(o.responseXML); }
	}
	
	var stop		= function(e) {
		YAHOO.util.Event.stopEvent(e);
		
		clearTimeout(timer);
		
		var stopbutton	= YAHOO.util.Dom.get('stop');
		
		if (keeprolling) {
			stopbutton.innerHTML = 'Play slide show';
			keeprolling = false;
		}else{
			stopbutton.innerHTML = 'Stop slide show';
			keeprolling = true;
			HAMILTONS.UI.SlideShow.roll();
		}
		
		
		
		return false;
	}
	
	
	var show		= function(e) {
		YAHOO.util.Event.stopEvent(e);
		
		if (keeprolling) stop(e);

		var i, l;
			
		for (i=0, l=items.length; i<l; i++) {
			if (items[i].visible) {
				YAHOO.util.Dom.removeClass(items[i].link, 'selected');
				
				var outgoing	= new YAHOO.util.Anim(imgs[i], {opacity: {to: 0}}, 1);
				var incoming	= new YAHOO.util.Anim(imgs[this.index], {opacity: {to: 1}}, 1);
				
				outgoing.animate();
				incoming.animate();
				
				items[i].visible	= false;
				this.visible		= true;
			}
		}	
		YAHOO.util.Dom.addClass(this.link, 'selected');
		
		
		
		return false;
	}
	
	
	return {
		init: init,
		callback: callback,
		roll: roll,
		stop: stop,
		show: show
	}
	
}();