// ---------------------------------------------------------------------------------------------------------------


// выбирает какое голосование загрузить и загружает его
// voted = {hide|show-result} - если проголосовано: скрыть (hide) или показать результат (show-result)
function votingsInit(voted)
{
    //
    // select vote
    //
    var voteId = votingsSelectVote(voted);

    if (voteId == -1) {
        return; // do nothing
    }

    //
    // load voted result or selected vote
    //
    if (voteId < -1) votingsResult(voteId);
    else votingsLoadVote(voteId);
}
// votingsInit


// ---------------------------------------------------------------------------------------------------------------


// подгружает аяксом голосование с указанным айдишником
//
function votingsLoadVote(voteId)
{
    var container = document.getElementById('voteContainer');
    var urlPattern = document.getElementById('voteUrlInit').value;
    var url = urlPattern.replace(/%voteid%/g, voteId);
    
    try{ votingsWaiting(voteId) } catch(err) { /**/ }; 
    
    
    // do ajax request
    var myAjax = new Ajax.Request(url,
    {
        method:'get',
        onLoading: function (transport) {  
            voteOnLoading();           
        }, 
        onSuccess: function(transport) {
            voteOnSuccess();
            var containerHTML = transport.responseText;
            container.innerHTML = containerHTML;
            container.style.display = "block";
            
            document.getElementById('votePoint'+voteId).className='unvoted1';
            //document.getElementById('votePoint'+voteId).style.backgroundPositionX = "32px";
            //document.getElementById('votePoint'+voteId).style.backgroundPosition = "-29px 50%";
            //
        },
        onFailure: function() {
           
        }
    });
  
   //request.send(null);
}
// votingsLoadVote


// ---------------------------------------------------------------------------------------------------------------

// находит инпут со списком голосований (формат: <qid>:<rank>[,...])
// и рандомно выбирает из него один возвращает айдишник голосования
//
function votingsSelectVote(voted)
{
    
    var voteList = document.getElementById('voteList').value;
    if (voteList.length == 0) return -1;
    voteList = voteList.split(',');
    
     //подкрашиваем проголосованные
    try{ 
        var points = document.getElementById('votePoints').getElementsByTagName('span');
        for(var n=0; n<points.length; n++) {
            if (votingsRemeberVoting(points[n].getAttribute('voteCurId')) == true)
            {
                //alert(n);
                points[n].className='voted0';
                //points[n].style.backgroundPosition = "-14px 50%";
            }
        }
    } catch(err) { /**/ };
    
    // берём рандомное голосование из списка и смотрим, голосовал ли уже юзер?
    // если голосовал, то удаляем голосование из списка и продолжаем цикл.
    //
    // 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 || voted=='show-result') {
            if (votingsRemeberVoting(voting[0]) == true && voted=='show-result') return voting[0] * -1;
            else 
            {
                //document.getElementById('votePoint'+voting[0]).className='cGreen';
                //alert(document.getElementById('votePoint'+voting[0]).className);
                return voting[0];
            }
        }
        //alert(voteList);
        voteList.splice(index, 1);
    }
    return -1;
}
// votingsSelectVote

function votingsNextVote(votePosition)
{

    //alert('votingsNextVote');
    var container = document.getElementById('votePoints');
    var points = container.getElementsByTagName('span')
    //alert(points[0].getAttribute('voteCurId'));
    
    
    var CurrVotePosition;
    
    for(var n=0; n<points.length; n++) {
        //находим текущее
        if (points[n].className=='unvoted1' || points[n].className=='voted1') {
            CurrVotePosition = n;
            break;
        }
    }

    
    //если текущее не последнее, тогда вперёд, иначе назад.
    var NextVotePosition;
    
    if (CurrVotePosition == points.length - 1) 
        NextVotePosition = 0;
    else 
        NextVotePosition = CurrVotePosition + 1;

    //переопределяем NextVotePosition, если клик на конкретном голосовании
    if (votePosition) NextVotePosition = votePosition;
    
    //alert(CurrVotePosition + '/' + NextVotePosition);

    //возврат текущего в исходное состояние
    if (votingsRemeberVoting(points[CurrVotePosition].getAttribute('voteCurId')) == false) 
        points[CurrVotePosition].className = 'unvoted0';
    else
        points[CurrVotePosition].className = 'voted0';
        
    //следующее проголосовано или нет
    if (points[NextVotePosition].className == 'voted0') 
        votingsResult( points[NextVotePosition].getAttribute('voteCurId'), '/nv/1' ); // загружаем ответы
    else
        votingsLoadVote( points[NextVotePosition].getAttribute('voteCurId') );  // загружаем вопрос           
}

function votingsNextVoteSkipVoted()
{
    //alert('votingsNextVote');
    var container = document.getElementById('votePoints');
    var points = container.getElementsByTagName('span')
    //alert(points[0].getAttribute('voteCurId'));
    
    for(var i=points.length-1; i>=0; i--) {
        if (votingsRemeberVoting(points[i].getAttribute('voteCurId')) == true)
        {
            points[i].className='c_ccc';
        }
    }
    for(var i=points.length-1; i>=0; i--) {
        if (points[i].className=='cGreen') {
            points[i].className='c_999';
            
            //next
           for(var ii=i+1; ii<=points.length-1; ii++) {
                if (points[ii].className != 'c_ccc')
                {
                    votingsLoadVote( points[ii].getAttribute('voteCurId') );
                    var i=-1; //stop search
                    break;
                }
           }
           
           //preview if no next
           for(var ii=0; ii<=i; ii++) {
            if (points[ii].className != 'c_ccc')
                {
                    votingsLoadVote(points[ii].getAttribute('voteCurId'));
                    break;
                }
           }
        }
    }
}
// ---------------------------------------------------------------------------------------------------------------


// проверяет ввод пользователя 
// отправляет голос на сервер аяксом, загружая при этом результаты
// выводит результаты голосования
// запоминает юзера и его ответ
//
function votingsSubmit(voteId)
{
    //
    // check answers
    //
    var container = document.getElementById('voteContainer');
    var inputs = container.getElementsByTagName('input')
    
    var answer = 1;
    var params = '';
    for(var i=inputs.length-1; i>=0; i--) {
        if (inputs[i].checked) {
           params += '&' + inputs[i].name + '=' + inputs[i].value;
            //break;
        }
    }
    
    if (params=='') 
    {
        votingsResult(voteId);
        return;
    }
    //
    // send and show answers
    //
    var urlPattern = document.getElementById('voteUrlAnswers').value;
    var url = urlPattern.replace(/%voteid%/g, voteId).replace(/%answer%/g, answer);
    //alert(url);
    // GA (02.02.2010 R)
    //questionValue = document.getElementById('questionText').innerHTML;
    //answerValue = document.getElementById('aText' + answer).innerHTML;
    //pageTracker._trackEvent('Vote', questionValue, answerValue);
    //
    
	try{ document.getElementById('votePoint'+voteId).className='voted1'; } catch(err) { /**/ }; 
    
    //alert(params);
    //return false;
    // do ajax request
    var myAjax = new Ajax.Request(url,
    {
        //method:'get',
        method: 'post',
        parameters: params,
        //parameters: Form.serialize("voteForm"),
        //parameters: $('voteForm').serialize(false),
        //asynchronous: true,
        onLoading: function (transport) {  
            voteOnLoading();  
        },         
        onSuccess: function(transport) {
            voteOnSuccess();
            var containerHTML = transport.responseText;
            container.innerHTML = containerHTML;
            // 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;
                }
            }*/
        },
        onFailure: function() {
           
        }
    });
    //request.send(null);
}
// votingsSubmit

function votingsResult(voteId, addURLparams)
{
    if (addURLparams) addURLparams = addURLparams;
    else addURLparams='';
    
    var container = document.getElementById('voteContainer');
    var inputs = container.getElementsByTagName('input')
    
    if (voteId < 0) 
    { 
        answer = -1;
        voteId= voteId * -1;
    }
    else answer = 0;
    
	try{ document.getElementById('votePoint'+voteId).className='voted1'; } catch(err) { /**/ }; 
    
    var urlPattern = document.getElementById('voteUrlAnswers').value;
    var url = urlPattern.replace(/%voteid%/g, voteId).replace(/%answer%/g, answer);
    var myAjax = new Ajax.Request(url + addURLparams,
    {
        method:'get',
        onLoading: function (transport) {  
            voteOnLoading();  
        },   
        onSuccess: function(transport) {
            voteOnSuccess();
            var containerHTML = transport.responseText;
            container.innerHTML = containerHTML;
            container.style.display = "block";
            
        },
        onFailure: function() {
           
        }
    });
    //request.send(null);
}

function voteOnLoading()
{
    $('vodeLoaderMask').style.visibility='hidden';
    $('vodeLoaderSing').className='vote-loading';   
}
function voteOnSuccess()
{
    $('vodeLoaderSing').className='';
    $('vodeLoaderMask').style.visibility='visible';
}

function votingsWaiting(voteId)
{
    //document.getElementById('vote-hrefs-'+voteId).innerHTML='<img src="/images/ajax-loader-indicator-white.gif" width="16" height="16"/> <em>Идёт загрузка...</em>';
}
// ---------------------------------------------------------------------------------------------------------------


// записывает в куки голосование, на которое ответил юзер, чтоб оно больше не появлялось
//
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


// ---------------------------------------------------------------------------------------------------------------
