/*
 * Written by Stefano Mazzocchi <stefanom at mit.edu>
 * With code borrowed from http://www.splintered.co.uk/experiments/archives/javascript_fade/fade.js
 */

 /*////////////	 PARTE EDITABLE	////////////////////*/
var _delayInSeconds = 12;	/*retardo entre fin de fade-in y comienzo de fade-out*/
var waitdelayInSeconds = 2;	/*retardo entre fin de fade-out y comienzo de fade-in*/
//MCUH150807
var sequential=true;		/*presentación secuencial (no simultánea) de los elementos intermitentes*/
/* /////////////	FIN PARTE EDITABLE	//////////////////////*/

var _opacity;
var _displayedItem;
var _itemToDisplay;
var _idle = true;

var withintermittentelems;
var intermittentelems;
var displayedItems;
var fadeTimeOut=100;
var _size;
var _index=0;

_addEvent(window,"load",intermittent);




function intermittent() 
{
	withintermittentelems=false;
	intermittentelems = getintermittentelems();
		
	if(withintermittentelems)
	{
		_size = intermittentelems.length;
				
		/*beatIntermittent();*/
		window.setTimeout("beatIntermittent()", 1000 * waitdelayInSeconds);
	}
}

function getintermittentelems() 
{
	var intermittentelems = [];
	var spans = document.getElementsByTagName("span");
	for (var i = 0; i < spans.length; i++) 
	{
		if(spans[i].getAttribute('class') == 'sidenoteredextra' || spans[i].getAttribute('className') == 'sidenoteredextra'/*para IE*/)
		{
			withintermittentelems=true;
			intermittentelems.push(spans[i]);
		}		
	}
	return intermittentelems;
}


function beatIntermittent() 
{
	_show1();
	window.setTimeout("beatIntermittent()", 1000 * _delayInSeconds);

}

/*cuando se llega a estado _idle, elección tipo de presentación (fade-in o fade-out)*/
function _show1() 
{
	if (_idle) 
	{
		_idle = false;
		_goOn = _show2;
		if (displayedItems) 
		{
			displayedItems = false;
			_opacity = 100;
			_fadeOut(); // this will call _goOn() when done fading
		} 
		else 
		{
			_goOn();
		}
	}
}

function _show2() 
{
	_goOn = _show3;
	_opacity = 0;
	if(sequential)
	{
		_itemToDisplay = intermittentelems[_index];
		_setOpacity(_itemToDisplay, _opacity);
		_itemToDisplay.style.display = "block";
	}
	else
	{
		//simultaneous
		for(var i=0; i<intermittentelems.length; i++)
		{
			_itemToDisplay = intermittentelems[i];
			_setOpacity(_itemToDisplay, _opacity);
			_itemToDisplay.style.display = "block";
		}
	}
		
	_fadeIn(); // this will call _goOn() when done fading
}

function _show3() 
{
	displayedItems = true; // this is the end of our items showing routine
	if(sequential)
	{
		_displayedItem=_itemToDisplay;
	}
	
	_idle = true;
}
	
	
function _fadeIn() 
{
    _opacity += 10;
	/*no excluir IE
	if (_opacity <= 100 && !document.all) */
	if (_opacity <= 100) 
	{
		if(sequential)
		{
			_setOpacity(_itemToDisplay, _opacity);
		}
		else
		{
			for(var i=0; i<intermittentelems.length; i++)
			{
				_itemToDisplay = intermittentelems[i];
				_setOpacity(_itemToDisplay, _opacity);
			}
		}
					
		window.setTimeout("_fadeIn()", fadeTimeOut);
	} 
	else 
	{
		if (_goOn) _goOn();
	}
}


function _fadeOut() 
{
    _opacity -= 10;
	/*no excluir IE
	if (_opacity >= 0 && !document.all) */
	if (_opacity >= 0) 
	{
		if(sequential)
		{
			_setOpacity(_displayedItem, _opacity);
		}
		else
		{
			for(var i=0; i<intermittentelems.length; i++)
			{
				_displayedItem = intermittentelems[i];
				_setOpacity(_displayedItem, _opacity);
			}
		}
	
		window.setTimeout("_fadeOut()", fadeTimeOut);
	} 
	else 
	{
		if(sequential)
		{
			_displayedItem.style.display = "none";
		}
		else
		{
			for(var i=0; i<intermittentelems.length; i++)
			{
				_displayedItem = intermittentelems[i];
				_displayedItem.style.display = "none";
			}
		}
		
		displayedItems = false;
		
		
		if (_goOn)
		{	
			if(sequential)
			{
				if (_index < _size - 1) 
				{
					_index=_index + 1;
				} 
				else 
				{
					_index=0;
				}
			}
			
			/*_goOn();*/
			window.setTimeout("_goOn()", 1000 * waitdelayInSeconds);
		}
	}
}

function _setOpacity(target, opacity) 
{
	if (target && opacity <= 100) 
	{
	
		if (target.style.opacity != null) 
		{ // CSS3 compatible
			target.style.opacity = (opacity / 100) - 0.001;
		} 
		else if (target.style.MozOpacity != null) 
		{ // Mozilla's pre-CSS3 proprietary rule
			target.style.MozOpacity = (opacity / 100) - 0.001;
			// the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1
		}
		// yes, I know that even IE has a proprietary opacity filter, but unfortunately 
		// it works fine on images, but screws up text rendering completely, so I'm not using it.
		//cogido de http://www.splintered.co.uk/experiments/archives/javascript_fade/fade.js
		else if (target.style.filter!=null) 
		{
			/* IE's proprietary filter */
			/* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */ 
			//target.style.filter = "alpha(opacity="+opacity+")";
			var spanInvisible = target.childNodes[0];
			for(var j=0; j<spanInvisible.childNodes.length; j++)
			{
				var small = spanInvisible.childNodes[j];
				if(small.nodeName == 'small');
				{
					/*PROBLEMA: no se puede asignar estilo a small
					small.style.filter = "alpha(opacity="+opacity+")";
					//the element needs to be block-level with either a width or height specified. 
					//Alternatively, the element will also accept the filter if its display property is set to inline-block without the need for specified dimensions
					small.style.display = "inline-block";
					*/
				}
			}
		}
	}
}

function _addEvent(elm, evType, fn, useCapture)  
{
	if (elm.addEventListener)
	{
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} 
	else if (elm.attachEvent)
	{
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	}
} 
