// t : A table with one row and any number of cell
// s : 'E', 'W', 'N' or 'S' (east, west, north and south)
// cX: Cell width in pixel
// cY: Cell height in pixel
// n : Number of cell displayed. When -1, this is the number of data cells.
// p : Pause in millisecond
// r : true to randomly choose a first cell
function CukeSlider( t, s, cX, cY, n, p, r )
{
	var f = this.Frame = document.createElement('iframe');
	var self = this;
	f.frameBorder = '0';
	f.scrolling = 'no';
	var _h = s=='E' || s=='W';
	var _b = s=='E' || s=='S';
	var _revert = false;
	var nbData = t.rows[0].cells.length;
	if(!n)n=1;
	else if(n<0)n=nbData;
	this.Pause = p;
	
	f.width=_h?cX*n:cX;
	f.height=_h?cY:cY*n;
	t.parentNode.insertBefore( f, t );
	var bs=document.getElementsByTagName('base');
	if(bs.length)bs='<base href="'+bs[0].href+'"/>';else bs='';
	var d = f.contentWindow.document;
	d.open();
	d.write('<html><head>'+bs+'</head><body><\/body><\/html>');
	d.close();
	d.body.style.margin = d.body.style.padding = '0px';
	var tS = d.createElement('table');
	tS.width=_h?cX*(n+1):cX;
	tS.height=_h?cY:cY*(n+1);
	tS.style.position='relative';
	tS.onclick=function(){_revert=!_revert;}
	var _iC=!r?Math.floor(Math.random()*nbData):0;
	function AddC(r,o)
	{ 
		var c=r.insertCell(_h&&_b&&o==1?0:-1);
		c.vAlign='middle';c.align='center';
		c.width=cX;c.height=cY;
		while(_iC<0)_iC+=nbData;
		_iC=_iC%nbData;
		c.innerHTML = t.rows[0].cells[_iC].innerHTML;
		if(_b)_iC-=o; else _iC+=o;
		return c;
	}
	d.body.appendChild(tS);
	for(var i=0;i<=(_h?0:n);++i) 
	{
		var r = tS.insertRow(-1);
		for(var j=0;j<=(_h?n:0);++j)AddC(r,_b?-1:1);
	}
	if(_b)_iC=nbData-1;
	function NextOffset(l,o)
	{
		if(o!='')o=parseInt(o);
		var g=_b?o+l:-o;
		g+=(l-g)*0.08+1;
		if(g>l)g=l;
		return _b?g-l:-g; 
	}
	var _scroller = 0;
	function Scroll()
	{
		if(_revert)
		{
			_revert=false;
			if(_b=!_b)_iC-=(n+2); else _iC+=(n+2);
		}
		if(_b)NextCell();
		_scroller = setInterval(_scroll,10);
	}
	function _scroll()
	{
		if( _h ? (tS.style.left=NextOffset(cX,tS.style.left))==(_b?0:-cX) : (tS.style.top=NextOffset(cY,tS.style.top))==(_b?0:-cY) )
		{
			clearInterval(_scroller);
			_scroller = 0;
			if(!_b)NextCell();
			setTimeout(Scroll,self.Pause);
		}
	}
	function NextCell(f)
	{
		if(_h)
		{
			var r = tS.rows[0];
			r.deleteCell(_b?-1:0);
			tS.style.left=_b?-cX:0;
			AddC(r,1);
		}
		else 
		{ 
			tS.deleteRow(_b?-1:0);
			tS.style.top=_b?-cY:0;
			AddC(tS.insertRow(_b?0:-1),1);
		}
	}
	setTimeout(Scroll,self.Pause);
}
