﻿//document.getElementsByTagName("head")[0].appendChild(styleSheetElement);

var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("media", "all");
fileref.setAttribute("href", "http://www.asistentevirtual.cl/App_Themes/chat/chat_alfa.css");

if (typeof fileref != "undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref);



var guidUsuario = "";
var guidOperador = "";
var nombreUsuario = "";
var nombreSoporte = "";
var chatActivo = "1";
// llave asignada al cliente.
var guidCliente = "35A979AF-5EF3-4F2A-A345-955F868D6F4D";

var urlDominio = "http://www.asistentevirtual.cl";
var urlServidor = urlDominio + "/json.ashx?callback=?";
var urlManejadorEventos = urlDominio + "/ManejadorDeEventos.ashx?callback=?";
var saludoInicial = "";
var Ventanas = new Array();
var cookieChatActivo = "cookieChatActivo";
var cookieUsuarioID = "cookieUsuarioID";

var fechaExpiracionCookie = calcularFechaExpiracion();

// cargar al cargar la página web
$(document).ready(function () {
    LlamadaJsonp({
        accion: "servicio",
        cliente: guidCliente,
        activo: verChatActivo()
    },
    function (data) {
        if (data.resultado == "1") {
            guidOperador = data.operador;
            nombreSoporte = data.nombreSoporte;
            saludoInicial = data.SaludoInicial;
            LlamadaJsonp({
                accion: "registrar",
                cliente: guidCliente,
                usuario: leerUsuarioID(),
                pagina: document.URL
            },
            function (data) {
                if (data.resultado != "") {
                    guidUsuario = data.usuario;
                    nombreUsuario = data.nombreUsuario;

                    setChatActivo("0");
                    setUsuarioID();
                    HabilitarChatUsuario();
                    LevantarVentanaSoporte();
                }
            });
        }
    });
});
// -------------------------------------------
function LlamadaJsonp(data, funcion) {
    $.getJSON(urlServidor, data, funcion);
}
// -------------------------------------------
function HabilitarChatUsuario() {
    var loop = new GenerarLoop(nombreUsuario, guidUsuario);
    loop.InicioEsperaMensajes();
}
// -------------------------------------------
function LevantarVentanaSoporte() {
    HablarConUsuario(guidOperador, nombreSoporte, saludoInicial);
}
// -------------------------------------------
function EnviarMensajePrivado(paraNombrePrivado, paraNombrePublico, mensaje) {
    setChatActivo("1");
    $.getJSON(urlServidor,
        {
            accion: "MensajePrivado",
            paraNombrePrivado: guidOperador,
            paraNombrePublico: nombreSoporte,
            desdeNombrePrivado: guidUsuario,
            desdeNombrePublico: nombreUsuario,
            empresa: guidCliente,
            direccion: 1,
            mensaje: mensaje
        },
        function (data) {
            var nada = "";
        }
    );
}


function GenerarLoop(nombrePublico, nombrePrivado) {
    this.IdUltimoMensaje = 0;
    this.nombrePublico = nombrePublico;
    this.nombrePrivado = nombrePrivado;
    this.ejecutando = true;
}
// -------------------------------------------
GenerarLoop.prototype.MensajeRecibido = function (mensaje) {
    switch (mensaje.Accion) {
        case "desconexion":
            UsuarioDesconectado(mensaje.DesdePrivado);
            break;
        default:
            RecibirMensaje(mensaje);
            break;
    }
}
// -------------------------------------------
GenerarLoop.prototype.MensajeNoEntregado = function () {
}
// -------------------------------------------
GenerarLoop.prototype.MensajeCancelado = function () {
}
// -------------------------------------------
GenerarLoop.prototype.TerminarEsperaMensajes = function () {
    this.ejecutando = false;
}
// -------------------------------------------
GenerarLoop.prototype.InicioEsperaMensajes = function () {
    this.ejecutando = true;
    this.EsperarMensajes();
}
// -------------------------------------------
GenerarLoop.prototype.EsperarMensajes = function () {
    var me = this;

    $.getJSON(urlManejadorEventos,
        {
            accion: "chatMensaje",
            nombrePrivado: this.nombrePrivado,
            IdUltimoMensaje: this.IdUltimoMensaje
        },
        function (mensajes) {
            if (mensajes != null && mensajes.length > 0) {
                var seguirEsperando = me.ejecutando;
                for (var i = 0; i < mensajes.length; i++) {
                    var mensaje = mensajes[i];
                    if (me.IdUltimoMensaje < mensaje.Id)
                        me.IdUltimoMensaje = mensaje.Id;
                    switch (mensaje.Accion.toLowerCase()) {
                        case "timedout":
                            me.MensajeNoEntregado();
                            break;
                        case "cancelado":
                            seguirEsperando = false;
                            me.MensajeCancelado();
                            break;
                        case "mensaje":
                            me.MensajeRecibido(mensaje.Mensaje);
                            break;
                    }
                }
                if (seguirEsperando) {
                    me.EsperarMensajes();
                }
            }

        });
}

// ----------------------------------------- //
function HablarConUsuario(nombrePrivado, nombrePublico) {
    CrearNuevaVentana(nombrePrivado, nombrePublico);
    $("#chat_" + nombrePrivado + " .ingreso_mensaje").focus();
}
// -------------------------------------------
function RecibirMensaje(mensaje) {
    CrearNuevaVentana(mensaje.DesdePrivado, mensaje.DesdePublico);

    $('#chat_' + mensaje.DesdePrivado + ' .cabecera').addClass('ingreso_mensaje_seleccionado');
    var mensajes = $("#chat_" + mensaje.DesdePrivado + " .conversacion").html();

    if (mensajes == null) {
        mensajes = "";
    }

    if (mensajes.length <= 0) {
        mensajes = "";
    }

    //mensajes += "Él :" + mensaje.Texto + "<br />";
    mensajes += mensaje.DesdePublico + " :" + mensaje.Texto + "<br />";

    GuardarCookie(mensaje.DesdePrivado, mensajes);

    $("#chat_" + mensaje.DesdePrivado + " .conversacion").html(mensajes);
    $("#chat_" + mensaje.DesdePrivado + " .conversacion").scrollTop($("#chat_" + mensaje.DesdePrivado + " .conversacion")[0].scrollHeight);
    $("#chat_" + mensaje.DesdePrivado).show();
}
// -------------------------------------------
function UsuarioDesconectado(nombrePrivado) {
    var bExiste = false;
    var mensaje = '<span style="color:red;"> ** El usuario se ha desconectado ** </span>';

    for (x in Ventanas) {
        if (Ventanas[x] == nombrePrivado) {
            nombrePrivado = Ventanas[x];
            bExiste = true;
            break;
        }
    }

    if (!bExiste) {
        return;
    }

    var mensajes = $("#chat_" + nombrePrivado + " .conversacion").html();

    if (mensajes.length <= 0) {
        mensajes = "";
    }

    mensajes += "<b>" + mensaje + "</b><br />";
    GuardarCookie(nombrePrivado, mensajes);

    $("#chat_" + nombrePrivado + " .conversacion").html(mensajes);
    $("#chat_" + nombrePrivado + " .conversacion").scrollTop($("#chat_" + nombrePrivado + " .conversacion")[0].scrollHeight);
    $("#chat_" + nombrePrivado).show();

}
// -------------------------------------------
function ActualizarMensajeEnvido(nombrePrivado, mensaje) {
    var mensajes = $("#chat_" + nombrePrivado + " .conversacion").html();

    if (mensajes.length <= 0) {
        mensajes = "";
    }

    mensajes += "<b> Yo:" + mensaje + "</b><br />";
    GuardarCookie(nombrePrivado, mensajes);

    $("#chat_" + nombrePrivado + " .conversacion").html(mensajes);
    $("#chat_" + nombrePrivado + " .conversacion").scrollTop($("#chat_" + nombrePrivado + " .conversacion")[0].scrollHeight);
    $("#chat_" + nombrePrivado).show();
}
// -------------------------------------------
function CrearNuevaVentana(nombrePrivado, nombrePublico) {
    var historialchat = CargarCookie(nombrePrivado);

    if (historialchat == null) {
        historialchat = saludoInicial + "</br>";
    }

    // si el usuario no tiene un chat abierto, crearlo.
    $(" <div />").attr("id", "chat_" + nombrePrivado)
	.addClass("chatbox")
	.html('<div class="cabecera">' +
    /* TITULO VENTANA*/
	           // '<div class="titulo_ventana">' + nombrePublico +
	           // '</div>' +

                '<div class="titulo_ventana"></div>' +


	            '<div class="opciones">' +
	                '<a href="javascript:void(0)" onclick="javascript:CerrarVentana(\'' + nombrePrivado + '\')"><img src="http://www.asistentevirtual.cl/App_Themes/chat/chat/alfa/close.png" border=0 /></a>' +
	            '</div>' +
	            '<br clear="all"/>' +
	        '</div>' +
	        '<div class="conversacion">' +
	        historialchat +
	        '</div>' +
	        '<div class="ingreso_ventana">' +
	            '<textarea class="ingreso_mensaje" onkeydown="javascript:return onKeyPressChat(event,this,\'' + nombrePrivado + '\',\'' + nombrePublico + '\');">' +
	            '</textarea>' +
            '</div>')
	.appendTo($("body"));

    // agregar estilo a la ventana recién
    $("#chat_" + nombrePrivado).css('bottom', '0px');

    $("#chat_" + nombrePrivado).css('right', '5px');

    $("#chat_" + nombrePrivado + " .ingreso_mensaje").blur(function () {
        $("#chat_" + nombrePrivado + " .ingreso_mensaje").removeClass('ingreso_mensaje_seleccionado');
    }).focus(function () {
        $('#chat_' + nombrePrivado + ' .cabecera').removeClass('ingreso_mensaje_seleccionado');
        $("#chat_" + nombrePrivado + " .ingreso_mensaje").addClass('ingreso_mensaje_seleccionado');
    });

    $("#chat_" + nombrePrivado).click(function () {
        if ($('#chat_' + nombrePrivado + ' .conversacion').css('display') != 'none') {
            $("#chat_" + nombrePrivado + " .ingreso_mensaje").focus();
        }
    });

    $("#chat_" + nombrePrivado).show();
}
// -------------------------------------------
function verChatActivo() {
    return CargarCookie(cookieChatActivo);
}
// -------------------------------------------
function setChatActivo(a) {
    GuardarCookie(cookieChatActivo, a);
}
// -------------------------------------------
function CerrarVentana(tituloVentana) {
    $('#chat_' + tituloVentana).css('display', 'none');
    //setChatActivo("1");
}
// -------------------------------------------
function onKeyPressChat(event, ingreso_mensaje, nombrePrivado, nombrePublico) {
    // se presionó ENTER
    if (event.keyCode == 13 && event.shiftKey == 0) {
        mensaje = $(ingreso_mensaje).val();
        mensaje = mensaje.replace(/^\s+|\s+$/g, "");

        $(ingreso_mensaje).val('');
        $(ingreso_mensaje).focus();
        $(ingreso_mensaje).css('height', '44px');

        if (mensaje != '') {
            EnviarMensajePrivado(nombrePrivado, nombrePublico, mensaje);
            ActualizarMensajeEnvido(nombrePrivado, mensaje)
        }
        return false;
    }

    // 
    var altotexto = ingreso_mensaje.clientHeight;
    var altomaximo = 94;

    if (altomaximo > altotexto) {
        altotexto = Math.max(ingreso_mensaje.scrollHeight, altotexto);
        if (altomaximo)
            altotexto = Math.min(altotexto, altotexto);
        if (altotexto > ingreso_mensaje.clientHeight)
            $(ingreso_mensaje).css('height', altotexto + 8 + 'px');
    } else {
        $(ingreso_mensaje).css('overflow', 'auto');
    }
}
// -------------------------------------------
function CargarCookie(variable) {
    var inicio = document.cookie.indexOf(variable + '=');
    var largo = inicio + variable.length + 1;

    if ((!inicio) && (variable != document.cookie.substring(0, variable.length))) {
        return null;
    }

    if (inicio == -1) {
        return null;
    }

    var fin = document.cookie.indexOf(';', largo);
    if (fin == -1) {
        fin = document.cookie.length;
    }

    return unescape(document.cookie.substring(largo, fin));
}
// -------------------------------------------
function GuardarCookie(variable, valor, expira, path, domain, secure) {
    var _cookie = variable + '=' + escape(valor) +
       ((expira) ? ';expires=' + expira.toGMTString() : '') +
       ((path) ? ';path=' + path : '') +
       ((domain) ? ';domain=' + domain : '') +
       ((secure) ? ';secure' : '');

    document.cookie = _cookie;
}
// -------------------------------------------
function EliminarCookie(variable, path, domain) {
    if (CargarCookie(variable)) {
        document.cookie = variable + '=' +
            ((path) ? ';path=' + path : '') +
            ((domain) ? ';domain=' + domain : '') +
            ';expires=Thu, 01-Jan-70 00:00:01 GMT';
    }
}
// -------------------------------------------
function calcularFechaExpiracion() {
    var fechaHoy = new Date();
    var sinFecha = new Date(0, 0, 0);
    var fechaActual = fechaHoy.getTime() - sinFecha.getTime();

    fechaHoy.setTime(fechaActual);

    return new Date(fechaHoy.getTime() + (8 * 7 * 86400000));
}
// -------------------------------------------
function leerUsuarioID() {
    var usuarioID = CargarCookie(cookieUsuarioID);
    return usuarioID;
}
// -------------------------------------------
function setUsuarioID() {
    GuardarCookie(cookieUsuarioID, guidUsuario);
}


