var Homepage = Class.create({
		
	initialize: function(args) {
			
		this.categorys 			= args.categorys;
		this.lists				= args.lists;
		this.listItems			= args.listItems;
		
		this.visibleListItems 	= new Array();
		this.holderContainer	= args.holderContainer;
		
		this.categoryLabelContainer	= args.categoryLabelContainer;
		this.labelSupplement	= (args.labelSupplement ? args.labelSupplement : '');
		
		this.selectedCategory = null;
		this.selectedListItem = null;
		this.selectedList	  = this.lists[0];
		
		this.listType			= args.listType;
		
		this.slideShowInterval;
		this.slideShowTimeOut;
	},

	setUp: function() 
	{
		this.categorys.invoke('observe', 'mouseover', 
			function (event) {
				this.delaySlideShow();
				this.categoryItemMouseOver_Handler(event.target);				
			}.bind(this));
		
		this.listItems.invoke('observe', 'mouseover', 
			function (event) {
				this.delaySlideShow();
				this.listItemMouseOver_Handler(event.target)
			}.bind(this));
		
		// select the first ListItem
		if (this.listType=='multi')
		{
			//this.setSelectedList(this.categorys[0]);
			this.categoryItemMouseOver_Handler(this.categorys[0]);
		} else if (this.listType=='single') {
			this.findListItems(this.categorys[0]);
		}
	},
	
	startSlideShow: function ()
	{
		this.slideShowInterval = window.setInterval(function(){this.slideShow()}.bind(this), 6000);
	},
	
	stopSlideShow: function()
	{
		if (this.slideShowInterval)
		{
			window.clearInterval(this.slideShowInterval);
		}		
	},
	
	delaySlideShow: function()
	{
		if (this.slideShowInterval)
		{
			if (this.slideShowTimeOut)
			{
				window.clearTimeout(this.slideShowTimeOut);	
			}
			this.stopSlideShow();
			this.slideShowTimeOut = window.setTimeout( function() { this.startSlideShow(6000) }.bind(this), 8000);
		}		
	},
	
	categoryItemMouseOver_Handler: function(item)
	{
		if ((item == this.selectedCategory) || (!item)) return;
		this.setSelectedCategory(item);
		
		if (this.listType=='multi')
		{
			this.setSelectedList(item);	
		} else if (this.listType=='single') {
			this.findListItems(item);
		}
	},
	
	listItemMouseOver_Handler: function(item)
	{
		if ((item == this.selectedListItem) || (!item)) return;
			
		var listItem, listItemImage, listItemName, listItemContent;
		
		switch(item.tagName.toUpperCase())
		{
			case 'LI':	
				listItemImage 		= item.down('a.image');
				listItemName 		= item.down('h2.name');
				listItemContent 	= item.down('span.content');
				listItem			= item;
			break;
			case 'IMG':	
				listItemImage 		= item.up(1).down('a.image');
				listItemName 		= item.up(1).down('h2.name');
				listItemContent 	= item.up(1).down('span.content');
				listItem			= item.up(1);
			break;
		}
		
		if(listItem && (this.selectedListItem != listItem))
		{				
			this.setSelectedListItem(listItem);
			this.setHolderData(listItemName, listItemImage, listItemContent);	
		}	
	},
	
	setSelectedCategory: function(item)
	{
		if (this.selectedCategory != null)
		{
			this.selectedCategory.removeClassName('selected');
		}
		
		this.selectedCategory = item;
		this.selectedCategory.addClassName('selected');
		this.categoryLabelContainer.update(this.labelSupplement + ' ' + item.innerHTML.stripTags());
	},
	
	setSelectedList: function(category)
	{
		if (this.selectedList)
		{
			this.selectedList.addClassName('invisible');
		}
		
		for (var x = 0, y = this.categorys.length; x < y; x++)
		{
			var list = this.lists[x];			
			if (list)
			{
				if (this.categorys[x] == category)
				{					
					this.selectedList = list;
					break;
				}
			}			
		}	
				
		this.selectedList.appear({duration:0.6}).show();
		this.selectedList.removeClassName('invisible');
		this.listItemMouseOver_Handler(this.selectedList.down('li'));
		this.visibleListItems	= this.selectedList.childElements();
		
	},
	
	findListItems: function(category)
	{
		var categorieClassName = category.className.replace('selected', '');		
		this.visibleListItems	= $$('.item-' +categorieClassName);		
		
		for (var i = 0, n = this.listItems.length; i < n; i++)
		{
			this.listItems[i].addClassName('invisible');
		}
		
		for (var x = 0, y = this.visibleListItems.length; x < y; x++)
		{			
			this.visibleListItems[x].appear({duration:0.6}).show();
			this.visibleListItems[x].removeClassName('invisible');
		}
			
		if (this.visibleListItems.length)
		{		
			this.holderContainer.removeClassName('invisible');
			this.listItemMouseOver_Handler(this.visibleListItems[0]);				
		} else {
			this.holderContainer.addClassName('invisible');
		}
	},
	
	setSelectedListItem: function(item)
	{
		if (this.selectedListItem!=null)
		{
			this.selectedListItem.removeClassName('selected');
		}			
		item.addClassName('selected');
		this.selectedListItem = item;
	},
	
	setHolderData: function(name, image, content)
	{
		if (this.holderContainer.hasClassName('invisible'))
		{							
			this.holderContainer.removeClassName('invisible');
		}	
		this.holderContainer.down('.item-name').update(name.innerHTML );
		this.holderContainer.down('.item-content').update(content.innerHTML );
		this.holderContainer.down('.image').update(image.innerHTML );
	},
	
	
	getCategoryAfterSelectedCategory: function()
	{		
		if (!this.selectedCategory)
		{
			return this.categorys[0];
		}
		for (var i = 0, n = this.categorys.length; i < n; i++)
		{
			if (this.categorys[i]==this.selectedCategory)
			{
				if ((i+1) < n)
				{
					return this.categorys[(i+1)];
				}
			}
		}		
		return this.categorys[0];	
	},
	
	getListItemAfterSelectedListItem: function()
	{		
		if (!this.selectedListItem || !this.visibleListItems || !this.visibleListItems.length)
		{
			
			return null;
		}
		
		for (var i = 0, n = this.visibleListItems.length; i < n; i++)
		{
			if (this.visibleListItems[i]==this.selectedListItem)
			{
				if ((i+1) < n)
				{
					return this.visibleListItems[(i+1)];
				}
			}
		}		
		return null;	
	},
	
	slideShow: function()
	{			
		var itemAfterSelectedItem = this.getListItemAfterSelectedListItem();
		if (itemAfterSelectedItem) 
		{
			this.listItemMouseOver_Handler(itemAfterSelectedItem);
		} else {
			this.categoryItemMouseOver_Handler(this.getCategoryAfterSelectedCategory());
		}
		
	}
	
});
