﻿/********************************************************************************* chat */

function refreshChatThenSetTimer(firstTime)
{
    var url = "ChatRequest.ashx?firstTime=" + (firstTime ? 'true' : 'false') + '&date=' + getDateUrlVar();

    var ajaxGet = newAjaxObject();
    ajaxGet.onreadystatechange = function() { if (ajaxGet.readyState == 4 && ajaxGet.status == 200) { updateHtmlDiv(ajaxGet); } }
    ajaxGet.open("GET", url, true);
    ajaxGet.send(null);

    setTimeout('refreshChatThenSetTimer(false);', 5000);
}

function updateHtmlDiv(obj)
{
    var xmlDoc = obj.responseXML.documentElement;
    var count = xmlDoc.getElementsByTagName("count")[0].childNodes[0].nodeValue;

    var bodyNodesCount = xmlDoc.getElementsByTagName("body")[0].childNodes.length;
    var body = '';
    for (var i = 0; i < bodyNodesCount; i++)
    {
        var subBody = xmlDoc.getElementsByTagName("body")[0].childNodes[i].nodeValue;
        body += subBody;
    }
    body = Base64.decode(body);

    if (body.length > 0)
    {
        var div = document.getElementById('chatBody');
        div.innerHTML += body;
    }
    div.scrollTop = div.scrollHeight;
}

function myEventHandler(e)
{
    if (e.type == "keydown" && e.keyCode == 13)
    {
        var iframe = document.getElementById('ctl00_ContentPlaceHolder1_messageTextArea_ifr');
        var tinyMceControl = iframe.contentWindow.document.body;
        var message = tinyMCE.activeEditor.getContent();

        if (message.length > 1000)
        {
            alert('Mesajul nu trebuie sa depaseasca 1000 caractere. Tu ai ' + message.length + ' caractere.');
            return false;
        }
        else if (message.length > 0)
        {
            message = Base64.encode(message);
            tinyMCE.activeEditor.setContent('');

            var parameters = 'message=' + message + '&date=' + getDateUrlVar();
            var url = "ChatRequest.ashx?date=" + getDateUrlVar();

            var ajaxPost = newAjaxObject();
            ajaxPost.onreadystatechange = function() { if (ajaxPost.readyState == 4 && ajaxPost.status == 200) { updateHtmlDiv(ajaxPost); } }
            ajaxPost.open("POST", url, true);
            ajaxPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            ajaxPost.setRequestHeader("Content-Length", parameters.length);
            ajaxPost.setRequestHeader("Connection", "close");
            ajaxPost.send(parameters);
        }
        return false;
    }
    return true;
}

function getDateUrlVar()
{
    var date = new Date();
    var str = '';
    str = str + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds();
    return str;
}

/********************************************************************************* ajax */

function newAjaxObject()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        alert("Your browser does not support XMLHTTP!");
    }
    return xmlhttp;
}

/********************************************************************************* base64 encoding / decoding */

var Base64 = {

    base64s: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",

    encode: function(decStr) {
        if (typeof btoa === 'function') {
            return btoa(decStr);
        }
        var base64s = this.base64s;
        var bits;
        var dual;
        var i = 0;
        var encOut = "";
        while (decStr.length >= i + 3) {
            bits = (decStr.charCodeAt(i++) & 0xff) << 16 | (decStr.charCodeAt(i++) & 0xff) << 8 | decStr.charCodeAt(i++) & 0xff;
            encOut += base64s.charAt((bits & 0x00fc0000) >> 18) + base64s.charAt((bits & 0x0003f000) >> 12) + base64s.charAt((bits & 0x00000fc0) >> 6) + base64s.charAt((bits & 0x0000003f));
        }
        if (decStr.length - i > 0 && decStr.length - i < 3) {
            dual = Boolean(decStr.length - i - 1);
            bits = ((decStr.charCodeAt(i++) & 0xff) << 16) | (dual ? (decStr.charCodeAt(i) & 0xff) << 8 : 0);
            encOut += base64s.charAt((bits & 0x00fc0000) >> 18) + base64s.charAt((bits & 0x0003f000) >> 12) + (dual ? base64s.charAt((bits & 0x00000fc0) >> 6) : '=') + '=';
        }
        return (encOut);
    },

    decode: function(encStr) {
        if (typeof atob === 'function') {
            return atob(encStr);
        }
        var base64s = this.base64s;
        var bits;
        var decOut = "";
        var i = 0;
        for (; i < encStr.length; i += 4) {
            bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) << 18 | (base64s.indexOf(encStr.charAt(i + 1)) & 0xff) << 12 | (base64s.indexOf(encStr.charAt(i + 2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i + 3)) & 0xff;
            decOut += String.fromCharCode((bits & 0xff0000) >> 16, (bits & 0xff00) >> 8, bits & 0xff);
        }
        if (encStr.charCodeAt(i - 2) == 61) {
            return (decOut.substring(0, decOut.length - 2));
        }
        else if (encStr.charCodeAt(i - 1) == 61) {
            return (decOut.substring(0, decOut.length - 1));
        }
        else{
            return (decOut);
        }
    }
};



