/**
 * class	SILO_Page
 * author	Paul Kruijt
 */
var SILO_Page = new Class({
	
	/**
	 * initialize
	 * @return	void
	 */
	initialize: function()
	{
		// nodes
		this.document_node				= document.getElement('body');
		this.content_node				= $('content_column');
		this.content_switcher_node		= $('content_switcher');
		this.content_switch_txt_node	= $('switch_txt');
		this.content_switch_img_node	= $('switch_img');
		
		// classes
		this.box_class				= 'box';
		this.media_class			= 'media';
		this.image_class			= 'image';
		this.more_info_txt_class	= 'more_info_txt';
		this.more_info_btn_class	= 'more_info';
		this.close_btn_class		= 'close_btn';
		this.tool_tip_main_class	= 'tool_tip_main';
		this.tool_tip_desc_class	= 'tool_tip_desc';
		this.arrow_class			= 'arrow';
		this.mediaspace_class		= 'mediaspace';
		
		// settings
		this.item_start_color	= SILO_page_color_start;
		this.item_end_color		= SILO_page_color_end;
		this.image_mode			= false;
		
		// prefixes
		this.mediaspace_prefix	= 'mediaspace_';
	},
	
	/**
	 * start
	 * @return	void
	 */
	start: function()
	{
		var _this = this;
		
		if (this.content_node)
		{
			this.setProjectTextEvents();
			
			this.setItemsToggleEvents();
			
			this.setToolTipEvents();
			
			var newTimer = setTimeout(
				function ()
				{
					_this.executeColorEffect(_this.item_end_color);
				}
				, 5000
			);
		}
	},
	
	/**
	 * set project text events
	 * @return	void
	 */
	setProjectTextEvents: function()
	{
		// set vars
		var _this				= this;
		var item_nodes			= this.content_node.getElements('.'+this.box_class);
		var total_item_nodes	= item_nodes.length;
		
		if (total_item_nodes > 0)
		{
			item_nodes.each(function(item_node, index)
			{
				// box
				item_node.removeEvents();
				item_node.addEvents(
				{
					'mouseover': function()
					{
						_this.toggleProjectMedia(this);
					},
					'mouseout': function()
					{
						_this.toggleProjectMedia(this);
					}
				});
				
				// info button
				var handler_wrapper_node = item_node.getElement('.'+_this.more_info_btn_class);
				
				if (handler_wrapper_node)
				{
					var handler_node = handler_wrapper_node.getElement('a');
					
					if (handler_node)
					{
						handler_node.removeEvents();
						handler_node.addEvents(
						{
							'click': function()
							{
								_this.toggleProjectText(this);
								
								return false;
							},
							'focus': function()
							{
								this.blur();
							}
						});
					}
				}
				
				// close button
				var close_btn_wrapper_node = item_node.getElement('.'+_this.close_btn_class);
				
				if (close_btn_wrapper_node)
				{
					var close_btn_node = close_btn_wrapper_node.getElement('a');
					
					if (close_btn_node)
					{
						close_btn_node.removeEvents();
						close_btn_node.addEvents(
						{
							'click': function()
							{
								_this.toggleProjectText(this);
								
								return false;
							},
							'focus': function()
							{
								this.blur();
							}
						});
					}
				}
			});
		}
	},
	
	/**
	 * set items toggle events
	 * @return	void
	 */
	setItemsToggleEvents: function()
	{
		var _this = this;
		
		if (this.content_switch_txt_node)
		{
			this.content_switch_txt_node.removeEvents();
			this.content_switch_txt_node.addEvents(
			{
				'click' : function()
				{
					var active_class = this.get('class');
					
					if (active_class != 'active')
					{
						_this.image_mode = false;
						
						_this.toggleAllItems();
						
						this.set('class', 'active');
						_this.content_switch_img_node.set('class', '');
					}
					
					return false;
				}
			});
		}
		
		if (this.content_switch_img_node)
		{
			this.content_switch_img_node.removeEvents();
			this.content_switch_img_node.addEvents(
			{
				'click' : function()
				{
					var active_class = this.get('class');
					
					if (active_class != 'active')
					{
						_this.image_mode = true;
						
						_this.toggleAllItems();
						
						this.set('class', 'active');
						_this.content_switch_txt_node.set('class', '');
					}
					
					return false;
				}
			});
		}
	},
	
	/**
	 * set tool tip events
	 * @return	void
	 */
	setToolTipEvents: function()
	{
		var _this = this;
		
		this.tool_tip_main_class	= 'tool_tip_main';
		this.tool_tip_desc_class	= 'tool_tip_desc';
		this.arrow_class			= 'arrow';
		this.project_name_class		= 'project_name';
		
		var tool_tip_main_node = this.document_node.getElement('.'+this.tool_tip_main_class);
		var tool_tip_desc_node = this.document_node.getElement('.'+this.tool_tip_desc_class);
		
		if (tool_tip_main_node)
		{
			var tool_tip_handler_node	= tool_tip_main_node.getElement('.' + this.project_name_class);
			var tool_tip_arrow_node		= tool_tip_main_node.getElement('.' + this.arrow_class);
			
			if (tool_tip_handler_node)
			{
				if (tool_tip_desc_node)
				{
					tool_tip_handler_node.removeEvents();
					tool_tip_handler_node.addEvents(
					{
						'click' : function()
						{
							var state = tool_tip_desc_node.getStyle('display');
							
							if (state == 'block')
							{
								tool_tip_arrow_node.setStyle('background-position', '0 0');
								tool_tip_desc_node.setStyle('display', 'none');
							}
							else
							{
								tool_tip_arrow_node.setStyle('background-position', '0 -9px');
								tool_tip_desc_node.setStyle('display', 'block');
							}
							
							return false;
						}
					});
					
					tool_tip_arrow_node.removeEvents();
					tool_tip_arrow_node.addEvents(
					{
						'click' : function(event)
						{
							var state = tool_tip_desc_node.getStyle('display');
							
							if (state == 'block')
							{
								this.setStyle('background-position', '0 0');
								tool_tip_desc_node.setStyle('display', 'none');
							}
							else
							{
								this.setStyle('background-position', '0 -9px');
								tool_tip_desc_node.setStyle('display', 'block');
							}
							
							event.stopPropagation();
							
							return false;
						}
					});
				}
				
				// hide arrow
				else
				{
					tool_tip_handler_node.setStyle('cursor', 'default');
					tool_tip_arrow_node.setStyle('display', 'none');
				}
			}
		}
	},
	
	/**
	 * toggle all items
	 * @return	void
	 */
	toggleAllItems: function()
	{
		var _this				= this;
		var item_nodes			= this.content_node.getElements('.'+this.box_class);
		var total_item_nodes	= item_nodes.length;
		
		if (total_item_nodes > 0)
		{
			item_nodes.each(function(item_node, index)
			{
				// box
				_this.toggleProjectMedia(item_node);
			});
		}
	},
	
	/**
	 * toggle project media
	 * @param	object	item_node
	 * @return	void
	 */
	toggleProjectMedia: function(item_node)
	{
		if (item_node)
		{
			var media_node = item_node.getElement('.'+this.media_class);
			var image_node = item_node.getElement('.'+this.image_class);
			
			if (media_node && image_node)
			{
				var media_state		= media_node.getStyle('visibility');
				var mediaspace_node	= media_node.getElement('.'+this.mediaspace_class);
				
				if (media_state == 'hidden')
				{
					media_node.setStyle('visibility', 'visible');
					image_node.setStyle('visibility', 'hidden');
					
					/*
					// jw player movie
					if (mediaspace_node)
					{
						var mediaspace_height		= mediaspace_node.getStyle('height').toInt();
						var mediaspace_width		= mediaspace_node.getStyle('width').toInt();
						var mediaspace_id			= mediaspace_node.id;
						var mediaspace_settings		= mediaspace_id.replace(this.mediaspace_prefix, '');
						var arr_mediaspace_settings	= mediaspace_settings.split('_');
						var mediaspace_nr			= arr_mediaspace_settings[0];
						var mediaspace_file			= arr_mediaspace_settings[1];
						//var mediaspace_link			= arr_mediaspace_settings[2];
						
						if (mediaspace_nr && mediaspace_file)
						{
							var so = new SWFObject("../swf/player.swf", 'mpl_'+mediaspace_nr, mediaspace_width, mediaspace_height, "9");
							so.addParam("allowfullscreen", "true");
							so.addParam("allowscriptaccess", "always");
							so.addParam("wmode", "opaque");
							so.addVariable("file", '../files/'+mediaspace_file+'.flv');
							//so.addVariable("link", '../html/index.php?'+mediaspace_link);
							so.addVariable("linktarget", "_self");
							so.addVariable("controlbar", "none");
							so.addVariable("autostart", "true");
							so.addVariable("displayclick", "link");
							so.addVariable("icons", "false");
							so.addVariable("repeat", "always");
							so.write(mediaspace_id);
						}
					}
					*/
				}
				else
				{
					if (!this.image_mode)
					{
						media_node.setStyle('visibility', 'hidden');
						image_node.setStyle('visibility', 'visible');
					}
					
					/*
					// jw player movie
					if (mediaspace_node)
					{
						//mediaspace_node.empty();
					}
					*/
				}
			}
		}
	},
	
	/**
	 * toggle project text
	 * @param	object	anchor_node
	 * @return	void
	 */
	toggleProjectText: function(anchor_node)
	{
		if (anchor_node)
		{
			var item_node = anchor_node.getParent('.'+this.box_class);
			
			if (item_node)
			{
				var listener_node = item_node.getElement('.'+this.more_info_txt_class);
				
				if (listener_node)
				{
					var listener_state = listener_node.getStyle('display');
					
					if (listener_state == 'none') listener_node.setStyle('display', 'block');
					else listener_node.setStyle('display', 'none');
				}
			}
		}
	},
	
	/**
	 * execute color effect
	 * @param	string item_end_color
	 * @return	void
	 */
	executeColorEffect: function(item_end_color)
	{
		// set vars
		var _this				= this;
		var item_nodes			= this.content_node.getElements('.'+this.box_class);
		var total_item_nodes	= item_nodes.length;
		var item_end_color_new	= item_end_color == this.item_end_color ? this.item_start_color : this.item_end_color;
		
		if (total_item_nodes > 0)
		{
			item_nodes.each(function(item_node, index)
			{
				var fade_effect = new Fx.Morph(item_node,
				{
					duration: 10000,
					transition: Fx.Transitions.Quad.easeOut
				});
				
				fade_effect.start({
					'background-color': item_end_color
				}).chain(function()
				{
					
				});
			});
			
			// call again
			var newTimer = setTimeout(
				function ()
				{
					_this.executeColorEffect(item_end_color_new);
				}
				, 15000
			);
		}
	}
});
