/*
**   Class Marquee By TCooL @ zoneur.com
** 		Version 1.1 @ 9 novembre 2006
** 		Version 1.0 @ 5 septembre 2006
*/
Type = { OVER : 0, OUT  : 1, UP : 2, MOVE : 3, LEAVE : 4, ENTER : 5, DOWN : 6 };
/*
**	Remplace le marquee non valide sur un site.	**
**		ObjId 	=> Nom de l'id du div dans le document.
**		direction 	=> Choix de la direction, up; left, down, right
**		scrolldelay   => pas de vitesse (numérique) de 1 a infinie
**		behavior      => Effet de mouvement, srcoll, slide, alternate
*/
function Marquee(ObjId, direction, scrolldelay, behavior)
{
	// Default ...	
	this._Init = false;
	this._Parent = null;
	this._Enfant = null;
	this._Data = null;
	this._Direction = null;
	this._Behavior = null;
	this._Amount = null;
	this._Delay = null;
	this._IsAlternate = null; // Nous sert au moment d'un alternate :)
	this._Pause = false;
	
	this._Delay = (scrolldelay > 0 ?  scrolldelay : 3);
	this._Disabled = false;
	
	// Donné	
	this._Parent = ObjId;
	this._Enfant = ('_' + ObjId);

	this._Direction	= 'left';
	if(direction)
	{
		switch(direction.toLowerCase()){
			case 'down':
			case 'left':
			case 'right':
			case 'up':
				this._Direction	= direction.toLowerCase();
			break;
		}
	}
	
	this._Behavior	= 'scroll';
	if(behavior)
	{
		switch(behavior.toLowerCase()){			
			case 'alternate':
				this._IsAlternate  = true;
			case 'scroll':
			case 'slide':
				this._Behavior	= behavior.toLowerCase();
			break;
		}
	}
		
	/*
	** Initialise l'object
	*/	
	this.init = function(obj){
		if(! this._Init)
		{
			//setTimeout('Marquee();', nTimeOut, ObjId, strData, nTimeOut);		
			var pobj = document.getElementById(this._Parent);
			if(pobj){ // On effectue un teste si l'objet est bien créer
				this._Data = pobj.innerHTML;
				var eobj = document.getElementById(this._Enfant);
				if(! eobj){ // On effectue un teste si l'objet enfant n'est pas créer
					pobj.style.position = 'relative';	
					pobj.style.overflow = 'hidden';
					switch(this._Direction)
					{
						case 'left':
						case 'right':							
							pobj.innerHTML = '<div id="' + this._Enfant + '" style="position: relative; border: none; white-space: nowrap; text-align: left; vertical-align: middle; display: inline;">' + this._Data + '</div>';					
						break;
						case 'down':						
						case 'up':
							//pobj.style.overflow = 'visible';
							pobj.innerHTML = '<div id="' + this._Enfant + '" style="position: relative; border: none; text-align: left; vertical-align: top; display: block; top: ' + (this._Direction == 'up' ? pobj.offsetHeight: 0) + 'px; width: ' + pobj.offsetWidth + 'px;">' + this._Data + '</div>';
						break;
					}						
					eobj = document.getElementById(this._Enfant);
					if(this._Direction == 'right')
					{
						eobj.style.left = -eobj.offsetWidth + 'px';
					}
					this._Init = true;
					// Event de la souris
					if(obj)
					{						
						pobj.onmouseout   = eobj.onmouseout
						pobj.onmouseover  = eobj.onmouseover; 
						/* pobj.onmouseup    = eobj.onmouseup;
						pobj.onmousemove  = eobj.onmousemove; 
						pobj.onmouseleave = eobj.onmouseleave;
						pobj.onmouseenter = eobj.onmouseenter; 
						pobj.onmousedown  = eobj.onmousedown; */
						pobj.onmouseout   = function() { Mouse(Type.OUT, obj); };
						pobj.onmouseover  = function() { Mouse(Type.OVER, obj); }; 
						/* pobj.onmouseup    = function() { Mouse(Type.UP, obj); };
						pobj.onmousemove  = function() { Mouse(Type.MOVE, obj); }; 
						pobj.onmouseleave = function() { Mouse(Type.LEAVE, obj); };
						pobj.onmouseenter = function() { Mouse(Type.ENTER, obj); }; 
						pobj.onmousedown  = function() { Mouse(Type.DOWN, obj); }; */
					}
				}
			}			
		}
	};
}

function time_out(obj){
	
	if(obj)
	{
		if(obj._Init)
		{
			if(! obj._Disabled && !obj._Pause)
			{
				var eObj = document.getElementById(obj._Enfant);
				var pObj = document.getElementById(obj._Parent);
				
				if(eObj && pObj)
				{					
					var nDir = false;
					var j = 1;
					var i = 0;
					var k = 0;
					do{ 
						i = eObj.offsetLeft; k = eObj.offsetTop;
						switch(obj._Direction){
							case 'down':
								switch(obj._Behavior){
									case 'scroll':
										if(! (nDir = (k < pObj.offsetHeight ? true : false)))
										{
											k = -eObj.offsetHeight;
										}
										k++;
									break;
									case 'slide':
										if(! (nDir = ((k +eObj.offsetHeight) < pObj.offsetHeight || k < 0 ? true : false)))
										{
												obj._Disabled = true;
										}
										k++;
									break;
									case 'alternate':
										if(obj._IsAlternate)
										{
											if(! (nDir = ((k + eObj.offsetHeight) > pObj.offsetHeight || k > 0 ? true : false)))
											{
												obj._IsAlternate = false;
											}
											k--;
										}
										else
										{
											if(! (nDir = ((k +eObj.offsetHeight) < pObj.offsetHeight || k < 0 ? true : false)))
											{
												obj._IsAlternate = true;
											}
											k++;										
										}
									break;
								}
							break;
							case 'up':								
								switch(obj._Behavior){
									case 'scroll':
										if(! (nDir = ((k + eObj.offsetHeight) > 0 ? true : false)))
										{	
											k = pObj.offsetHeight;
										}
										k--;
									break
									case 'slide':
										if(! (nDir = ((k + eObj.offsetHeight) > pObj.offsetHeight || k > 0 ? true : false)))
										{
											obj._Disabled = true;
										}
										k--;
									break;
									case 'alternate':
										if(obj._IsAlternate)
										{
											if(! (nDir = ((k + eObj.offsetHeight) > pObj.offsetHeight || k > 0 ? true : false)))
											{
												obj._IsAlternate = false;
											}
											k--;
										}
										else
										{
											if(! (nDir = ((k +eObj.offsetHeight) < pObj.offsetHeight || k < 0 ? true : false)))
											{
												obj._IsAlternate = true;
											}
											k++;										
										}
									break;
								} 
							break;
							case 'left':				
								switch(obj._Behavior){
									case 'scroll':
										if(! (nDir = ((i + eObj.offsetWidth) > 0 ? true : false)))
										{	
											i = pObj.offsetWidth;
										}
										i--;
									break;
									case 'slide':
										if(! (nDir = ((eObj.offsetWidth + i) > pObj.offsetWidth || !(i < 0)  ? true : false)))
										{	
											obj._Disabled = true;
										}
										i--;
									break;
									case 'alternate':
										if(obj._IsAlternate)
										{
											if(! (nDir = ((eObj.offsetWidth + i) > pObj.offsetWidth || i > 0  ? true : false)))
											{	
												obj._IsAlternate = false;												
											}					
											i--;
										}
										else
										{
											if(! (nDir = ((i < 0) || (eObj.offsetWidth + i < pObj.offsetWidth) ? true : false)))
											{	
												obj._IsAlternate = true;												
											}
											i++;
										}
									break;
								}						
							break;
							case 'right':													
								switch(obj._Behavior){
									case 'scroll':
										if(!(nDir = ((i < pObj.offsetWidth) ? true : false)))
										{			
											i = -eObj.offsetWidth;
										}
										i++;
									break;
									case 'slide':
										if(! (nDir = ((i < 0) || (eObj.offsetWidth + i < pObj.offsetWidth) ? true : false)))
										{	
											obj._Disabled = true;
										}
										i++;
									break;
									case 'alternate':
										if(!obj._IsAlternate)
										{
											if(! (nDir = ((eObj.offsetWidth + i) > pObj.offsetWidth || i > 0  ? true : false)))
											{	
												obj._IsAlternate = true;												
											}					
											i--;
										}
										else
										{
											if(! (nDir = ((i < 0) || (eObj.offsetWidth + i < pObj.offsetWidth) ? true : false)))
											{	
												obj._IsAlternate = false;												
											}
											i++;
										}
									break;
								}	
							break;
						}		
						if(obj._Direction == 'left' || obj._Direction == 'right')
						{
							eObj.style.left = i + 'px';
						}
						else
						{
							eObj.style.top = k + 'px';
						}
						nDir = !nDir || (++j > obj._Delay);
					} while(!nDir);
					//debug(obj._Parent + ' => ' + eObj.offsetHeight + ', ' + eObj.offsetLeft + ', ' + eObj.offsetWidth + ', ' + nDir + ', ' + j);
				}
			}
		}
		else
		{
			obj.init(obj);
		}
	}
	setTimeout(function(){ time_out(obj);}, 100);	
};	

/*
**	Quand la souris passe desus, entre, sort
**		type	=> _OVER, _OUT, UP, _MOVE, _LEAVE, _ENTER, _DOWN
*/
function Mouse(type, obj){
	switch(type)
	{
		case Type.OVER: obj._Pause = true;
		break;
		case Type.OUT: obj._Pause = false;
		break;
		case Type.UP:
		break;
		case Type.MOVE:
		break;
		case Type.LEAVE:
		break;
		case Type.ENTER:
		break;
		case Type.DOWN:
		break;
		default: return null;
	}
};	