var msg_req, loop_req, dialog_req, close_req;
var loop_url, close_url, dialog_url;
var msg_url = 'send_msg.php?';
var url = 'ajax_index.php?';
var counter = 0;
var timer, cookie, user_login;
if( document.cookie != null ){
    cookie = document.cookie.match(/ZAYCEVNETIDmember_id=\d+/);
}
if( cookie != null ){
    user_login = cookie.toString().substring(21);
} else {
    user_login = 0;
}

function maximize(id) {
    var dialog_id    = "dialog."+id;
    var container_id = "container."+id;
    var history_id   = "historytext."+id;
    var chat = document.getElementById(dialog_id);
    var container = document.getElementById(container_id);
    var history   = document.getElementById(history_id);
    chat.style.display = "block";
    container.style.background="";
    container.style.backgroundColor = "#CCCCCC";
    history.scrollTop = history.scrollHeight;
}

function minimize(id) {
    var dialog_id    = "dialog."+id;
    var container_id = "container."+id;
    var chat = document.getElementById(dialog_id);
    var container = document.getElementById(container_id);
    chat.style.display = "none";
    container.style.background="";
    container.style.backgroundColor = "#CCCCCC";
}

function blink(id) {
    var dialog_id    = "dialog."+id;
    var container_id = "container."+id;
    var chat = document.getElementById(dialog_id);
    var container = document.getElementById(container_id);
    if (chat.style.display == "none") {
        container.style.background = "#CCCCCC url(template/i/blink.gif) no-repeat scroll left top";
    }
}

function close_dialog(id) {
    var wrapper = document.getElementById('wrapper');
    var dialog_id    = "dialog."+id;
    var container_id = "container."+id;
    var chat = document.getElementById(dialog_id);
    var container = document.getElementById(container_id);
    var str;
    container.style.display = "none";
    chat.style.display = "none";
    container.innerHTML = "";
    chat.innerHTML = "";
    // Сдвиг остальных окон при закрытии одного
    var element = chat.nextSibling;
    wrapper.removeChild(chat);
    wrapper.removeChild(container);
    while (element) {
        if (element.nodeType == 1) {
            str = element.style.right;
            str = str.substring(0, str.length-2);
            if (str<120)
                break;
            element.style.right = (str - 120)+"px";
        }
        element = element.nextSibling;
    }
    // Удаление cookies
    close_url = url + "del_id="+id;
    if (window.XMLHttpRequest) {
        close_req = new XMLHttpRequest();
        close_req.onreadystatechange = processClose;
        close_req.open("GET", close_url, true);
        close_req.send(null);
    }
    else if (window.ActiveXObject) {
        close_req = new ActiveXObject("Msxml2.XMLHTTP");
        if (!close_req) {
            close_req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        close_req.onreadystatechange = processClose;
        close_req.open("GET", close_url, true);
        close_req.send();
    }
}

function processClose() {
    if (close_req.readyState == 4) { // если выполнен
        if (close_req.status == 200) { // если успешно
            var result = close_req.responseText;
            if(!close_req.getResponseHeader("Date")) { // Запрос закеширован, посылаем еще раз
                var ifModifiedSince = new Date(0); // 01.01.1970
                close_req = new XMLHttpRequest();
                close_req.onreadystatechange = processClose;
                close_req.open("GET", close_url, true);
                close_req.setRequestHeader("If-Modified-Since", ifModifiedSince);
                close_req.send(null);
            }
        }
    }
}

function sendMsg(name, from, to) {
    var history_id   = "historytext."+to;
    var textarea_id  = "text."+to;
    var history = document.getElementById(history_id);
    var textarea = document.getElementById(textarea_id);
    if (textarea.value == "")
        return;

    history.value += "\n"+ name +" ("+ makeTimestring() +"):\n"+ textarea.value+"\n";
    history.scrollTop = history.scrollHeight;
    msg_url += "from="+from+"&to="+to+"&msg="+encodeURIComponent(textarea.value);
    textarea.value = "";

    if (window.XMLHttpRequest) {
        msg_req = new XMLHttpRequest();
        msg_req.onreadystatechange = processNewMessage;
        msg_req.open("GET", msg_url, true);
        msg_req.send(null);
    }
    else if (window.ActiveXObject) {
        msg_req = new ActiveXObject("Msxml2.XMLHTTP");
        if (!msg_req) {
            msg_req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        msg_req.onreadystatechange = processNewMessage;
        msg_req.open("GET", msg_url, true);
        msg_req.send();
    }
}

function processNewMessage() { // Если ничего не делать, может просто сделать пустую?
    if (msg_req.readyState == 4) { // если выполнен
        if (msg_req.status == 200) { // если успешно
            var result = msg_req.responseText;
        }
    }
}

function newDialog(sender_id) { // Инициализация окна средствами JS
    dialog_url = url + "sender_id="+sender_id;

    if (window.XMLHttpRequest) {
        dialog_req = new XMLHttpRequest();
        dialog_req.onreadystatechange = processNewDialog;
        dialog_req.open("GET", dialog_url, true);
        dialog_req.send(null);
    }
    else if (window.ActiveXObject) {
        dialog_req = new ActiveXObject("Msxml2.XMLHTTP");
        if (!dialog_req) {
            dialog_req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        dialog_req.onreadystatechange = processNewDialog;
        dialog_req.open("GET", dialog_url, true);
        dialog_req.send();
    }
}

function processNewDialog() {
    if (dialog_req.readyState == 4) { // если выполнен
        if (dialog_req.status == 200) { // если успешно
            if(!dialog_req.getResponseHeader("Date")) { // Запрос закеширован, посылаем еще раз
                var ifModifiedSince = new Date(0); // 01.01.1970
                dialog_req = new XMLHttpRequest();
                dialog_req.onreadystatechange = processNewDialog;
                dialog_req.open("GET", dialog_url, true);
                dialog_req.setRequestHeader("If-Modified-Since", ifModifiedSince);
                dialog_req.send(null);
            }
            else {
                var response = dialog_req.responseText;
                var wrapper = document.getElementById('wrapper');

                response = JSON.parse(response);
                try {
                    wrapper.insert(response);
                } catch (e) {
                    wrapper.innerHTML += response.toString();
                }
            }
        }
    }
}

function mainLoop() { // Вызывается 1 раз при загрузке окна, считывает cookies и запускает loop()
    if (user_login>0) // авторизован
        loop();
}

function loop() { // Проверка новых сообщений, посылка id собеседника
    loop_url = url + "member_id="+user_login;

    if (window.XMLHttpRequest) {
        loop_req = new XMLHttpRequest();
        loop_req.onreadystatechange = processMsgReceived;
        loop_req.open("GET", loop_url, true);
        loop_req.send(null);
    }
    else if (window.ActiveXObject) {
        loop_req = new ActiveXObject("Msxml2.XMLHTTP");
        if (!loop_req) {
            loop_req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        loop_req.onreadystatechange = processMsgReceived;
        loop_req.open("GET", loop_url, true);
        loop_req.send();
    }
    if (counter<300) {
        timer = setTimeout("loop()", 10000); // 2 раза в минуту
        counter++;
    }
}

function processMsgReceived() {
    if (loop_req.readyState == 4) {
        if (loop_req.status == 200) {
            var result = loop_req.responseText;
            if(!loop_req.getResponseHeader("Date")) { // Запрос закеширован, посылаем еще раз
                var ifModifiedSince = new Date(0); // 01.01.1970
                loop_req = new XMLHttpRequest();
                loop_req.onreadystatechange = processMsgReceived;
                loop_req.open("GET", loop_url, true);
                loop_req.setRequestHeader("If-Modified-Since", ifModifiedSince);
                loop_req.send(null);
            } else if (result) {
                if (JSON.parse(result) == "no") {
                    clearTimeout(timer);
                    return;
                }
                result = result.substr(2, result.length-4);
                var array = result.split("},{");
                var msg = "";
                for (var i=0;i<array.length && array[i];i++) {
                    msg = JSON.parse("{"+array[i]+"}");
                    var history_id = "historytext."+msg.from_id;
                    var history = document.getElementById(history_id);
                    if (!history)
                        newDialog(msg.from_id);
                    else
                        blink(msg.from_id);
                    history.value += "\n"+ msg.from_login +" ("+ msg.msg_date +"):\n"+ msg.message+"\n";
                    history.scrollTop = history.scrollHeight;
                }
            }
        }
    }
}

function makeTimestring() {
    var timestamp = new Date();
    var timestring = "";
    var month = timestamp.getMonth()+1;
    var minutes = timestamp.getMinutes();
    var seconds = timestamp.getSeconds();

    if (month < 10) month="0"+month;
    if (minutes < 10) minutes="0"+minutes;
    if (seconds < 10) seconds="0"+seconds;
    timestring = timestamp.getFullYear()+"-"+ month +"-" + timestamp.getDate()
                 +" "+ timestamp.getHours() +":"+ minutes +":"+ seconds;
    return timestring;
}

function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}
