function getElementsByClassName(classname, node) 
{
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
    if(re.test(els[i].className))a.push(els[i]);
    return a;
}

function getElementsLikeClassName(classname, node) 
{
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
		if(els[i].className.indexOf(classname) != -1) a.push(els[i]);
    return a;
}

function $(id)
{
	var e = document.getElementById(id);
	return (e != null ? e : document.createElement());
}

var PedidoGaleria =
{
	handleSuccess:function(o)
	{
		crearGaleria(o.responseXML);
	},

	handleFailure:function(o)
	{
	},

	startRequest:function()
	{
		YAHOO.util.Connect.asyncRequest('GET', 'GalleryHome.xml', callback, null);
	}
}

var callback =
{
	success: PedidoGaleria.handleSuccess,
	failure: PedidoGaleria.handleFailure,
	scope: PedidoGaleria
}

var globales = 
{
	galeriaActual: 0,
	idInterval: 0,
	cantidadGalerias: 0,
	pausa: false,
	pausaOver: false,
	mostrar: new Array()
}

function GetIndexByIdContenido(IdContenido)
{
    var index = 0;
    if (imagenesGaleria)
    {
        for (var i=0;i<imagenesGaleria.length;i++)
        {
            if (imagenesGaleria[i].IdContenido == IdContenido)
            {
                index = i;
                break;
            }
        }
    }
    return index;
}

var imagenesGaleria = null;

function crearGaleria()
{
    if (imagenesGaleria)
    {
        globales.cantidadGalerias = imagenesGaleria.length;
	
	    if (globales.cantidadGalerias > 0)
	    {
		    crearDivGaleria(imagenesGaleria);
		    poneGaleria();
    		
		    if (globales.cantidadGalerias > 1)
		    {
			    avanceAutomatico();
		    }
	    }
    }
}

//crea el esqueleto para que luego se vayan cambiando las imagenes y los textos
function crearDivGaleria(galerias)
{
	divPrincipal 	= $('ImagenesGaleria');
	for (var i=0;i<galerias.length;i++)
    {
        var hasImage = false;
        if (galerias[i].IdArchivoImagen)
        {
            hasImage = true;
        }
    
        ImagenGaleria	= document.createElement(hasImage ? 'img' : 'div');
        
        if (galerias[i].Imagen && galerias[i].Imagen.Height)
        {
            ImagenGaleria.style.height = galerias[i].Imagen.Height.Value + 'px';
        }
        
        var IdArchivo = hasImage ? galerias[i].IdArchivoImagen.Value : '';
        
	    ImagenGaleria.setAttribute('id', 'ImagenGaleria' + IdArchivo);
	    
	    if (hasImage)
	    {
	        iccd.Log('dbgallery.js', 'crearDivGaleria', IdArchivo);
	        ImagenGaleria.src = 'getfile.aspx?id=' + IdArchivo;
	    }
	    
	    ImagenGaleria.style.display = 'none';
		ImagenGaleria.className = 'ImagenGaleria';
		
	    divPrincipal.appendChild(ImagenGaleria);
    }
}

function poneGaleria()
{
	imagen = imagenesGaleria[globales.galeriaActual];
	escribeDatosGaleria(imagen);
}

function escribeDatosGaleria(contenido)
{
    var imagen = '';
    if (contenido.IdArchivoImagen != null)
        imagen = contenido.IdArchivoImagen.Value;
    var idcontenido = contenido.IdContenido;
    var imagenestot = getElementsByClassName('ImagenGaleria');
    for (var i=0;i<imagenestot.length;i++)
    {
        imagenestot[i].style.display = 'none';
    }
    
    var ObjImagen = $('ImagenGaleria' + imagen);
    
	ObjImagen.style.display = 'block';
	
	var obj = $('BoxHomeContentList_' + idcontenido);
	SelectContent(obj);
	
	/*var FechasSelected = getElementsByClassName('FlechaSelected', $('BoxHomeContentList'));
	for (var a=0;a<FechasSelected.length;a++)
	{
	    FechasSelected[a].style.display = 'none';
	}
	var FechaSelected = $('FlechaSelected_' + idcontenido);
	if (!(FechaSelected.style.top && FechaSelected.style.left))
	{
	    var positions = findPos(obj);    
	    FechaSelected.style.top = positions[1] + 'px';
	    FechaSelected.style.left = (positions[0] - 20) + 'px';
	}
	FechaSelected.style.display = 'block';*/
	
	var textosgaleria = getElementsByClassName('Text', $('GalleryContent'));
	for (var a=0;a<textosgaleria.length;a++)
	{
	    textosgaleria[a].style.display = 'none';
	}
	$('TextGallery_' + idcontenido).style.display = 'block';
	Ellipsis('TitleTextGallery_' + idcontenido, 31, '', false, 73, '','');
	Ellipsis('SubjectTextGallery_' + idcontenido, 30, '', false, 406, '','');
}

function SelectContent(element)
{
	var otroselementos = getElementsLikeClassName('Item', $('BoxHomeContentList'));
	var index = -1;
	for(var i=0;i<otroselementos.length;i++)
	{
		UnselectContent(otroselementos[i]);
		if (element.id == otroselementos[i].id)
		{
		    index = i;
		}
	}
	if (element)
	{
		if (element.className.indexOf('ItemTop') != -1)
		{
			element.className = 'ItemTopSelected';
		}
		else if (element.className.indexOf('ItemBottom') != -1)
		{
			element.className = 'ItemBottomSelected';
		}
		else
		{
			element.className = 'ItemSelected';
		}
		if (index != -1 && index != 0)
		{
		    otroselementos[index-1].className += ' SinBorde';
		}
		
	}
}

function UnselectContent(element)
{
	if (element)
	{
		if (element.className.indexOf('ItemTop') != -1)
		{
			element.className = 'ItemTop';
		}
		else if (element.className.indexOf('ItemBottom') != -1)
		{
			element.className = 'ItemBottom';
		}
		else
		{
			element.className = 'Item';
		}
	}
}

//hace el funcionamiento de avance automatico
function avanceAutomatico()
{
	globales.idInterval = setInterval('avanzaGaleria()', 6500);
	globales.pausa = false;
}

//hace que no avance mas automaticamente
function frenarAvanceAutomatico()
{
	clearInterval(globales.idInterval);
	globales.pausa = true;
}

function PlayPauseGaleria(btn)
{
    if (globales.pausa)
    {
        avanceAutomatico();
        btn.src = 'images/layout/boxhome/gallery_pause.png';
    }
    else
    {
        frenarAvanceAutomatico();
        btn.src = 'images/layout/boxhome/gallery_play.png';
    }
}

//avanza uno en la galeria
function avanzaGaleria()
{
	clearInterval(globales.idInterval);
	
	galeriaActual = globales.galeriaActual;
	
	if (galeriaActual == globales.cantidadGalerias - 1)
	{
		proximaGaleria = 0;
	}
	else
	{
		proximaGaleria = galeriaActual + 1;
	}

	globales.galeriaActual = proximaGaleria;
	
	poneGaleria();
	
	if (globales.pausa == false)
	{
		avanceAutomatico();
	}
}

function retrocedeGaleria()
{
	clearInterval(globales.idInterval);
	
	galeriaActual = globales.galeriaActual;
	
	if (galeriaActual == 0)
	{
		proximaGaleria = globales.cantidadGalerias - 1;
	}
	else
	{
		proximaGaleria = galeriaActual - 1;
	}

	globales.galeriaActual = proximaGaleria;
	
	poneGaleria();
	
	if (globales.pausa == false)
	{
		avanceAutomatico();
	}
}

function cambiarImagen(imagen, id)
{
	img = $(id);
	img.src = imagen;
}

//agrega un css a la pagina
function loadCss(path)
{
	link 		= document.createElement('link');
	link.href 	= path;
	link.rel 	= "stylesheet";
	link.type 	= "text/css";
	
	document.body.appendChild(link);
}

//devuelve un numero random que no este repetido en arrayActual
function randNoRepetido(min, max, arrayActual)
{
	min = min * 1;
	max = max * 1;
	
	rand = darRandom(min, max);
	
	if (!enArray(rand, arrayActual))
	{
		return rand;
	}
	else
	{
		return randNoRepetido(min, max, arrayActual);
	}
}

//devuelve un numero randome entre min y max
function darRandom(min, max)
{
	numPosibilidades = max - min;
	rand = Math.random() * numPosibilidades;
    rand = Math.round(rand);
    return parseInt(min) + rand;
}

//se fija si valor existe en array
function enArray(valor, array)
{
	for (i = 0; i < array.length; i++)
	{
		if (valor === array[i])
		{
			return true;
		}
	}
	
	return false;
}

//segun explorer u otro navegador devuelve el texto del xml
function getText(texto)
{
	if (window.ActiveXObject)
	{
		return texto.text;
	}
	else
	{
		return texto.textContent;
	}
}

function eraseText(deDonde)
{
	if (window.ActiveXObject)
	{
		deDonde.text = '';
	}
	else
	{
		deDonde.textContent = '';
	}
}

//empiezo todo - ESTA COMENTADO PORQUE TENGO UN Construct() GNERAL DE MI SITIO!!!!!
/* window.onload = function ()
{
	PedidoGaleria.startRequest();
} */

function array_shuffle( array )
{
	for (var i = array.length - 1; i > 0; i--)
	{
	   var k = Math.floor( i * Math.random() );
	   var t = array[i];
	   array[i] = array[k], array[k] = t;
	}
	return array;
}

function jsdbg(arreglo)
{
	var text = "debbuger \n{\n"
	for(i in arreglo)
	{
		text += "\t["+i+"] => "+arreglo[i]+"\n";
	}
	text += "\r}";
	alert(text);
}


function DisplayContentGalleryOver(IdContenido)
{   
    clearInterval(globales.idInterval);

	globales.galeriaActual = GetIndexByIdContenido(IdContenido);
	
	poneGaleria();
	
	globales.pausaOver = globales.pausa;
	globales.pausa = true;
}

function DisplayContentGalleryOut(IdContenido)
{
    clearInterval(globales.idInterval);
    poneGaleria();
    if (!globales.pausaOver)
    {
        avanceAutomatico();    
    }
}
