var QuickLook = {};
var seleccionados = false;

QuickLook.GUID = Catalogo.GUID;
QuickLook.dsBuscarProductos = null;
QuickLook.idUsuarioCliente = 0;
QuickLook.ultimaFila = 0;
QuickLook.timer = null;
QuickLook.Subtotales = {};
// Constantes
QuickLook.MAX_ZINDEX = 100;
QuickLook.ACTUALIZAR_CLIENTE = 1;
QuickLook.ACTUALIZAR_SERVIDOR = 2;
QuickLook.CAMPO_NOMBRE = 1;
QuickLook.CAMPO_CANTIDAD = 2;
QuickLook.CAMPO_DESCUENTO = 4;
QuickLook.CAMPO_PRECIO_DESCUENTO = 8;
QuickLook.CAMPO_MOTIVO = 16;

//*************************************************************************************************

// Inicializa el formulario
YAHOO.util.Event.onDOMReady(function()
{
    // Inicializar el datasource del autocomplete
    QuickLook.dsBuscarProductos = new YAHOO.util.XHRDataSource("BuscarProductos.ashx");
    QuickLook.dsBuscarProductos.connMethodPost = true;
    QuickLook.dsBuscarProductos.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
    QuickLook.dsBuscarProductos.responseSchema = { resultsList : "productos", fields : ["nombre","marca","codigo","referencia","idsku","umv"] };
    QuickLook.initAutocompletar(0);
    setTimeout(ping, 60000);
});

//*************************************************************************************************

function temporizador(fila, f)
{
    QuickLook.HabilitarBotones(fila, false);
    if(QuickLook.timer != null)
        clearTimeout(QuickLook.timer);
    QuickLook.timer = setTimeout(f, 1000);
    QuickLook.HabilitarBotones(fila, true);
}

//*************************************************************************************************

QuickLook.MostrarTooltip = function(e,fila)
{
    Tip("C&oacute;digo Mundial: " + $('codigoMundial' + fila).value + "<br />Referencia: " + $('referenciaSKU' + fila).value, DELAY, 0, WIDTH, 200, ABOVE, true, OFFSETX, 1, BGCOLOR, "#F3F3F3");
}

//*************************************************************************************************


QuickLook.DetalleProducto = function(fila, opciones)
{        
     // Esta variable está declarada en QuickLookPopUp.js y ayuda a controlar la visibilidad
     // de las ventanas de pop up.
     if(QuickLookPopUp.Visible)
        return;
    
    var idSKU = fila;
    // Verificar que tenga idsku
    if(idSKU == '0' || !IsNumeric(idSKU) || !IsInt(idSKU))
    {
        campoValido('pedidoNombre' + fila, false);
        ModalDialog.Show("Error", "Debe seleccionar un producto de la lista de autocompletar", ModalDialog.OK);
        return falsess
    }
     var GUID ="";
     if(Catalogo.GUID != null)
        GUID = Catalogo.GUID;
     
    QuickLookPopUp.ObtenerDetalle(idSKU, GUID, opciones);
}

//*************************************************************************************************

QuickLook.DesplazarFilas = function()
{
    // Insertar fila en blanco
    QuickLook.ultimaFila++;
    var htmlFila = $('divPlantilla').innerHTML.replace(/__FILA__/g, QuickLook.ultimaFila);
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    var div = document.createElement('div');
    tr.appendChild(td);
    td.appendChild(div);
    tr.setAttribute('id', 'fila' + QuickLook.ultimaFila);
    div.setAttribute('id', 'divFila' + QuickLook.ultimaFila);
    div.innerHTML = htmlFila;
    YAHOO.util.Dom.insertBefore(tr, 'plantilla');
    // Desplazar los valores una fila abajo
    var filaAnterior = QuickLook.ultimaFila;
    for(var fila = QuickLook.ultimaFila - 1; fila >= 0; fila--)
    {
        if($('fila' + fila) == null || $('fila' + filaAnterior) == null)   // Si no existen la fila origen o la fila destino...
            continue;
        // Copiar los datos de la fila anterior
        $('pedidoSeleccionado' + filaAnterior).checked = ((fila > 0) ? $('pedidoSeleccionado' + fila).checked : false);
        $('pedidoNombre' + filaAnterior).value = $('pedidoNombre' + fila).value;
        YAHOO.util.Event.addListener('pedidoNombre' + filaAnterior, 'mouseover', QuickLook.MostrarTooltip, filaAnterior);
        YAHOO.util.Event.addListener('pedidoNombre' + filaAnterior, 'mouseout', UnTip);
        $('pedidoCantidad' + filaAnterior).value = $('pedidoCantidad' + fila).value;
        $('pedidoPrecioUnitario' + filaAnterior).innerHTML = $('pedidoPrecioUnitario' + fila).innerHTML;
        $('pedidoDescuento' + filaAnterior).value = $('pedidoDescuento' + fila).value;
        if($('pedidoDescuento' + fila).value == '0' || $('pedidoDescuento' + fila).value == '0')
        {
            $('pedidoMotivo' + filaAnterior).selectedIndex = 0;
            $('pedidoMotivo' + filaAnterior).disabled = true;
        }
        else
        {
            $('pedidoMotivo' + filaAnterior).selectedIndex = $('pedidoMotivo' + fila).selectedIndex;
            $('pedidoMotivo' + filaAnterior).disabled = $('pedidoMotivo' + fila).disabled;
        }
        $('pedidoPrecioDescuento' + filaAnterior).value = $('pedidoPrecioDescuento' + fila).value;
        $('pedidoPrecioTotal' + filaAnterior).innerHTML = $('pedidoPrecioTotal' + fila).innerHTML;
        $('idPedidoRapido' + filaAnterior).value = $('idPedidoRapido' + fila).value;
        $('idSKU' + filaAnterior).value = $('idSKU' + fila).value;
        $('codigoMundial' + filaAnterior).value = $('codigoMundial' + fila).value;
        $('referenciaSKU' + filaAnterior).value = $('referenciaSKU' + fila).value;
        $('pedidoNombre' + filaAnterior).className = $('pedidoNombre' + fila).className;
        $('pedidoCantidad' + filaAnterior).className = $('pedidoCantidad' + fila).className;
        $('pedidoDescuento' + filaAnterior).className = $('pedidoDescuento' + fila).className;
        $('pedidoMotivo' + filaAnterior).className = $('pedidoMotivo' + fila).className;
        $('pedidoPrecioDescuento' + filaAnterior).className = $('pedidoPrecioDescuento' + fila).className;
        filaAnterior = fila;
    }
    // Limpiar fila 0
    QuickLook.LimpiarFila();
}

//*************************************************************************************************

QuickLook.InsertarFila = function(actualizar)
{
    // Si hay una actualizacion pendiente, omitir la insercion
    if(QuickLook.timer != null)
    {
        return;
    }
    // Validar datos
    if(!QuickLook.EsFilaValida(0))
        return;
    // Guardar los datos de la fila
    var idSKU = $('idSKU0').value;
    var idPedidoRapido = $('idPedidoRapido0').value;
    var nombre = $('pedidoNombre0').value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad0').value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento0').value.replace(/^\\s+|\\s+$/g,'');
    var motivo = $('pedidoMotivo0').value;
    if(descuento == '')
        descuento = -1000;
    // Actualizar en la bd, sin actualizar el formulario
    var InsertarFila_OnSuccess = function(args)
    {
        QuickLook.HabilitarBotones(0, true);
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            if(respuesta.campo != null)
                campoValido(respuesta.campo + '0', false);
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        for(var i=0; i <= QuickLook.ultimaFila; i++)
        {
            if($('idPedidoRapido' + i) != null)
            {
                $('idPedidoRapido' + i).value = respuesta.idPedidoRapido;
                QuickLook.Subtotales[respuesta.idPedidoRapido] = respuesta.precioTotal;
                QuickLook.ActualizarTotal();
                break;
            }
        }
        QuickLook.DesplazarFilas();
        QuickLook.HabilitarBotones(0, true);
        try { $('pedidoNombre0').focus(); } catch(ex) { }
    }
    if(actualizar)
    {
        QuickLook.HabilitarBotones(0, false);
        Mundial.ScriptServices.Actualizar(idPedidoRapido, idSKU, nombre, cantidad, descuento, 0, motivo, true, QuickLook.GUID, InsertarFila_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
    }
    else
    {
        QuickLook.DesplazarFilas();
        QuickLook.HabilitarBotones(0, true);
        try { $('pedidoNombre0').focus(); } catch(ex) { }
    }
}

//*************************************************************************************************

QuickLook.LimpiarFila = function()
{
    // Si hay una actualizacion pendiente, omitir la insercion
    if(QuickLook.timer != null)
        return;
    // Nombre
    $('pedidoNombre0').value = '';
    campoValido('pedidoNombre0', true);
    // Cantidad
    $('pedidoCantidad0').value = '';
    campoValido('pedidoCantidad0', true);
    // Precio unitario
    $('pedidoPrecioUnitario0').innerHTML = '-';
    // Descuento
    $('pedidoDescuento0').value = '';
    campoValido('pedidoDescuento0', true);
    // Motivo
    campoValido('divMotivo0', true);
    $('pedidoMotivo0').selectedIndex = 0;
    $('pedidoMotivo0').disabled = true;
    // Precio descuento
    $('pedidoPrecioDescuento0').value = '';
    campoValido('pedidoPrecioDescuento0', true);
    // Precio total
    $('pedidoPrecioTotal0').innerHTML = '-';
    $('idPedidoRapido0').value = '0';
    $('idSKU0').value = '0';
    // Eliminar pedido de la tabla
    var LimpiarFila_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
    }

}

//*************************************************************************************************

QuickLook.EliminarFila = function(fila)
{
    // Si hay una actualizacion pendiente, omitir la insercion
    if(QuickLook.timer != null)
        return;
    if($('fila'+fila) == null)
    {
        ModalDialog.Show("Error", "No puede eliminar la fila seleccionada. Vuelva a intentarlo", ModalDialog.OK);
        return;
    }
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    // Eliminar pedido de la tabla
    var EliminarFila_OnSuccess = function(args)
    {
        QuickLook.HabilitarBotones(0, true);
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        $('fila'+fila).parentNode.removeChild($('fila'+fila));
        QuickLook.ActualizarTotal();
    }
    QuickLook.HabilitarBotones(fila, false);
    Mundial.ScriptServices.EliminarProductoPedido(idPedidoRapido, QuickLook.GUID, EliminarFila_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
}

//*************************************************************************************************

// Inicializar el widget AutoComplete de productos para la fila especificada
QuickLook.initAutocompletar = function(fila)
{
    var autocomplete = new YAHOO.widget.AutoComplete("pedidoNombre" + fila, "pedidoNombreContainer" + fila, QuickLook.dsBuscarProductos, 
    { 
        maxResultsDisplayed:200,
        allowBrowserAutocomplete:false,
        animVert:false,
        animSpeed:0.1,
        autoHighlight:false,
        queryDelay:0.1,
        useShadow:false,
        prehighlightClassName:'yui-ac-prehighlight',
        resultTypeList:false
    });
    autocomplete.generateRequest = function(prefijo)
    {
        return "prefijo=" + prefijo + "&GUID=" + QuickLook.GUID;
    };
    autocomplete.formatResult = function(oResultData, sQuery, sResultMatch) { 
        return "<div class='pedidoRapidoACItem' style='width:100%' onmouseover='Tip(\"C&oacute;digo Mundial: " + oResultData.codigo + "<br />Referencia: " + oResultData.referencia + "\", DELAY, 0, WIDTH, 200, ABOVE, true, OFFSETX, 1, BGCOLOR, \"#F3F3F3\")' onmouseout='UnTip()'>" + oResultData.nombre.replace(new RegExp("(" + sQuery + ")", "gi"),'<span class="pedidoResaltarResultado">$1</span>') + " (" +  oResultData.marca.replace(new RegExp("(" + sQuery + ")", "gi"),'<span class="pedidoResaltarResultado">$1</span>') + ")</div>";
    }; 
    var itemSelectHandler = function(sType, aArgs) {
	    var parametros = aArgs[2];
	    $('idSKU0').value = parametros.idsku;
	    $('codigoMundial0').value = parametros.codigo;
	    $('referenciaSKU0').value = parametros.referencia;
	    
	    $('pedidoCantidad0').value = ((IsNumeric(parametros.umv) &&  IsInt(parametros.umv) && parametros.umv > 0) ? parametros.umv : 1);
	    QuickLook.ActualizarCantidad(0);
	    QuickLook.ActualizarNombre(0);
    };
    autocomplete.itemSelectEvent.subscribe(itemSelectHandler);
}

//*************************************************************************************************

// Asocia el idUsuarioCliente al pedido, y muestra el formulario
QuickLook.MostrarFormulario = function(idUsuarioCliente)
{
    panelLoading.show();
    var CargarPedido_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            panelLoading.hide();
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        QuickLook.GUID = respuesta.GUID;
        $('pedidoNombreCliente').innerHTML = respuesta.nombreCliente;
        $('pedidoCodigoCliente').innerHTML = respuesta.codigoCliente;
        $('pedidoNombreUsuarioCliente').innerHTML = respuesta.nombreUsuarioCliente;
        // Reiniciar formulario
        for(var i=1; i <= QuickLook.ultimaFila; i++)
        {
            if($('fila'+i) != null && $('fila'+i).parentNode != null)
                $('fila'+i).parentNode.removeChild($('fila'+i));
        }
        QuickLook.ultimaFila = 0;
        QuickLook.Subtotales = {};
        QuickLook.LimpiarFila();
        
        for(var i=0; i < respuesta.productos.length; i++)
        {
            // Mostrar valores por producto
            $('idPedidoRapido0').value = respuesta.productos[i].idPedidoRapido;
            $('idSKU0').value = respuesta.productos[i].idsku;
            $('codigoMundial0').value = respuesta.productos[i].codigoMundial;
            $('referenciaSKU0').value = respuesta.productos[i].referenciaSKU;
            $('pedidoNombre0').value = respuesta.productos[i].nombre;
            $('pedidoCantidad0').value = respuesta.productos[i].cantidad;
            $('pedidoPrecioUnitario0').innerHTML = respuesta.productos[i].precioUnitarioFormateado;
            $('pedidoDescuento0').value = ((respuesta.productos[i].descuento == -1000) ? '' : respuesta.productos[i].descuento);
            $('pedidoMotivo0').disabled = !respuesta.productos[i].mostrarMotivo;
            $('pedidoPrecioDescuento0').value = respuesta.productos[i].precioUnitarioDescuentoFormateado;
            $('pedidoPrecioTotal0').innerHTML = respuesta.productos[i].precioTotalFormateado;
            var motivo = $('pedidoMotivo0');
            for(var j=0;j<motivo.length;j++)
            {
                if(motivo.options[j].value==respuesta.productos[i].motivo)
                {
                    motivo.selectedIndex=j;
                    break;
                }
            }
            QuickLook.Subtotales[respuesta.productos[i].idPedidoRapido] = respuesta.productos[i].precioTotal;
            QuickLook.InsertarFila(false);
        }
        QuickLook.ActualizarTotal();
        $('pedidoRapidoFormulario').style.display='';
        $('pedidoRapidoFormulario').scrollIntoView(true);
        $('pedidoNombre0').focus();
        panelLoading.hide();
    }
    Mundial.ScriptServices.CargarPedido(idUsuarioCliente, CargarPedido_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
}

//*************************************************************************************************

QuickLook.EsFilaValida = function(fila, campoIgnorado)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value
    var nombreProducto = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var precioDescuento = $('pedidoPrecioDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'').replace(/,/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    var motivoRequerido = !$('pedidoMotivo' + fila).disabled;
    if (!(campoIgnorado & QuickLook.CAMPO_NOMBRE))
    {
        // Validar nombre
        if(nombreProducto.length == 0)
        {
            campoValido('pedidoNombre' + fila, false);
            ModalDialog.Show("Error", "El nombre del producto es requerido", ModalDialog.OK);
            return false;
        }
        // Verificar que tenga idsku
        if(idSKU == '0' || !IsNumeric(idSKU) || !IsInt(idSKU))
        {
            campoValido('pedidoNombre' + fila, false);
            ModalDialog.Show("Error", "Debe seleccionar un producto de la lista de autocompletar", ModalDialog.OK);
            return false;
        }
        // Verificar que el nombre no se haya agregado al pedido
        for(var i=0; i <= QuickLook.ultimaFila; i++)
        {
            //if(i != fila && $('pedidoNombre' + i) != null && $('pedidoNombre' + i).value.replace(/^\\s+|\\s+$/g,'') == nombreProducto)
            if(i != fila && $('idSKU' + i).value == idSKU)
            {
                campoValido('pedidoNombre' + fila, false);
                ModalDialog.Show("Error", "El producto ya se encuentra en el pedido. Seleccione otro", ModalDialog.OK);
                return;
            }
        }
        campoValido('pedidoNombre' + fila, true);
    }
    if (!(campoIgnorado & QuickLook.CAMPO_CANTIDAD))
    {
        // Validar cantidad
        if(!IsNumeric(cantidad) || !IsInt(cantidad))
        {
            campoValido('pedidoCantidad' + fila, false);
            ModalDialog.Show("Error", "La cantidad no es válida", ModalDialog.OK);
            return false;
        }
        campoValido('pedidoCantidad' + fila, true);
    }
    if (!(campoIgnorado & QuickLook.CAMPO_DESCUENTO))
    {
        // Validar descuento
        if(descuento == '')
            descuento = -1000;
        else
        {
            if(!IsNumeric(descuento) || parseFloat(descuento) <= -100 || parseFloat(descuento) >= 100)
            {
                campoValido('pedidoDescuento' + fila, false);
                ModalDialog.Show("Error", "El descuento debe ser un valor numérico entre -100 y 100", ModalDialog.OK);
                return false;
            }
        }
        campoValido('pedidoDescuento' + fila, true);
    }
    if (!(campoIgnorado & QuickLook.CAMPO_PRECIO_DESCUENTO))
    {
        // Validar precio descuento
        if(precioDescuento == '')
        {
            precioDescuento = 0;
        }
        else
        {
            if(!IsNumeric(precioDescuento) || parseFloat(precioDescuento) < 0)
            {
                campoValido('pedidoPrecioDescuento' + fila, false);
                ModalDialog.Show("Error", "El precio con descuento no es válido", ModalDialog.OK);
                return false;
            }
        }
        campoValido('pedidoPrecioDescuento' + fila, true);
    }
    if (!(campoIgnorado & QuickLook.CAMPO_MOTIVO))
    {
        // Validar motivo
        if(motivoRequerido && motivo == '-1')
        {
            campoValido('divMotivo' + fila, false);
            ModalDialog.Show("Error", "El motivo de descuento es requerido", ModalDialog.OK);
            return false;
        }
        campoValido('divMotivo' + fila, true);
    }
    return true;
}

//*************************************************************************************************

QuickLook.Actualizar = function(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, precioDescuento, motivo, opciones)
{
    var Actualizar_OnSuccess = function(args)
    {
        QuickLook.HabilitarBotones(fila, true);
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            if(respuesta.campo != null)
                campoValido(respuesta.campo + fila, false);
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        if(opciones & QuickLook.ACTUALIZAR_CLIENTE)
        {
            // Resetear campos de error
            campoValido('pedidoNombre' + fila, true);
            campoValido('pedidoCantidad' + fila, true);
            campoValido('pedidoDescuento' + fila, true);
            campoValido('pedidoPrecioDescuento' + fila, true);
            // Mostrar nuevos valores
            $('pedidoPrecioUnitario' + fila).innerHTML = respuesta.precioUnitarioFormateado;
            $('pedidoDescuento' + fila).value = ((respuesta.descuento == -1000) ? '' : respuesta.descuento);
            $('pedidoMotivo' + fila).disabled = !respuesta.mostrarMotivo;
            if(!respuesta.mostrarMotivo)
                $('pedidoMotivo' + fila).selectedIndex = 0;
            $('pedidoPrecioDescuento' + fila).value = respuesta.precioUnitarioDescuentoFormateado;
            $('pedidoPrecioTotal' + fila).innerHTML = respuesta.precioTotalFormateado;
            QuickLook.Subtotales[respuesta.idPedidoRapido] = respuesta.precioTotal;
            QuickLook.ActualizarTotal();
        }
        $('idPedidoRapido' + fila).value = respuesta.idPedidoRapido;
    }
    var guardar = ((opciones & QuickLook.ACTUALIZAR_SERVIDOR) == QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.HabilitarBotones(fila, false);
    Mundial.ScriptServices.Actualizar(idPedidoRapido, idSKU, nombre, cantidad, descuento, precioDescuento, motivo, guardar, QuickLook.GUID, Actualizar_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
}

//*************************************************************************************************

QuickLook.ActualizarNombre = function(fila)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var nombre = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    if(!QuickLook.EsFilaValida(fila, QuickLook.CAMPO_CANTIDAD | QuickLook.CAMPO_DESCUENTO | QuickLook.CAMPO_PRECIO_DESCUENTO | QuickLook.CAMPO_MOTIVO))
        return;
    if(idSKU == '0' || cantidad == '')
        return;
    if(descuento == '')
        descuento = -1000;
    var opciones = ((fila == 0) ? QuickLook.ACTUALIZAR_CLIENTE : QuickLook.ACTUALIZAR_CLIENTE | QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.Actualizar(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, 0, motivo, opciones);
    QuickLook.timer = null;
}

//*************************************************************************************************

QuickLook.ActualizarCantidad = function(fila)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var nombre = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    if(!QuickLook.EsFilaValida(fila, QuickLook.CAMPO_PRECIO_DESCUENTO | QuickLook.CAMPO_MOTIVO))
        return;
    if(descuento == '')
        descuento = -1000;
    var opciones = ((fila == 0) ? QuickLook.ACTUALIZAR_CLIENTE : QuickLook.ACTUALIZAR_CLIENTE | QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.Actualizar(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, 0, motivo, opciones);
    QuickLook.timer = null;
}

//*************************************************************************************************

QuickLook.ActualizarDescuento = function(fila)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var nombre = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    if(!QuickLook.EsFilaValida(fila, QuickLook.CAMPO_PRECIO_DESCUENTO | QuickLook.CAMPO_MOTIVO))
        return;
    if(descuento == '')
        descuento = -1000;
    var opciones = ((fila == 0) ? QuickLook.ACTUALIZAR_CLIENTE : QuickLook.ACTUALIZAR_CLIENTE | QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.Actualizar(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, 0, motivo, opciones);
    QuickLook.timer = null;
}

//*************************************************************************************************

QuickLook.ActualizarPrecioDescuento = function(fila)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var nombre = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var precioDescuento = $('pedidoPrecioDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'').replace(/,/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    if(!QuickLook.EsFilaValida(fila, QuickLook.CAMPO_DESCUENTO | QuickLook.CAMPO_MOTIVO))
        return;
    if(descuento == '')
        descuento = -1000;
    if(precioDescuento == '')
        precioDescuento = 0;
    var opciones = ((fila == 0) ? QuickLook.ACTUALIZAR_CLIENTE : QuickLook.ACTUALIZAR_CLIENTE | QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.Actualizar(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, precioDescuento, motivo, opciones);
    QuickLook.timer = null;
}

//*************************************************************************************************

QuickLook.ActualizarMotivo = function(fila)
{
    var idPedidoRapido = $('idPedidoRapido' + fila).value;
    var idSKU = $('idSKU' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var nombre = $('pedidoNombre' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var cantidad = $('pedidoCantidad' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var descuento = $('pedidoDescuento' + fila).value.replace(/^\\s+|\\s+$/g,'');
    var motivo = $('pedidoMotivo' + fila).value;
    if(!QuickLook.EsFilaValida(fila, QuickLook.CAMPO_PRECIO_DESCUENTO))
        return;
    if(descuento == '')
        descuento = -1000;
    var opciones = ((fila == 0) ? QuickLook.ACTUALIZAR_CLIENTE : QuickLook.ACTUALIZAR_CLIENTE | QuickLook.ACTUALIZAR_SERVIDOR);
    QuickLook.Actualizar(fila, idPedidoRapido, idSKU, nombre, cantidad, descuento, 0, motivo, opciones);
    QuickLook.timer = null;
}

//*************************************************************************************************

QuickLook.ActualizarTotal = function()
{
    var idPedidoRapido;
    var total = 0.0;
    for(var i=1; i <= QuickLook.ultimaFila; i++)
    {
        if($('pedidoSeleccionado' + i) != null && $('pedidoSeleccionado' + i).checked)
        {
            idPedidoRapido = $('idPedidoRapido' + i).value;
            total += QuickLook.Subtotales[idPedidoRapido];
        }
    }
    $('pedidoTotal').innerHTML = CurrencyFormatted(total);
}

//*************************************************************************************************

QuickLook.SeleccionarFila = function(fila)
{
    QuickLook.ActualizarTotal();
}

//*************************************************************************************************

QuickLook.SeleccionarTodos = function(btn)
{
    for(var i=1; i <= QuickLook.ultimaFila; i++)
        if($('pedidoSeleccionado' + i) != null)
            $('pedidoSeleccionado' + i).checked = !seleccionados;
            
    seleccionados=!seleccionados;
    if(btn.value != null)
        btn.value=(seleccionados)?"Quitar Seleccionados":"Seleccionar todos";
    else
        btn.innerHTML=(seleccionados)?"Quitar Seleccionados":"Seleccionar todos";
            
    QuickLook.ActualizarTotal();
}

//*************************************************************************************************

QuickLook.AgregarCarro = function()
{
    var pedidos;
    var idPedidoRapido = new Array();
    // Validar campos
    for(var fila=1; fila <= QuickLook.ultimaFila; fila++)
    {
        if($('pedidoSeleccionado' + fila) != null && $('pedidoSeleccionado' + fila).checked)
        {
            if(!QuickLook.EsFilaValida(fila))
                return;
            idPedidoRapido.push($('idPedidoRapido' + fila).value);
        }
    }
    pedidos = idPedidoRapido.join(',');
    var AgregarCarro_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        var eliminado;
        for(var fila=1; fila <= QuickLook.ultimaFila; fila++)
        {
            if($('idPedidoRapido' + fila) != null)
            {
                eliminado = false;
                for(var j=0;j<respuesta.idAgregado.length;j++)
                    if($('idPedidoRapido' + fila).value == respuesta.idAgregado[j])
                        eliminado = true;
                if(eliminado)
                    $('fila'+fila).parentNode.removeChild($('fila'+fila));
            }
        }
        QuickLook.ActualizarTotal();
        // Iniciar acompañamiento
        var url = respuesta.urlBase + '?UsuarioMundial=' + respuesta.UsuarioMundial + '&UsuarioMundialCedula=' + respuesta.UsuarioMundialCedula + '&UserName=' + respuesta.UserName + '&Password=' + respuesta.Password + '&codCliente=' + respuesta.codigoCliente + '&Redirect=' + respuesta.Redirect;
        var popupAncho = (screen.width) ? screen.width : 1024;
	    var popupAlto = (screen.height) ? screen.height : 570;
	    var popup = window.open(url, 'mundialAcompanamiento', 'width='+popupAncho+'px,height='+popupAlto+'px,resizable=yes,status=yes,scrollbars=yes,location=0');
	    if (popup==null || typeof(popup)=="undefined")
	    {
		    ModalDialog.Show("Error", 'Mundial.com.co le pide desactivar el bloqueo de ventanas emergentes de su navegador.', ModalDialog.OK);
		    return;
	    }
	    else
	    {
		    popup.moveTo(0,0);
	    }

    }
    Mundial.ScriptServices.AgregarAlCarro(pedidos, QuickLook.GUID, AgregarCarro_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
}

//*************************************************************************************************

QuickLook.EliminarPedido = function()
{
    var pedidos;
    var idPedidoRapido = new Array();
    // Validar campos
    for(var fila=1; fila <= QuickLook.ultimaFila; fila++)
    {
        if($('pedidoSeleccionado' + fila) != null && $('pedidoSeleccionado' + fila).checked)
        {
            idPedidoRapido.push($('idPedidoRapido' + fila).value);
        }
    }
    if(idPedidoRapido.length == 0)
    {
        ModalDialog.Show("Error", "Debe seleccionar al menos un producto", ModalDialog.OK);
        return;
    }
    pedidos = idPedidoRapido.join(',');
    var EliminarPedido_OnSuccess = function(args)
    {
        var respuesta = eval('(' + args + ')');
        if(!respuesta.resultado)
        {
            ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
            return;
        }
        var eliminado;
        for(var fila=1; fila <= QuickLook.ultimaFila; fila++)
        {
            if($('idPedidoRapido' + fila) != null)
            {
                eliminado = false;
                for(var j=0;j<respuesta.idEliminado.length;j++)
                    if($('idPedidoRapido' + fila).value == respuesta.idEliminado[j])
                        eliminado = true;
                if(eliminado)
                    $('fila'+fila).parentNode.removeChild($('fila'+fila));
            }
        }
        QuickLook.ActualizarTotal();
    }
    var EliminarPedido_OnYes = function()
    {
        Mundial.ScriptServices.EliminarPedido(pedidos, QuickLook.GUID, EliminarPedido_OnSuccess, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
    }
    ModalDialog.Show("Eliminar Pedido", "Desea eliminar los productos seleccionados?", ModalDialog.YES | ModalDialog.NO, { YES: EliminarPedido_OnYes, NO: function(){} });
}

//*************************************************************************************************

QuickLook.HabilitarBotones = function(fila, estado)
{
    if(fila == 0 && $('pedidoDetalle0') != null)
    {
        $('pedidoDetalle0').disabled = !estado;
        $('pedidoAgregarFila0').disabled = !estado;
        $('pedidoLimpiar0').disabled = !estado;
    }
    else if($('pedidoDetalle' + fila) != null)
    {
        $('pedidoDetalle' + fila).disabled = !estado;
        $('pedidoRemover' + fila).disabled = !estado;
    }
}

//*************************************************************************************************

QuickLook.Callback_OnError = function(args)
{
    var respuesta = eval('(' + args + ')');
    if(!respuesta.resultado)
    {
        ModalDialog.Show("Error", respuesta.mensajeError, ModalDialog.OK);
        return;
    }
}

//*************************************************************************************************

QuickLook.Callback_OnTimeout = function(args)
{
}

//*************************************************************************************************

function teclaEnter(ev)
{
    return !((ev.which || ev.keyCode) && (ev.which == 13 || ev.keyCode == 13));
}

//*************************************************************************************************

function EsTeclaValida(ev, teclasValidas)
{
    // Codigo de teclas:
    //  45 Signo menos
    //  48 - 57 Números
    //  8 Backspace
    //  37 Flecha Izquierda
    //  39 Flecha Derecha
    //  46 Delete
    //  13 Enter
    //  65 - 90 Letras
    //  96 - 105 Números desde Panel Numérico
    //  110 Punto desde Panel Numérico
    //  190 Punto
    //  9 - TAB
    var tecla;
    if(ev.which || ev.keyCode)
        tecla = (ev.which ? ev.which : ev.keyCode);
    else
    {
        return true;
    }
    if(tecla == 13 || ev.shiftKey || ev.altKey || ev.ctrlKey || (teclasValidas.indexOf(tecla) < 0))
    {
        ev.returnValue = false;
        ev.cancelBubble = false;
        if (ev.preventDefault) ev.preventDefault();
        return false;
    }
    return (teclasValidas.indexOf(tecla) >= 0);
}

//*************************************************************************************************

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();
}

//*************************************************************************************************

function campoValido(campo, valido)
{
    if(valido)
        YAHOO.util.Dom.removeClass($(campo), 'errorCampo');
    else
    {
        YAHOO.util.Dom.addClass($(campo), 'errorCampo');
        $(campo).focus();
    }
        
}

//*************************************************************************************************

function CurrencyFormatted(num)
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    centsA = num%100;
    num = Math.floor(num/100).toString();
    if(centsA<10)
    centsA = "0" + centsA;
    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 + '.' + centsA);
}

//*************************************************************************************************

function ping()
{
    Mundial.ScriptServices.Ping(function(args) { setTimeout(ping, 60000); }, QuickLook.Callback_OnError, QuickLook.Callback_OnTimeout);
}

