// <![CDATA[
// Namespaces
var Catalogo = {};
var CatalogoAutenticado = {};
var Comparacion = {};
Catalogo.CarroPopup = {};
Catalogo.Publicacion = {};
Catalogo.Historial = {};
Catalogo.Buscador = {};
CatalogoAutenticado.TextoTooltip = {};
// Constantes
Catalogo.MODO_TABLA = 1;
Catalogo.MODO_LISTA = 2;
Catalogo.IGNORAR_CATEGORIA = 1;
Catalogo.IGNORAR_SUBCATEGORIA = 2;
Catalogo.IGNORAR_OFERTA = 4;
Catalogo.IGNORAR_NUEVO = 8;
Catalogo.IGNORAR_COMBO = 16;
Catalogo.IGNORAR_PRECIO = 32;
Catalogo.IGNORAR_MARCA = 64;
Catalogo.MAX_PAGINAS_GRUPO = 5;
Catalogo.HOME_RESULTADO_BUSQUEDA = 1;
Catalogo.HOME_CATEGORIA = 2;
Catalogo.HOME_MARCA = 4;
Catalogo.HOME_PUBLICACION = 8;
// Propiedades
Catalogo.GUID = null;
Catalogo.Autenticado = false;
Catalogo.ClienteActivo = true;
Catalogo.Productos;
Catalogo.ProductosOrdenados = null;
Catalogo.TotalProductos;
Catalogo.TituloEncabezado;
Catalogo.Categorias;
Catalogo.Subcategorias;
Catalogo.Marcas;
Catalogo.PrecioMin;
Catalogo.PrecioMax;
Catalogo.TextoTooltip = {};
Catalogo.TimerActualizar = null;
Catalogo.PrimeraActualizacion = true;
Catalogo.SliderPrecios = null;
Catalogo.TipoHome = Catalogo.HOME_RESULTADO_BUSQUEDA;
// Propiedades del popup de agregar al carro
Catalogo.CarroPopup.Visible = false;
Catalogo.CarroPopup.IdSKU = 0;
// Propiedades de publicaciones
Catalogo.Publicacion.IdPublicacion = 0;
Catalogo.Publicacion.IdNovedad = 0;
Catalogo.Publicacion.Nombre = null;
Catalogo.Publicacion.PaginaActual = '';
Catalogo.Publicacion.UrlImagenes = null;
Catalogo.Publicacion.UrlXml = null;
Catalogo.Publicacion.ParametrosXml = null;
// Propiedades del historial
Catalogo.Historial.EstadoInicial = YAHOO.util.History.getBookmarkedState("estado") || "";
Catalogo.Historial.Estado = "";
Catalogo.Historial.Navigate = false;
Catalogo.Historial.PermitirGuardarEstado = true;
//tiempo de sesion
var timeMaxSession;
var idleTime = 0;

// Filtro inicial del catalogo
Catalogo.Filtro = {
                    'idCategoria'         : 0,
                    'idSubCategoria'      : 0,
                    'idMarca'             : new Array(),
                    'precioMin'           : 0,
                    'precioMax'           : 0,
                    'orden'               : '0',
                    'oferta'              : false,
                    'nuevo'               : false,
                    'combo'               : false,
                    'productosPorPagina'  : 12,
                    'paginaActual'        : 0,
                    'cursorPagina'        : 0,
                    'vista'               : Catalogo.MODO_TABLA,
                    'productosComparados' : new Array(),
                    'breadcrumb'          : null
                  };

//*************************************************************************************************

YAHOO.util.History.register("estado", Catalogo.Historial.EstadoInicial, function (estado) { 
    if(!Catalogo.Historial.Navigate)
    {
        Catalogo.Historial.Estado = estado;
        Catalogo.Historial.RestaurarEstado();
    }
    Catalogo.Historial.Navigate = false;
}); 

//*************************************************************************************************

// Inicializa el catalogo
YAHOO.util.Event.onDOMReady(function()
{
    Catalogo.TipoHome = Catalogo_TipoHome;
    catalogoInit();
    // Crear copia de la miga de pan actual
    Catalogo.Filtro.breadcrumb = eval(YAHOO.lang.JSON.parse(YAHOO.lang.JSON.stringify(Breadcrumb)));
    // Asignar titulo
    $('catalogoTituloEncabezado').innerHTML = Catalogo.TituloEncabezado;
    // Verificar si el usuario se ha autenticado
    if(Catalogo.Autenticado)
    {
        // Ordenar por precio
        $('catalogoOrdenTop')[3] = new Option('Mayor precio', 'H');
        $('catalogoOrdenTop')[4] = new Option('Menor precio', 'L');
        $('catalogoOrdenBottom')[3] = new Option('Mayor precio', 'H');
        $('catalogoOrdenBottom')[4] = new Option('Menor precio', 'L');
    }
    else
    {
        // Ocultar slider de precios
        $('catalogoMenuIzqSlider').style.display='none';
    }
    // Inicializar historial
    YAHOO.util.History.onReady(function () { 
        // Restaurar la pagina en caso de existir un estado inicial
        if(Catalogo.Historial.EstadoInicial != "")
        {
            Catalogo.Historial.Estado = Catalogo.Historial.EstadoInicial;
            Catalogo.Historial.RestaurarEstado();
        }
        else
        {
            Catalogo.Historial.PermitirGuardarEstado = false;
            Catalogo.Actualizar();
        }
    });
    try { 
        YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
    } catch (e) { }
    // Ocultar panel de marcas en el home de marcas
    if(Catalogo.TipoHome == Catalogo.HOME_MARCA)
        $('catalogoMenuIzqMarcas').style.display = 'none';
    // Mostrar pageflip en caso de esta en el home de publicaciones
    if(Catalogo.TipoHome == Catalogo.HOME_PUBLICACION)
        Catalogo.Publicacion.InitPageFlip();
    // Iniciar ping
    setTimeout(Catalogo.Ping, 60000);
    Catalogo.Buscador.Init();
    addOnloadEvent(function(){$('txtBusquedaAvanzada1').focus();});
});

//*************************************************************************************************

// Evento invocado al producirse un cambio en algun selector
Catalogo.SliderPrecios_OnChange = function(args)
{
    var limiteInferior = 0;
    var limiteSuperior = 195 - 15; // anchoSlider - anchoSelector;
    // Funcion para convertir el valor seleccionado del slider a la escala determinadas por Catalogo.PrecioMin y Catalogo.PrecioMax
    var convertir = function(valor) {
        return Catalogo.PrecioMin + ((Catalogo.PrecioMax - Catalogo.PrecioMin) / (limiteSuperior - limiteInferior)) * valor;
    };
    var min = parseInt(convertir(Catalogo.SliderPrecios.minVal));
    var max = parseInt(convertir(Catalogo.SliderPrecios.maxVal));
    min = ((min < 0) ? 0 : min);
    max = ((max < 0) ? 0 : max);
    var intervaloFormateado = Catalogo.ToCurrency(min) + " - " + Catalogo.ToCurrency(max);
    $('sliderPrecios').title  = intervaloFormateado;
    $('sliderPreciosInfo').innerHTML = intervaloFormateado;
    Catalogo.Filtro.precioMin = min;
    Catalogo.Filtro.precioMax = max;
    if(!args.cancelarActualizacion && min != max)
    {
        // Actualizar el catalogo
        if(Catalogo.TimerActualizar != null)
            clearTimeout(Catalogo.TimerActualizar);
        Catalogo.TimerActualizar = setTimeout(Catalogo.Actualizar, 500);
    }
};

//*************************************************************************************************

Catalogo.InitSliderPrecios = function()
{
    if(Catalogo.SliderPrecios != null)
        return;
    YAHOO.namespace('mundial');
    // Tamano del paso
    var paso = 1;
    // Distancia minima entre selectores (px)
    var distanciaMinima = 1;
    // El rango en pixeles es el ancho de la imagen de fondo (195px) menos el ancho del selector derecho (15px)
    var limiteInferior = 0;
    var limiteSuperior = 195 - 15; // anchoSlider - anchoSelector;
    var rangoInicial = [limiteInferior, limiteSuperior];
    // Crear el DualSlider
    Catalogo.SliderPrecios = YAHOO.widget.Slider.getHorizDualSlider($('sliderPrecios'), $('selectorMin'), $('selectorMax'), limiteSuperior, paso, rangoInicial);
    Catalogo.SliderPrecios.minRange = distanciaMinima;
    // Registrar eventos
    Catalogo.SliderPrecios.subscribe('change', Catalogo.SliderPrecios_OnChange);
}

//*************************************************************************************************

Catalogo.Actualizar = function()
{
    var idsku;
    var ofertas = 0;
    var nuevos = 0;
    var combos = 0;
    var marcasSeleccionadas = new Array();
    var productosValidos = new Array();
    // Resetear contadores de categorias, subcategorias y marcas
    for(var id in Catalogo.Categorias)
        Catalogo.Categorias[id].cantidad=0;
    for(var id in Catalogo.Subcategorias)
        Catalogo.Subcategorias[id].cantidad=0;
    for(var id in Catalogo.Marcas)
        Catalogo.Marcas[id].cantidad=0;
    Catalogo.TotalProductos = 0;
    Catalogo.PrecioMin = -1;
    Catalogo.PrecioMax = -1;
    // Si es la primera carga, generar el listado de idskus en su respectivo orden
    if(Catalogo.ProductosOrdenados == null)
    {
        Catalogo.ProductosOrdenados = new Array();
        for(var idsku in Catalogo.Productos)
            Catalogo.ProductosOrdenados.push(idsku);
    }
    // Buscar los productos que cumplen con el filtro, y actualizar contadores
    for(var i = 0; i < Catalogo.ProductosOrdenados.length; i++)
    {
        idsku = Catalogo.ProductosOrdenados[i];
        // Contador de marcas
        if(Catalogo.EsProductoValido(Catalogo.Productos[idsku], Catalogo.IGNORAR_MARCA))
            Catalogo.Marcas[Catalogo.Productos[idsku].idm].cantidad++;
        // Precio min y max
        if(Catalogo.EsProductoValido(Catalogo.Productos[idsku], Catalogo.IGNORAR_PRECIO))
        {
            if(Catalogo.PrecioMin == -1 || Catalogo.Productos[idsku].pum < Catalogo.PrecioMin)
                Catalogo.PrecioMin = Catalogo.Productos[idsku].pum;
            if(Catalogo.PrecioMax == -1 || Catalogo.Productos[idsku].pum > Catalogo.PrecioMax)
                Catalogo.PrecioMax = Catalogo.Productos[idsku].pum;
        }
        // Contador de ofertas, nuevos, combos
        if(Catalogo.EsProductoValido(Catalogo.Productos[idsku], Catalogo.IGNORAR_OFERTA | Catalogo.IGNORAR_NUEVO | Catalogo.IGNORAR_COMBO))
        {
            if(Catalogo.Productos[idsku].o)
                ofertas++;
            if(Catalogo.Productos[idsku].n)
                nuevos++;3
            if(Catalogo.Productos[idsku].c)
                combos++;
        }
        // Otros contadores
        if(Catalogo.EsProductoValido(Catalogo.Productos[idsku]))
        {
            productosValidos.push(idsku);
            for(var j=0; j < Catalogo.Productos[idsku].idc.length; j++)
                Catalogo.Categorias[Catalogo.Productos[idsku].idc[j]].cantidad++;
            for(var j=0; j < Catalogo.Productos[idsku].idsc.length; j++)
                Catalogo.Subcategorias[Catalogo.Productos[idsku].idsc[j
                ]].cantidad++;
            Catalogo.TotalProductos++;
            if(marcasSeleccionadas.indexOf(Catalogo.Productos[idsku].idm) < 0)
                marcasSeleccionadas.push(Catalogo.Productos[idsku].idm);
        }
    }
    Catalogo.PrecioMin *= 0.9;
    Catalogo.PrecioMax *= 1.1;
    Catalogo.ActualizarSlider();
    // Dibujar cantidad de ofertas/nuevos/combos
    $('catalogoOferta').checked = Catalogo.Filtro.oferta;
    $('catalogoNuevo').checked = Catalogo.Filtro.nuevo;
    $('catalogoCombo').checked = Catalogo.Filtro.combo;
    $('catalogoOfertaCantidad').innerHTML = ofertas;
    $('catalogoNuevoCantidad').innerHTML = nuevos;
    $('catalogoComboCantidad').innerHTML = combos;
    // Cantidad de productos
    $('catalogoCantidadProductos').innerHTML = Catalogo.TotalProductos;
    // Dibujar listado de categorias/subcategorias
    Catalogo.ActualizarCategorias();
    // Dibujar listado de marcas
    Catalogo.ActualizarMarcas(marcasSeleccionadas);
    // Dibujar paginador
    Catalogo.ActualizarPaginador();    
    // Dibujar grid de productos
    var productoIni = Catalogo.Filtro.paginaActual * Catalogo.Filtro.productosPorPagina;
    var productoFin = productoIni + Catalogo.Filtro.productosPorPagina;
    Catalogo.ActualizarGrid(productosValidos.slice(productoIni, productoFin));
    // Actualizar miga de pan
    Catalogo.ActualizarBreadcrumb();
    // Si esta en el home de publicaciones, ocultar el pageflip y mostrar el catalogo
    if(!Catalogo.PrimeraActualizacion && Catalogo.TipoHome == Catalogo.HOME_PUBLICACION)
        Catalogo.MostrarPageFlip(false);
    Catalogo.PrimeraActualizacion = false;
    // Si no hay producto, mostrar el panel de sugerencia    
    if (Catalogo.TotalProductos == 0)
    {
        Catalogo.Buscador.MostrarBusquedaAvanzada();
        $('pnlSuger').style.display = 'block';
        $('txtBusquedaAvanzada1').focus();        
    }
    else
        $('pnlSuger').style.display = 'none';    
    
}

//*************************************************************************************************

Catalogo.ActualizarGrid = function(productos)
{
    var ActualizarGrid_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        // Iniciar grid de productos
        var htmlGrid = '<table cellspacing="0" border="0" style="border-collapse:collapse;">';
        // Recuperar la plantilla asociada a la vista (lista o tabla)
        var plantilla = $(Catalogo.Filtro.vista == Catalogo.MODO_LISTA ? 'catalogoPlantillaLista' : 'catalogoPlantillaTabla').innerHTML;
        var urlDetalle;
        var urlMarca;
        var comparacionChecked = '';
        var contador = 0;
        var id = 0;
        //for(var id in respuesta.productos)
        for(var i=0; i < productos.length; i++)
        {
            id = productos[i];
            // Generar url de detalle producto
            if(Catalogo.Publicacion.IdPublicacion > 0)
            {
                // En publicaciones, no se puede redirigir a una url, sino que se debe llamar 
                // verDetalleProducto() declarado en DetalleProducto.ascx
                urlDetalle = "javascript:verDetalleProducto('" + respuesta.productos[id].cod + "');";
                // Guardar codigo mundial asociado al producto
                Catalogo.Productos[id].codigoMundial = respuesta.productos[id].cod;
                //Cambio juan
                //urlDetalle = "javascript:detalleProductopf.DetalleProducto('__CATALOGO_IDSKU__',  { sender:this });";
            }
            else
            {
                // Generar url del detalle
                urlDetalle = MundialPath + "DetalleProducto.aspx?mnd1=" + respuesta.productos[id].encid;
                if(Catalogo.Filtro.idCategoria > 0)
                    urlDetalle += "&mnd2=" + Catalogo.Categorias[Catalogo.Filtro.idCategoria].encid;
                if(Catalogo.Filtro.idSubCategoria > 0)
                    urlDetalle += "&mnd3=" + Catalogo.Subcategorias[Catalogo.Filtro.idSubCategoria].encid;
            }
            //Generar la url de la Marca del producto
            urlMarca = MundialPath + "HomeMarca.aspx?mnd1=" + respuesta.productos[id].encidm;
            // Generar texto del tooltip
            Catalogo.TextoTooltip[id] = respuesta.productos[id].nom + '<br />Marca: ' + respuesta.productos[id].nm + '<br />REF: ' + respuesta.productos[id].ref + '<br />Código Mundial: ' + respuesta.productos[id].cod;
            // Dibujar producto
            if(Catalogo.Filtro.vista == Catalogo.MODO_TABLA)
                htmlGrid += ((contador % 4 == 0) ? '<tr ><td style="width:175px">' : '<td style="width:175px">');
            else
                htmlGrid += '<tr><td style="width:100%">';
            htmlGrid += plantilla.replace(/__CATALOGO_URL_DETALLE_PRODUCTO__/g, urlDetalle)
                                 .replace(/__CATALOGO_NOMBRE_PRODUCTO__/g, respuesta.productos[id].nom)
                                 .replace(/__CATALOGO_DESCRIPCION_PRODUCTO__/g, respuesta.productos[id].desc)
                                 .replace(/__CATALOGO_NOMBRE_MARCA__/g, respuesta.productos[id].nm)
                                 .replace(/__CATALOGO_URL_IMAGEN_PRODUCTO__/g, respuesta.productos[id].img)
                                 .replace(/__CATALOGO_REFERENCIA_PRODUCTO__/g, respuesta.productos[id].ref)
                                 .replace(/__CATALOGO_CODIGO_PRODUCTO__/g, respuesta.productos[id].cod)
                                 .replace(/__CATALOGO_CSS_BANDERA_OFERTA__/g, (respuesta.productos[id].o ? 'banderaVisible' : 'banderaOculta'))
                                 .replace(/__CATALOGO_CSS_BANDERA_NUEVO__/g, (respuesta.productos[id].n ? 'banderaVisible' : 'banderaOculta'))
                                 .replace(/__CATALOGO_CSS_BANDERA_COMBO__/g, (respuesta.productos[id].c ? 'banderaVisible' : 'banderaOculta'))
                                 .replace(/__CATALOGO_DISPLAY_AUTENTICADO__/g, (Catalogo.Autenticado ? 'banderaVisible' : 'banderaOculta'))
                                 .replace(/__CATALOGO_IDSKU__/g, id)
                                 .replace(/__CATALOGO_URL_MARCA__/g,urlMarca);
            if(Catalogo.Filtro.vista == Catalogo.MODO_TABLA)
                htmlGrid += ((contador % 4 == 3) ? '</td></tr>' : '</td>');
            else
                htmlGrid += '</td></tr>';
            contador++;
            if(contador > 3)
                contador = 0;
        }
        // Cerrar el grid
        htmlGrid += '</table>';
        $('catalogoProductos').innerHTML = htmlGrid;        
        // Marcar productos comparados
        for(var i = 0; i < Catalogo.Filtro.productosComparados.length; i++)
            if($('comparacion' + Catalogo.Filtro.productosComparados[i]))
                $('comparacion' + Catalogo.Filtro.productosComparados[i]).checked = 'checked';
        // Corregir altura del menu izquierdo
        if($("menu_izquierdo"))
        {
            $("menu_izquierdo").style.height = ""
            if ($("grid_productos") && $("menu_izquierdo").scrollHeight < $("grid_productos").scrollHeight)
                $("menu_izquierdo").style.height = ($("grid_productos").scrollHeight) + "px";
        }
        // Consultar precios
        if(Catalogo.Autenticado)
            Catalogo.ConsultarPrecios(productos);
        // Actualizar hash de estado
        Catalogo.Historial.GuardarEstado();
        panelLoading.hide();
        //$('catalogoPlantillaLista').innerHTML = '';
        //$('catalogoPlantillaTabla').innerHTML = '';
    }
    if(productos.length > 0)
        Mundial.ScriptServices.CatalogoConsultarDatosProductos(productos, Catalogo.GUID, ActualizarGrid_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
    else
        ActualizarGrid_OnSuccess("{'resultado':true,'productos':{}}");  // Requerido para evitar una peticion innecesaria
}

//*************************************************************************************************

Catalogo.ActualizarCategorias = function()
{
    var htmlCategoria = '';
    if(Catalogo.Filtro.idCategoria == 0)
    {
        for(var id in Catalogo.Categorias)
            if(Catalogo.Categorias[id].cantidad > 0)
                htmlCategoria+='<li><a id="catalogoCategoria_' + id + '" href="javascript:void(0)" onclick="Catalogo.FiltrarPorCategoria(' + id + ',0); return false">' + Catalogo.Categorias[id].nombre + ' (' + Catalogo.Categorias[id].cantidad + ')</a></li>';
    }
    else
    {
        //htmlCategoria = '<li><a href="javascript:void(0)" onclick="Catalogo.RegresarCategoria(); return false;">...Regresar</a></li>';
        for(var id in Catalogo.Subcategorias)
            if(Catalogo.Subcategorias[id].idCategoria == Catalogo.Filtro.idCategoria && (Catalogo.Filtro.idSubCategoria == 0 || Catalogo.Filtro.idSubCategoria == id) && Catalogo.Subcategorias[id].cantidad > 0)
                htmlCategoria += '<li><a id="catalogoCategoria_' + id + '" href="javascript:void(0)" onclick="Catalogo.FiltrarPorCategoria(' + 
                                 Catalogo.Subcategorias[id].idCategoria + ',' + id + '); return false">' + Catalogo.Subcategorias[id].nombre + 
                                 ' (' + Catalogo.Subcategorias[id].cantidad + ')</a></li>';
    }
    $('catalogoCategorias').innerHTML = htmlCategoria;
}

//*************************************************************************************************

Catalogo.ActualizarSlider = function()
{
    // Inicializar el slider
    if(Catalogo.SliderPrecios == null)
    {
        Catalogo.InitSliderPrecios();
        // Refrescar el slider sin actualizar el catalogo. En este caso no se utiliza el evento 'ready' del slider, debido a que 
        // no hay forma de pasarle parametros al evento para cancelar la actualizacion
        Catalogo.SliderPrecios.fireEvent('change', { 'cancelarActualizacion':true});
        return;
    }
    // Eliminar evento del slider mientras se actualiza, para evitar doble actualizacion
    Catalogo.SliderPrecios.unsubscribeAll();
    // Reposiciona los limites y valores seleccionados del slider de precios
    if(Catalogo.SliderPrecios.minVal > 0)
    {
        var minValue = Math.round((180 * (Catalogo.Filtro.precioMin - Catalogo.PrecioMin)) / (Catalogo.PrecioMax - Catalogo.PrecioMin));
        minValue = (minValue < 0) ? 0 : minValue;
        Catalogo.SliderPrecios.setMinValue(minValue);
    }
    if(Catalogo.SliderPrecios.maxVal < 180)
    {
        var maxValue = Math.round((180 * (Catalogo.Filtro.precioMax - Catalogo.PrecioMin)) / (Catalogo.PrecioMax - Catalogo.PrecioMin));
        maxValue = (maxValue > 180) ? 180 : maxValue;
        Catalogo.SliderPrecios.setMaxValue(maxValue);
    }
    Catalogo.SliderPrecios.subscribe('change', Catalogo.SliderPrecios_OnChange);
    Catalogo.SliderPrecios.fireEvent('change', { 'cancelarActualizacion':true});
}

//*************************************************************************************************

Catalogo.ActualizarMarcas = function(marcasSeleccionadas)
{
    var htmlMarca = '';
    var htmlMarcasSeleccionadas = '';
    var regex = new RegExp($('catalogoNombreMarca').value.replace(/^\\s+|\\s+$/g,''), "gi");
    var seleccionado;
    if(!marcasSeleccionadas)
        marcasSeleccionadas = new Array();
    for(var id in Catalogo.Marcas)
    {
        if(Catalogo.Marcas[id].cantidad > 0 && Catalogo.Marcas[id].nombre.match(regex) != null)
        {
            seleccionado = (Catalogo.Filtro.idMarca.indexOf(parseInt(id) || 0) >= 0 ? 'checked="checked"' : '');
            htmlMarca += '<input type="checkbox" value="' + id + '" onclick="Catalogo.FiltrarPorMarca(this)" ' + seleccionado + ' /> ' + Catalogo.Marcas[id].nombre + '<br />';
            if(marcasSeleccionadas.indexOf(parseInt(id) || 0) >= 0 && seleccionado != '')
                htmlMarcasSeleccionadas += '<li>' + Catalogo.Marcas[id].nombre + ' (' + Catalogo.Marcas[id].cantidad + ')</li>';    
        }
    }
    $('catalogoMarcas').innerHTML = htmlMarca;
    $('catalogoMarcasSeleccionadas').innerHTML = ((htmlMarcasSeleccionadas != '') ? htmlMarcasSeleccionadas : '<li>Presentando todas las marcas</li>');
}

//*************************************************************************************************

Catalogo.ActualizarPaginador = function()
{
    var totalPaginas = ((Catalogo.Filtro.productosPorPagina > 0) ? Math.ceil(Catalogo.TotalProductos / Catalogo.Filtro.productosPorPagina) : 1);
    // Si la pagina esta por encima del total de paginas, reubicarla al final
    if(Catalogo.Filtro.paginaActual >= totalPaginas)
    {
        Catalogo.Filtro.paginaActual = totalPaginas - 1;
        Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual - Catalogo.MAX_PAGINAS_GRUPO + 1;
    }
    // Si la pagina actual esta por fuera del area del cursor, reubicar el cursor
    if(Catalogo.Filtro.paginaActual < Catalogo.Filtro.cursorPagina)
        Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual;
    if(Catalogo.Filtro.paginaActual >= Catalogo.Filtro.cursorPagina + Catalogo.MAX_PAGINAS_GRUPO)
        Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual;
    // Corregir cursor en caso de salir de los limites de paginas
    if(Catalogo.Filtro.cursorPagina < 0)
        Catalogo.Filtro.cursorPagina = 0;
    if(Catalogo.Filtro.cursorPagina >= totalPaginas)
        Catalogo.Filtro.cursorPagina = totalPaginas - 1;
    var mostrarRetroceder = (Catalogo.Filtro.cursorPagina > 0);
    var mostrarAvanzar = (Catalogo.Filtro.cursorPagina < totalPaginas - Catalogo.MAX_PAGINAS_GRUPO);
    // Si el resultado es vacio, resetear contadores
    if(totalPaginas == 0)
    {
        Catalogo.Filtro.paginaActual = 0;
        Catalogo.Filtro.cursorPagina = 0;
    }
    // Dibujar paginador
    var htmlPaginador = '';
    // Dibujar boton "Primero" y "..."
    htmlPaginador += '<input type="button" value="Primera" class="paginadorInactivo" onclick="Catalogo.PrimeraPagina();return false;" title="Primera" />';
    if(mostrarRetroceder)
    {
        htmlPaginador += '<input type="button" value="..." class="paginadorInactivo" onclick="Catalogo.PaginaRetrocederGrupo();return false;" title="Conjunto anterior de p&aacute;ginas" />';
    }
    for(var i = Catalogo.Filtro.cursorPagina; i < Catalogo.Filtro.cursorPagina + Catalogo.MAX_PAGINAS_GRUPO; i++)
    {
        if(i < totalPaginas)
        {
            if(i == Catalogo.Filtro.paginaActual)
                htmlPaginador += '<input type="button" value="' + (i + 1) + '" class="paginadorActivo" onclick="Catalogo.IrPagina(' + i + ');return false;" />';
            else
                htmlPaginador += '<input type="button" value="' + (i + 1) + '" class="paginadorInactivo" onclick="Catalogo.IrPagina(' + i + ');return false;" />';
        }
    }
    if(mostrarAvanzar)
    {
        htmlPaginador += '<input type="button" value="..." class="paginadorInactivo" onclick="Catalogo.PaginaAvanzarGrupo();return false;" title="Siguente conjunto de p&aacute;ginas" />';
    }
    htmlPaginador += '<input type="button" value="&Uacute;ltima" class="paginadorInactivo" onclick="Catalogo.UltimaPagina();return false;" title="&Uacute;ltima" />';
    $('catalogoPaginadorTop').innerHTML = htmlPaginador;
    $('catalogoPaginadorBottom').innerHTML = htmlPaginador;
    
}

//*************************************************************************************************

Catalogo.ActualizarBreadcrumb = function()
{
    if(Breadcrumb == null || Catalogo.TipoHome == Catalogo.HOME_RESULTADO_BUSQUEDA)
        return;
    var htmlBreadcrumb = '';
    for(var i = 0; i < Catalogo.Filtro.breadcrumb.length - 1; i++)
         htmlBreadcrumb += '<a id="posicionmiga' + i + '"href="' + Catalogo.Filtro.breadcrumb[i].url + '">' + Catalogo.Filtro.breadcrumb[i].nombre + '</a>&nbsp;>&nbsp;';
    htmlBreadcrumb += Catalogo.Filtro.breadcrumb[Catalogo.Filtro.breadcrumb.length - 1].nombre;
    $('breadcrumbContent').innerHTML = htmlBreadcrumb;       
}

//*************************************************************************************************

Catalogo.ConsultarPrecios = function(idSKU)
{
    var ConsultarPrecios_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        for(var i = 0; i < respuesta.producto.length; i++)
        {
            if(respuesta.producto[i].valido)
            {
                if(Catalogo.Productos[respuesta.producto[i].idSKU].ows == 1 && respuesta.producto[i].descuento)
                    $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + respuesta.producto[i].precio + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + respuesta.producto[i].precioDescuento + '</span>';
                else
                    $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio" style="font-size:20px">' + respuesta.producto[i].precio + '</span>';
                Catalogo.Productos[respuesta.producto[i].idSKU].p = respuesta.producto[i].precio;
                Catalogo.Productos[respuesta.producto[i].idSKU].po = respuesta.producto[i].precioDescuento;
            }
            else
                $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio">No disponible</span>';
        }
    }
    
    // Si el cliente no esta activo, no cargar precios
    if(Catalogo.Autenticado && !Catalogo.ClienteActivo)
    {
        for(var id in Catalogo.Productos)
        {
            Catalogo.Productos[id].p = "No disponible";
            Catalogo.Productos[id].ows = 0;
        }
    }
    // Buscar que productos se han consultado previamente
    var aux = new Array();
    for(var i = 0; i < idSKU.length; i++)
    {
        if(Catalogo.Productos[idSKU[i]].p == null)
            aux.push(idSKU[i]);
        else
        {
            if(Catalogo.Productos[idSKU[i]].ows == 1 && Catalogo.Productos[idSKU[i]].p != Catalogo.Productos[idSKU[i]].po)
                $('precio' + idSKU[i]).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + Catalogo.Productos[idSKU[i]].p + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + Catalogo.Productos[idSKU[i]].po + '</span>';
            else
                $('precio' + idSKU[i]).innerHTML = '<span class="precio" style="font-size:20px">' + Catalogo.Productos[idSKU[i]].p + '</span>';
        }
    }
    idSKU = aux;
    if(idSKU.length <= 0)
        return;
    // Consultar precios
    Mundial.ScriptServices.ConsultarPreciosCatalogo(idSKU, Catalogo.GUID, ConsultarPrecios_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

//*************************************************************************************************

Catalogo.EliminarFiltroMarcas = function()
{
    $('catalogoNombreMarca').value = '';
    Catalogo.Filtro.idMarca = new Array();
    Catalogo.Actualizar();
}

//*************************************************************************************************

// Determina si el producto pasa el filtro de estrechamiento
Catalogo.EsProductoValido = function(producto, camposIgnorados)
{
    var valido = false;
    var categoriaValida = false;
    var subcategoriaValida = false;
    if(camposIgnorados == null)
        camposIgnorados = 0;
    for(var i=0; i < producto.idc.length; i++)
    {
        if(Catalogo.Filtro.idCategoria > 0 && producto.idc[i] == Catalogo.Filtro.idCategoria)
        {
            categoriaValida = true;
            break;
        }
    }
    for(var i=0; i < producto.idsc.length; i++)
    {
        if(Catalogo.Filtro.idSubCategoria > 0 && producto.idsc[i] == Catalogo.Filtro.idSubCategoria)
        {
            subcategoriaValida = true;
            break;
        }
    }
    // Filtrar por categoria/subcategoria, precio, marca
    valido = (((camposIgnorados & Catalogo.IGNORAR_CATEGORIA) != 0 || Catalogo.Filtro.idCategoria == 0 || categoriaValida) && 
              ((camposIgnorados & Catalogo.IGNORAR_SUBCATEGORIA) != 0 || Catalogo.Filtro.idSubCategoria == 0 || subcategoriaValida) &&
              ((camposIgnorados & Catalogo.IGNORAR_PRECIO) != 0 || Catalogo.Filtro.precioMin == 0 || Catalogo.SliderPrecios == null || Catalogo.SliderPrecios.minVal == 0 || Math.floor(Catalogo.Filtro.precioMin) <= producto.pum) &&
              ((camposIgnorados & Catalogo.IGNORAR_PRECIO) != 0 || Catalogo.Filtro.precioMax == 0 || Catalogo.SliderPrecios == null || Catalogo.SliderPrecios.maxVal == 180 || Math.ceil(Catalogo.Filtro.precioMax) >= producto.pum) &&
              ((camposIgnorados & Catalogo.IGNORAR_MARCA) != 0 || Catalogo.Filtro.idMarca.length == 0 || Catalogo.Filtro.idMarca.indexOf(parseInt(producto.idm) || 0) >= 0));
    // El no pasar los primeros filtros es suficiente para invalidar el producto
    if(!valido)
        return valido;
    // Filtrar ofertas
    if((camposIgnorados & Catalogo.IGNORAR_OFERTA) == 0 && Catalogo.Filtro.oferta)
    {
        if(producto.o == 1)
        {
            valido = true;
            return valido;
        }
        else
            valido = false;
    }
    // Filtrar productos nuevos
    if((camposIgnorados & Catalogo.IGNORAR_NUEVO) == 0 && Catalogo.Filtro.nuevo)
    {
        if(producto.n == 1)
        {
            valido = true;
            return valido;
        }
        else
            valido = false;
    }
    // Filtrar combos
    if((camposIgnorados & Catalogo.IGNORAR_COMBO) == 0 && Catalogo.Filtro.combo)
    {
        if(producto.c == 1)
        {
            valido = true;
            return valido;
        }
        else
            valido = false;
    }
    return valido;
}

//*************************************************************************************************

Catalogo.RegresarCategoria = function()
{
    if(Catalogo.Filtro.idSubCategoria != 0)
        Catalogo.Filtro.idSubCategoria = 0;
    else
        Catalogo.Filtro.idCategoria = 0;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.FiltrarPorCategoria = function(idCategoria, idSubCategoria)
{
    if(Catalogo.Filtro.idCategoria != idCategoria)
    {
        if(Catalogo.TipoHome != Catalogo.HOME_RESULTADO_BUSQUEDA)
            Catalogo.Filtro.breadcrumb[Catalogo.Filtro.breadcrumb.length] = {'nombre':Catalogo.Categorias[idCategoria].nombre, 'url':MundialPath + 'HomeCategoria.aspx?mnd1=' + Catalogo.Categorias[idCategoria].encid};
        Catalogo.Filtro.idCategoria = idCategoria;
    }
    if(Catalogo.Filtro.idSubCategoria != idSubCategoria)
    {
        if(Catalogo.TipoHome != Catalogo.HOME_RESULTADO_BUSQUEDA)
            Catalogo.Filtro.breadcrumb[Catalogo.Filtro.breadcrumb.length] = {'nombre':Catalogo.Subcategorias[idSubCategoria].nombre, 'url':MundialPath + 'HomeCategoria.aspx?mnd1=' + Catalogo.Categorias[idCategoria].encid + '&mnd2=' + Catalogo.Subcategorias[idSubCategoria].encid };
        Catalogo.Filtro.idSubCategoria = idSubCategoria;
    }
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.FiltrarPorOferta = function(e)
{
    Catalogo.Filtro.oferta = e.checked;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.FiltrarPorNuevo = function(e)
{
    Catalogo.Filtro.nuevo = e.checked;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.FiltrarPorCombo = function(e)
{
    Catalogo.Filtro.combo = e.checked;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.FiltrarPorMarca = function(e)
{
    var id = parseInt(e.value) || 0;
    var aux = new Array();
    // Si se marco el checkbox, agregar la marca al listado
    if(e.checked && id > 0 && Catalogo.Filtro.idMarca.indexOf(parseInt(id) || 0) < 0)
        Catalogo.Filtro.idMarca.push(id);
    // Si se desmarco el checkbox, eliminar la marca del listado
    else if(!e.checked && id > 0 && Catalogo.Filtro.idMarca.indexOf(parseInt(id) || 0) >= 0)
    {
        // Eliminar el id del array
        for(var i=0; i < Catalogo.Filtro.idMarca.length; i++)
            if(Catalogo.Filtro.idMarca[i] != id)
                aux.push(Catalogo.Filtro.idMarca[i]);
        Catalogo.Filtro.idMarca = aux;
    }
    // Actualizar el catalogo
    if(Catalogo.TimerActualizar != null)
        clearTimeout(Catalogo.TimerActualizar);
    Catalogo.TimerActualizar = setTimeout(Catalogo.Actualizar, 500);
}

//*************************************************************************************************

Catalogo.Ordenar = function(e)
{
    Catalogo.Filtro.orden = e.value;
    var Ordenar_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        Catalogo.ProductosOrdenados = new Array();
        for(var i = 0; i < respuesta.idSKU.length; i++)
            Catalogo.ProductosOrdenados.push(respuesta.idSKU[i]);
        Catalogo.Actualizar();
        $('catalogoOrdenTop')[e.selectedIndex].selected = true;
        $('catalogoOrdenBottom')[e.selectedIndex].selected = true;
    }
    Mundial.ScriptServices.ReordenarProductos(Catalogo.Filtro.orden, Catalogo.GUID, Ordenar_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

//*************************************************************************************************

Catalogo.FiltrarProductosPorPagina = function(e)
{
    Catalogo.Filtro.productosPorPagina = parseInt(e.value);
    if(Catalogo.Filtro.productosPorPagina == 0)
        Catalogo.Filtro.productosPorPagina = Catalogo.TotalProductos;
    $('catalogoPaginasTop')[e.selectedIndex].selected = true;
    $('catalogoPaginasBottom')[e.selectedIndex].selected = true;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.CambiarVista = function(modo)
{
    Catalogo.Filtro.vista = modo;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.MarcarProductoComparacion = function(chk)
{
    var idSKU = chk.value;
    if(!chk.checked)
    {
        var productos = new Array();
        for(var i = 0; i < Catalogo.Filtro.productosComparados.length; i++)
            if(Catalogo.Filtro.productosComparados[i] != idSKU)
                productos.push(Catalogo.Filtro.productosComparados[i]);
        Catalogo.Filtro.productosComparados = productos;
    }
    else
    {
        if(Catalogo.Filtro.productosComparados.indexOf(idSKU) >= 0)
            return false;
        Catalogo.Filtro.productosComparados.push(idSKU);
    }
    return true;
}

//*************************************************************************************************

Catalogo.CompararProductos = function()
{
    if(Catalogo.Filtro.productosComparados.length < 2 || Catalogo.Filtro.productosComparados.length > 4)
    {
        ModalDialog.Show("Error", "El Rango de productos a comparar debe estar entre 2 y 4" , ModalDialog.OK);
        return;
    }
    var CompararProductos_OnSuccess = function(args)
    {
        if(args.length == 0)
        {
            ModalDialog.Show("Error", "Se ha presentado un error al cargar la página de comparación. Vuelva a intentarlo" , ModalDialog.OK);
            return;
        }
        location.href = MundialPath + "Comparacion.aspx?mnd1=" + args;
    }
    Mundial.ScriptServices.Encriptar(Catalogo.Filtro.productosComparados.join(), CompararProductos_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

//*************************************************************************************************

Catalogo.PrimeraPagina = function()
{
    Catalogo.Filtro.paginaActual = 0;
    Catalogo.CursorProducto = 0;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.UltimaPagina = function()
{
    Catalogo.Filtro.paginaActual = ((Catalogo.Filtro.productosPorPagina > 0) ? Math.floor(Catalogo.TotalProductos / Catalogo.Filtro.productosPorPagina) : 0);
    Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual - Catalogo.MAX_PAGINAS_GRUPO + 1;
    Catalogo.Actualizar();
}

//*************************************************************************************************

Catalogo.IrPagina = function(pagina)
{
    var totalPaginas = ((Catalogo.Filtro.productosPorPagina > 0) ? Math.ceil(Catalogo.TotalProductos / Catalogo.Filtro.productosPorPagina) : 1);
    if(pagina >= 0 && pagina < totalPaginas)
    {
        Catalogo.Filtro.paginaActual = pagina;
        Catalogo.Actualizar();
    }
}

//*************************************************************************************************

Catalogo.PaginaAvanzarGrupo = function()
{
    var totalPaginas = ((Catalogo.Filtro.productosPorPagina > 0) ? Math.ceil(Catalogo.TotalProductos / Catalogo.Filtro.productosPorPagina) : 1);
    // Si no se encuentra en la ultima pagina, avanzar
    if(Catalogo.Filtro.paginaActual < totalPaginas - 1)
    {
        Catalogo.Filtro.paginaActual += Catalogo.MAX_PAGINAS_GRUPO;
        //Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual;
        Catalogo.Filtro.cursorPagina += Catalogo.MAX_PAGINAS_GRUPO;
        if(Catalogo.Filtro.paginaActual >= totalPaginas)
            Catalogo.Filtro.paginaActual = totalPaginas - 1;
        Catalogo.Actualizar();
    }
}

//*************************************************************************************************

Catalogo.PaginaRetrocederGrupo = function()
{
    // Si no se encuentra en la primera pagina, retroceder
    if(Catalogo.Filtro.paginaActual > 0)
    {
        Catalogo.Filtro.paginaActual -= Catalogo.MAX_PAGINAS_GRUPO;
        //Catalogo.Filtro.cursorPagina = Catalogo.Filtro.paginaActual - Catalogo.MAX_PAGINAS_GRUPO + 1;
        Catalogo.Filtro.cursorPagina -= Catalogo.MAX_PAGINAS_GRUPO;
        if(Catalogo.Filtro.paginaActual < 0)
            Catalogo.Filtro.paginaActual = 0;
        Catalogo.Actualizar();
    }
}

//*************************************************************************************************

Catalogo.NombreMarca_OnKeyDown = function(ev)
{
    if(ev.which || ev.keyCode)
    {
        if ((ev.which == 13) || (ev.keyCode == 13))
        {
            return false;
        }
    }
    else
    {
        return true
    }; 
}

//*************************************************************************************************

Catalogo.CarroPopup.Mostrar = function(idSKU, opciones) {
    // Si no esta autenticado, redirigir al login
    if (!Catalogo.Autenticado) {
        //var returnUrl = window.location.pathname + window.location.search + (window.location.search.length > 0 ? '&' : '?') + 'idac=' + idSKU;
//        var returnUrl = '~/DetalleProducto.aspx?mnd1='; //+ Mundial.ScriptServices.Encriptar(idSKU) + '&mndc=' + Mundial.ScriptServices.Encriptar(1);
//                
//        var idSKUEncriptado_OnSucces = function(args)
//        {
//            if (args.length == 0)
//            {
//                ModalDialog.Show("Error", "Se ha presentado un error al cargar la página de comparación. Vuelva a intentarlo" , ModalDialog.OK);
//                return;
//            } 
//            returnUrl = returnUrl + args;
//            location.href = MundialPath + 'Login.aspx?ReturnURL=' + escape(returnUrl);
//        } 


        Mundial.ScriptServices.Encriptar(idSKU, function(idenc)
        {
            Mundial.ScriptServices.Encriptar("1", function(cantenc)
            {
                location.href = MundialPath + 'Login.aspx?ReturnURL=' + escape('~/DetalleProducto.aspx?mnd1=' + idenc + '&mndc=' + cantenc);
            }, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);        
            
        }, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);        
        return;
    }
    var posicion;   // array de la forma [0:X,1:Y]
    // Si el popup ya esta visible, omitir
    if (Catalogo.CarroPopup.Visible)
        return;
    // Verificar si el producto esta en el catalogo
    if (Catalogo.Productos != null && Catalogo.Productos[idSKU] == null)
        return;
    // Asociar producto al popup
    Catalogo.CarroPopup.IdSKU = idSKU;
    // Cargar UMV por defecto
    if (opciones != null && opciones.uv != null)
        $('catalogoAgregarCarroCantidad').value = opciones.uv;
    else
        $('catalogoAgregarCarroCantidad').value = Catalogo.Productos[idSKU].uv;
    Catalogo.CarroPopup.ActualizarBotonAgregar();
    // Obtener la posicion donde debe mostrarse el popup
    if (opciones != null && opciones.ev != null)
        posicion = YAHOO.util.Event.getXY(opciones.ev);
    if (opciones != null && opciones.el != null)
        posicion = YAHOO.util.Dom.getXY(opciones.el);
    if (opciones != null && opciones.posicion != null)
        posicion = YAHOO.util.Event.getXY(opciones.ev);
    if (opciones != null && opciones.offset != null)
        posicion[1] -= opciones.offset;
    // Mostrar ventana
    var carroPopup = $('catalogoAgregarCarroPopup');
    carroPopup.style.visibility = 'hidden';
    carroPopup.style.display = 'block';
    YAHOO.util.Dom.setXY(carroPopup, posicion);
    carroPopup.style.display = 'none';
    carroPopup.style.visibility = '';
    Effect.Appear('catalogoAgregarCarroPopup', { duration: 0.3 });
    Catalogo.CarroPopup.Visible = true;
}

//*************************************************************************************************

Catalogo.CarroPopup.Cerrar = function()
{
    Effect.Fade('catalogoAgregarCarroPopup', { duration: 0.4 });
    setTimeout(function(){
        $('catalogoAgregarCarroPopup').style.top='0px';
        $('catalogoAgregarCarroPopup').style.left='0px';
    }, 400);
    Catalogo.CarroPopup.Visible = false;
}

//*************************************************************************************************

Catalogo.CarroPopup.ActualizarBotonAgregar = function()
{
    var btnAgregar = $('catalogoAgregarCarro');
    var txtCantidad = $('catalogoAgregarCarroCantidad');
    if(btnAgregar == null || txtCantidad == null)
        return;
    if($('catalogoAgregarCarroCantidad').value.replace(/^\\s+|\\s+$/g,'').length == 0)
    {
        YAHOO.util.Dom.removeClass(btnAgregar, 'button_enabled');
        YAHOO.util.Dom.addClass(btnAgregar, 'button');
    }
    else
    {
        YAHOO.util.Dom.removeClass(btnAgregar, 'button');
        YAHOO.util.Dom.addClass(btnAgregar, 'button_enabled');
    }
}

//*************************************************************************************************

Catalogo.CarroPopup.Cantidad_KeyPress = function(ev)
{
    if(ev.which || ev.keyCode)
    {
        if ((ev.which == 13) || (ev.keyCode == 13)) {return false;}
    } else {return true};
    var codes = new Array(8,9,48,49,50,51,52,53,54,55,56,57,37,39);
    if(ev.which != undefined)
        aux = !(codes.indexOf(ev.which) < 0);
    else if(ev.keyCode != undefined) 
        aux = !(codes.indexOf(ev.keyCode) < 0);
    if (ev.shiftKey || ev.altKey || ev.ctrlKey) 
        return false;
    return aux;
}

//*************************************************************************************************

Catalogo.CarroPopup.AgregarCarro = function()
{
    var cantidad = $('catalogoAgregarCarroCantidad').value.replace(/^\\s+|\\s+$/g,'');
    if(cantidad.length == 0 || !IsNumeric(cantidad) || !IsInt(cantidad) || parseInt(cantidad) <= 0)
    {
        ModalDialog.Show("Error", "La cantidad no es válida", ModalDialog.OK);
        return;
    }
    var AgregarCarro_OnSuccess = function(args)
    {
        panelLoading.hide();
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            Catalogo.CarroPopup.Cerrar();
            return;
        }
        Catalogo.CarroPopup.Cerrar();
        mostrarSliderCarroCompra(respuesta.datosSlider);
        actualizarContadorCarro(respuesta.totalCarro);
    }
    panelLoading.show();
    $('panelLoading_mask').style.zIndex=1001;
    $('panelLoading_c').style.zIndex=1002;
    Mundial.ScriptServices.AgregarCarro(Catalogo.CarroPopup.IdSKU, cantidad, AgregarCarro_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
    
}

//*************************************************************************************************

Catalogo.AgregarCarro = function(idsku)
{
    var AgregarCarro_OnSuccess = function(args) {
        panelLoading.hide();
        var respuesta = eval('(' + args + ')');
        if (!respuesta.resultado) {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        mostrarSliderCarroCompra(respuesta.datosSlider);
        actualizarContadorCarro(respuesta.totalCarro);
    }
    panelLoading.show();
    $('panelLoading_mask').style.zIndex = 1001;
    $('panelLoading_c').style.zIndex = 1002;
    Mundial.ScriptServices.AgregarCarro(idsku, 1, AgregarCarro_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);

}

//*************************************************************************************************

Catalogo.Publicacion.InitPageFlip = function()
{
    // Mostrar pageflip y tabs
    $('publicacionesNombre').innerHTML = Catalogo.Publicacion.Nombre;
    $('publicacionesTabs').style.display = '';
    Catalogo.MostrarPageFlip(true);
    // Inicializar pageflip
    AC_FL_RunContent( 
        'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 
        'width', '720', 
        'height', '700', 
        'src', 'publicacion', 
        'quality', 'high', 
        'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 
        'align', 'top', 
        'play', 'true', 
        'loop', 'true', 
        'scale', 'showall', 
        'wmode', 'transparent', 
        'devicefont', 'false', 
        'id', 'publicacion', 
        'bgcolor', '#ffffff', 
        'name', 'publicacion', 
        'menu', 'true', 
        'allowFullScreen', 'false', 
        'allowScriptAccess','always', 
        'movie', 'publicacion', 
        'wmode', 'transparent', 
        'salign', '', 
        'FlashVars', 'path=' + Catalogo.Publicacion.UrlImagenes + '&xml_ruta=' + Catalogo.Publicacion.UrlXml + Catalogo.Publicacion.ParametrosXml
    );
    // Corregir altura del menu izquierdo
    if($("menu_izquierdo"))
    {
        $("menu_izquierdo").style.height = ""
        if ($("grid_productos") && $("menu_izquierdo").scrollHeight < $("grid_productos").scrollHeight)
            $("menu_izquierdo").style.height = ($("grid_productos").scrollHeight) + "px";
    }
}

//*************************************************************************************************

Catalogo.MostrarPageFlip = function(visible)
{
    $('pnlFlash').style.visibility = (visible ? "visible" : "hidden");
    $('pnlFlash').style.display = (visible ? "block" : "none");
    $('btnPageFlip').style.visibility = (!visible ? "visible" : "hidden");
    $('btnPageFlip').style.display = (!visible ? "inline" : "none");
    $('grid_productos').style.visibility = (!visible ? "visible" : "hidden");
    $('grid_productos').style.display = (!visible ? "block" : "none");
    $('publicacionesIrHome').style.visibility = (visible ? "visible" : "hidden");
    $('publicacionesIrHome').style.display = (visible ? "inline" : "none");
}

//*************************************************************************************************

Catalogo.Publicacion.ActualizarPaginaActual = function(pagina, vista)
{
    Catalogo.Publicacion.PaginaActual = pagina+'_'+vista;
}

//*************************************************************************************************

Catalogo.Publicacion.CambiarVista = function(pagina, vista)
{
    var CambiarVista_OnSuccess = function(args)
    {
        document['publicacion'].actualizarXML(args);
    }
    Mundial.ScriptServices.ActualizarXMLPageFlip(Catalogo.Publicacion.IdPublicacion, pagina, vista, CambiarVista_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

//*************************************************************************************************

Catalogo.Historial.RestaurarEstado = function()
{
    if(Catalogo.Historial.Estado == "")
        return;
    var filtro = YAHOO.lang.JSON.parse(decodeBase64(urlDecode(Catalogo.Historial.Estado)));
    while(typeof filtro != "object")
        filtro = YAHOO.lang.JSON.parse(filtro);
    var i=0;
    for(var campo in Catalogo.Filtro)
        Catalogo.Filtro[campo] = filtro[i++];
    Catalogo.Historial.PermitirGuardarEstado = false;
    // Restaurar contador del carro
    Mundial.ScriptServices.ActualizarContadorCarro(function(totalCarro) { actualizarContadorCarro(totalCarro) }, function(args) { }, function(args) { });
    // Restaurar checkboxes
    $('catalogoOferta').checked = Catalogo.Filtro.oferta;
    $('catalogoNuevo').checked = Catalogo.Filtro.nuevo;
    $('catalogoCombo').checked = Catalogo.Filtro.combo;
    // Restaurar productos por pagina
    $('catalogoPaginasTop')[$('catalogoPaginasTop').length - 1].selected = true;
    $('catalogoPaginasBottom')[$('catalogoPaginasTop').length - 1].selected = true;
    for(var i = 0; i < $('catalogoPaginasTop').length; i++)
    {
        if($('catalogoPaginasTop')[i] != null && $('catalogoPaginasTop')[i].value == Catalogo.Filtro.productosPorPagina)
        {
            $('catalogoPaginasTop')[i].selected = true;
            $('catalogoPaginasBottom')[i].selected = true;
            break;
        }
    }
    // Restaurar orden
    for(var i = 0; i < $('catalogoPaginasTop').length; i++)
    {
        if($('catalogoOrdenTop')[i] != null && $('catalogoOrdenTop')[i].value == Catalogo.Filtro.orden)
        {
            $('catalogoOrdenTop')[i].selected = true;
            $('catalogoOrdenBottom')[i].selected = true;
            break;
        }
    }
    Catalogo.Ordenar($('catalogoOrdenTop'));
}

//*************************************************************************************************

Catalogo.AgregarLista = function(idsku, el)
{
    if(Catalogo.Filtro.productosComparados.length == 0)
        MisListasPopup.Mostrar([ idsku ], { el:el,offsetLeft:150,offsetTop:250 });
    else
        MisListasPopup.Mostrar(Catalogo.Filtro.productosComparados, { el:el,offsetLeft:100,offsetTop:250 });
}

//*************************************************************************************************

Catalogo.Historial.GuardarEstado = function()
{
    if(!Catalogo.Historial.PermitirGuardarEstado)
    {
        Catalogo.Historial.PermitirGuardarEstado = true;
        return;
    }
    var filtro = new Array();
    var i=0;
    for(var campo in Catalogo.Filtro)
        filtro.push(Catalogo.Filtro[campo]);
    Catalogo.Historial.Estado = encodeBase64(YAHOO.lang.JSON.stringify(filtro));
    Catalogo.Historial.Navigate = true;
    try { YAHOO.util.History.navigate("estado", Catalogo.Historial.Estado); } catch (e) { }
}

//*************************************************************************************************

Catalogo.teclaEnter = function(ev)
{
    return !((ev.which || ev.keyCode) && (ev.which == 13 || ev.keyCode == 13));
}

//*************************************************************************************************

Catalogo.Ping = function()
{
    Mundial.ScriptServices.Ping(function(args) { setTimeout(Catalogo.Ping, 60000); }, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

//*************************************************************************************************

Catalogo.WS_OnError = function(args)
{
}

//*************************************************************************************************

Catalogo.WS_OnTimeout = function(args)
{
    ModalDialog.Show("Error", "Se ha superado el tiempo de espera de la operación. Vuelva a intentarlo. En caso de volverse a presentar este mensaje, recargue la página" , ModalDialog.OK);
}

//*************************************************************************************************

Catalogo.ToCurrency = function(num)
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    num = Math.floor(num/100).toString();
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + '$' + num);
}

//*************************************************************************************************

function IsNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}

//*************************************************************************************************

function IsInt(x)
{
   var y=parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
}

//**************************************************************************************************

Catalogo.MostrarBotonQuickLook = function(ev, obj, sw)
{
    var imgQuicklook = document.getElementById(obj);
    var pos = YAHOO.util.Dom.getRegion(obj)
    var posCursor= YAHOO.util.Event.getXY(ev);
    var addRegion = 2;
   
         if(sw == "0" )
        {        
            imgQuicklook.left = ev.clientX;
            imgQuicklook.top = ev.clientY;
            imgQuicklook.style.display = 'block';
            imgQuicklook.style.visibility = 'visible';
            imgQuicklook.style.zIndex = '10';
        }
        else
        {
         if(!((pos.top + addRegion) < posCursor[1] && (pos.bottom  - addRegion)> posCursor[1] && (pos.left  + addRegion) < posCursor[0] && (pos.right - addRegion) > posCursor[0]))
            {
                imgQuicklook.style.display = 'none';
                imgQuicklook.style.visibility = 'hidden';
            }
        }
}

//***************************************************************************************************

Catalogo.CarroPopup.MostrarQuickLook = function(idSKU, opciones)
{
    // Si no esta autenticado, redirigir al login

    if(!Catalogo.Autenticado)
    {
        /*var returnUrl = window.location.pathname + window.location.search;
        location.href = MundialPath + 'Login.aspx?ReturnURL=' + escape(returnUrl);
        return;*/
        Mundial.ScriptServices.Encriptar(idSKU, function(idenc)
        {
            Mundial.ScriptServices.Encriptar("1", function(cantenc)
            {
                location.href = MundialPath + 'Login.aspx?ReturnURL=' + escape('~/DetalleProducto.aspx?mnd1=' + idenc + '&mndc=' + cantenc);
            }, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);        
            
        }, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
        return; 
    }
    QuickLookPopUp.AgregarCarro();
}

//*************************************************************************************************

//*************************************************************************************************

/* Inicio - Funciones del control de busqueda */

Catalogo.Buscador.MarcasCargadas = false;

//*************************************************************************************************

Catalogo.Buscador.Init = function()
{
    if (document.getElementsByTagName) {
        var inputElements = document.getElementsByTagName("input");
        for (i=0; inputElements[i]; i++) {
            if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
                inputElements[i].setAttribute("autocomplete","off");
            }
        }
    }
    new Tooltip($('txtBusquedaAvanzada1'), {mouseFollow: true, backgroundColor: '#F5F5F5', borderColor: '#D7D4D4', textColor: '#4A4E60', textShadowColor: '#F5F5F5', delay: 500, opacity: 0.9});
    new Tooltip($('btnBusquedaAvanzada1'), {mouseFollow: true, backgroundColor: '#F5F5F5', borderColor: '#D7D4D4', textColor: '#4A4E60', textShadowColor: '#F5F5F5', delay: 500, opacity: 0.9});
    // Registrar listener para buscar al presionar enter sobre el textbox
    var klBusquedaAvanzada = new YAHOO.util.KeyListener('txtBusquedaAvanzada1',  { keys : YAHOO.util.KeyListener.KEY.ENTER }, Catalogo.Buscador.BusquedaAvanzada);
    klBusquedaAvanzada.enable();
    // Inicializar datasource del autocomplete
    var dsBusquedaAutocompletar = new YAHOO.util.XHRDataSource("/MundialB2B/ScriptServices.asmx/BusquedaBasicaAutocompletar");
    dsBusquedaAutocompletar.connMethodPost = true;
    dsBusquedaAutocompletar.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
    dsBusquedaAutocompletar.responseSchema = { resultsList : "productos", fields : ["nombre"] };
    // Inicializar autocomplete avanzada
    var autocompleteAvanzada = new YAHOO.widget.AutoComplete("txtBusquedaAvanzada1", "txtBusquedaAvanzadaContainer1", dsBusquedaAutocompletar, 
    { 
        maxResultsDisplayed:10,
        allowBrowserAutocomplete:false,
        animVert:false,
        animSpeed:0.0,
        autoHighlight:false,
        queryDelay:0.0,
        useShadow:false,
        prehighlightClassName:'yui-ac-prehighlight',
        resultTypeList:false
    });
    autocompleteAvanzada.generateRequest = function(cadena) { return "cadena=" + cadena; };
    $('txtBusquedaAvanzada1').focus();
}

//*************************************************************************************************

Catalogo.Buscador.BusquedaAvanzada = function(type, args)
{
    var cadena = $('txtBusquedaAvanzada1').value.replace(/^\\s+|\\s+$/g,'');
    if((cadena.length == 0 || (cadena.length > 0 &&
        $('rbBusquedaAvanzadaDescripcion1').checked == false && 
        $('rbBusquedaAvanzadaReferencia1').checked == false && 
        $('rbBusquedaAvanzadaCodigo1').checked == false)) && 
        $('chkBusquedaOfertas1').checked == false && 
        $('chkBusquedaProductosNuevos1').checked == false && 
        $('chkBusquedaCombos1').checked == false && 
        $('busquedaMarca1').selectedIndex == 0)
    {
        ModalDialog.Show("Error", "Debe ingresar algún criterio de búsqueda", ModalDialog.OK);
        return;
    }
    if(cadena.length > 0 &&
       $('rbBusquedaAvanzadaDescripcion1').checked == false && 
       $('rbBusquedaAvanzadaReferencia1').checked == false && 
       $('rbBusquedaAvanzadaCodigo1').checked == false)
    {
        ModalDialog.Show("Error", "Debe seleccionar al menos un filtro: Descripción, Referencia, Código", ModalDialog.OK);
        return;
    }

    if(args != null)
    {
        YAHOO.util.Event.preventDefault(args[1]);
        YAHOO.util.Event.stopPropagation(args[1]);
    }
    var BusquedaAvanzada_OnSuccess = function(idMarca)
    {
        var parametros = 0;
        parametros += $('rbBusquedaAvanzadaDescripcion1').checked ? 1 : 0;
        parametros += $('rbBusquedaAvanzadaReferencia1').checked ? 2 : 0;
        parametros += $('rbBusquedaAvanzadaCodigo1').checked ? 4 : 0;
        parametros += $('chkBusquedaOfertas1').checked ? 8 : 0;
        parametros += $('chkBusquedaProductosNuevos1').checked ? 16 : 0;
        parametros += $('chkBusquedaCombos1').checked ? 32 : 0;
        if(idMarca > 0)
            location.href = MundialPath + 'HomeMarca.aspx?mnd1=' + idMarca + '&mndb2=' + parametros;
        else
        {
            if($('busquedaMarca1').selectedIndex > 0)
            {
                idMarca = parseInt($('busquedaMarca1')[$('busquedaMarca1').selectedIndex].value);
                location.href = MundialPath + 'HomeMarca.aspx?mnd1=' + idMarca + '&mndb1=' + encodeBase64(cadena) + '&mndb2=' + parametros;
            }
            else
                location.href = MundialPath + 'resultadosBusqueda.aspx?mnd1=1&mnd2=' + encodeBase64(cadena) + '&mnd3=' + parametros + '&mnd4=' + idMarca;
        }
    }
    Mundial.ScriptServices.BusquedaAvanzadaGetMarcaByNombre(cadena, BusquedaAvanzada_OnSuccess, function() { }, function() { });
}

//*************************************************************************************************

Catalogo.Buscador.MostrarBusquedaAvanzada = function()
{
    Effect.Appear('busqueda_avanzada1', { duration: 0.3 });
    var BusquedaAvanzadaMarcas_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        $('busquedaMarca1').remove(0);
        for(var i=0; i < respuesta.marcas.length; i++)
            $('busquedaMarca1')[i] = new Option(respuesta.marcas[i].nombre, respuesta.marcas[i].id);
        $('busquedaMarca1').disabled = false;
        Catalogo.Buscador.MarcasCargadas = true;
    }
    if(!Catalogo.Buscador.MarcasCargadas)
        Mundial.ScriptServices.BusquedaAvanzadaMarcas(BusquedaAvanzadaMarcas_OnSuccess, function(args) { }, function(args) { });
}

//*************************************************************************************************

Catalogo.Buscador.CerrarBusquedaAvanzada = function()
{
    Effect.Fade('busqueda_avanzada1', { duration: 0.3 });
    setTimeout("(function(){document.getElementById('busqueda_avanzada1').style.top='0px';document.getElementById('busqueda_avanzada1').style.left='0px';})()", 400);
}

//*************************************************************************************************

Catalogo.Buscador.Limpiar = function()
{
    $('txtBusquedaAvanzada1').value = '';
    $('rbBusquedaAvanzadaDescripcion1').checked = false;
    $('rbBusquedaAvanzadaReferencia1').checked = false;
    $('rbBusquedaAvanzadaCodigo1').checked = false;
    $('chkBusquedaOfertas1').checked = false;
    $('chkBusquedaProductosNuevos1').checked = false;
    $('chkBusquedaCombos1').checked = false;
    $('busquedaMarca1')[0].selected = true;
}
/* Fin - Funciones del control de busqueda */
//*************************************************************************************************

/* Inicio - Catalogo autenticado */
CatalogoAutenticado.Init = function()
{
    // Ofertas
    for (var tipo in CatalogoAutenticado.Tabs)
    {     
        if (CatalogoAutenticado.Tabs[tipo].Activo)
        {
            if (CatalogoAutenticado.Tabs[tipo].Productos != null)
            {
                YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'pestana_seleccionada');
                CatalogoAutenticado.HabilitarTabs(tipo);                 
                CatalogoAutenticado.MostrarProductos(tipo);
            }            
        }
        else
        {
            YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'inhabilitada');
            //$('catalogoAutenticado' + tipo).disabled = true;
            YAHOO.util.Dom.removeClass('li' + tipo,'selected');             
        }
    }
    for (var tipo in CatalogoAutenticado.Tabs)
    {     
        if (CatalogoAutenticado.Tabs[tipo].Activo)
        {
            if (CatalogoAutenticado.Tabs[tipo].Productos != null)
            {
                YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'pestana_seleccionada');
                CatalogoAutenticado.HabilitarTabs(tipo);                 
                CatalogoAutenticado.MostrarProductos(tipo);
                break;
            }            
        }
        else
        {
            YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'inhabilitada');
            //$('catalogoAutenticado' + tipo).disabled = true;
            YAHOO.util.Dom.removeClass('li' + tipo,'selected');             
        }
    }
    $('catalogoAutenticadoCargando').hide();
}

//*************************************************************************************************

CatalogoAutenticado.HabilitarTabs = function(tipo)
{
     switch (tipo) 
     {
        case 'Nuevos': 
            {
                YAHOO.util.Dom.addClass('li' + tipo, 'selected'); 
                break;               
            }
        case 'Combos' :
            {
                if (YAHOO.util.Dom.removeClass('liNuevos','selected') == true)
                    YAHOO.util.Dom.addClass('liNuevos', 'selected');
                else
                    YAHOO.util.Dom.addClass('li'+ tipo, 'selected');
                break;
            }
        case 'ComprasAnterios' :
            {
                if (YAHOO.util.Dom.removeClass('liNuevos','selected') == true)
                    YAHOO.util.Dom.addClass('liNuevos', 'selected');
                else if (YAHOO.util.Dom.removeClass('liCombos','selected') == true)
                    YAHOO.util.Dom.addClass('liCombos', 'selected');
                else    
                    YAHOO.util.Dom.addClass('li'+ tipo, 'selected');
                break;
            }    
     }
} 

CatalogoAutenticado.MostrarProductos = function(tipo)
{
    //if($('catalogoAutenticado' + tipo).disabled ||!CatalogoAutenticado.Tabs[tipo].Activo)
        //return;    
    panelLoading.show();
    var MostrarProductos_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        CatalogoAutenticado.Tabs[tipo] = respuesta.Tab;
        if(!CatalogoAutenticado.Tabs[tipo].Activo)
        {
            // Desactivar tab y mostrar mensaje            
            YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'inhabilitada');
            //$('catalogoAutenticado' + tipo).disabled = true;
            panelLoading.hide();
            return;
        }        
        CatalogoAutenticado.MostrarProductos(tipo);
        
    }
    if((CatalogoAutenticado.Tabs[tipo].Productos == null) || (CatalogoAutenticado.reiniciarBusqueda == '1'))
    {
        CatalogoAutenticado.reiniciarBusqueda = '0';
        Mundial.ScriptServices.CatalogoAutenticadoConsultarProductos(tipo, MostrarProductos_OnSuccess, function(args) { }, function(args) { });
        //return;
    }
    CatalogoAutenticado.tipo = tipo;
    // Resetear los tabs
    for(var i in CatalogoAutenticado.Tabs)
        YAHOO.util.Dom.removeClass('catalogoAutenticado' + i, 'pestana_seleccionada');
    YAHOO.util.Dom.addClass('catalogoAutenticado' + tipo, 'pestana_seleccionada');
    for (var j in CatalogoAutenticado.Tabs)
        YAHOO.util.Dom.removeClass('li' + j, 'selected');
    YAHOO.util.Dom.addClass('li' + tipo, 'selected');     
    // Dibujar grid de productos
    var htmlGrid = '<table cellspacing="0" border="0" style="border-collapse:collapse;">';
    // Recuperar la plantilla asociada a la vista (lista o tabla)
    var plantilla = $('catalogoPlantillaTabla').innerHTML;
    var urlDetalle;
    var urlMarca;
    var contador = 0;
    var id = 0;
    for(var id in CatalogoAutenticado.Tabs[tipo].Productos)
    {
        // Generar url de detalle producto
        urlDetalle = MundialPath + "DetalleProducto.aspx?mnd1=" + CatalogoAutenticado.Tabs[tipo].Productos[id].encid;
        //Generar la url de la Marca del producto
        urlMarca = MundialPath + "HomeMarca.aspx?mnd1=" + CatalogoAutenticado.Tabs[tipo].Productos[id].encidm;
        // Generar texto del tooltip        
        CatalogoAutenticado.TextoTooltip[id] = CatalogoAutenticado.Tabs[tipo].Productos[id].nombre + '<br />Marca: ' + CatalogoAutenticado.Tabs[tipo].Productos[id].marca + '<br />REF: ' + CatalogoAutenticado.Tabs[tipo].Productos[id].referencia + '<br />Código Mundial: ' + CatalogoAutenticado.Tabs[tipo].Productos[id].codigoMundial;
        // Dibujar producto
        htmlGrid += ((contador % 4 == 0) ? '<tr><td style="width:175px">' : '<td style="width:175px">');
        htmlGrid += plantilla.replace(/__CATALOGO_URL_DETALLE_PRODUCTO__/g, urlDetalle)
                             .replace(/__CATALOGO_NOMBRE_PRODUCTO__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].nombre)
                             .replace(/__CATALOGO_NOMBRE_MARCA__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].marca)
                             .replace(/__CATALOGO_URL_IMAGEN_PRODUCTO__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].urlImagen)
                             .replace(/__CATALOGO_REFERENCIA_PRODUCTO__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].referencia)
                             .replace(/__CATALOGO_CODIGO_PRODUCTO__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].codigoMundial)
                             .replace(/__CATALOGO_CSS_BANDERA_OFERTA__/g, (CatalogoAutenticado.Tabs[tipo].Productos[id].oferta ? 'banderaVisible' : 'banderaOculta'))
                             .replace(/__CATALOGO_CSS_BANDERA_NUEVO__/g, (CatalogoAutenticado.Tabs[tipo].Productos[id].nuevo ? 'banderaVisible' : 'banderaOculta'))
                             .replace(/__CATALOGO_CSS_BANDERA_COMBO__/g, (CatalogoAutenticado.Tabs[tipo].Productos[id].combo ? 'banderaVisible' : 'banderaOculta'))
                             .replace(/__CATALOGO_UMV__/g, CatalogoAutenticado.Tabs[tipo].Productos[id].umv)
                             .replace(/__CATALOGO_IDSKU__/g, id)
                             .replace(/__CATALOGO_URL_MARCA__/g,urlMarca);
        htmlGrid += ((contador % 4 == 3) ? '</td></tr>' : '</td>');
        contador++;
        if(contador > 3)
            contador = 0;
    }
    // Cerrar el grid
    htmlGrid += '</table>';
    $('catalogoProductos').innerHTML = htmlGrid;
    // Actualizar boton ver todos
    if(CatalogoAutenticado.Tabs[tipo].Productos == null)
        $('imgTodosProductos').style.visibility='hidden';
    else
    {            
        $('imgTodosProductos').style.visibility='visible';
        $('lnkTodosProductos').href = CatalogoAutenticado.Tabs[tipo].url;
        $('imgTodosProductos').src = CatalogoAutenticado.Tabs[tipo].img;
    }
    // Consultar precios
    CatalogoAutenticado.ConsultarPrecios(tipo);
    panelLoading.hide();
    ajustarAlturaMenuIzquierdo();
}

//*************************************************************************************************

CatalogoAutenticado.ConsultarPrecios = function(tipo)
{
    var ConsultarPrecios_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        for(var i = 0; i < respuesta.producto.length; i++)
        {
            if(respuesta.producto[i].valido)
            {
                if(CatalogoAutenticado.Tabs[tipo].Productos[respuesta.producto[i].idSKU].oferta && respuesta.producto[i].descuento)
                    $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + respuesta.producto[i].precio + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + respuesta.producto[i].precioDescuento + '</span>';
                else
                    $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio" style="font-size:20px">' + respuesta.producto[i].precio + '</span>';
                CatalogoAutenticado.Tabs[tipo].Productos[respuesta.producto[i].idSKU].precio = respuesta.producto[i].precio;
                CatalogoAutenticado.Tabs[tipo].Productos[respuesta.producto[i].idSKU].precioDescuento = respuesta.producto[i].precioDescuento;
                CatalogoAutenticado.Tabs[tipo].Productos[respuesta.producto[i].idSKU].descuento = respuesta.producto[i].descuento;
            }
            else
                $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio">No disponible</span>';
        }
    }
    
    // Si el cliente no esta activo, no cargar precios
    if(!CatalogoAutenticado.ClienteActivo)
    {
        for(var id in CatalogoAutenticado.Tabs[tipo].Productos)
        {
            CatalogoAutenticado.Tabs[tipo].Productos[id].precio = "No disponible";
            CatalogoAutenticado.Tabs[tipo].Productos[id].oferta = false;
        }
    }
    // Buscar que productos se han consultado previamente
    var aux = new Array();
    for(var id in CatalogoAutenticado.Tabs[tipo].Productos)
    {
        if(CatalogoAutenticado.Tabs[tipo].Productos[id].precio == null)
            aux.push(id);
        else
        {
            if(CatalogoAutenticado.Tabs[tipo].Productos[id].oferta && CatalogoAutenticado.Tabs[tipo].Productos[id].descuento)
                $('precio' + id).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + CatalogoAutenticado.Tabs[tipo].Productos[id].precio + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + CatalogoAutenticado.Tabs[tipo].Productos[id].precioDescuento + '</span>';
            else
                $('precio' + id).innerHTML = '<span class="precio" style="font-size:20px">' + CatalogoAutenticado.Tabs[tipo].Productos[id].precio + '</span>';
        }
    }
    idSKU = aux;
    var codigoMundial = new Array();
    for(var i = 0; i < idSKU.length; i++)
        codigoMundial.push(CatalogoAutenticado.Tabs[tipo].Productos[idSKU[i]].codigoMundial);
    if(idSKU.length <= 0)
        return;
    // Consultar precios
    Mundial.ScriptServices.CatalogoAutenticadoConsultarPrecios(idSKU, codigoMundial, ConsultarPrecios_OnSuccess, function(args) { }, function(args) { });
}
/* Fin - Catalogo autenticado */
//*************************************************************************************************

Comparacion.EliminarProducto = function(idsku)
{
    Catalogo.Productos[idsku] = null;
    Comparacion.Cantidad--;
    delete Catalogo.Productos[idsku];
    Comparacion.Mostrar(Catalogo.Productos, Comparacion.Cantidad);
}

Comparacion.Mostrar = function(productos, cantidad)
{
    Catalogo.Productos = productos;
    Comparacion.Cantidad = cantidad;
    var plantillaProducto = document.getElementById('plantillaProducto').innerHTML;
    var plantillaCampo = '<td align="right" width="20%" style="text-align:right"><span style="text-align:right"><strong>__CAMPO__&nbsp;<img src="http://images2.mundial.com.co/MundialB2B/images/icons/vineta_tipo_negocio.png"></strong></span></td>';
    var width = (80 / (cantidad + 1)) | 0;
    var htmlFinal = '';
    var html = {
        'eliminarProducto': '<td></td>',
        'productoTop': '<td></td>',
        'codigo': plantillaCampo.replace(/__CAMPO__/g, 'C&oacute;digo'),
        'referencia': plantillaCampo.replace(/__CAMPO__/g, 'Referencia'),
        'uv': plantillaCampo.replace(/__CAMPO__/g, 'Unidad de venta'),
        'marca': plantillaCampo.replace(/__CAMPO__/g, 'Marca'),
        'descripcion': plantillaCampo.replace(/__CAMPO__/g, 'Descripci&oacute;n'),
        'especificaciones': plantillaCampo.replace(/__CAMPO__/g, 'Especificaciones'),
        'productoBottom': '<td></td>'
    };
    //    var htmlApertura = '<table cellspacing="10" cellpadding="5" width="978px"><tr><td></td>';
    //    var htmlCierre = '</table>';
    for (var idsku in productos)
    {
        html.eliminarProducto += '<td align="center" style="width:' + width + '%"><a href="#" class="menu_principal" onclick="Comparacion.EliminarProducto(' + idsku + ');return false;">Eliminar producto [x]</a></td>';
        html.productoTop += '<td align="center" style="width:' + width + '%">' + plantillaProducto.replace(/__CATALOGO_URL_DETALLE_PRODUCTO__/g, MundialPath + "DetalleProducto.aspx?mnd1=" + productos[idsku].encid)
                         .replace(/__CATALOGO_NOMBRE_PRODUCTO__/g, productos[idsku].nombre)
                         .replace(/__CATALOGO_NOMBRE_MARCA__/g, productos[idsku].marca)
                         .replace(/__CATALOGO_URL_IMAGEN_PRODUCTO__/g, productos[idsku].urlImagen)
                         .replace(/__CATALOGO_REFERENCIA_PRODUCTO__/g, productos[idsku].referencia)
                         .replace(/__CATALOGO_CODIGO_PRODUCTO__/g, productos[idsku].codigoMundial)
                         .replace(/__CATALOGO_CSS_BANDERA_OFERTA__/g, (productos[idsku].oferta ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_CSS_BANDERA_NUEVO__/g, (productos[idsku].nuevo ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_CSS_BANDERA_COMBO__/g, (productos[idsku].combo ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_DISPLAY_AUTENTICADO__/g, (Catalogo.Autenticado ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_IDSKU__/g, idsku)
                         .replace(/__CATALOGO_URL_MARCA__/g, MundialPath + "HomeMarca.aspx?mnd1=" + productos[idsku].idMarca)
                         .replace(/__POSICION__/g, 'Top') + '</td>';

        html.productoBottom += '<td align="center" style="width:' + width + '%">' + plantillaProducto.replace(/__CATALOGO_URL_DETALLE_PRODUCTO__/g, MundialPath + "DetalleProducto.aspx?mnd1=" + productos[idsku].encid)
                         .replace(/__CATALOGO_NOMBRE_PRODUCTO__/g, productos[idsku].nombre)
                         .replace(/__CATALOGO_NOMBRE_MARCA__/g, productos[idsku].marca)
                         .replace(/__CATALOGO_URL_IMAGEN_PRODUCTO__/g, productos[idsku].urlImagen)
                         .replace(/__CATALOGO_REFERENCIA_PRODUCTO__/g, productos[idsku].referencia)
                         .replace(/__CATALOGO_CODIGO_PRODUCTO__/g, productos[idsku].codigoMundial)
                         .replace(/__CATALOGO_CSS_BANDERA_OFERTA__/g, (productos[idsku].oferta ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_CSS_BANDERA_NUEVO__/g, (productos[idsku].nuevo ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_CSS_BANDERA_COMBO__/g, (productos[idsku].combo ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_DISPLAY_AUTENTICADO__/g, (Catalogo.Autenticado ? 'banderaVisible' : 'banderaOculta'))
                         .replace(/__CATALOGO_IDSKU__/g, idsku)
                         .replace(/__CATALOGO_URL_MARCA__/g, MundialPath + "HomeMarca.aspx?mnd1=" + productos[idsku].idMarca)
                         .replace(/__POSICION__/g, 'Bottom') + '</td>';

        html.codigo += '<td align="center" style="width:' + width + '%;border-bottom: 1px solid gray">' + productos[idsku].codigoMundial + '</td>';
        html.referencia += '<td align="center" style="width:' + width + '%;border-bottom: 1px solid gray">' + productos[idsku].referencia + '</td>';
        html.uv += '<td align="center" style="width:' + width + '%;border-bottom: 1px solid gray">' + productos[idsku].uv + '</td>';
        html.marca += '<td align="center" style="width:' + width + '%;border-bottom: 1px solid gray">' + productos[idsku].marca + '</td>';
        html.descripcion += '<td align="left" style="width:' + width + '%;border-bottom: 1px solid gray">' + productos[idsku].descripcion + '</td>';
        html.especificaciones += '<td align="left" style="width:' + width + '%;padding-left:10px;border-bottom: 1px solid gray">' + productos[idsku].especificaciones + '</td>';
    }
    // Construir html completo
    htmlFinal = '<table cellspacing="10" cellpadding="5" border="0" width="978px">';
    for (var fila in html)
    {
        htmlFinal += '<tr>' + html[fila] + '</tr>';
    }
    htmlFinal += '</table>';
    document.getElementById('catalogoProductos').innerHTML = htmlFinal;
    // Consultar precios
    if (Catalogo.Autenticado)
        Comparacion.ConsultarPrecios(productos);
}

Comparacion.ConsultarPrecios = function(idSKU)
{
    var ConsultarPrecios_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if (!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        for (var i = 0; i < respuesta.producto.length; i++)
        {
            if (respuesta.producto[i].valido)
            {
                if (Catalogo.Productos[respuesta.producto[i].idSKU].oferta == 1 && respuesta.producto[i].descuento)
                {
                    $('precioTop' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + respuesta.producto[i].precio + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + respuesta.producto[i].precioDescuento + '</span>';
                    $('precioBottom' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + respuesta.producto[i].precio + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + respuesta.producto[i].precioDescuento + '</span>';
                }
                else
                {
                    $('precioTop' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio" style="font-size:20px">' + respuesta.producto[i].precio + '</span>';
                    $('precioBottom' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio" style="font-size:20px">' + respuesta.producto[i].precio + '</span>';
                }
                Catalogo.Productos[respuesta.producto[i].idSKU].p = respuesta.producto[i].precio;
                Catalogo.Productos[respuesta.producto[i].idSKU].po = respuesta.producto[i].precioDescuento;
            }
            else
                $('precio' + respuesta.producto[i].idSKU).innerHTML = '<span class="precio">No disponible</span>';
        }
    }

    // Si el cliente no esta activo, no cargar precios
    if (Catalogo.Autenticado && !Catalogo.ClienteActivo)
    {
        for (var id in Catalogo.Productos)
        {
            Catalogo.Productos[id].p = "No disponible";
            Catalogo.Productos[id].ows = 0;
        }
    }
    // Buscar que productos se han consultado previamente
    var aux = new Array();
    for (var idsku in Catalogo.Productos)
    {
        if (Catalogo.Productos[idsku].p == null)
            aux.push(idsku);
        else
        {
            if (Catalogo.Productos[idsku].oferta == 1 && Catalogo.Productos[idsku].p != Catalogo.Productos[idsku].po)
                $('precio' + idsku).innerHTML = '<span class="precio_sin_descuento">Antes </span><span class="precio_tachado"><span class="precio_sin_descuento">' + Catalogo.Productos[idsku].p + '</span></span><br /><span class="precio" style="font-size:16px">Desde ' + Catalogo.Productos[idsku].po + '</span>';
            else
                $('precio' + idsku).innerHTML = '<span class="precio" style="font-size:20px">' + Catalogo.Productos[idsku].p + '</span>';
        }
    }
    idSKU = aux;
    if (idSKU.length <= 0)
        return;
    var codigoMundial = new Array();
    for (var i = 0; i < idSKU.length; i++)
        codigoMundial.push(Catalogo.Productos[idSKU[i]].codigoMundial);
    // Consultar precios
    Mundial.ScriptServices.ConsultarPreciosComparacion(idSKU, codigoMundial, ConsultarPrecios_OnSuccess, Catalogo.WS_OnError, Catalogo.WS_OnTimeout);
}

// ]]>

/**Inactividad de homeprincipal*/
initTime = function(){idleTime = 0;} 

initTimerSession = function (site) {        
    var idleInterval = setInterval("timerIncrement('"+site+"')", 60000);           
    Event.observe(document, 'mousemove', initTime);
    Event.observe(document, 'keypress', initTime);                    
}
/*****************************************************************************************************************/
function timerIncrement(site) {
    idleTime = idleTime + 1;
    if (idleTime == timeMaxSession) 
    {
        idleTime = 0;
        if (site == "B2B")
            LoadProductosDestacados();
        else if(site == "MRO")
            LoadProductosDestacadosMro();
        else if (site == "Autenticado")
        {
            CatalogoAutenticado.reiniciarBusqueda='1';
            CatalogoAutenticado.MostrarProductos(CatalogoAutenticado.tipo);
            return false;
        }        
    }
}
