
votingsInit();


// ---------------------------------------------------------------------------------------------------------------


// выбирает какое голосование загрузить и загружает его
//
function votingsInit()
{
    //
    // select vote
    //
    var voteId = votingsSelectVote();

    if (voteId == -1) {
        // do nothing
        return;
    }

    //
    // load selected vote
    //
    votingsLoadVote(voteId);
}
// votingsInit


// ---------------------------------------------------------------------------------------------------------------


// подгружает аяксом голосование с указанным айдишником
//
function votingsLoadVote(voteId)
{
    var container = document.getElementById('voteContainer');
    var urlPattern = document.getElementById('voteUrlQuestions').value;
    var url = urlPattern.replace(/%voteid%/g, voteId);

    // do ajax request
    var request = createXMLHttp();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            if(request.status == 200) {
                container.innerHTML = request.responseText;
                container.style.display = "block";
            }
        }
    }
   request.send(null);
}
// votingsLoadVote


// ---------------------------------------------------------------------------------------------------------------


// находит инпут со списком голосований (формат: <qid>:<rank>[,...])
// и рандомно выбирает из него один возвращает айдишник голосования
//
function votingsSelectVote()
{
    var voteList = document.getElementById('voteList').value;
    if (voteList.length == 0) return -1;
    voteList = voteList.split(',');
    
    // берём рандомное голосование из списка и смотрим, голосовал ли уже юзер?
    // если голосовал, то удаляем голосование из списка и продолжаем цикл.
    //
    // TODO: переделать алгоритм, когда будем использовать ранк
    //
    while(voteList.length > 0) {
        var index = Math.floor(Math.random() * voteList.length);
        // if user not voted yet
        var voting = voteList[index].split(':');
        if (votingsRemeberVoting(voting[0]) == false) {
            return voting[0];
        }
        voteList.splice(index, 1);
    }
    return -1;
}
// votingsSelectVote


// ---------------------------------------------------------------------------------------------------------------


// проверяет ввод пользователя 
// отправляет голос на сервер аяксом, загружая при этом результаты
// выводит результаты голосования
// запоминает юзера и его ответ
//
function votingsSubmit(voteId)
{
    //
    // check answers
    //
    var container = document.getElementById('voteContainer');
    var inputs = container.getElementsByTagName('input')

    // only radios!!!
    var answer = null;
    for(var i=inputs.length-1; i>=0; i--) {
        if (inputs[i].type != 'radio') continue;
        if (inputs[i].checked) {
            answer = inputs[i].value;
            break;
        }
    }

    if (answer == null) {
        return;
    }


    //
    // send and show answers
    //
    var urlPattern = document.getElementById('voteUrlAnswers').value;
    var url = urlPattern.replace(/%voteid%/g, voteId).replace(/%answer%/g, answer);

    // GA (02.02.2010 R)
    questionValue = document.getElementById('questionText').innerHTML;
    answerValue = document.getElementById('aText' + answer).innerHTML;
    pageTracker._trackEvent('Vote', questionValue, answerValue);
    //

    // do ajax request
    var request = createXMLHttp();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            if(request.status == 200) {
                container.innerHTML = request.responseText;
                // remeber user vote
                votingsMemorizeVoting(voteId, answer);
                
                // hide next-vote if current was last vote
                var voteNext = document.getElementById('voteNext');
                var voteNextId = votingsSelectVote();
                if (voteNextId == -1) {
                    voteNext.style.display = 'none';
                } else {
                    voteNext.onclick = function(e) {
                        votingsLoadVote(voteNextId);
                        return false;
                    }
                }
            }
        }
    }
   
    request.send(null);
}
// votingsSubmit


// ---------------------------------------------------------------------------------------------------------------


// записывает в куки голосование, на которое ответил юзер, чтоб оно больше не появлялось
//
function votingsMemorizeVoting(voteId, answer)
{
    var date = new Date();
    date.setTime(date.getTime()+(356*24*60*60*1000)); // one year
    var expires = date.toGMTString();
    document.cookie = 
        'votings_vote_' + voteId + '=' + answer +
        '; expires=' + expires +
        '; path=/';
}
// votingsMemorizeVoting


// ---------------------------------------------------------------------------------------------------------------


// смотрит, есть ли в куках это голосование?:
//
function votingsRemeberVoting(voteId)
{
    var coo = document.cookie.split(';');
    for (var i=0; i<coo.length; i++) {
        if (coo[i].indexOf('votings_vote_'+voteId) >= 0) return true;
    }
    return false;
}
// votingsRemeberVoting


// ---------------------------------------------------------------------------------------------------------------


if (typeof createXMLHttp == "undefined") {
    createXMLHttp =  function()
    {
        if(typeof XMLHttpRequest != "undefined") {
            return new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
                            "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
                            "Microsoft.XMLHttp"
            ];
            for (var i = 0; i < aVersions.length; i++) {
                try {
                    var oXmlHttp = new ActiveXObject(aVersions[i]);
                    //alert(aVersions[i]);
                    return oXmlHttp;
                } catch (oError) {
                }
            }
            throw new Error("Невозможно создать объект XMLHttp.");
        }
    }
}


