//devuelve true si "elemento" es un elemento del array "array"
//devuelve false si "elemento" no es un elemento del array "array"
function inArray(array, elemento) {
	var existe = false;
	var elementoi;
	for (elementoi in array) {
		 if (elemento == array[elementoi]) existe = true;
	}

	return existe;
}

//funcion que devuelve la misma fecha pasada como parámetro en formato europeo en formato inglés
function getFechaSajona (fechaEuropea) {
	var array_fecha = fechaEuropea.split("/");
	var dia		= array_fecha[0];
	var mes		= array_fecha[1];
	var anyo	= array_fecha[2];
	var fechaSajona = mes+"/"+dia+"/"+anyo;

	return fechaSajona;
}

//función que devuelve los elementos activos de un catálogo (han empezado a emitirse y aún no han caducado) ordenados alfabéticamente por los valores asociativos del array que lo forma (se usa en los catálogos de cine, documentales, ...), además con la posibilidad de ser filtrado por categoria y genero
//catalogo es un parámetro obligatorio que representa el catalogo general de datos, este catalogo debe tener tres propiedades obligatorioas, que son: fechainicio, fechafin y activo; y dos propiedades optativas, que son: categoria, genero, pero se convierten en obligatorias si quisieramos filtrar por categoría y género.
//Además el catálogo debe ser un array con índices asociativos
//getCatalogo devuelve un array que contiene los índices asociativos filtrados del catálogo pasado como parámetro
function getCatalogo (catalogo, categoria, genero) {
	if (catalogo == null) return false;
	if (categoria == null) categoria = "todas";
	if (genero == null) genero = "todos";

	var ocatalogo_ordenado = new Array();
	var catalogo_filtrado = new Array();
	var valorAsoc;
	var fechainicio_elemento, fechafin_elemento, estado_elemento;
	var categoria_elemento, genero_elemento;
	for (var elementoi in catalogo) {
		valorAsoc = elementoi;
		//fechas de inicio y fin del elemento y estado del elemento
		fechainicio_elemento= catalogo[valorAsoc].fechainicio;
		fechafin_elemento	= catalogo[valorAsoc].fechafin;
		estado_elemento		= catalogo[valorAsoc].activo;
		//añadimos el elemento al catálogo filtrado si la fecha actual está entre sus fechas de inicio y fin
		//sumamos 86400000 para avanzar un día y que el elemento caduque a las 23:59 y no a las 00:00
		if ((Date.parse(getFechaSajona(fechainicio_elemento)) <= Date.parse(Date())) && (Date.parse(Date()) <= (Date.parse(getFechaSajona(fechafin_elemento))+86400000)) && (estado_elemento=='Activo')) {
			//si entramos aquí el elemento está en emisión
			if (categoria!='todas')
				categoria_elemento	= catalogo[valorAsoc].categoria;
			if (genero!='todos')
				genero_elemento		= catalogo[valorAsoc].genero;
			if ((categoria=='todas' || categoria==categoria_elemento) && (genero=='todos' || genero==genero_elemento))
				//catalogo_filtrado.push (valorAsoc);
				ocatalogo_ordenado.push(catalogo[valorAsoc].titulo + "%%" + valorAsoc);
		}
	}
	ocatalogo_ordenado.sort(ordenar_catalogo);
	for (var valorAsoc in ocatalogo_ordenado)
	{
		catalogo_filtrado.push (ocatalogo_ordenado[valorAsoc].split('%%')[1]);
	}

	return catalogo_filtrado;
}

function ordenar_catalogo(a,b) 
{
   var aOrd=a.toUpperCase();
   var bOrd=b.toUpperCase();

   aOrd = aOrd.replace(/Á|À/gi,"A");
   aOrd = aOrd.replace(/É|È/gi,"E");
   aOrd = aOrd.replace(/Í|Ì/gi,"I");
   aOrd = aOrd.replace(/Ó|Ò/gi,"O");
   aOrd = aOrd.replace(/Ú|Ù/gi,"U");
   aOrd = aOrd.replace(/\¿|\?|¡|!/gi,"");

   bOrd = bOrd.replace(/Á|À/gi,"A");
   bOrd = bOrd.replace(/É|È/gi,"E");
   bOrd = bOrd.replace(/Í|Ì/gi,"I");
   bOrd = bOrd.replace(/Ó|Ò/gi,"O");
   bOrd = bOrd.replace(/Ú|Ù/gi,"U");
   bOrd = bOrd.replace(/\¿|\?|¡|!/gi,"");

   if (aOrd>bOrd) return 1;
   if (aOrd<bOrd) return -1;
   return 0;
}
