window.onload = init;
var cuerpoHome;
var cuerpoResult;
var cuerpoSubirReceta;
var cuerpoVerCategoria;
//var cuerpoRegistro;
//Variables para Comunicacion

//var peticion_http = null;
var parametrosXml;
var generarBtn;

//Variables para seleccion
var flechaIDing = new Array();
var tablaIng;
var tablaIngSel;

//Variables para generacion
var tipoBusqueda;
var filtroTipo;
var filtroOrigen;
var filtroCoccion;
var filtroSal_dul;
var filtroTemp;

//Variables para la recepcion de las recetas;
var recetaPedida = null;
var recetaRecibida;
var recetaRecibidaTemp;

var verComentario;
var verComentar;
var enviarComentario;

var votar;

// Variable para almacenar la busqueda anterior;
var busquedaAnterior = new Array();

var masUno;
var masDos;

var paginaActual = 0;
var ultimaPagina = 0;

var orden;

var usuario = "";
var go = "";
//var cartel;
//var cartelAlerta;
function init(){
    
    //cartel = document.getElementById("cartel");
    //cartel.style.display = "none";
    //cartelAlerta = document.getElementById("cartelAlerta");
    //cartelAlerta.style.display = "none";
    
    cuerpoHome = document.getElementById("cuerpoHome");
    cuerpoResult = document.getElementById("cuerpoResult");
    cuerpoSubirReceta = document.getElementById("cuerpoSubirReceta");
    cuerpoVerCategoria = document.getElementById("cuerpoVerCategoria");
    //cuerpoRegistro = document.getElementById("cuerpoRegistro");
    
    //Init de Seleccion
    tablaIng = document.getElementById("tablaIng");
    tablaIngSel = document.getElementById("tablaIngSel");
    
    //alert(tablaIng.childNodes.length);
    for (i = 0; i<tablaIng.childNodes.length; i++) {
       tablaIng.removeChild(tablaIng.firstChild);
    }
    //alert(tablaIngSel.childNodes.length);
    for (i = 0; i<tablaIngSel.childNodes.length; i++) {
       tablaIngSel.removeChild(tablaIngSel.firstChild);
    }
    
    var i = 0;
    var fila = null;
    for (i = 0; i < ingredienteAlf.length; i++){
        flechaIDing[i] = document.getElementById("flechaIDing"+i);
        flechaIDing[i].parentNode.parentNode.onclick = seleccion;
        fila = flechaIDing[i].parentNode.parentNode;
        
        tablaIng.appendChild(fila);
    }
    
    //init recepcion de las recetas;
    recetaRecibida = document.getElementById("recetaRecibida");
    recetaRecibidaTemp = document.getElementById("recetaRecibidaTemp");
    verComentario = document.getElementById("verComentario");
    var cerrarComentario = document.getElementById("cerrarComentario");
    verComentario.onclick = obtenerComentario;
    cerrarComentario.onclick = ocultarComentario;
    
    verComentar = document.getElementById("verComentar");
    var cerrarComentar = document.getElementById("cerrarComentar");
    verComentar.onclick = mostrarComentar;
    cerrarComentar.onclick = ocultarComentar;
    
    enviarComentario = document.getElementById("enviarComentario");
    enviarComentario.onclick = guardarComentario;
    
    votar = document.getElementById("votar").getElementsByTagName("input");
    for (i = 0; i < votar.length; i++){
        votar[i].onclick = enviarVoto;
        votar[i].onmouseover = iluminarVoto;
        votar[i].onmouseout = apagarVoto;
    }
    
    masUno = document.getElementById("masUno");
    masDos = document.getElementById("masDos");
    masUno.onclick = agregarUno;
    masDos.onclick = agregarDos;
    
    //init Presentacion para imprimir
    document.getElementById("imprimir").onclick = initImprimir;

    initAutocompletar();
    initAvancePaginas();
    initOrden();
    initVerSubirReceta();
    
    //initRegistro();
    
    initHome();
    
    initAlerta();
    initAyuda();    //Tiene que ir ultimo
    
    if (go=="subir") subirReceta();
    if (go=="cat") verCategoria();
    //alert("fin");
}


//function inicio(){
//    document.getElementById("inicio").style.height="0px";
//    document.getElementById("principal").style.height="";
//}
function initImprimir(){
    window.open("imprimible.html");
}
function obtenerReceta(){
    var filaActual = this.parentNode.parentNode;
    ocultarReceta();    //Oculto el contenido de la receta
    ocultarComentario();
    ocultarComentar();
    if (recetaPedida!=filaActual.id){   //Si la receta no es la misma, la pido
        recetaPedida = filaActual.id;
        
        var IDreceta = parseInt(recetaPedida.substring(8));
        if (!receta[IDreceta]){
            parametrosXml = creaXml("receta", filaActual.id.substring(8));
            envia(parametrosXml);
        }
        else mostrarReceta();
    }
    else recetaPedida=null;   //Si es la misma receta, solo borro la variable, para que la proxima verificacion sea corecta
}
function obtenerComentario(){
    parametrosXml = creaXml("verComentario", verComentario.name);
    envia(parametrosXml);
}
function guardarComentario(){
    if (!document.getElementById("envioAutor").value){
        alerta("El campo autor no puede estar vacío!");
        return;
    }
    else if (!document.getElementById("envioComentario").value){
        alerta("El campo comentario no puede estar vacío!");
        return;
    }
    else {
        parametrosXml = creaXml("guardarComentario", verComentar.name, "", document.getElementById("envioComentario").value, document.getElementById("envioAutor").value)
        envia(parametrosXml);
    }
}

function enviarVoto(){
    parametrosXml = creaXml("votar", votar[0].parentNode.parentNode.getAttribute("name"), this.name);
    envia(parametrosXml);
}

function generarReceta(){
    var orden = "nombre";
    var filtro = new Array();
    var ingredientes = new Array();
    var busqueda = "ex";
    var extra = "0";
    var catIng = "ingredientes";
    
    filtro.tipo = 0;
    filtro.origen = 0;
    filtro.sal_dul = 0;
    filtro.coccion = 0;
    filtro.temp = 0;
    var i = 0;
    
    if(window.ActiveXObject){   //Explorer
        for (i = 0; i < (tablaIngSel.childNodes.length); i++){
            ingredientes[i] = tablaIngSel.childNodes[i].getElementsByTagName("input")[0].getAttribute("name");
        }
    }
    else {  //Mozilla
        for (i = 1; i < (tablaIngSel.childNodes.length); i++){
            //ingredientes[i-1] = tablaIngSel.childNodes[i].childNodes[3].childNodes[0].getAttribute("name");
            ingredientes[i-1] = tablaIngSel.childNodes[i].getElementsByTagName("input")[0].getAttribute("name");
        }
    }
    for (i = 0; i < filtroTipo.length; i++){
        if (filtroTipo[i].checked == true) filtro.tipo = filtroTipo[i].getAttribute("size");
    }
    if (tipoBusqueda[0].checked == true) busqueda = "ex";
    else if (tipoBusqueda[1].checked == true){
        if(ingredientes.length > 15){
            alerta("La máxima cantidad de ingredientes permitida para el tipo de búsqueda seleccionado es de 15 ingredientes!");
            return;
        }
        busqueda = "am";
    }
    else {
        alerta("Especifique el tipo de búsqueda!");
        return;
    }
    
    if(ingredientes.length > 0){
        busquedaAnterior.busqueda = busqueda;
        busquedaAnterior.extra = extra;
        busquedaAnterior.orden = orden;
        busquedaAnterior.filtro = filtro;
        busquedaAnterior.ingredientes = ingredientes;
        busquedaAnterior.catIng = catIng;
        
        consulta();
        document.getElementById("tituloResultados").className = "label-result2";
        
        cuerpoHome.style.height="0px";  //Oculto el nodo cuerpoHome
        cuerpoResult.style.height = ""; //Agrando el tamaño del nodo cuerpoResult que estaba en 0
        
    }
    else alerta("Debe seleccionar al menos un ingrediente!");
}



function initHome(){//todo: llamar a esta funcion cada vez que vuelvo al home
    //Init de Generar
    generarBtn = document.getElementById("generar");
    generarBtn.onclick = generarReceta;
    
    filtroTipo = document.getElementsByName("RadioGroup1");
    tipoBusqueda = document.getElementsByName("RadioGroup2");
    filtroTipo[6].checked = true;
    tipoBusqueda[0].checked = false;
    tipoBusqueda[1].checked = false;
    paginaActual = 0;
    cuerpoHome.style.height="";  //Muestro el nodo cuerpoHome
    cuerpoResult.style.height = "0px"; //Oculto el nodo cuerpoResult
    cuerpoVerCategoria.style.height = "0px"; //Oculto el nodo cuerpoVerCategoria
    cuerpoSubirReceta.style.height = "0px"; //Oculto el nodo cuerpoSubirReceta
    //cuerpoRegistro.style.height = "0px"; //Oculto el nodo cuerpoRegistro
}


function procesaRespuesta() {
    var i;
    if(peticion_http.readyState == READY_STATE_COMPLETE) {
        if(peticion_http.status == 200) {
            //alert(peticion_http.responseText);
            //var listaRecetas = document.getElementById("listaRecetas");
            
            var comando = procesaXml(peticion_http.responseXML);
            
            if (comando == "nombres"){
                
                var listaRecetasTemp = document.createElement("div");// Creo un elemento div en donde luego agrego el listado de recetas
                
                for (i=0; i < nombres.length; i++){
                    listaRecetasTemp.appendChild(generaLinea(nombres[i]));
                }
                
                //listaRecetas.firstChild.insertBefore(listaRecetasTemp, listaRecetas.firstChild.lastChild);
                //listaRecetas.firstChild.removeChild(listaRecetas.firstChild.firstChild);
                
                //generaPaginas();
                
                mostrarResultados(listaRecetasTemp);
                
            }
            else if (comando == "receta"){
                mostrarReceta();
            }
            else if (comando == "comentario"){
                //alert(peticion_http.responseText);
                mostrarComentario();
            }
            else if (comando == "OK"){
                alerta("La operación se ha realizado con éxito!")
            }
            else if (comando == "noRecetas"){
                var listaRecetasTemp = document.createElement("div");// Creo un elemento div que en este caso quedará vacio
                mostrarResultados(listaRecetasTemp);
                alerta("No hay recetas que mostrar!")
            }
            else {
                alerta(peticion_http.responseText);
                
            }
        }
    }
}

function generaLinea(nombre){
    var filaReceta = document.getElementById("filaReceta");
    var filaNueva = filaReceta.cloneNode(true);
    filaNueva.setAttribute("id", "IDreceta"+nombre.IDreceta);
    
    var td = filaNueva.getElementsByTagName("td");
    //td[0].id    //Boton + -
    td[1].firstChild.nodeValue = nombre.nombre;   //Nombre
    td[2].firstChild.nodeValue = nombre.autor + " | Visitas: " + nombre.visitas;    //Autor
    
    var voto = filaNueva.getElementsByTagName("img");
    var i = 0;
    for (i = 0; i < (5-nombre.puntos); i++){
        voto[4-i].src = "images/estrella0.png"
    }
    filaNueva.getElementsByTagName("table")[0].onclick = obtenerReceta;
    
    return filaNueva;
}

function mostrarReceta(){
    var fila = document.getElementById(recetaPedida);
    var ingReceta = document.getElementById("ingReceta");
    var prepReceta = document.getElementById("prepReceta");

    var IDreceta = parseInt(recetaPedida.substring(8));

    // Agrego los ingredientes de la receta
    if(ingReceta.firstChild) ingReceta.removeChild(ingReceta.firstChild);// Elimino los ingredientes que quedaron anteriores
    var ingRecetaTemp = document.createElement("div");// Creo un elemento div en donde luego agrego todos los ingredientes
    ingRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    var texto = receta[IDreceta].ingre.split('\n');
    for (i=0; i<texto.length; i++){
        var ing = document.createTextNode(texto[i]);
        ingRecetaTemp.appendChild(ing);
        ingRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    }
    ingRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    ingReceta.appendChild(ingRecetaTemp);   //agrego el div al espacio correspondiente a la tabla

    if(prepReceta.firstChild) prepReceta.removeChild(prepReceta.firstChild);// Elimino la preparacion que quedo anterior
    var prepRecetaTemp = document.createElement("div");// Creo un elemento div en donde luego agrego la preparación
    prepRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    texto = receta[IDreceta].descripcion.split('\n');
    for (i=0; i<texto.length; i++){
        var ing = document.createTextNode(texto[i]);
        prepRecetaTemp.appendChild(ing);
        prepRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    }
    prepRecetaTemp.appendChild(document.createElement("br"));    //agrego un salto de linea
    prepReceta.appendChild(prepRecetaTemp);   //agrego el div al espacio correspondiente a la tabla
    

    verComentario.setAttribute("name", IDreceta);   //guardo el ID en el parametro name
    verComentario.firstChild.nodeValue = receta[IDreceta].cantComent + " comentarios";   //Indico la cantidad de comentarios
    
    verComentar.setAttribute("name", IDreceta);   //guardo el ID en el parametro name. Lo uso despues para guardar el comentario
    votar[0].parentNode.parentNode.setAttribute("name", IDreceta);   //guardo el ID en el parametro name. Lo uso despues para votar la receta
    
    //Coloco la receta debajo del nombre correspondiente
    var paraReceta = fila.getElementsByTagName("div")[0];
    fila.className = "label_receta";    //le cambio el Class a la receta seleccionada
    paraReceta.parentNode.insertBefore(recetaRecibida, paraReceta);

    //fila.getElementsByTagName("input")[0].focus();
    fila.getElementsByTagName("input")[0].src="images/menos.png";
    
}

function ocultarReceta(){
    var fila = document.getElementById(recetaPedida);
    if (fila){
        fila.className = "";
        fila.getElementsByTagName("input")[0].src="images/mas.png";
    }
    if (recetaRecibida) recetaRecibidaTemp.appendChild(recetaRecibida);
}


function mostrarComentario(){
    var paraComentario = document.getElementById("paraComentario");
    var divComentario = document.getElementById("divComentario");
    if (paraComentario.previousSibling) paraComentario.parentNode.removeChild(paraComentario.previousSibling);
    
    var divComentarioTemp = document.createElement("div");// Creo un elemento div en donde luego agrego todos los comentarios
    
    var i = 0;
    for (i=0; i<comentario.length; i++){
        divComentario.getElementsByTagName("strong")[0].firstChild.nodeValue = comentario[i].autor;
        divComentario.getElementsByTagName("td")[1].firstChild.nodeValue = comentario[i].comentario;
        divComentario.getElementsByTagName("span")[0].firstChild.nodeValue = comentario[i].fecha;
        var nuevoComentario = duplicar(divComentario, "comentario" + i);
        divComentarioTemp.appendChild(nuevoComentario);
    }
    paraComentario.parentNode.insertBefore(divComentarioTemp, paraComentario);
    
    var comentarios =  document.getElementById("comentarios");//Muestro los comentarios
    var comentar = document.getElementById("comentar");
    comentarios.parentNode.insertBefore(comentarios, comentar);
    comentarios.style.height = "";
}

function ocultarComentario(){
    var comentarios =  document.getElementById("comentarios");
    comentarios.style.height = "0px";
    
}

function duplicar(elemento, id){
    var elementoNuevo = elemento.cloneNode(true);
    elementoNuevo.setAttribute("id", id);
    return elementoNuevo;
}

function mostrarComentar(){
    var comentarios =  document.getElementById("comentarios");//Muestro los comentarios
    var comentar = document.getElementById("comentar");
    comentarios.parentNode.insertBefore(comentar, comentarios);
    comentar.style.height = "";
}

function ocultarComentar(){
    var comentar = document.getElementById("comentar");
    comentar.style.height = "0px";
    document.getElementById("envioAutor").value = usuario;
    document.getElementById("envioComentario").value = "";
}


function iluminarVoto(){
    var i = 0;
    for (i = 0; i < this.name; i++){
        votar[i].src="images/estrella1.png"
    }
}
function apagarVoto(){
    var i = 0;
    for (i = 0; i < this.name; i++){
        votar[i].src="images/estrella0.png"
    }
}

function agregarUno(){
    busquedaAnterior.extra = "1";
    consulta();
}

function agregarDos(){
    busquedaAnterior.extra = "2";
    consulta();
}

function generaPaginas(){
    ultimaPagina = parseInt(cantRecetas/10);
    piePagina = document.getElementById("piePagina");
    piePagina.firstChild.nodeValue = "Página " + (paginaActual+1) + " de " + (ultimaPagina+1);
    //cantRecetas
}

function consulta(){
    if(busquedaAnterior.busqueda == "am") document.getElementById("opcionMas").height="0";
    else document.getElementById("opcionMas").height="62";
    parametrosXml = creaXml(busquedaAnterior.catIng, busquedaAnterior.busqueda, busquedaAnterior.extra, busquedaAnterior.orden, busquedaAnterior.filtro, busquedaAnterior.ingredientes, paginaActual);
    //alert(parametrosXml);
    envia(parametrosXml);
}

function initAvancePaginas(){
    document.getElementById("primera1").onclick = primera;
    document.getElementById("primera2").onclick = primera;
    document.getElementById("ultima1").onclick = ultima;
    document.getElementById("ultima2").onclick = ultima;
    document.getElementById("previa1").onclick = previa;
    document.getElementById("previa2").onclick = previa;
    document.getElementById("siguiente1").onclick = siguiente;
    document.getElementById("siguiente2").onclick = siguiente;
}

function initOrden(){
    orden = document.getElementById("orden").getElementsByTagName("a");
    var i = 0;
    for (i = 0; i < orden.length; i++){
        orden[i].onclick = ordenar;
    }
    orden[0].style.textDecoration = "underline";
    orden[0].style.color = "#FEAE36";
}

function ordenar(){
    for (i = 0; i < orden.length; i++){
        orden[i].style.textDecoration = "none";
        orden[i].style.color = "#FFFFFF";
    }
    this.style.textDecoration = "underline";
    this.style.color = "#FEAE36";
    busquedaAnterior.orden = this.name;
    paginaActual=0;
    consulta();
    //alert(this.name);
}


function primera(){
    if (paginaActual!=0){
        paginaActual = 0;
        consulta();
    }
}
function ultima(){
    if (paginaActual!=ultimaPagina){
        paginaActual = ultimaPagina;
        consulta();
    }
}
function previa(){
    if (paginaActual!=0){
        paginaActual--;
        consulta();
    }
}
function siguiente(){
    if (paginaActual!=ultimaPagina){
        paginaActual++;
        consulta();
    }
}

function initVerSubirReceta(){
    document.getElementById("subirReceta").onclick = subirReceta;
    document.getElementById("subirRecetaMap").onclick = subirReceta;
    document.getElementById("verCategoria").onclick = verCategoria;
    document.getElementById("verCategoriaMap").onclick = verCategoria;
    document.getElementById("irHome").onclick = initHome;
    document.getElementById("irHomeMap").onclick = initHome;
    
    document.getElementById("subirEnviar").onclick = subirEnviar;
    
    
}
function subirReceta(){
    cuerpoHome.style.height="0px";  //Oculto el nodo cuerpoHome
    cuerpoResult.style.height = "0px"; //Oculto el nodo cuerpoResult
    cuerpoVerCategoria.style.height = "0px"; //muestro el nodo cuerpoVerCategoria
    cuerpoSubirReceta.style.height = ""; //muestro el nodo cuerpoSubirReceta
}
function verCategoria(){
    cuerpoHome.style.height="0px";  //Oculto el nodo cuerpoHome
    cuerpoResult.style.height = "0px"; //Oculto el nodo cuerpoResult
    cuerpoSubirReceta.style.height = "0px"; //muestro el nodo cuerpoSubirReceta
    cuerpoVerCategoria.style.height = ""; //muestro el nodo cuerpoVerCategoria
    initBuscarCategoria();
}

function subirEnviar(){
    var nombre = document.getElementById("subirNombre").value;
    var autor = document.getElementById("subirAutor").value;
    var ingredientes = document.getElementById("subirIngredientes").value;
    var extra = document.getElementById("subirExtra").value;
    var descripcion = document.getElementById("subirDescripcion").value;
    
    if (nombre == "") {
        alerta("El campo Título no puede estar vacío!");
        return;
    }
    else if (ingredientes == "") {
        alerta("El campo Ingredientes no puede estar vacío!");
        return;
    }
    else if (descripcion == "") {
        alerta("El campo Preparación no puede estar vacío!");
        return;
    }
    parametrosXml = creaXml("guardarReceta", "", "", nombre, autor, ingredientes, extra, descripcion);
    envia(parametrosXml);
    
}

function initBuscarCategoria(){
    document.getElementById("buscarCategoria").onclick = buscarCategoria;
    filtroTipo = document.getElementsByName("RadioGroupTipo");
    filtroOrigen = document.getElementsByName("RadioGroupOrigen");
    filtroCoccion = document.getElementsByName("RadioGroupCoccion");
    filtroSal_dul = document.getElementsByName("RadioGroupSal_dul");
    filtroTemp = document.getElementsByName("RadioGroupTemp");
    filtroTipo[filtroTipo.length-1].checked = true;
    filtroOrigen[filtroOrigen.length-1].checked = true;
    filtroCoccion[filtroCoccion.length-1].checked = true;
    filtroSal_dul[filtroSal_dul.length-1].checked = true;
    filtroTemp[filtroTemp.length-1].checked = true;
    buscarNombre = document.getElementById("buscarNombre");
    buscarNombre.value = "";
    buscarNombre.onkeypress = verTecla;
}
function buscarCategoria(){
    paginaActual = 0;
    var orden = "nombre";
    var filtro = new Array();
    var ingredientes = "";
    var busqueda = "am";
    var extra = "0";
    var catIng = "categoria";
    
    filtro.tipo = 0;
    filtro.origen = 0;
    filtro.sal_dul = 0;
    filtro.coccion = 0;
    filtro.temp = 0;
    filtro.nombre = document.getElementById("buscarNombre").value;
    
    for (i = 0; i < filtroTipo.length; i++){
        if (filtroTipo[i].checked == true) filtro.tipo = filtroTipo[i].getAttribute("size");
    }
    for (i = 0; i < filtroOrigen.length; i++){
        if (filtroOrigen[i].checked == true) filtro.origen = filtroOrigen[i].getAttribute("size");
    }
    for (i = 0; i < filtroCoccion.length; i++){
        if (filtroCoccion[i].checked == true) filtro.coccion = filtroCoccion[i].getAttribute("size");
    }
    for (i = 0; i < filtroSal_dul.length; i++){
        if (filtroSal_dul[i].checked == true) filtro.sal_dul = filtroSal_dul[i].getAttribute("size");
    }
    for (i = 0; i < filtroTemp.length; i++){
        if (filtroTemp[i].checked == true) filtro.temp = filtroTemp[i].getAttribute("size");
    }
    
    
    busquedaAnterior.busqueda = busqueda;
    busquedaAnterior.extra = extra;
    busquedaAnterior.orden = orden;
    busquedaAnterior.filtro = filtro;
    busquedaAnterior.ingredientes = ingredientes;
    busquedaAnterior.catIng = catIng;
    
    consulta();
    document.getElementById("tituloResultados").className = "label-result1";
    cuerpoVerCategoria.style.height="0px";  //Oculto el nodo cuerpoHome
    cuerpoResult.style.height = ""; //Agrando el tamaño del nodo cuerpoResult que estaba en 0
}

function mostrarResultados(nuevoDiv){
    var listaRecetas = document.getElementById("listaRecetas");
    listaRecetas.firstChild.insertBefore(nuevoDiv, listaRecetas.firstChild.lastChild);
    listaRecetas.firstChild.removeChild(listaRecetas.firstChild.firstChild);
    generaPaginas();
}
function verTecla(e){
    var evento = e || window.event;
    var codigo = evento.charCode || evento.keyCode;
    var caracter = String.fromCharCode(codigo); //caracter es el ultimo ingresado, y puede ser leido en cualquier navegador
    
    if (codigo==13){
        buscarCategoria();
    }
    
}