function Slide( rotate )	{
	
	function Container( element )	{
		
		var buttonsInterval = null;
		var rotationInterval = null;
		var index = 0;
		
		var contents = [];
		var buttons = [];
		var buttonDiv = document.createElement( 'div' );
		buttonDiv.className = 'slideButtons';
		element.appendChild( buttonDiv );
		
		this.element = function()	{
			return element;
		};
		this.contents = function()	{
			return contents;
		};
		this.buttons = function()	{
			return buttons;
		};
		
		function displayContent( button )	{
			for( var i = 0; i < buttons.length; i++ )	{
				if( buttons[i].objid != button.objid )	{
					buttons[i].hideContent();
				}
				else	{
					index = i;
					clearInterval( rotationInterval );
					rotationInterval = setInterval( rotateToNext, rotate );
					buttons[i].showContent();
				}
			}
		};
		
		this.addContent = function( element )	{
			
			var content = new Content( element );
			content.objid = contents.length;
			
			var button = new Button( content );
			button.objid = buttons.length;
			button.innerHTML = buttons.length + 1;
			button.href = 'javascript:void(0)';
			button.onclick = function()	{
				displayContent( this );
			}
			
			buttonDiv.appendChild( button );
			contents.push( content );
			buttons.push( button );
			
			if( buttons.length == 1 ) button.showContent();
			
		};
		
		function rotateToNext()	{
			if( index + 1 < buttons.length ) index++;
			else index = 0;
			displayContent( buttons[ index ] );
		}
		
		function showButtons()	{
			clearInterval( buttonsInterval )
			for( var i = 0; i < buttons.length; i++ )	{
				buttons[i].show();
			}
		}
		function hideButtons()	{
			function hideButton()	{
				for( var i = 0; i < buttons.length; i++ )	{
					buttons[i].hide();
				}
			}
			buttonsInterval = setTimeout( hideButton, 1000 )
		}
		
		if( element.addEventListener )	{
			element.addEventListener( 'mouseover', showButtons, null );
			element.addEventListener( 'mouseout', hideButtons, null );
		}
		else if( element.attachEvent )	{
			element.attachEvent( 'onmouseover', showButtons );
			element.attachEvent( 'onmouseout', hideButtons );
		}
		if( rotate )	{
			rotationInterval = setInterval( rotateToNext, rotate );
		}
		
		return this;
	}
	
	function Button( content )	{
		
		var index = 0;
		var interval = null;
		
		var element = document.createElement( 'a' );
		
		element.objid = 0;
		element.content = content;
		element.style.display = 'none';
		element.style.opacity = 0;
		element.style.filter = 'alpha(opacity=0)';
		
		element.show = function()	{
			if( index == 10 ) return false;
			clearInterval( interval );
			element.style.display = 'block';
			function fade()	{
				index++;
				element.style.opacity = index / 10;
				element.style.filter = 'alpha(opacity=' + ( index * 10 ) + ')';
				if( index == 10 )	{
					clearInterval( interval );
				}
			}
			interval = setInterval( fade, 20 );
		}
		element.hide = function()	{
			if( index == 0 ) return false;
			clearInterval( interval );
			function fade()	{
				index--;
				element.style.opacity = index / 10;
				element.style.filter = 'alpha(opacity=' + ( index * 10 ) + ')';
				if( index == 0 )	{
					clearInterval( interval );
					element.style.opacity = 0;
					element.style.filter = 'alpha(opacity=0)';
					element.style.display = 'none';
				}
			}
			interval = setInterval( fade, 20 );
		}		
		element.showContent = function()	{
			content.show();
			element.className = 'selected';
		};
		element.hideContent = function()	{
			content.hide();
			element.className = '';
		};
		
		return element;
		
	}
	
	function Content( element )	{
		
		var index = 0;
		var interval = null;
		
		element.objid = 0;
		
		element.style.display = 'none';	
		element.style.opacity = 0;
		element.style.filter = 'alpha(opacity=0)';
		
		element.show = function()	{
			if( index == 10 ) return false;
			clearInterval( interval );
			element.style.display = 'block';
			function fade()	{
				index++;
				element.style.opacity = index / 10;
				element.style.filter = 'alpha(opacity=' + ( index * 10 ) + ')';
				if( index == 10 )	{
					clearInterval( interval );
				}
			}
			interval = setInterval( fade, 20 );
		};
		element.hide = function()	{
			if( index == 0 ) return false;
			clearInterval( interval );
			function fade()	{
				index--;
				element.style.opacity = index / 10;
				element.style.filter = 'alpha(opacity=' + ( index * 10 ) + ')';
				if( index == 0 )	{
					clearInterval( interval );
					element.style.opacity = 0;
					element.style.filter = 'alpha(opacity=0)';
					element.style.display = 'none';
				}
			}
			interval = setInterval( fade, 20 );
		};
		
		return element;
	}

	var containers = [];
	
	this.addContent = function( element )	{
		var container = null;
		for( var j = 0; j < containers.length; j++ )	{
			if( containers[j].element() == element.parentNode ) container = containers[j];
		}
		if( !container )	{
			container = new Container( element.parentNode );
			containers.push( container );
		}
		container.addContent( element );
	};
	
	return this;
	
}
function $Slide( elementClass, rotate )	{
	var slide = new Slide( rotate );
	function matchClass( c, m )	{
		var r = new RegExp( "" + m + "" );
		return r.test( c );
	}
	var elements = document.getElementsByTagName( '*' );
	var slideElements = [];
	for( var i = 0; i < elements.length; i++ )	{ 
		if( matchClass( elements[i].className, elementClass ) )	{
			slide.addContent( elements[i] );
		}
	}
}
