// este módulo de js sirve para el proceso de asignacion entre tablas de elementos del mismo tipo
var _val_IE=(document.all);
var _val_NS=((document.geElementById)&&(!document.all))
// En los procesos de asignacion entre tablas se usa como decremento del indice por la cabecera. Lo separo
// para que quede constancia del hecho
var m_decrementa = 1;

// Para el proceso de intercambio entre tablas vamos a usar estas 4 variables fundamentales: las dos tablas y
// los dos indices de seleccion. Mantenrlas a nivel de código nos evita tener que andar continuamente enviando 
// los valores. La inicializacion se hace en la carga. Las tablas son estaticas durante todo el proceso. Los 
// indices cambiaran.
var m_tablaNoSeleccionados = null;
var m_tablaSeleccionados = null;
// la lista de seleccionados es necesaria, ya que es el unico mecanismo de comunicacion con el servidor. Usamos
// el value de un input hidden. 
var m_listaSeleccionados = null;

// pasa todos los elementos seleccionados a no seleccionados
function desasignarTodos() {
    // si no hay nada seleccionados nos vamos
    if (m_tablaSeleccionados.rows.length == 0) return false;
    var i;
    var j = m_tablaNoSeleccionados.rows.length;
    for(i = 1;i<m_tablaSeleccionados.rows.length;i++) {
        if (m_tablaSeleccionados.rows[i].className != "Seleccionada" && 
        m_tablaSeleccionados.rows[i].className != "NoSeleccionada") continue;
        m_tablaNoSeleccionados.insertRow(j);
        copiarRow(m_tablaSeleccionados.rows[i], m_tablaNoSeleccionados.rows[j]);
        j++;
    }
    for(i = m_tablaSeleccionados.rows.length - 1;i>-1;i--) {
        if (m_tablaSeleccionados.rows[i].className != "Seleccionada" && 
        m_tablaSeleccionados.rows[i].className != "NoSeleccionada") continue;
        m_tablaSeleccionados.deleteRow(i);
    }
    // vaciamos la lista de seleccionados
    // m_listaSeleccionados.value = "";
    
    return false;
}

// pasa todos los elementos seleccionados a no seleccionados
function asignarTodos() {
    // si no hay nada seleccionados nos vamos
    if (m_tablaNoSeleccionados.rows.length == 0) return false;
    var i;
    var j = m_tablaSeleccionados.rows.length;
    for(i = 1;i<m_tablaNoSeleccionados.rows.length;i++) {
        if (m_tablaNoSeleccionados.rows[i].className != "Seleccionada" && 
        m_tablaNoSeleccionados.rows[i].className != "NoSeleccionada") continue;
        m_tablaSeleccionados.insertRow(j);
        copiarRow(m_tablaNoSeleccionados.rows[i], m_tablaSeleccionados.rows[j]);
        j++;
    }
    for(i = m_tablaNoSeleccionados.rows.length - 1;i>-1;i--) {
        if (m_tablaNoSeleccionados.rows[i].className != "Seleccionada" && 
        m_tablaNoSeleccionados.rows[i].className != "NoSeleccionada") continue;
        m_tablaNoSeleccionados.deleteRow(i);
    }
    // vaciamos la lista de seleccionados
    // m_listaSeleccionados.value = "";
    
    return false;
}


function quitaAsignado() {
    // comprobamos en primer lugar si alguna fila esta marcada
    var encontre = getMarcada(m_tablaSeleccionados);
    if (encontre > -1) { // hay una fila marcada
        // llamamos al doble click
        dblClickAsignador(m_tablaSeleccionados.rows[encontre]);
    } else {
        alert("No hay ninguna fila marcada para mover");
    }
    return false;
}

function asignaFila() {
    // comprobamos en primer lugar si alguna fila esta marcada
    var encontre = getMarcada(m_tablaNoSeleccionados);
    if (encontre > -1) { // hay una fila marcada
        // llamamos al doble click
        dblClickAsignador(m_tablaNoSeleccionados.rows[encontre]);
    } else {
        alert("No hay ninguna fila marcada para mover");
    }
    return false;
}

function getMarcada(tabla) {
    var encontre = -1;
    var i;
    for (i=0;i<tabla.rows.length;i++) {
        if (tabla.rows[i].className == "Seleccionada") {
            // la desmarcamos
            // tabla.rows[i].className = "NoSeleccionada"
            encontre = i;
            break;
        }
    }
    
    return encontre;
}

function subeAsignado() {
    // comprobamos en primer lugar si alguna fila esta marcada
    var encontre = getMarcada(m_tablaSeleccionados);
    if (encontre > -1) { // hay una fila marcada
        if (encontre > 0) {
            // si es la primera fila... no se puede subir
            if (m_tablaSeleccionados.rows[encontre - 1].className == "NoSeleccionada") {
                // guardamos el valor
                var key = extraerKey(m_tablaSeleccionados.rows[encontre]);
                // intercambiamos las filas
                intercambiaRows(m_tablaSeleccionados.rows[encontre - 1], m_tablaSeleccionados.rows[encontre]);
                // actualizamos la lista
                subeKey(key)
            }
        }
    } else {
        alert("No hay ninguna fila marcada para subir");
    }
    
    return false;
}
function bajaAsignado() {
    // comprobamos en primer lugar si alguna fila esta marcada
    var encontre = getMarcada(m_tablaSeleccionados);
    if (encontre > -1) { // hay una fila marcada
        // si es la ultima fila... no se puede bajar
        if (encontre < (m_tablaSeleccionados.rows.length - 1)) {
            // guardamos el valor
            var key = extraerKey(m_tablaSeleccionados.rows[encontre]);
            // intercambiamos las filas
            intercambiaRows(m_tablaSeleccionados.rows[encontre], m_tablaSeleccionados.rows[encontre + 1]);
            // actualizamos la lista
            bajaKey(key)
        }
    } else {
        alert("No hay ninguna fila marcada para bajar");
    }
    
    return false;
}
function intercambiaRows(rowOrig, rowDest) {
    var k;
    var texto;
    for (k = 0;k < rowOrig.cells.length; k++) {
        texto = rowDest.cells[k].innerHTML;
        rowDest.cells[k].innerHTML = rowOrig.cells[k].innerHTML;
        rowOrig.cells[k].innerHTML = texto;
        // la className
        texto = rowDest.cells[k].className;
        rowDest.cells[k].className = rowOrig.cells[k].className;
        rowOrig.cells[k].className = texto;
    }
    texto = rowDest.className;
    rowDest.className = rowOrig.className;
    rowOrig.className = texto;
    
    var funcion = rowDest.onclick;
    rowDest.onclick = rowOrig.onclick;
    rowOrig.onclick = funcion;
    funcion = rowDest.ondblclick;
    rowDest.ondblclick = rowOrig.ondblclick;
    rowOrig.ondblclick = funcion;
    // el id que es básico
    var id = rowOrig.id;
    rowOrig.id = id + "_NEW";
    rowDest.id = id;
}

function copiarRow(rowOrig, rowDest) {
    var k;
    var texto;
    for (k = 0;k < rowOrig.cells.length; k++) {
        rowDest.insertCell(k);
        rowDest.cells[k].innerHTML = rowOrig.cells[k].innerHTML;
        // la className
        rowDest.cells[k].className = rowOrig.cells[k].className;
    }
    rowDest.className = rowOrig.className;
    if (rowDest.className == "Seleccionada") { 
        rowDest.className = "NoSeleccionada";
    }
    rowDest.onclick = rowOrig.onclick;
    rowDest.ondblclick = rowOrig.ondblclick;
    var id = rowOrig.id;
    rowOrig.id = id + "_NEW";
    rowDest.id = id;
}

function dblClickAsignador(rowSelect)  {
    // ahora vamos a mover la fila a la otra tabla
    var tablaOrig = locateTable(rowSelect);
    var tablaDest;
    if(tablaOrig == m_tablaNoSeleccionados) {
        tablaDest = m_tablaSeleccionados;
    } else {
        tablaDest = m_tablaNoSeleccionados;
    }
    // Desmarcamos si hay alguno marcado
    desmarcarTabla(tablaOrig);
    desmarcarTabla(tablaDest);
    // Creamos una nueva fila al final de la tabla dest
    tablaDest.insertRow(tablaDest.rows.length);
    // ojo... al insertar una nueva fila el length cambia
    var newRow = tablaDest.rows[tablaDest.rows.length - 1];
    // las copiamos
    copiarRow(rowSelect, newRow);
    // ahora borramos la fila seleccionada que ya hemos copiado
    var key = extraerKey(rowSelect);
    tablaOrig.deleteRow(rowSelect.rowIndex);
    // y ahora tenemos que actualizar la lista de asociados 
    if (tablaDest == m_tablaSeleccionados) {
        addKey(key);
    } else {
        quitarKey(key);
    }
}

function oneClickAsignador(rowSelect) {
    desmarcarFila(rowSelect);
    rowSelect.className = "Seleccionada";
}   

function desmarcarTabla(tabla) {
    var i;
    for (i=0;i<tabla.rows.length;i++) {
        if (tabla.rows[i].className == "Seleccionada") { 
            tabla.rows[i].className = "NoSeleccionada";
            break;
        }
    }
}

function desmarcarFila(row) {
    var tabla = locateTable(row);
    desmarcarTabla(tabla);
}

// Buscamos la tabla a la que pertenece una fila
function locateTable(row) {
    // la propiedad rowIndex puede sernos de gran utilidad
    // Suponemos que las tablas ya están cargadas
    // si la longitud es mayor extricta puede estar en esta tabla
    // siempre hay un tbody: row->tbody->table
    // tonterias
    return row.parentNode.parentNode;
}

function cargarTablas(base, idNoAsignados, idAsignados, idListaSeleccionados) {
    // alert("la longitud es " + arguments.length);
    if (arguments.length == 4) {
        m_tablaNoSeleccionados = document.getElementById(base + idNoAsignados);
        //alert("idAsignados " + idAsignados);
        m_tablaSeleccionados = document.getElementById(base + idAsignados);
        //alert("idListaSeleccionados " + idAsignados);
        m_listaSeleccionados = document.getElementById(base + idListaSeleccionados);
        // cargamos ahora la lista
        //alert("han llegado este n de arg: " + arguments.length);
        //alert("tipo es " + m_listaSeleccionados.type);
        m_listaSeleccionados.value = "";
    } else {
        //alert("voy a cargar el " + base + idNoAsignados);
        m_listaSeleccionados = document.getElementById(base + idNoAsignados);
        // alert("He cargado el " + base + idNoAsignados +  " y de tipo " + m_listaSeleccionados.type);
        m_listaSeleccionados.value = "";
    }
    //    var i;
    //    var texto;
    //    var indice1;
    //    var lista;
    //    for (i = 0; i < m_tablaSeleccionados.rows.length; i++) {
    //        if (m_tablaSeleccionados.rows[i].className != "Seleccionada" &&
    //            m_tablaSeleccionados.rows[i].className != "NoSeleccionada") {
    //                continue;
    //        }
    //        // quitamos el span o lo que venga
    //        texto = extraerKey(m_tablaSeleccionados.rows[i]);
    //        m_listaSeleccionados.value += texto + ";";
    //    }
}

function extraerKey(rowSelect) {
    var texto;
    var indice1;
    texto = rowSelect.cells[0].innerHTML;
    indice1 = texto.indexOf("<");
    //alert("Primera " +  texto);
    if (indice1 > -1) {
        indice1 = texto.indexOf(">");
        texto = texto.substring(indice1+1, texto.length);
        //alert("Primera sub " +  texto);
        indice1 = texto.indexOf("<");
        texto = texto.substring(0, indice1);
        //alert("Primera sub " +  texto);
    } 
    return texto;
}

function quitarKey(key) {
    return;
    var texto = m_listaSeleccionados.value;
    var indice = texto.indexOf(key + ";");
    
    texto = texto.substring(0, indice) + texto.substring(indice+key.length+1, texto.length);
    m_listaSeleccionados.value = texto
}

function addKey(key) {
    return;
    m_listaSeleccionados.value += key + ";";
}

function subeKey(key) { 
    return;
    var texto = m_listaSeleccionados.value;
    var i;
    
    var spTexto = texto.substring(0, texto.length-1).split(";");
    for (i=0; i < spTexto.length; i++) {
        if (spTexto[i] == key) {
            var inter = spTexto[i-1];
            spTexto[i-1] = spTexto[i];
            spTexto[i] = inter;
            break;
        }
    }
    // regeneramos la cadena
    texto = "";
    for (i=0; i < spTexto.length; i++) {
        texto += spTexto[i] + ";";
    }
    m_listaSeleccionados.value = texto;
}

function bajaKey(key) { 
    return;
    var texto = m_listaSeleccionados.value;
    var i;
    
    var spTexto = texto.substring(0, texto.length-1).split(";");
    for (i=0; i < spTexto.length; i++) {
        if (spTexto[i] == key) {
            var inter = spTexto[i+1];
            spTexto[i+1] = spTexto[i];
            spTexto[i] = inter;
            break;
        }
    }
    // regeneramos la cadena
    texto = "";
    for (i=0; i < spTexto.length; i++) {
        texto += spTexto[i] + ";";
    }
    m_listaSeleccionados.value = texto;
}

// Este metodo inicia el menu de categorias. Lo unico que hace es hacer null
// el onclick de la fila de la categoria seleccionada si el valor
// en el objeto otroValor es distinto de -1
function iniciarMenuCategoria(idTablaVis, catIndex) {
    var tablaVis = document.getElementById(idTablaVis);
    var indice = parseInt(catIndex);
    if (indice == -1) return;
    // alert("el indice vale " + indice);
    // la cabecera es uno mas
    var rowSelect = tablaVis.rows[indice];
    // empezamos por mirar si habia otra fila seleccionada previamente
    rowSelect.onclick = null;
    rowSelect.onmouseover = null;
    rowSelect.onmouseout = null;
}

// lanza el link oculto, que es un link jsf
function ejecutaLinkJSF(idLink, nrow) {
    //alert("idLink es " + idLink);
    //alert("nrow es " + nrow);
    var linkId;
    if (nrow > -1) {
        linkId = idLink + "[" + nrow + "]"; 
    } else {
        linkId = idLink; 
    }
    //alert("El limk es " + linkId);
    var jsfLink = document.getElementById(linkId);
    //alert("El obj limk es " + jsfLink);
    // hacemos el call del onclick del link
    // jsfLink.onclick.call();
    // alert("lanzo el click");
    setCursor('wait');
    //OJO: en firefox no vale el click()...
    // jsfLink.click();
    jsfLink.onclick.call();
    // retornamos false para el href
    return false;
}
// lanza el link oculto, que es un link jsf
function ejecutaLinkJSFFromColumna(idLink, col) {
    var fila = col.parentNode;
    var ncol = fila.cells.length;
    if (fila.rowIndex > 0) {
        // pillamos el length de la fila anterior, ya que si es la ultima fila puede tener menos 
        // columnas de las que son (no de rellena, lo cual nos viene muy bien)
        var ant = fila.rowIndex - 1;
        var tabla = locateTable(fila);
        ncol = tabla.rows[ant].cells.length;
    } else {
        // en este caso la formula nos va adevolver col.cellIndex, que es lo correcto, asi que
        // da lo mismo el valor que pongamos
        ncol = 0;
    }
    var nrow = (fila.rowIndex * ncol) + col.cellIndex;
    var linkId = idLink + "[" + nrow + "]";
    var jsfLink = document.getElementById(linkId);
    // hacemos el call del onclick del link
    // jsfLink.onclick.call();
    // alert("lanzo el click");
    setCursor('wait');
    //OJO: en firefox no vale el click()...
    // jsfLink.click();
    jsfLink.onclick.call();
    // retornamos false para el href
    return false;
}

// lo dejo por parecerme interesante
// evita la propagacion del evento a los objetos padre en el arbol
function killBubble(eventObject) {
// alert("entro por val_IE");
        if (eventObject && eventObject.stopPropagation) eventObject.stopPropagation();
        if (window.event && window.event.cancelBubble ) window.event.cancelBubble = true;
        if (eventObject && eventObject.preventDefault) eventObject.preventDefault();
        if (window.event) window.event.returnValue = false;
        if(eventObject.preventCapture) eventObject.preventCapture();
        if(eventObject.preventBubble) eventObject.preventBubble();
return;    
    if (_val_IE != null) {
        // alert("entro por val_IE");
        eventObject.cancelBubble = true;
    } else {
        // alert("entro por el otro val_IE");
        if (eventObject && eventObject.stopPropagation) eventObject.stopPropagation();
        if (window.event && window.event.cancelBubble ) window.event.cancelBubble = true;
        if (eventObject && eventObject.preventDefault) eventObject.preventDefault();
        if (window.event) window.event.returnValue = false;
        if(eventObject.preventCapture) eventObject.preventCapture();
        if(eventObject.preventBubble) eventObject.preventBubble();
    }
}

// tenemos que excluir este objeto del click... en otro caso se pisa con la subcategoria
// OJO: esto pasa con la pantalla en la que se despliegan la subcategorias dentro de 
// la tabla de categorias...
//var m_excluye = null;
//function excludeClick(innValor) {
// alert("Excluimos el " + innValor);
//    m_excluye = innValor;
//    setCursor('default');
//}

// generamos la cadena de claves
function guardarListaAsociados(tipo) {
    var i;
    var texto;
    m_listaSeleccionados.value = "";
    for (i=0; i < m_tablaSeleccionados.rows.length; i++) {
        if (m_tablaSeleccionados.rows[i].className == "NoSeleccionada" || 
        m_tablaSeleccionados.rows[i].className == "Seleccionada") {
            if (tipo == "ID") {
                // alert("me llega la " + m_tablaSeleccionados.rows[i].id);
                m_listaSeleccionados.value += m_tablaSeleccionados.rows[i].id.substring(3, m_tablaSeleccionados.rows[i].id.length-1) + ";";
                // alert("la cadena es " + m_listaSeleccionados.value);
            } else {
                if (tipo == "C0") {
                    texto = extraerKey(m_tablaSeleccionados.rows[i]);
                    //alert("me llega " + texto);
                    m_listaSeleccionados.value += texto + ";";
                    //alert("la cadena es " + m_listaSeleccionados.value);
                }
            }
        }
    }
}

function InformarBorradoGuardaLista(mensaje, formId, tipo, tipoAsoc) {   
    guardarListaAsociados(tipoAsoc);
    return InformarBorrado(mensaje, formId, tipo);
}

var m_funlnk_ant = null;
var m_elmlnk_ant = null;
var m_imgPq_ant = null;
//
var m_divDesc_pack = null;

function initLinkComponente(lnkElmId, imgIdPqFl, imgIdPqCl, divDescPackId) {
    // iniciamos el link anterior
    var elm = document.getElementById(lnkElmId);
    //alert("el elm es " + elm);
    m_elmlnk_ant = elm;

    m_elmlnk_ant.className = "componente_disabled";
    m_funlnk_ant = m_elmlnk_ant.onclick;
    m_elmlnk_ant.onclick = null;
    // Ponemos la opacidad en las pequeñas
    // la primera de la fila se ve resaltada
    elm = document.getElementById(imgIdPqFl + '[0]');
    //alert("el elm es " + elm);
    fader(elm, 100);
    m_imgPq_ant = elm;
    for(i=1;;i++) {
        elm = document.getElementById(imgIdPqFl + '[' + i + ']');
        if (elm != null) {
            fader(elm, 30);
        } else {
            break;
        }
    }
    for(i=0;;i++) {
        elm = document.getElementById(imgIdPqCl + '[' + i + ']');
        if (elm != null) {
            fader(elm, 30);
        } else {
            break;
        }
    }
    
    //alert("El div es " + divDescPackId);
    m_divDesc_pack = document.getElementById(divDescPackId);
    // cargo el 0
    elm = document.getElementById(divDescPackId + '[0]');
    //alert("el elm es " + elm);
    m_divDesc_pack.innerHTML = elm.innerHTML;
}

function ejecutaLinkComponente(lnkElm, imgGrVsId, imgGrId, imgIdPqFl, imgIdPqCl, divDescPackId, indice, transicion) {
    // primero cambiamos el estilo del link
    m_elmlnk_ant.className = "componentes";
    m_elmlnk_ant.onclick = m_funlnk_ant;
    
    m_elmlnk_ant = lnkElm;

    m_elmlnk_ant.className = "componente_disabled";
    m_funlnk_ant = m_elmlnk_ant.onclick;
    m_elmlnk_ant.onclick = null;
    // hacemos lo propio con la descripcion
    elm = document.getElementById(divDescPackId + '[' + indice + ']');
    m_divDesc_pack.innerHTML = elm.innerHTML;
    // en segundo lugar cambiamos el estilo de su imagen pequeña
    // en tercer lugar llamamos a crossfade
    // crossfade('fichaart_imgVis[0]', 
    // 'fichaart_img[#{articulo.modeloImagenesGrandes.rowIndex}]', '1');
    crossfade(imgGrVsId, imgGrId + '[' + indice + ']', transicion);
    // cambiamos la opacidad
    fader(m_imgPq_ant, 30);
    var contador = 0;
    var encontre = false;
    for(i=0;encontre == false;i++) {
        elm = document.getElementById(imgIdPqFl + '[' + i + ']');
        if (elm != null) {
            if (contador == indice) {
                fader(elm, 100);
                m_imgPq_ant = elm;
                encontre = true;
                break;
            } 
            contador++;
        } else {
            break;
        }
    }
    for(i=0;encontre == false;i++) {
        elm = document.getElementById(imgIdPqCl + '[' + i + ']');
        if (elm != null) {
            if (contador == indice) {
                fader(elm, 100);
                m_imgPq_ant = elm;
                encontre = true;
                break;
            }    
            contador++;
        } else {
            break;
        }
    }
}

function fader(imgId,opacity) {
    /* helper function to deal specifically with images and the cross-browser differences in opacity handling */
    var obj = imgId;
    if (obj.style) {
        if (obj.style.MozOpacity!=null) { 
            /* Mozilla's pre-CSS3 proprietary rule */
            obj.style.MozOpacity = (opacity/100) - .001;
        } else if (obj.style.opacity!=null) {
            /* CSS3 compatible */
            obj.style.opacity = (opacity/100) - .001;
        } else if (obj.style.filter!=null) {
            /* IE's proprietary filter */
            obj.style.filter = "alpha(opacity="+opacity+")";
        }
    }
}

function setSetsCheck(hiddenId, indice, chkId) {
    var caracter;
    //alert("me llega " + hiddenId + " en hiddenId");
    //alert("me llega " + indice + " en indice");
    elm = document.getElementById(hiddenId);
    //alert("El elm es " + elm);
    //alert("tengo el valor " + elm.value);
    if (elm.value.charAt(indice) == '0') {
        caracter = '1';
    } else {
        caracter = '0';
    }
    if (indice > 0) {
        elm.value = elm.value.substr(0, indice) + caracter + elm.value.substr(indice+1);
    } else {
        elm.value = caracter + elm.value.substr(1, elm.value.length-1);
    }    
    // alert("y ahora tengo el valor " + elm.value);
    // este valor NO solo nos llega desde el todos/ninguno
    if (chkId != null) {
        //alert("El chkId vale " + chkId);
        if (indice == 0) {
            elmChk = document.getElementById(chkId);
            prueba = elm.value;
            //alert("prueba antes: "+ prueba);
            salida = prueba.replace(new RegExp("0", "g"), "1");
            //alert("prueba despues: "+ salida);
        
            var i;
            //alert("el check vale " + elmChk.checked);
            // si es cero los tengo que quitar todos
            if (elm.value.charAt(0) == '0') {
                for (i=0;;i++) {
                    elmChk = document.getElementById(chkId + '[' + i + ']');
                    if (elmChk == null) break;
                    if (elmChk.checked == true) elmChk.checked = false;
                }
                // ahora los ponemos todos a cero
                elm.value = elm.value.replace(new RegExp("1", "g"), "0");
            } else {
            // si es uno los tengo que marcar todos
                for (i=0;;i++) {
                    elmChk = document.getElementById(chkId + '[' + i + ']');
                    if (elmChk == null) break;
                    if (elmChk.checked == false) elmChk.checked = true;
                }
                // ahora los ponemos todos a uno
                elm.value = elm.value.replace(new RegExp("0", "g"), "1");
            }
        } else {
            // comprobamos si hemos puesto a cero y el todos estaba puesto
            if (caracter == '0') {
                if (elm.value.charAt(0) == '1') {
                    elm.value = '0' + elm.value.substr(1, elm.value.length-1);
                    elmChk = document.getElementById(chkId);
                    elmChk.checked = false;
                }
            } else {
                // vemos si todos estan a 1
                var encontre = false;
                for (i=1;i < elm.value.length;i++) {
                    if (elm.value.charAt(i) == '0') {
                        encontre = true;
                        break;
                    }    
                }
                // si no encontre todos son 1
                if (encontre == false) {
                    elm.value = '1' + elm.value.substr(1, elm.value.length-1);
                    elmChk = document.getElementById(chkId);
                    elmChk.checked = true;
                }
            }
        }
    }
}

function checkedSet(elm, inputId, valor) {
    var elmInput = document.getElementById(inputId);
    // alert("recibo en valor "+ valor);
    // alert("el checked es " + elm.checked);
    // alert("El value es " + elmInput.value);
    if (elm.checked == false) {
        // si esta chequeado lo tenemos que quitar de la lista
        elmInput.value = elmInput.value.replace(new RegExp(valor, "g"), "");
    } else {
        elmInput.value = elmInput.value + valor;
    }
    // alert("El value es ahora " + elmInput.value);
}

function setCarroCompraDisabled(elmId) {
    var elm = document.getElementById(elmId);
    if (elm != null) {
        fader(elm, 30);
    }
}


function limpiarChecksMarca(hiddenId, chkId) {
    elm = document.getElementById(hiddenId);
    // reemplazamos los 1 por 0
    elm.value = elm.value.replace(new RegExp("0", "g"), "1");
    // y ahora todo lo que este checked lo ponemos a false
    // primero el de la cabecera
    var elmChk = document.getElementById(chkId);
    if (elmChk.checked == false) elmChk.checked = true;
    // ahora el resto
    for (i=0;;i++) {
        elmChk = document.getElementById(chkId + '[' + i + ']');
        if (elmChk == null) break;
        if (elmChk.checked == false) elmChk.checked = true;
    }
}

function alMenosUnaMarca(hiddenId, msg) {
    elm = document.getElementById(hiddenId);
    // alert("en valor tengo " + elm.value);
    for (i=1;i<elm.value.length;i++) {
        if (elm.value.charAt(i) == '1') return true;
    }    
    alert(msg);
    return false;
}






var m_divDetalle_ant = null;
var m_divTabDetalle_ant = null;
var m_spanTabDetalle_ant = null;
var m_cargaDesc = true;
var m_cargaAccesorio = false;
var m_cargaAlternativa = false;
var m_cargaPack = false;
var m_cargaOpiniones = false;
var m_cargaSet = false;

function initLinkDetalle(divIdGen,divTabIdGen) {
    m_divDetalle_ant = document.getElementById(divIdGen);
    m_divDetalle_ant.className = "descFicha";
    m_divTabDetalle_ant = document.getElementById(divTabIdGen);
    m_divTabDetalle_ant.className = "tabFichaActiva";
    m_spanTabDetalle_ant = document.getElementById(divTabIdGen+'_text');
    m_spanTabDetalle_ant.className = "tabFichaActiva";
    
    m_cargaAccesorio = false;
    m_cargaAlternativa = false;
    m_cargaSet = false;
    m_cargaPack = false;
    m_cargaOpiniones = false;
    m_cargaDesc = true;
}

//Función para ejecutar el buscador cuando pulsa Return.
function onkeypress_txtInputBuscador(evento, linkBuscaId) {
    if (evento.keyCode==13 || evento.which==13) {
        //alert('hago el kill bubble del keypress '); 
        killBubble(evento);       
        //alert('voy a llamar'); 
        var elm = document.getElementById(linkBuscaId);
        //alert("elm es " + elm)
        elm.onclick.call(); 
    }
}
function onsubmit_txtInputBuscador(evento) {
    killBubble(evento);       
}



//divIdGen es el nombre de la capa de la ficha que mostrará el contenido. 
//Tipo es el nombre del tab para saber que tab estamos usando.
//y divTabIdGen es el id de la capa del tab
function ejecutaLinkDetalle(divIdGen, tipo, divTabIdGen) {
    m_divDetalle_ant.className = "invisible";
    m_divDetalle_ant = document.getElementById(divIdGen);
    m_divDetalle_ant.className = "descFicha";
    m_divTabDetalle_ant.className = "tabFichaDesactiva";
    m_spanTabDetalle_ant.className = "tabFichaDesactiva";

    //si es packs no existe ya que no hay texto pues el tab es una imagen
    //especial que siempre está igual.
    if (tipo!='PACKS') {
        m_divTabDetalle_ant = document.getElementById(divTabIdGen);
        m_divTabDetalle_ant.className = "tabFichaActiva";
        m_spanTabDetalle_ant = document.getElementById(divTabIdGen+'_text');
        m_spanTabDetalle_ant.className = "tabFichaActiva";
        
    }

    if (tipo == 'ACCES') {
        if (m_cargaAccesorio == false) {  // primera carga
            m_cargaAccesorio = true;
            // buscamos el link
            for (i=0; i<document.links.length; i++) {
                if (document.links[i].id.indexOf("lnkInitAccesorio") > -1) {
                    document.links[i].onclick.call();
                    break;
                }
            }    
        }
    }
    if (tipo == 'ALTER') {
        if (m_cargaAlternativa == false) {  // primera carga
            m_cargaAlternativa = true;
            // buscamos el link
            for (i=0; i<document.links.length; i++) {
                if (document.links[i].id.indexOf("lnkInitAlternativa") > -1) {
                    document.links[i].onclick.call();
                    break;
                }
            }    
        }
    }
    if (tipo == 'SETS') {
        if (m_cargaSet == false) {  // primera carga
            m_cargaSet = true;
            // buscamos el link
            for (i=0; i<document.links.length; i++) {
                if (document.links[i].id.indexOf("lnkInitSet") > -1) {
                    document.links[i].onclick.call();
                    break;
                }
            }    
        }
    }
    if (tipo == 'PACKS') {
        if (m_cargaPack == false) {  // primera carga
            m_cargaPack = true;
            // buscamos el link
            for (i=0; i<document.links.length; i++) {
                if (document.links[i].id.indexOf("lnkInitPack") > -1) {
                    document.links[i].onclick.call();
                    break;
                }
            }    
        }
    }
    if (tipo == 'OPINIONES') {
        if (m_cargaOpiniones == false) {  // primera carga
            m_cargaOpiniones = true;
            // buscamos el link
            for (i=0; i<document.links.length; i++) {
                if (document.links[i].id.indexOf("lnkInitOpiniones") > -1) {
                    document.links[i].onclick.call();
                    break;
                }
            }    
        }
    }
    
}